From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v3 23/23] drm/i915: Use preferred kernel types in i915_gem_gtt.c Date: Tue, 14 Feb 2017 13:14:18 +0200 Message-ID: <877f4towhh.fsf@gaia.fi.intel.com> References: <20170214110457.9316-1-chris@chris-wilson.co.uk> <20170214110457.9316-24-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F70589B9F for ; Tue, 14 Feb 2017 11:15:56 +0000 (UTC) In-Reply-To: <20170214110457.9316-24-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: matthew.auld@intel.com List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gTWFrZSBj aGVja3BhdGNoIGhhcHB5IGFuZCBtYWtlIHRoZSB1c2Ugb2YgdTMyL3U2NCBjb25zaXN0ZW50IHRo cm91Z2hvdXQKPiBpOTE1X2dlbV9ndHQuW2NoXQo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2ls c29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpOb3cgaXQgbG9va3MgcHJldHR5LgoKUmV2 aWV3ZWQtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgoKPiAtLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgfCA4MyArKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oIHwgNTYgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ICAyIGZpbGVzIGNoYW5nZWQs IDY5IGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmMKPiBpbmRleCA5ZGQxNjFhNGE4YTIuLjY1ODkyZDZlMzg3NyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTg4Nyw3ICs4ODcsNyBAQCBzdGF0aWMg dm9pZCBnZW44X3BwZ3R0X2luc2VydF8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfNGx2bChzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCj4gLQkJ CQkgICB1aW50NjRfdCBzdGFydCwKPiArCQkJCSAgIHU2NCBzdGFydCwKPiAgCQkJCSAgIGVudW0g aTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAgCQkJCSAgIHUzMiB1bnVzZWQpCj4gIHsK PiBAQCAtMTE2MSwyNSArMTE2MSwyNSBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfNGx2 bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjhf ZHVtcF9wZHAoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAJCQkgIHN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCwKPiAtCQkJICB1aW50NjRfdCBzdGFydCwgdWlu dDY0X3QgbGVuZ3RoLAo+ICsJCQkgIHU2NCBzdGFydCwgdTY0IGxlbmd0aCwKPiAgCQkJICBnZW44 X3B0ZV90IHNjcmF0Y2hfcHRlLAo+ICAJCQkgIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgewo+ICAJ c3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOwo+IC0JdWludDMyX3QgcGRwZTsKPiArCXUz MiBwZHBlOwo+ICAKPiAgCWdlbjhfZm9yX2VhY2hfcGRwZShwZCwgcGRwLCBzdGFydCwgbGVuZ3Ro LCBwZHBlKSB7Cj4gIAkJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQ7Cj4gLQkJdWludDY0X3Qg cGRfbGVuID0gbGVuZ3RoOwo+IC0JCXVpbnQ2NF90IHBkX3N0YXJ0ID0gc3RhcnQ7Cj4gLQkJdWlu dDMyX3QgcGRlOwo+ICsJCXU2NCBwZF9sZW4gPSBsZW5ndGg7Cj4gKwkJdTY0IHBkX3N0YXJ0ID0g c3RhcnQ7Cj4gKwkJdTMyIHBkZTsKPiAgCj4gIAkJaWYgKHBkcC0+cGFnZV9kaXJlY3RvcnlbcGRw ZV0gPT0gcHBndHQtPmJhc2Uuc2NyYXRjaF9wZCkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCXNl cV9wcmludGYobSwgIlx0UERQRSAjJWRcbiIsIHBkcGUpOwo+ICAJCWdlbjhfZm9yX2VhY2hfcGRl KHB0LCBwZCwgcGRfc3RhcnQsIHBkX2xlbiwgcGRlKSB7Cj4gLQkJCXVpbnQzMl90ICBwdGU7Cj4g KwkJCXUzMiBwdGU7Cj4gIAkJCWdlbjhfcHRlX3QgKnB0X3ZhZGRyOwo+ICAKPiAgCQkJaWYgKHBk LT5wYWdlX3RhYmxlW3BkZV0gPT0gcHBndHQtPmJhc2Uuc2NyYXRjaF9wdCkKPiBAQCAtMTE4Nywx MCArMTE4Nyw5IEBAIHN0YXRpYyB2b2lkIGdlbjhfZHVtcF9wZHAoc3RydWN0IGk5MTVfaHdfcHBn dHQgKnBwZ3R0LAo+ICAKPiAgCQkJcHRfdmFkZHIgPSBrbWFwX2F0b21pY19weChwdCk7Cj4gIAkJ CWZvciAocHRlID0gMDsgcHRlIDwgR0VOOF9QVEVTOyBwdGUgKz0gNCkgewo+IC0JCQkJdWludDY0 X3QgdmEgPQo+IC0JCQkJCShwZHBlIDw8IEdFTjhfUERQRV9TSElGVCkgfAo+IC0JCQkJCShwZGUg PDwgR0VOOF9QREVfU0hJRlQpIHwKPiAtCQkJCQkocHRlIDw8IEdFTjhfUFRFX1NISUZUKTsKPiAr CQkJCXU2NCB2YSA9IChwZHBlIDw8IEdFTjhfUERQRV9TSElGVCB8Cj4gKwkJCQkJICBwZGUgPDwg R0VOOF9QREVfU0hJRlQgfAo+ICsJCQkJCSAgcHRlIDw8IEdFTjhfUFRFX1NISUZUKTsKPiAgCQkJ CWludCBpOwo+ICAJCQkJYm9vbCBmb3VuZCA9IGZhbHNlOwo+ICAKPiBAQCAtMTIyNCw3ICsxMjIz LDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9kdW1wX3BwZ3R0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCwgc3RydWN0IHNlcV9maWxlICptKQo+ICAJaWYgKCFVU0VTX0ZVTExfNDhCSVRfUFBHVFQo dm0tPmk5MTUpKSB7Cj4gIAkJZ2VuOF9kdW1wX3BkcChwcGd0dCwgJnBwZ3R0LT5wZHAsIHN0YXJ0 LCBsZW5ndGgsIHNjcmF0Y2hfcHRlLCBtKTsKPiAgCX0gZWxzZSB7Cj4gLQkJdWludDY0X3QgcG1s NGU7Cj4gKwkJdTY0IHBtbDRlOwo+ICAJCXN0cnVjdCBpOTE1X3BtbDQgKnBtbDQgPSAmcHBndHQt PnBtbDQ7Cj4gIAkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwOwo+ICAK PiBAQCAtMTQwNiw3ICsxNDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdlbjZfd3JpdGVfcGRl KGNvbnN0IHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgLyogV3JpdGUgYWxsIHRoZSBw YWdlIHRhYmxlcyBmb3VuZCBpbiB0aGUgcHBndHQgc3RydWN0dXJlIHRvIGluY3JlbWVudGluZyBw YWdlCj4gICAqIGRpcmVjdG9yaWVzLiAqLwo+ICBzdGF0aWMgdm9pZCBnZW42X3dyaXRlX3BhZ2Vf cmFuZ2Uoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+IC0JCQkJICB1aW50MzJfdCBzdGFy dCwgdWludDMyX3QgbGVuZ3RoKQo+ICsJCQkJICB1MzIgc3RhcnQsIHUzMiBsZW5ndGgpCj4gIHsK PiAgCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0Owo+ICAJdW5zaWduZWQgaW50IHBkZTsKPiBA QCAtMTQxOCw3ICsxNDE3LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl93cml0ZV9wYWdlX3JhbmdlKHN0 cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCXdtYigpOwo+ICB9Cj4gIAo+IC1zdGF0aWMg aW5saW5lIHVpbnQzMl90IGdldF9wZF9vZmZzZXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0 KQo+ICtzdGF0aWMgaW5saW5lIHUzMiBnZXRfcGRfb2Zmc2V0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICpwcGd0dCkKPiAgewo+ICAJR0VNX0JVR19PTihwcGd0dC0+cGQuYmFzZS5nZ3R0X29mZnNldCAm IDB4M2YpOwo+ICAJcmV0dXJuIHBwZ3R0LT5wZC5iYXNlLmdndHRfb2Zmc2V0IDw8IDEwOwo+IEBA IC0xNTEyLDcgKzE1MTEsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2VuYWJsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHN0YXRpYyB2b2lkIGdlbjdfcHBndHRfZW5h YmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+ICAJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JdWludDMyX3QgZWNvY2hrLCBlY29iaXRzOwo+ICsJ dTMyIGVjb2NoaywgZWNvYml0czsKPiAgCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICAKPiAg CWVjb2JpdHMgPSBJOTE1X1JFQUQoR0FDX0VDT19CSVRTKTsKPiBAQCAtMTUzNiw3ICsxNTM1LDcg QEAgc3RhdGljIHZvaWQgZ2VuN19wcGd0dF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9lbmFibGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gLQl1aW50MzJfdCBlY29jaGssIGdhYl9j dGwsIGVjb2JpdHM7Cj4gKwl1MzIgZWNvY2hrLCBnYWJfY3RsLCBlY29iaXRzOwo+ICAKPiAgCWVj b2JpdHMgPSBJOTE1X1JFQUQoR0FDX0VDT19CSVRTKTsKPiAgCUk5MTVfV1JJVEUoR0FDX0VDT19C SVRTLCBlY29iaXRzIHwgRUNPQklUU19TTkJfQklUIHwKPiBAQCAtMTU4OCw4ICsxNTg3LDkgQEAg c3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfaW5zZXJ0X2VudHJpZXMoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkgICAgICBzdHJ1Y3Qgc2dfdGFibGUg KnBhZ2VzLAo+IC0JCQkJICAgICAgdWludDY0X3Qgc3RhcnQsCj4gLQkJCQkgICAgICBlbnVtIGk5 MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsIHUzMiBmbGFncykKPiArCQkJCSAgICAgIHU2NCBz dGFydCwKPiArCQkJCSAgICAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAr CQkJCSAgICAgIHUzMiBmbGFncykKPiAgewo+ICAJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0 ID0gaTkxNV92bV90b19wcGd0dCh2bSk7Cj4gIAl1bnNpZ25lZCBmaXJzdF9lbnRyeSA9IHN0YXJ0 ID4+IFBBR0VfU0hJRlQ7Cj4gQEAgLTE2ODksNyArMTY4OSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZf cHBndHRfY2xlYW51cChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgCXN0cnVjdCBp OTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGk5MTVfdm1fdG9fcHBndHQodm0pOwo+ICAJc3RydWN0IGk5 MTVfcGFnZV9kaXJlY3RvcnkgKnBkID0gJnBwZ3R0LT5wZDsKPiAgCXN0cnVjdCBpOTE1X3BhZ2Vf dGFibGUgKnB0Owo+IC0JdWludDMyX3QgcGRlOwo+ICsJdTMyIHBkZTsKPiAgCj4gIAlkcm1fbW1f cmVtb3ZlX25vZGUoJnBwZ3R0LT5ub2RlKTsKPiAgCj4gQEAgLTE3NDcsMTAgKzE3NDcsMTAgQEAg c3RhdGljIGludCBnZW42X3BwZ3R0X2FsbG9jKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkK PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuNl9zY3JhdGNoX3ZhX3JhbmdlKHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCwKPiAtCQkJCSAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbmd0 aCkKPiArCQkJCSAgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV9w YWdlX3RhYmxlICp1bnVzZWQ7Cj4gLQl1aW50MzJfdCBwZGU7Cj4gKwl1MzIgcGRlOwo+ICAKPiAg CWdlbjZfZm9yX2VhY2hfcGRlKHVudXNlZCwgJnBwZ3R0LT5wZCwgc3RhcnQsIGxlbmd0aCwgcGRl KQo+ICAJCXBwZ3R0LT5wZC5wYWdlX3RhYmxlW3BkZV0gPSBwcGd0dC0+YmFzZS5zY3JhdGNoX3B0 Owo+IEBAIC0yMDQ0LDcgKzIwNDQsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3NldF9wdGUodm9pZCBf X2lvbWVtICphZGRyLCBnZW44X3B0ZV90IHB0ZSkKPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjhfZ2d0 dF9pbnNlcnRfcGFnZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJCSAgZG1h X2FkZHJfdCBhZGRyLAo+IC0JCQkJICB1aW50NjRfdCBvZmZzZXQsCj4gKwkJCQkgIHU2NCBvZmZz ZXQsCj4gIAkJCQkgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBsZXZlbCwKPiAgCQkJCSAgdTMyIHVu dXNlZCkKPiAgewo+IEBAIC0yMDU5LDggKzIwNTksOSBAQCBzdGF0aWMgdm9pZCBnZW44X2dndHRf aW5zZXJ0X3BhZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ICBzdGF0aWMg dm9pZCBnZW44X2dndHRfaW5zZXJ0X2VudHJpZXMoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0sCj4gIAkJCQkgICAgIHN0cnVjdCBzZ190YWJsZSAqc3QsCj4gLQkJCQkgICAgIHVpbnQ2NF90 IHN0YXJ0LAo+IC0JCQkJICAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgbGV2ZWwsIHUzMiB1bnVz ZWQpCj4gKwkJCQkgICAgIHU2NCBzdGFydCwKPiArCQkJCSAgICAgZW51bSBpOTE1X2NhY2hlX2xl dmVsIGxldmVsLAo+ICsJCQkJICAgICB1MzIgdW51c2VkKQo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV9n Z3R0ICpnZ3R0ID0gaTkxNV92bV90b19nZ3R0KHZtKTsKPiAgCXN0cnVjdCBzZ3RfaXRlciBzZ3Rf aXRlcjsKPiBAQCAtMjA4NSw3ICsyMDg2LDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9nZ3R0X2luc2Vy dF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICBzdHJ1Y3QgaW5zZXJ0 X2VudHJpZXMgewo+ICAJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07Cj4gIAlzdHJ1Y3Qg c2dfdGFibGUgKnN0Owo+IC0JdWludDY0X3Qgc3RhcnQ7Cj4gKwl1NjQgc3RhcnQ7Cj4gIAllbnVt IGk5MTVfY2FjaGVfbGV2ZWwgbGV2ZWw7Cj4gIAl1MzIgZmxhZ3M7Cj4gIH07Cj4gQEAgLTIxMDAs NyArMjEwMSw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9nZ3R0X2luc2VydF9lbnRyaWVzX19jYih2b2lk ICpfYXJnKQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuOF9nZ3R0X2luc2VydF9lbnRyaWVzX19CS0wo c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkJICBzdHJ1Y3Qgc2dfdGFibGUg KnN0LAo+IC0JCQkJCSAgdWludDY0X3Qgc3RhcnQsCj4gKwkJCQkJICB1NjQgc3RhcnQsCj4gIAkJ CQkJICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgbGV2ZWwsCj4gIAkJCQkJICB1MzIgZmxhZ3MpCj4g IHsKPiBAQCAtMjExMCw3ICsyMTExLDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9nZ3R0X2luc2VydF9l bnRyaWVzX19CS0woc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ICBzdGF0aWMg dm9pZCBnZW42X2dndHRfaW5zZXJ0X3BhZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Cj4gIAkJCQkgIGRtYV9hZGRyX3QgYWRkciwKPiAtCQkJCSAgdWludDY0X3Qgb2Zmc2V0LAo+ICsJ CQkJICB1NjQgb2Zmc2V0LAo+ICAJCQkJICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgbGV2ZWwsCj4g IAkJCQkgIHUzMiBmbGFncykKPiAgewo+IEBAIC0yMTMxLDggKzIxMzIsOSBAQCBzdGF0aWMgdm9p ZCBnZW42X2dndHRfaW5zZXJ0X3BhZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4g ICAqLwo+ICBzdGF0aWMgdm9pZCBnZW42X2dndHRfaW5zZXJ0X2VudHJpZXMoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkgICAgIHN0cnVjdCBzZ190YWJsZSAqc3QsCj4gLQkJ CQkgICAgIHVpbnQ2NF90IHN0YXJ0LAo+IC0JCQkJICAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwg bGV2ZWwsIHUzMiBmbGFncykKPiArCQkJCSAgICAgdTY0IHN0YXJ0LAo+ICsJCQkJICAgICBlbnVt IGk5MTVfY2FjaGVfbGV2ZWwgbGV2ZWwsCj4gKwkJCQkgICAgIHUzMiBmbGFncykKPiAgewo+ICAJ c3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9IGk5MTVfdm1fdG9fZ2d0dCh2bSk7Cj4gIAlnZW42X3B0 ZV90IF9faW9tZW0gKmVudHJpZXMgPSAoZ2VuNl9wdGVfdCBfX2lvbWVtICopZ2d0dC0+Z3NtOwo+ IEBAIC0yMTUxLDEyICsyMTUzLDEyIEBAIHN0YXRpYyB2b2lkIGdlbjZfZ2d0dF9pbnNlcnRfZW50 cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgfQo+ICAKPiAgc3RhdGljIHZv aWQgbm9wX2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkg ICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbmd0aCkKPiArCQkJICAgIHU2NCBzdGFydCwg dTY0IGxlbmd0aCkKPiAgewo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBnZW44X2dndHRfY2xlYXJf cmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gLQkJCQkgIHVpbnQ2NF90IHN0 YXJ0LCB1aW50NjRfdCBsZW5ndGgpCj4gKwkJCQkgIHU2NCBzdGFydCwgdTY0IGxlbmd0aCkKPiAg ewo+ICAJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9IGk5MTVfdm1fdG9fZ2d0dCh2bSk7Cj4gIAl1 bnNpZ25lZCBmaXJzdF9lbnRyeSA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Cj4gQEAgLTIxNzgsOCAr MjE4MCw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfZ2d0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSwKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZ2VuNl9nZ3R0X2NsZWFy X3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkJICB1aW50NjRfdCBz dGFydCwKPiAtCQkJCSAgdWludDY0X3QgbGVuZ3RoKQo+ICsJCQkJICB1NjQgc3RhcnQsIHU2NCBs ZW5ndGgpCj4gIHsKPiAgCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSBpOTE1X3ZtX3RvX2dndHQo dm0pOwo+ICAJdW5zaWduZWQgZmlyc3RfZW50cnkgPSBzdGFydCA+PiBQQUdFX1NISUZUOwo+IEBA IC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0aWMgdm9pZCBnZW42X2dndHRfY2xlYXJfcmFuZ2Uoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAo+ICBzdGF0aWMgdm9pZCBpOTE1X2dndHRf aW5zZXJ0X3BhZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkgIGRtYV9h ZGRyX3QgYWRkciwKPiAtCQkJCSAgdWludDY0X3Qgb2Zmc2V0LAo+ICsJCQkJICB1NjQgb2Zmc2V0 LAo+ICAJCQkJICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCj4gIAkJCQkgIHUz MiB1bnVzZWQpCj4gIHsKPiBAQCAtMjIxNSw4ICsyMjE2LDkgQEAgc3RhdGljIHZvaWQgaTkxNV9n Z3R0X2luc2VydF9wYWdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAKPiAgc3Rh dGljIHZvaWQgaTkxNV9nZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAo+ICAJCQkJICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAo+IC0JCQkJICAgICB1 aW50NjRfdCBzdGFydCwKPiAtCQkJCSAgICAgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xl dmVsLCB1MzIgdW51c2VkKQo+ICsJCQkJICAgICB1NjQgc3RhcnQsCj4gKwkJCQkgICAgIGVudW0g aTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiArCQkJCSAgICAgdTMyIHVudXNlZCkKPiAg ewo+ICAJdW5zaWduZWQgaW50IGZsYWdzID0gKGNhY2hlX2xldmVsID09IEk5MTVfQ0FDSEVfTk9O RSkgPwo+ICAJCUFHUF9VU0VSX01FTU9SWSA6IEFHUF9VU0VSX0NBQ0hFRF9NRU1PUlk7Cj4gQEAg LTIyMjUsOCArMjIyNyw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2d0dF9pbnNlcnRfZW50cmllcyhz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgaTkx NV9nZ3R0X2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkJ ICB1aW50NjRfdCBzdGFydCwKPiAtCQkJCSAgdWludDY0X3QgbGVuZ3RoKQo+ICsJCQkJICB1NjQg c3RhcnQsIHU2NCBsZW5ndGgpCj4gIHsKPiAgCWludGVsX2d0dF9jbGVhcl9yYW5nZShzdGFydCA+ PiBQQUdFX1NISUZULCBsZW5ndGggPj4gUEFHRV9TSElGVCk7Cj4gIH0KPiBAQCAtMjYzNSw3ICsy NjM2LDcgQEAgc3RhdGljIGludCBnZ3R0X3Byb2JlX2NvbW1vbihzdHJ1Y3QgaTkxNV9nZ3R0ICpn Z3R0LCB1NjQgc2l6ZSkKPiAgICogd3JpdGluZyB0aGlzIGRhdGEgc2hvdWxkbid0IGJlIGhhcm1m dWwgZXZlbiBpbiB0aG9zZSBjYXNlcy4gKi8KPiAgc3RhdGljIHZvaWQgYmR3X3NldHVwX3ByaXZh dGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAtCXVpbnQ2 NF90IHBhdDsKPiArCXU2NCBwYXQ7Cj4gIAo+ICAJcGF0ID0gR0VOOF9QUEFUKDAsIEdFTjhfUFBB VF9XQiB8IEdFTjhfUFBBVF9MTEMpICAgICB8IC8qIGZvciBub3JtYWwgb2JqZWN0cywgbm8gZUxM QyAqLwo+ICAJICAgICAgR0VOOF9QUEFUKDEsIEdFTjhfUFBBVF9XQyB8IEdFTjhfUFBBVF9MTENF TExDKSB8IC8qIGZvciBzb21ldGhpbmcgcG9pbnRpbmcgdG8gcHRlcz8gKi8KPiBAQCAtMjY3MCw3 ICsyNjcxLDcgQEAgc3RhdGljIHZvaWQgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAo+ICBzdGF0aWMgdm9pZCBjaHZfc2V0dXBfcHJp dmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0JdWlu dDY0X3QgcGF0Owo+ICsJdTY0IHBhdDsKPiAgCj4gIAkvKgo+ICAJICogTWFwIFdCIG9uIEJEVyB0 byBzbm9vcGVkIG9uIENIVi4KPiBAQCAtMzA2Nyw3ICszMDY4LDcgQEAgc3RhdGljIG5vaW5saW5l IHN0cnVjdCBzZ190YWJsZSAqCj4gIGludGVsX3JvdGF0ZV9wYWdlcyhzdHJ1Y3QgaW50ZWxfcm90 YXRpb25faW5mbyAqcm90X2luZm8sCj4gIAkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKPiAgewo+IC0JY29uc3Qgc2l6ZV90IG5fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSAvIFBB R0VfU0laRTsKPiArCWNvbnN0IHVuc2lnbmVkIGxvbmcgbl9wYWdlcyA9IG9iai0+YmFzZS5zaXpl IC8gUEFHRV9TSVpFOwo+ICAJdW5zaWduZWQgaW50IHNpemUgPSBpbnRlbF9yb3RhdGlvbl9pbmZv X3NpemUocm90X2luZm8pOwo+ICAJc3RydWN0IHNndF9pdGVyIHNndF9pdGVyOwo+ICAJZG1hX2Fk ZHJfdCBkbWFfYWRkcjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IGluZGV4IGU4 NWZmNmM5NzIwOC4uZjdkNGUxOTRhMjI3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmgKPiBAQCAtNTMsMTEgKzUzLDExIEBACj4gIHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZh dGU7Cj4gIHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWc7Cj4gIAo+IC10eXBlZGVmIHVpbnQzMl90 IGdlbjZfcHRlX3Q7Cj4gLXR5cGVkZWYgdWludDY0X3QgZ2VuOF9wdGVfdDsKPiAtdHlwZWRlZiB1 aW50NjRfdCBnZW44X3BkZV90Owo+IC10eXBlZGVmIHVpbnQ2NF90IGdlbjhfcHBndHRfcGRwZV90 Owo+IC10eXBlZGVmIHVpbnQ2NF90IGdlbjhfcHBndHRfcG1sNGVfdDsKPiArdHlwZWRlZiB1MzIg Z2VuNl9wdGVfdDsKPiArdHlwZWRlZiB1NjQgZ2VuOF9wdGVfdDsKPiArdHlwZWRlZiB1NjQgZ2Vu OF9wZGVfdDsKPiArdHlwZWRlZiB1NjQgZ2VuOF9wcGd0dF9wZHBlX3Q7Cj4gK3R5cGVkZWYgdTY0 IGdlbjhfcHBndHRfcG1sNGVfdDsKPiAgCj4gICNkZWZpbmUgZ2d0dF90b3RhbF9lbnRyaWVzKGdn dHQpICgoZ2d0dCktPmJhc2UudG90YWwgPj4gUEFHRV9TSElGVCkKPiAgCj4gQEAgLTE0Myw3ICsx NDMsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IGdlbjhfcHBndHRfcG1sNGVfdDsKPiAgI2RlZmluZSBH RU44X1BQQVRfV0MJCQkoMTw8MCkKPiAgI2RlZmluZSBHRU44X1BQQVRfVUMJCQkoMDw8MCkKPiAg I2RlZmluZSBHRU44X1BQQVRfRUxMQ19PVkVSUklERQkJKDA8PDIpCj4gLSNkZWZpbmUgR0VOOF9Q UEFUKGksIHgpCQkJKCh1aW50NjRfdCkgKHgpIDw8ICgoaSkgKiA4KSkKPiArI2RlZmluZSBHRU44 X1BQQVQoaSwgeCkJCQkoKHU2NCkoeCkgPDwgKChpKSAqIDgpKQo+ICAKPiAgc3RydWN0IHNnX3Rh YmxlOwo+ICAKPiBAQCAtMjEwLDcgKzIxMCw3IEBAIHN0cnVjdCBpOTE1X3BhZ2VfZG1hIHsKPiAg CQkvKiBGb3IgZ2VuNi9nZW43IG9ubHkuIFRoaXMgaXMgdGhlIG9mZnNldCBpbiB0aGUgR0dUVAo+ ICAJCSAqIHdoZXJlIHRoZSBwYWdlIGRpcmVjdG9yeSBlbnRyaWVzIGZvciBQUEdUVCBiZWdpbgo+ ICAJCSAqLwo+IC0JCXVpbnQzMl90IGdndHRfb2Zmc2V0Owo+ICsJCXUzMiBnZ3R0X29mZnNldDsK PiAgCX07Cj4gIH07Cj4gIAo+IEBAIC0zMDUsMjAgKzMwNSwxOSBAQCBzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlIHsKPiAgCS8qIGZsYWdzIGZvciBwdGVfZW5jb2RlICovCj4gICNkZWZpbmUgUFRF X1JFQURfT05MWQkoMTw8MCkKPiAgCWludCAoKmFsbG9jYXRlX3ZhX3JhbmdlKShzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPiAtCQkJCSB1aW50NjRfdCBzdGFydCwKPiAtCQkJCSB1aW50 NjRfdCBsZW5ndGgpOwo+ICsJCQkJIHU2NCBzdGFydCwgdTY0IGxlbmd0aCk7Cj4gIAl2b2lkICgq Y2xlYXJfcmFuZ2UpKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+IC0JCQkgICAgdWlu dDY0X3Qgc3RhcnQsCj4gLQkJCSAgICB1aW50NjRfdCBsZW5ndGgpOwo+ICsJCQkgICAgdTY0IHN0 YXJ0LCB1NjQgbGVuZ3RoKTsKPiAgCXZvaWQgKCppbnNlcnRfcGFnZSkoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCj4gIAkJCSAgICBkbWFfYWRkcl90IGFkZHIsCj4gLQkJCSAgICB1aW50 NjRfdCBvZmZzZXQsCj4gKwkJCSAgICB1NjQgb2Zmc2V0LAo+ICAJCQkgICAgZW51bSBpOTE1X2Nh Y2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ICAJCQkgICAgdTMyIGZsYWdzKTsKPiAgCXZvaWQgKCpp bnNlcnRfZW50cmllcykoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCSAgICAg ICBzdHJ1Y3Qgc2dfdGFibGUgKnN0LAo+IC0JCQkgICAgICAgdWludDY0X3Qgc3RhcnQsCj4gLQkJ CSAgICAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsIHUzMiBmbGFncyk7Cj4g KwkJCSAgICAgICB1NjQgc3RhcnQsCj4gKwkJCSAgICAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwg Y2FjaGVfbGV2ZWwsCj4gKwkJCSAgICAgICB1MzIgZmxhZ3MpOwo+ICAJdm9pZCAoKmNsZWFudXAp KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKTsKPiAgCS8qKiBVbm1hcCBhbiBvYmplY3Qg ZnJvbSBhbiBhZGRyZXNzIHNwYWNlLiBUaGlzIHVzdWFsbHkgY29uc2lzdHMgb2YKPiAgCSAqIHNl dHRpbmcgdGhlIHZhbGlkIFBURSBlbnRyaWVzIHRvIGEgcmVzZXJ2ZWQgc2NyYXRjaCBwYWdlLiAq Lwo+IEBAIC00MTEsOSArNDEwLDkgQEAgc3RydWN0IGk5MTVfaHdfcHBndHQgewo+ICAJCShwdCA9 IChwZCktPnBhZ2VfdGFibGVbaXRlcl0sIHRydWUpOwkJCVwKPiAgCSAgICAgKytpdGVyKQo+ICAK PiAtc3RhdGljIGlubGluZSB1aW50MzJfdCBpOTE1X3B0ZV9pbmRleCh1aW50NjRfdCBhZGRyZXNz LCB1aW50MzJfdCBwZGVfc2hpZnQpCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGk5MTVfcHRlX2luZGV4 KHU2NCBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgcGRlX3NoaWZ0KQo+ICB7Cj4gLQljb25zdCB1aW50 MzJfdCBtYXNrID0gTlVNX1BURShwZGVfc2hpZnQpIC0gMTsKPiArCWNvbnN0IHUzMiBtYXNrID0g TlVNX1BURShwZGVfc2hpZnQpIC0gMTsKPiAgCj4gIAlyZXR1cm4gKGFkZHJlc3MgPj4gUEFHRV9T SElGVCkgJiBtYXNrOwo+ICB9Cj4gQEAgLTQyMiwxMSArNDIxLDEwIEBAIHN0YXRpYyBpbmxpbmUg dWludDMyX3QgaTkxNV9wdGVfaW5kZXgodWludDY0X3QgYWRkcmVzcywgdWludDMyX3QgcGRlX3No aWZ0KQo+ICAgKiBkb2VzIG5vdCBjcm9zcyBhIHBhZ2UgdGFibGUgYm91bmRhcnksIHNvIHRoZSBt YXggdmFsdWUgd291bGQgYmUKPiAgICogR0VONl9QVEVTIGZvciBHRU42LCBhbmQgR0VOOF9QVEVT IGZvciBHRU44Lgo+ICAqLwo+IC1zdGF0aWMgaW5saW5lIHVpbnQzMl90IGk5MTVfcHRlX2NvdW50 KHVpbnQ2NF90IGFkZHIsIHNpemVfdCBsZW5ndGgsCj4gLQkJCQkgICAgICB1aW50MzJfdCBwZGVf c2hpZnQpCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGk5MTVfcHRlX2NvdW50KHU2NCBhZGRyLCB1NjQg bGVuZ3RoLCB1bnNpZ25lZCBpbnQgcGRlX3NoaWZ0KQo+ICB7Cj4gLQljb25zdCB1aW50NjRfdCBt YXNrID0gfigoMVVMTCA8PCBwZGVfc2hpZnQpIC0gMSk7Cj4gLQl1aW50NjRfdCBlbmQ7Cj4gKwlj b25zdCB1NjQgbWFzayA9IH4oKDFVTEwgPDwgcGRlX3NoaWZ0KSAtIDEpOwo+ICsJdTY0IGVuZDsK PiAgCj4gIAlXQVJOX09OKGxlbmd0aCA9PSAwKTsKPiAgCVdBUk5fT04ob2Zmc2V0X2luX3BhZ2Uo YWRkcnxsZW5ndGgpKTsKPiBAQCAtNDM5LDIyICs0MzcsMjIgQEAgc3RhdGljIGlubGluZSB1aW50 MzJfdCBpOTE1X3B0ZV9jb3VudCh1aW50NjRfdCBhZGRyLCBzaXplX3QgbGVuZ3RoLAo+ICAJcmV0 dXJuIGk5MTVfcHRlX2luZGV4KGVuZCwgcGRlX3NoaWZ0KSAtIGk5MTVfcHRlX2luZGV4KGFkZHIs IHBkZV9zaGlmdCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgaTkxNV9wZGVf aW5kZXgodWludDY0X3QgYWRkciwgdWludDMyX3Qgc2hpZnQpCj4gK3N0YXRpYyBpbmxpbmUgdTMy IGk5MTVfcGRlX2luZGV4KHU2NCBhZGRyLCB1MzIgc2hpZnQpCj4gIHsKPiAgCXJldHVybiAoYWRk ciA+PiBzaGlmdCkgJiBJOTE1X1BERV9NQVNLOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHVp bnQzMl90IGdlbjZfcHRlX2luZGV4KHVpbnQzMl90IGFkZHIpCj4gK3N0YXRpYyBpbmxpbmUgdTMy IGdlbjZfcHRlX2luZGV4KHUzMiBhZGRyKQo+ICB7Cj4gIAlyZXR1cm4gaTkxNV9wdGVfaW5kZXgo YWRkciwgR0VONl9QREVfU0hJRlQpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHNpemVfdCBn ZW42X3B0ZV9jb3VudCh1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBsZW5ndGgpCj4gK3N0YXRpYyBp bmxpbmUgdTMyIGdlbjZfcHRlX2NvdW50KHUzMiBhZGRyLCB1MzIgbGVuZ3RoKQo+ICB7Cj4gIAly ZXR1cm4gaTkxNV9wdGVfY291bnQoYWRkciwgbGVuZ3RoLCBHRU42X1BERV9TSElGVCk7Cj4gIH0K PiAgCj4gLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2VuNl9wZGVfaW5kZXgodWludDMyX3QgYWRk cikKPiArc3RhdGljIGlubGluZSB1MzIgZ2VuNl9wZGVfaW5kZXgodTMyIGFkZHIpCj4gIHsKPiAg CXJldHVybiBpOTE1X3BkZV9pbmRleChhZGRyLCBHRU42X1BERV9TSElGVCk7Cj4gIH0KPiBAQCAt NDg3LDI3ICs0ODUsMjcgQEAgc3RhdGljIGlubGluZSB1aW50MzJfdCBnZW42X3BkZV9pbmRleCh1 aW50MzJfdCBhZGRyKQo+ICAJCSAgICB0ZW1wID0gbWluKHRlbXAgLSBzdGFydCwgbGVuZ3RoKTsJ CQlcCj4gIAkJICAgIHN0YXJ0ICs9IHRlbXAsIGxlbmd0aCAtPSB0ZW1wOyB9KSwgKytpdGVyKQo+ ICAKPiAtc3RhdGljIGlubGluZSB1aW50MzJfdCBnZW44X3B0ZV9pbmRleCh1aW50NjRfdCBhZGRy ZXNzKQo+ICtzdGF0aWMgaW5saW5lIHUzMiBnZW44X3B0ZV9pbmRleCh1NjQgYWRkcmVzcykKPiAg ewo+ICAJcmV0dXJuIGk5MTVfcHRlX2luZGV4KGFkZHJlc3MsIEdFTjhfUERFX1NISUZUKTsKPiAg fQo+ICAKPiAtc3RhdGljIGlubGluZSB1aW50MzJfdCBnZW44X3BkZV9pbmRleCh1aW50NjRfdCBh ZGRyZXNzKQo+ICtzdGF0aWMgaW5saW5lIHUzMiBnZW44X3BkZV9pbmRleCh1NjQgYWRkcmVzcykK PiAgewo+ICAJcmV0dXJuIGk5MTVfcGRlX2luZGV4KGFkZHJlc3MsIEdFTjhfUERFX1NISUZUKTsK PiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSB1aW50MzJfdCBnZW44X3BkcGVfaW5kZXgodWludDY0 X3QgYWRkcmVzcykKPiArc3RhdGljIGlubGluZSB1MzIgZ2VuOF9wZHBlX2luZGV4KHU2NCBhZGRy ZXNzKQo+ICB7Cj4gIAlyZXR1cm4gKGFkZHJlc3MgPj4gR0VOOF9QRFBFX1NISUZUKSAmIEdFTjhf UERQRV9NQVNLOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHVpbnQzMl90IGdlbjhfcG1sNGVf aW5kZXgodWludDY0X3QgYWRkcmVzcykKPiArc3RhdGljIGlubGluZSB1MzIgZ2VuOF9wbWw0ZV9p bmRleCh1NjQgYWRkcmVzcykKPiAgewo+ICAJcmV0dXJuIChhZGRyZXNzID4+IEdFTjhfUE1MNEVf U0hJRlQpICYgR0VOOF9QTUw0RV9NQVNLOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHNpemVf dCBnZW44X3B0ZV9jb3VudCh1aW50NjRfdCBhZGRyZXNzLCB1aW50NjRfdCBsZW5ndGgpCj4gK3N0 YXRpYyBpbmxpbmUgdTY0IGdlbjhfcHRlX2NvdW50KHU2NCBhZGRyZXNzLCB1NjQgbGVuZ3RoKQo+ ICB7Cj4gIAlyZXR1cm4gaTkxNV9wdGVfY291bnQoYWRkcmVzcywgbGVuZ3RoLCBHRU44X1BERV9T SElGVCk7Cj4gIH0KPiAtLSAKPiAyLjExLjAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==