From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: Re: [[RFC]DPU PATCH 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Thu, 19 Apr 2018 09:14:39 -0600 Message-ID: <20180419151438.GA18652@jcrouse-lnx.qualcomm.com> References: <1524054002-17869-1-git-send-email-spanda@codeaurora.org> <1524054002-17869-2-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1524054002-17869-2-git-send-email-spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sandeep Panda Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org T24gV2VkLCBBcHIgMTgsIDIwMTggYXQgMDU6NDk6NTlQTSArMDUzMCwgU2FuZGVlcCBQYW5kYSB3 cm90ZToKPiBBZGQgc3VwcG9ydCBmb3IgVEkncyBzbjY1ZHNpODYgZHNpMmVkcCBicmlkZ2UgY2hp cC4KPiBUaGUgY2hpcCBjb252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWdu YWwsCj4gd2hpY2ggaXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgo+IAo+IFRoaXMg Y2hpcCBjYW4gYmUgY29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPiBkc2kg aW50ZXJmYWNlLiBDdXJyZW50bHkgaW4gZHJpdmVyIGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMK PiBhcmUgYmVpbmcgYWNjZXNzZWQgdGhyb3VnaCBpMmMgaW50ZXJmYWNlIG9ubHkuCj4gQWxzbyBh cyBvZiBub3cgSFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+IGNoaXAg ZHJpdmVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVy b3JhLm9yZz4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyB8 IDc0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2Vk LCA3NDIgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNp ODYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYzc5OGYyZgo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5j Cj4gQEAgLTAsMCArMSw3NDIgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgKi8KClRoZXJlIHNob3VsZCBiZSBhIGNvcHlyaWdodCBoZXJlLgoKPiArCj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2Nv bnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+ICsKPiArI2RlZmluZSBTTl9CUklER0Vf UkVWSVNJT05fSUQgMHgyCj4gKwo+ICsvKiBMaW5rIFRyYWluaW5nIHNwZWNpZmljIHJlZ2lzdGVy cyAqLwo+ICsjZGVmaW5lIFNOX0RFVklDRV9SRVZfUkVHCQkJMHgwOAo+ICsjZGVmaW5lIFNOX1JF RkNMS19GUkVRX1JFRwkJCTB4MEEKPiArI2RlZmluZSBTTl9EU0lfTEFORVNfUkVHCQkJMHgxMAo+ ICsjZGVmaW5lIFNOX0RTSUFfQ0xLX0ZSRVFfUkVHCQkJMHgxMgo+ICsjZGVmaW5lIFNOX0VOSF9G UkFNRV9SRUcJCQkweDVBCj4gKyNkZWZpbmUgU05fU1NDX0NPTkZJR19SRUcJCQkweDkzCj4gKyNk ZWZpbmUgU05fREFUQVJBVEVfQ09ORklHX1JFRwkJCTB4OTQKPiArI2RlZmluZSBTTl9QTExfRU5B QkxFX1JFRwkJCTB4MEQKPiArI2RlZmluZSBTTl9TQ1JBTUJMRV9DT05GSUdfUkVHCQkJMHg5NQo+ ICsjZGVmaW5lIFNOX0FVWF9XREFUQTBfUkVHCQkJMHg2NAo+ICsjZGVmaW5lIFNOX0FVWF9BRERS XzE5XzE2X1JFRwkJCTB4NzQKPiArI2RlZmluZSBTTl9BVVhfQUREUl8xNV84X1JFRwkJCTB4NzUK PiArI2RlZmluZSBTTl9BVVhfQUREUl83XzBfUkVHCQkJMHg3Ngo+ICsjZGVmaW5lIFNOX0FVWF9M RU5HVEhfUkVHCQkJMHg3Nwo+ICsjZGVmaW5lIFNOX0FVWF9DTURfUkVHCQkJCTB4NzgKPiArI2Rl ZmluZSBTTl9NTF9UWF9NT0RFX1JFRwkJCTB4OTYKPiArI2RlZmluZSBTTl9QQUdFX1NFTEVDVF9S RUcJCQkweEZGCj4gKyNkZWZpbmUgU05fQVVYX1JEQVRBMF9SRUcJCQkweDc5Cj4gKy8qIHZpZGVv IGNvbmZpZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBTTl9DSEFfQUNUSVZFX0xJ TkVfTEVOR1RIX0xPV19SRUcJMHgyMAo+ICsjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5H VEhfSElHSF9SRUcJMHgyMQo+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVf TE9XX1JFRwkweDI0Cj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdI X1JFRwkweDI1Cj4gKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgy Qwo+ICsjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECj4gKyNk ZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgzMAo+ICsjZGVmaW5lIFNO X0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDMxCj4gKyNkZWZpbmUgU05fQ0hBX0hP UklaT05UQUxfQkFDS19QT1JDSF9SRUcJMHgzNAo+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9C QUNLX1BPUkNIX1JFRwkJMHgzNgo+ICsjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BP UkNIX1JFRwkweDM4Cj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRwkJ MHgzQQo+ICsjZGVmaW5lIFNOX0RBVEFfRk9STUFUX1JFRwkJCTB4NUIKPiArI2RlZmluZSBTTl9D T0xPUl9CQVJfQ09ORklHX1JFRwkJCTB4M0MKPiArCj4gKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19S RUZDTEsJMAo+ICsjZGVmaW5lIERQUExMX0NMS19TUkNfRFNJQ0xLCTEKPiArI2RlZmluZSBNSU5f RFNJX0NMS19GUkVRX01IWgk0MAo+ICsKPiArZW51bSB0aV9zbl9icmlkZ2VfcmVmX2Nsa3Mgewo+ ICsJU05fUkVGX0NMS18xMl9NSFogPSAwLAo+ICsJU05fUkVGX0NMS18xOV8yX01IWiwKPiArCVNO X1JFRl9DTEtfMjZfTUhaLAo+ICsJU05fUkVGX0NMS18yN19NSFosCj4gKwlTTl9SRUZfQ0xLXzM4 XzRfTUhaLAo+ICsJU05fUkVGX0NMS19NQVgsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgdGlfc25fYnJp ZGdlIHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRn ZTsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKPiArCXN0cnVjdCBkZXZpY2Vf bm9kZSAqaG9zdF9ub2RlOwo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwo+ICsJLyog aGFuZGxlIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsICovCj4gKwlzdHJ1Y3QgZHJtX3BhbmVs ICpwYW5lbDsKPiArCWludCBpcnE7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICppcnFfZ3BpbzsKPiAr CS8qIGxpc3Qgb2YgZ3Bpb3MgbmVlZGVkIHRvIGVuYWJsZSB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxp dHkgKi8KPiArCXN0cnVjdCBncGlvX2Rlc2NzICplbmFibGVfZ3Bpb3M7Cj4gKwl1bnNpZ25lZCBp bnQgbnVtX3N1cHBsaWVzOwo+ICsJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKnN1cHBsaWVz Owo+ICsJc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQ7Cj4gKwlzdHJ1Y3QgaTJjX2FkYXB0 ZXIgKmRkYzsKPiArCWJvb2wgcG93ZXJfb247Cj4gKwl1MzIgbnVtX21vZGVzOwo+ICsJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgY3Vycl9tb2RlOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0aV9z bl9icmlkZ2Vfd3JpdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEsIHU4IHJlZywgdTggdmFs KQo+ICt7Cj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGllbnQ7 Cj4gKwl1OCBidWZbMl0gPSB7cmVnLCB2YWx9Owo+ICsJc3RydWN0IGkyY19tc2cgbXNnID0gewo+ ICsJCS5hZGRyID0gY2xpZW50LT5hZGRyLAo+ICsJCS5mbGFncyA9IDAsCj4gKwkJLmxlbiA9IDIs Cj4gKwkJLmJ1ZiA9IGJ1ZiwKPiArCX07Cj4gKwo+ICsJaWYgKGkyY190cmFuc2ZlcihjbGllbnQt PmFkYXB0ZXIsICZtc2csIDEpIDwgMSkgewo+ICsJCURSTV9FUlJPUigiaTJjIHdyaXRlIGZhaWxl ZFxuIik7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlYWQoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRh dGEsCj4gKwkJCQkJdTggcmVnLCBjaGFyICpidWYsIHUzMiBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGllbnQ7Cj4gKwlzdHJ1Y3QgaTJjX21z ZyBtc2dbMl0gPSB7Cj4gKwkJewo+ICsJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPiArCQkJLmZs YWdzID0gMCwKPiArCQkJLmxlbiA9IDEsCj4gKwkJCS5idWYgPSAmcmVnLAo+ICsJCX0sCj4gKwkJ ewo+ICsJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPiArCQkJLmZsYWdzID0gSTJDX01fUkQsCj4g KwkJCS5sZW4gPSBzaXplLAo+ICsJCQkuYnVmID0gYnVmLAo+ICsJCX0KPiArCX07Cj4gKwo+ICsJ aWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMikgIT0gMikgewo+ICsJCURS TV9FUlJPUigiaTJjIHJlYWQgZmFpbGVkXG4iKTsKPiArCQlyZXR1cm4gLUVJTzsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2dwaW9f Y29uZmlndXJlKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLCBib29sIG9uKQo+ICt7Cj4gKwlp bnQgdmFsdWUsIGkgPSAwLCBudW0gPSAwOwo+ICsJaW50ICp2YWx1ZV9hcnJheSA9IE5VTEw7Cj4g Kwo+ICsJaWYgKCFwZGF0YSkKPiArCQlyZXR1cm47CgpwZGF0YSBzaG91bGQgYWx3YXlzIGJlIHZh bGlkIGhlcmUuCgo+ICsJdmFsdWUgPSBvbiA/IDEgOiAwOwo+ICsJbnVtID0gcGRhdGEtPmVuYWJs ZV9ncGlvcy0+bmRlc2NzOwo+ICsJdmFsdWVfYXJyYXkgPSBrbWFsbG9jKG51bSAqIHNpemVvZihp bnQpLCBHRlBfS0VSTkVMKTsKPiArCWlmICh2YWx1ZV9hcnJheSkgewo+ICsJCWZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykKPiArCQkJdmFsdWVfYXJyYXlbaV0gPSB2YWx1ZTsKPiArCQlncGlvZF9z ZXRfYXJyYXlfdmFsdWUobnVtLCBwZGF0YS0+ZW5hYmxlX2dwaW9zLT5kZXNjLAo+ICsJCQkJICAg ICAgdmFsdWVfYXJyYXkpOwo+ICsJCWtmcmVlKHZhbHVlX2FycmF5KTsKPiArCX0KPiArCj4gKwlp ZiAocGRhdGEtPmlycV9ncGlvKQo+ICsJCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+aXJxX2dwaW8s IHZhbHVlKTsKPiArCj4gKwlEUk1fREVCVUcoImNvbmZpZyB0bzogJWRcbiIsIHZhbHVlKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEsIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlzdGF0aWMgaW50IHJlZl9jb3Vu dDsKPiArCj4gKwlpZiAoIXBkYXRhKQo+ICsJCXJldHVybjsKCnBkYXRhIHNob3VsZCBhbHdheXMg YmUgdmFsaWQgaGVyZS4KCj4gKwlpZiAoZW5hYmxlKQo+ICsJCXJlZl9jb3VudCsrOwo+ICsJZWxz ZQo+ICsJCXJlZl9jb3VudC0tOwo+ICsKPiArCWlmIChlbmFibGUgJiYgKHJlZl9jb3VudCA9PSAx KSkgewo+ICsJCXRpX3NuX2JyaWRnZV9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgdHJ1ZSk7Cj4gKwo+ ICsJCWlmIChyZWd1bGF0b3JfYnVsa19lbmFibGUocGRhdGEtPm51bV9zdXBwbGllcywKPiArCQkJ CQkJcGRhdGEtPnN1cHBsaWVzKSkgewo+ICsJCQlEUk1fRVJST1IoImJyaWRnZSByZWd1bGF0b3Ig ZW5hYmxlIGZhaWxlZFxuIik7Cj4gKwkJCXJldHVybjsKPiArCQl9Cj4gKwkJcGRhdGEtPnBvd2Vy X29uID0gdHJ1ZTsKPiArCX0gZWxzZSBpZiAoIWVuYWJsZSAmJiAhcmVmX2NvdW50KSB7Cj4gKwkJ cmVndWxhdG9yX2J1bGtfZGlzYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+c3VwcGxp ZXMpOwo+ICsKPiArCQl0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIGZhbHNlKTsK PiArCQlwZGF0YS0+cG93ZXJfb24gPSBmYWxzZTsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RFQlVH KCJ0aV9zbl9icmlkZ2UgcG93ZXIgY3RybDogJWQgcmVmY291bnQ6ICVkXG4iLAo+ICsJCQkJCQkJ ZW5hYmxlLCByZWZfY291bnQpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKiBDb25uZWN0b3IgZnVuY3Mg Ki8KPiArc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKgo+ICtjb25uZWN0b3JfdG9fdGlfc25f YnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXJldHVybiBj b250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBjb25uZWN0b3IpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOwo+ICsJc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4gKwlzdHJ1Y3QgZWRpZCAqZWRp ZDsKPiArCj4gKwlpZiAocGFuZWwpIHsKPiArCQlEUk1fREVCVUcoImdldCBtb2RlIGZyb20gY29u bmVjdGVkIGRybV9wYW5lbFxuIik7Cj4gKwkJcGRhdGEtPm51bV9tb2RlcyA9IGRybV9wYW5lbF9n ZXRfbW9kZXMocGFuZWwpOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBnZXQgZnJvbSBFRElEICovCj4g KwkJaWYgKCFwZGF0YS0+ZGRjKQo+ICsJCQlyZXR1cm4gMDsKPiArCQl0aV9zbl9icmlkZ2VfcG93 ZXJfY3RybChwZGF0YSwgdHJ1ZSk7Cj4gKwkJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3Is IHBkYXRhLT5kZGMpOwo+ICsJCWlmIChlZGlkKSB7Cj4gKwkJCWRybV9tb2RlX2Nvbm5lY3Rvcl91 cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCj4gKwkJCQkJCQkJZWRpZCk7Cj4gKwkJCXBk YXRhLT5udW1fbW9kZXMgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiAr CQkJZHJtX2VkaWRfdG9fZWxkKGNvbm5lY3RvciwgZWRpZCk7Cj4gKwkJCWtmcmVlKGVkaWQpOwo+ ICsJCX0gZWxzZSB7Cj4gKwkJCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBlZGlkXG4iKTsKPiAr CQl9Cj4gKwkJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gcGRhdGEtPm51bV9tb2RlczsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gZHJt X21vZGVfc3RhdHVzCj4gK3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQo+ICt7Cj4gKwkvKiBtYXhpbXVtIHN1cHBvcnRlZCByZXNvbHV0aW9uIGlzIDRL IGF0IDYwIGZwcyAqLwo+ICsJaWYgKG1vZGUtPmNsb2NrID4gNTk0MDAwKQo+ICsJCXJldHVybiBN T0RFX0NMT0NLX0hJR0g7Cj4gKwo+ICsJcmV0dXJuIE1PREVfT0s7Cj4gK30KPiArCj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZ2V0X21vZGVzID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rv cl9nZXRfbW9kZXMsCj4gKwkubW9kZV92YWxpZCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9k ZV92YWxpZCwKPiArfTsKPiArCj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCj4g K3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsIGJvb2wgZm9yY2UpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0g Y29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOwo+ICsKPiArCS8qKgo+ICsJICog VE9ETzogQ3VycmVudGx5IGlmIGRybV9wYW5lbCBpcyBwcmVzZW50LCB0aGVuIGFsd2F5cwo+ICsJ ICogcmV0dXJuIHRoZSBzdGF0dXMgYXMgY29ubmVjdGVkLiBOZWVkIHRvIGFkZCBzdXBwb3J0IHRv IGRldGVjdAo+ICsJICogZGV2aWNlIHN0YXRlIGZvciBubyBwYW5lbChob3QgcGx1Z2dhYmxlKSBz Y2VuYXJpb3MuCj4gKwkgKi8KPiArCWlmIChwZGF0YS0+cGFuZWwpCj4gKwkJcmV0dXJuIGNvbm5l Y3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ICsJZWxzZQo+ICsJCXJldHVybiBjb25uZWN0b3Jfc3Rh dHVzX2Rpc2Nvbm5lY3RlZDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZmlsbF9t b2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiArCS5kZXRl Y3QgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdCwKPiArCS5kZXN0cm95ID0gZHJtX2Nv bm5lY3Rvcl9jbGVhbnVwLAo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3Ry dWN0IHRpX3NuX2JyaWRnZSwgYnJpZGdlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9i cmlkZ2VfcmVhZF9kZXZpY2VfcmV2KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+ICt7Cj4g Kwl1OCByZXYgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJcmV0ID0gdGlfc25fYnJpZGdl X3JlYWQocGRhdGEsIFNOX0RFVklDRV9SRVZfUkVHLCAmcmV2LCAxKTsKPiArCWlmIChyZXQpCj4g KwkJZ290byBleGl0Owo+ICsKPiArCWlmIChyZXYgPT0gU05fQlJJREdFX1JFVklTSU9OX0lEKSB7 Cj4gKwkJRFJNX0RFQlVHKCJ0aV9zbl9icmlkZ2UgcmV2aXNpb24gaWQ6IDB4JXhcbiIsIHJldik7 Cj4gKwl9IGVsc2Ugewo+ICsJCURSTV9FUlJPUigidGlfc25fYnJpZGdlIHJldmlzaW9uIGlkIG1p c21hdGNoXG4iKTsKCkkgZmluZCBpdCB1c2VmdWwgdG8gcHJpbnQgd2hhdCB0aGUgbWlzbWF0Y2gg aXMgc28geW91IGNhbiBkZWJ1ZyBtb3JlCmVmZmVjdGl2ZWx5LgoKPiArCQlyZXQgPSAtRUlOVkFM Owo+ICsJfQo+ICsKPiArZXhpdDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBjaGFyICogY29uc3QgdGlfc25fYnJpZGdlX3N1cHBseV9uYW1lc1tdID0gewo+ICsJInZj Y2lvIiwKPiArCSJ2Y2NhIiwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3Bh cnNlX3JlZ3VsYXRvcnMoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sKPiArCXVuc2ln bmVkIGludCBpOwo+ICsJaW50IHJldDsKPiArCj4gKwlwZGF0YS0+bnVtX3N1cHBsaWVzID0gQVJS QVlfU0laRSh0aV9zbl9icmlkZ2Vfc3VwcGx5X25hbWVzKTsKPiArCj4gKwlwZGF0YS0+c3VwcGxp ZXMgPSBkZXZtX2tjYWxsb2MocGRhdGEtPmRldiwgcGRhdGEtPm51bV9zdXBwbGllcywKPiArCQkJ CSAgICAgc2l6ZW9mKCpwZGF0YS0+c3VwcGxpZXMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcGRh dGEtPnN1cHBsaWVzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBwZGF0YS0+bnVtX3N1cHBsaWVzOyBpKyspCj4gKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBs eSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZWd1 bGF0b3JfYnVsa19nZXQocGRhdGEtPmRldiwKPiArCQkJcGRhdGEtPm51bV9zdXBwbGllcywgcGRh dGEtPnN1cHBsaWVzKTsKPiArCj4gKwlyZXR1cm4gcmV0OwoKTml0OiB5b3UgY2FuIGNvbWJpbmUg dGhlIGFib3ZlIHR3byBsaW5lcyBhbmQgZ2V0IHJpZCBvZiAncmV0Jy4KCj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwoc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFuZWxfbm9kZSwgKnBvcnQsICpl bmRwb2ludDsKPiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gTlVMTDsKPiArCj4gKwlwb3J0 ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQocGRhdGEtPmRldi0+b2Zfbm9kZSwgMSk7Cj4gKwlp ZiAocG9ydCkgewo+ICsJCWVuZHBvaW50ID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUocG9ydCwgImVu ZHBvaW50Iik7Cj4gKwkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4gKwkJaWYgKCFlbmRwb2ludCkgewo+ ICsJCQlkZXZfZXJyKHBkYXRhLT5kZXYsICJubyBvdXRwdXQgZW5kcG9pbnQgZm91bmRcbiIpOwo+ ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCj4gKwkJcGFuZWxfbm9kZSA9IG9mX2dyYXBoX2dl dF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOwo+ICsJCW9mX25vZGVfcHV0KGVuZHBvaW50 KTsKPiArCQlpZiAoIXBhbmVsX25vZGUpIHsKPiArCQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8g b3V0cHV0IG5vZGUgZm91bmRcbiIpOwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCj4gKwkJ cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChwYW5lbF9ub2RlKTsKPiArCQlvZl9ub2RlX3B1dChw YW5lbF9ub2RlKTsKPiArCQlpZiAoIXBhbmVsKSB7Cj4gKwkJCWRldl9lcnIocGRhdGEtPmRldiwg Im5vIHBhbmVsIG5vZGUgZm91bmRcbiIpOwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCX0K PiArCj4gKwlwZGF0YS0+cGFuZWwgPSBwYW5lbDsKPiArCWRybV9wYW5lbF9hdHRhY2gocGFuZWws ICZwZGF0YS0+Y29ubmVjdG9yKTsKPiArCj4gKwlyZXR1cm47Cj4gKwo+ICtlcnJvcjoKPiArCXBk YXRhLT5wYW5lbCA9IE5VTEw7CgpJcyB0aGlzIG5lZWRlZD8gIGlzbid0IHBkYXRhLT5wYW5lbCBh bHJlYWR5IG51bGwgd2hlbiB3ZSBjb21lIGluPyAgSWYgc28KeW91IGNhbiBqdXN0IHJldHVybiB0 aGUgZXJyb3IgY2FzZXMgYW5kIHJlbW92ZSB0aGUgbGFiZWwuCgo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHRpX3NuX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2k7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9i cmlkZ2UoYnJpZGdlKTsKPiArCWludCByZXQ7Cj4gKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlX2luZm8gaW5mbyA9IHsgLnR5cGUgPSAidGlfc25fYnJpZGdlIiwKPiArCQkJCQkJICAgLmNo YW5uZWwgPSAwLAo+ICsJCQkJCQkgICAubm9kZSA9IE5VTEwsCj4gKwkJCQkJCSB9Owo+ICsKPiAr CWlmICghYnJpZGdlLT5lbmNvZGVyKSB7Cj4gKwkJRFJNX0VSUk9SKCJQYXJlbnQgZW5jb2RlciBv YmplY3Qgbm90IGZvdW5kIik7CgpNaXNzaW5nIFxuIG9uIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4K Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJLyogSFBEIG5vdCBzdXBwb3J0ZWQg Ki8KPiArCXBkYXRhLT5jb25uZWN0b3IucG9sbGVkID0gMDsKPiArCj4gKwlyZXQgPSBkcm1fY29u bmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZwZGF0YS0+Y29ubmVjdG9yLAo+ICsJCQkJICZ0aV9z bl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAo+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAp OwoKVGhlIGFjdHVhbCAjZGVmaW5lIGlzIENPTk5ORUNUT1JfZURQPwoKPiArCWlmIChyZXQpIHsK PiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxu Iik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9h ZGQoJnBkYXRhLT5jb25uZWN0b3IsCj4gKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzKTsKPiArCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcGRhdGEt PmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKPiArCj4gKwlob3N0ID0gb2ZfZmluZF9taXBp X2RzaV9ob3N0X2J5X25vZGUocGRhdGEtPmhvc3Rfbm9kZSk7Cj4gKwlpZiAoIWhvc3QpIHsKPiAr CQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsKClRoZXJlIGlzbid0IGFu eSB0ZWFyIGRvd24gdGhhdCBuZWVkcyB0byBoYXBwZW4gaGVyZT8KCj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwl9Cj4gKwo+ICsJZHNpID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9z dCwgJmluZm8pOwo+ICsJaWYgKElTX0VSUihkc2kpKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOwo+ICsJCXJldCA9IFBUUl9FUlIoZHNpKTsKPiArCQln b3RvIGVycl9kc2lfZGV2aWNlOwoKQWJvdmUgeW91IHJldHVybiBkaXJlY3RseSBidXQgaGVyZSB5 b3UgZ290byBhIHJldHVybi4gIFlvdSBzaG91bGQgdXNlIHRoZSBzYW1lCmNvbnNpc3RlbnQgYXBw cm9hY2ggaW4gYm90aCBjYXNlcy4KCj4gKwl9Cj4gKwo+ICsJLyogVE9ETzogc2V0dGluZyB0byA0 IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCj4gKwlkc2ktPmxhbmVzID0gNDsKPiArCWRzaS0+Zm9y bWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPiArCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJ X01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UgfAo+ICsJCQkgIE1J UElfRFNJX01PREVfRU9UX1BBQ0tFVCB8IE1JUElfRFNJX01PREVfVklERU9fSFNFOwo+ICsKPiAr CXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1f RVJST1IoImZhaWxlZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOwo+ICsJCWdvdG8gZXJyX2Rz aV9hdHRhY2g7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEtPmRzaSA9IGRzaTsKPiArCj4gKwlEUk1fREVC VUcoImJyaWRnZSBhdHRhY2hlZFxuIik7Cj4gKwkvKiBhdHRhY2ggcGFuZWwgdG8gYnJpZGdlICov Cj4gKwl0aV9zbl9icmlkZ2VfYXR0YWNoX3BhbmVsKHBkYXRhKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArCj4gK2Vycl9kc2lfYXR0YWNoOgo+ICsJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNp KTsKPiArZXJyX2RzaV9kZXZpY2U6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB0aV9zbl9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiAr CQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgICBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+ICsKPiArCURSTV9ERUJV RygibW9kZV9zZXQ6IGhkaXNwbGF5PSVkLCB2ZGlzcGxheT0lZCwgdnJlZnJlc2g9JWQsIGNsb2Nr PSVkXG4iLAo+ICsJCWFkal9tb2RlLT5oZGlzcGxheSwgYWRqX21vZGUtPnZkaXNwbGF5LAo+ICsJ CWFkal9tb2RlLT52cmVmcmVzaCwgYWRqX21vZGUtPmNsb2NrKTsKPiArCj4gKwlkcm1fbW9kZV9j b3B5KCZwZGF0YS0+Y3Vycl9tb2RlLCBhZGpfbW9kZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHRpX3NuX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiAr CXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlk Z2UpOwo+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4gKwo+ICsJ aWYgKHBhbmVsKSB7Cj4gKwkJZHJtX3BhbmVsX2Rpc2FibGUocGFuZWwpOwo+ICsJCWRybV9wYW5l bF91bnByZXBhcmUocGFuZWwpOwo+ICsJfQo+ICsKPiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJs KHBkYXRhLCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4gKwlzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlID0gJnBkYXRhLT5jdXJyX21vZGU7Cj4gKwl1MzIgYml0X3JhdGVfbWh6LCBjbGtfZnJl cV9taHo7Cj4gKwl1OCB2YWwgPSAwOwo+ICsKPiArCWlmICghcGRhdGEtPm51bV9tb2RlcykKPiAr CQlyZXR1cm47Cj4gKwo+ICsJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIHRydWUpOwo+ ICsKPiArCWlmIChwYW5lbCkKPiArCQlkcm1fcGFuZWxfcHJlcGFyZShwYW5lbCk7Cj4gKwo+ICsJ LyogQ0xLX1NSQyBjb25maWcgKi8KPiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fUkVG Q0xLX0ZSRVFfUkVHLAo+ICsJCQkoRFBQTExfQ0xLX1NSQ19SRUZDTEsgfCAoU05fUkVGX0NMS18x OV8yX01IWiA8PCAweDEpKSk7Cj4gKwo+ICsJLyogRFNJX0EgbGFuZSBjb25maWcgKi8KPiArCXRp X3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBTTl9EU0lfTEFORVNfUkVHLCAmdmFsLCAweDEpOwo+ICsJ dmFsIHw9ICgoMHg0IC0gcGRhdGEtPmRzaS0+bGFuZXMpICYgMHgwMykgPDwgMHgzOwo+ICsJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EU0lfTEFORVNfUkVHLCB2YWwpOwo+ICsKPiArCS8q IERQIGxhbmUgY29uZmlnICovCj4gKwl0aV9zbl9icmlkZ2VfcmVhZChwZGF0YSwgU05fU1NDX0NP TkZJR19SRUcsICZ2YWwsIDB4MSk7Cj4gKwl2YWwgfD0gKChwZGF0YS0+ZHNpLT5sYW5lcyAtIDB4 MSkgJiAweDAzKSA8PCAweDQ7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX1NTQ19D T05GSUdfUkVHLCB2YWwpOwo+ICsKPiArCS8qIHNldCBkc2kgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAq Lwo+ICsJYml0X3JhdGVfbWh6ID0gKG1vZGUtPmNsb2NrIC8gMTAwMCkgKgo+ICsJCQltaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKHBkYXRhLT5kc2ktPmZvcm1hdCk7Cj4gKwljbGtfZnJlcV9t aHogPSBiaXRfcmF0ZV9taHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKPiArCS8qIGZvciBl YWNoIGluY3JlbWVudCBpbiB2YWwsIGZyZXF1ZW5jeSBpbmNyZWFzZXMgYnkgNU1IeiAqLwo+ICsJ dmFsID0gKE1JTl9EU0lfQ0xLX0ZSRVFfTUhaIC8gMHg1KSArCj4gKwkJKCgoY2xrX2ZyZXFfbWh6 IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gMHg1KSAmIDB4RkYpOwo+ICsJdGlfc25fYnJpZGdl X3dyaXRlKHBkYXRhLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFsKTsKPiArCj4gKwl0aV9zbl9i cmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcsIDB4ODApOyAvKiBzZXQg SEJSICovCj4gKwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9QTExfRU5BQkxFX1JF RywgMHgxKTsgLyogRW5hYmxlIFBMTCAqLwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDAwMSk7 Cj4gKwo+ICsJLyogRFBDRCBSZWdpc3RlciAweDAwMTBBIGluIFNpbmsgKi8KPiArCXRpX3NuX2Jy aWRnZV93cml0ZShwZGF0YSwgU05fQVVYX1dEQVRBMF9SRUcsIDB4MDEpOwo+ICsJdGlfc25fYnJp ZGdlX3dyaXRlKHBkYXRhLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOwo+ICsJdGlfc25f YnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgwMSk7Cj4gKwl0aV9z bl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4MEEpOwo+ICsJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7Cj4gKwl0aV9z bl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9DTURfUkVHLCAweDgxKTsKPiArCXVzbGVlcF9y YW5nZSgxMDAwMCwgMTAwMDEpOwo+ICsKPiArCS8qIFNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1v ZGUgKi8KPiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fTUxfVFhfTU9ERV9SRUcsIDB4 MEEpOwo+ICsJdXNsZWVwX3JhbmdlKDIwMDAwLCAyMDAwMSk7Cj4gKwo+ICsJLyogY29uZmlnIHZp ZGVvIHBhcmFtZXRlcnMgKi8KPiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX0FD VElWRV9MSU5FX0xFTkdUSF9MT1dfUkVHLAo+ICsJCQltb2RlLT5oZGlzcGxheSAmIDB4RkYpOwo+ ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0hJ R0hfUkVHLAo+ICsJCQkobW9kZS0+aGRpc3BsYXkgPj4gMHg4KSAmIDB4RkYpOwo+ICsJdGlfc25f YnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcs Cj4gKwkJCW1vZGUtPnZkaXNwbGF5ICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRh dGEsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcsCj4gKwkJCShtb2RlLT5o ZGlzcGxheSA+PiAweDgpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNO X0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAo+ICsJCQkobW9kZS0+aHRvdGFsIC0gbW9k ZS0+aHN5bmNfZW5kKSAmIDB4RkYpOwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9D SEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCj4gKwkJCSgobW9kZS0+aHRvdGFsIC0gbW9k ZS0+aHN5bmNfZW5kKSA+PiAweDgpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRh dGEsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAo+ICsJCQkobW9kZS0+dnRvdGFs IC0gbW9kZS0+dnN5bmNfZW5kKSAmIDB4RkYpOwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRh LCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCj4gKwkJCSgobW9kZS0+dnRvdGFs IC0gbW9kZS0+dnN5bmNfZW5kKSA+PiAweDgpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlkZ2Vfd3Jp dGUocGRhdGEsIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHLAo+ICsJCQkobW9kZS0+ aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgJiAweEZGKTsKPiArCXRpX3NuX2JyaWRnZV93 cml0ZShwZGF0YSwgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAo+ICsJCQkobW9kZS0+ dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKPiArCXRpX3NuX2JyaWRnZV93 cml0ZShwZGF0YSwgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHLAo+ICsJCQkobW9k ZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQpICYgMHhGRik7Cj4gKwl0aV9zbl9icmlk Z2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcsCj4gKwkJCSht b2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgJiAweEZGKTsKPiArCWlmIChwZGF0 YS0+ZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjg4OCkKPiArCQl0aV9zbl9icmlkZ2Vf d3JpdGUocGRhdGEsIFNOX0RBVEFfRk9STUFUX1JFRywgMHgwMCk7Cj4gKwllbHNlCj4gKwkJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EQVRBX0ZPUk1BVF9SRUcsIDB4MDEpOwo+ICsJdXNs ZWVwX3JhbmdlKDEwMDAwLCAxMDAwMSk7Cj4gKwo+ICsJLyogZW5hYmxlIHZpZGVvIHN0cmVhbSAq Lwo+ICsJdGlfc25fYnJpZGdlX3JlYWQocGRhdGEsIFNOX0VOSF9GUkFNRV9SRUcsICZ2YWwsIDB4 MSk7Cj4gKwl2YWwgfD0gQklUKDMpOwo+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9F TkhfRlJBTUVfUkVHLCB2YWwpOwo+ICsKPiArCWlmIChwYW5lbCkKPiArCQlkcm1fcGFuZWxfZW5h YmxlKHBhbmVsKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1 bmNzIHRpX3NuX2JyaWRnZV9mdW5jcyA9IHsKPiArCS5hdHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0 YWNoLAo+ICsJLmVuYWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCj4gKwkuZGlzYWJsZSA9IHRp X3NuX2JyaWRnZV9kaXNhYmxlLAo+ICsJLm1vZGVfc2V0ID0gdGlfc25fYnJpZGdlX21vZGVfc2V0 LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfZ3Bpb3Moc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICgh cGRhdGEgfHwgIXBkYXRhLT5kZXYpCj4gKwkJcmV0dXJuIC1FSU5WQUw7CgpCb3RoIG9mIHRoZXNl IGFyZSBrbm93biB0byBiZSB2YWxpZCBhdCB0aGlzIHBvaW50LgoKPiArCXBkYXRhLT5lbmFibGVf Z3Bpb3MgPSBkZXZtX2dwaW9kX2dldF9hcnJheShwZGF0YS0+ZGV2LAo+ICsJCQkJCQkiZW5hYmxl IiwgR1BJT0RfT1VUX0xPVyk7Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpb3MpKSB7 Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvIGZyb20gRFRcbiIpOwo+ ICsJCXJldCA9IFBUUl9FUlIocGRhdGEtPmVuYWJsZV9ncGlvcyk7Cj4gKwkJZ290byBleGl0Owo+ ICsJfQo+ICsKPiArCXBkYXRhLT5pcnFfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBk YXRhLT5kZXYsICJpcnEiLAo+ICsJCQkJCQkgIEdQSU9EX09VVF9MT1cpOwo+ICsJaWYgKElTX0VS UihwZGF0YS0+aXJxX2dwaW8pKQo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBpcnEgZ3Bp byBmcm9tIERUXG4iKTsKCllvdSBuZWVkIHRvIHNldCByZXQgdG8gUFRSX0VSUihwZGF0YS0+aXJx X2dwaW8pIGhlcmUuCgo+ICsKPiArZXhpdDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRhdGEtPmRldi0+b2Zf bm9kZTsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25vZGU7Cj4gKwo+ICsJZW5kX25vZGUg PSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhucCwgMCwgMCk7Cj4gKwlpZiAoIWVuZF9u b2RlKSB7Cj4gKwkJRFJNX0VSUk9SKCJyZW1vdGUgZW5kcG9pbnQgbm90IGZvdW5kXG4iKTsKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlwZGF0YS0+aG9zdF9ub2RlID0gb2ZfZ3Jh cGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRfbm9kZSk7Cj4gKwlvZl9ub2RlX3B1dChlbmRf bm9kZSk7Cj4gKwlpZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKPiArCQlEUk1fRVJST1IoInJlbW90 ZSBub2RlIG5vdCBmb3VuZFxuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwlvZl9u b2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwK PiArCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4gK3sKPiArCXN0cnVjdCB0aV9z bl9icmlkZ2UgKnBkYXRhOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpkZGNfbm9kZTsKPiArCWlu dCByZXQgPSAwOwo+ICsKPiArCWlmICghY2xpZW50IHx8ICFjbGllbnQtPmRldi5vZl9ub2RlKSB7 CgpJIGRvdWJ0IHRoZSBpMmMgcHJvYmUgd291bGQgc2VuZCB5b3UgYSBOVUxMIHZhbHVlIGZvciBj bGllbnQgYW5kIHlvdSBhcmUKbWF0Y2hpbmcgb24gYSBEVCBkZXZpY2UsIHNvIHRoZXJlIGlzIGEg cHJldHR5IHNvbGlkIGFyZ3VtZW50IHRoYXQKY2xpZW50LT5kZXYub2Zfbm9kZSB3aWxsIGJlIHZh bGlkIGFzIHdlbGwuCgo+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShj bGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKPiArCQlEUk1fRVJST1IoImRldmljZSBk b2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4g KwlwZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsCj4gKwkJc2l6ZW9mKHN0cnVjdCB0 aV9zbl9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcGRhdGEpCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwo+ICsJcGRhdGEtPnBvd2VyX29uID0gZmFsc2U7Cj4gKwlwZGF0YS0+ZGV2ID0g JmNsaWVudC0+ZGV2Owo+ICsJcGRhdGEtPmkyY19jbGllbnQgPSBjbGllbnQ7Cj4gKwlEUk1fREVC VUcoIkkyQyBhZGRyZXNzIGlzICV4XG4iLCBjbGllbnQtPmFkZHIpOwo+ICsKPiArCXJldCA9IHRp X3NuX2JyaWRnZV9wYXJzZV9kc2lfaG9zdChwZGF0YSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgZGV2aWNlIHRyZWVcbiIpOwoKdGlfc25fYnJpZGdlX3Bh cnNlX2RzaV9ob3N0IHByaW50cyBhIGVycm9yIG1lc3NhZ2Ugb24gZXZlcnkgZmFpbHVyZSBwb2lu dCAtIHlvdQpkb24ndCBuZWVkIGFub3RoZXIgb25lIGhlcmUuCgo+ICsJCWdvdG8gZXJyX2R0X3Bh cnNlOwo+ICsJfQo+ICsKPiArCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9ncGlvcyhwZGF0YSk7 Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgZ3Bpb3MgZnJv bSBEVFxuIik7CgpTYW1lIC0gYWxsIHRoZSBwYXRocyBhcmUgY292ZXJlZCBpbiB0aGUgY2hpbGQg ZnVuY3Rpb24uCgo+ICsJCWdvdG8gZXJyX2R0X3BhcnNlOwo+ICsJfQo+ICsKPiArCXJldCA9IHRp X3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHBkYXRhKTsKPiArCWlmIChyZXQpIHsKPiArCQlE Uk1fRVJST1IoImZhaWxlZCB0byBwYXJzZSByZWd1bGF0b3JzXG4iKTsKPiArCQlnb3RvIGVycl9k dF9wYXJzZTsKPiArCX0KPiArCj4gKwlkZGNfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGRhdGEt PmRldi0+b2Zfbm9kZSwgImRkYy1pMmMtYnVzIiwgMCk7Cj4gKwlpZiAoZGRjX25vZGUpIHsKPiAr CQlwZGF0YS0+ZGRjID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKPiAr CQlvZl9ub2RlX3B1dChkZGNfbm9kZSk7Cj4gKwkJaWYgKCFwZGF0YS0+ZGRjKSB7Cj4gKwkJCWRl dl9kYmcocGRhdGEtPmRldiwgImZhaWxlZCB0byByZWFkIGRkYyBub2RlXG4iKTsKPiArCQkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQlkZXZfZGJnKHBkYXRh LT5kZXYsICJubyBkZGMgcHJvcGVydHkgZm91bmRcbiIpOwo+ICsJfQo+ICsKPiArCXRpX3NuX2Jy aWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPiArCXJldCA9IHRpX3NuX2JyaWRnZV9yZWFk X2RldmljZV9yZXYocGRhdGEpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVk IHRvIHJlYWQgY2hpcCByZXZcbiIpOwoKdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldiBoYXMg eW91IGNvdmVyZWQgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZXMuCgo+ICsJCWdvdG8gZXJyX2NvbmZp ZzsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RFQlVHKCJicmlkZ2UgY2hpcCBlbmFibGVkIHN1Y2Nl c3NmdWxseVxuIik7Cj4gKwl9CgpBbmQgYWxzbyB0aGUgZGVidWcgbWVzc2FnZXMgZm9yIHdoYXRl dmVyIGl0cyB3b3J0aC4KCj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2Up Owo+ICsKPiArCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsKPiArCWRldl9zZXRf ZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPiArCj4gKwlwZGF0YS0+YnJpZGdlLmZ1bmNz ID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKPiArCXBkYXRhLT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVu dC0+ZGV2Lm9mX25vZGU7Cj4gKwo+ICsJZHJtX2JyaWRnZV9hZGQoJnBkYXRhLT5icmlkZ2UpOwo+ ICsKPiArCXJldHVybiByZXQ7Cj4gKwo+ICtlcnJfY29uZmlnOgo+ICsJdGlfc25fYnJpZGdlX3Bv d2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKPiArZXJyX2R0X3BhcnNlOgo+ICsJZGV2bV9rZnJlZSgm Y2xpZW50LT5kZXYsIHBkYXRhKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgdGlfc25fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4g KwlpbnQgcmV0ID0gLUVJTlZBTDsKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gaTJj X2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gKwo+ICsJaWYgKCFwZGF0YSkKPiArCQlnb3RvIGVu ZDsKCnBkYXRhIGlzIHZlcnkgdW5saWtlbHkgdG8gYmUgbnVsbCBoZXJlLCBidXQgYXMgbG9uZyBh cyB0aGlzIGlzIGEgbGlnaHQgd2VpZ2h0CmNoZWNrLCBJIGRvbid0IHRoaW5rIGl0IGh1cnRzIHRv byBtdWNoLgoKPiArCj4gKwltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7Cj4gKwltaXBpX2Rz aV9kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+ZHNpKTsKPiArCj4gKwlkcm1fYnJpZGdlX3JlbW92 ZSgmcGRhdGEtPmJyaWRnZSk7Cj4gKwo+ICsJZGlzYWJsZV9pcnEocGRhdGEtPmlycSk7Cj4gKwlm cmVlX2lycShwZGF0YS0+aXJxLCBwZGF0YSk7Cj4gKwo+ICsJdGlfc25fYnJpZGdlX2dwaW9fY29u ZmlndXJlKHBkYXRhLCBmYWxzZSk7Cj4gKwlpMmNfcHV0X2FkYXB0ZXIocGRhdGEtPmRkYyk7Cj4g Kwo+ICsJZGV2bV9rZnJlZSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPiArCj4gK2VuZDoKPiArCXJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0aV9zbl9i cmlkZ2VfaWRbXSA9IHsKPiArCXsgInRpLHNuNjVkc2k4NiIsIDB9LAo+ICsJe30KCk1pc3Npbmcg YSBjb21tYSBvbiB0aGUgZW5kIG9mIHRoZSBlbXB0eSBlbnRyeS4KCj4gK307Cj4gK01PRFVMRV9E RVZJQ0VfVEFCTEUoaTJjLCB0aV9zbl9icmlkZ2VfaWQpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgdGlfc25fYnJpZGdlX21hdGNoX3RhYmxlW10gPSB7Cj4gKwl7LmNv bXBhdGlibGUgPSAidGksc242NWRzaTg2In0sCj4gKwl7fQoKU2FtZS4KCj4gK307Cj4gK01PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IGkyY19kcml2ZXIgdGlfc25fYnJpZGdlX2RyaXZlciA9IHsKPiArCS5kcml2ZXIg PSB7Cj4gKwkJLm5hbWUgPSAidGlfc242NWRzaTg2IiwKPiArCQkub3duZXIgPSBUSElTX01PRFVM RSwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUsCj4gKwl9 LAo+ICsJLnByb2JlID0gdGlfc25fYnJpZGdlX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHRpX3NuX2Jy aWRnZV9yZW1vdmUsCj4gKwkuaWRfdGFibGUgPSB0aV9zbl9icmlkZ2VfaWQsCj4gK307Cj4gKwo+ ICttb2R1bGVfaTJjX2RyaXZlcih0aV9zbl9icmlkZ2VfZHJpdmVyKTsKPiArTU9EVUxFX0RFU0NS SVBUSU9OKCJzbjY1ZHNpODYgRFNJIHRvIGVEUCBicmlkZ2UgZHJpdmVyIik7CgpMb29rcyBsaWtl IHlvdSBhcmUgbWlzc2luZyB0aGUgbW9kdWxlIGxpY2Vuc2UgaGVyZS4KCj4gLS0gCj4gVGhlIFF1 YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1 cm9yYSBGb3J1bSwKPiBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cj4g Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgot LSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIENv ZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0 Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVu byBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=