From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oscar Mateo Subject: Re: [PATCH v2] drm/i915: Check whitelist registers across resets Date: Fri, 13 Apr 2018 09:46:42 -0700 Message-ID: References: <20180412151357.601-1-chris@chris-wilson.co.uk> <20180412152134.21673-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 25E986E684 for ; Fri, 13 Apr 2018 16:46:44 +0000 (UTC) In-Reply-To: <20180412152134.21673-1-chris@chris-wilson.co.uk> Content-Language: en-US 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 List-Id: intel-gfx@lists.freedesktop.org CgpPbiA0LzEyLzIwMTggODoyMSBBTSwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IEFkZCBhIHNlbGZ0 ZXN0IHRvIGVuc3VyZSB0aGF0IHdlIHJlc3RvcmUgdGhlIHdoaXRlbGlzdGVkIHJlZ2lzdGVycyBh ZnRlcgo+IHJld3JpdGUgdGhlIHJlZ2lzdGVycyBldmVyeXRpbWUgdGhleSBtaWdodCBiZSBzY3J1 YmJlZCwgZS5nLiBtb2R1bGUKPiBsb2FkLCByZXNldCBhbmQgcmVzdW1lLiBGb3IgdGhlIG90aGVy IHZvbGF0aWxlIHdvcmthcm91bmQgcmVnaXN0ZXJzLCB3ZQo+IGV4cG9ydCB0aGVpciBwcmVzZW5j ZSB2aWEgZGVidWdmcyBhbmQgY2hlY2sgaW4gaWd0L2dlbV93b3JrYXJvdW5kcy4KPiBIb3dldmVy LCB3ZSBkb24ndCBleHBvcnQgdGhlIHdoaXRlbGlzdCBhbmQgcmF0aGVyIHRoYW4gZG8gc28sIGxl dCdzIHRlc3QKPiB0aGVtIGRpcmVjdGx5IGluIHRoZSBrZXJuZWwuCgpJIGd1ZXNzIG15IHF1ZXN0 aW9uIGlzLi4uIHdoeT8gd2hhdCB3YXMgdGhlIHByb2JsZW0gd2l0aCBleHBvcnRpbmcgdGhlIAps aXN0IG9mIHdoaXRlbGlzdCByZWdpc3RlcnMgaW4gZGVidWdmcz8KCj4gVGhlIHRlc3Qgd2UgdXNl IGlzIHRvIHJlYWQgdGhlIHJlZ2lzdGVycyBiYWNrIGZyb20gdGhlIENTICh0aGlzIGhlbHBzIHVz Cj4gYmUgc3VyZSB0aGF0IHRoZSByZWdpc3RlcnMgd2lsbCBiZSB2YWxpZCBmb3IgTUlfTFJJIGV0 YykuIEluIG9yZGVyIHRvCj4gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkIGxpc3QsIHdlIHNwbGl0IGlu dGVsX3doaXRlbGlzdF93b3JrYXJvdW5kc19lbWl0Cj4gaW50byB0d28gcGhhc2VzLCB0aGUgZmly c3QgdG8gYnVpbGQgdGhlIGxpc3QgYW5kIHRoZSBzZWNvbmQgdG8gYXBwbHkuCj4gSW5zaWRlIHRo ZSB0ZXN0LCB3ZSBvbmx5IGJ1aWxkIHRoZSBsaXN0IGFuZCB0aGVuIGNoZWNrIHRoYXQgbGlzdCBh Z2FpbnN0Cj4gdGhlIGh3Lgo+Cj4gdjI6IEZpbHRlciBvdXQgcHJlLWdlbjggYXMgdGhleSBkbyBu b3QgaGF2ZSBSSU5HX05PTlBSSVYuCj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogT3NjYXIgTWF0ZW8gPG9zY2FyLm1hdGVvQGlu dGVsLmNvbT4KPiBDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5j b20+Cj4gQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNv bT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAg ICB8ICAxNCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAg ICAgIHwgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAg ICAgICB8ICAgOCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5j ICAgICAgIHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5k cy5jICAgICAgfCAyMTUgKysrKysrLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfd29ya2Fyb3VuZHMuaCAgICAgIHwgICAyICstCj4gICAuLi4vZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCAgfCAgIDEgKwo+ICAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0 cy9pbnRlbF93b3JrYXJvdW5kcy5jICAgIHwgMjg0ICsrKysrKysrKysrKysrKysrKwo+ICAgOCBm aWxlcyBjaGFuZ2VkLCAzODkgaW5zZXJ0aW9ucygrKSwgMTQwIGRlbGV0aW9ucygtKQo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3Jr YXJvdW5kcy5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGluZGV4IDJlNjY1 MmE5YmI5ZS4uZTAyNzRmNDFiYzc2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMKPiBAQCAtMzMwNCwyNCArMzMwNCwxMyBAQCBzdGF0aWMgaW50IGk5MTVfc2hhcmVkX2RwbGxz X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gICAKPiAgIHN0YXRpYyBp bnQgaTkxNV93YV9yZWdpc3RlcnMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4g ICB7Cj4gLQlpbnQgaTsKPiAtCWludCByZXQ7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmU7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19p OTE1KG0tPnByaXZhdGUpOwo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ ZHJtOwo+ICAgCXN0cnVjdCBpOTE1X3dvcmthcm91bmRzICp3b3JrYXJvdW5kcyA9ICZkZXZfcHJp di0+d29ya2Fyb3VuZHM7Cj4gLQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAtCj4gLQlyZXQg PSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKPiAtCWlmIChy ZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCWludCBpOwo+ICAgCj4gICAJaW50ZWxfcnVudGltZV9w bV9nZXQoZGV2X3ByaXYpOwo+ICAgCj4gICAJc2VxX3ByaW50ZihtLCAiV29ya2Fyb3VuZHMgYXBw bGllZDogJWRcbiIsIHdvcmthcm91bmRzLT5jb3VudCk7Cj4gLQlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBkZXZfcHJpdiwgaWQpCj4gLQkJc2VxX3ByaW50ZihtLCAiSFcgd2hpdGVsaXN0IGNvdW50 IGZvciAlczogJWRcbiIsCj4gLQkJCSAgIGVuZ2luZS0+bmFtZSwgd29ya2Fyb3VuZHMtPmh3X3do aXRlbGlzdF9jb3VudFtpZF0pOwo+ICAgCWZvciAoaSA9IDA7IGkgPCB3b3JrYXJvdW5kcy0+Y291 bnQ7ICsraSkgewo+ICAgCQlpOTE1X3JlZ190IGFkZHI7Cj4gICAJCXUzMiBtYXNrLCB2YWx1ZSwg cmVhZDsKPiBAQCAtMzMzNyw3ICszMzI2LDYgQEAgc3RhdGljIGludCBpOTE1X3dhX3JlZ2lzdGVy cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAgIAl9Cj4gICAKPiAgIAlpbnRl bF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+IGluZGV4IDY0OWMwZjJmM2JhZS4uMTVlMTI2MGJlNThlIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gQEAgLTEyOTcsNyArMTI5Nyw2IEBAIHN0cnVjdCBpOTE1X3dhX3JlZyB7Cj4g ICBzdHJ1Y3QgaTkxNV93b3JrYXJvdW5kcyB7Cj4gICAJc3RydWN0IGk5MTVfd2FfcmVnIHJlZ1tJ OTE1X01BWF9XQV9SRUdTXTsKPiAgIAl1MzIgY291bnQ7Cj4gLQl1MzIgaHdfd2hpdGVsaXN0X2Nv dW50W0k5MTVfTlVNX0VOR0lORVNdOwo+ICAgfTsKPiAgIAo+ICAgc3RydWN0IGk5MTVfdmlydHVh bF9ncHUgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5kZXggYzdjODUxMzRhODRhLi40 ZjcyODU4N2E3NTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IEBAIC0xNzQ0LDkg KzE3NDQsNyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9yZW5kZXJfcmluZyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+ IC0JcmV0ID0gaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7Cj4gLQlp ZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlpbnRlbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNf YXBwbHkoZW5naW5lKTsKPiAgIAo+ICAgCS8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgQXN5bmNG bGlwIHBlcmZvcm1hbmNlIG9wdGltaXNhdGlvbnMgaW4gb3JkZXIKPiAgIAkgKiB0byB1c2UgTUlf V0FJVF9GT1JfRVZFTlQgd2l0aGluIHRoZSBDUy4gSXQgc2hvdWxkIGFscmVhZHkgYmUKPiBAQCAt MTc2OSw5ICsxNzY3LDcgQEAgc3RhdGljIGludCBnZW45X2luaXRfcmVuZGVyX3Jpbmcoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7 Cj4gICAKPiAtCXJldCA9IGludGVsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUp Owo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJaW50ZWxfd2hpdGVsaXN0X3dvcmth cm91bmRzX2FwcGx5KGVuZ2luZSk7Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gaW5kZXggNzU3YmIwOTkwYzA3Li5jNjhh YzYwNWI4YTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4g QEAgLTYxOCw5ICs2MTgsNyBAQCBzdGF0aWMgaW50IGluaXRfcmVuZGVyX3Jpbmcoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4g ICAKPiAtCXJldCA9IGludGVsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwo+ IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJaW50ZWxfd2hpdGVsaXN0X3dvcmthcm91 bmRzX2FwcGx5KGVuZ2luZSk7Cj4gICAKPiAgIAkvKiBXYVRpbWVkU2luZ2xlVmVydGV4RGlzcGF0 Y2g6Y2wsYncsY3RnLGVsayxpbGssc25iICovCj4gICAJaWYgKElTX0dFTihkZXZfcHJpdiwgNCwg NikpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRz LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jCj4gaW5kZXggYmJi ZjRlZDRhYTk3Li4xNjRiYjNhNDVmNWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfd29ya2Fyb3VuZHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3dvcmthcm91bmRzLmMKPiBAQCAtNjg3LDE3MCArNjg3LDE1MyBAQCB2b2lkIGludGVsX2d0X3dv cmthcm91bmRzX2FwcGx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIAkJ TUlTU0lOR19DQVNFKElOVEVMX0dFTihkZXZfcHJpdikpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBp bnQgd2FfcmluZ193aGl0ZWxpc3RfcmVnKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK PiAtCQkJCSBpOTE1X3JlZ190IHJlZykKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+IC0Jc3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgKndh ID0gJmRldl9wcml2LT53b3JrYXJvdW5kczsKPiAtCWNvbnN0IHVuc2lnbmVkIGludCBpbmRleCA9 IHdhLT5od193aGl0ZWxpc3RfY291bnRbZW5naW5lLT5pZF07Cj4gLQo+IC0JaWYgKFdBUk5fT04o aW5kZXggPj0gUklOR19NQVhfTk9OUFJJVl9TTE9UUykpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4g K3N0cnVjdCB3aGl0ZWxpc3Qgewo+ICsJaTkxNV9yZWdfdCByZWdbUklOR19NQVhfTk9OUFJJVl9T TE9UU107Cj4gKwl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwl1MzIgbm9waWQ7Cj4gK307Cj4gICAK PiAtCUk5MTVfV1JJVEUoUklOR19GT1JDRV9UT19OT05QUklWKGVuZ2luZS0+bW1pb19iYXNlLCBp bmRleCksCj4gLQkJICAgaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKSk7Cj4gLQl3YS0+aHdfd2hp dGVsaXN0X2NvdW50W2VuZ2luZS0+aWRdKys7Cj4gK3N0YXRpYyB2b2lkIHdoaXRlbGlzdF9yZWco c3RydWN0IHdoaXRlbGlzdCAqdywgaTkxNV9yZWdfdCByZWcpCj4gK3sKPiArCWlmIChHRU1fV0FS Tl9PTih3LT5jb3VudCA+PSBSSU5HX01BWF9OT05QUklWX1NMT1RTKSkKPiArCQlyZXR1cm47Cj4g ICAKPiAtCXJldHVybiAwOwo+ICsJdy0+cmVnW3ctPmNvdW50KytdID0gcmVnOwo+ICAgfQo+ICAg Cj4gLXN0YXRpYyBpbnQgYmR3X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRpYyB2b2lkIGJkd193aGl0ZWxpc3RfYnVpbGQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJc3RydWN0IHdoaXRlbGlzdCAq dykKPiAgIHsKPiAtCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgY2h2X3doaXRl bGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g K3N0YXRpYyB2b2lkIGNodl93aGl0ZWxpc3RfYnVpbGQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+ICsJCQkJc3RydWN0IHdoaXRlbGlzdCAqdykKPiAgIHsKPiAtCXJldHVybiAwOwo+ ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgZ2VuOV93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHko c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCBnZW45X3doaXRl bGlzdF9idWlsZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgc3RydWN0 IHdoaXRlbGlzdCAqdykKPiAgIHsKPiAtCWludCByZXQ7Cj4gLQo+ICAgCS8qIFdhVkZFU3RhdGVB ZnRlclBpcGVDb250cm9sd2l0aE1lZGlhU3RhdGVDbGVhcjpza2wsYnh0LGdsayxjZmwgKi8KPiAt CXJldCA9IHdhX3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUsIEdFTjlfQ1RYX1BSRUVNUFRfUkVH KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCXdoaXRlbGlzdF9yZWcodywgR0VO OV9DVFhfUFJFRU1QVF9SRUcpOwo+ICAgCj4gICAJLyogV2FFbmFibGVQcmVlbXB0aW9uR3JhbnVs YXJpdHlDb250cm9sQnlVTUQ6c2tsLGJ4dCxrYmwsY2ZsLFtjbmxdICovCj4gLQlyZXQgPSB3YV9y aW5nX3doaXRlbGlzdF9yZWcoZW5naW5lLCBHRU44X0NTX0NISUNLRU4xKTsKPiAtCWlmIChyZXQp Cj4gLQkJcmV0dXJuIHJldDsKPiArCXdoaXRlbGlzdF9yZWcodywgR0VOOF9DU19DSElDS0VOMSk7 Cj4gICAKPiAgIAkvKiBXYUFsbG93VU1EVG9Nb2RpZnlIRENDaGlja2VuMTpza2wsYnh0LGtibCxn bGssY2ZsICovCj4gLQlyZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9yZWcoZW5naW5lLCBHRU44X0hE Q19DSElDS0VOMSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjhfSERDX0NISUNLRU4xKTsKPiAgIH0KPiAgIAo+ IC1zdGF0aWMgaW50IHNrbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCBza2xfd2hpdGVsaXN0X2J1aWxkKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJCXN0cnVjdCB3aGl0ZWxpc3QgKncp Cj4gICB7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGdlbjlfd2hpdGVsaXN0X3dvcmthcm91 bmRzX2FwcGx5KGVuZ2luZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlnZW45 X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwo+ICAgCj4gICAJLyogV2FEaXNhYmxlTFNRQ1JP UEVSRmZvck9DTDpza2wgKi8KPiAtCXJldCA9IHdhX3Jpbmdfd2hpdGVsaXN0X3JlZyhlbmdpbmUs IEdFTjhfTDNTUUNSRUc0KTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQly ZXR1cm4gMDsKPiArCXdoaXRlbGlzdF9yZWcodywgR0VOOF9MM1NRQ1JFRzQpOwo+ICAgfQo+ICAg Cj4gLXN0YXRpYyBpbnQgYnh0X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRpYyB2b2lkIGJ4dF93aGl0ZWxpc3RfYnVpbGQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJc3RydWN0IHdoaXRlbGlzdCAq dykKPiAgIHsKPiAtCWludCByZXQ7Cj4gLQo+IC0JcmV0ID0gZ2VuOV93aGl0ZWxpc3Rfd29ya2Fy b3VuZHNfYXBwbHkoZW5naW5lKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4g LQlyZXR1cm4gMDsKPiArCWdlbjlfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7Cj4gICB9Cj4g ICAKPiAtc3RhdGljIGludCBrYmxfd2hpdGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArc3RhdGljIHZvaWQga2JsX3doaXRlbGlzdF9idWls ZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQlzdHJ1Y3Qgd2hpdGVsaXN0 ICp3KQo+ICAgewo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSBnZW45X3doaXRlbGlzdF93b3Jr YXJvdW5kc19hcHBseShlbmdpbmUpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ICsJ Z2VuOV93aGl0ZWxpc3RfYnVpbGQoZW5naW5lLCB3KTsKPiAgIAo+ICAgCS8qIFdhRGlzYWJsZUxT UUNST1BFUkZmb3JPQ0w6a2JsICovCj4gLQlyZXQgPSB3YV9yaW5nX3doaXRlbGlzdF9yZWcoZW5n aW5lLCBHRU44X0wzU1FDUkVHNCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ IC0JcmV0dXJuIDA7Cj4gKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjhfTDNTUUNSRUc0KTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgaW50IGdsa193aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCBnbGtfd2hpdGVsaXN0X2J1 aWxkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJCXN0cnVjdCB3aGl0ZWxp c3QgKncpCj4gICB7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGdlbjlfd2hpdGVsaXN0X3dv cmthcm91bmRzX2FwcGx5KGVuZ2luZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4g KwlnZW45X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwo+ICAgCj4gICAJLyogV0EgIzA4NjI6 IFVzZXJzcGFjZSBoYXMgdG8gc2V0ICJCYXJyaWVyIE1vZGUiIHRvIGF2b2lkIGhhbmdzLiAqLwo+ IC0JcmV0ID0gd2FfcmluZ193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOV9TTElDRV9DT01NT05f RUNPX0NISUNLRU4xKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlyZXR1 cm4gMDsKPiArCXdoaXRlbGlzdF9yZWcodywgR0VOOV9TTElDRV9DT01NT05fRUNPX0NISUNLRU4x KTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGNmbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBw bHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCBjZmxfd2hp dGVsaXN0X2J1aWxkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJCXN0cnVj dCB3aGl0ZWxpc3QgKncpCj4gICB7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGdlbjlfd2hp dGVsaXN0X3dvcmthcm91bmRzX2FwcGx5KGVuZ2luZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVy biByZXQ7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gKwlnZW45X3doaXRlbGlzdF9idWlsZChlbmdpbmUs IHcpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgY25sX3doaXRlbGlzdF93b3JrYXJvdW5kc19h cHBseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRpYyB2b2lkIGNubF93 aGl0ZWxpc3RfYnVpbGQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJc3Ry dWN0IHdoaXRlbGlzdCAqdykKPiAgIHsKPiAtCWludCByZXQ7Cj4gLQo+ICAgCS8qIFdhRW5hYmxl UHJlZW1wdGlvbkdyYW51bGFyaXR5Q29udHJvbEJ5VU1EOmNubCAqLwo+IC0JcmV0ID0gd2Ffcmlu Z193aGl0ZWxpc3RfcmVnKGVuZ2luZSwgR0VOOF9DU19DSElDS0VOMSk7Cj4gLQlpZiAocmV0KQo+ IC0JCXJldHVybiByZXQ7Cj4gKwl3aGl0ZWxpc3RfcmVnKHcsIEdFTjhfQ1NfQ0hJQ0tFTjEpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHdoaXRlbGlzdCAqd2hpdGVsaXN0X2J1aWxkKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJCQkgc3RydWN0IHdoaXRlbGlzdCAqdykK PiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7Cj4g Kwo+ICsJR0VNX0JVR19PTihlbmdpbmUtPmlkICE9IFJDUyk7Cj4gKwo+ICsJdy0+Y291bnQgPSAw Owo+ICsJdy0+bm9waWQgPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX05PUElEKGVuZ2luZS0+ bW1pb19iYXNlKSk7Cgo6KQoKPiArCj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpIDwgOCkKPiArCQly ZXR1cm4gTlVMTDsKPiArCWVsc2UgaWYgKElTX0JST0FEV0VMTChpOTE1KSkKPiArCQliZHdfd2hp dGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7CgpJcyBpdCB3b3J0aCBwYXNzaW5nIHRoZSBlbmdpbmUg YXJvdW5kPyBFdmVuIG9mIHdlIGVuZCB1cCB3aXRoIAp3aGl0ZWxpc3RlZCByZWdpc3RlciBpbiBl bmdpbmVzICE9IFJDUywgd2Ugd2lsbCBuZWVkIG1vcmUgY2hhbmdlcyB0aGFuIHRoaXMuCgo+ICsJ ZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKPiArCQljaHZfd2hpdGVsaXN0X2J1aWxkKGVu Z2luZSwgdyk7Cj4gKwllbHNlIGlmIChJU19TS1lMQUtFKGk5MTUpKQo+ICsJCXNrbF93aGl0ZWxp c3RfYnVpbGQoZW5naW5lLCB3KTsKPiArCWVsc2UgaWYgKElTX0JST1hUT04oaTkxNSkpCj4gKwkJ Ynh0X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwo+ICsJZWxzZSBpZiAoSVNfS0FCWUxBS0Uo aTkxNSkpCj4gKwkJa2JsX3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwo+ICsJZWxzZSBpZiAo SVNfR0VNSU5JTEFLRShpOTE1KSkKPiArCQlnbGtfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgdyk7 Cj4gKwllbHNlIGlmIChJU19DT0ZGRUVMQUtFKGk5MTUpKQo+ICsJCWNmbF93aGl0ZWxpc3RfYnVp bGQoZW5naW5lLCB3KTsKPiArCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoaTkxNSkpCj4gKwkJY25s X3doaXRlbGlzdF9idWlsZChlbmdpbmUsIHcpOwo+ICsJZWxzZQo+ICsJCU1JU1NJTkdfQ0FTRShJ TlRFTF9HRU4oaTkxNSkpOwo+ICAgCj4gLQlyZXR1cm4gMDsKPiArCXJldHVybiB3Owo+ICAgfQo+ ICAgCj4gLWludCBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCB3aGl0ZWxpc3RfYXBwbHkoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IHdoaXRlbGlz dCAqdykKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdp bmUtPmk5MTU7Cj4gLQlpbnQgZXJyID0gMDsKPiArCWNvbnN0IHUzMiBiYXNlID0gZW5naW5lLT5t bWlvX2Jhc2U7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlpZiAoIXcpCj4gKwkJcmV0dXJu Owo+ICAgCj4gLQlXQVJOX09OKGVuZ2luZS0+aWQgIT0gUkNTKTsKPiArCWludGVsX3VuY29yZV9m b3JjZXdha2VfZ2V0KGVuZ2luZS0+aTkxNSwgRk9SQ0VXQUtFX0FMTCk7Cj4gICAKPiAtCWRldl9w cml2LT53b3JrYXJvdW5kcy5od193aGl0ZWxpc3RfY291bnRbZW5naW5lLT5pZF0gPSAwOwo+ICsJ Zm9yIChpID0gMDsgaSA8IHctPmNvdW50OyBpKyspCj4gKwkJSTkxNV9XUklURV9GVyhSSU5HX0ZP UkNFX1RPX05PTlBSSVYoYmFzZSwgaSksCj4gKwkJCSAgICAgIGk5MTVfbW1pb19yZWdfb2Zmc2V0 KHctPnJlZ1tpXSkpOwo+ICAgCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDgpCj4gLQkJ ZXJyID0gMDsKPiAtCWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpCj4gLQkJZXJyID0g YmR3X3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwo+IC0JZWxzZSBpZiAoSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJZXJyID0gY2h2X3doaXRlbGlzdF93b3JrYXJvdW5k c19hcHBseShlbmdpbmUpOwo+IC0JZWxzZSBpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikpCj4gLQkJ ZXJyID0gc2tsX3doaXRlbGlzdF93b3JrYXJvdW5kc19hcHBseShlbmdpbmUpOwo+IC0JZWxzZSBp ZiAoSVNfQlJPWFRPTihkZXZfcHJpdikpCj4gLQkJZXJyID0gYnh0X3doaXRlbGlzdF93b3JrYXJv dW5kc19hcHBseShlbmdpbmUpOwo+IC0JZWxzZSBpZiAoSVNfS0FCWUxBS0UoZGV2X3ByaXYpKQo+ IC0JCWVyciA9IGtibF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKPiAtCWVs c2UgaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+IC0JCWVyciA9IGdsa193aGl0ZWxpc3Rf d29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKPiAtCWVsc2UgaWYgKElTX0NPRkZFRUxBS0UoZGV2 X3ByaXYpKQo+IC0JCWVyciA9IGNmbF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5l KTsKPiAtCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpKQo+IC0JCWVyciA9IGNubF93 aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoZW5naW5lKTsKPiAtCWVsc2UKPiAtCQlNSVNTSU5H X0NBU0UoSU5URUxfR0VOKGRldl9wcml2KSk7Cj4gLQlpZiAoZXJyKQo+IC0JCXJldHVybiBlcnI7 Cj4gKwkvKiBBbmQgY2xlYXIgdGhlIHJlc3QganVzdCBpbiBjYXNlIG9mIGdhcmJhZ2UgKi8KPiAr CWZvciAoOyBpIDwgUklOR19NQVhfTk9OUFJJVl9TTE9UUzsgaSsrKQo+ICsJCUk5MTVfV1JJVEVf RlcoUklOR19GT1JDRV9UT19OT05QUklWKGJhc2UsIGkpLCB3LT5ub3BpZCk7Cj4gICAKPiAtCURS TV9ERUJVR19EUklWRVIoIiVzOiBOdW1iZXIgb2Ygd2hpdGVsaXN0IHcvYTogJWRcbiIsIGVuZ2lu ZS0+bmFtZSwKPiAtCQkJIGRldl9wcml2LT53b3JrYXJvdW5kcy5od193aGl0ZWxpc3RfY291bnRb ZW5naW5lLT5pZF0pOwo+IC0JcmV0dXJuIDA7Cj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1 dChlbmdpbmUtPmk5MTUsIEZPUkNFV0FLRV9BTEwpOwo+ICAgfQo+ICsKPiArdm9pZCBpbnRlbF93 aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICt7Cj4gKwlzdHJ1Y3Qgd2hpdGVsaXN0IHc7Cj4gKwo+ICsJd2hpdGVsaXN0X2FwcGx5KGVu Z2luZSwgd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSwgJncpKTsKPiArfQo+ICsKPiArI2lmIElTX0VO QUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQo+ICsjaW5jbHVkZSAic2VsZnRlc3RzL2lu dGVsX3dvcmthcm91bmRzLmMiCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf d29ya2Fyb3VuZHMuaAo+IGluZGV4IGQ5YjBjYzVhZmI0YS4uYjExZDA2MjNlNjI2IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmgKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oCj4gQEAgLTEyLDYgKzEyLDYg QEAgaW50IGludGVsX2N0eF93b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KTsKPiAgIAo+ICAgdm9pZCBpbnRlbF9ndF93b3JrYXJvdW5kc19hcHBseShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAgCj4gLWludCBpbnRlbF93aGl0ZWxpc3Rfd29ya2Fy b3VuZHNfYXBwbHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArdm9pZCBpbnRl bF93aGl0ZWxpc3Rfd29ya2Fyb3VuZHNfYXBwbHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKTsKPiAgIAo+ICAgI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCj4gaW5kZXggOGJmNmFhNTczMjI2Li5hMDBl MmJkMDhiY2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfbGl2ZV9zZWxmdGVzdHMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKPiBAQCAtMTEsNiArMTEsNyBAQAo+ICAgICovCj4gICBz ZWxmdGVzdChzYW5pdHljaGVjaywgaTkxNV9saXZlX3Nhbml0eWNoZWNrKSAvKiBrZWVwIGZpcnN0 IChpZ3Qgc2VsZmNoZWNrKSAqLwo+ICAgc2VsZnRlc3QodW5jb3JlLCBpbnRlbF91bmNvcmVfbGl2 ZV9zZWxmdGVzdHMpCj4gK3NlbGZ0ZXN0KHdvcmthcm91bmRzLCBpbnRlbF93b3JrYXJvdW5kc19s aXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KHJlcXVlc3RzLCBpOTE1X3JlcXVlc3RfbGl2ZV9z ZWxmdGVzdHMpCj4gICBzZWxmdGVzdChvYmplY3RzLCBpOTE1X2dlbV9vYmplY3RfbGl2ZV9zZWxm dGVzdHMpCj4gICBzZWxmdGVzdChkbWFidWYsIGk5MTVfZ2VtX2RtYWJ1Zl9saXZlX3NlbGZ0ZXN0 cykKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3dv cmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fy b3VuZHMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mZTdk ZWNhMzNkNzcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMKPiBAQCAtMCwwICsxLDI4NCBAQAo+ICsvKgo+ICsg KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAy MDE4IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgIi4uL2k5MTVfc2Vs ZnRlc3QuaCIKPiArCj4gKyNpbmNsdWRlICJtb2NrX2NvbnRleHQuaCIKPiArCj4gK3N0YXRpYyBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCj4gK3JlYWRfbm9ucHJpdnMoc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eCwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqcmVzdWx0Owo+ICsJc3RydWN0IGk5MTVfcmVx dWVzdCAqcnE7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiArCWNvbnN0IHUzMiBiYXNlID0g ZW5naW5lLT5tbWlvX2Jhc2U7Cj4gKwl1MzIgc3JtLCAqY3M7Cj4gKwlpbnQgZXJyOwo+ICsJaW50 IGk7Cj4gKwo+ICsJcmVzdWx0ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChlbmdp bmUtPmk5MTUsIFBBR0VfU0laRSk7Cj4gKwlpZiAoSVNfRVJSKHJlc3VsdCkpCj4gKwkJcmV0dXJu IHJlc3VsdDsKPiArCj4gKwlpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xldmVsKHJlc3VsdCwg STkxNV9DQUNIRV9MTEMpOwo+ICsKPiArCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAocmVz dWx0LCBJOTE1X01BUF9XQik7Cj4gKwlpZiAoSVNfRVJSKGNzKSkgewo+ICsJCWVyciA9IFBUUl9F UlIoY3MpOwo+ICsJCWdvdG8gZXJyX29iajsKPiArCX0KPiArCW1lbXNldChjcywgMHhjNSwgUEFH RV9TSVpFKTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAocmVzdWx0KTsKPiArCj4gKwl2 bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShyZXN1bHQsICZlbmdpbmUtPmk5MTUtPmdndHQuYmFzZSwg TlVMTCk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkpIHsKPiArCQllcnIgPSBQVFJfRVJSKHZtYSk7Cj4g KwkJZ290byBlcnJfb2JqOwo+ICsJfQo+ICsKPiArCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAs IDAsIFBJTl9HTE9CQUwpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGVycl9vYmo7Cj4gKwo+ICsJ cnEgPSBpOTE1X3JlcXVlc3RfYWxsb2MoZW5naW5lLCBjdHgpOwo+ICsJaWYgKElTX0VSUihycSkp IHsKPiArCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQlnb3RvIGVycl9waW47Cj4gKwl9Cj4gKwo+ ICsJc3JtID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOwo+ ICsJaWYgKElOVEVMX0dFTihjdHgtPmk5MTUpID49IDgpCj4gKwkJc3JtKys7Cj4gKwo+ICsJY3Mg PSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogUklOR19NQVhfTk9OUFJJVl9TTE9UUyk7Cj4gKwlm b3IgKGkgPSAwOyBpIDwgUklOR19NQVhfTk9OUFJJVl9TTE9UUzsgaSsrKSB7Cj4gKwkJKmNzKysg PSBzcm07Cj4gKwkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0ZPUkNFX1RPX05P TlBSSVYoYmFzZSwgaSkpOwo+ICsJCSpjcysrID0gaTkxNV9nZ3R0X29mZnNldCh2bWEpICsgc2l6 ZW9mKHUzMikgKiBpOwo+ICsJCSpjcysrID0gMDsKPiArCX0KPiArCWludGVsX3JpbmdfYWR2YW5j ZShycSwgY3MpOwo+ICsKPiArCWk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHZtYSwgcnEsIEVYRUNf T0JKRUNUX1dSSVRFKTsKPiArCXJlc2VydmF0aW9uX29iamVjdF9sb2NrKHZtYS0+cmVzdiwgTlVM TCk7Cj4gKwlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2Uodm1hLT5yZXN2LCAmcnEt PmZlbmNlKTsKPiArCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2sodm1hLT5yZXN2KTsKPiArCj4g KwlpOTE1X2dlbV9vYmplY3RfZ2V0KHJlc3VsdCk7Cj4gKwlpOTE1X2dlbV9vYmplY3Rfc2V0X2Fj dGl2ZV9yZWZlcmVuY2UocmVzdWx0KTsKPiArCj4gKwlfX2k5MTVfcmVxdWVzdF9hZGQocnEsIHRy dWUpOwo+ICsJaTkxNV92bWFfdW5waW4odm1hKTsKPiArCj4gKwlyZXR1cm4gcmVzdWx0Owo+ICsK PiArZXJyX3BpbjoKPiArCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gK2Vycl9vYmo6Cj4gKwlpOTE1 X2dlbV9vYmplY3RfcHV0KHJlc3VsdCk7Cj4gKwlyZXR1cm4gRVJSX1BUUihlcnIpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdTMyIGdldF93aGl0ZWxpc3RfcmVnKGNvbnN0IHN0cnVjdCB3aGl0ZWxpc3Qg KncsIHVuc2lnbmVkIGludCBpKQo+ICt7Cj4gKwlyZXR1cm4gaSA8IHctPmNvdW50ID8gaTkxNV9t bWlvX3JlZ19vZmZzZXQody0+cmVnW2ldKSA6IHctPm5vcGlkOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBwcmludF9yZXN1bHRzKGNvbnN0IHN0cnVjdCB3aGl0ZWxpc3QgKncsIGNvbnN0IHUzMiAq cmVzdWx0cykKPiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IFJJTkdfTUFYX05PTlBSSVZfU0xPVFM7IGkrKykgewo+ICsJCXUzMiBleHBlY3RlZCA9IGdldF93 aGl0ZWxpc3RfcmVnKHcsIGkpOwo+ICsJCXUzMiBhY3R1YWwgPSByZXN1bHRzW2ldOwo+ICsKPiAr CQlwcl9pbmZvKCJSSU5HX05PTlBSSVZbJWRdOiBleHBlY3RlZCAweCUwOHgsIGZvdW5kIDB4JTA4 eFxuIiwKPiArCQkJaSwgZXhwZWN0ZWQsIGFjdHVhbCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgY2hlY2tfd2hpdGVsaXN0KGNvbnN0IHN0cnVjdCB3aGl0ZWxpc3QgKncsCj4gKwkJCSAg IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gKwkJCSAgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnJlc3Vs dHM7Cj4gKwl1MzIgKnZhZGRyOwo+ICsJaW50IGVycjsKPiArCWludCBpOwo+ICsKPiArCXJlc3Vs dHMgPSByZWFkX25vbnByaXZzKGN0eCwgZW5naW5lKTsKPiArCWlmIChJU19FUlIocmVzdWx0cykp Cj4gKwkJcmV0dXJuIFBUUl9FUlIocmVzdWx0cyk7Cj4gKwo+ICsJZXJyID0gaTkxNV9nZW1fb2Jq ZWN0X3NldF90b19jcHVfZG9tYWluKHJlc3VsdHMsIGZhbHNlKTsKPiArCWlmIChlcnIpCj4gKwkJ Z290byBvdXRfcHV0Owo+ICsKPiArCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAocmVz dWx0cywgSTkxNV9NQVBfV0IpOwo+ICsJaWYgKElTX0VSUih2YWRkcikpIHsKPiArCQllcnIgPSBQ VFJfRVJSKHZhZGRyKTsKPiArCQlnb3RvIG91dF9wdXQ7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IFJJTkdfTUFYX05PTlBSSVZfU0xPVFM7IGkrKykgewo+ICsJCXUzMiBleHBlY3RlZCA9 IGdldF93aGl0ZWxpc3RfcmVnKHcsIGkpOwo+ICsJCXUzMiBhY3R1YWwgPSB2YWRkcltpXTsKPiAr Cj4gKwkJaWYgKGV4cGVjdGVkICE9IGFjdHVhbCkgewo+ICsJCQlwcmludF9yZXN1bHRzKHcsIHZh ZGRyKTsKPiArCQkJcHJfZXJyKCJJbnZhbGlkIFJJTkdfTk9OUFJJVlslZF0sIGV4cGVjdGVkIDB4 JTA4eCwgZm91bmQgMHglMDh4XG4iLAo+ICsJCQkgICAgICAgaSwgZXhwZWN0ZWQsIGFjdHVhbCk7 Cj4gKwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChyZXN1bHRzKTsKPiArb3V0X3B1dDoKPiArCWk5 MTVfZ2VtX29iamVjdF9wdXQocmVzdWx0cyk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRvX2RldmljZV9yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gK3sKPiArCWk5MTVfcmVzZXQoZW5naW5lLT5pOTE1LCBFTkdJTkVfTUFTSyhlbmdpbmUtPmlk KSwgTlVMTCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkb19lbmdpbmVf cmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlyZXR1cm4gaTkx NV9yZXNldF9lbmdpbmUoZW5naW5lLCBOVUxMKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBzd2l0 Y2hfdG9fc2NyYXRjaF9jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAr ewo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiArCXN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxOwo+ICsKPiArCWN0eCA9IGtlcm5lbF9jb250ZXh0KGVuZ2luZS0+aTkxNSk7Cj4gKwlp ZiAoSVNfRVJSKGN0eCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKPiArCj4gKwlycSA9IGk5 MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Cj4gKwlrZXJuZWxfY29udGV4dF9jbG9zZShj dHgpOwo+ICsJaWYgKElTX0VSUihycSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIocnEpOwo+ICsKPiAr CWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGNoZWNrX3doaXRlbGlzdF9hY3Jvc3NfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLAo+ICsJCQkJCWludCAoKnJlc2V0KShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICop LAo+ICsJCQkJCWNvbnN0IHN0cnVjdCB3aGl0ZWxpc3QgKncsCj4gKwkJCQkJY29uc3QgY2hhciAq bmFtZSkKPiArewo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiArCWludCBlcnI7 Cj4gKwo+ICsJY3R4ID0ga2VybmVsX2NvbnRleHQoZW5naW5lLT5pOTE1KTsKPiArCWlmIChJU19F UlIoY3R4KSkKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ICsKPiArCWVyciA9IGNoZWNrX3do aXRlbGlzdCh3LCBjdHgsIGVuZ2luZSk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJcHJfZXJyKCJJbnZh bGlkIHdoaXRlbGlzdCAqYmVmb3JlKiAlcyByZXNldCFcbiIsIG5hbWUpOwo+ICsJCWdvdG8gb3V0 Owo+ICsJfQo+ICsKPiArCWVyciA9IHN3aXRjaF90b19zY3JhdGNoX2NvbnRleHQoZW5naW5lKTsK PiArCWlmIChlcnIpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJZXJyID0gcmVzZXQoZW5naW5lKTsK PiArCWlmIChlcnIpIHsKPiArCQlwcl9lcnIoIiVzIHJlc2V0IGZhaWxlZFxuIiwgbmFtZSk7Cj4g KwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gY2hlY2tfd2hpdGVsaXN0KHcsIGN0eCwg ZW5naW5lKTsKPiArCWlmIChlcnIpIHsKPiArCQlwcl9lcnIoIldoaXRlbGlzdCBub3QgcHJlc2Vy dmVkIGluIGNvbnRleHQgYWNyb3NzICVzIHJlc2V0IVxuIiwKPiArCQkgICAgICAgbmFtZSk7Cj4g KwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJa2VybmVsX2NvbnRleHRfY2xvc2UoY3R4KTsKPiAr Cj4gKwljdHggPSBrZXJuZWxfY29udGV4dChlbmdpbmUtPmk5MTUpOwo+ICsJaWYgKElTX0VSUihj dHgpKQo+ICsJCXJldHVybiBQVFJfRVJSKGN0eCk7Cj4gKwo+ICsJZXJyID0gY2hlY2tfd2hpdGVs aXN0KHcsIGN0eCwgZW5naW5lKTsKPiArCWlmIChlcnIpIHsKPiArCQlwcl9lcnIoIkludmFsaWQg d2hpdGVsaXN0ICphZnRlciogJXMgcmVzZXQgaW4gZnJlc2ggY29udGV4dCFcbiIsCj4gKwkJICAg ICAgIG5hbWUpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArb3V0Ogo+ICsJa2VybmVsX2Nv bnRleHRfY2xvc2UoY3R4KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bGl2ZV9yZXNldF93aGl0ZWxpc3Qodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9 IGk5MTUtPmVuZ2luZVtSQ1NdOwo+ICsJc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZp OTE1LT5ncHVfZXJyb3I7Cj4gKwlzdHJ1Y3Qgd2hpdGVsaXN0IHc7Cj4gKwlpbnQgZXJyOwo+ICsK PiArCS8qIElmIHdlIHJlc2V0IHRoZSBncHUsIHdlIHNob3VsZCBub3QgbG9zZSB0aGUgUklOR19O T05QUklWICovCj4gKwo+ICsJaWYgKCFlbmdpbmUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYg KCF3aGl0ZWxpc3RfYnVpbGQoZW5naW5lLCAmdykpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcHJf aW5mbygiQ2hlY2tpbmcgJWQgd2hpdGVsaXN0ZWQgcmVnaXN0ZXJzIChSSU5HX05PTlBSSVYpXG4i LCB3LmNvdW50KTsKPiArCj4gKwlzZXRfYml0KEk5MTVfUkVTRVRfQkFDS09GRiwgJmVycm9yLT5m bGFncyk7Cj4gKwlzZXRfYml0KEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZCwgJmVycm9y LT5mbGFncyk7Cj4gKwo+ICsJaWYgKGludGVsX2hhc19yZXNldF9lbmdpbmUoaTkxNSkpIHsKPiAr CQllcnIgPSBjaGVja193aGl0ZWxpc3RfYWNyb3NzX3Jlc2V0KGVuZ2luZSwKPiArCQkJCQkJICAg ZG9fZW5naW5lX3Jlc2V0LCAmdywKPiArCQkJCQkJICAgImVuZ2luZSIpOwo+ICsJCWlmIChlcnIp Cj4gKwkJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWlmIChpbnRlbF9oYXNfZ3B1X3Jlc2V0KGk5 MTUpKSB7Cj4gKwkJZXJyID0gY2hlY2tfd2hpdGVsaXN0X2Fjcm9zc19yZXNldChlbmdpbmUsCj4g KwkJCQkJCSAgIGRvX2RldmljZV9yZXNldCwgJncsCj4gKwkJCQkJCSAgICJkZXZpY2UiKTsKPiAr CQlpZiAoZXJyKQo+ICsJCQlnb3RvIG91dDsKPiArCX0KPiArCj4gK291dDoKPiArCWNsZWFyX2Jp dChJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsICZlcnJvci0+ZmxhZ3MpOwo+ICsJY2xl YXJfYml0KEk5MTVfUkVTRVRfQkFDS09GRiwgJmVycm9yLT5mbGFncyk7Cj4gKwlyZXR1cm4gZXJy Owo+ICt9Cj4gKwo+ICtpbnQgaW50ZWxfd29ya2Fyb3VuZHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkx NV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4gKwkJU1VCVEVTVChsaXZlX3Jlc2V0X3doaXRlbGlzdCks Cj4gKwl9Owo+ICsJaW50IGVycjsKPiArCj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiArCWVyciA9IGk5MTVfc3VidGVzdHModGVzdHMsIGk5MTUpOwo+ICsJbXV0ZXhf dW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK