From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manish Jaggi Subject: Re: [v2 4/6] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Thu, 24 May 2018 10:18:28 +0530 Message-ID: References: <20180524004620.23828-1-sameer.goel@linaro.org> <20180524004620.23828-5-sameer.goel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fLiBK-0002HC-OK for xen-devel@lists.xenproject.org; Thu, 24 May 2018 04:48:55 +0000 In-Reply-To: <20180524004620.23828-5-sameer.goel@linaro.org> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Sameer Goel , xen-devel@lists.xenproject.org, julien.grall@arm.com Cc: sstabellini@kernel.org, shankerd@codeaurora.org, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org SGkgU2FtZWVyLAoKR2VuZXJhbCBDb21tZW50LCBwbGVhc2UgdXNlIGFwcHJvcHJpYXRlIHZhcmlh YmxlIG5hbWVzIGZvciBYWFhfZG9tYWluIApzdHJ1Y3R1cmVzIGluIGNvZGUgd2hpY2ggaXMgeGVu IHNwZWNpZmljLgoKCk9uIDA1LzI0LzIwMTggMDY6MTYgQU0sIFNhbWVlciBHb2VsIHdyb3RlOgo+ IFRoaXMgZHJpdmVyIGZvbGxvd3MgYW4gYXBwcm9hY2ggc2ltaWxhciB0byBzbW11IGRyaXZlci4g VGhlIGludGVudCBoZXJlCj4gaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3Np YmxlLgo+IC0gR2x1ZSBjb2RlIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYnJpZGdlIHRoZSBBUEkg Y2FsbHMuCj4gLSBDYWxsZWQgTGludXggZnVuY3Rpb25zIGZyb20gdGhlIFhlbiBJT01NVSBmdW5j dGlvbiBjYWxscy4KPiAtIFhlbiBtb2RpZmljYXRpb25zIGFyZSBwcmVjZWRlZCBieSAvKlhlbjog Y29tbWVudCAqLwo+IC0geGVuL2xpbnV4X2NvbXBhdDogQWRkIGEgTGludXggY29tcGF0IGhlYWRl cgo+ICAgIEZvciBwb3J0aW5nIGZpbGVzIGRpcmVjdGx5IGZyb20gTGludXggaXQgaXMgdXNlZnVs IHRvIGhhdmUgYSBmdW5jdGlvbiBtYXBwaW5nCj4gICAgZGVmaW5pdGlvbnMgZnJvbSBMaW51eCB0 byBYZW4uIFRoaXMgZmlsZSBhZGRzIGNvbW1vbiBBUEkgZnVuY3Rpb25zIGFuZAo+ICAgIG90aGVy IGRlZmluZXMgdGhhdCBhcmUgbmVlZGVkIGZvciBwb3J0aW5nIGFybSBTTU1VIGRyaXZlcnMuCj4K PiBTaWduZWQtb2ZmLWJ5OiBTYW1lZXIgR29lbCA8c2FtZWVyLmdvZWxAbGluYXJvLm9yZz4KPiAt LS0KPiAgIHhlbi9hcmNoL2FybS9wMm0uYyAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICAg eGVuL2RyaXZlcnMvS2NvbmZpZyAgICAgICAgICAgICAgICAgICB8ICAgMiArCj4gICB4ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZyAgIHwgICA4ICsKPiAgIHhlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL2FybS9NYWtlZmlsZSAgfCAgIDEgKwo+ICAgeGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvYXJtL3NtbXUtdjMuYyB8IDkzNCArKysrKysrKysrKysrKysrKysrKysrKysrLQo+ICAgeGVu L2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oICAgICAgICB8ICA4NCArKysKPiAgIDYgZmlsZXMg Y2hhbmdlZCwgMTAwMSBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZwo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3hlbi9saW51eF9jb21wYXQuaAo+Cj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL2FybS9wMm0uYyBiL3hlbi9hcmNoL2FybS9wMm0uYwo+IGluZGV4IGQ0M2Mz YWE4OTYuLjM4YWE5ZjAwYzEgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL3AybS5jCj4gKysr IGIveGVuL2FyY2gvYXJtL3AybS5jCj4gQEAgLTE0NTQsNiArMTQ1NCw3IEBAIGVycjoKPiAgIHN0 YXRpYyB2b2lkIF9faW5pdCBzZXR1cF92aXJ0X3BhZ2luZ19vbmUodm9pZCAqZGF0YSkKPiAgIHsK PiAgICAgICB1bnNpZ25lZCBsb25nIHZhbCA9ICh1bnNpZ25lZCBsb25nKWRhdGE7Cj4gKyAgICAv KiBTTU1VdjMgUzIgY2ZnIHZ0Y3IgcmV1c2VzIHRoZSBmb2xsb3dpbmcgdmFsdWUgKi8KPiAgICAg ICBXUklURV9TWVNSRUczMih2YWwsIFZUQ1JfRUwyKTsKPiAgICAgICBpc2IoKTsKPiAgIH0KPiBk aWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvS2NvbmZpZyBiL3hlbi9kcml2ZXJzL0tjb25maWcKPiBp bmRleCBkYjk0MzkzZjQ3Li41OWNhMDBmODUwIDEwMDY0NAo+IC0tLSBhL3hlbi9kcml2ZXJzL0tj b25maWcKPiArKysgYi94ZW4vZHJpdmVycy9LY29uZmlnCj4gQEAgLTE1LDQgKzE1LDYgQEAgc291 cmNlICJkcml2ZXJzL3ZpZGVvL0tjb25maWciCj4gICBjb25maWcgSEFTX1ZQQ0kKPiAgIAlib29s Cj4gICAKPiArc291cmNlICJkcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnIgo+ICsKPiAg IGVuZG1lbnUKPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25m aWcgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uY2RhODk5ZjYwOAo+IC0tLSAvZGV2L251bGwKPiAr KysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZwo+IEBAIC0wLDAgKzEsOCBA QAo+ICsKPiArY29uZmlnIEFSTV9TTU1VX3YzCj4gKwlib29sICJBUk0gU01NVXYzIFN1cHBvcnQi Cj4gKwlkZXBlbmRzIG9uIEFSTV82NAo+ICsJaGVscAo+ICsJIFN1cHBvcnQgZm9yIGltcGxlbWVu dGF0aW9ucyBvZiB0aGUgQVJNIFN5c3RlbSBNTVUgYXJjaGl0ZWN0dXJlCj4gKwkgdmVyc2lvbiAz Lgo+ICsKPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxl IGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCj4gaW5kZXggZjRjZDI2ZTE1 ZC4uZTE0NzMyYjU1YyAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0v TWFrZWZpbGUKPiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKPiBA QCAtMSwyICsxLDMgQEAKPiAgIG9iai15ICs9IGlvbW11Lm8KPiAgIG9iai15ICs9IHNtbXUubwo+ ICtvYmotJChDT05GSUdfQVJNX1NNTVVfdjMpICs9IHNtbXUtdjMubwo+IGRpZmYgLS1naXQgYS94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jIGIveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvYXJtL3NtbXUtdjMuYwo+IGluZGV4IGU2N2JhNmM0MGYuLmRmODE2MjY3ODUgMTAwNjQ0 Cj4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwo+ICsrKyBiL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMKPiBAQCAtMTgsMjggKzE4LDQxNCBA QAo+ICAgICogQXV0aG9yOiBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KPiAgICAq Cj4gICAgKiBUaGlzIGRyaXZlciBpcyBwb3dlcmVkIGJ5IGJhZCBjb2ZmZWUgYW5kIGJvbWJheSBt aXguCj4gKyAqCj4gKyAqCj4gKyAqIEJhc2VkIG9uIExpbnV4IGRyaXZlcnMvaW9tbXUvYXJtLXNt bXUtdjMuYwo+ICsgKiA9PiBjb21taXQgN2FhODYxOWE2NmFlYTUyYjE0NWUwNGNiYWI0ZjhkNmE0 ZTVmM2YzYgo+ICsgKgo+ICsgKiBYZW4gbW9kaWZpY2F0aW9uczoKPiArICogU2FtZWVyIEdvZWwg PHNhbWVlci5nb2VsQGxpbmFyby5vcmc+Cj4gKyAqIENvcHlyaWdodCAoQykgMjAxNywgVGhlIExp bnV4IEZvdW5kYXRpb24sIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gICAgKi8KPiAgIAo+ IC0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgo+IC0jaW5jbHVkZSA8bGludXgvYWNwaV9pb3J0Lmg+ Cj4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+IC0jaW5jbHVkZSA8bGludXgvZG1hLWlvbW11 Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgo+IC0jaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2lvcG9s bC5oPgo+IC0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9tc2ku aD4KPiAtI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNz Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZl9pb21tdS5oPgo+IC0jaW5jbHVkZSA8bGludXgvb2Zf cGxhdGZvcm0uaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+IC0jaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+Cj4gLQo+IC0jaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KPiAt Cj4gLSNpbmNsdWRlICJpby1wZ3RhYmxlLmgiCj4gKyNpbmNsdWRlIDx4ZW4vYWNwaS5oPgo+ICsj aW5jbHVkZSA8eGVuL2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8eGVuL2RlbGF5Lmg+Cj4gKyNpbmNs dWRlIDx4ZW4vZXJybm8uaD4KPiArI2luY2x1ZGUgPHhlbi9lcnIuaD4KPiArI2luY2x1ZGUgPHhl bi9pcnEuaD4KPiArI2luY2x1ZGUgPHhlbi9saWIuaD4KPiArI2luY2x1ZGUgPHhlbi9saW51eF9j b21wYXQuaD4KPiArI2luY2x1ZGUgPHhlbi9saXN0Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vbW0uaD4K PiArI2luY2x1ZGUgPHhlbi9yYnRyZWUuaD4KPiArI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgo+ICsj aW5jbHVkZSA8eGVuL3NpemVzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vdm1hcC5oPgo+ICsjaW5jbHVk ZSA8YWNwaS9hY3BpX2lvcnQuaD4KPiArI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KPiArI2luY2x1 ZGUgPGFzbS9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGFzbS9pby5oPgo+ICsjaW5jbHVkZSA8YXNt L3BsYXRmb3JtLmg+Cj4gKwo+ICsvKiBBbGlhcyB0byBYZW4gZGV2aWNlIHRyZWUgaGVscGVycyAq Lwo+ICsjZGVmaW5lIGRldmljZV9ub2RlIGR0X2RldmljZV9ub2RlCj4gKyNkZWZpbmUgb2ZfcGhh bmRsZV9hcmdzIGR0X3BoYW5kbGVfYXJncwo+ICsjZGVmaW5lIG9mX2RldmljZV9pZCBkdF9kZXZp Y2VfbWF0Y2gKPiArI2RlZmluZSBvZl9tYXRjaF9ub2RlIGR0X21hdGNoX25vZGUKPiArI2RlZmlu ZSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgcG5hbWUsIG91dCkgKCFkdF9wcm9wZXJ0eV9yZWFk X3UzMihucCwgcG5hbWUsIG91dCkpCj4gKyNkZWZpbmUgb2ZfcHJvcGVydHlfcmVhZF9ib29sIGR0 X3Byb3BlcnR5X3JlYWRfYm9vbAo+ICsjZGVmaW5lIG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdz IGR0X3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzCj4gKwo+ICsvKiBYZW46IEhlbHBlcnMgdG8gZ2V0 IGRldmljZSBNTUlPIGFuZCBJUlFzICovCj4gK3N0cnVjdCByZXNvdXJjZSB7Cj4gKwl1NjQgYWRk cjsKPiArCXU2NCBzaXplOwo+ICsJdW5zaWduZWQgaW50IHR5cGU7Cj4gK307Cj4gKwo+ICsjZGVm aW5lIHJlc291cmNlX3NpemUocmVzKSAoKHJlcyktPnNpemUpCj4gKwo+ICsjZGVmaW5lIHBsYXRm b3JtX2RldmljZSBkZXZpY2UKPiArCj4gKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU0gMAo+ICsjZGVm aW5lIElPUkVTT1VSQ0VfSVJRIDEKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnBsYXRm b3JtX2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCQkJCSAg ICAgIHVuc2lnbmVkIGludCB0eXBlLAo+ICsJCQkJCSAgICAgIHVuc2lnbmVkIGludCBudW0pCj4g K3sKPiArCS8qCj4gKwkgKiBUaGUgcmVzb3VyY2UgaXMgb25seSB1c2VkIGJldHdlZW4gMiBjYWxs cyBvZiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UuCj4gKwkgKiBJdCdzIHF1aXRlIHVnbHkgYnV0IGl0 J3MgYXZvaWQgdG8gYWRkIHRvbyBtdWNoIGNvZGUgaW4gdGhlIHBhcnQKPiArCSAqIGltcG9ydGVk IGZyb20gTGludXgKPiArCSAqLwo+ICsJc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXM7Cj4gKwlz dHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKPiArCXN0cnVjdCBhY3BpX2lvcnRfc21t dV92MyAqbm9kZV9zbW11X2RhdGE7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlyZXMudHlwZSA9 IHR5cGU7Cj4gKwo+ICsJc3dpdGNoICh0eXBlKSB7Cj4gKwljYXNlIElPUkVTT1VSQ0VfTUVNOgo+ ICsJCWlmIChwZGV2LT50eXBlID09IERFVl9BQ1BJKSB7Cj4gKwkJCXJldCA9IDE7Cj4gKwkJCWlv cnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKPiArCQkJbm9kZV9zbW11X2RhdGEgPQo+ICsJCQkJ KHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKWlvcnRfbm9kZS0+bm9kZV9kYXRhOwo+ICsKPiAr CQkJaWYgKG5vZGVfc21tdV9kYXRhICE9IE5VTEwpIHsKPiArCQkJCXJlcy5hZGRyID0gbm9kZV9z bW11X2RhdGEtPmJhc2VfYWRkcmVzczsKPiArCQkJCXJlcy5zaXplID0gU1pfMTI4SzsKPiArCQkJ CXJldCA9IDA7Cj4gKwkJCX0KPiArCQl9IGVsc2Ugewo+ICsJCQlyZXQgPSBkdF9kZXZpY2VfZ2V0 X2FkZHJlc3MoZGV2X3RvX2R0KHBkZXYpLCBudW0sCj4gKwkJCQkJCSAgICAmcmVzLmFkZHIsICZy ZXMuc2l6ZSk7Cj4gKwkJfQo+ICsKPiArCQlyZXR1cm4gKChyZXQpID8gTlVMTCA6ICZyZXMpOwo+ ICsKPiArCWNhc2UgSU9SRVNPVVJDRV9JUlE6Cj4gKwkJLyogQUNQSSBjYXNlIG5vdCBpbXBsZW1l bnRlZCBhcyB0aGVyZSBpcyBubyB1c2UgY2FzZSBmb3IgaXQgKi8KPiArCQlyZXQgPSBwbGF0Zm9y bV9nZXRfaXJxKGRldl90b19kdChwZGV2KSwgbnVtKTsKPiArCj4gKwkJaWYgKHJldCA8IDApCj4g KwkJCXJldHVybiBOVUxMOwo+ICsKPiArCQlyZXMuYWRkciA9IHJldDsKPiArCQlyZXMuc2l6ZSA9 IDE7Cj4gKwo+ICsJCXJldHVybiAmcmVzOwo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIE5V TEw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJ Y29uc3Qgc3RydWN0IGR0X3Byb3BlcnR5ICpkdHByb3A7Cj4gKwlzdHJ1Y3QgYWNwaV9pb3J0X25v ZGUgKmlvcnRfbm9kZTsKPiArCXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqbm9kZV9zbW11X2Rh dGE7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAocGRldi0+dHlwZSA9PSBERVZfQUNQSSkg ewo+ICsJCWlvcnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKPiArCQlub2RlX3NtbXVfZGF0YSA9 IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilpb3J0X25vZGUtPm5vZGVfZGF0YTsKPiArCj4g KwkJaWYgKG5vZGVfc21tdV9kYXRhICE9IE5VTEwpIHsKPiArCQkJaWYgKCFzdHJjbXAobmFtZSwg ImV2ZW50cSIpKQo+ICsJCQkJcmV0ID0gbm9kZV9zbW11X2RhdGEtPmV2ZW50X2dzaXY7Cj4gKwkJ CWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInByaXEiKSkKPiArCQkJCXJldCA9IG5vZGVfc21tdV9k YXRhLT5wcmlfZ3NpdjsKPiArCQkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY21kcS1zeW5jIikp Cj4gKwkJCQlyZXQgPSBub2RlX3NtbXVfZGF0YS0+c3luY19nc2l2Owo+ICsJCQllbHNlIGlmICgh c3RyY21wKG5hbWUsICJnZXJyb3IiKSkKPiArCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5nZXJy X2dzaXY7Cj4gKwkJCWVsc2UKPiArCQkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJfQo+ICsJfSBlbHNl IHsKPiArCQlkdHByb3AgPSBkdF9maW5kX3Byb3BlcnR5KGRldl90b19kdChwZGV2KSwgImludGVy cnVwdC1uYW1lcyIsIE5VTEwpOwo+ICsJCWlmICghZHRwcm9wKQo+ICsJCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwkJaWYgKCFkdHByb3AtPnZhbHVlKQo+ICsJCQlyZXR1cm4gLUVOT0RBVEE7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICogWGVuOiBIZWxwZXJz IGZvciBETUEgYWxsb2NhdGlvbi4gSnVzdCB0aGUgZnVuY3Rpb24gbmFtZSBpcyByZXVzZWQgZm9y Cj4gKyAqIHBvcnRpbmcgY29kZSB0aGVzZSBhbGxvY2F0aW9uIGFyZSBub3QgbWFuYWdlZCBhbGxv Y2F0aW9ucwo+ICsgKi8KPiArCj4gK3N0YXRpYyB2b2lkICpkbWFtX2FsbG9jX2NvaGVyZW50KHN0 cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCj4gKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9o YW5kbGUsIGdmcF90IGdmcCkKSSBiZWxpZXZlIHRoZSBmb3JtYXR0aW5nIG5lZWRzIHRvIGJlIGNo ZWNrZWQuCj4gK3sKPiArCXZvaWQgKnZhZGRyOwo+ICsJdW5zaWduZWQgbG9uZyBhbGlnbm1lbnQg PSBzaXplOwo+ICsKPiArCS8qCj4gKwkgKiBfeHphbGxvYyByZXF1aXJlcyB0aGF0IHRoZSAoYWxp Z24gJiAoYWxpZ24gLTEpKSA9IDAuIE1vc3Qgb2YgdGhlCj4gKwkgKiBhbGxvY2F0aW9ucyBpbiBT TU1VIGNvZGUgc2hvdWxkIHNlbmQgdGhlIHJpZ2h0IHZhbHVlIGZvciBzaXplLiBJbgo+ICsJICog Y2FzZSB0aGlzIGlzIG5vdCB0cnVlIHByaW50IGEgd2FybmluZyBhbmQgYWxpZ24gdG8gdGhlIHNp emUgb2YgYQo+ICsJICogKHZvaWQgKikKPiArCSAqLwo+ICsJaWYgKHNpemUgJiAoc2l6ZSAtIDEp KSB7Cj4gKwkJZGV2X3dhcm4oZGV2LCAiRml4aW5nIGFsaWdubWVudCBmb3IgdGhlIERNQSBidWZm ZXJcbiIpOwo+ICsJCWFsaWdubWVudCA9IHNpemVvZih2b2lkICopOwo+ICsJfQo+ICsKPiArCXZh ZGRyID0gX3h6YWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKPiArCWlmICghdmFkZHIpIHsKPiArCQlk ZXZfZXJyKGRldiwgIkRNQSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJuIE5VTEw7 Cj4gKwl9Cj4gKwo+ICsJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX21hZGRyKHZhZGRyKTsKPiArCj4g KwlyZXR1cm4gdmFkZHI7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgdm9pZCBkbWFtX2ZyZWVfY29o ZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCj4gKwkJ CWRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKc2FtZQo+ICt7Cj4gKwl4ZnJlZSh2YWRkcik7Cj4gK30K PiArCj4gKy8qIFhlbjogU3R1YiBvdXQgRE1BIGRvbWFpbiByZWxhdGVkIGZ1bmN0aW9ucyAqLwo+ ICsjZGVmaW5lIGlvbW11X2dldF9kbWFfY29va2llKGRvbSkgMAo+ICsjZGVmaW5lIGlvbW11X3B1 dF9kbWFfY29va2llKGRvbSkKPiArCj4gKy8qIFhlbjogU3R1YiBvdXQgbW9kdWxlIHBhcmFtIHJl bGF0ZWQgZnVuY3Rpb24gKi8KPiArI2RlZmluZSBtb2R1bGVfcGFyYW1fbmFtZWQoYSwgYiwgYywg ZCkKPiArI2RlZmluZSBNT0RVTEVfUEFSTV9ERVNDKGEsIGIpCj4gKwo+ICsjZGVmaW5lIGRtYV9z ZXRfbWFza19hbmRfY29oZXJlbnQoZCwgYikgMAo+ICsKPiArI2RlZmluZSBvZl9kbWFfaXNfY29o ZXJlbnQobikgMAo+ICsKPiArI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKHR5cGUsIG5hbWUp Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2lvbWVtICpkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc3RydWN0 IGRldmljZSAqZGV2LAo+ICsJCQkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQo+ICt7Cj4gKwl2 b2lkIF9faW9tZW0gKnB0cjsKPiArCj4gKwlpZiAoIXJlcyB8fCByZXMtPnR5cGUgIT0gSU9SRVNP VVJDRV9NRU0pIHsKPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcmVzb3VyY2VcbiIpOwo+ICsJ CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJfQo+ICsKPiArCXB0ciA9IGlvcmVtYXBfbm9j YWNoZShyZXMtPmFkZHIsIHJlcy0+c2l6ZSk7Cj4gKwlpZiAoIXB0cikgewo+ICsJCWRldl9lcnIo ZGV2LAo+ICsJCQkiaW9yZW1hcCBmYWlsZWQgKGFkZHIgMHglIlBSSXg2NCIgc2l6ZSAweCUiUFJJ eDY0IilcbiIsCj4gKwkJCXJlcy0+YWRkciwgcmVzLT5zaXplKTsKPiArCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcHRyOwo+ICt9Cj4gKwo+ICsvKiBYZW46 IENvbXBhdGliaWxpdHkgZGVmaW5lIGZvciBpb21tdV9kb21haW5fZ2VvbWV0cnkuKi8KPiArc3Ry dWN0IGlvbW11X2RvbWFpbl9nZW9tZXRyeSB7Cj4gKwlkbWFfYWRkcl90IGFwZXJ0dXJlX3N0YXJ0 OyAvKiBGaXJzdCBhZGRyZXNzIHRoYXQgY2FuIGJlIG1hcHBlZCAgICAqLwo+ICsJZG1hX2FkZHJf dCBhcGVydHVyZV9lbmQ7ICAgLyogTGFzdCBhZGRyZXNzIHRoYXQgY2FuIGJlIG1hcHBlZCAgICAg Ki8KPiArCWJvb2wgZm9yY2VfYXBlcnR1cmU7ICAgICAgIC8qIERNQSBvbmx5IGFsbG93ZWQgaW4g bWFwcGFibGUgcmFuZ2U/ICovCj4gK307Cj4gKwo+ICsKPiArLyogWGVuOiBUeXBlIGRlZmluaXRp b25zIGZvciBpb21tdV9kb21haW4gKi8KPiArI2RlZmluZSBJT01NVV9ET01BSU5fVU5NQU5BR0VE IDAKPiArI2RlZmluZSBJT01NVV9ET01BSU5fRE1BIDEKPiArI2RlZmluZSBJT01NVV9ET01BSU5f SURFTlRJVFkgMgo+ICsKPiArLyogWGVuOiBEdW1teSBpb21tdV9kb21haW4gKi8KPiArc3RydWN0 IGlvbW11X2RvbWFpbiB7Cj4gKwkvKiBSdW50aW1lIFNNTVUgY29uZmlndXJhdGlvbiBmb3IgdGhp cyBpb21tdV9kb21haW4gKi8KPiArCXN0cnVjdCBhcm1fc21tdV9kb21haW4JCSpwcml2Owo+ICsJ dW5zaWduZWQgaW50IHR5cGU7Cj4gKwo+ICsJLyogRHVtbXkgY29tcGF0aWJpbGl0eSBkZWZpbmVz ICovCj4gKwl1bnNpZ25lZCBsb25nIHBnc2l6ZV9iaXRtYXA7Cj4gKwlzdHJ1Y3QgaW9tbXVfZG9t YWluX2dlb21ldHJ5IGdlb21ldHJ5Owo+ICsKPiArCWF0b21pY190IHJlZjsKPiArCS8qCj4gKwkg KiBVc2VkIHRvIGxpbmsgaW9tbXVfZG9tYWluIGNvbnRleHRzIGZvciBhIHNhbWUgZG9tYWluLgo+ ICsJICogVGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBlci1TTU1VIHRvIHVzZWQgYnkgdGhlIGRvbWFp bi4KPiArCSAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKPiArfTsKPiArCj4gKy8qIFhl bjogRGVzY3JpYmVzIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBhIFhlbiBkb21haW4gKi8KPiAr c3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gewo+ICsJc3BpbmxvY2tfdAkJCWxvY2s7Cj4gKwkv KiBMaXN0IG9mIGlvbW11IGRvbWFpbnMgYXNzb2NpYXRlZCB0byB0aGlzIGRvbWFpbiAqLwo+ICsJ c3RydWN0IGxpc3RfaGVhZAkJY29udGV4dHM7Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBYZW46IElu Zm9ybWF0aW9uIGFib3V0IGVhY2ggZGV2aWNlIHN0b3JlZCBpbiBkZXYtPmFyY2hkYXRhLmlvbW11 Cj4gKyAqCj4gKyAqIFRoZSBkZXYtPmFyY2hkYXRhLmlvbW11IHN0b3JlcyB0aGUgaW9tbXVfZG9t YWluIChydW50aW1lIGNvbmZpZ3VyYXRpb24gb2YKPiArICogdGhlIFNNTVUpLgo+ICsgKi8KPiAr c3RydWN0IGFybV9zbW11X3hlbl9kZXZpY2Ugewo+ICsJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluOwo+ICt9Owo+ICsKQXMgdGhpcyBpcyBhIHhlbiBzcGVjaWZpYyBjb2RlLCBjYW4gdGhlIHZh cmlhYmxlIG5hbWVzIGJlIHVzZWQgCmFwcHJvcHJpYXRlbHkuClJlcGVhdGluZyBteSBjb21tZW50 wqAgZnJvbSBlYXJsaWVyIHZlcnNpb24uCmEgZG9tYWluIGlzwqAgdXN1YWxseSBhIFZNIGluIFhl bi4gU28gaXQgaXMgYSBiaXQgY29uZnVzaW5nIHRvIHVzZSBkb21haW4gCmZvciBpb21tdV9kb21h aW4uCj4gKy8qCj4gKyAqIFhlbjogaW9fcGd0YWJsZSBjb21wYXRpYmlsaXR5IGRlZmluZXMuCj4g KyAqIE1vc3Qgb2YgdGhlc2UgYXJlIHRvIHBvcnQgaW4gdGhlIFMxIHRyYW5zbGF0aW9uIGNvZGUg YXMgaXMuCj4gKyAqLwo+ICtzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMgewo+ICt9Owo+ICsKPiArc3Ry dWN0IGlvbW11X2dhdGhlcl9vcHMgewo+ICsJdm9pZCAoKnRsYl9mbHVzaF9hbGwpKHZvaWQgKmNv b2tpZSk7Cj4gKwl2b2lkICgqdGxiX2FkZF9mbHVzaCkodW5zaWduZWQgbG9uZyBpb3ZhLCBzaXpl X3Qgc2l6ZSwgc2l6ZV90IGdyYW51bGUsCj4gKwkJCSAgICAgIGJvb2wgbGVhZiwgdm9pZCAqY29v a2llKTsKPiArCXZvaWQgKCp0bGJfc3luYykodm9pZCAqY29va2llKTsKPiArfTsKPiArCj4gK3N0 cnVjdCBpb19wZ3RhYmxlX2NmZyB7Cj4gKwkvKgo+ICsJICogSU9fUEdUQUJMRV9RVUlSS19BUk1f TlM6IChBUk0gZm9ybWF0cykgU2V0IE5TIGFuZCBOU1RBQkxFIGJpdHMgaW4KPiArCSAqCXN0YWdl IDEgUFRFcywgZm9yIGhhcmR3YXJlIHdoaWNoIGluc2lzdHMgb24gdmFsaWRhdGluZyB0aGVtCj4g KwkgKglldmVuIGluCW5vbi1zZWN1cmUgc3RhdGUgd2hlcmUgdGhleSBzaG91bGQgbm9ybWFsbHkg YmUgaWdub3JlZC4KPiArCSAqCj4gKwkgKiBJT19QR1RBQkxFX1FVSVJLX05PX1BFUk1TOiBJZ25v cmUgdGhlIElPTU1VX1JFQUQsIElPTU1VX1dSSVRFIGFuZAo+ICsJICoJSU9NTVVfTk9FWEVDIGZs YWdzIGFuZCBtYXAgZXZlcnl0aGluZyB3aXRoIGZ1bGwgYWNjZXNzLCBmb3IKPiArCSAqCWhhcmR3 YXJlIHdoaWNoIGRvZXMgbm90IGltcGxlbWVudCB0aGUgcGVybWlzc2lvbnMgb2YgYSBnaXZlbgo+ ICsJICoJZm9ybWF0LCBhbmQvb3IgcmVxdWlyZXMgc29tZSBmb3JtYXQtc3BlY2lmaWMgZGVmYXVs dCB2YWx1ZS4KPiArCSAqCj4gKwkgKiBJT19QR1RBQkxFX1FVSVJLX1RMQklfT05fTUFQOiBJZiB0 aGUgZm9ybWF0IGZvcmJpZHMgY2FjaGluZyBpbnZhbGlkCj4gKwkgKgkodW5tYXBwZWQpIGVudHJp ZXMgYnV0IHRoZSBoYXJkd2FyZSBtaWdodCBkbyBzbyBhbnl3YXksIHBlcmZvcm0KPiArCSAqCVRM QiBtYWludGVuYW5jZSB3aGVuIG1hcHBpbmcgYXMgd2VsbCBhcyB3aGVuIHVubWFwcGluZy4KPiAr CSAqCj4gKwkgKiBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdCOiAoQVJNIHY3cyBmb3JtYXQp IFNldCBiaXQgOSBpbiBhbGwKPiArCSAqCVBURXMsIGZvciBNZWRpYXRlayBJT01NVXMgd2hpY2gg dHJlYXQgaXQgYXMgYSAzM3JkIGFkZHJlc3MgYml0Cj4gKwkgKgl3aGVuIHRoZSBTb0MgaXMgaW4g IjRHQiBtb2RlIiBhbmQgdGhleSBjYW4gb25seSBhY2Nlc3MgdGhlIGhpZ2gKPiArCSAqCXJlbWFw IG9mIERSQU0gKDB4MV8wMDAwMDAwMCB0byAweDFfZmZmZmZmZmYpLgo+ICsJICoKPiArCSAqIElP X1BHVEFCTEVfUVVJUktfTk9fRE1BOiBHdWFyYW50ZWVzIHRoYXQgdGhlIHRhYmxlcyB3aWxsIG9u bHkgZXZlcgo+ICsJICoJYmUgYWNjZXNzZWQgYnkgYSBmdWxseSBjYWNoZS1jb2hlcmVudCBJT01N VSBvciBDUFUgKGUuZy4gZm9yIGEKPiArCSAqCXNvZnR3YXJlLWVtdWxhdGVkIElPTU1VKSwgc3Vj aCB0aGF0IHBhZ2V0YWJsZSB1cGRhdGVzIG5lZWQgbm90Cj4gKwkgKgliZSB0cmVhdGVkIGFzIGV4 cGxpY2l0IERNQSBkYXRhLgo+ICsJICovCj4gKwkjZGVmaW5lIElPX1BHVEFCTEVfUVVJUktfQVJN X05TCQlCSVQoMCkKPiArCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNUwlCSVQoMSkK PiArCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19UTEJJX09OX01BUAlCSVQoMikKPiArCSNkZWZp bmUgSU9fUEdUQUJMRV9RVUlSS19BUk1fTVRLXzRHQglCSVQoMykKPiArCSNkZWZpbmUgSU9fUEdU QUJMRV9RVUlSS19OT19ETUEJCUJJVCg0KQo+ICsJdW5zaWduZWQgbG9uZwkJCXF1aXJrczsKPiAr CXVuc2lnbmVkIGxvbmcJCQlwZ3NpemVfYml0bWFwOwo+ICsJdW5zaWduZWQgaW50CQkJaWFzOwo+ ICsJdW5zaWduZWQgaW50CQkJb2FzOwo+ICsJY29uc3Qgc3RydWN0IGlvbW11X2dhdGhlcl9vcHMJ KnRsYjsKPiArCXN0cnVjdCBkZXZpY2UJCQkqaW9tbXVfZGV2Owo+ICsKPiArCS8qIExvdy1sZXZl bCBkYXRhIHNwZWNpZmljIHRvIHRoZSB0YWJsZSBmb3JtYXQgKi8KPiArCXVuaW9uIHsKPiArCQlz dHJ1Y3Qgewo+ICsJCQl1NjQJdHRiclsyXTsKPiArCQkJdTY0CXRjcjsKPiArCQkJdTY0CW1haXJb Ml07Cj4gKwkJfSBhcm1fbHBhZV9zMV9jZmc7Cj4gKwo+ICsJCXN0cnVjdCB7Cj4gKwkJCXU2NAl2 dHRicjsKPiArCQkJdTY0CXZ0Y3I7Cj4gKwkJfSBhcm1fbHBhZV9zMl9jZmc7Cj4gKwo+ICsJCXN0 cnVjdCB7Cj4gKwkJCXUzMgl0dGJyWzJdOwo+ICsJCQl1MzIJdGNyOwo+ICsJCQl1MzIJbm1ycjsK PiArCQkJdTMyCXBycnI7Cj4gKwkJfSBhcm1fdjdzX2NmZzsKPiArCX07Cj4gK307Cj4gKwo+ICtl bnVtIGlvX3BndGFibGVfZm10IHsKPiArCUFSTV8zMl9MUEFFX1MxLAo+ICsJQVJNXzMyX0xQQUVf UzIsCj4gKwlBUk1fNjRfTFBBRV9TMSwKPiArCUFSTV82NF9MUEFFX1MyLAo+ICsJQVJNX1Y3UywK PiArCUlPX1BHVEFCTEVfTlVNX0ZNVFMsCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBYZW46IFRoZSBw Z3RhYmxlX29wcyBhcmUgdXNlZCBieSB0aGUgUzEgdHJhbnNsYXRpb25zLCBzbyByZXR1cm4gdGhl IGR1bW15Cj4gKyAqIGFkZHJlc3MuCj4gKyAqLwo+ICsjZGVmaW5lIGFsbG9jX2lvX3BndGFibGVf b3BzKGYsIGMsIG8pICgoc3RydWN0IGlvX3BndGFibGVfb3BzICopMHgxKQo+ICsjZGVmaW5lIGZy ZWVfaW9fcGd0YWJsZV9vcHMobykKPiArCj4gKy8qIFhlbjogRGVmaW5lIHdyYXBwZXIgZm9yIHJl cXVlc3RpbmcgSVJRcyAqLwo+ICsjZGVmaW5lIElSUUZfT05FU0hPVCAwCj4gKwo+ICt0eXBlZGVm IHZvaWQgKCppcnFfaGFuZGxlcl90KShpbnQsIHZvaWQgKiwgc3RydWN0IGNwdV91c2VyX3JlZ3Mg Kik7Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBkZXZtX3JlcXVlc3RfaXJxKHN0cnVjdCBkZXZp Y2UgKmRldiwgdW5zaWduZWQgaW50IGlycSwKPiArCQkJCSAgIGlycV9oYW5kbGVyX3QgaGFuZGxl ciwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKPiArCQkJCSAgIGNvbnN0IGNoYXIgKmRldm5hbWUs IHZvaWQgKmRldl9pZCkKPiArewo+ICsJLyoKPiArCSAqIFNNTVV2MyBpbXBsZW1lbnRhdGlvbiBj YW4gc3VwcG9ydCB3aXJlZCBpbnRlcnJ1cHQgb3V0cHV0cyB0aGF0IGFyZQo+ICsJICogZWRnZS10 cmlnZ2VyZWQuIFNldCB0aGUgaXJxIHR5cGUgYXMgcGVyIHRoZSBzcGVjLgo+ICsJICovCj4gKwlp cnFfc2V0X3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOwo+ICsJcmV0dXJuIHJlcXVlc3Rf aXJxKGlycSwgaXJxZmxhZ3MsIGhhbmRsZXIsIGRldm5hbWUsIGRldl9pZCk7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIFhlbiBkb2VzIG5vdCBoYXZlIGEgY29uY2VwdCBvZiB0aHJlYWRlZCBpcnEsIGJ1 dCB3ZSBjYW4gdXNlIHRhc2tsZXRzIHRvCj4gKyAqIGFjaGlldmUgdGhlIGRlc2lyZWQgZnVuY3Rp b25hbGl0eSBhcyBuZWVkZWQuCj4gKyAqLwo+ICtpbnQgZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2ly cShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaGFu ZGxlciwKPiArCQkJICAgICAgaXJxX2hhbmRsZXJfdCB0aHJlYWRfZm4sIHVuc2lnbmVkIGxvbmcg aXJxZmxhZ3MsCj4gKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkK PiArewo+ICsJcmV0dXJuIGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHRocmVhZF9mbiwgaXJx ZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7Cj4gK30KPiArCj4gKy8qIFhlbjogVGhlIG11dGV4IGlz IHVzZWQgb25seSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gc28gdGhlIHR5cGVjYXN0IGlzIHNhZmUg Ki8KPiArI2RlZmluZSBtdXRleCBzcGlubG9jawo+ICsjZGVmaW5lIG11dGV4X2luaXQgc3Bpbl9s b2NrX2luaXQKPiArI2RlZmluZSBtdXRleF9sb2NrIHNwaW5fbG9jawo+ICsjZGVmaW5lIG11dGV4 X3VubG9jayBzcGluX3VubG9jawo+ICsKPiArI2RlZmluZSByZWFkeF9wb2xsX3RpbWVvdXQob3As IGFkZHIsIHZhbCwgY29uZCwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpIFwKPiArKHsgXAo+ICsJc190 aW1lX3QgZGVhZGxpbmUgPSBOT1coKSArIE1JQ1JPU0VDUyh0aW1lb3V0X3VzKTsgXAo+ICsJZm9y ICg7OykgeyBcCj4gKwkJKHZhbCkgPSBvcChhZGRyKTsgXAo+ICsJCWlmIChjb25kKSBcCj4gKwkJ CWJyZWFrOyBcCj4gKwkJaWYgKE5PVygpID4gZGVhZGxpbmUpIHsgXAo+ICsJCQkodmFsKSA9IG9w KGFkZHIpOyBcCj4gKwkJCWJyZWFrOyBcCj4gKwkJfSBcCj4gKwl1ZGVsYXkoc2xlZXBfdXMpOyBc Cj4gKwl9IFwKPiArCShjb25kKSA/IDAgOiAtRVRJTUVET1VUOyBcCj4gK30pCj4gKwo+ICsjZGVm aW5lIHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0KGFkZHIsIHZhbCwgY29uZCwgZGVsYXlfdXMs IHRpbWVvdXRfdXMpIFwKPiArCXJlYWR4X3BvbGxfdGltZW91dChyZWFkbF9yZWxheGVkLCBhZGRy LCB2YWwsIGNvbmQsIGRlbGF5X3VzLCB0aW1lb3V0X3VzKQo+ICsKPiArI2RlZmluZSBWQV9CSVRT IDAgLyogT25seSBuZWVkZWQgZm9yIFMxIHRyYW5zbGF0aW9ucyAqLwo+ICAgCj4gICAvKiBNTUlP IHJlZ2lzdGVycyAqLwo+ICAgI2RlZmluZSBBUk1fU01NVV9JRFIwCQkJMHgwCj4gQEAgLTQzMyw2 ICs4MTksNyBAQCBlbnVtIHByaV9yZXNwIHsKPiAgIAlQUklfUkVTUF9TVUNDLAo+ICAgfTsKPiAg IAo+ICsjaWYgMCAvKiBYZW46IE5vIE1TSSBzdXBwb3J0IGluIHRoaXMgaXRlcmF0aW9uICovCj4g ICBlbnVtIGFybV9zbW11X21zaV9pbmRleCB7Cj4gICAJRVZUUV9NU0lfSU5ERVgsCj4gICAJR0VS Uk9SX01TSV9JTkRFWCwKPiBAQCAtNDU3LDYgKzg0NCw3IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBh cm1fc21tdV9tc2lfY2ZnW0FSTV9TTU1VX01BWF9NU0lTXVszXSA9IHsKPiAgIAkJQVJNX1NNTVVf UFJJUV9JUlFfQ0ZHMiwKPiAgIAl9LAo+ICAgfTsKPiArI2VuZGlmCj4gICAKPiAgIHN0cnVjdCBh cm1fc21tdV9jbWRxX2VudCB7Cj4gICAJLyogQ29tbW9uIGZpZWxkcyAqLwo+IEBAIC01NjEsNiAr OTQ5LDggQEAgc3RydWN0IGFybV9zbW11X3MyX2NmZyB7Cj4gICAJdTE2CQkJCXZtaWQ7Cj4gICAJ dTY0CQkJCXZ0dGJyOwo+ICAgCXU2NAkJCQl2dGNyOwo+ICsJLyogWGVuOiBEb21haW4gYXNzb2Np YXRlZCB0byB0aGlzIGNvbmZpZ3VyYXRpb24gKi8KPiArCXN0cnVjdCBkb21haW4JCQkqZG9tYWlu Owo+ICAgfTsKPiAgIAo+ICAgc3RydWN0IGFybV9zbW11X3N0cnRhYl9lbnQgewo+IEBAIC02MzUs OSArMTAyNSwyNSBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIHsKPiAgIAlzdHJ1Y3QgYXJtX3Nt bXVfc3RydGFiX2NmZwlzdHJ0YWJfY2ZnOwo+ICAgCj4gICAJLyogSU9NTVUgY29yZSBjb2RlIGhh bmRsZSAqLwo+ICsjaWYgMCAvKlhlbjogR2VuZXJpYyBpb21tdV9kZXZpY2UgcmVmIG5vdCBuZWVk ZWQgaGVyZSAqLwo+ICAgCXN0cnVjdCBpb21tdV9kZXZpY2UJCWlvbW11Owo+ICsjZW5kaWYKSXMg aXQgY2xlYW4gdG8gcHV0ICNpZiAwLCBjYW4gdGhpcyBsaW5lIGJlIGRlbGV0ZWQgb3IgdXNlZCB3 aXRoIGEgcHJvcGVyIAptYWNybwo+ICsJLyogWGVuOiBOZWVkIHRvIGtlZXAgYSBsaXN0IG9mIFNN TVUgZGV2aWNlcyAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgICBkZXZpY2Vz Owo+ICsJLyogWGVuOiBUYXNrbGV0cyBmb3IgaGFuZGxpbmcgZXZ0cy9mYXVsdHMgYW5kIHBjaSBw YWdlIHJlcXVlc3QgSVJRcyovCj4gKwlzdHJ1Y3QgdGFza2xldAkJCWV2dHFfdGFza2xldDsKPiAr CXN0cnVjdCB0YXNrbGV0CQkJcHJpcV90YXNrbGV0Owo+ICsJc3RydWN0IHRhc2tsZXQJCQljb21i aW5lZF9pcnFfdGFza2xldDsKPiAgIH07Cj4gICAKPiArLyogWGVuOiBLZWVwIGEgbGlzdCBvZiBk ZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciAqLwo+ICtzdGF0aWMgREVGSU5FX1NQ SU5MT0NLKGFybV9zbW11X2RldmljZXNfbG9jayk7Cj4gK3N0YXRpYyBMSVNUX0hFQUQoYXJtX3Nt bXVfZGV2aWNlcyk7Cj4gKy8qIFhlbjogSGVscGVyIGZvciBmaW5kaW5nIGEgZGV2aWNlIHVzaW5n IGZ3bm9kZSAqLwo+ICtzdGF0aWMKPiArc3RydWN0IGFybV9zbW11X2RldmljZSAqYXJtX3NtbXVf Z2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTsKPiArCj4gKwo+ICAg LyogU01NVSBwcml2YXRlIGRhdGEgZm9yIGVhY2ggbWFzdGVyICovCj4gICBzdHJ1Y3QgYXJtX3Nt bXVfbWFzdGVyX2RhdGEgewo+ICAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UJCSpzbW11Owo+IEBA IC0xMjMyLDcgKzE2MzgsNyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9oYW5kbGVfcHByKHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHU2NCAqZXZ0KQo+ICAgCj4gICAJZGV2X2luZm8oc21t dS0+ZGV2LCAidW5leHBlY3RlZCBQUkkgcmVxdWVzdCByZWNlaXZlZDpcbiIpOwo+ICAgCWRldl9p bmZvKHNtbXUtPmRldiwKPiAtCQkgIlx0c2lkIDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZp bGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3ZhIDB4JTAxNmxseFxuIiwKPiArCQkgIlx0c2lkIDB4 JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3ZhICUj IiBQUkl4NjQgIlxuIiwKPiAgIAkJIHNpZCwgc3NpZCwgZ3JwaWQsIGxhc3QgPyAiTCIgOiAiIiwK PiAgIAkJIGV2dFswXSAmIFBSSVFfMF9QRVJNX1BSSVYgPyAiIiA6ICJ1biIsCj4gICAJCSBldnRb MF0gJiBQUklRXzBfUEVSTV9SRUFEID8gIlIiIDogIiIsCj4gQEAgLTEzNDIsMTAgKzE3NDgsMjAg QEAgc3RhdGljIGlycXJldHVybl90IGFybV9zbW11X2NvbWJpbmVkX2lycV90aHJlYWQoaW50IGly cSwgdm9pZCAqZGV2KQo+ICAgCXJldHVybiBJUlFfSEFORExFRDsKPiAgIH0KPiAgIAo+ICsvKiBY ZW46IEZvcndhcmQgZGVmaW5lIGZvciBjb21iaW5lZF9pcnEgdGFza2xldCAqLwo+ICtzdGF0aWMg dm9pZCBhcm1fc21tdV9jb21iaW5lZF9pcnFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldik7Cj4g Kwo+ICAgc3RhdGljIGlycXJldHVybl90IGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyKGlu dCBpcnEsIHZvaWQgKmRldikKPiAgIHsKPiArCS8qIFhlbjogTmVlZCBhbiBzbW11IHJlZmVyZW5j ZSB0byBzY2hlZHVsZSB0aGUgdGFza2xldCAqLwo+ICsJc3RydWN0IGFybV9zbW11X2RldmljZSAq c21tdSA9IChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICopZGV2Owo+ICsKPiAgIAlhcm1fc21tdV9n ZXJyb3JfaGFuZGxlcihpcnEsIGRldik7Cj4gICAJYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIo aXJxLCBkZXYpOwo+ICsKPiArCS8qWGVuOiBObyB0aHJlYWRlZCBpcnEuIFNvLCBzY2hlZHVsZSB0 aGUgcmlnaHQgdGFza2xldCovCj4gKwl0YXNrbGV0X3NjaGVkdWxlKCYoc21tdS0+Y29tYmluZWRf aXJxX3Rhc2tsZXQpKTsKPiArCj4gICAJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKPiAgIH0KPiAg IAo+IEBAIC0xMzU4LDYgKzE3NzQsNjkgQEAgc3RhdGljIHZvaWQgX19hcm1fc21tdV90bGJfc3lu YyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+ICAgCWFybV9zbW11X2NtZHFfaXNzdWVf Y21kKHNtbXUsICZjbWQpOwo+ICAgfQo+ICAgCj4gKy8qCj4gKyAqIFhlbjogRGVmaW5lIHRoZSBJ UlEgaGFuZGxlcnMgYW5kIHRhc2tsZXRzIGZvciB4ZW4uIFRoZSBsaW51eCBmdW5jdGlvbnMKPiAr ICogd291bGQgYmUgbW9kaWZpZWQgdG8gdXNlIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUg Zm9sbG93aW5nIGNvZGUuCj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfZXZ0cV90 YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2KQo+ICt7Cj4gKwkvKiBUaGUgSVJRIG51bWJlciBpcyBu b3QgcmVsZXZlbnQgZm9yIHRoZSBldnRxIHRocmVhZCBwcm9jZXNzaW5nICovCj4gKwlhcm1fc21t dV9ldnRxX3RocmVhZCgwLCAodm9pZCAqKWRldik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFy bV9zbW11X3ByaXFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldikKPiArewo+ICsJLyogVGhlIElS USBudW1iZXIgaXMgbm90IHJlbGV2ZW50IGZvciB0aGUgcHJpcSB0aHJlYWQgcHJvY2Vzc2luZyAq Lwo+ICsJYXJtX3NtbXVfcHJpcV90aHJlYWQoMCwgKHZvaWQgKilkZXYpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBhcm1fc21tdV9jb21iaW5lZF9pcnFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRl dikKPiArewo+ICsJLyogVGhlIElSUSBudW1iZXIgaXMgbm90IHJlbGV2ZW50IGZvciB0aGUgY29t YmluZWQgaXJxIGhhbmRsZXIuKi8KPiArCWFybV9zbW11X2NvbWJpbmVkX2lycV90aHJlYWQoMCwg KHZvaWQgKilkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9ldnRxX3RocmVh ZF94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+ICsJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKilkZXY7Cj4gKwo+ICsJdGFza2xldF9zY2hlZHVsZSgmKHNtbXUt PmV2dHFfdGFza2xldCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9wcmlxX3Ro cmVhZF94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+ICsJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNl cl9yZWdzICpyZWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0 cnVjdCBhcm1fc21tdV9kZXZpY2UgKilkZXY7Cj4gKwo+ICsJdGFza2xldF9zY2hlZHVsZSgmKHNt bXUtPnByaXFfdGFza2xldCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9jbWRx X3N5bmNfaGFuZGxlcl94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+ICsJCQkJICAgICAgIHN0cnVj dCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+ICt7Cj4gKwlhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxl cihpcnEsIGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2dlcnJvcl9oYW5k bGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4gKwkJCQkgICAgICAgc3RydWN0IGNwdV91c2Vy X3JlZ3MgKnJlZ3MpCj4gK3sKPiArCWFybV9zbW11X2dlcnJvcl9oYW5kbGVyKGlycSwgZGV2KTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXJfeGVu KGludCBpcnEsIHZvaWQgKmRldiwKPiArCQkJCSAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVncykKPiArewo+ICsJYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXIoaXJxLCBkZXYpOwo+ ICt9Cj4gKwo+ICsjZGVmaW5lIGFybV9zbW11X2V2dHFfdGhyZWFkIGFybV9zbW11X2V2dHFfdGhy ZWFkX3hlbgo+ICsjZGVmaW5lIGFybV9zbW11X3ByaXFfdGhyZWFkIGFybV9zbW11X3ByaXFfdGhy ZWFkX3hlbgo+ICsjZGVmaW5lIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyIGFybV9zbW11X2Nt ZHFfc3luY19oYW5kbGVyX3hlbgo+ICsjZGVmaW5lIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyIGFy bV9zbW11X2dlcnJvcl9oYW5kbGVyX3hlbgo+ICsjZGVmaW5lIGFybV9zbW11X2NvbWJpbmVkX2ly cV9oYW5kbGVyIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyX3hlbgo+ICsKPiAgIHN0YXRp YyB2b2lkIGFybV9zbW11X3RsYl9zeW5jKHZvaWQgKmNvb2tpZSkKPiAgIHsKPiAgIAlzdHJ1Y3Qg YXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiA9IGNvb2tpZTsKPiBAQCAtMTQxNSw2ICsxODk0 LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9nYXRoZXJfb3BzIGFybV9zbW11X2dhdGhl cl9vcHMgPSB7Cj4gICAJLnRsYl9zeW5jCT0gYXJtX3NtbXVfdGxiX3N5bmMsCj4gICB9Owo+ICAg Cj4gKyNpZiAwIC8qWGVuOiBVbnVzZWQgZnVuY3Rpb25hbGl0eSAqLwo+ICAgLyogSU9NTVUgQVBJ ICovCj4gICBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNhcCkK PiAgIHsKPiBAQCAtMTQyNyw2ICsxOTA3LDcgQEAgc3RhdGljIGJvb2wgYXJtX3NtbXVfY2FwYWJs ZShlbnVtIGlvbW11X2NhcCBjYXApCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAl9Cj4gICB9Cj4g KyNlbmRpZgo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJtX3NtbXVfZG9t YWluX2FsbG9jKHVuc2lnbmVkIHR5cGUpCj4gICB7Cj4gQEAgLTE1NDYsOSArMjAyNywxNiBAQCBz dGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3NtbXVfZG9t YWluICpzbW11X2RvbWFpbiwKPiAgIAlpZiAodm1pZCA8IDApCj4gICAJCXJldHVybiB2bWlkOwo+ ICAgCj4gLQljZmctPnZtaWQJPSAodTE2KXZtaWQ7Cj4gLQljZmctPnZ0dGJyCT0gcGd0YmxfY2Zn LT5hcm1fbHBhZV9zMl9jZmcudnR0YnI7Cj4gLQljZmctPnZ0Y3IJPSBwZ3RibF9jZmctPmFybV9s cGFlX3MyX2NmZy52dGNyOwo+ICsJLyoKPiArCSAqIFhlbjogR2V0IHRoZSB0dGJyIGFuZCB2dGNy IHZhbHVlcwo+ICsJICogdnR0YnI6IFRoaXMgaXMgYSBzaGFyZWQgdmFsdWUgd2l0aCB0aGUgZG9t YWluIHBhZ2UgdGFibGUKPiArCSAqIHZ0Y3I6IFRoZSBUQ1Igc2V0dGluZ3MgYXJlIHRoZSBzYW1l IGFzIENQVSBzaW5jZSB0aGUgcGFnZQo+ICsJICogdGFibGVzIGFyZSBzaGFyZWQKPiArCSAqLwo+ ICsKPiArCWNmZy0+dm1pZAk9IHZtaWQ7Cj4gKwljZmctPnZ0dGJyCT0gcGFnZV90b19tYWRkcihj ZmctPmRvbWFpbi0+YXJjaC5wMm0ucm9vdCk7Cj4gKwljZmctPnZ0Y3IJPSBSRUFEX1NZU1JFRzMy KFZUQ1JfRUwyKSAmIFNUUlRBQl9TVEVfMl9WVENSX01BU0s7Cj4gICAJcmV0dXJuIDA7Cj4gICB9 Cj4gICAKPiBAQCAtMTYwNCw2ICsyMDkyLDcgQEAgc3RhdGljIGludCBhcm1fc21tdV9kb21haW5f ZmluYWxpc2Uoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+ICAgCWlmIChzbW11LT5mZWF0 dXJlcyAmIEFSTV9TTU1VX0ZFQVRfQ09IRVJFTkNZKQo+ICAgCQlwZ3RibF9jZmcucXVpcmtzID0g SU9fUEdUQUJMRV9RVUlSS19OT19ETUE7Cj4gICAKPiArCS8qIFhlbjogcGd0Ymxfb3BzIGdldHMg YW4gaW52YWxpZCBhZGRyZXNzICovCj4gICAJcGd0Ymxfb3BzID0gYWxsb2NfaW9fcGd0YWJsZV9v cHMoZm10LCAmcGd0YmxfY2ZnLCBzbW11X2RvbWFpbik7Cj4gICAJaWYgKCFwZ3RibF9vcHMpCj4g ICAJCXJldHVybiAtRU5PTUVNOwo+IEBAIC0xNzIxLDYgKzIyMTAsNyBAQCBvdXRfdW5sb2NrOgo+ ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiArI2lmIDAgLyogWGVuOiBVbnVzZWQgZnVuY3Rp b25hbGl0eSAqLwpzYW1lCj4gICBzdGF0aWMgaW50IGFybV9zbW11X21hcChzdHJ1Y3QgaW9tbXVf ZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKPiAgIAkJCXBoeXNfYWRkcl90IHBh ZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCj4gICB7Cj4gQEAgLTE3NzIsNiArMjI2Miw3IEBA IHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3 bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPiAgIAlwdXRfZGV2aWNlKGRldik7Cj4gICAJcmV0dXJuIGRl diA/IGRldl9nZXRfZHJ2ZGF0YShkZXYpIDogTlVMTDsKPiAgIH0KPiArI2VuZGlmCj4gICAKPiAg IHN0YXRpYyBib29sIGFybV9zbW11X3NpZF9pbl9yYW5nZShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11LCB1MzIgc2lkKQo+ICAgewo+IEBAIC0xNzgzLDcgKzIyNzQsMTQgQEAgc3RhdGljIGJv b2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUz MiBzaWQpCj4gICAJcmV0dXJuIHNpZCA8IGxpbWl0Owo+ICAgfQo+ICAgCj4gKy8qIFhlbjogVW51 c2VkICovCj4gKyNpZiAwCj4gICBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9vcHM7 Cj4gKyNlbmRpZgo+ICsKPiArLyogWGVuOiBSZWRlZmluZSBhcm1fc21tdV9vcHMgdG8gd2hhdCBm d3NwZWMgc2hvdWxkIGV2YWx1YXRlICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3Bz IGFybV9zbW11X2lvbW11X29wczsKPiArI2RlZmluZSBhcm1fc21tdV9vcHMgYXJtX3NtbXVfaW9t bXVfb3BzCj4gICAKPiAgIHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCj4gICB7Cj4gQEAgLTE3OTEsOCArMjI4OSwxMSBAQCBzdGF0aWMgaW50IGFybV9z bW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICAgCXN0cnVjdCBhcm1fc21tdV9k ZXZpY2UgKnNtbXU7Cj4gICAJc3RydWN0IGFybV9zbW11X21hc3Rlcl9kYXRhICptYXN0ZXI7Cj4g ICAJc3RydWN0IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2LT5pb21tdV9md3NwZWM7Cj4gKyNp ZiAwIC8qWGVuOiBpb21tdV9ncm91cCBpcyBub3QgbmVlZGVkICovCj4gICAJc3RydWN0IGlvbW11 X2dyb3VwICpncm91cDsKPiArI2VuZGlmCj4gICAKPiArCS8qIFhlbjogZndzcGVjLT5vcHMgYXJl IG5vdCBuZWVkZWQgKi8KPiAgIAlpZiAoIWZ3c3BlYyB8fCBmd3NwZWMtPm9wcyAhPSAmYXJtX3Nt bXVfb3BzKQo+ICAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgIAkvKgo+IEBAIC0xODMwLDYgKzIzMzEs MTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikK PiAgIAkJfQo+ICAgCX0KPiAgIAo+ICsvKgo+ICsgKiBYZW46IERvIG5vdCBuZWVkIGFuIGlvbW11 IGdyb3VwIGFzIHRoZSBzdHJlYW0gZGF0YSBpcyBjYXJyaWVkIGJ5IHRoZSBTTU1VCj4gKyAqIG1h c3RlciBkZXZpY2Ugb2JqZWN0Cj4gKyAqLwo+ICsjaWYgMAo+ICAgCWdyb3VwID0gaW9tbXVfZ3Jv dXBfZ2V0X2Zvcl9kZXYoZGV2KTsKPiAgIAlpZiAoIUlTX0VSUihncm91cCkpIHsKPiAgIAkJaW9t bXVfZ3JvdXBfcHV0KGdyb3VwKTsKPiBAQCAtMTgzNyw4ICsyMzQzLDE2IEBAIHN0YXRpYyBpbnQg YXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gICAJfQo+ICAgCj4gICAJ cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhncm91cCk7Cj4gKyNlbmRpZgo+ICsJcmV0dXJuIDA7Cj4g ICB9Cj4gICAKPiArLyoKPiArICogWGVuOiBXZSBjYW4gcG90ZW50aWFsbHkgc3VwcG9ydCB0aGlz IGZ1bmN0aW9uIGFuZCBkZXN0cm95IGEgZGV2aWNlLiBUaGlzCj4gKyAqIHdpbGwgYmUgcmVsZXZh bnQgZm9yIFBDSSBob3RwbHVnLiBTbywgd2lsbCBiZSBpbXBsZW1lbnRlZCBhcyBuZWVkZWQgYWZ0 ZXIKPiArICogcGFzc3Rocm91Z2ggc3VwcG9ydCBpcyBhdmFpbGFibGUuCj4gKyAqLwo+ICsjaWYg MAo+ICAgc3RhdGljIHZvaWQgYXJtX3NtbXVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gICB7Cj4gICAJc3RydWN0IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2LT5pb21tdV9m d3NwZWM7Cj4gQEAgLTE5NzQsNiArMjQ4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3BzIGFy bV9zbW11X29wcyA9IHsKPiAgIAkucHV0X3Jlc3ZfcmVnaW9ucwk9IGFybV9zbW11X3B1dF9yZXN2 X3JlZ2lvbnMsCj4gICAJLnBnc2l6ZV9iaXRtYXAJCT0gLTFVTCwgLyogUmVzdHJpY3RlZCBkdXJp bmcgZGV2aWNlIGF0dGFjaCAqLwo+ICAgfTsKPiArI2VuZGlmCj4gICAKPiAgIC8qIFByb2Jpbmcg YW5kIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwo+ICAgc3RhdGljIGludCBhcm1fc21tdV9p bml0X29uZV9xdWV1ZShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LAo+IEBAIC0yMTgyLDYg KzI2OTcsNyBAQCBzdGF0aWMgaW50IGFybV9zbW11X3VwZGF0ZV9nYnBhKHN0cnVjdCBhcm1fc21t dV9kZXZpY2UgKnNtbXUsIHUzMiBzZXQsIHUzMiBjbHIpCj4gICAJCQkJCSAgMSwgQVJNX1NNTVVf UE9MTF9USU1FT1VUX1VTKTsKPiAgIH0KPiAgIAo+ICsjaWYgMCAvKiBYZW46IFRoZXJlIGlzIG5v IE1TSSBzdXBwb3J0IGFzIHlldCAqLwo+ICAgc3RhdGljIHZvaWQgYXJtX3NtbXVfZnJlZV9tc2lz KHZvaWQgKmRhdGEpCj4gICB7Cj4gICAJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKPiBAQCAt MjI0NywxMiArMjc2MywxNSBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9zZXR1cF9tc2lzKHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4gICAJLyogQWRkIGNhbGxiYWNrIHRvIGZyZWUgTVNJ cyBvbiB0ZWFyZG93biAqLwo+ICAgCWRldm1fYWRkX2FjdGlvbihkZXYsIGFybV9zbW11X2ZyZWVf bXNpcywgZGV2KTsKPiAgIH0KPiArI2VuZGlmCj4gICAKPiAgIHN0YXRpYyB2b2lkIGFybV9zbW11 X3NldHVwX3VuaXF1ZV9pcnFzKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4gICB7Cj4g ICAJaW50IGlycSwgcmV0Owo+ICAgCj4gKyNpZiAwIC8qWGVuOiBDYW5ub3Qgc2V0dXAgbXNpcyBm b3Igbm93ICovCj4gICAJYXJtX3NtbXVfc2V0dXBfbXNpcyhzbW11KTsKPiArI2VuZGlmCj4gICAK PiAgIAkvKiBSZXF1ZXN0IGludGVycnVwdCBsaW5lcyAqLwo+ICAgCWlycSA9IHNtbXUtPmV2dHEu cS5pcnE7Cj4gQEAgLTIzMTYsOSArMjgzNSwxMyBAQCBzdGF0aWMgaW50IGFybV9zbW11X3NldHVw X2lycXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPiAgIAkJICogQ2F2aXVtIFRodW5k ZXJYMiBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG5vdCBzdXBwb3J0IHVuaXF1ZQo+ICAgCQkgKiBp cnEgbGluZXMuIFVzZSBzaW5nbGUgaXJxIGxpbmUgZm9yIGFsbCB0aGUgU01NVXYzIGludGVycnVw dHMuCj4gICAJCSAqLwo+IC0JCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc21tdS0+ ZGV2LCBpcnEsCj4gKwkJLyoKPiArCQkgKiBYZW46IERvZXMgbm90IHN1cHBvcnQgdGhyZWFkZWQg aXJxcywgc28gc2VyaWFsaXNlIHRoZSBzZXR1cC4KPiArCQkgKiBUaGlzIGlzIHRoZSBzYW1lIGZv ciBwcmlzIGFuZCBldmVudCBpbnRlcnJ1cHQgbGluZXMgb24gb3RoZXIKPiArCQkgKiBzeXN0ZW1z Cj4gKwkJICovCj4gKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShzbW11LT5kZXYsIGlycSwKPiAg IAkJCQkJYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXIsCj4gLQkJCQkJYXJtX3NtbXVfY29t YmluZWRfaXJxX3RocmVhZCwKPiAgIAkJCQkJSVJRRl9PTkVTSE9ULAo+ICAgCQkJCQkiYXJtLXNt bXUtdjMtY29tYmluZWQtaXJxIiwgc21tdSk7Cj4gICAJCWlmIChyZXQgPCAwKQo+IEBAIC0yNDUy LDYgKzI5NzUsMTMgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcmVzZXQoc3RydWN0IGFy bV9zbW11X2RldmljZSAqc21tdSwgYm9vbCBieXBhc3MpCj4gICAJCXJldHVybiByZXQ7Cj4gICAJ fQo+ICAgCj4gKwkvKiBYZW46IEluaXRpYWxpemUgdGFza2xldHMgKi8KPiArCXRhc2tsZXRfaW5p dCgmc21tdS0+ZXZ0cV90YXNrbGV0LCBhcm1fc21tdV9ldnRxX3Rhc2tsZXQsCj4gKwkJCSh1bnNp Z25lZCBsb25nKXNtbXUpOwo+ICsJdGFza2xldF9pbml0KCZzbW11LT5wcmlxX3Rhc2tsZXQsIGFy bV9zbW11X3ByaXFfdGFza2xldCwKPiArCQkJKHVuc2lnbmVkIGxvbmcpc21tdSk7Cj4gKwl0YXNr bGV0X2luaXQoJnNtbXUtPmNvbWJpbmVkX2lycV90YXNrbGV0LCBhcm1fc21tdV9jb21iaW5lZF9p cnFfdGFza2xldCwKPiArCQkJKHVuc2lnbmVkIGxvbmcpc21tdSk7Cj4gICAKPiAgIAkvKiBFbmFi bGUgdGhlIFNNTVUgaW50ZXJmYWNlLCBvciBlbnN1cmUgYnlwYXNzICovCj4gICAJaWYgKCFieXBh c3MgfHwgZGlzYWJsZV9ieXBhc3MpIHsKPiBAQCAtMjU0Miw4ICszMDcyLDE0IEBAIHN0YXRpYyBp bnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUp Cj4gICAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfU1RBTExTOwo+ICAgCX0KPiAg IAo+ICsvKgo+ICsgKiBYZW46IEJsb2NrIHN0YWdlIDEgdHJhbnNsYXRpb25zLiBCeSBkb2luZyB0 aGlzIGhlcmUgd2UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZQo+ICsgKiBkb21haW4tPnN0YWdlIGV4 cGxpY2l0bHkuCj4gKyAqLwo+ICsjaWYgMAo+ICAgCWlmIChyZWcgJiBJRFIwX1MxUCkKPiAgIAkJ c21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9UUkFOU19TMTsKPiArI2VuZGlmCj4gICAK PiAgIAlpZiAocmVnICYgSURSMF9TMlApCj4gICAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1V X0ZFQVRfVFJBTlNfUzI7Cj4gQEAgLTI2MTYsMTAgKzMxNTIsMTIgQEAgc3RhdGljIGludCBhcm1f c21tdV9kZXZpY2VfaHdfcHJvYmUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPiAgIAlp ZiAocmVnICYgSURSNV9HUkFONEspCj4gICAJCXNtbXUtPnBnc2l6ZV9iaXRtYXAgfD0gU1pfNEsg fCBTWl8yTSB8IFNaXzFHOwo+ICAgCj4gKyNpZiAwIC8qIFhlbjogU01NVSBvcHMgZG8gbm90IGhh dmUgYSBwZ3NpemVfYml0bWFwIG1lbWJlciBmb3IgWGVuICovCj4gICAJaWYgKGFybV9zbW11X29w cy5wZ3NpemVfYml0bWFwID09IC0xVUwpCj4gICAJCWFybV9zbW11X29wcy5wZ3NpemVfYml0bWFw ID0gc21tdS0+cGdzaXplX2JpdG1hcDsKPiAgIAllbHNlCj4gICAJCWFybV9zbW11X29wcy5wZ3Np emVfYml0bWFwIHw9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7Cj4gKyNlbmRpZgo+ICAgCj4gICAJLyog T3V0cHV0IGFkZHJlc3Mgc2l6ZSAqLwo+ICAgCXN3aXRjaCAocmVnICYgSURSNV9PQVNfTUFTSyA8 PCBJRFI1X09BU19TSElGVCkgewo+IEBAIC0yNjgwLDcgKzMyMTgsOCBAQCBzdGF0aWMgaW50IGFy bV9zbW11X2RldmljZV9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4g ICAJc3RydWN0IGRldmljZSAqZGV2ID0gc21tdS0+ZGV2Owo+ICAgCXN0cnVjdCBhY3BpX2lvcnRf bm9kZSAqbm9kZTsKPiAgIAo+IC0Jbm9kZSA9ICooc3RydWN0IGFjcGlfaW9ydF9ub2RlICoqKWRl dl9nZXRfcGxhdGRhdGEoZGV2KTsKPiArCS8qIFhlbjogTW9kaWZpY2F0aW9uIHRvIGdldCBpb3J0 X25vZGUgKi8KPiArCW5vZGUgPSAoc3RydWN0IGFjcGlfaW9ydF9ub2RlICopZGV2LT5hY3BpX25v ZGU7Cj4gICAKPiAgIAkvKiBSZXRyaWV2ZSBTTU1VdjMgc3BlY2lmaWMgZGF0YSAqLwo+ICAgCWlv cnRfc21tdSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilub2RlLT5ub2RlX2RhdGE7Cj4g QEAgLTI3MDMsNyArMzI0Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFybV9zbW11X2RldmljZV9h Y3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gICBzdGF0aWMgaW50IGFy bV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICAg CQkJCSAgICBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+ICAgewo+IC0Jc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXY7Cj4g ICAJdTMyIGNlbGxzOwo+ICAgCWludCByZXQgPSAtRUlOVkFMOwo+ICAgCj4gQEAgLTI3MTYsNiAr MzI1NSw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2R0X3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsCj4gICAKPiAgIAlwYXJzZV9kcml2ZXJfb3B0aW9ucyhzbW11KTsK PiAgIAo+ICsJLyogWGVuOiBvZl9kbWFfaXNfY29oZXJlbnQgaXMgYSBzdHViIHRpbGwgZHQgc3Vw cG9ydCBpcyBpbnRyb2R1Y2VkICovCj4gICAJaWYgKG9mX2RtYV9pc19jb2hlcmVudChkZXYtPm9m X25vZGUpKQo+ICAgCQlzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX0NPSEVSRU5DWTsK PiAgIAo+IEBAIC0yNzM0LDkgKzMyNzQsMTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2Vf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgIHsKPiAgIAlpbnQgaXJxLCBy ZXQ7Cj4gICAJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKyNpZiAwIC8qWGVuOiBEbyBub3QgbmVl ZCB0byBzZXR1cCBzeXNmcyAqLwo+ICAgCXJlc291cmNlX3NpemVfdCBpb2FkZHI7Cj4gKyNlbmRp Zgo+ICAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXU7Cj4gLQlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gcGRldjsvKiBYZW46IGRl diBpcyBpZ25vcmVkICovCj4gICAJYm9vbCBieXBhc3M7Cj4gICAKPiAgIAlzbW11ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpzbW11KSwgR0ZQX0tFUk5FTCk7Cj4gQEAgLTI3NjMsNyArMzMw NSw5IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gICAJCWRldl9lcnIoZGV2LCAiTU1JTyByZWdpb24gdG9vIHNtYWxsICgl cHIpXG4iLCByZXMpOwo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9Cj4gKyNpZiAwIC8qWGVu OiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNmcyAqLwo+ICAgCWlvYWRkciA9IHJlcy0+c3RhcnQ7 Cj4gKyNlbmRpZgo+ICAgCj4gICAJc21tdS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlcyk7Cj4gICAJaWYgKElTX0VSUihzbW11LT5iYXNlKSkKPiBAQCAtMjgwMiwxMyArMzM0 NiwxOCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gICAJLyogUmVjb3JkIG91ciBw cml2YXRlIGRldmljZSBzdHJ1Y3R1cmUgKi8KPiArCS8qIFhlbjogU01NVSBpcyBub3QgdHJlYXRl ZCBhIGEgcGxhdGZvcm0gZGV2aWNlKi8KPiArI2lmIDAKPiAgIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBzbW11KTsKPiArI2VuZGlmCj4gICAKPiAgIAkvKiBSZXNldCB0aGUgZGV2aWNlICov Cj4gICAJcmV0ID0gYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHNtbXUsIGJ5cGFzcyk7Cj4gICAJaWYg KHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+ICsvKiBYZW46IE5vdCBjcmVhdGluZyBhbiBJ T01NVSBkZXZpY2UgbGlzdCBmb3IgWGVuICovCj4gKyNpZiAwCj4gICAJLyogQW5kIHdlJ3JlIHVw LiBHbyBnbyBnbyEgKi8KPiAgIAlyZXQgPSBpb21tdV9kZXZpY2Vfc3lzZnNfYWRkKCZzbW11LT5p b21tdSwgZGV2LCBOVUxMLAo+ICAgCQkJCSAgICAgInNtbXUzLiVwYSIsICZpb2FkZHIpOwo+IEBA IC0yODQ0LDkgKzMzOTMsMjAgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgIAkJaWYgKHJldCkKPiAgIAkJCXJldHVybiBy ZXQ7Cj4gICAJfQo+ICsjZW5kaWYKPiArCS8qCj4gKwkgKiBYZW46IEtlZXAgYSBsaXN0IG9mIGFs bCBwcm9iZWQgZGV2aWNlcy4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcXVlcnkKPiArCSAqIHRoZSBz bW11IGRldmljZXMgYmFzZWQgb24gdGhlIGZ3bm9kZS4KPiArCSAqLwo+ICsJSU5JVF9MSVNUX0hF QUQoJnNtbXUtPmRldmljZXMpOwo+ICsJc3Bpbl9sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2sp Owo+ICsJbGlzdF9hZGQoJnNtbXUtPmRldmljZXMsICZhcm1fc21tdV9kZXZpY2VzKTsKPiArCXNw aW5fdW5sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ ICAgCj4gKy8qIFhlbjogVW51c2VkIGZ1bmN0aW9uICovCj4gKyNpZiAwCj4gICBzdGF0aWMgaW50 IGFybV9zbW11X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAg IHsKPiAgIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gcGxhdGZvcm1fZ2V0X2RydmRh dGEocGRldik7Cj4gQEAgLTI4NjAsNiArMzQyMCw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2Rl dmljZV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAgewo+ICAgCWFy bV9zbW11X2RldmljZV9yZW1vdmUocGRldik7Cj4gICB9Cj4gKyNlbmRpZgo+ICsKPiAgIAo+ICAg c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsK PiAgIAl7IC5jb21wYXRpYmxlID0gImFybSxzbW11LXYzIiwgfSwKPiBAQCAtMjg2Nyw2ICszNDI5 LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hb XSA9IHsKPiAgIH07Cj4gICBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhcm1fc21tdV9vZl9tYXRj aCk7Cj4gICAKPiArI2lmIDAKPiAgIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybV9z bW11X2RyaXZlciA9IHsKPiAgIAkuZHJpdmVyCT0gewo+ICAgCQkubmFtZQkJPSAiYXJtLXNtbXUt djMiLAo+IEBAIC0yODgzLDMgKzM0NDYsMzE2IEBAIElPTU1VX09GX0RFQ0xBUkUoYXJtX3NtbXV2 MywgImFybSxzbW11LXYzIiwgTlVMTCk7Cj4gICBNT0RVTEVfREVTQ1JJUFRJT04oIklPTU1VIEFQ SSBmb3IgQVJNIGFyY2hpdGVjdGVkIFNNTVV2MyBpbXBsZW1lbnRhdGlvbnMiKTsKPiAgIE1PRFVM RV9BVVRIT1IoIldpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPiIpOwo+ICAgTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwo+ICsjZW5kaWYKPiArCj4gKy8qKioqKiBTdGFydCBvZiBYZW4g c3BlY2lmaWMgY29kZSAqKioqKi8KPiArCj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9z bW11X2lvdGxiX2ZsdXNoX2FsbChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJt X3NtbXVfeGVuX2RvbWFpbiAqc21tdV9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsK PiArCXN0cnVjdCBpb21tdV9kb21haW4gKmNmZzsKPiArCj4gKwlzcGluX2xvY2soJnNtbXVfZG9t YWluLT5sb2NrKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ZnLCAmc21tdV9kb21haW4tPmNv bnRleHRzLCBsaXN0KSB7Cj4gKwkJLyoKPiArCQkgKiBPbmx5IGludmFsaWRhdGUgdGhlIGNvbnRl eHQgd2hlbiBTTU1VIGlzIHByZXNlbnQuCj4gKwkJICogVGhpcyBpcyBiZWNhdXNlIHRoZSBjb250 ZXh0IGluaXRpYWxpemF0aW9uIGlzIGRlbGF5ZWQKPiArCQkgKiB1bnRpbCBhIG1hc3RlciBoYXMg YmVlbiBhZGRlZC4KPiArCQkgKi8KPiArCQlpZiAodW5saWtlbHkoIUFDQ0VTU19PTkNFKGNmZy0+ cHJpdi0+c21tdSkpKQo+ICsJCQljb250aW51ZTsKPiArCQlhcm1fc21tdV90bGJfaW52X2NvbnRl eHQoY2ZnLT5wcml2KTsKPiArCX0KPiArCXNwaW5fdW5sb2NrKCZzbW11X2RvbWFpbi0+bG9jayk7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3Nt bXVfaW90bGJfZmx1c2goc3RydWN0IGRvbWFpbiAqZCwKPiArCQkJCQkgICAgIHVuc2lnbmVkIGxv bmcgZ2ZuLAo+ICsJCQkJCSAgICAgdW5zaWduZWQgaW50IHBhZ2VfY291bnQpCj4gK3sKPiArCXJl dHVybiBhcm1fc21tdV9pb3RsYl9mbHVzaF9hbGwoZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgaW9tbXVfZG9tYWluICphcm1fc21tdV9nZXRfZG9tYWluKHN0cnVjdCBkb21haW4gKmQsCj4g KwkJCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKVGhpcyBpcyByZXR1cm5pbmcgaW9tbXVfZG9tYWlu IGFuZCBub3QgYSBkb21haW4uClBsZWFzZSBjaGFuZ2UgdGhlIG5hbWUgb2YgZnVuY3Rpb24uCj4g K3sKPiArCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKPiArCXN0cnVjdCBhcm1fc21tdV94 ZW5fZG9tYWluICp4ZW5fZG9tYWluOwpBIHN1Z2dlc3Rpb24KMS4gYXMgeW91IGhhdmUgdXNlZCBp biBhYm92ZSBmdW5jdGlvbiBzbW11X2RvbWFpbiB2YXJpYWJsZSBmb3IgCmFybV9zbW11X3hlbl9k b21haW4KQ2FuIHNpbWlsYXIgbG9naWMgYmUgdXNlZCBmb3IgaW9tbXVfZG9tYWluLgoKMi4gV2hl biBzbW11X2RvbWFpbiB2YXJpYWJsZSBuYW1lIGlzIHVzZWQgaW4gYWJvdmUgZnVuY3Rpb24gd2h5 IAp4ZW5fZG9tYWluIGlzIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4KSXQgaXMgcXVpdGUgY29uZnVz aW5nLgpsb2dpY2FsbHkgeGVuX2RvbWFpbiBzaG91bGQgbWVhbiBhIFZNLgo+ICsJc3RydWN0IGFy bV9zbW11X2RldmljZSAqc21tdTsKPiArCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9t YWluOwpzbW11X2RvbWFpbiB3YXMgdXNlZCBmb3IgYXJtX3NtbXVfeGVuX2RvbWFpbi4KY29uc2lz dGVuY3kgb2YgdmFyaWFibGUgbmFtZXMgaXMgbmVjZXNzYXJ5IGZvciBjb2RlIGNsYXJpdHkKPiAr Cj4gKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4gKwo+ICsJc21tdSA9 IGFybV9zbW11X2dldF9ieV9md25vZGUoZGV2LT5pb21tdV9md3NwZWMtPmlvbW11X2Z3bm9kZSk7 Cj4gKwlpZiAoIXNtbXUpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJLyoKPiArCSAqIExvb3Ag dGhyb3VnaCB0aGUgJnhlbl9kb21haW4tPmNvbnRleHRzIHRvIGxvY2F0ZSBhIGNvbnRleHQKPiAr CSAqIGFzc2lnbmVkIHRvIHRoaXMgU01NVQo+ICsJICovCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGRvbWFpbiwgJnhlbl9kb21haW4tPmNvbnRleHRzLCBsaXN0KSB7Cj4gKwkJc21tdV9kb21haW4g PSB0b19zbW11X2RvbWFpbihkb21haW4pOwo+ICsJCWlmIChzbW11X2RvbWFpbi0+c21tdSA9PSBz bW11KQo+ICsJCQlyZXR1cm4gZG9tYWluOwo+ICsJfQo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihzdHJ1Y3Qg aW9tbXVfZG9tYWluICpkb21haW4pCnNhbWUKPiArewo+ICsJbGlzdF9kZWwoJmRvbWFpbi0+bGlz dCk7Cj4gKwlhcm1fc21tdV9kb21haW5fZnJlZShkb21haW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGFybV9zbW11X2Fzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqZCwgdTggZGV2Zm4sCj4gKwkJ CSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBmbGFnKQo+ICt7Cj4gKwlpbnQgcmV0ID0g MDsKPiArCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKPiArCXN0cnVjdCBhcm1fc21tdV94 ZW5fZG9tYWluICp4ZW5fZG9tYWluOwpzYW1lCj4gKwlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICph cm1fc21tdTsKPiArCj4gKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4g Kwo+ICsJaWYgKCFkZXYtPmFyY2hkYXRhLmlvbW11KSB7Cj4gKwkJZGV2LT5hcmNoZGF0YS5pb21t dSA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kZXZpY2UpOwo+ICsJCWlmICghZGV2LT5h cmNoZGF0YS5pb21tdSkKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g YXJtX3NtbXVfYWRkX2RldmljZShkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiArCXNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4gKwo+ICsJLyoKPiArCSAqIENo ZWNrIHRvIHNlZSBpZiBhbiBpb21tdV9kb21haW4gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgeGVu IGRvbWFpbgo+ICsJICogdW5kZXIgdGhlIHNhbWUgU01NVQo+ICsJICovCj4gKwlkb21haW4gPSBh cm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7Cj4gKwlpZiAoIWRvbWFpbikgewo+ICsKPiArCQlk b21haW4gPSBhcm1fc21tdV9kb21haW5fYWxsb2MoSU9NTVVfRE9NQUlOX0RNQSk7Cj4gKwkJaWYg KCFkb21haW4pIHsKPiArCQkJcmV0ID0gLUVOT01FTTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ ICsKPiArCQlhcm1fc21tdSA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7Cj4gKwkJYXJtX3NtbXUt PnMyX2NmZy5kb21haW4gPSBkOwo+ICsKPiArCQkvKiBDaGFpbiB0aGUgbmV3IGNvbnRleHQgdG8g dGhlIGRvbWFpbiAqLwo+ICsJCWxpc3RfYWRkKCZkb21haW4tPmxpc3QsICZ4ZW5fZG9tYWluLT5j b250ZXh0cyk7Cj4gKwo+ICsJfQo+ICsKPiArCXJldCA9IGFybV9zbW11X2F0dGFjaF9kZXYoZG9t YWluLCBkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCWlmIChkb21haW4tPnJlZi5jb3VudGVyID09 IDApCj4gKwkJCWFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWluKGRvbWFpbik7Cj4gKwl9IGVs c2Ugewo+ICsJCWF0b21pY19pbmMoJmRvbWFpbi0+cmVmKTsKPiArCX0KPiArCj4gK291dDoKPiAr CXNwaW5fdW5sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKmQsIHN0 cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluID0g YXJtX3NtbXVfZ2V0X2RvbWFpbihkLCBkZXYpOwo+ICsJc3RydWN0IGFybV9zbW11X3hlbl9kb21h aW4gKnhlbl9kb21haW47Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICphcm1fc21tdSA9IHRv X3NtbXVfZG9tYWluKGRvbWFpbik7CnNhbWUKPiArCj4gKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11 KGQpLT5hcmNoLnByaXY7Cj4gKwo+ICsJaWYgKCFhcm1fc21tdSB8fCBhcm1fc21tdS0+czJfY2Zn LmRvbWFpbiAhPSBkKSB7Cj4gKwkJZGV2X2VycihkZXYsICIgbm90IGF0dGFjaGVkIHRvIGRvbWFp biAlZFxuIiwgZC0+ZG9tYWluX2lkKTsKPiArCQlyZXR1cm4gLUVTUkNIOwo+ICsJfQo+ICsKPiAr CXNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4gKwo+ICsJYXJtX3NtbXVfZGV0YWNoX2Rl dihkZXYpOwo+ICsJYXRvbWljX2RlYygmZG9tYWluLT5yZWYpOwo+ICsKPiArCWlmIChkb21haW4t PnJlZi5jb3VudGVyID09IDApCj4gKwkJYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oZG9t YWluKTsKPiArCj4gKwlzcGluX3VubG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfcmVhc3NpZ25fZGV2KHN0cnVj dCBkb21haW4gKnMsIHN0cnVjdCBkb21haW4gKnQsCj4gKwkJCQkgdTggZGV2Zm4sICBzdHJ1Y3Qg ZGV2aWNlICpkZXYpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsKPiArCS8qIERvbid0IGFsbG93 IHJlbWFwcGluZyBvbiBvdGhlciBkb21haW4gdGhhbiBod2RvbSAqLwo+ICsJaWYgKHQgJiYgdCAh PSBoYXJkd2FyZV9kb21haW4pCj4gKwkJcmV0dXJuIC1FUEVSTTsKPiArCj4gKwlpZiAodCA9PSBz KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9IGFybV9zbW11X2RlYXNzaWduX2RldihzLCBk ZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWlmICh0KSB7Cj4gKwkJ LyogTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yIEFSTS4gKi8KPiArCQlyZXQgPSBhcm1fc21tdV9h c3NpZ25fZGV2KHQsIGRldmZuLCBkZXYsIDApOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXJtX3Nt bXVfaW9tbXVfZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKV2hlcmUgaXMgaW9tbXVfZG9t YWluIGluaXRpYWxpemVkPwpUaGUgZnVuY3Rpb24gZG9lcyBub3QgdXNlIGEgaW9tbXVfZG9tYWlu ICogdmFyaWFibGUKPiArewo+ICsJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21h aW47Cj4gKwo+ICsJeGVuX2RvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kb21h aW4pOwo+ICsJaWYgKCF4ZW5fZG9tYWluKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXNw aW5fbG9ja19pbml0KCZ4ZW5fZG9tYWluLT5sb2NrKTsKPiArCUlOSVRfTElTVF9IRUFEKCZ4ZW5f ZG9tYWluLT5jb250ZXh0cyk7Cj4gKwo+ICsJZG9tX2lvbW11KGQpLT5hcmNoLnByaXYgPSB4ZW5f ZG9tYWluOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2h3ZG9t X2luaXQgYXJtX3NtbXVfaW9tbXVfaHdkb21faW5pdChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2lvbW11X2RvbWFpbl90ZWFyZG93bihzdHJ1 Y3QgZG9tYWluICpkKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2Rv bWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2Owo+ICsKPiArCUFTU0VSVChsaXN0X2VtcHR5 KCZ4ZW5fZG9tYWluLT5jb250ZXh0cykpOwo+ICsJeGZyZWUoeGVuX2RvbWFpbik7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X21hcF9wYWdlKHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLAo+ICsJCQl1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWdu ZWQgaW50IGZsYWdzKQo+ICt7Cj4gKwlwMm1fdHlwZV90IHQ7Cj4gKwo+ICsJLyoKPiArCSAqIEdy YW50IG1hcHBpbmdzIGNhbiBiZSB1c2VkIGZvciBETUEgcmVxdWVzdHMuIFRoZSBkZXZfYnVzX2Fk ZHIKPiArCSAqIHJldHVybmVkIGJ5IHRoZSBoeXBlcmNhbGwgaXMgdGhlIE1GTiAobm90IHRoZSBJ UEEpLiBGb3IgZGV2aWNlCj4gKwkgKiBwcm90ZWN0ZWQgYnkgYW4gSU9NTVUsIFhlbiBuZWVkcyB0 byBhZGQgYSAxOjEgbWFwcGluZyBpbiB0aGUgZG9tYWluCj4gKwkgKiBwMm0gdG8gYWxsb3cgRE1B IHJlcXVlc3QgdG8gd29yay4KPiArCSAqIFRoaXMgaXMgb25seSB2YWxpZCB3aGVuIHRoZSBkb21h aW4gaXMgZGlyZWN0ZWQgbWFwcGVkLiBIZW5jZSB0aGlzCj4gKwkgKiBmdW5jdGlvbiBzaG91bGQg b25seSBiZSB1c2VkIGJ5IGdudHRhYiBjb2RlIHdpdGggZ2ZuID09IG1mbi4KPiArCSAqLwo+ICsJ QlVHX09OKCFpc19kb21haW5fZGlyZWN0X21hcHBlZChkKSk7Cj4gKwlCVUdfT04obWZuICE9IGdm bik7Cj4gKwo+ICsJLyogV2Ugb25seSBzdXBwb3J0IHJlYWRhYmxlIGFuZCB3cml0YWJsZSBmbGFn cyAqLwo+ICsJaWYgKCEoZmxhZ3MgJiAoSU9NTVVGX3JlYWRhYmxlIHwgSU9NTVVGX3dyaXRhYmxl KSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJdCA9IChmbGFncyAmIElPTU1VRl93cml0 YWJsZSkgPyBwMm1faW9tbXVfbWFwX3J3IDogcDJtX2lvbW11X21hcF9ybzsKPiArCj4gKwkvKgo+ ICsJICogVGhlIGZ1bmN0aW9uIGd1ZXN0X3BoeXNtYXBfYWRkX2VudHJ5IHJlcGxhY2VzIHRoZSBj dXJyZW50IG1hcHBpbmcKPiArCSAqIGlmIHRoZXJlIGlzIGFscmVhZHkgb25lLi4uCj4gKwkgKi8K PiArCXJldHVybiBndWVzdF9waHlzbWFwX2FkZF9lbnRyeShkLCBfZ2ZuKGdmbiksIF9tZm4obWZu KSwgMCwgdCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X3Vu bWFwX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4pCj4gK3sKPiArCS8q Cj4gKwkgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZ250dGFiIGNvZGUg d2hlbiB0aGUgZG9tYWluCj4gKwkgKiBpcyBkaXJlY3QgbWFwcGVkCj4gKwkgKi8KPiArCWlmICgh aXNfZG9tYWluX2RpcmVjdF9tYXBwZWQoZCkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJ cmV0dXJuIGd1ZXN0X3BoeXNtYXBfcmVtb3ZlX3BhZ2UoZCwgX2dmbihnZm4pLCBfbWZuKGdmbiks IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9p b21tdV9vcHMgPSB7Cj4gKwkuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAo+ICsJ Lmh3ZG9tX2luaXQgPSBhcm1fc21tdV9pb21tdV9od2RvbV9pbml0LAo+ICsJLnRlYXJkb3duID0g YXJtX3NtbXVfaW9tbXVfZG9tYWluX3RlYXJkb3duLAo+ICsJLmlvdGxiX2ZsdXNoID0gYXJtX3Nt bXVfaW90bGJfZmx1c2gsCj4gKwkuaW90bGJfZmx1c2hfYWxsID0gYXJtX3NtbXVfaW90bGJfZmx1 c2hfYWxsLAo+ICsJLmFzc2lnbl9kZXZpY2UgPSBhcm1fc21tdV9hc3NpZ25fZGV2LAo+ICsJLnJl YXNzaWduX2RldmljZSA9IGFybV9zbW11X3JlYXNzaWduX2RldiwKPiArCS5tYXBfcGFnZSA9IGFy bV9zbW11X21hcF9wYWdlLAo+ICsJLnVubWFwX3BhZ2UgPSBhcm1fc21tdV91bm1hcF9wYWdlLAo+ ICt9Owo+ICsKPiArc3RhdGljCj4gK3N0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dl dF9ieV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPiArewo+ICsJc3RydWN0 IGFybV9zbW11X2RldmljZSAqc21tdSA9IE5VTEw7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZhcm1fc21t dV9kZXZpY2VzX2xvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShzbW11LCAmYXJtX3NtbXVf ZGV2aWNlcywgZGV2aWNlcykgewo+ICsJCWlmIChzbW11LT5kZXYtPmZ3bm9kZSA9PSBmd25vZGUp Cj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2soJmFybV9zbW11X2RldmljZXNfbG9j ayk7Cj4gKwo+ICsJcmV0dXJuIHNtbXU7Cj4gK30KPiArCj4gK3N0YXRpYyBfX2luaXQgaW50IGFy bV9zbW11X2R0X2luaXQoc3RydWN0IGR0X2RldmljZV9ub2RlICpkZXYsCj4gKwkJCQkgICBjb25z dCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJLyoKPiArCSAqIEV2ZW4gaWYg dGhlIGRldmljZSBjYW4ndCBiZSBpbml0aWFsaXplZCwgd2UgZG9uJ3Qgd2FudCB0bwo+ICsJICog Z2l2ZSB0aGUgU01NVSBkZXZpY2UgdG8gZG9tMC4KPiArCSAqLwo+ICsJZHRfZGV2aWNlX3NldF91 c2VkX2J5KGRldiwgRE9NSURfWEVOKTsKPiArCj4gKwlyYyA9IGFybV9zbW11X2RldmljZV9wcm9i ZShkdF90b19kZXYoZGV2KSk7Cj4gKwlpZiAocmMpCj4gKwkJcmV0dXJuIHJjOwo+ICsKPiArCWlv bW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK0RUX0RFVklDRV9TVEFSVChzbW11djMsICJBUk0gU01NVSBWMyIsIERFVklDRV9JT01N VSkKPiArCS5kdF9tYXRjaCA9IGFybV9zbW11X29mX21hdGNoLAo+ICsJLmluaXQgPSBhcm1fc21t dV9kdF9pbml0LAo+ICtEVF9ERVZJQ0VfRU5ECj4gKwo+ICsjaWZkZWYgQ09ORklHX0FDUEkKPiAr LyogU2V0IHVwIHRoZSBJT01NVSAqLwo+ICtzdGF0aWMgaW50IF9faW5pdCBhcm1fc21tdV9hY3Bp X2luaXQoY29uc3Qgdm9pZCAqZGF0YSkKPiArewo+ICsJaW50IHJjOwo+ICsKPiArCXJjID0gYXJt X3NtbXVfZGV2aWNlX3Byb2JlKChzdHJ1Y3QgZGV2aWNlICopZGF0YSk7Cj4gKwlpZiAocmMpCj4g KwkJcmV0dXJuIHJjOwo+ICsKPiArCWlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArQUNQSV9ERVZJQ0VfU1RBUlQoYXNtbXV2MywgIkFS TSBTTU1VIFYzIiwgREVWSUNFX0lPTU1VKQo+ICsJLmNsYXNzX3R5cGUgPSBBQ1BJX0lPUlRfTk9E RV9TTU1VX1YzLAo+ICsJLmluaXQgPSBhcm1fc21tdV9hY3BpX2luaXQsCj4gK0FDUElfREVWSUNF X0VORAo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9saW51eF9j b21wYXQuaCBiL3hlbi9pbmNsdWRlL3hlbi9saW51eF9jb21wYXQuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uODAzN2JlMGEzZQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi94ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgKPiBAQCAtMCwwICsxLDg0IEBACj4g Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKPiArICogaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgK PiArICoKPiArICogQ29tcGF0aWJpbGl0eSBkZWZpbmVzIGZvciBwb3J0aW5nIGNvZGUgZnJvbSBM aW51eCB0byBYZW4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE3IExpbmFybyBMaW1pdGVk Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y Cj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1hFTl9MSU5VWF9DT01QQVRfSF9fCj4gKyNkZWZp bmUgX19YRU5fTElOVVhfQ09NUEFUX0hfXwo+ICsKPiArI2luY2x1ZGUgPGFzbS90eXBlcy5oPgo+ ICsKPiArdHlwZWRlZiBwYWRkcl90IHBoeXNfYWRkcl90Owo+ICt0eXBlZGVmIHBhZGRyX3QgZG1h X2FkZHJfdDsKPiArCj4gK3R5cGVkZWYgdW5zaWduZWQgaW50IGdmcF90Owo+ICsjZGVmaW5lIEdG UF9LRVJORUwgMAo+ICsjZGVmaW5lIF9fR0ZQX1pFUk8gMHgwMVUKPiArCj4gKy8qIEhlbHBlcnMg Zm9yIElSUSBmdW5jdGlvbnMgKi8KPiArI2RlZmluZSBmcmVlX2lycSByZWxlYXNlX2lycQo+ICsK PiArZW51bSBpcnFyZXR1cm4gewo+ICsgICAgSVJRX05PTkUsCj4gKyAgICBJUlFfSEFORExFRCwK PiArICAgIElSUV9XQUtFX1RIUkVBRCwKPiArfTsKPiArCj4gK3R5cGVkZWYgZW51bSBpcnFyZXR1 cm4gaXJxcmV0dXJuX3Q7Cj4gKwo+ICsvKiBEZXZpY2UgbG9nZ2VyIGZ1bmN0aW9ucyAqLwo+ICsj ZGVmaW5lIGRldl9kYmcoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19ERUJVRyBmbXQsICMj IF9fVkFfQVJHU19fKQo+ICsjZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikgcHJpbnRr KFhFTkxPR19JTkZPIGZtdCwgIyMgX19WQV9BUkdTX18pCj4gKyNkZWZpbmUgZGV2X3dhcm4oZGV2 LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19XQVJOSU5HIGZtdCwgIyMgX19WQV9BUkdTX18pCj4g KyNkZWZpbmUgZGV2X2VycihkZXYsIGZtdCwgLi4uKSBwcmludGsoWEVOTE9HX0VSUiBmbXQsICMj IF9fVkFfQVJHU19fKQo+ICsjZGVmaW5lIGRldl9pbmZvKGRldiwgZm10LCAuLi4pIHByaW50ayhY RU5MT0dfSU5GTyBmbXQsICMjIF9fVkFfQVJHU19fKQo+ICsKPiArI2RlZmluZSBkZXZfZXJyX3Jh dGVsaW1pdGVkKGRldiwgZm10LCAuLi4pICAgICAgICAgICAgICAgICAgXAo+ICsgICAgIHByaW50 ayhYRU5MT0dfRVJSIGZtdCwgIyMgX19WQV9BUkdTX18pCj4gKwo+ICsjZGVmaW5lIGRldl9uYW1l KGRldikgZHRfbm9kZV9mdWxsX25hbWUoZGV2X3RvX2R0KGRldikpCj4gKwo+ICsvKiBBbGlhcyB0 byBYZW4gYWxsb2NhdGlvbiBoZWxwZXJzICovCj4gKyNkZWZpbmUga2ZyZWUgeGZyZWUKPiArI2Rl ZmluZSBrbWFsbG9jKHNpemUsIGZsYWdzKSAoe1wKPiArCXZvaWQgKl9fcmV0X2FsbG9jID0gTlVM TDsgXAo+ICsJaWYgKGZsYWdzICYgX19HRlBfWkVSTykgXAo+ICsJCV9fcmV0X2FsbG9jID0gX3h6 YWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpOyBcCj4gKwllbHNlIFwKPiArCQlfX3JldF9hbGxv YyA9IF94bWFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKTsgXAo+ICsJX19yZXRfYWxsb2M7IFwK PiArfSkKPiArI2RlZmluZSBremFsbG9jKHNpemUsIGZsYWdzKSAgICAgICAgX3h6YWxsb2Moc2l6 ZSwgc2l6ZW9mKHZvaWQgKikpCj4gKyNkZWZpbmUgZGV2bV9remFsbG9jKGRldiwgc2l6ZSwgZmxh Z3MpICBfeHphbGxvYyhzaXplLCBzaXplb2Yodm9pZCAqKSkKPiArI2RlZmluZSBrbWFsbG9jX2Fy cmF5KHNpemUsIG4sIGZsYWdzKSAoe1wKPiArCXZvaWQgKl9fcmV0X2FsbG9jID0gTlVMTDsgXAo+ ICsJaWYgKGZsYWdzICYgX19HRlBfWkVSTykgXAo+ICsJCV9fcmV0X2FsbG9jID0gX3h6YWxsb2Nf YXJyYXkoc2l6ZSwgc2l6ZW9mKHZvaWQgKiksIG4pOyBcCj4gKwllbHNlIFwKPiArCQlfX3JldF9h bGxvYyA9IF94bWFsbG9jX2FycmF5KHNpemUsIHNpemVvZih2b2lkICopLCBuKTsgXAo+ICsJX19y ZXRfYWxsb2M7IFwKPiArfSkKPiArCj4gKy8qIEFsaWFzIHRvIFhlbiB0aW1lIGZ1bmN0aW9ucyAq Lwo+ICsjZGVmaW5lIGt0aW1lX3Qgc190aW1lX3QKPiArI2RlZmluZSBrdGltZV9nZXQoKSAgICAg ICAgICAgICAoTk9XKCkpCj4gKyNkZWZpbmUga3RpbWVfYWRkX3VzKHQsaSkgICAgICAgKHQgKyBN SUNST1NFQ1MoaSkpCj4gKyNkZWZpbmUga3RpbWVfY29tcGFyZSh0LGkpICAgICAgKHQgPiAoaSkp Cj4gKwo+ICsjZW5kaWYgLyogX19YRU5fTElOVVhfQ09NUEFUX0hfXyAqLwoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj dC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=