From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id F233B6E4E6 for ; Fri, 26 Jan 2018 10:24:05 +0000 (UTC) Message-ID: <1516962243.2602.8.camel@intel.com> From: Mika Kahola Date: Fri, 26 Jan 2018 12:24:03 +0200 In-Reply-To: <441aaac8-03bf-56f7-6fec-2a81e0bb5bc7@linux.intel.com> References: <20180123125642.58698-1-maarten.lankhorst@linux.intel.com> <20180123125642.58698-4-maarten.lankhorst@linux.intel.com> <1516957215.2602.5.camel@intel.com> <441aaac8-03bf-56f7-6fec-2a81e0bb5bc7@linux.intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 3/8] lib/fb: Handle planar formats in igt_calc_fb_size and create_bo_for_fb List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: mika.kahola@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , igt-dev@lists.freedesktop.org List-ID: T24gRnJpLCAyMDE4LTAxLTI2IGF0IDExOjIwICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBPcCAyNi0wMS0xOCBvbSAxMDowMCBzY2hyZWVmIE1pa2EgS2Fob2xhOgo+ID4gCj4gPiBP biBUdWUsIDIwMTgtMDEtMjMgYXQgMTM6NTYgKzAxMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3Rl Ogo+ID4gPiAKPiA+ID4gQnkgYWRkaW5nIHN1cHBvcnQgZm9yIHBsYW5hciBmb3JtYXRzIHRvIGln dF9jYWxjX2ZiX3NpemUgYW5kCj4gPiA+IGNyZWF0ZV9ib19mb3JfZmIsCj4gPiA+IHdlIGNhbiBj YWxjdWxhdGUgZGltZW5zaW9ucyBhbmQgY3JlYXRlIGJhY2tpbmcgc3RvcmFnZSBmb3IgcGxhbmFy Cj4gPiA+IGZyYW1lYnVmZmVycy4KPiA+ID4gCj4gPiA+IFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFk ZGluZyBzdXBwb3J0IHRvIGNyZWF0ZSBwbGFuYXIgZnJhbWVidWZmZXJzCj4gPiA+IGluCj4gPiA+ IHRoZSBuZXh0IHBhdGNoLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5r aG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmMKPiA+ID4gb20+Cj4gPiA+IC0t LQo+ID4gPiDCoGxpYi9pZ3RfZmIuYyB8IDE2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gPiA+IC0tLS0KPiA+ID4gLS0tLS0tLS0tLS0tCj4gPiA+IMKgMSBm aWxlIGNoYW5nZWQsIDEyMyBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKPiA+ID4gCj4g PiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ZiLmMgYi9saWIvaWd0X2ZiLmMKPiA+ID4gaW5kZXgg ZGEwN2QxYTllMjFmLi42YTMzMWYwNjcyNGIgMTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYi9pZ3RfZmIu Ywo+ID4gPiArKysgYi9saWIvaWd0X2ZiLmMKPiA+ID4gQEAgLTU0LDE0ICs1NCwxNiBAQAo+ID4g PiDCoCAqLwo+ID4gPiDCoAo+ID4gPiDCoC8qIGRybSBmb3VyY2MvY2Fpcm8gZm9ybWF0IG1hcHMg Ki8KPiA+ID4gLSNkZWZpbmUgREYoZGlkLCBjaWQsIF9icHAsIF9kZXB0aCkJXAo+ID4gPiAtCXsg RFJNX0ZPUk1BVF8jI2RpZCwgQ0FJUk9fRk9STUFUXyMjY2lkLCAjIGRpZCwgX2JwcCwKPiA+ID4g X2RlcHRoCj4gPiA+IH0KPiA+ID4gKyNkZWZpbmUgREYoZGlkLCBjaWQsIC4uLikJXAo+ID4gPiAr CXsgRFJNX0ZPUk1BVF8jI2RpZCwgQ0FJUk9fRk9STUFUXyMjY2lkLCAjIGRpZCwKPiA+ID4gX19W QV9BUkdTX18gfQo+ID4gPiDCoHN0YXRpYyBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0IHsKPiA+ ID4gwqAJdWludDMyX3QgZHJtX2lkOwo+ID4gPiDCoAljYWlyb19mb3JtYXRfdCBjYWlyb19pZDsK PiA+ID4gwqAJY29uc3QgY2hhciAqbmFtZTsKPiA+ID4gwqAJaW50IGJwcDsKPiA+ID4gwqAJaW50 IGRlcHRoOwo+ID4gPiArCWludCBwbGFuZXM7Cj4gPiA+ICsJaW50IHBsYW5lX2JwcFs0XTsKPiA+ IHNob3VsZCB3ZSBkZWZpbmUgYSBtYXggdmFsdWUgZm9yIHRoaXMgaW5zdGVhZCBvZiBoYXJkY29k ZWQgb25lPwo+IDQgcGxhbmVzIGlzIHRoZSBtYXhpbXVtIGV2ZXIuIEFscGhhLCBSLCBHIGFuZCBC LgpZZXMsIGJ1dCBldmVuIHNvIEknbSBub3QgcmVhbGx5IGEgZmFuIG9mIGhhcmNvZGVkIHZhbHVl cy4KPiA+IAo+ID4gPiAKPiA+ID4gwqB9IGZvcm1hdF9kZXNjW10gPSB7Cj4gPiA+IMKgCURGKFJH QjU2NSwJUkdCMTZfNTY1LAkxNiwgMTYpLAo+ID4gPiDCoAkvL0RGKFJHQjg4OCwJSU5WQUxJRCwJ MjQsIDI0KSwKPiA+ID4gQEAgLTc0LDYgKzc2LDIwIEBAIHN0YXRpYyBzdHJ1Y3QgZm9ybWF0X2Rl c2Nfc3RydWN0IHsKPiA+ID4gwqAjZGVmaW5lIGZvcl9lYWNoX2Zvcm1hdChmKQlcCj4gPiA+IMKg CWZvciAoZiA9IGZvcm1hdF9kZXNjOyBmIC0gZm9ybWF0X2Rlc2MgPAo+ID4gPiBBUlJBWV9TSVpF KGZvcm1hdF9kZXNjKTsgZisrKQo+ID4gPiDCoAo+ID4gPiArc3RhdGljIHN0cnVjdCBmb3JtYXRf ZGVzY19zdHJ1Y3QgKmxvb2t1cF9kcm1fZm9ybWF0KHVpbnQzMl90Cj4gPiA+IGRybV9mb3JtYXQp Cj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0Owo+ID4g PiArCj4gPiA+ICsJZm9yX2VhY2hfZm9ybWF0KGZvcm1hdCkgewo+ID4gPiArCQlpZiAoZm9ybWF0 LT5kcm1faWQgIT0gZHJtX2Zvcm1hdCkKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ ICsJCXJldHVybiBmb3JtYXQ7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIE5VTEw7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gwqAvKioKPiA+ID4gwqAgKiBpZ3RfZ2V0X2ZiX3RpbGVf c2l6ZToKPiA+ID4gwqAgKiBAZmQ6IHRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yCj4gPiA+IEBAIC0x NDIsMjcgKzE1OCw2OCBAQCB2b2lkIGlndF9nZXRfZmJfdGlsZV9zaXplKGludCBmZCwgdWludDY0 X3QKPiA+ID4gdGlsaW5nLCBpbnQgZmJfYnBwLAo+ID4gPiDCoAl9Cj4gPiA+IMKgfQo+ID4gPiDC oAo+ID4gPiAtLyoqCj4gPiA+IC0gKiBpZ3RfY2FsY19mYl9zaXplOgo+ID4gPiAtICogQGZkOiB0 aGUgRFJNIGZpbGUgZGVzY3JpcHRvcgo+ID4gPiAtICogQHdpZHRoOiB3aWR0aCBvZiB0aGUgZnJh bWVidWZmZXIgaW4gcGl4ZWxzCj4gPiA+IC0gKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGZyYW1l YnVmZmVyIGluIHBpeGVscwo+ID4gPiAtICogQGZvcm1hdDogZHJtIGZvdXJjYyBwaXhlbCBmb3Jt YXQgY29kZQo+ID4gPiAtICogQHRpbGluZzogdGlsaW5nIGxheW91dCBvZiB0aGUgZnJhbWVidWZm ZXIgKGFzIGZyYW1lYnVmZmVyCj4gPiA+IG1vZGlmaWVyKQo+ID4gPiAtICogQHNpemVfcmV0OiBy ZXR1cm5lZCBzaXplIGZvciB0aGUgZnJhbWVidWZmZXIKPiA+ID4gLSAqIEBzdHJpZGVfcmV0OiBy ZXR1cm5lZCBzdHJpZGUgZm9yIHRoZSBmcmFtZWJ1ZmZlcgo+ID4gPiAtICoKPiA+ID4gLSAqIFRo aXMgZnVuY3Rpb24gcmV0dXJucyB2YWxpZCBzdHJpZGUgYW5kIHNpemUgdmFsdWVzIGZvciBhCj4g PiA+IGZyYW1lYnVmZmVyIHdpdGggdGhlCj4gPiA+IC0gKiBzcGVjaWZpZWQgcGFyYW1ldGVycy4K PiA+ID4gLSAqLwo+ID4gPiAtdm9pZCBpZ3RfY2FsY19mYl9zaXplKGludCBmZCwgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LCB1aW50MzJfdAo+ID4gPiBmb3JtYXQsIHVpbnQ2NF90IHRpbGluZywKPiA+ ID4gLQkJwqDCoMKgwqDCoMKgdW5zaWduZWQgKnNpemVfcmV0LCB1bnNpZ25lZCAqc3RyaWRlX3Jl dCkKPiA+ID4gK3N0YXRpYyB1bnNpZ25lZCBwbGFuYXJfc3RyaWRlKHN0cnVjdCBmb3JtYXRfZGVz Y19zdHJ1Y3QgKmZvcm1hdCwKPiA+ID4gdW5zaWduZWQgd2lkdGgsIGludCBwbGFuZSkKPiA+ID4g K3sKPiA+ID4gKwl1bnNpZ25lZCBjcHAgPSBmb3JtYXQtPnBsYW5lX2JwcFtwbGFuZV0gLyA4Owo+ ID4gPiArCj4gPiA+ICsJaWYgKGZvcm1hdC0+ZHJtX2lkID09IERSTV9GT1JNQVRfTlYxMiAmJiBw bGFuZSA9PSAxKQo+ID4gPiArCQlyZXR1cm4gKHdpZHRoICsgMSkgLyAyICogY3BwOwo+ID4gPiAr Cj4gPiA+ICsJcmV0dXJuIHdpZHRoICogY3BwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0 aWMgdW5zaWduZWQgcGxhbmFyX2hlaWdodChzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpmb3Jt YXQsCj4gPiA+IHVuc2lnbmVkIGhlaWdodCwgaW50IHBsYW5lKQo+ID4gPiArewo+ID4gPiArCWlm IChmb3JtYXQtPmRybV9pZCA9PSBEUk1fRk9STUFUX05WMTIgJiYgcGxhbmUgPT0gMSkKPiA+ID4g KwkJcmV0dXJuIChoZWlnaHQgKyAxKSAvIDI7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gaGVpZ2h0 Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBjYWxjX2ZiX3NpemVfcGxhbmFy KGludCBmZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAo+ID4gPiArCQkJCXN0cnVjdCBmb3JtYXRf ZGVzY19zdHJ1Y3QKPiA+ID4gKmZvcm1hdCwKPiA+ID4gKwkJCQl1aW50NjRfdCB0aWxpbmcsIHVu c2lnbmVkCj4gPiA+ICpzaXplX3JldCwKPiA+ID4gKwkJCQl1bnNpZ25lZCAqc3RyaWRlX3JldCwg dW5zaWduZWQKPiA+ID4gKm9mZnNldHMpCj4gPiA+ICt7Cj4gPiA+ICsJaW50IHBsYW5lOwo+ID4g PiArCXVuc2lnbmVkIHN0cmlkZSA9IDAsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ID4gPiAr Cj4gPiA+ICsJKnNpemVfcmV0ID0gMDsKPiA+ID4gKwo+ID4gPiArCWZvciAocGxhbmUgPSAwOyBw bGFuZSA8IGZvcm1hdC0+cGxhbmVzOyBwbGFuZSsrKSB7Cj4gPiA+ICsJCXVuc2lnbmVkIHBsYW5l X3N0cmlkZTsKPiA+ID4gKwo+ID4gPiArCQlpZ3RfZ2V0X2ZiX3RpbGVfc2l6ZShmZCwgdGlsaW5n LCBmb3JtYXQtCj4gPiA+ID4gCj4gPiA+ID4gcGxhbmVfYnBwW3BsYW5lXSwgJnRpbGVfd2lkdGgs ICZ0aWxlX2hlaWdodCk7Cj4gPiA+ICsKPiA+ID4gKwkJcGxhbmVfc3RyaWRlID0gQUxJR04ocGxh bmFyX3N0cmlkZShmb3JtYXQsCj4gPiA+IHdpZHRoLAo+ID4gPiBwbGFuZSksIHRpbGVfd2lkdGgp Owo+ID4gPiArCQlpZiAoc3RyaWRlIDwgcGxhbmVfc3RyaWRlKQo+ID4gPiArCQkJc3RyaWRlID0g cGxhbmVfc3RyaWRlOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWZvciAocGxhbmUgPSAwOyBw bGFuZSA8IGZvcm1hdC0+cGxhbmVzOyBwbGFuZSsrKSB7Cj4gPiA+ICsJCWlmIChvZmZzZXRzKQo+ ID4gPiArCQkJb2Zmc2V0c1twbGFuZV0gPSAqc2l6ZV9yZXQ7Cj4gPiA+ICsKPiA+ID4gKwkJaWd0 X2dldF9mYl90aWxlX3NpemUoZmQsIHRpbGluZywgZm9ybWF0LQo+ID4gPiA+IAo+ID4gPiA+IHBs YW5lX2JwcFtwbGFuZV0sICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOwo+ID4gPiArCj4gPiA+ ICsJCSpzaXplX3JldCArPSBzdHJpZGUgKgo+ID4gPiBBTElHTihwbGFuYXJfaGVpZ2h0KGZvcm1h dCwKPiA+ID4gaGVpZ2h0LCBwbGFuZSksIHRpbGVfaGVpZ2h0KTsKPiA+ID4gKwl9Cj4gPiA+ICsK PiA+ID4gKwlpZiAob2Zmc2V0cykKPiA+ID4gKwkJZm9yICg7IHBsYW5lIDwgNDsgcGxhbmUrKykK PiA+IFdlIGNvdWxkIGxvb3AgdGhyb3VnaCBtYXggZGVmaW5lIHZhbHVlIGhlcmUgdG9vIGluc3Rl YWQgb2YKPiA+IGhhcmRjb2RlZAo+ID4gb25lLgo+ID4gCj4gPiA+IAo+ID4gPiArCQkJb2Zmc2V0 c1twbGFuZV0gPSAwOwo+ID4gPiArCj4gPiA+ICsJKnN0cmlkZV9yZXQgPSBzdHJpZGU7Cj4gPiA+ ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGNhbGNfZmJfc2l6ZV9wYWNrZWQoaW50IGZk LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4gPiA+ICsJCQkJc3RydWN0IGZvcm1hdF9kZXNjX3N0 cnVjdAo+ID4gPiAqZm9ybWF0LAo+ID4gPiB1aW50NjRfdCB0aWxpbmcsCj4gPiA+ICsJCQkJdW5z aWduZWQgKnNpemVfcmV0LCB1bnNpZ25lZAo+ID4gPiAqc3RyaWRlX3JldCkKPiA+ID4gwqB7Cj4g PiA+IMKgCXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCwgc3RyaWRlLCBzaXpl Owo+ID4gPiAtCWludCBicHAgPSBpZ3RfZHJtX2Zvcm1hdF90b19icHAoZm9ybWF0KTsKPiA+ID4g LQlpbnQgYnl0ZV93aWR0aCA9IHdpZHRoICogKGJwcCAvIDgpOwo+ID4gPiArCWludCBieXRlX3dp ZHRoID0gd2lkdGggKiAoZm9ybWF0LT5icHAgLyA4KTsKPiA+ID4gwqAKPiA+ID4gLQlpZ3RfZ2V0 X2ZiX3RpbGVfc2l6ZShmZCwgdGlsaW5nLCBicHAsICZ0aWxlX3dpZHRoLAo+ID4gPiAmdGlsZV9o ZWlnaHQpOwo+ID4gPiArCWlndF9nZXRfZmJfdGlsZV9zaXplKGZkLCB0aWxpbmcsIGZvcm1hdC0+ YnBwLAo+ID4gPiAmdGlsZV93aWR0aCwKPiA+ID4gJnRpbGVfaGVpZ2h0KTsKPiA+ID4gwqAKPiA+ ID4gwqAJaWYgKHRpbGluZyAhPSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FICYmCj4gPiA+IMKg CcKgwqDCoMKgaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSA8PSAzKSB7Cj4gPiA+ IEBAIC0xNzYsNyArMjMzLDcgQEAgdm9pZCBpZ3RfY2FsY19mYl9zaXplKGludCBmZCwgaW50IHdp ZHRoLCBpbnQKPiA+ID4gaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQ2NF90IHQKPiA+ID4g wqAJCcKgKiB0aWxlZC4gQnV0IHRoZW4gdGhhdCBmYWlsdXJlIGlzIGV4cGVjdGVkLgo+ID4gPiDC oAkJwqAqLwo+ID4gPiDCoAo+ID4gPiAtCQl2ID0gd2lkdGggKiBicHAgLyA4Owo+ID4gPiArCQl2 ID0gYnl0ZV93aWR0aDsKPiA+ID4gwqAJCWZvciAoc3RyaWRlID0gNTEyOyBzdHJpZGUgPCB2OyBz dHJpZGUgKj0gMikKPiA+ID4gwqAJCQk7Cj4gPiA+IMKgCj4gPiA+IEBAIC0xOTIsNiArMjQ5LDMx IEBAIHZvaWQgaWd0X2NhbGNfZmJfc2l6ZShpbnQgZmQsIGludCB3aWR0aCwgaW50Cj4gPiA+IGhl aWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50NjRfdCB0Cj4gPiA+IMKgCSpzaXplX3JldCA9IHNp emU7Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiArLyoqCj4gPiA+ICsgKiBpZ3RfY2FsY19mYl9z aXplOgo+ID4gPiArICogQGZkOiB0aGUgRFJNIGZpbGUgZGVzY3JpcHRvcgo+ID4gPiArICogQHdp ZHRoOiB3aWR0aCBvZiB0aGUgZnJhbWVidWZmZXIgaW4gcGl4ZWxzCj4gPiA+ICsgKiBAaGVpZ2h0 OiBoZWlnaHQgb2YgdGhlIGZyYW1lYnVmZmVyIGluIHBpeGVscwo+ID4gPiArICogQGZvcm1hdDog ZHJtIGZvdXJjYyBwaXhlbCBmb3JtYXQgY29kZQo+ID4gPiArICogQHRpbGluZzogdGlsaW5nIGxh eW91dCBvZiB0aGUgZnJhbWVidWZmZXIgKGFzIGZyYW1lYnVmZmVyCj4gPiA+IG1vZGlmaWVyKQo+ ID4gPiArICogQHNpemVfcmV0OiByZXR1cm5lZCBzaXplIGZvciB0aGUgZnJhbWVidWZmZXIKPiA+ ID4gKyAqIEBzdHJpZGVfcmV0OiByZXR1cm5lZCBzdHJpZGUgZm9yIHRoZSBmcmFtZWJ1ZmZlcgo+ ID4gPiArICoKPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB2YWxpZCBzdHJpZGUgYW5k IHNpemUgdmFsdWVzIGZvciBhCj4gPiA+IGZyYW1lYnVmZmVyIHdpdGggdGhlCj4gPiA+ICsgKiBz cGVjaWZpZWQgcGFyYW1ldGVycy4KPiA+ID4gKyAqLwo+ID4gPiArdm9pZCBpZ3RfY2FsY19mYl9z aXplKGludCBmZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdAo+ID4gPiBkcm1fZm9y bWF0LCB1aW50NjRfdCB0aWxpbmcsCj4gPiA+ICsJCcKgwqDCoMKgwqDCoHVuc2lnbmVkICpzaXpl X3JldCwgdW5zaWduZWQgKnN0cmlkZV9yZXQpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGZvcm1h dF9kZXNjX3N0cnVjdCAqZm9ybWF0ID0KPiA+ID4gbG9va3VwX2RybV9mb3JtYXQoZHJtX2Zvcm1h dCk7Cj4gPiA+ICsJaWd0X2Fzc2VydChmb3JtYXQpOwo+ID4gPiArCj4gPiA+ICsJaWYgKGZvcm1h dC0+cGxhbmVzID4gMSkKPiA+ID4gKwkJY2FsY19mYl9zaXplX3BsYW5hcihmZCwgd2lkdGgsIGhl aWdodCwgZm9ybWF0LAo+ID4gPiB0aWxpbmcsIHNpemVfcmV0LCBzdHJpZGVfcmV0LCBOVUxMKTsK PiA+ID4gKwllbHNlCj4gPiA+ICsJCWNhbGNfZmJfc2l6ZV9wYWNrZWQoZmQsIHdpZHRoLCBoZWln aHQsIGZvcm1hdCwKPiA+ID4gdGlsaW5nLCBzaXplX3JldCwgc3RyaWRlX3JldCk7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gwqAvKioKPiA+ID4gwqAgKiBpZ3RfZmJfbW9kX3RvX3RpbGluZzoKPiA+ ID4gwqAgKiBAbW9kaWZpZXI6IERSTSBmcmFtZWJ1ZmZlciBtb2RpZmllcgo+ID4gPiBAQCAtMjQ1 LDE3ICszMjcsMjAgQEAgdWludDY0X3QgaWd0X2ZiX3RpbGluZ190b19tb2QodWludDY0X3QKPiA+ ID4gdGlsaW5nKQo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gwqAvKiBoZWxwZXJzIHRvIGNyZWF0 ZSBuaWNlLWxvb2tpbmcgZnJhbWVidWZmZXJzICovCj4gPiA+IC1zdGF0aWMgaW50IGNyZWF0ZV9i b19mb3JfZmIoaW50IGZkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4gPiA+IHVpbnQzMl90Cj4g PiA+IGZvcm1hdCwKPiA+ID4gK3N0YXRpYyBpbnQgY3JlYXRlX2JvX2Zvcl9mYihpbnQgZmQsIGlu dCB3aWR0aCwgaW50IGhlaWdodCwKPiA+ID4gKwkJCcKgwqDCoMKgc3RydWN0IGZvcm1hdF9kZXNj X3N0cnVjdCAqZm9ybWF0LAo+ID4gPiDCoAkJCcKgwqDCoMKgdWludDY0X3QgdGlsaW5nLCB1bnNp Z25lZCBzaXplLAo+ID4gPiB1bnNpZ25lZAo+ID4gPiBzdHJpZGUsCj4gPiA+IMKgCQkJwqDCoMKg wqB1bnNpZ25lZCAqc2l6ZV9yZXQsIHVuc2lnbmVkCj4gPiA+ICpzdHJpZGVfcmV0LAo+ID4gPiDC oAkJCcKgwqDCoMKgYm9vbCAqaXNfZHVtYikKPiA+ID4gwqB7Cj4gPiA+IMKgCWludCBibzsKPiA+ ID4gwqAKPiA+ID4gLQlpZiAodGlsaW5nIHx8IHNpemUgfHwgc3RyaWRlKSB7Cj4gPiA+ICsJaWd0 X2Fzc2VydChmb3JtYXQpOwo+ID4gPiArCj4gPiA+ICsJaWYgKHRpbGluZyB8fCBzaXplIHx8IHN0 cmlkZSB8fCBmb3JtYXQtPnBsYW5lcyA+IDEpIHsKPiA+ID4gwqAJCXVuc2lnbmVkIGNhbGN1bGF0 ZWRfc2l6ZSwgY2FsY3VsYXRlZF9zdHJpZGU7Cj4gPiA+IMKgCj4gPiA+IC0JCWlndF9jYWxjX2Zi X3NpemUoZmQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwKPiA+ID4gdGlsaW5nLAo+ID4gPiArCQlp Z3RfY2FsY19mYl9zaXplKGZkLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQtCj4gPiA+ID5kcm1faWQs Cj4gPiA+IHRpbGluZywKPiA+ID4gwqAJCQkJwqAmY2FsY3VsYXRlZF9zaXplLAo+ID4gPiAmY2Fs Y3VsYXRlZF9zdHJpZGUpOwo+ID4gPiDCoAkJaWYgKHN0cmlkZSA9PSAwKQo+ID4gPiDCoAkJCXN0 cmlkZSA9IGNhbGN1bGF0ZWRfc3RyaWRlOwo+ID4gPiBAQCAtMjkwLDEyICszNzUsMTAgQEAgc3Rh dGljIGludCBjcmVhdGVfYm9fZm9yX2ZiKGludCBmZCwgaW50Cj4gPiA+IHdpZHRoLAo+ID4gPiBp bnQgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsCj4gPiA+IMKgCQkJcmV0dXJuIC1FSU5WQUw7Cj4g PiA+IMKgCQl9Cj4gPiA+IMKgCX0gZWxzZSB7Cj4gPiA+IC0JCWludCBicHAgPSBpZ3RfZHJtX2Zv cm1hdF90b19icHAoZm9ybWF0KTsKPiA+ID4gLQo+ID4gPiDCoAkJaWYgKGlzX2R1bWIpCj4gPiA+ IMKgCQkJKmlzX2R1bWIgPSB0cnVlOwo+ID4gPiDCoAo+ID4gPiAtCQlyZXR1cm4ga21zdGVzdF9k dW1iX2NyZWF0ZShmZCwgd2lkdGgsIGhlaWdodCwKPiA+ID4gYnBwLAo+ID4gPiBzdHJpZGVfcmV0 LAo+ID4gPiArCQlyZXR1cm4ga21zdGVzdF9kdW1iX2NyZWF0ZShmZCwgd2lkdGgsIGhlaWdodCwK PiA+ID4gZm9ybWF0LT5icHAsIHN0cmlkZV9yZXQsCj4gPiA+IMKgCQkJCQnCoMKgwqBzaXplX3Jl dCk7Cj4gPiA+IMKgCX0KPiA+ID4gwqB9Cj4gPiA+IEBAIC0zMjMsOCArNDA2LDggQEAgaW50IGln dF9jcmVhdGVfYm9fd2l0aF9kaW1lbnNpb25zKGludCBmZCwgaW50Cj4gPiA+IHdpZHRoLCBpbnQg aGVpZ2h0LAo+ID4gPiDCoAkJCQnCoMKgdW5zaWduZWQgc3RyaWRlLCB1bnNpZ25lZAo+ID4gPiAq c2l6ZV9yZXQsCj4gPiA+IMKgCQkJCcKgwqB1bnNpZ25lZCAqc3RyaWRlX3JldCwgYm9vbAo+ID4g PiAqaXNfZHVtYikKPiA+ID4gwqB7Cj4gPiA+IC0JcmV0dXJuIGNyZWF0ZV9ib19mb3JfZmIoZmQs IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwKPiA+ID4gbW9kaWZpZXIsCj4gPiA+IDAsIHN0cmlkZSwK PiA+ID4gLQkJCcKgwqDCoMKgwqBzaXplX3JldCwgc3RyaWRlX3JldCwgaXNfZHVtYik7Cj4gPiA+ ICsJcmV0dXJuIGNyZWF0ZV9ib19mb3JfZmIoZmQsIHdpZHRoLCBoZWlnaHQsCj4gPiA+IGxvb2t1 cF9kcm1fZm9ybWF0KGZvcm1hdCksCj4gPiA+ICsJCQkJbW9kaWZpZXIsIDAsIHN0cmlkZSwgc2l6 ZV9yZXQsCj4gPiA+IHN0cmlkZV9yZXQsIGlzX2R1bWIpOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ ID4gwqAvKioKPiA+ID4gQEAgLTY3MSw5ICs3NTQsMTAgQEAgaWd0X2NyZWF0ZV9mYl93aXRoX2Jv X3NpemUoaW50IGZkLCBpbnQKPiA+ID4gd2lkdGgsCj4gPiA+IGludCBoZWlnaHQsCj4gPiA+IMKg Cj4gPiA+IMKgCWlndF9kZWJ1ZygiJXMod2lkdGg9JWQsIGhlaWdodD0lZCwgZm9ybWF0PTB4JXgs Cj4gPiA+IHRpbGluZz0weCUiUFJJeDY0Iiwgc2l6ZT0lZClcbiIsCj4gPiA+IMKgCQnCoMKgX19m dW5jX18sIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdGlsaW5nLAo+ID4gPiBib19zaXplKTsKPiA+ ID4gLQlmYi0+Z2VtX2hhbmRsZSA9IGNyZWF0ZV9ib19mb3JfZmIoZmQsIHdpZHRoLCBoZWlnaHQs Cj4gPiA+IGZvcm1hdCwKPiA+ID4gdGlsaW5nLAo+ID4gPiAtCQkJCQnCoMKgYm9fc2l6ZSwgYm9f c3RyaWRlLAo+ID4gPiAmZmItCj4gPiA+ID4gCj4gPiA+ID4gc2l6ZSwKPiA+ID4gLQkJCQkJwqDC oCZmYi0+c3RyaWRlLCAmZmItCj4gPiA+ID4gCj4gPiA+ID4gaXNfZHVtYik7Cj4gPiA+ICsJZmIt PmdlbV9oYW5kbGUgPSBjcmVhdGVfYm9fZm9yX2ZiKGZkLCB3aWR0aCwgaGVpZ2h0LAo+ID4gPiAr CQkJCQnCoMKgbG9va3VwX2RybV9mb3JtYXQoZm9ybQo+ID4gPiBhdCksCj4gPiA+ICsJCQkJCcKg wqB0aWxpbmcsIGJvX3NpemUsCj4gPiA+IGJvX3N0cmlkZSwKPiA+ID4gKwkJCQkJwqDCoCZmYi0+ c2l6ZSwgJmZiLQo+ID4gPiA+c3RyaWRlLAo+ID4gPiAmZmItPmlzX2R1bWIpOwo+ID4gPiDCoAlp Z3RfYXNzZXJ0KGZiLT5nZW1faGFuZGxlID4gMCk7Cj4gPiA+IMKgCj4gPiA+IMKgCWlndF9kZWJ1 ZygiJXMoaGFuZGxlPSVkLCBwaXRjaD0lZClcbiIsCj4gPiA+IEBAIC0xMDY5LDcgKzExNTMsNyBA QCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fYmxpdChpbnQKPiA+ID4gZmQsCj4g PiA+IHN0cnVjdCBpZ3RfZmIgKmZiKQo+ID4gPiDCoAnCoCogZGVzdGluYXRpb24sIHRpbGluZyBp dCBhdCB0aGUgc2FtZSB0aW1lLgo+ID4gPiDCoAnCoCovCj4gPiA+IMKgCWJsaXQtPmxpbmVhci5o YW5kbGUgPSBjcmVhdGVfYm9fZm9yX2ZiKGZkLCBmYi0+d2lkdGgsCj4gPiA+IGZiLQo+ID4gPiA+ IAo+ID4gPiA+IGhlaWdodCwKPiA+ID4gLQkJCQkJwqDCoMKgwqDCoMKgwqBmYi0+ZHJtX2Zvcm1h dCwKPiA+ID4gKwkJCQkJwqDCoMKgwqDCoMKgwqBsb29rdXBfZHJtX2Zvcm1hdAo+ID4gPiAoZmIt Cj4gPiA+ID4gCj4gPiA+ID4gZHJtX2Zvcm1hdCksCj4gPiA+IMKgCQkJCQnCoMKgwqDCoMKgwqDC oExPQ0FMX0RSTV9GT1JNQVRfCj4gPiA+IE1PRF8KPiA+ID4gTk9ORSwgMCwKPiA+ID4gwqAJCQkJ CcKgwqDCoMKgwqDCoMKgMCwgJmJsaXQtCj4gPiA+ID4gCj4gPiA+ID4gbGluZWFyLnNpemUsCj4g PiA+IMKgCQkJCQnCoMKgwqDCoMKgwqDCoCZibGl0LQo+ID4gPiA+bGluZWFyLnN0cmlkZSwKPiA+ ID4gQEAgLTEyOTMsMTQgKzEzNzcsMTIgQEAgdWludDMyX3QgaWd0X2JwcF9kZXB0aF90b19kcm1f Zm9ybWF0KGludAo+ID4gPiBicHAsCj4gPiA+IGludCBkZXB0aCkKPiA+ID4gwqAgKi8KPiA+ID4g wqB1aW50MzJfdCBpZ3RfZHJtX2Zvcm1hdF90b19icHAodWludDMyX3QgZHJtX2Zvcm1hdCkKPiA+ ID4gwqB7Cj4gPiA+IC0Jc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZjsKPiA+ID4gKwlzdHJ1 Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpmID0KPiA+ID4gbG9va3VwX2RybV9mb3JtYXQoZHJtX2Zv cm1hdCk7Cj4gPiA+IMKgCj4gPiA+IC0JZm9yX2VhY2hfZm9ybWF0KGYpCj4gPiA+IC0JCWlmIChm LT5kcm1faWQgPT0gZHJtX2Zvcm1hdCkKPiA+ID4gLQkJCXJldHVybiBmLT5icHA7Cj4gPiA+IC0K PiA+ID4gLQlpZ3RfYXNzZXJ0X2YoMCwgImNhbid0IGZpbmQgYSBicHAgZm9ybWF0IGZvciAlMDh4 Cj4gPiA+ICglcylcbiIsCj4gPiA+ICsJaWd0X2Fzc2VydF9mKGYsICJjYW4ndCBmaW5kIGEgYnBw IGZvcm1hdCBmb3IgJTA4eAo+ID4gPiAoJXMpXG4iLAo+ID4gPiDCoAkJwqDCoMKgwqDCoGRybV9m b3JtYXQsIGlndF9mb3JtYXRfc3RyKGRybV9mb3JtYXQpKTsKPiA+ID4gKwo+ID4gPiArCXJldHVy biBmLT5icHA7Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiDCoC8qKgo+ID4gPiBAQCAtMTMxMywx MyArMTM5NSw5IEBAIHVpbnQzMl90IGlndF9kcm1fZm9ybWF0X3RvX2JwcCh1aW50MzJfdAo+ID4g PiBkcm1fZm9ybWF0KQo+ID4gPiDCoCAqLwo+ID4gPiDCoGNvbnN0IGNoYXIgKmlndF9mb3JtYXRf c3RyKHVpbnQzMl90IGRybV9mb3JtYXQpCj4gPiA+IMKgewo+ID4gPiAtCXN0cnVjdCBmb3JtYXRf ZGVzY19zdHJ1Y3QgKmY7Cj4gPiA+IC0KPiA+ID4gLQlmb3JfZWFjaF9mb3JtYXQoZikKPiA+ID4g LQkJaWYgKGYtPmRybV9pZCA9PSBkcm1fZm9ybWF0KQo+ID4gPiAtCQkJcmV0dXJuIGYtPm5hbWU7 Cj4gPiA+ICsJc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZiA9Cj4gPiA+IGxvb2t1cF9kcm1f Zm9ybWF0KGRybV9mb3JtYXQpOwo+ID4gPiDCoAo+ID4gPiAtCXJldHVybiAiaW52YWxpZCI7Cj4g PiA+ICsJcmV0dXJuIGYgPyBmLT5uYW1lIDogImludmFsaWQiOwo+ID4gPiDCoH0KPiA+ID4gwqAK PiA+ID4gwqAvKioKPiAKLS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwgT1RDCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK