From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id D2BD16E21E for ; Wed, 31 Jan 2018 13:45:40 +0000 (UTC) Message-ID: <1517406337.2602.27.camel@intel.com> From: Mika Kahola Date: Wed, 31 Jan 2018 15:45:37 +0200 In-Reply-To: <20180123125642.58698-9-maarten.lankhorst@linux.intel.com> References: <20180123125642.58698-1-maarten.lankhorst@linux.intel.com> <20180123125642.58698-9-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 8/8] lib/igt_fb: Add support for NV12 format through conversion 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: T24gVHVlLCAyMDE4LTAxLTIzIGF0IDEzOjU2ICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBGb3IgTlYxMiBhIGZvcm1hdCBjb252ZXJzaW9uIGlzIG5lZWRlZC4gQmVjYXVzZSBZVVYg Zm9ybWF0cyBhcmUgbm90Cj4gZnVsbHkgZGVmaW5lZCB3aXRoIGp1c3QgYSBmb3VyY2MsIEkndmUg Y2hvc2VuIEJULjcwOSBsaW1pdGVkIHJhbmdlLgo+IFRoaXMgcHV0cyB0aGUgcGl4ZWwgY2VudGVy IG9mIHRoZSBDYkNyIGNvbXBvbmVudHMgYmV0d2VlbiB0aGUgdG9wCj4gbGVmdCBZIGFuZCBib3R0 b20gbGVmdCBZOgo+IAo+IFnCoMKgwqBZwqDCoMKgWcKgwqDCoFkKPiBVVsKgwqDCoMKgwqDCoFVW Cj4gWcKgwqDCoFnCoMKgwqBZwqDCoMKgWQo+IAo+IFNvbWUgd29yayBpcyBwdXQgaW50byBvcHRp bWlzaW5nIHRoZSBjb252ZXJzaW9uIHJvdXRpbmVzIGluIG9yZGVyIHRvCj4gbWFrZSBpdCBmYXN0 IGVub3VnaC4gQmVmb3JlIGNvbnZlcnRpbmcgbnYxMiB0byByZ2IyNCwgaXQgaXMgY29waWVkIHRv Cj4gYSB0ZW1wb3JhcnkgYnVmZmVyIHRvIHRha2UgYWR2YW50YWdlIG9mIG1lbW9yeSBjYWNoaW5n LiBUaGlzIGlzCj4gYXBwcm94aW1hdGVseSAyMHggZmFzdGVyIHRoYW4gZGlyZWN0bHkgcmVhZGlu ZyB0aGUgQk8uCj4gCj4gV2hlbiB0ZXN0aW5nIG9uIG15IEtCTCB3aXRoIGEgMTA4MHAgYnVmZmVy LCBpdCB0YWtlcyBhcHByb3hpbWF0ZWx5Cj4gLjFzIHRvIGNvbnZlcnQgZWl0aGVyIHdheSwgdGhp cyBpcyBmYXN0IGVub3VnaCBub3QgdG8gYm90aGVyCj4gb3B0aW1pc2luZwo+IGV2ZW4gZnVydGhl ciBmb3IgbWUuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4u bGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiDCoGxpYi9pZ3RfZmIuYyB8IDM5MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gLS0tLS0t LS0tLQo+IMKgMSBmaWxlIGNoYW5nZWQsIDMxOCBpbnNlcnRpb25zKCspLCA3MiBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9mYi5jIGIvbGliL2lndF9mYi5jCj4gaW5kZXgg NGQ2YjYyYTY0ZGVkLi40M2I3MWU2NDM1ODYgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9mYi5jCj4g KysrIGIvbGliL2lndF9mYi5jCj4gQEAgLTcwLDYgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBmb3Jt YXRfZGVzY19zdHJ1Y3Qgewo+IMKgCURGKFhSR0I4ODg4LAlSR0IyNCwJCTMyLCAyNCksCj4gwqAJ REYoWFJHQjIxMDEwMTAsCVJHQjMwLAkJMzIsIDMwKSwKPiDCoAlERihBUkdCODg4OCwJQVJHQjMy LAkJMzIsIDMyKSwKPiArCURGKE5WMTIsCVJHQjI0LAkJMzIsIC0xLCAyLCB7OCwgMTZ9KSwKPiDC oH07Cj4gwqAjdW5kZWYgREYKPiDCoAo+IEBAIC0zNjMsMTQgKzM2NCwyMCBAQCBzdGF0aWMgaW50 IGNyZWF0ZV9ib19mb3JfZmIoaW50IGZkLCBpbnQgd2lkdGgsCj4gaW50IGhlaWdodCwKPiDCoAkJ CSppc19kdW1iID0gZmFsc2U7Cj4gwqAKPiDCoAkJaWYgKGlzX2k5MTVfZGV2aWNlKGZkKSkgewo+ IC0JCQl1aW50MzJfdCAqcHRyOwo+ICsJCQl1aW50OF90ICpwdHI7Cj4gwqAKPiDCoAkJCWJvID0g Z2VtX2NyZWF0ZShmZCwgc2l6ZSk7Cj4gwqAJCQlnZW1fc2V0X3RpbGluZyhmZCwgYm8sCj4gaWd0 X2ZiX21vZF90b190aWxpbmcodGlsaW5nKSwgc3RyaWRlKTsKPiDCoAo+IMKgCQkJLyogRW5zdXJl IHRoZSBmcmFtZWJ1ZmZlciBpcyBwcmVhbGxvY2F0ZWQgKi8KPiAtCQkJcHRyID0gZ2VtX21tYXBf X2d0dChmZCwgYm8sIHNpemUsCj4gUFJPVF9SRUFEKTsKPiAtCQkJaWd0X2Fzc2VydCgqcHRyID09 IDApOwo+ICsJCQlwdHIgPSBnZW1fbW1hcF9fZ3R0KGZkLCBibywgc2l6ZSwgUFJPVF9SRUFECj4g fCBQUk9UX1dSSVRFKTsKPiArCQkJaWd0X2Fzc2VydCgqKHVpbnQzMl90ICopcHRyID09IDApOwo+ ICsKPiArCQkJaWYgKGZvcm1hdC0+ZHJtX2lkID09IERSTV9GT1JNQVRfTlYxMikgewo+ICsJCQkJ LyogY29tcG9uZW50IGZvcm1hdHMgaGF2ZSBhCj4gZGlmZmVyZW50IHplcm8gcG9pbnQgKi8KPiAr CQkJCW1lbXNldChwdHIsIDE2LCBvZmZzZXRzWzFdKTsKPiArCQkJCW1lbXNldChwdHIgKyBvZmZz ZXRzWzFdLCAweDgwLAo+IChoZWlnaHQgKyAxKS8yICogc3RyaWRlKTsKPiArCQkJfQo+IMKgCQkJ Z2VtX211bm1hcChwdHIsIHNpemUpOwo+IMKgCj4gwqAJCQlpZiAoc2l6ZV9yZXQpCj4gQEAgLTEx MjYsMTAzICsxMTMzLDExNyBAQCBzdGF0aWMgY2Fpcm9fZm9ybWF0X3QKPiBkcm1fZm9ybWF0X3Rv X2NhaXJvKHVpbnQzMl90IGRybV9mb3JtYXQpCj4gwqAJCcKgwqDCoMKgwqBkcm1fZm9ybWF0LCBp Z3RfZm9ybWF0X3N0cihkcm1fZm9ybWF0KSk7Cj4gwqB9Cj4gwqAKPiArc3RydWN0IGZiX2JsaXRf bGluZWFyIHsKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCXVuc2lnbmVkIHNpemUsIHN0cmlkZTsK PiArCXVpbnQ4X3QgKm1hcDsKPiArCWJvb2wgaXNfZHVtYjsKPiArCXVpbnQzMl90IG9mZnNldHNb NF07Cj4gK307Cj4gKwo+IMKgc3RydWN0IGZiX2JsaXRfdXBsb2FkIHsKPiDCoAlpbnQgZmQ7Cj4g wqAJc3RydWN0IGlndF9mYiAqZmI7Cj4gLQlzdHJ1Y3Qgewo+IC0JCXVpbnQzMl90IGhhbmRsZTsK PiAtCQl1bnNpZ25lZCBzaXplLCBzdHJpZGU7Cj4gLQkJdWludDhfdCAqbWFwOwo+IC0JCWJvb2wg aXNfZHVtYjsKPiAtCX0gbGluZWFyOwo+ICsJc3RydWN0IGZiX2JsaXRfbGluZWFyIGxpbmVhcjsK PiDCoH07Cj4gwqAKPiAtc3RhdGljIHZvaWQgZGVzdHJveV9jYWlyb19zdXJmYWNlX19ibGl0KHZv aWQgKmFyZykKPiArc3RhdGljIHZvaWQgZnJlZV9saW5lYXJfbWFwcGluZyhpbnQgZmQsIHN0cnVj dCBpZ3RfZmIgKmZiLCBzdHJ1Y3QKPiBmYl9ibGl0X2xpbmVhciAqbGluZWFyKQo+IMKgewo+IC0J c3RydWN0IGZiX2JsaXRfdXBsb2FkICpibGl0ID0gYXJnOwo+IC0Jc3RydWN0IGlndF9mYiAqZmIg PSBibGl0LT5mYjsKPiDCoAl1bnNpZ25lZCBpbnQgb2JqX3RpbGluZyA9IGlndF9mYl9tb2RfdG9f dGlsaW5nKGZiLT50aWxpbmcpOwo+ICsJaW50IGk7Cj4gwqAKPiAtCWdlbV9tdW5tYXAoYmxpdC0+ bGluZWFyLm1hcCwgYmxpdC0+bGluZWFyLnNpemUpOwo+IC0JZmItPmNhaXJvX3N1cmZhY2UgPSBO VUxMOwo+ICsJZ2VtX211bm1hcChsaW5lYXItPm1hcCwgbGluZWFyLT5zaXplKTsKPiArCWdlbV9z ZXRfZG9tYWluKGZkLCBsaW5lYXItPmhhbmRsZSwKPiArCQnCoMKgwqDCoMKgwqDCoEk5MTVfR0VN X0RPTUFJTl9HVFQsIDApOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBmYi0+bnVtX3BsYW5lczsg aSsrKQo+ICsJCWlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGZkLAo+ICsJCQkJCcKgwqDCoGxp bmVhci0+aGFuZGxlLAo+ICsJCQkJCcKgwqDCoGxpbmVhci0+b2Zmc2V0c1tpXSwKPiArCQkJCQnC oMKgwqBsaW5lYXItPnN0cmlkZSwKPiArCQkJCQnCoMKgwqBJOTE1X1RJTElOR19OT05FLAo+ICsJ CQkJCcKgwqDCoDAsIDAsIC8qIHNyY194LCBzcmNfeSAqLwo+ICsJCQkJCcKgwqDCoGZiLT5wbGFu ZV93aWR0aFtpXSwgZmItCj4gPnBsYW5lX2hlaWdodFtpXSwKPiArCQkJCQnCoMKgwqBmYi0+cGxh bmVfYnBwW2ldLAo+ICsJCQkJCcKgwqDCoGZiLT5nZW1faGFuZGxlLAo+ICsJCQkJCcKgwqDCoGZi LT5vZmZzZXRzW2ldLAo+ICsJCQkJCcKgwqDCoGZiLT5zdHJpZGUsCj4gKwkJCQkJwqDCoMKgb2Jq X3RpbGluZywKPiArCQkJCQnCoMKgwqAwLCAwIC8qIGRzdF94LCBkc3RfeSAqLyk7Cj4gKwo+ICsJ Z2VtX3N5bmMoZmQsIGxpbmVhci0+aGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgbGluZWFyLT5o YW5kbGUpOwo+ICt9Cj4gwqAKPiAtCWdlbV9zZXRfZG9tYWluKGJsaXQtPmZkLCBibGl0LT5saW5l YXIuaGFuZGxlLAo+IC0JCQlJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKPiArc3RhdGljIHZvaWQg ZGVzdHJveV9jYWlyb19zdXJmYWNlX19ibGl0KHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGZi X2JsaXRfdXBsb2FkICpibGl0ID0gYXJnOwo+IMKgCj4gLQlpZ3RfYmxpdHRlcl9mYXN0X2NvcHlf X3JhdyhibGl0LT5mZCwKPiAtCQkJCcKgwqDCoGJsaXQtPmxpbmVhci5oYW5kbGUsIDAsCj4gLQkJ CQnCoMKgwqBibGl0LT5saW5lYXIuc3RyaWRlLAo+IC0JCQkJwqDCoMKgSTkxNV9USUxJTkdfTk9O RSwKPiAtCQkJCcKgwqDCoDAsIDAsIC8qIHNyY194LCBzcmNfeSAqLwo+IC0JCQkJwqDCoMKgZmIt PndpZHRoLCBmYi0+aGVpZ2h0LAo+IC0JCQkJwqDCoMKgaWd0X2RybV9mb3JtYXRfdG9fYnBwKGZi LQo+ID5kcm1fZm9ybWF0KSwKPiAtCQkJCcKgwqDCoGZiLT5nZW1faGFuZGxlLAo+IC0JCQkJwqDC oMKgZmItPm9mZnNldHNbMF0sCj4gLQkJCQnCoMKgwqBmYi0+c3RyaWRlLAo+IC0JCQkJwqDCoMKg b2JqX3RpbGluZywKPiAtCQkJCcKgwqDCoDAsIDAgLyogZHN0X3gsIGRzdF95ICovKTsKPiAtCj4g LQlnZW1fc3luYyhibGl0LT5mZCwgYmxpdC0+bGluZWFyLmhhbmRsZSk7Cj4gLQlnZW1fY2xvc2Uo YmxpdC0+ZmQsIGJsaXQtPmxpbmVhci5oYW5kbGUpOwo+ICsJYmxpdC0+ZmItPmNhaXJvX3N1cmZh Y2UgPSBOVUxMOwo+ICsKPiArCWZyZWVfbGluZWFyX21hcHBpbmcoYmxpdC0+ZmQsIGJsaXQtPmZi LCAmYmxpdC0+bGluZWFyKTsKPiDCoAo+IMKgCWZyZWUoYmxpdCk7Cj4gwqB9Cj4gwqAKPiAtc3Rh dGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2JsaXQoaW50IGZkLCBzdHJ1Y3QgaWd0X2Zi ICpmYikKPiArc3RhdGljIHZvaWQgc2V0dXBfbGluZWFyX21hcHBpbmcoaW50IGZkLCBzdHJ1Y3Qg aWd0X2ZiICpmYiwgc3RydWN0Cj4gZmJfYmxpdF9saW5lYXIgKmxpbmVhcikKPiDCoHsKPiAtCXN0 cnVjdCBmYl9ibGl0X3VwbG9hZCAqYmxpdDsKPiAtCWNhaXJvX2Zvcm1hdF90IGNhaXJvX2Zvcm1h dDsKPiDCoAl1bnNpZ25lZCBpbnQgb2JqX3RpbGluZyA9IGlndF9mYl9tb2RfdG9fdGlsaW5nKGZi LT50aWxpbmcpOwo+IC0JdWludDMyX3Qgb2Zmc2V0c1s0XTsKPiAtCj4gLQlibGl0ID0gbWFsbG9j KHNpemVvZigqYmxpdCkpOwo+IC0JaWd0X2Fzc2VydChibGl0KTsKPiArCWludCBpOwo+IMKgCj4g wqAJLyoKPiDCoAnCoCogV2UgY3JlYXRlIGEgbGluZWFyIEJPIHRoYXQgd2UnbGwgbWFwIGZvciB0 aGUgQ1BVIHRvIHdyaXRlCj4gdG8gKHVzaW5nCj4gwqAJwqAqIGNhaXJvKS4gVGhpcyBsaW5lYXIg Ym8gd2lsbCBiZSB0aGVuIGJsaXR0ZWQgdG8gaXRzIGZpbmFsCj4gwqAJwqAqIGRlc3RpbmF0aW9u LCB0aWxpbmcgaXQgYXQgdGhlIHNhbWUgdGltZS4KPiDCoAnCoCovCj4gLQlibGl0LT5saW5lYXIu aGFuZGxlID0gY3JlYXRlX2JvX2Zvcl9mYihmZCwgZmItPndpZHRoLCBmYi0KPiA+aGVpZ2h0LAo+ ICsJbGluZWFyLT5oYW5kbGUgPSBjcmVhdGVfYm9fZm9yX2ZiKGZkLCBmYi0+d2lkdGgsIGZiLT5o ZWlnaHQsCj4gwqAJCQkJCcKgwqDCoMKgwqDCoMKgbG9va3VwX2RybV9mb3JtYXQoZmItCj4gPmRy bV9mb3JtYXQpLAo+IMKgCQkJCQnCoMKgwqDCoMKgwqDCoExPQ0FMX0RSTV9GT1JNQVRfTU9EXwo+ IE5PTkUsIDAsCj4gLQkJCQkJwqDCoMKgwqDCoMKgwqAwLCAmYmxpdC0KPiA+bGluZWFyLnNpemUs Cj4gLQkJCQkJwqDCoMKgwqDCoMKgwqAmYmxpdC0+bGluZWFyLnN0cmlkZSwKPiAtCQkJCQnCoMKg wqDCoMKgwqDCoG9mZnNldHMsICZibGl0LQo+ID5saW5lYXIuaXNfZHVtYik7Cj4gLQo+IC0JaWd0 X2Fzc2VydChibGl0LT5saW5lYXIuaGFuZGxlID4gMCk7Cj4gKwkJCQkJwqDCoMKgwqDCoMKgwqAw LCAmbGluZWFyLT5zaXplLAo+ICsJCQkJCcKgwqDCoMKgwqDCoMKgJmxpbmVhci0+c3RyaWRlLAo+ ICsJCQkJCcKgwqDCoMKgwqDCoMKgbGluZWFyLT5vZmZzZXRzLAo+ICZsaW5lYXItPmlzX2R1bWIp Owo+IMKgCj4gLQlibGl0LT5mZCA9IGZkOwo+IC0JYmxpdC0+ZmIgPSBmYjsKPiArCWlndF9hc3Nl cnQobGluZWFyLT5oYW5kbGUgPiAwKTsKPiDCoAo+IMKgCS8qIENvcHkgZmIgY29udGVudCB0byBs aW5lYXIgQk8gKi8KPiAtCWdlbV9zZXRfZG9tYWluKGZkLCBibGl0LT5saW5lYXIuaGFuZGxlLAo+ ICsJZ2VtX3NldF9kb21haW4oZmQsIGxpbmVhci0+aGFuZGxlLAo+IMKgCQkJSTkxNV9HRU1fRE9N QUlOX0dUVCwgMCk7Cj4gwqAKPiAtCWlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGZkLAo+IC0J CQkJwqDCoMKgZmItPmdlbV9oYW5kbGUsCj4gLQkJCQnCoMKgwqBmYi0+b2Zmc2V0c1swXSwKPiAt CQkJCcKgwqDCoGZiLT5zdHJpZGUsCj4gLQkJCQnCoMKgwqBvYmpfdGlsaW5nLAo+IC0JCQkJwqDC oMKgMCwgMCwgLyogc3JjX3gsIHNyY195ICovCj4gLQkJCQnCoMKgwqBmYi0+d2lkdGgsIGZiLT5o ZWlnaHQsCj4gLQkJCQnCoMKgwqBpZ3RfZHJtX2Zvcm1hdF90b19icHAoZmItCj4gPmRybV9mb3Jt YXQpLAo+IC0JCQkJwqDCoMKgYmxpdC0+bGluZWFyLmhhbmRsZSwgMCwKPiAtCQkJCcKgwqDCoGJs aXQtPmxpbmVhci5zdHJpZGUsCj4gLQkJCQnCoMKgwqBJOTE1X1RJTElOR19OT05FLAo+IC0JCQkJ wqDCoMKgMCwgMCAvKiBkc3RfeCwgZHN0X3kgKi8pOwo+IC0KPiAtCWdlbV9zeW5jKGZkLCBibGl0 LT5saW5lYXIuaGFuZGxlKTsKPiAtCj4gLQlnZW1fc2V0X2RvbWFpbihmZCwgYmxpdC0+bGluZWFy LmhhbmRsZSwKPiArCWZvciAoaSA9IDA7IGkgPCBmYi0+bnVtX3BsYW5lczsgaSsrKQo+ICsJCWln dF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGZkLAo+ICsJCQkJCcKgwqBmYi0+Z2VtX2hhbmRsZSwK PiArCQkJCQnCoMKgZmItPm9mZnNldHNbaV0sCj4gKwkJCQkJwqDCoGZiLT5zdHJpZGUsCj4gKwkJ CQkJwqDCoG9ial90aWxpbmcsCj4gKwkJCQkJwqDCoDAsIDAsIC8qIHNyY194LCBzcmNfeSAqLwo+ ICsJCQkJCcKgwqBmYi0+cGxhbmVfd2lkdGhbaV0sIGZiLQo+ID5wbGFuZV9oZWlnaHRbaV0sCj4g KwkJCQkJwqDCoGZiLT5wbGFuZV9icHBbaV0sCj4gKwkJCQkJwqDCoGxpbmVhci0+aGFuZGxlLCBs aW5lYXItCj4gPm9mZnNldHNbaV0sCj4gKwkJCQkJwqDCoGxpbmVhci0+c3RyaWRlLAo+ICsJCQkJ CcKgwqBJOTE1X1RJTElOR19OT05FLAo+ICsJCQkJCcKgwqAwLCAwIC8qIGRzdF94LCBkc3RfeSAq Lyk7Cj4gKwo+ICsJZ2VtX3N5bmMoZmQsIGxpbmVhci0+aGFuZGxlKTsKPiArCj4gKwlnZW1fc2V0 X2RvbWFpbihmZCwgbGluZWFyLT5oYW5kbGUsCj4gwqAJCcKgwqDCoMKgwqDCoMKgSTkxNV9HRU1f RE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gwqAKPiDCoAkvKiBTZXR1cCBjYWly byBjb250ZXh0ICovCj4gLQlibGl0LT5saW5lYXIubWFwID0gZ2VtX21tYXBfX2NwdShmZCwKPiAt CQkJCQnCoGJsaXQtPmxpbmVhci5oYW5kbGUsCj4gLQkJCQkJwqAwLAo+IC0JCQkJCcKgYmxpdC0+ bGluZWFyLnNpemUsCj4gLQkJCQkJwqBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCWxpbmVh ci0+bWFwID0gZ2VtX21tYXBfX2NwdShmZCwgbGluZWFyLT5oYW5kbGUsCj4gKwkJCQnCoMKgwqDC oDAsIGxpbmVhci0+c2l6ZSwgUFJPVF9SRUFEIHwKPiBQUk9UX1dSSVRFKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2JsaXQoaW50IGZkLCBzdHJ1Y3QgaWd0 X2ZiICpmYikKPiArewo+ICsJc3RydWN0IGZiX2JsaXRfdXBsb2FkICpibGl0Owo+ICsJY2Fpcm9f Zm9ybWF0X3QgY2Fpcm9fZm9ybWF0Owo+ICsKPiArCWJsaXQgPSBtYWxsb2Moc2l6ZW9mKCpibGl0 KSk7Cj4gKwlpZ3RfYXNzZXJ0KGJsaXQpOwo+ICsKPiArCWJsaXQtPmZkID0gZmQ7Cj4gKwlibGl0 LT5mYiA9IGZiOwo+ICsJc2V0dXBfbGluZWFyX21hcHBpbmcoZmQsIGZiLCAmYmxpdC0+bGluZWFy KTsKPiDCoAo+IMKgCWNhaXJvX2Zvcm1hdCA9IGRybV9mb3JtYXRfdG9fY2Fpcm8oZmItPmRybV9m b3JtYXQpOwo+IMKgCWZiLT5jYWlyb19zdXJmYWNlID0KPiBAQCAtMTI4NCw2ICsxMzA1LDIzMiBA QCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGludCBmZCwKPiBzdHJ1Y3Qg aWd0X2ZiICpmYikKPiDCoAkJCQnCoMKgwqDCoGZiLCBkZXN0cm95X2NhaXJvX3N1cmZhY2VfX2d0 dCk7Cj4gwqB9Cj4gwqAKPiArc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgewo+ICsJaW50 IGZkOwo+ICsJc3RydWN0IGlndF9mYiAqZmI7Cj4gKwo+ICsJc3RydWN0IHsKPiArCQl1aW50OF90 ICptYXA7Cj4gKwkJdW5zaWduZWQgc3RyaWRlLCBzaXplOwo+ICsJfSByZ2IyNDsKPiArCj4gKwlz dHJ1Y3QgZmJfYmxpdF9saW5lYXIgbGluZWFyOwo+ICt9Owo+ICsKPiArc3RhdGljIHVpbnQ4X3Qg Y2xhbXByZ2IoZmxvYXQgdmFsKSB7Cj4gKwlpZiAodmFsIDwgMCkKPiArCQlyZXR1cm4gMDsKPiAr CWlmICh2YWwgPiAyNTUpCj4gKwkJcmV0dXJuIDI1NTsKPiArCj4gKwlyZXR1cm4gKHVpbnQ4X3Qp dmFsOwpJJ20gdGhpbmtpbmcgb2YgdGhpcyByb3VuZGluZyBpc3N1ZS4gU2hvdWxkIHdlIHVzZSBy b3VuZGluZyB0byB0aGUKbmVhcmVzdCBpbnRlZ2VyIGhlcmUsIGluc3RlYWQgb2YgZmxvb3I/IERv ZXMgdGhlIHdheSB3ZSBkbyByb3VuZGluZwpoYXZlIGFuIGVmZmVjdCBvbiB0ZXN0IHJlc3VsdHMg aWYgd2UgZmlyc3QgZ3JhYiB0aGUgcmVmZXJlbmNlIENSQyBhbmQKdGhlbiBydW4gYSB0ZXN0IGlu IE5WMTIgZm9ybWF0PwoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29udmVydF9udjEyX3RvX3Jn YjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QKPiBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpi bGl0KQo+ICt7Cj4gKwlpbnQgaSwgajsKPiArCWNvbnN0IHVpbnQ4X3QgKnksICp1djsKPiArCXVp bnQ4X3QgKnJnYjI0ID0gYmxpdC0+cmdiMjQubWFwOwo+ICsJdW5zaWduZWQgcmdiMjRfc3RyaWRl ID0gYmxpdC0+cmdiMjQuc3RyaWRlLCBwbGFuYXJfc3RyaWRlID0KPiBibGl0LT5saW5lYXIuc3Ry aWRlOwo+ICsJdWludDhfdCAqYnVmID0gbWFsbG9jKGJsaXQtPmxpbmVhci5zaXplKTsKPiArCj4g KwkvKgo+ICsJwqAqIFJlYWRpbmcgZnJvbSB0aGUgQk8gaXMgYXdmdWxseSBzbG93IGJlY2F1c2Ug b2YgbGFjayBvZgo+IHJlYWQgY2FjaGluZywKPiArCcKgKiBpdCdzIGZhc3RlciB0byBjb3B5IHRo ZSB3aG9sZSBCTyB0byBhIHRlbXBvcmFyeSBidWZmZXIKPiBhbmQgY29udmVydAo+ICsJwqAqIGZy b20gdGhlcmUuCj4gKwnCoCovCj4gKwltZW1jcHkoYnVmLCBibGl0LT5saW5lYXIubWFwLCBibGl0 LT5saW5lYXIuc2l6ZSk7Cj4gKwl5ID0gJmJ1ZltibGl0LT5saW5lYXIub2Zmc2V0c1swXV07Cj4g Kwl1diA9ICZidWZbYmxpdC0+bGluZWFyLm9mZnNldHNbMV1dOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBmYi0+aGVpZ2h0IC8gMjsgaSsrKSB7Cj4gKwkJZm9yIChqID0gMDsgaiA8IGZiLT53aWR0 aDsgaisrKSB7Cj4gKwkJCWZsb2F0IHJfLCBnXywgYl8sIHkwLCB5MSwgY2IsIGNyOwo+ICsJCQkv KiBDb252ZXJ0IDF4MiBwaXhlbCBibG9ja3MgKi8KPiArCj4gKwkJCXkwID0gMS4xNjRmICogKHlb al0gLSAxNi5mKTsKPiArCQkJeTEgPSAxLjE2NGYgKiAoeVtqICsgcGxhbmFyX3N0cmlkZV0gLSAx Ni5mKTsKPiArCj4gKwkJCWNiID0gdXZbaiAmIH4xXSAtIDEyOC5mOwo+ICsJCQljciA9IHV2W2og fCAxXSAtIDEyOC5mOwo+ICsKPiArCQkJcl8gPSAwLjAwMGYgKiBjYiArwqDCoDEuNzkzZiAqIGNy Owo+ICsJCQlnXyA9IC0wLjIxM2YgKiBjYiArIC0wLjUzM2YgKiBjcjsKPiArCQkJYl8gPSAyLjEx MmYgKiBjYiArwqDCoDAuMDAwZiAqIGNyOwo+ICsKPiArCQkJcmdiMjRbaiAqIDQgKyAyXSA9IGNs YW1wcmdiKHkwICsgcl8pOwo+ICsJCQlyZ2IyNFtqICogNCArIDIgKyByZ2IyNF9zdHJpZGVdID0K PiBjbGFtcHJnYih5MSArIHJfKTsKPiArCj4gKwkJCXJnYjI0W2ogKiA0ICsgMV0gPSBjbGFtcHJn Yih5MCArIGdfKTsKPiArCQkJcmdiMjRbaiAqIDQgKyAxICsgcmdiMjRfc3RyaWRlXSA9Cj4gY2xh bXByZ2IoeTEgKyBnXyk7Cj4gKwo+ICsJCQlyZ2IyNFtqICogNF0gPSBjbGFtcHJnYih5MCArIGJf KTsKPiArCQkJcmdiMjRbaiAqIDQgKyByZ2IyNF9zdHJpZGVdID0gY2xhbXByZ2IoeTEgKwo+IGJf KTsKPiArCQl9Cj4gKwo+ICsJCXJnYjI0ICs9IDIgKiByZ2IyNF9zdHJpZGU7Cj4gKwkJeSArPSAy ICogcGxhbmFyX3N0cmlkZTsKPiArCQl1diArPSBwbGFuYXJfc3RyaWRlOwo+ICsJfQo+ICsKPiAr CWlmIChmYi0+aGVpZ2h0ICYgMSkgewo+ICsJCS8qIENvbnZlcnQgbGFzdCByb3cgKi8KPiArCQlm b3IgKGogPSAwOyBqIDwgZmItPndpZHRoOyBqKyspIHsKPiArCQkJZmxvYXQgcl8sIGdfLCBiXywg eTAsIGNiLCBjcjsKPiArCQkJLyogQ29udmVydCBzaW5nbGUgcGl4ZWwgKi8KPiArCj4gKwkJCWNi ID0gdXZbaiAmIH4xXSAtIDEyOC5mOwo+ICsJCQljciA9IHV2W2ogfCAxXSAtIDEyOC5mOwo+ICsK PiArCQkJeTAgPSAxLjE2NGYgKiAoeVtqXSAtIDE2LmYpOwo+ICsJCQlyXyA9wqDCoDAuMDAwZiAq IGNiICvCoMKgMS43OTNmICogY3I7Cj4gKwkJCWdfID0gLTAuMjEzZiAqIGNiICsgLTAuNTMzZiAq IGNyOwo+ICsJCQliXyA9wqDCoDIuMTEyZiAqIGNiICvCoMKgMC4wMDBmICogY3I7Cj4gKwpEbyB5 b3UgaGF2ZSBhIHJlZmVyZW5jZSBmb3IgdGhlc2UgY29udmVyc2lvbiBjb2VmZmljaWVudHM/IEFj Y29yZGluZwp0b8KgaHR0cHM6Ly93d3cuZm91cmNjLm9yZy9mY2N5dnJnYi5waHDCoHRoZXJlIGFy ZSBhIGZldyBvcGluaW9ucyBob3cKdGhpcyBjb252ZXJzaW9uIHNob3VsZCBiZSBoYW5kbGVkPwoK PiArCQkJcmdiMjRbaiAqIDQgKyAyXSA9IGNsYW1wcmdiKHkwICsgcl8pOwo+ICsJCQlyZ2IyNFtq ICogNCArIDFdID0gY2xhbXByZ2IoeTAgKyBnXyk7Cj4gKwkJCXJnYjI0W2ogKiA0XSA9IGNsYW1w cmdiKHkwICsgYl8pOwo+ICsJCX0KPiArCX0KPiArCj4gKwlmcmVlKGJ1Zik7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9fbnYxMihzdHJ1Y3QgaWd0X2ZiICpmYiwgc3Ry dWN0Cj4gZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCkKPiArewo+ICsJaW50IGksIGo7Cj4g Kwl1aW50OF90ICp5ID0gJmJsaXQtPmxpbmVhci5tYXBbYmxpdC0+bGluZWFyLm9mZnNldHNbMF1d Owo+ICsJdWludDhfdCAqdXYgPSAmYmxpdC0+bGluZWFyLm1hcFtibGl0LT5saW5lYXIub2Zmc2V0 c1sxXV07Cj4gKwljb25zdCB1aW50OF90ICpyZ2IyNCA9IGJsaXQtPnJnYjI0Lm1hcDsKPiArCXVu c2lnbmVkIHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlkZTsKPiArCXVuc2lnbmVkIHBs YW5hcl9zdHJpZGUgPSBibGl0LT5saW5lYXIuc3RyaWRlOwo+ICsKPiArCWlndF9hc3NlcnRfZihm Yi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIsCj4gKwkJwqDCoMKgwqDCoCJDb252ZXJz aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgIU5WMTIgcGxhbmFyCj4gZm9ybWF0c1xuIik7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IGZiLT5wbGFuZV9oZWlnaHRbMF07IGkrKykgewo+ICsJCS8qIFVz ZSBsaW1pdGVkIGNvbG9yIHJhbmdlIEJULjcwOSAqLwo+ICsKPiArCQlmb3IgKGogPSAwOyBqIDwg ZmItPnBsYW5lX3dpZHRoWzBdOyBqKyspIHsKPiArCQkJZmxvYXQgeWYgPSAwLjE4M2YgKiByZ2Iy NFtqICogNCArIDJdICsKPiArCQkJCcKgwqDCoDAuNjE0ZiAqIHJnYjI0W2ogKiA0ICsgMV0gKwo+ ICsJCQkJwqDCoMKgMC4wNjJmICogcmdiMjRbaiAqIDRdICsgMTY7Cj4gKwo+ICsJCQl5W2pdID0g KHVpbnQ4X3QpeWY7CldlIGNvdWxkIHVzZSBjbGFtcHJnYigpIGhlcmUgdG9vLiBKdXN0IGluIGNh c2UuCj4gKwkJfQo+ICsKPiArCQlyZ2IyNCArPSByZ2IyNF9zdHJpZGU7Cj4gKwkJeSArPSBwbGFu YXJfc3RyaWRlOwo+ICsJfQo+ICsKPiArCXJnYjI0ID0gYmxpdC0+cmdiMjQubWFwOwo+ICsKPiAr CWZvciAoaSA9IDA7IGkgPCBmYi0+aGVpZ2h0IC8gMjsgaSsrKSB7Cj4gKwkJZm9yIChqID0gMDsg aiA8IGZiLT5wbGFuZV93aWR0aFsxXTsgaisrKSB7Cj4gKwkJCS8qCj4gKwkJCcKgKiBQaXhlbCBj ZW50ZXIgZm9yIENiJ0NyJyBpcyBiZXR3ZWVuIHRoZQo+IGxlZnQgdG9wIGFuZAo+ICsJCQnCoCog Ym90dG9tIHBpeGVsIGluIGEgMngyIGJsb2NrLCBzbyB0YWtlIHRoZQo+IGF2ZXJhZ2UuCj4gKwkJ CcKgKi8KPiArCQkJZmxvYXQgdWYgPSAtMC4xMDFmLzIgKiByZ2IyNFtqICogOCArIDJdICsKPiAr CQkJCcKgwqDCoC0wLjEwMWYvMiAqIHJnYjI0W2ogKiA4ICsgMiArCj4gcmdiMjRfc3RyaWRlXSAr Cj4gKwkJCQnCoMKgwqAtMC4zMzlmLzIgKiByZ2IyNFtqICogOCArIDFdICsKPiArCQkJCcKgwqDC oC0wLjMzOWYvMiAqIHJnYjI0W2ogKiA4ICsgMSArCj4gcmdiMjRfc3RyaWRlXSArCj4gKwkJCQnC oMKgwqDCoDAuNDM5Zi8yICogcmdiMjRbaiAqIDhdICsKPiArCQkJCcKgwqDCoMKgMC40MzlmLzIg KiByZ2IyNFtqICogOCArCj4gcmdiMjRfc3RyaWRlXSArIDEyODsKPiArCQkJZmxvYXQgdmYgPcKg wqAwLjQzOWYvMiAqIHJnYjI0W2ogKiA4ICsgMl0gKwo+ICsJCQkJwqDCoMKgwqAwLjQzOWYvMiAq IHJnYjI0W2ogKiA4ICsgMiArCj4gcmdiMjRfc3RyaWRlXSArCj4gKwkJCQnCoMKgwqAtMC4zMzlm LzIgKiByZ2IyNFtqICogOCArIDFdICsKPiArCQkJCcKgwqDCoC0wLjMzOWYvMiAqIHJnYjI0W2og KiA4ICsgMSArCj4gcmdiMjRfc3RyaWRlXSArCj4gKwkJCQnCoMKgwqAtMC4wNDBmLzIgKiByZ2Iy NFtqICogOF0gKwo+ICsJCQkJwqDCoMKgLTAuMDQwZi8yICogcmdiMjRbaiAqIDggKwo+IHJnYjI0 X3N0cmlkZV0gKyAxMjg7Cj4gKwkJCXV2W2ogKiAyXSA9ICh1aW50OF90KXVmOwo+ICsJCQl1dltq ICogMiArIDFdID0gKHVpbnQ4X3QpdmY7Cj4gCk1heWJlIGFkZCByb3VuZGluZyAmIGNsYW1waW5n IGhlcmUgdG9vPwo+wqAKPiArCQl9Cj4gKwo+ICsJCXJnYjI0ICs9IDIgKiByZ2IyNF9zdHJpZGU7 Cj4gKwkJdXYgKz0gcGxhbmFyX3N0cmlkZTsKPiArCX0KPiArCj4gKwkvKiBMYXN0IHJvdyBjYW5u b3QgYmUgaW50ZXJwb2xhdGVkIGJldHdlZW4gMiBwaXhlbHMsIHRha2UKPiB0aGUgc2luZ2xlIHZh bHVlICovCj4gKwlpZiAoaSA8IGZiLT5wbGFuZV9oZWlnaHRbMV0pIHsKPiArCQlmb3IgKGogPSAw OyBqIDwgZmItPnBsYW5lX3dpZHRoWzFdOyBqKyspIHsKPiArCQkJZmxvYXQgdWYgPSAtMC4xMDFm ICogcmdiMjRbaiAqIDggKyAyXSArCj4gKwkJCQnCoMKgwqAtMC4zMzlmICogcmdiMjRbaiAqIDgg KyAxXSArCj4gKwkJCQnCoMKgwqDCoDAuNDM5ZiAqIHJnYjI0W2ogKiA4XSArIDEyODsKPiArCQkJ ZmxvYXQgdmYgPcKgwqAwLjQzOWYgKiByZ2IyNFtqICogOCArIDJdICsKPiArCQkJCcKgwqDCoC0w LjMzOWYgKiByZ2IyNFtqICogOCArIDFdICsKPiArCQkJCcKgwqDCoC0wLjA0MGYgKiByZ2IyNFtq ICogOF0gKyAxMjg7Cj4gKwo+ICsJCQl1dltqICogMl0gPSAodWludDhfdCl1ZjsKPiArCQkJdXZb aiAqIDIgKyAxXSA9ICh1aW50OF90KXZmOwpyb3VuZGluZyAmIGNsYW1waW5nPwoKPiArCQl9Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlc3Ryb3lfY2Fpcm9fc3VyZmFjZV9fY29udmVy dCh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpibGl0 ID0gYXJnOwo+ICsJc3RydWN0IGlndF9mYiAqZmIgPSBibGl0LT5mYjsKPiArCj4gKwkvKiBDb252 ZXJ0IGJhY2sgdG8gcGxhbmFyISAqLwo+ICsJaWd0X2Fzc2VydF9mKGZiLT5kcm1fZm9ybWF0ID09 IERSTV9GT1JNQVRfTlYxMiwKPiArCQnCoMKgwqDCoMKgIkNvbnZlcnNpb24gbm90IGltcGxlbWVu dGVkIGZvciAhTlYxMiBwbGFuYXIKPiBmb3JtYXRzXG4iKTsKPiArCj4gKwljb252ZXJ0X3JnYjI0 X3RvX252MTIoZmIsIGJsaXQpOwo+ICsKPiArCW11bm1hcChibGl0LT5yZ2IyNC5tYXAsIGJsaXQt PnJnYjI0LnNpemUpOwo+ICsKPiArCWlmIChibGl0LT5saW5lYXIuaGFuZGxlKQo+ICsJCWZyZWVf bGluZWFyX21hcHBpbmcoYmxpdC0+ZmQsIGJsaXQtPmZiLCAmYmxpdC0KPiA+bGluZWFyKTsKPiAr CWVsc2UKPiArCQlnZW1fbXVubWFwKGJsaXQtPmxpbmVhci5tYXAsIGZiLT5zaXplKTsKPiArCj4g KwlmcmVlKGJsaXQpOwo+ICsKPiArCWZiLT5jYWlyb19zdXJmYWNlID0gTlVMTDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZlcnQoaW50IGZkLCBzdHJ1 Y3QgaWd0X2ZiICpmYikKPiArewo+ICsJc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgKmJs aXQgPSBtYWxsb2Moc2l6ZW9mKCpibGl0KSk7Cj4gKwlpZ3RfYXNzZXJ0KGJsaXQpOwo+ICsKPiAr CWJsaXQtPmZkID0gZmQ7Cj4gKwlibGl0LT5mYiA9IGZiOwo+ICsJYmxpdC0+cmdiMjQuc3RyaWRl ID0gQUxJR04oZmItPndpZHRoICogNCwgMTYpOwo+ICsJYmxpdC0+cmdiMjQuc2l6ZSA9IEFMSUdO KGJsaXQtPnJnYjI0LnN0cmlkZSAqIGZiLT5oZWlnaHQsCj4gc3lzY29uZihfU0NfUEFHRVNJWkUp KTsKPiArCWJsaXQtPnJnYjI0Lm1hcCA9IG1tYXAoTlVMTCwgYmxpdC0+cmdiMjQuc2l6ZSwgUFJP VF9SRUFEIHwKPiBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAw KTsKPiArCWlndF9hc3NlcnQoYmxpdC0+cmdiMjQubWFwICE9IE1BUF9GQUlMRUQpOwo+ICsKPiAr CWlmIChmYi0+dGlsaW5nID09IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEIHx8Cj4gKwnC oMKgwqDCoGZiLT50aWxpbmcgPT0gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKSB7Cj4g KwkJc2V0dXBfbGluZWFyX21hcHBpbmcoZmQsIGZiLCAmYmxpdC0+bGluZWFyKTsKPiArCX0gZWxz ZSB7Cj4gKwkJYmxpdC0+bGluZWFyLmhhbmRsZSA9IDA7Cj4gKwkJYmxpdC0+bGluZWFyLm1hcCA9 IGdlbV9tbWFwX19ndHQoZmQsIGZiLT5nZW1faGFuZGxlLCAKPiBmYi0+c2l6ZSwKPiArCQkJCQnC oMKgwqDCoMKgwqBQUk9UX1JFQUQgfAo+IFBST1RfV1JJVEUpOwo+ICsJCWlndF9hc3NlcnQoYmxp dC0+bGluZWFyLm1hcCk7Cj4gKwkJYmxpdC0+bGluZWFyLnN0cmlkZSA9IGZiLT5zdHJpZGU7Cj4g KwkJYmxpdC0+bGluZWFyLnNpemUgPSBmYi0+c2l6ZTsKPiArCQltZW1jcHkoYmxpdC0+bGluZWFy Lm9mZnNldHMsIGZiLT5vZmZzZXRzLCBzaXplb2YoZmItCj4gPm9mZnNldHMpKTsKPiArCX0KPiAr Cj4gKwkvKiBDb252ZXJ0IHRvIGxpbmVhciEgKi8KPiArCWlndF9hc3NlcnRfZihmYi0+ZHJtX2Zv cm1hdCA9PSBEUk1fRk9STUFUX05WMTIsCj4gKwkJwqDCoMKgwqDCoCJDb252ZXJzaW9uIG5vdCBp bXBsZW1lbnRlZCBmb3IgIU5WMTIgcGxhbmFyCj4gZm9ybWF0c1xuIik7Cj4gKwljb252ZXJ0X252 MTJfdG9fcmdiMjQoZmIsIGJsaXQpOwo+ICsKPiArCWZiLT5jYWlyb19zdXJmYWNlID0KPiArCQlj YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShibGl0LT5yZ2IyNC5tYXAsCj4gKwkJ CQkJCcKgwqDCoMKgQ0FJUk9fRk9STUFUX1JHQgo+IDI0LAo+ICsJCQkJCQnCoMKgwqDCoGZiLT53 aWR0aCwgZmItCj4gPmhlaWdodCwKPiArCQkJCQkJwqDCoMKgwqBibGl0LQo+ID5yZ2IyNC5zdHJp ZGUpOwo+ICsKPiArCWNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShmYi0+Y2Fpcm9fc3VyZmFj ZSwKPiArCQkJCcKgwqDCoMKgKGNhaXJvX3VzZXJfZGF0YV9rZXlfdAo+ICopY3JlYXRlX2NhaXJv X3N1cmZhY2VfX2NvbnZlcnQsCj4gKwkJCQnCoMKgwqDCoGJsaXQsCj4gZGVzdHJveV9jYWlyb19z dXJmYWNlX19jb252ZXJ0KTsKPiArfQo+ICsKPiDCoC8qKgo+IMKgICogaWd0X2dldF9jYWlyb19z dXJmYWNlOgo+IMKgICogQGZkOiBvcGVuIGRybSBmaWxlIGRlc2NyaXB0b3IKPiBAQCAtMTI5Nywx MSArMTU0NCwxMCBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGludCBm ZCwKPiBzdHJ1Y3QgaWd0X2ZiICpmYikKPiDCoCAqLwo+IMKgY2Fpcm9fc3VyZmFjZV90ICppZ3Rf Z2V0X2NhaXJvX3N1cmZhY2UoaW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKPiDCoHsKPiAtCS8q IFRoaXMgZG9lc24ndCB3b3JrIGZvciBwbGFuYXIgZm9ybWF0cyBmb3Igbm93LCBidXQgd2Ugd2ls bAo+IGNvbnZlcnQgdGhlbSB0byBSR0IyNCBpbiB0aGUgZnV0dXJlLiAqLwo+IC0JaWd0X2Fzc2Vy dChmYi0+bnVtX3BsYW5lcyA8IDIpOwo+IC0KPiDCoAlpZiAoZmItPmNhaXJvX3N1cmZhY2UgPT0g TlVMTCkgewo+IC0JCWlmIChmYi0+dGlsaW5nID09IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJ TEVEIHx8Cj4gKwkJaWYgKGZiLT5udW1fcGxhbmVzID4gMSkKPiArCQkJY3JlYXRlX2NhaXJvX3N1 cmZhY2VfX2NvbnZlcnQoZmQsIGZiKTsKPiArCQllbHNlIGlmIChmYi0+dGlsaW5nID09IExPQ0FM X0k5MTVfRk9STUFUX01PRF9ZX1RJTEVECj4gfHwKPiDCoAkJwqDCoMKgwqBmYi0+dGlsaW5nID09 IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKPiDCoAkJCWNyZWF0ZV9jYWlyb19zdXJm YWNlX19ibGl0KGZkLCBmYik7Cj4gwqAJCWVsc2UKLS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwgT1RD CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK