From mboxrd@z Thu Jan 1 00:00:00 1970 From: abhinavk@codeaurora.org Subject: Re: [PATCH v6 1/2] drm/panel: Add support for Truly NT35597 panel driver Date: Thu, 30 Aug 2018 13:20:28 -0700 Message-ID: References: <1534558020-9921-1-git-send-email-abhinavk@codeaurora.org> <1535373660.5076.7.camel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1535373660.5076.7.camel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philipp Zabel Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, thierry.reding@gmail.com, seanpaul@chromium.org, hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org SGkgUGhpbGlwCgpUaGFua3MgZm9yIHRoZSByZXZpZXcgY29tbWVudHMuCgpJIHdpbGwgZml4IHRo ZW0gYWxsIGluIHY3LgoKVGhhbmtzCgpBYmhpbmF2CgpPbiAyMDE4LTA4LTI3IDA1OjQxLCBQaGls aXBwIFphYmVsIHdyb3RlOgo+IEhpIEFiaGluYXYsCj4gCj4gSSBoYXZlIGEgZmV3IGNvbW1lbnRz IGJlbG93Lgo+IAo+IE9uIEZyaSwgMjAxOC0wOC0xNyBhdCAxOTowNiAtMDcwMCwgQWJoaW5hdiBL dW1hciB3cm90ZToKPj4gRnJvbTogImFiaGluYXZrQGNvZGVhdXJvcmEub3JnIiA8YWJoaW5hdmtA Y29kZWF1cm9yYS5vcmc+Cj4+IAo+PiBBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5l bCBkcml2ZXIgdXNlZAo+PiBpbiBNU00gcmVmZXJlbmNlIHBsYXRmb3Jtcy4KPj4gCj4+IFRoaXMg cGFuZWwgZHJpdmVyIHN1cHBvcnRzIGJvdGggc2luZ2xlIERTSSBhbmQgZHVhbCBEU0kKPj4gbW9k ZXMuCj4+IAo+PiBIb3dldmVyLCB0aGlzIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgb25seSBm b3IKPj4gZHVhbCBEU0kgbW9kZS4KPj4gCj4+IENoYW5nZXMgaW4gdjY6Cj4+IC0gSW50cm9kdWNl IHBhbmVsIGNvbmZpZyB0byBzdG9yZSBwYW5lbCBzcGVjaWZpYwo+PiAgIGRldGFpbHMKPj4gLSBC cmluZyBiYWNrIHRoZSBzaXplIG1lbWJlciBmb3IgdGhlIHBhbmVsIGNvbW1hbmQKPj4gICBzdHJ1 Y3R1cmUgdG8gbWFrZSB0aGUgZGVzaWduIG1vcmUgc2NhbGFibGUKPj4gLSBNb3ZlIHRoZSBkaXNw bGF5IG1vZGUgZnJvbSB0aGUgRFQgdG8gZHJpdmVyCj4+IC0gQ2hhbmdlIHRoZSBjb21wYXRpYmxl IHN0cmluZyB0byBpbmRpY2F0ZSB3aGljaAo+PiAgIHdoaWNoIGJvYXJkIGFuZCBwYW5lbCBpdCB3 aWxsIGJlIHVzZWQgZm9yCj4+IC0gUmVuYW1lIHRoZSBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIHBh bmVsIGRyaXZlcgo+PiAtIEhhdmUgYSBkYXRhIG1lbWJlciBmb3IgZWFjaCBjb21wYXRpYmxlIHN0 cmluZwo+PiAtIFJlbW92ZSB0aGUgcGFuZWwgY29tbWFuZHMgc3BsaXQgYXMgaXRzIG5vdAo+PiAg IHJlcXVpcmVkIGZvciB0aGUgcGFuZWwgaW5pdCBmdW5jdGlvbmFsaXR5Cj4+IAo+PiBTaWduZWQt b2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgo+PiBTaWduZWQt b2ZmLWJ5OiBBYmhpbmF2IEt1bWFyIDxhYmhpbmF2a0Bjb2RlYXVyb3JhLm9yZz4KPj4gLS0tCj4+ ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA4ICsKPj4g IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwo+PiAg ZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYyB8IDcwNSAKPj4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgMyBmaWxlcyBjaGFuZ2VkLCA3MTQgaW5zZXJ0 aW9ucygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5l bC10cnVseS1udDM1NTk3LmMKPj4gCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvS2NvbmZpZyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+PiBpbmRleCA2 MDIwYzMwLi43YWU3NGMyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2Nv bmZpZwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+PiBAQCAtMTg2LDQg KzE4NiwxMiBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYKPj4gIAkgIFNheSBZ IGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRyb25peAo+PiAg CSAgU1Q3Nzg5ViBjb250cm9sbGVyIGZvciAyNDB4MzIwIExDRCBwYW5lbHMKPj4gCj4+ICtjb25m aWcgRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EKPj4gKwl0cmlzdGF0ZSAiVHJ1bHkgV1FY R0EiCj4+ICsJZGVwZW5kcyBvbiBPRgo+PiArCWRlcGVuZHMgb24gRFJNX01JUElfRFNJCj4+ICsJ c2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCj4+ICsJaGVscAo+PiArCSAgU2F5IFkgaGVyZSBpZiB5 b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBXUVhHQSAKPj4gRHVh bCBEU0kKPj4gKwkgIFZpZGVvIE1vZGUgcGFuZWwKPj4gIGVuZG1lbnUKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvTWFrZWZpbGUKPj4gaW5kZXggNWNjYWFhOS4uODBmZDE5ZiAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5l bC9NYWtlZmlsZQo+PiBAQCAtMTksMyArMTksNCBAQCBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NF SUtPXzQzV1ZGMUcpICs9IAo+PiBwYW5lbC1zZWlrby00M3d2ZjFnLm8KPj4gIG9iai0kKENPTkZJ R19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEpICs9IAo+PiBwYW5lbC1zaGFycC1scTEwMXIx c3gwMS5vCj4+ICBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xTMDQzVDFMRTAxKSArPSAK Pj4gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwo+PiAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9T SVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8KPj4gK29iai0kKENP TkZJR19EUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQSkgKz0gcGFuZWwtdHJ1bHktbnQzNTU5 Ny5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQz NTU5Ny5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMK Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNjkxYmUwMwo+PiAtLS0g L2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1 NTk3LmMKPj4gQEAgLTAsMCArMSw3MDUgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8 bGludXgvZ3Bpby9jb25zdW1lci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvcGluY3RybC9jb25zdW1lci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ PiArCj4+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4+ICsjaW5jbHVkZSA8dmlk ZW8vb2ZfdmlkZW9tb2RlLmg+Cj4+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4+ICsK Pj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4K Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBj aGFyICogY29uc3QgcmVndWxhdG9yX25hbWVzW10gPSB7Cj4+ICsJInZkZGEiLAo+PiArCSJ2ZGlz cHAiLAo+PiArCSJ2ZGlzcG4iLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcg Y29uc3QgcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tdID0gewo+PiArCTYyMDAwLAo+PiArCTEwMDAw MCwKPj4gKwkxMDAwMDAsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25z dCByZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tdID0gewo+PiArCTgwLAo+PiArCTEwMCwKPj4gKwkx MDAsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgbnQzNTU5N19jb25maWcgewo+PiArCXUzMiB3aWR0 aF9tbTsKPj4gKwl1MzIgaGVpZ2h0X21tOwo+PiArCWNoYXIgcGFuZWxfbmFtZVsyNTZdOwo+IAo+ IFdoeSBub3QKPiAJY29uc3QgY2hhciAqcGFuZWxfbmFtZTsKPiA/Cj4gCj4+ICsJdm9pZCAqcGFu ZWxfb25fY21kczsKPiAKPiAJY29uc3Qgdm9pZCAqcGFuZWxfb25fY21kczsKPiAKPj4gKwl1MzIg bnVtX29uX2NtZHM7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRtOwo+IAo+IAljb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZG07Cj4gCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3Qg dHJ1bHlfbnQzNTU5NyB7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+PiArCXN0cnVjdCBkcm1f cGFuZWwgcGFuZWw7Cj4+ICsKPj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGll c1tBUlJBWV9TSVpFKHJlZ3VsYXRvcl9uYW1lcyldOwo+PiArCj4+ICsJc3RydWN0IGdwaW9fZGVz YyAqcmVzZXRfZ3BpbzsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICptb2RlX2dwaW87Cj4+ICsKPj4g KwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+PiArCj4+ICsJc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpWzJdOwo+PiArCj4+ICsJY29uc3Qgc3RydWN0IG50MzU1OTdfY29u ZmlnICpjb25maWc7Cj4+ICsJYm9vbCBwcmVwYXJlZDsKPj4gKwlib29sIGVuYWJsZWQ7Cj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0cnVseV9udDM1NTk3ICpwYW5lbF90b19j dHgoc3RydWN0IGRybV9wYW5lbCAKPj4gKnBhbmVsKQo+PiArewo+PiArCXJldHVybiBjb250YWlu ZXJfb2YocGFuZWwsIHN0cnVjdCB0cnVseV9udDM1NTk3LCBwYW5lbCk7Cj4+ICt9Cj4+ICsKPj4g KyNkZWZpbmUgTUFYX0xFTgk1Cj4+ICsjZGVmaW5lIFNIT1JUX1BBQ0tFVCAyCj4+ICsjZGVmaW5l IExPTkdfUEFDS0VUIDQKPj4gKwo+PiArc3RydWN0IGNtZF9zZXQgewo+PiArCXU4IGNvbW1hbmRz W01BWF9MRU5dOwo+PiArCWludCBzaXplOwo+IAo+IENvbnNpZGVyIGNoYW5naW5nIHRoaXMgdG8K PiAJdTggc2l6ZTsKPiAKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgY21kX3NldCBxY29t XzJrX3BhbmVsX21hZ2ljX2NtZHNbXSA9IHsKPj4gKwkvKiBDTUQyX1AwICovCj4gWy4uLl0KPj4g KwkvKiBWQlArVlNBPSxWRlAgPSAxMEggKi8KPj4gKwl7IHsgMHgzQiwgMHgwMywgMHgwQSwgMHgw QSB9LCA0IH0sCj4+ICsJLyogRlRFIG9uICovCj4+ICsJeyB7IDB4MzUsIDB4MDAgfSwgMiB9LAo+ PiArCS8qIEVOX0JLID0xKGF1dG8gYmxhY2spICovCj4+ICsJeyB7IDB4RTUsIDB4MDEgfSwgMiB9 LAo+PiArCS8qIENNRCBtb2RlKDEwKSBWRE8gbW9kZSgwMykgKi8KPj4gKwl7IHsgMHhCQiwgMHgw MyB9LCAyIH0sCj4+ICsJLyogTm9uIFJlbG9hZCBNVFAgKi8KPj4gKwl7IHsgMHhGQiwgMHgwMSB9 LCAyIH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X2Rjc193cml0ZShzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCwgdTMyIGNvbW1hbmQpCj4+ICt7Cj4+ICsJc3RydWN0IHRydWx5X250 MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7Cj4+ICsJaW50IGksIHJldDsKPj4gKwo+ PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+ZHNpKTsgaSsrKSB7Cj4+ICsJCXJl dCA9IG1pcGlfZHNpX2Rjc193cml0ZShjdHgtPmRzaVtpXSwKPj4gKwkJCWNvbW1hbmQsIE5VTEws IDApOwo+PiArCQlpZiAocmV0IDwgMCkgewo+PiArCQkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwK Pj4gKwkJCQkic2V0X2Rpc3BsYXlfb2ZmIGNtZCBmYWlsZWQgZm9yIGRzaSA9ICVkXG4iLAo+IAo+ IFRoaXMgZXJyb3IgbWVzc2FnZSBpcyBub3QgYWNjdXJhdGUuCj4gdHJ1bHlfZGNzX3dyaXRlIGlz IGFsc28gY2FsbGVkIGZyb20gdHJ1bHlfbnQzNTU5N19wcmVwYXJlLgo+IAo+PiArCQkJaSk7Cj4+ ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IHRydWx5X2Rjc193cml0ZV9idWYoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsCj4+ICsJdTMy IHNpemUsIHU4ICpidWYpCj4+ICt7Cj4+ICsJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9IHBh bmVsX3RvX2N0eChwYW5lbCk7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJaW50IGk7Cj4+ICsKPj4g Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgewo+PiArCQlyZXQg PSBtaXBpX2RzaV9kY3Nfd3JpdGVfYnVmZmVyKGN0eC0+ZHNpW2ldLAo+PiArCQkJYnVmLAo+PiAr CQkJc2l6ZSk7Cj4+ICsKPj4gKwkJaWYgKHJldCA8IDApIHsKPj4gKwkJCURSTV9ERVZfRVJST1Io Y3R4LT5kZXYsCj4+ICsJCQkJImZhaWxlZCB0byB0eCBjbWQgWyVkXSwgZXJyOiAlZFxuIiwKPj4g KwkJCQlpLCByZXQpOwo+PiArCQkJcmV0dXJuIHJldDsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiAr CXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgdHJ1bHlfY2FsbF93cml0ZV9mdW5j KHJldCwgZnVuYywgcGFuZWwsIGNvbW1hbmQpIHtcCj4+ICsJcmV0ID0gZnVuYyhwYW5lbCwgY29t bWFuZCk7ICAgICBcCj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgdHJ1bHlfd3JpdGVfYnVmX2Z1bmMo cmV0LCBmdW5jLCBwYW5lbCwgc2l6ZSwgYnVmKSB7XAo+PiArCXJldCA9IGZ1bmMocGFuZWwsIHNp emUsIGJ1Zik7IFwKPj4gK30KPiAKPiBUaGVzZSBtYWNyb3MganVzdCBvYmZ1c2NhdGUgdGhpbmdz LiBKdXN0IGNhbGwgdGhlIGZ1bmN0aW9uIGRpcmVjdGx5Cj4gYmVsb3cuCj4gCj4+ICsKPj4gK3N0 YXRpYyBpbnQgdHJ1bHlfMzU1OTdfcG93ZXJfb24oc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCkK Pj4gK3sKPj4gKwlpbnQgcmV0LCBpOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoY3R4LT5zdXBwbGllcyk7IGkrKykgewo+PiArCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQo Y3R4LT5zdXBwbGllc1tpXS5jb25zdW1lciwKPj4gKwkJCQkJcmVndWxhdG9yX2VuYWJsZV9sb2Fk c1tpXSk7Cj4+ICsJCWlmIChyZXQpCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiAr CXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCAK Pj4gY3R4LT5zdXBwbGllcyk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ ICsKPj4gKwkvKiBSZXNldCBzZXF1ZW5jZSBvZiB0cnVseSBwYW5lbCByZXF1aXJlcwo+PiArCSAq IHRoZSByZXNldCBwaW4gdG8gYmUgcHVsbGVkIGhpZ2ggZm9yIDEwbXMKPj4gKwkgKiBmb2xsb3dl ZCBieSBhIGxvdyBwZXJpb2Qgb2YgMTBtcyBhbmQgdGhlbgo+PiArCSAqIHB1bGxlZCBoaWdoIGFn YWluCj4+ICsJICovCj4gCj4gVGhlIGNvbW1lbnQgc2F5cyAxMCBtcwo+IAo+PiArCWdwaW9kX3Nl dF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOwo+PiArCW1zbGVlcCgyMCk7Cj4gCj4gYnV0IHRo ZW4gdGhlIHNsZWVwIGlzIGZvciAyMCBtcy4KPiBNYXliZSB1c2UKPiAJdXNsZWVwX3JhbmdlKDEw MDAwLCAyMDAwMCk7Cj4gPwo+IAo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8s IDApOwo+PiArCW1zbGVlcCgyMCk7Cj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3Bp bywgMSk7Cj4gCj4gU28gdGhpcyBpcyBhbiBhY3RpdmUgbG93IHJlc2V0Pwo+IFNob3VsZCB0aGlz IG1heWJlIHVzZSBHUElPX0FDVElWRV9MT1cgaW4gdGhlIERUIGFuZCB0aGVuCj4gCj4gCWdwaW9k X3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOwo+IAlncGlvZF9zZXRfdmFsdWUoY3R4LT5y ZXNldF9ncGlvLCAxKTsKPiAJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7Cj4g Cj4gaGVyZT8KPiAKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IHRydWx5X250MzU1OTdfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHgpCj4+ICt7 Cj4+ICsJaW50IHJldCwgaTsKPj4gKwo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dw aW8sIDApOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGll cyk7IGkrKykgewo+PiArCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1tp XS5jb25zdW1lciwKPj4gKwkJCQlyZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tpXSk7Cj4+ICsJCWlm IChyZXQpCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldHVybiByZWd1bGF0 b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIAo+PiBjdHgtPnN1cHBs aWVzKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0cnVseV9udDM1NTk3X2Rpc2FibGUoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+ICt7Cj4+ICsJc3RydWN0IHRydWx5X250MzU1OTcgKmN0 eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICghY3R4 LT5lbmFibGVkKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCWlmIChjdHgtPmJhY2tsaWdodCkg ewo+PiArCQlyZXQgPSBiYWNrbGlnaHRfZGlzYWJsZShjdHgtPmJhY2tsaWdodCk7Cj4+ICsJCWlm IChyZXQgPCAwKQo+PiArCQkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwgImJhY2tsaWdodCBkaXNh YmxlIGZhaWxlZCAlZFxuIiwKPj4gKwkJCQlyZXQpOwo+PiArCX0KPj4gKwo+PiArCWN0eC0+ZW5h YmxlZCA9IGZhbHNlOwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRy dWx5X250MzU1OTdfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiAr CXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOwo+PiArCWlu dCByZXQgPSAwOwo+PiArCj4+ICsJaWYgKCFjdHgtPnByZXBhcmVkKQo+PiArCQlyZXR1cm4gMDsK Pj4gKwo+PiArCWN0eC0+ZHNpWzBdLT5tb2RlX2ZsYWdzID0gMDsKPj4gKwljdHgtPmRzaVsxXS0+ bW9kZV9mbGFncyA9IDA7Cj4+ICsKPj4gKwl0cnVseV9jYWxsX3dyaXRlX2Z1bmMocmV0LCB0cnVs eV9kY3Nfd3JpdGUsIHBhbmVsLAo+PiArCQlNSVBJX0RDU19TRVRfRElTUExBWV9PRkYpOwo+IAo+ IFNlZSBhYm92ZSwganVzdAo+IAo+IAlyZXQgPSB0cnVseV9kY3Nfd3JpdGUocGFuZWwsIE1JUElf RENTX1NFVF9ESVNQTEFZX09GRik7Cj4gCj4gd291bGQgYmUgYSBsb3QgbW9yZSByZWFkYWJsZS4K PiAKPj4gKwlpZiAocmV0IDwgMCkgewo+PiArCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAo+PiAr CQkJInNldF9kaXNwbGF5X29mZiBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAo+PiArCQkJcmV0KTsK Pj4gKwl9Cj4+ICsKPj4gKwkvKiAxMjBtcyBkZWxheSByZXF1aXJlZCBoZXJlIGFzIHBlciBEQ1Mg c3BlYyAqLwo+PiArCW1zbGVlcCgxMjApOwo+PiArCj4+ICsJdHJ1bHlfY2FsbF93cml0ZV9mdW5j KHJldCwgdHJ1bHlfZGNzX3dyaXRlLCBwYW5lbCwKPj4gKwkJTUlQSV9EQ1NfRU5URVJfU0xFRVBf TU9ERSk7Cj4gCj4gU2VlIGFib3ZlLgo+IAo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCURSTV9E RVZfRVJST1IoY3R4LT5kZXYsCj4+ICsJCQkiZW50ZXJfc2xlZXAgY21kIGZhaWxlZCByZXQgPSAl ZFxuIiwKPj4gKwkJCXJldCk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gdHJ1bHlfbnQzNTU5N19w b3dlcl9vZmYoY3R4KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJRFJNX0RFVl9FUlJPUihjdHgt PmRldiwKPj4gKwkJCSJ0cnVseV9udDM1NTk3X3Bvd2VyX29mZiBmYWlsZWQgcmV0ID0gJWRcbiIs Cj4+ICsJCQlyZXQpOwo+PiArCj4+ICsJY3R4LT5wcmVwYXJlZCA9IGZhbHNlOwo+PiArCXJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19wcmVwYXJlKHN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpj dHggPSBwYW5lbF90b19jdHgocGFuZWwpOwo+PiArCWludCByZXQ7Cj4+ICsJaW50IGk7Cj4+ICsJ c3RydWN0IGNtZF9zZXQgKnBhbmVsX29uX2NtZHM7Cj4+ICsJY29uc3Qgc3RydWN0IG50MzU1OTdf Y29uZmlnICpjb25maWc7Cj4+ICsJdTMyIG51bV9jbWRzOwo+PiArCj4+ICsJaWYgKGN0eC0+cHJl cGFyZWQpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJcmV0ID0gdHJ1bHlfMzU1OTdfcG93ZXJf b24oY3R4KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCWN0 eC0+ZHNpWzBdLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOwo+PiArCWN0eC0+ZHNp WzFdLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOwo+PiArCj4+ICsJY29uZmlnID0g Y3R4LT5jb25maWc7Cj4+ICsJcGFuZWxfb25fY21kcyA9IChzdHJ1Y3QgY21kX3NldCAqKWNvbmZp Zy0+cGFuZWxfb25fY21kczsKPj4gKwludW1fY21kcyA9IGNvbmZpZy0+bnVtX29uX2NtZHM7Cj4+ ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NtZHM7IGkrKykKPj4gKwkJdHJ1bHlfd3JpdGVf YnVmX2Z1bmMocmV0LCB0cnVseV9kY3Nfd3JpdGVfYnVmLAo+PiArCQkJcGFuZWwsIHBhbmVsX29u X2NtZHNbaV0uc2l6ZSwKPj4gKwkJCXBhbmVsX29uX2NtZHNbaV0uY29tbWFuZHMpOwo+IAo+IFNl ZSBhYm92ZS4gQWxzbywgd2h5IG5vdCBzdG9wIGltbWVkaWF0ZWx5IHdoZW4gYSBkY3Mgd3JpdGUg Y29tbWFuZAo+IGZhaWxzPwo+IAo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCURSTV9ERVZfRVJS T1IoY3R4LT5kZXYsCj4+ICsJCQkicGFuZWxfY21kc19zZXQgZmFpbGVkIHJldCA9ICVkXG4iLAo+ PiArCQkJcmV0KTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBBcyBwZXIgRFNJIHNwZWMgbmVlZCB0byB3 YWl0IGZvciAxMjBtcwo+PiArCSAqIGFmdGVyIHNlbmRpbmcgdGhlIGV4aXQgc2xlZXAgRENTIGNv bW1hbmQKPj4gKwkgKi8KPj4gKwl0cnVseV9jYWxsX3dyaXRlX2Z1bmMocmV0LCB0cnVseV9kY3Nf d3JpdGUsIHBhbmVsLAo+PiArCQlNSVBJX0RDU19FWElUX1NMRUVQX01PREUpOwo+IAo+IFNlZSBh Ym92ZS4KPiAKPj4gKwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCURSTV9ERVZfRVJST1IoY3R4 LT5kZXYsCj4+ICsJCQkiZXhpdF9zbGVlcF9tb2RlIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsCj4+ ICsJCQlyZXQpOwo+PiArCX0KPj4gKwo+PiArCW1zbGVlcCgxMjApOwo+PiArCj4+ICsJdHJ1bHlf Y2FsbF93cml0ZV9mdW5jKHJldCwgdHJ1bHlfZGNzX3dyaXRlLCBwYW5lbCwKPj4gKwkJTUlQSV9E Q1NfU0VUX0RJU1BMQVlfT04pOwo+PiArCj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJRFJNX0RF Vl9FUlJPUihjdHgtPmRldiwKPj4gKwkJCSJzZXRfZGlzcGxheV9vbiBjbWQgZmFpbGVkIHJldCA9 ICVkXG4iLAo+PiArCQkJcmV0KTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBBZGRpbmcgMTIwbXMgZGVs YXkgYmVmb3JlIHRoZSBzdGFydCBvZgo+PiArCSAqIHBpeGVsIHN0cmVhbSB0byB0aGUgcGFuZWwg YWZ0ZXIgc2VuZGluZwo+PiArCSAqIHRoZSBzZXRfZGlzcGxheV9vbiBEQ1MgY29tbWFuZAo+PiAr CSAqLwo+PiArCj4+ICsJbXNsZWVwKDEyMCk7Cj4+ICsKPj4gKwljdHgtPnByZXBhcmVkID0gdHJ1 ZTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X250 MzU1OTdfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCB0 cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOwo+PiArCWludCByZXQ7Cj4+ ICsKPj4gKwlpZiAoY3R4LT5lbmFibGVkKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCWlmIChj dHgtPmJhY2tsaWdodCkgewo+PiArCQlyZXQgPSBiYWNrbGlnaHRfZW5hYmxlKGN0eC0+YmFja2xp Z2h0KTsKPj4gKwkJaWYgKHJldCA8IDApCj4+ICsJCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LCAi YmFja2xpZ2h0IGVuYWJsZSBmYWlsZWQgJWRcbiIsCj4+ICsJCQkJCQkgIHJldCk7Cj4+ICsJfQo+ PiArCj4+ICsJY3R4LT5lbmFibGVkID0gdHJ1ZTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X250MzU1OTdfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBw YW5lbC0+Y29ubmVjdG9yOwo+PiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90 b19jdHgocGFuZWwpOwo+PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+PiArCWNv bnN0IHN0cnVjdCBudDM1NTk3X2NvbmZpZyAqY29uZmlnOwo+PiArCj4+ICsJY29uZmlnID0gY3R4 LT5jb25maWc7Cj4+ICsJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7Cj4+ ICsJaWYgKCFtb2RlKSB7Cj4+ICsJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCj4+ICsJCQkiZmFp bGVkIHRvIGNyZWF0ZSBhIG5ldyBkaXNwbGF5IG1vZGVcbiIpOwo+PiArCQlyZXR1cm4gMDsKPj4g Kwl9Cj4+ICsKPj4gKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IGNvbmZpZy0+ d2lkdGhfbW07Cj4+ICsJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gY29uZmln LT5oZWlnaHRfbW07Cj4+ICsJLyogQ29weSB0aGUgbW9kZSBmcm9tIHRoZSBEVCBhbmQgYWRkIGl0 ICovCj4gCj4gVGhpcyBjb21tZW50IGlzIG5vdCBhY2N1cmF0ZSwgdGhlIG1vZGUgaXMgZnJvbSBp bnNpZGUgdGhlIGRyaXZlciwKPiBjdXJyZW50bHkgcWNvbV9zZG04NDVfbXRwXzJrX21vZGUgYmVs b3cuCj4gCj4+ICsJZHJtX21vZGVfY29weShtb2RlLCBjb25maWctPmRtKTsKPj4gKwltb2RlLT50 eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKPj4g Kwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4+ICsKPj4gKwlyZXR1cm4g MTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgdHJ1 bHlfbnQzNTU5N19kcm1fZnVuY3MgPSB7Cj4+ICsJLmRpc2FibGUgPSB0cnVseV9udDM1NTk3X2Rp c2FibGUsCj4+ICsJLnVucHJlcGFyZSA9IHRydWx5X250MzU1OTdfdW5wcmVwYXJlLAo+PiArCS5w cmVwYXJlID0gdHJ1bHlfbnQzNTU5N19wcmVwYXJlLAo+PiArCS5lbmFibGUgPSB0cnVseV9udDM1 NTk3X2VuYWJsZSwKPj4gKwkuZ2V0X21vZGVzID0gdHJ1bHlfbnQzNTU5N19nZXRfbW9kZXMsCj4+ ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X250MzU1OTdfcGFuZWxfYWRkKHN0cnVjdCB0 cnVseV9udDM1NTk3ICpjdHgpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY3R4LT5k ZXY7Cj4+ICsJaW50IHJldCwgaTsKPj4gKwljb25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcgKmNv bmZpZzsKPj4gKwo+PiArCWNvbmZpZyA9IGN0eC0+Y29uZmlnOwo+PiArCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspCj4+ICsJCWN0eC0+c3VwcGxpZXNbaV0u c3VwcGx5ID0gcmVndWxhdG9yX25hbWVzW2ldOwo+PiArCj4+ICsJcmV0ID0gZGV2bV9yZWd1bGF0 b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLAo+PiArCQkJCSAgICAg IGN0eC0+c3VwcGxpZXMpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiAr Cj4+ICsJY3R4LT5yZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElP RF9PVVRfSElHSCk7Cj4+ICsJaWYgKElTX0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7Cj4+ICsJCURS TV9ERVZfRVJST1IoZGV2LCAiY2Fubm90IGdldCByZXNldCBncGlvICVsZFxuIiwKPj4gKwkJCVBU Ul9FUlIoY3R4LT5yZXNldF9ncGlvKSk7Cj4+ICsJCXJldHVybiBQVFJfRVJSKGN0eC0+cmVzZXRf Z3Bpbyk7Cj4+ICsJfQo+PiArCj4+ICsJY3R4LT5tb2RlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChk ZXYsICJtb2RlIiwgR1BJT0RfT1VUX0xPVyk7Cj4+ICsJaWYgKElTX0VSUihjdHgtPm1vZGVfZ3Bp bykpIHsKPj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjYW5ub3QgZ2V0IG1vZGUgZ3BpbyAlbGRc biIsCj4+ICsJCQlQVFJfRVJSKGN0eC0+bW9kZV9ncGlvKSk7Cj4+ICsJCXJldHVybiBQVFJfRVJS KGN0eC0+bW9kZV9ncGlvKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBkdWFsIHBvcnQgKi8KPj4gKwln cGlvZF9zZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8sIDApOwo+PiArCj4+ICsJZHJtX3BhbmVsX2lu aXQoJmN0eC0+cGFuZWwpOwo+PiArCWN0eC0+cGFuZWwuZGV2ID0gZGV2Owo+PiArCWN0eC0+cGFu ZWwuZnVuY3MgPSAmdHJ1bHlfbnQzNTU5N19kcm1fZnVuY3M7Cj4+ICsJZHJtX3BhbmVsX2FkZCgm Y3R4LT5wYW5lbCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlIHFjb21fc2RtODQ1X210cF8ya19tb2RlID0gewo+IAo+IHN0 YXRpYyBjb25zdCAuLi4KPiAKPj4gKwkubmFtZSA9ICIxNDQweDI1NjAiLAo+PiArCS5jbG9jayA9 IDI2ODMxNiwKPj4gKwkuaGRpc3BsYXkgPSAxNDQwLAo+PiArCS5oc3luY19zdGFydCA9IDE0NDAg KyAyMDAsCj4+ICsJLmhzeW5jX2VuZCA9IDE0NDAgKyAyMDAgKyAzMiwKPj4gKwkuaHRvdGFsID0g MTQ0MCArIDIwMCArIDMyICsgNjQsCj4+ICsJLnZkaXNwbGF5ID0gMjU2MCwKPj4gKwkudnN5bmNf c3RhcnQgPSAyNTYwICsgOCwKPj4gKwkudnN5bmNfZW5kID0gMjU2MCArIDggKyAxLAo+PiArCS52 dG90YWwgPSAyNTYwICsgOCArIDEgKyA3LAo+PiArCS52cmVmcmVzaCA9IDYwLAo+PiArCS5mbGFn cyA9IDAsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IG50MzU1OTdfY29uZmlnIG50MzU1 OTdfZGlyID0gewo+IAo+IHN0YXRpYyBjb25zdCAuLi4KPiAKPj4gKwkud2lkdGhfbW0gPSA3NCwK Pj4gKwkuaGVpZ2h0X21tID0gMTMxLAo+PiArCS5wYW5lbF9uYW1lID0gInFjb21fc2RtODQ1X210 cF8ya19wYW5lbCIsCj4+ICsJLmRtID0gJnFjb21fc2RtODQ1X210cF8ya19tb2RlLAo+PiArCS5w YW5lbF9vbl9jbWRzID0gcWNvbV8ya19wYW5lbF9tYWdpY19jbWRzLAo+PiArCS5udW1fb25fY21k cyA9IEFSUkFZX1NJWkUocWNvbV8ya19wYW5lbF9tYWdpY19jbWRzKSwKPj4gK307Cj4+ICsKPj4g K3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19wcm9iZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk c2kpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2Owo+PiArCXN0cnVj dCB0cnVseV9udDM1NTk3ICpjdHg7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpMV9k ZXZpY2U7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpkc2kxOwo+PiArCXN0cnVjdCBtaXBpX2Rz aV9ob3N0ICpkc2kxX2hvc3Q7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpX2RldjsK Pj4gKwlpbnQgcmV0ID0gMDsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWNvbnN0IHN0cnVjdCBtaXBp X2RzaV9kZXZpY2VfaW5mbyBpbmZvID0gey50eXBlID0gInRydWx5bnQzNTU5NyIsCj4gCj4gLnR5 cGUgc2hvdWxkIGJlIG9uIHRoZSBuZXh0IGxpbmUuCj4gCj4+ICsJCS5jaGFubmVsID0gMCwKPj4g KwkJLm5vZGUgPSBOVUxMLAo+PiArCX07Cj4+ICsKPj4gKwljdHggPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwo+PiArCj4+ICsJaWYgKCFjdHgpCj4+ICsJCXJl dHVybiAtRU5PTUVNOwo+PiArCj4+ICsJLyogVGhpcyBkZXZpY2UgcmVwcmVzZW50cyBpdHNlbGYg YXMgb25lIHdpdGgKPj4gKwkgKiB0d28gaW5wdXQgcG9ydHMgd2hpY2ggYXJlIGZlZCBieSB0aGUg b3V0cHV0Cj4+ICsJICogcG9ydHMgb2YgdGhlIHR3byBEU0kgY29udHJvbGxlcnMgLiBUaGUgRFNJ MAo+PiArCSAqIGlzIHRoZSBtYXN0ZXIgY29udHJvbGxlciBhbmQgaGFzIG1vc3Qgb2YgdGhlCj4+ ICsJICogcGFuZWwgcmVsYXRlZCBpbmZvIGluIGl0cyBjaGlsZCBub2RlLgo+PiArCSAqLwo+PiAr Cj4+ICsJY3R4LT5jb25maWcgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKPj4gKwo+ PiArCWlmICghY3R4LT5jb25maWcpIHsKPj4gKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIGRldmlj ZSBjb25maWd1cmF0aW9uXG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCj4+ ICsJZHNpMSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi5vZl9ub2RlLCAxLCAt MSk7Cj4+ICsJaWYgKCFkc2kxKSB7Cj4+ICsJCURSTV9ERVZfRVJST1IoZGV2LAo+PiArCQkJImZh aWxlZCB0byBnZXQgcmVtb3RlIG5vZGUgZm9yIGRzaTFfZGV2aWNlXG4iKTsKPj4gKwkJcmV0ID0g LUVOT0RFVjsKPj4gKwkJZ290byBlcnJfZ2V0X3JlbW90ZTsKPj4gKwl9Cj4+ICsKPj4gKwlkc2kx X2hvc3QgPSBvZl9maW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShkc2kxKTsKPj4gKwlpZiAoIWRz aTFfaG9zdCkgewo+PiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBmaW5kIGRzaSBo b3N0XG4iKTsKPj4gKwkJcmV0ID0gLUVQUk9CRV9ERUZFUjsKPj4gKwkJZ290byBlcnJfaG9zdDsK Pj4gKwl9Cj4+ICsKPj4gKwlvZl9ub2RlX3B1dChkc2kxKTsKPj4gKwo+PiArCS8qIHJlZ2lzdGVy IHRoZSBzZWNvbmQgRFNJIGRldmljZSAqLwo+PiArCWRzaTFfZGV2aWNlID0gbWlwaV9kc2lfZGV2 aWNlX3JlZ2lzdGVyX2Z1bGwoZHNpMV9ob3N0LCAmaW5mbyk7Cj4+ICsJaWYgKElTX0VSUihkc2kx X2RldmljZSkpIHsKPj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRz aSBkZXZpY2VcbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKGRzaSk7Cj4+ICsJCWdvdG8gZXJyX2Rz aV9kZXZpY2U7Cj4+ICsJfQo+PiArCj4+ICsJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgp Owo+PiArCj4+ICsJY3R4LT5kZXYgPSBkZXY7Cj4+ICsJY3R4LT5kc2lbMF0gPSBkc2k7Cj4+ICsJ Y3R4LT5kc2lbMV0gPSBkc2kxX2RldmljZTsKPj4gKwo+PiArCXJldCA9IHRydWx5X250MzU1OTdf cGFuZWxfYWRkKGN0eCk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlEUk1fREVWX0VSUk9SKGRldiwg ImZhaWxlZCB0byBhZGQgcGFuZWxcbiIpOwo+PiArCQlnb3RvIGVycl9wYW5lbF9hZGQ7Cj4+ICsJ fQo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5kc2kpOyBpKyspIHsK Pj4gKwkJZHNpX2RldiA9IGN0eC0+ZHNpW2ldOwo+PiArCQlkc2lfZGV2LT5sYW5lcyA9IDQ7Cj4+ ICsJCWRzaV9kZXYtPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4+ICsJCWRzaV9kZXYt Pm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9MUE0gfAo+ PiArCQkJTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVM7Cj4+ICsJCXJldCA9IG1pcGlfZHNp X2F0dGFjaChkc2lfZGV2KTsKPj4gKwkJaWYgKHJldCA8IDApIHsKPj4gKwkJCURSTV9ERVZfRVJS T1IoZGV2LAo+PiArCQkJCSJkc2kgYXR0YWNoIGZhaWxlZCBpID0gJWRcbiIsIGkpOwo+PiArCQkJ CWdvdG8gZXJyX2RzaV9hdHRhY2g7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gKwo+PiArZXJyX2RzaV9hdHRhY2g6Cj4+ICsJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5l bCk7Cj4+ICtlcnJfcGFuZWxfYWRkOgo+PiArCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGRz aTFfZGV2aWNlKTsKPj4gK2Vycl9kc2lfZGV2aWNlOgo+PiArZXJyX2hvc3Q6Cj4+ICsJb2Zfbm9k ZV9wdXQoZHNpMSk7Cj4+ICtlcnJfZ2V0X3JlbW90ZToKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X250MzU1OTdfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKmRzaSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gbWlwaV9k c2lfZ2V0X2RydmRhdGEoZHNpKTsKPj4gKwo+PiArCWlmIChjdHgtPmRzaVswXSkKPj4gKwkJbWlw aV9kc2lfZGV0YWNoKGN0eC0+ZHNpWzBdKTsKPj4gKwlpZiAoY3R4LT5kc2lbMV0pIHsKPj4gKwkJ bWlwaV9kc2lfZGV0YWNoKGN0eC0+ZHNpWzFdKTsKPj4gKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVn aXN0ZXIoY3R4LT5kc2lbMV0pOwo+PiArCX0KPj4gKwo+PiArCWRybV9wYW5lbF9yZW1vdmUoJmN0 eC0+cGFuZWwpOwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCB0cnVseV93cXhnYV9vZl9tYXRjaFtdID0gewo+IAo+IFNob3VsZCB0 aGlzIHRhYmxlIGJlIHJlbmFtZWQgdG8gdHJ1bHlfbnQzNjY5N19vZl9tYXRjaD8KPiAKPj4gKwl7 CS5jb21wYXRpYmxlID0gInFjb20sc2RtODQ1LW10cC0ySy1kaXNwbGF5IiwKPj4gKwkJLmRhdGEg PSAmbnQzNTU5N19kaXIsCj4+ICsJfSwKPj4gKwo+PiArCXsgfQo+PiArfTsKPj4gK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIHRydWx5X3dxeGdhX29mX21hdGNoKTsKPj4gKwo+PiArc3RhdGljIHN0 cnVjdCBtaXBpX2RzaV9kcml2ZXIgdHJ1bHlfd3F4Z2FfZHJpdmVyID0gewo+PiArCS5kcml2ZXIg PSB7Cj4+ICsJCS5uYW1lID0gInBhbmVsX3RydWx5X250MzU1OTciLAo+PiArCQkub2ZfbWF0Y2hf dGFibGUgPSB0cnVseV93cXhnYV9vZl9tYXRjaCwKPj4gKwl9LAo+PiArCS5wcm9iZSA9IHRydWx5 X250MzU1OTdfcHJvYmUsCj4+ICsJLnJlbW92ZSA9IHRydWx5X250MzU1OTdfcmVtb3ZlLAo+PiAr fTsKPj4gK21vZHVsZV9taXBpX2RzaV9kcml2ZXIodHJ1bHlfd3F4Z2FfZHJpdmVyKTsKPj4gKwo+ PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJUcnVseSBOVDM1NTk3IERTSSBQYW5lbCBEcml2ZXIiKTsK Pj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiAKPiByZWdhcmRzCj4gUGhpbGlwcAo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVs IG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK