From mboxrd@z Thu Jan 1 00:00:00 1970 From: spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [[RFC]DPU PATCH 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Thu, 19 Apr 2018 23:48:26 +0530 Message-ID: <60b296efaddb7c1b8cc5c34ae08bd78f@codeaurora.org> References: <1524054002-17869-1-git-send-email-spanda@codeaurora.org> <1524054002-17869-2-git-send-email-spanda@codeaurora.org> <20180419151438.GA18652@jcrouse-lnx.qualcomm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180419151438.GA18652-9PYrDHPZ2Orvke4nUoYGnHL1okKdlPRT@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 T24gMjAxOC0wNC0xOSAyMDo0NCwgSm9yZGFuIENyb3VzZSB3cm90ZToKPiBPbiBXZWQsIEFwciAx OCwgMjAxOCBhdCAwNTo0OTo1OVBNICswNTMwLCBTYW5kZWVwIFBhbmRhIHdyb3RlOgo+PiBBZGQg c3VwcG9ydCBmb3IgVEkncyBzbjY1ZHNpODYgZHNpMmVkcCBicmlkZ2UgY2hpcC4KPj4gVGhlIGNo aXAgY29udmVydHMgRFNJIHRyYW5zbWl0dGVkIHNpZ25hbCB0byBlRFAgc2lnbmFsLAo+PiB3aGlj aCBpcyBmZWQgdG8gdGhlIGNvbm5lY3RlZCBlRFAgcGFuZWwuCj4+IAo+PiBUaGlzIGNoaXAgY2Fu IGJlIGNvbnRyb2xsZWQgdmlhIGVpdGhlciBpMmMgaW50ZXJmYWNlIG9yCj4+IGRzaSBpbnRlcmZh Y2UuIEN1cnJlbnRseSBpbiBkcml2ZXIgYWxsIHRoZSBjb250cm9sIHJlZ2lzdGVycwo+PiBhcmUg YmVpbmcgYWNjZXNzZWQgdGhyb3VnaCBpMmMgaW50ZXJmYWNlIG9ubHkuCj4+IEFsc28gYXMgb2Yg bm93IEhQRCBzdXBwb3J0IGhhcyBub3QgYmVlbiBhZGRlZCB0byBicmlkZ2UKPj4gY2hpcCBkcml2 ZXIuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5OiBTYW5kZWVwIFBhbmRhIDxzcGFuZGFAY29kZWF1cm9y YS5vcmc+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyB8 IDc0MiAKPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgMSBmaWxlIGNo YW5nZWQsIDc0MiBpbnNlcnRpb25zKCspCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+PiAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS90aS1zbjY1ZHNpODYuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw Li5jNzk4ZjJmCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS90aS1zbjY1ZHNpODYuYwo+PiBAQCAtMCwwICsxLDc0MiBAQAo+PiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiAKPiBUaGVyZSBzaG91bGQgYmUgYSBjb3B5cmlnaHQg aGVyZS4KPiAKPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvaW5pdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFw aC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+PiArI2luY2x1 ZGUgPGRybS9kcm1QLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPj4gKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgo+PiArI2luY2x1ZGUg PGRybS9kcm1fcGFuZWwuaD4KPj4gKwo+PiArI2RlZmluZSBTTl9CUklER0VfUkVWSVNJT05fSUQg MHgyCj4+ICsKPj4gKy8qIExpbmsgVHJhaW5pbmcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCj4+ICsj ZGVmaW5lIFNOX0RFVklDRV9SRVZfUkVHCQkJMHgwOAo+PiArI2RlZmluZSBTTl9SRUZDTEtfRlJF UV9SRUcJCQkweDBBCj4+ICsjZGVmaW5lIFNOX0RTSV9MQU5FU19SRUcJCQkweDEwCj4+ICsjZGVm aW5lIFNOX0RTSUFfQ0xLX0ZSRVFfUkVHCQkJMHgxMgo+PiArI2RlZmluZSBTTl9FTkhfRlJBTUVf UkVHCQkJMHg1QQo+PiArI2RlZmluZSBTTl9TU0NfQ09ORklHX1JFRwkJCTB4OTMKPj4gKyNkZWZp bmUgU05fREFUQVJBVEVfQ09ORklHX1JFRwkJCTB4OTQKPj4gKyNkZWZpbmUgU05fUExMX0VOQUJM RV9SRUcJCQkweDBECj4+ICsjZGVmaW5lIFNOX1NDUkFNQkxFX0NPTkZJR19SRUcJCQkweDk1Cj4+ ICsjZGVmaW5lIFNOX0FVWF9XREFUQTBfUkVHCQkJMHg2NAo+PiArI2RlZmluZSBTTl9BVVhfQURE Ul8xOV8xNl9SRUcJCQkweDc0Cj4+ICsjZGVmaW5lIFNOX0FVWF9BRERSXzE1XzhfUkVHCQkJMHg3 NQo+PiArI2RlZmluZSBTTl9BVVhfQUREUl83XzBfUkVHCQkJMHg3Ngo+PiArI2RlZmluZSBTTl9B VVhfTEVOR1RIX1JFRwkJCTB4NzcKPj4gKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcJCQkJMHg3OAo+ PiArI2RlZmluZSBTTl9NTF9UWF9NT0RFX1JFRwkJCTB4OTYKPj4gKyNkZWZpbmUgU05fUEFHRV9T RUxFQ1RfUkVHCQkJMHhGRgo+PiArI2RlZmluZSBTTl9BVVhfUkRBVEEwX1JFRwkJCTB4NzkKPj4g Ky8qIHZpZGVvIGNvbmZpZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPj4gKyNkZWZpbmUgU05fQ0hB X0FDVElWRV9MSU5FX0xFTkdUSF9MT1dfUkVHCTB4MjAKPj4gKyNkZWZpbmUgU05fQ0hBX0FDVElW RV9MSU5FX0xFTkdUSF9ISUdIX1JFRwkweDIxCj4+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9E SVNQTEFZX1NJWkVfTE9XX1JFRwkweDI0Cj4+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQ TEFZX1NJWkVfSElHSF9SRUcJMHgyNQo+PiArI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lE VEhfTE9XX1JFRwkweDJDCj4+ICsjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdI X1JFRwkweDJECj4+ICsjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4 MzAKPj4gKyNkZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MzEKPj4g KyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcJMHgzNAo+PiArI2RlZmlu ZSBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcJCTB4MzYKPj4gKyNkZWZpbmUgU05fQ0hB X0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHCTB4MzgKPj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJ Q0FMX0ZST05UX1BPUkNIX1JFRwkJMHgzQQo+PiArI2RlZmluZSBTTl9EQVRBX0ZPUk1BVF9SRUcJ CQkweDVCCj4+ICsjZGVmaW5lIFNOX0NPTE9SX0JBUl9DT05GSUdfUkVHCQkJMHgzQwo+PiArCj4+ ICsjZGVmaW5lIERQUExMX0NMS19TUkNfUkVGQ0xLCTAKPj4gKyNkZWZpbmUgRFBQTExfQ0xLX1NS Q19EU0lDTEsJMQo+PiArI2RlZmluZSBNSU5fRFNJX0NMS19GUkVRX01IWgk0MAo+PiArCj4+ICtl bnVtIHRpX3NuX2JyaWRnZV9yZWZfY2xrcyB7Cj4+ICsJU05fUkVGX0NMS18xMl9NSFogPSAwLAo+ PiArCVNOX1JFRl9DTEtfMTlfMl9NSFosCj4+ICsJU05fUkVGX0NMS18yNl9NSFosCj4+ICsJU05f UkVGX0NMS18yN19NSFosCj4+ICsJU05fUkVGX0NMS18zOF80X01IWiwKPj4gKwlTTl9SRUZfQ0xL X01BWCwKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCB0aV9zbl9icmlkZ2Ugewo+PiArCXN0cnVjdCBk ZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7Cj4+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgY29ubmVjdG9yOwo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaG9zdF9ub2Rl Owo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTsKPj4gKwkvKiBoYW5kbGUgdG8gdGhl IGNvbm5lY3RlZCBlRFAgcGFuZWwgKi8KPj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPj4g KwlpbnQgaXJxOwo+PiArCXN0cnVjdCBncGlvX2Rlc2MgKmlycV9ncGlvOwo+PiArCS8qIGxpc3Qg b2YgZ3Bpb3MgbmVlZGVkIHRvIGVuYWJsZSB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgKi8KPj4g KwlzdHJ1Y3QgZ3Bpb19kZXNjcyAqZW5hYmxlX2dwaW9zOwo+PiArCXVuc2lnbmVkIGludCBudW1f c3VwcGxpZXM7Cj4+ICsJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKnN1cHBsaWVzOwo+PiAr CXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50Owo+PiArCXN0cnVjdCBpMmNfYWRhcHRlciAq ZGRjOwo+PiArCWJvb2wgcG93ZXJfb247Cj4+ICsJdTMyIG51bV9tb2RlczsKPj4gKwlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSBjdXJyX21vZGU7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHRp X3NuX2JyaWRnZV93cml0ZShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwgdTggcmVnLCB1OCAK Pj4gdmFsKQo+PiArewo+PiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwZGF0YS0+aTJj X2NsaWVudDsKPj4gKwl1OCBidWZbMl0gPSB7cmVnLCB2YWx9Owo+PiArCXN0cnVjdCBpMmNfbXNn IG1zZyA9IHsKPj4gKwkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCj4+ICsJCS5mbGFncyA9IDAsCj4+ ICsJCS5sZW4gPSAyLAo+PiArCQkuYnVmID0gYnVmLAo+PiArCX07Cj4+ICsKPj4gKwlpZiAoaTJj X3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZywgMSkgPCAxKSB7Cj4+ICsJCURSTV9FUlJP UigiaTJjIHdyaXRlIGZhaWxlZFxuIik7Cj4+ICsJCXJldHVybiAtRUlPOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZWFk KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLAo+PiArCQkJCQl1OCByZWcsIGNoYXIgKmJ1Ziwg dTMyIHNpemUpCj4+ICt7Cj4+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBkYXRhLT5p MmNfY2xpZW50Owo+PiArCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKPj4gKwkJewo+PiArCQkJ LmFkZHIgPSBjbGllbnQtPmFkZHIsCj4+ICsJCQkuZmxhZ3MgPSAwLAo+PiArCQkJLmxlbiA9IDEs Cj4+ICsJCQkuYnVmID0gJnJlZywKPj4gKwkJfSwKPj4gKwkJewo+PiArCQkJLmFkZHIgPSBjbGll bnQtPmFkZHIsCj4+ICsJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKPj4gKwkJCS5sZW4gPSBzaXplLAo+ PiArCQkJLmJ1ZiA9IGJ1ZiwKPj4gKwkJfQo+PiArCX07Cj4+ICsKPj4gKwlpZiAoaTJjX3RyYW5z ZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAyKSAhPSAyKSB7Cj4+ICsJCURSTV9FUlJPUigiaTJj IHJlYWQgZmFpbGVkXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU87Cj4+ICsJfQo+PiArCj4+ICsJcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9ncGlvX2NvbmZp Z3VyZShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwgCj4+IGJvb2wgb24pCj4+ICt7Cj4+ICsJ aW50IHZhbHVlLCBpID0gMCwgbnVtID0gMDsKPj4gKwlpbnQgKnZhbHVlX2FycmF5ID0gTlVMTDsK Pj4gKwo+PiArCWlmICghcGRhdGEpCj4+ICsJCXJldHVybjsKPiAKPiBwZGF0YSBzaG91bGQgYWx3 YXlzIGJlIHZhbGlkIGhlcmUuCj4gCj4+ICsJdmFsdWUgPSBvbiA/IDEgOiAwOwo+PiArCW51bSA9 IHBkYXRhLT5lbmFibGVfZ3Bpb3MtPm5kZXNjczsKPj4gKwl2YWx1ZV9hcnJheSA9IGttYWxsb2Mo bnVtICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwo+PiArCWlmICh2YWx1ZV9hcnJheSkgewo+ PiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCj4+ICsJCQl2YWx1ZV9hcnJheVtpXSA9IHZh bHVlOwo+PiArCQlncGlvZF9zZXRfYXJyYXlfdmFsdWUobnVtLCBwZGF0YS0+ZW5hYmxlX2dwaW9z LT5kZXNjLAo+PiArCQkJCSAgICAgIHZhbHVlX2FycmF5KTsKPj4gKwkJa2ZyZWUodmFsdWVfYXJy YXkpOwo+PiArCX0KPj4gKwo+PiArCWlmIChwZGF0YS0+aXJxX2dwaW8pCj4+ICsJCWdwaW9kX3Nl dF92YWx1ZShwZGF0YS0+aXJxX2dwaW8sIHZhbHVlKTsKPj4gKwo+PiArCURSTV9ERUJVRygiY29u ZmlnIHRvOiAlZFxuIiwgdmFsdWUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9i cmlkZ2VfcG93ZXJfY3RybChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwgYm9vbCAKPj4gZW5h YmxlKQo+PiArewo+PiArCXN0YXRpYyBpbnQgcmVmX2NvdW50Owo+PiArCj4+ICsJaWYgKCFwZGF0 YSkKPj4gKwkJcmV0dXJuOwo+IAo+IHBkYXRhIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgaGVyZS4K PiAKPj4gKwlpZiAoZW5hYmxlKQo+PiArCQlyZWZfY291bnQrKzsKPj4gKwllbHNlCj4+ICsJCXJl Zl9jb3VudC0tOwo+PiArCj4+ICsJaWYgKGVuYWJsZSAmJiAocmVmX2NvdW50ID09IDEpKSB7Cj4+ ICsJCXRpX3NuX2JyaWRnZV9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgdHJ1ZSk7Cj4+ICsKPj4gKwkJ aWYgKHJlZ3VsYXRvcl9idWxrX2VuYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLAo+PiArCQkJCQkJ cGRhdGEtPnN1cHBsaWVzKSkgewo+PiArCQkJRFJNX0VSUk9SKCJicmlkZ2UgcmVndWxhdG9yIGVu YWJsZSBmYWlsZWRcbiIpOwo+PiArCQkJcmV0dXJuOwo+PiArCQl9Cj4+ICsJCXBkYXRhLT5wb3dl cl9vbiA9IHRydWU7Cj4+ICsJfSBlbHNlIGlmICghZW5hYmxlICYmICFyZWZfY291bnQpIHsKPj4g KwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+c3Vw cGxpZXMpOwo+PiArCj4+ICsJCXRpX3NuX2JyaWRnZV9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgZmFs c2UpOwo+PiArCQlwZGF0YS0+cG93ZXJfb24gPSBmYWxzZTsKPj4gKwl9IGVsc2Ugewo+PiArCQlE Uk1fREVCVUcoInRpX3NuX2JyaWRnZSBwb3dlciBjdHJsOiAlZCByZWZjb3VudDogJWRcbiIsCj4+ ICsJCQkJCQkJZW5hYmxlLCByZWZfY291bnQpOwo+PiArCX0KPj4gK30KPj4gKwo+PiArLyogQ29u bmVjdG9yIGZ1bmNzICovCj4+ICtzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqCj4+ICtjb25u ZWN0b3JfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ ICt7Cj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB0aV9zbl9icmlk Z2UsIGNvbm5lY3Rvcik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX2Nv bm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgCj4+ICpjb25uZWN0b3IpCj4+ ICt7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25f YnJpZGdlKGNvbm5lY3Rvcik7Cj4+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+ cGFuZWw7Cj4+ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4+ICsKPj4gKwlpZiAocGFuZWwpIHsKPj4g KwkJRFJNX0RFQlVHKCJnZXQgbW9kZSBmcm9tIGNvbm5lY3RlZCBkcm1fcGFuZWxcbiIpOwo+PiAr CQlwZGF0YS0+bnVtX21vZGVzID0gZHJtX3BhbmVsX2dldF9tb2RlcyhwYW5lbCk7Cj4+ICsJfSBl bHNlIHsKPj4gKwkJLyogZ2V0IGZyb20gRURJRCAqLwo+PiArCQlpZiAoIXBkYXRhLT5kZGMpCj4+ ICsJCQlyZXR1cm4gMDsKPj4gKwkJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIHRydWUp Owo+PiArCQllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgcGRhdGEtPmRkYyk7Cj4+ICsJ CWlmIChlZGlkKSB7Cj4+ICsJCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVy dHkoY29ubmVjdG9yLAo+PiArCQkJCQkJCQllZGlkKTsKPj4gKwkJCXBkYXRhLT5udW1fbW9kZXMg PSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPj4gKwkJCWRybV9lZGlkX3Rv X2VsZChjb25uZWN0b3IsIGVkaWQpOwo+PiArCQkJa2ZyZWUoZWRpZCk7Cj4+ICsJCX0gZWxzZSB7 Cj4+ICsJCQlEUk1fREVCVUcoImZhaWxlZCB0byBnZXQgZWRpZFxuIik7Cj4+ICsJCX0KPj4gKwkJ dGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKPj4gKwl9Cj4+ICsKPj4gKwly ZXR1cm4gcGRhdGEtPm51bV9tb2RlczsKPj4gK30KPj4gKwo+PiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzCj4+ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPj4gKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUpCj4+ICt7Cj4+ICsJLyogbWF4aW11bSBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBpcyA0 SyBhdCA2MCBmcHMgKi8KPj4gKwlpZiAobW9kZS0+Y2xvY2sgPiA1OTQwMDApCj4+ICsJCXJldHVy biBNT0RFX0NMT0NLX0hJR0g7Cj4+ICsKPj4gKwlyZXR1cm4gTU9ERV9PSzsKPj4gK30KPj4gKwo+ PiArc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAKPj4gdGlfc25fYnJp ZGdlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4+ICsJLmdldF9tb2RlcyA9IHRpX3NuX2Jy aWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzLAo+PiArCS5tb2RlX3ZhbGlkID0gdGlfc25fYnJpZGdl X2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMKPj4gK3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgCj4+IGZvcmNlKQo+PiArewo+PiArCXN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0 b3IpOwo+PiArCj4+ICsJLyoqCj4+ICsJICogVE9ETzogQ3VycmVudGx5IGlmIGRybV9wYW5lbCBp cyBwcmVzZW50LCB0aGVuIGFsd2F5cwo+PiArCSAqIHJldHVybiB0aGUgc3RhdHVzIGFzIGNvbm5l Y3RlZC4gTmVlZCB0byBhZGQgc3VwcG9ydCB0byBkZXRlY3QKPj4gKwkgKiBkZXZpY2Ugc3RhdGUg Zm9yIG5vIHBhbmVsKGhvdCBwbHVnZ2FibGUpIHNjZW5hcmlvcy4KPj4gKwkgKi8KPj4gKwlpZiAo cGRhdGEtPnBhbmVsKQo+PiArCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cj4+ ICsJZWxzZQo+PiArCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB0aV9zbl9i cmlkZ2VfY29ubmVjdG9yX2Z1bmNzIAo+PiA9IHsKPj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxw ZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPj4gKwkuZGV0ZWN0ID0gdGlfc25fYnJp ZGdlX2Nvbm5lY3Rvcl9kZXRlY3QsCj4+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFu dXAsCj4+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAo+PiAr CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gCj4+IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9kdXBsaWNhdGVfc3RhdGUsCj4+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMg c3RydWN0IHRpX3NuX2JyaWRnZSAqYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2Jy aWRnZSAKPj4gKmJyaWRnZSkKPj4gK3sKPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwg c3RydWN0IHRpX3NuX2JyaWRnZSwgYnJpZGdlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0 aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2VfcmV2KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+ PiArewo+PiArCXU4IHJldiA9IDA7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwlyZXQgPSB0 aV9zbl9icmlkZ2VfcmVhZChwZGF0YSwgU05fREVWSUNFX1JFVl9SRUcsICZyZXYsIDEpOwo+PiAr CWlmIChyZXQpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCWlmIChyZXYgPT0gU05fQlJJREdF X1JFVklTSU9OX0lEKSB7Cj4+ICsJCURSTV9ERUJVRygidGlfc25fYnJpZGdlIHJldmlzaW9uIGlk OiAweCV4XG4iLCByZXYpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCURSTV9FUlJPUigidGlfc25fYnJp ZGdlIHJldmlzaW9uIGlkIG1pc21hdGNoXG4iKTsKPiAKPiBJIGZpbmQgaXQgdXNlZnVsIHRvIHBy aW50IHdoYXQgdGhlIG1pc21hdGNoIGlzIHNvIHlvdSBjYW4gZGVidWcgbW9yZQo+IGVmZmVjdGl2 ZWx5Lgo+IAo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArZXhpdDoKPj4gKwly ZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRpX3Nu X2JyaWRnZV9zdXBwbHlfbmFtZXNbXSA9IHsKPj4gKwkidmNjaW8iLAo+PiArCSJ2Y2NhIiwKPj4g K307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMoc3Ry dWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50IGk7Cj4+ICsJ aW50IHJldDsKPj4gKwo+PiArCXBkYXRhLT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHRpX3Nu X2JyaWRnZV9zdXBwbHlfbmFtZXMpOwo+PiArCj4+ICsJcGRhdGEtPnN1cHBsaWVzID0gZGV2bV9r Y2FsbG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMsCj4+ICsJCQkJICAgICBzaXpl b2YoKnBkYXRhLT5zdXBwbGllcyksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcGRhdGEtPnN1cHBs aWVzKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBwZGF0 YS0+bnVtX3N1cHBsaWVzOyBpKyspCj4+ICsJCXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0 aV9zbl9icmlkZ2Vfc3VwcGx5X25hbWVzW2ldOwo+PiArCj4+ICsJcmV0ID0gZGV2bV9yZWd1bGF0 b3JfYnVsa19nZXQocGRhdGEtPmRldiwKPj4gKwkJCXBkYXRhLT5udW1fc3VwcGxpZXMsIHBkYXRh LT5zdXBwbGllcyk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+IAo+IE5pdDogeW91IGNhbiBjb21i aW5lIHRoZSBhYm92ZSB0d28gbGluZXMgYW5kIGdldCByaWQgb2YgJ3JldCcuCj4gCj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9ub2Rl LCAqcG9ydCwgKmVuZHBvaW50Owo+PiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gTlVMTDsK Pj4gKwo+PiArCXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChwZGF0YS0+ZGV2LT5vZl9u b2RlLCAxKTsKPj4gKwlpZiAocG9ydCkgewo+PiArCQllbmRwb2ludCA9IG9mX2dldF9jaGlsZF9i eV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOwo+PiArCQlvZl9ub2RlX3B1dChwb3J0KTsKPj4gKwkJ aWYgKCFlbmRwb2ludCkgewo+PiArCQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8gb3V0cHV0IGVu ZHBvaW50IGZvdW5kXG4iKTsKPj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwo+PiArCQlw YW5lbF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7Cj4+ ICsJCW9mX25vZGVfcHV0KGVuZHBvaW50KTsKPj4gKwkJaWYgKCFwYW5lbF9ub2RlKSB7Cj4+ICsJ CQlkZXZfZXJyKHBkYXRhLT5kZXYsICJubyBvdXRwdXQgbm9kZSBmb3VuZFxuIik7Cj4+ICsJCQln b3RvIGVycm9yOwo+PiArCQl9Cj4+ICsKPj4gKwkJcGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChw YW5lbF9ub2RlKTsKPj4gKwkJb2Zfbm9kZV9wdXQocGFuZWxfbm9kZSk7Cj4+ICsJCWlmICghcGFu ZWwpIHsKPj4gKwkJCWRldl9lcnIocGRhdGEtPmRldiwgIm5vIHBhbmVsIG5vZGUgZm91bmRcbiIp Owo+PiArCQkJZ290byBlcnJvcjsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5wYW5l bCA9IHBhbmVsOwo+PiArCWRybV9wYW5lbF9hdHRhY2gocGFuZWwsICZwZGF0YS0+Y29ubmVjdG9y KTsKPj4gKwo+PiArCXJldHVybjsKPj4gKwo+PiArZXJyb3I6Cj4+ICsJcGRhdGEtPnBhbmVsID0g TlVMTDsKPiAKPiBJcyB0aGlzIG5lZWRlZD8gIGlzbid0IHBkYXRhLT5wYW5lbCBhbHJlYWR5IG51 bGwgd2hlbiB3ZSBjb21lIGluPyAgSWYgCj4gc28KPiB5b3UgY2FuIGp1c3QgcmV0dXJuIHRoZSBl cnJvciBjYXNlcyBhbmQgcmVtb3ZlIHRoZSBsYWJlbC4KCkp1c3QgbWFraW5nIHN1cmUgaXQgaXMg TlVMTCwgbm90IHNvbWUgdW5pbml0aWFsaXplZCB2YWx1ZSwgc2luY2UgdGhpcyAKd2lsbCBiZSB1 c2VkIHRocm91Z2ggb3V0IHRoZQpkcml2ZXIgdG8gZGV0ZWN0IGlmIGEgcGFuZWwgaXMgY29ubmVj dGVkIG9yIG5vdCBhbmQgSERQIG5lZWRzIHRvIGJlIApzdXBwb3J0ZWQgb3Igbm90Lgo+IAo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdDsKPj4gKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRh dGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+ICsJaW50IHJldDsKPj4gKwlj b25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsgLnR5cGUgPSAidGlfc25f YnJpZGdlIiwKPj4gKwkJCQkJCSAgIC5jaGFubmVsID0gMCwKPj4gKwkJCQkJCSAgIC5ub2RlID0g TlVMTCwKPj4gKwkJCQkJCSB9Owo+PiArCj4+ICsJaWYgKCFicmlkZ2UtPmVuY29kZXIpIHsKPj4g KwkJRFJNX0VSUk9SKCJQYXJlbnQgZW5jb2RlciBvYmplY3Qgbm90IGZvdW5kIik7Cj4gCj4gTWlz c2luZyBcbiBvbiB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCj4gCj4+ICsJCXJldHVybiAtRU5PREVW Owo+PiArCX0KPj4gKwo+PiArCS8qIEhQRCBub3Qgc3VwcG9ydGVkICovCj4+ICsJcGRhdGEtPmNv bm5lY3Rvci5wb2xsZWQgPSAwOwo+PiArCj4+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJy aWRnZS0+ZGV2LCAmcGRhdGEtPmNvbm5lY3RvciwKPj4gKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25u ZWN0b3JfZnVuY3MsCj4+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApOwo+IAo+IFRoZSBh Y3R1YWwgI2RlZmluZSBpcyBDT05OTkVDVE9SX2VEUD8KeWVzLgo+IAo+PiArCWlmIChyZXQpIHsK Pj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1c biIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCWRybV9jb25uZWN0b3JfaGVs cGVyX2FkZCgmcGRhdGEtPmNvbm5lY3RvciwKPj4gKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0 b3JfaGVscGVyX2Z1bmNzKTsKPj4gKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIo JnBkYXRhLT5jb25uZWN0b3IsIAo+PiBicmlkZ2UtPmVuY29kZXIpOwo+PiArCj4+ICsJaG9zdCA9 IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBkYXRhLT5ob3N0X25vZGUpOwo+PiArCWlm ICghaG9zdCkgewo+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsK PiAKPiBUaGVyZSBpc24ndCBhbnkgdGVhciBkb3duIHRoYXQgbmVlZHMgdG8gaGFwcGVuIGhlcmU/ Cj4gCj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwo+PiArCWRzaSA9IG1pcGlfZHNp X2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZvKTsKPj4gKwlpZiAoSVNfRVJSKGRzaSkp IHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOwo+PiAr CQlyZXQgPSBQVFJfRVJSKGRzaSk7Cj4+ICsJCWdvdG8gZXJyX2RzaV9kZXZpY2U7Cj4gCj4gQWJv dmUgeW91IHJldHVybiBkaXJlY3RseSBidXQgaGVyZSB5b3UgZ290byBhIHJldHVybi4gIFlvdSBz aG91bGQgdXNlIAo+IHRoZSBzYW1lCj4gY29uc2lzdGVudCBhcHByb2FjaCBpbiBib3RoIGNhc2Vz Lgo+IAo+PiArCX0KPj4gKwo+PiArCS8qIFRPRE86IHNldHRpbmcgdG8gNCBsYW5lcyBhbHdheXMg Zm9yIG5vdyAqLwo+PiArCWRzaS0+bGFuZXMgPSA0Owo+PiArCWRzaS0+Zm9ybWF0ID0gTUlQSV9E U0lfRk1UX1JHQjg4ODsKPj4gKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVP IHwgCj4+IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSB8Cj4+ICsJCQkgIE1JUElfRFNJ X01PREVfRU9UX1BBQ0tFVCB8IE1JUElfRFNJX01PREVfVklERU9fSFNFOwo+PiArCj4+ICsJcmV0 ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gYXR0YWNoIGRzaSB0byBob3N0XG4iKTsKPj4gKwkJZ290byBlcnJfZHNp X2F0dGFjaDsKPj4gKwl9Cj4+ICsKPj4gKwlwZGF0YS0+ZHNpID0gZHNpOwo+PiArCj4+ICsJRFJN X0RFQlVHKCJicmlkZ2UgYXR0YWNoZWRcbiIpOwo+PiArCS8qIGF0dGFjaCBwYW5lbCB0byBicmlk Z2UgKi8KPj4gKwl0aV9zbl9icmlkZ2VfYXR0YWNoX3BhbmVsKHBkYXRhKTsKPj4gKwo+PiArCXJl dHVybiAwOwo+PiArCj4+ICtlcnJfZHNpX2F0dGFjaDoKPj4gKwltaXBpX2RzaV9kZXZpY2VfdW5y ZWdpc3Rlcihkc2kpOwo+PiArZXJyX2RzaV9kZXZpY2U6Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UsCj4+ICsJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ PiArCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCj4+ICt7Cj4+ICsJ c3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRn ZSk7Cj4+ICsKPj4gKwlEUk1fREVCVUcoIm1vZGVfc2V0OiBoZGlzcGxheT0lZCwgdmRpc3BsYXk9 JWQsIHZyZWZyZXNoPSVkLCAKPj4gY2xvY2s9JWRcbiIsCj4+ICsJCWFkal9tb2RlLT5oZGlzcGxh eSwgYWRqX21vZGUtPnZkaXNwbGF5LAo+PiArCQlhZGpfbW9kZS0+dnJlZnJlc2gsIGFkal9tb2Rl LT5jbG9jayk7Cj4+ICsKPj4gKwlkcm1fbW9kZV9jb3B5KCZwZGF0YS0+Y3Vycl9tb2RlLCBhZGpf bW9kZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9kaXNhYmxlKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4+ICt7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+ICsJc3RydWN0IGRybV9w YW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4+ICsKPj4gKwlpZiAocGFuZWwpIHsKPj4gKwkJ ZHJtX3BhbmVsX2Rpc2FibGUocGFuZWwpOwo+PiArCQlkcm1fcGFuZWxfdW5wcmVwYXJlKHBhbmVs KTsKPj4gKwl9Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2Up Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZW5hYmxlKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCj4+ICt7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEg PSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+ICsJc3RydWN0IGRybV9wYW5lbCAq cGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUg PSAmcGRhdGEtPmN1cnJfbW9kZTsKPj4gKwl1MzIgYml0X3JhdGVfbWh6LCBjbGtfZnJlcV9taHo7 Cj4+ICsJdTggdmFsID0gMDsKPj4gKwo+PiArCWlmICghcGRhdGEtPm51bV9tb2RlcykKPj4gKwkJ cmV0dXJuOwo+PiArCj4+ICsJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIHRydWUpOwo+ PiArCj4+ICsJaWYgKHBhbmVsKQo+PiArCQlkcm1fcGFuZWxfcHJlcGFyZShwYW5lbCk7Cj4+ICsK Pj4gKwkvKiBDTEtfU1JDIGNvbmZpZyAqLwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwg U05fUkVGQ0xLX0ZSRVFfUkVHLAo+PiArCQkJKERQUExMX0NMS19TUkNfUkVGQ0xLIHwgKFNOX1JF Rl9DTEtfMTlfMl9NSFogPDwgMHgxKSkpOwo+PiArCj4+ICsJLyogRFNJX0EgbGFuZSBjb25maWcg Ki8KPj4gKwl0aV9zbl9icmlkZ2VfcmVhZChwZGF0YSwgU05fRFNJX0xBTkVTX1JFRywgJnZhbCwg MHgxKTsKPj4gKwl2YWwgfD0gKCgweDQgLSBwZGF0YS0+ZHNpLT5sYW5lcykgJiAweDAzKSA8PCAw eDM7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EU0lfTEFORVNfUkVHLCB2YWwp Owo+PiArCj4+ICsJLyogRFAgbGFuZSBjb25maWcgKi8KPj4gKwl0aV9zbl9icmlkZ2VfcmVhZChw ZGF0YSwgU05fU1NDX0NPTkZJR19SRUcsICZ2YWwsIDB4MSk7Cj4+ICsJdmFsIHw9ICgocGRhdGEt PmRzaS0+bGFuZXMgLSAweDEpICYgMHgwMykgPDwgMHg0Owo+PiArCXRpX3NuX2JyaWRnZV93cml0 ZShwZGF0YSwgU05fU1NDX0NPTkZJR19SRUcsIHZhbCk7Cj4+ICsKPj4gKwkvKiBzZXQgZHNpIGNs ayBmcmVxdWVuY3kgdmFsdWUgKi8KPj4gKwliaXRfcmF0ZV9taHogPSAobW9kZS0+Y2xvY2sgLyAx MDAwKSAqCj4+ICsJCQltaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKHBkYXRhLT5kc2ktPmZv cm1hdCk7Cj4+ICsJY2xrX2ZyZXFfbWh6ID0gYml0X3JhdGVfbWh6IC8gKHBkYXRhLT5kc2ktPmxh bmVzICogMik7Cj4+ICsJLyogZm9yIGVhY2ggaW5jcmVtZW50IGluIHZhbCwgZnJlcXVlbmN5IGlu Y3JlYXNlcyBieSA1TUh6ICovCj4+ICsJdmFsID0gKE1JTl9EU0lfQ0xLX0ZSRVFfTUhaIC8gMHg1 KSArCj4+ICsJCSgoKGNsa19mcmVxX21oeiAtIE1JTl9EU0lfQ0xLX0ZSRVFfTUhaKSAvIDB4NSkg JiAweEZGKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RTSUFfQ0xLX0ZSRVFf UkVHLCB2YWwpOwo+PiArCj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EQVRBUkFU RV9DT05GSUdfUkVHLCAweDgwKTsgLyogc2V0IEhCUiAKPj4gKi8KPj4gKwo+PiArCXRpX3NuX2Jy aWRnZV93cml0ZShwZGF0YSwgU05fUExMX0VOQUJMRV9SRUcsIDB4MSk7IC8qIEVuYWJsZSBQTEwg Ki8KPj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwMDAxKTsKPj4gKwo+PiArCS8qIERQQ0QgUmVn aXN0ZXIgMHgwMDEwQSBpbiBTaW5rICovCj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBT Tl9BVVhfV0RBVEEwX1JFRywgMHgwMSk7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBT Tl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0 YSwgU05fQVVYX0FERFJfMTVfOF9SRUcsIDB4MDEpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShw ZGF0YSwgU05fQVVYX0FERFJfN18wX1JFRywgMHgwQSk7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRl KHBkYXRhLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRl KHBkYXRhLCBTTl9BVVhfQ01EX1JFRywgMHg4MSk7Cj4+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAx MDAwMSk7Cj4+ICsKPj4gKwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlICovCj4+ICsJ dGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9NTF9UWF9NT0RFX1JFRywgMHgwQSk7Cj4+ICsJ dXNsZWVwX3JhbmdlKDIwMDAwLCAyMDAwMSk7Cj4+ICsKPj4gKwkvKiBjb25maWcgdmlkZW8gcGFy YW1ldGVycyAqLwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX0FDVElWRV9M SU5FX0xFTkdUSF9MT1dfUkVHLAo+PiArCQkJbW9kZS0+aGRpc3BsYXkgJiAweEZGKTsKPj4gKwl0 aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9S RUcsCj4+ICsJCQkobW9kZS0+aGRpc3BsYXkgPj4gMHg4KSAmIDB4RkYpOwo+PiArCXRpX3NuX2Jy aWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVHLAo+ PiArCQkJbW9kZS0+dmRpc3BsYXkgJiAweEZGKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRh dGEsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcsCj4+ICsJCQkobW9kZS0+ aGRpc3BsYXkgPj4gMHg4KSAmIDB4RkYpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwg U05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4+ICsJCQkobW9kZS0+aHRvdGFsIC0g bW9kZS0+aHN5bmNfZW5kKSAmIDB4RkYpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwg U05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+PiArCQkJKChtb2RlLT5odG90YWwg LSBtb2RlLT5oc3luY19lbmQpID4+IDB4OCkgJiAweEZGKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3Jp dGUocGRhdGEsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAo+PiArCQkJKG1vZGUt PnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZCkgJiAweEZGKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3Jp dGUocGRhdGEsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKPj4gKwkJCSgobW9k ZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kKSA+PiAweDgpICYgMHhGRik7Cj4+ICsJdGlfc25f YnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfSE9SSVpPTlRBTF9CQUNLX1BPUkNIX1JFRywKPj4g KwkJCShtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSAmIDB4RkYpOwo+PiArCXRp X3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAo+ PiArCQkJKG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXkpICYgMHhGRik7Cj4+ICsJ dGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9S RUcsCj4+ICsJCQkobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQpICYgMHhGRik7 Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9S Q0hfUkVHLAo+PiArCQkJKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4 RkYpOwo+PiArCWlmIChwZGF0YS0+ZHNpLT5mb3JtYXQgPT0gTUlQSV9EU0lfRk1UX1JHQjg4OCkK Pj4gKwkJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EQVRBX0ZPUk1BVF9SRUcsIDB4MDAp Owo+PiArCWVsc2UKPj4gKwkJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9EQVRBX0ZPUk1B VF9SRUcsIDB4MDEpOwo+PiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTAwMDEpOwo+PiArCj4+ICsJ LyogZW5hYmxlIHZpZGVvIHN0cmVhbSAqLwo+PiArCXRpX3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBT Tl9FTkhfRlJBTUVfUkVHLCAmdmFsLCAweDEpOwo+PiArCXZhbCB8PSBCSVQoMyk7Cj4+ICsJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9FTkhfRlJBTUVfUkVHLCB2YWwpOwo+PiArCj4+ICsJ aWYgKHBhbmVsKQo+PiArCQlkcm1fcGFuZWxfZW5hYmxlKHBhbmVsKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIHRpX3NuX2JyaWRnZV9mdW5jcyA9 IHsKPj4gKwkuYXR0YWNoID0gdGlfc25fYnJpZGdlX2F0dGFjaCwKPj4gKwkuZW5hYmxlID0gdGlf c25fYnJpZGdlX2VuYWJsZSwKPj4gKwkuZGlzYWJsZSA9IHRpX3NuX2JyaWRnZV9kaXNhYmxlLAo+ PiArCS5tb2RlX3NldCA9IHRpX3NuX2JyaWRnZV9tb2RlX3NldCwKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2dwaW9zKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJaWYgKCFwZGF0YSB8fCAhcGRh dGEtPmRldikKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gCj4gQm90aCBvZiB0aGVzZSBhcmUga25v d24gdG8gYmUgdmFsaWQgYXQgdGhpcyBwb2ludC4KPiAKPj4gKwlwZGF0YS0+ZW5hYmxlX2dwaW9z ID0gZGV2bV9ncGlvZF9nZXRfYXJyYXkocGRhdGEtPmRldiwKPj4gKwkJCQkJCSJlbmFibGUiLCBH UElPRF9PVVRfTE9XKTsKPj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpb3MpKSB7Cj4+ ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbyBmcm9tIERUXG4iKTsKPj4g KwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW9zKTsKPj4gKwkJZ290byBleGl0Owo+ PiArCX0KPj4gKwo+PiArCXBkYXRhLT5pcnFfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFs KHBkYXRhLT5kZXYsICJpcnEiLAo+PiArCQkJCQkJICBHUElPRF9PVVRfTE9XKTsKPj4gKwlpZiAo SVNfRVJSKHBkYXRhLT5pcnFfZ3BpbykpCj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBp cnEgZ3BpbyBmcm9tIERUXG4iKTsKPiAKPiBZb3UgbmVlZCB0byBzZXQgcmV0IHRvIFBUUl9FUlIo cGRhdGEtPmlycV9ncGlvKSBoZXJlLgo+IAo+PiArCj4+ICtleGl0Ogo+PiArCXJldHVybiByZXQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0 cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+PiArewo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2RlOwo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25v ZGU7Cj4+ICsKPj4gKwllbmRfbm9kZSA9IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKG5w LCAwLCAwKTsKPj4gKwlpZiAoIWVuZF9ub2RlKSB7Cj4+ICsJCURSTV9FUlJPUigicmVtb3RlIGVu ZHBvaW50IG5vdCBmb3VuZFxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwo+ PiArCXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVu ZF9ub2RlKTsKPj4gKwlvZl9ub2RlX3B1dChlbmRfbm9kZSk7Cj4+ICsJaWYgKCFwZGF0YS0+aG9z dF9ub2RlKSB7Cj4+ICsJCURSTV9FUlJPUigicmVtb3RlIG5vZGUgbm90IGZvdW5kXG4iKTsKPj4g KwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0X25v ZGUpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25f YnJpZGdlX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4+ICsJIGNvbnN0IHN0cnVj dCBpMmNfZGV2aWNlX2lkICppZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0 YTsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRkY19ub2RlOwo+PiArCWludCByZXQgPSAwOwo+ PiArCj4+ICsJaWYgKCFjbGllbnQgfHwgIWNsaWVudC0+ZGV2Lm9mX25vZGUpIHsKPiAKPiBJIGRv dWJ0IHRoZSBpMmMgcHJvYmUgd291bGQgc2VuZCB5b3UgYSBOVUxMIHZhbHVlIGZvciBjbGllbnQg YW5kIHlvdSAKPiBhcmUKPiBtYXRjaGluZyBvbiBhIERUIGRldmljZSwgc28gdGhlcmUgaXMgYSBw cmV0dHkgc29saWQgYXJndW1lbnQgdGhhdAo+IGNsaWVudC0+ZGV2Lm9mX25vZGUgd2lsbCBiZSB2 YWxpZCBhcyB3ZWxsLgo+IAo+PiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+PiAr CQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoIWkyY19jaGVja19mdW5jdGlv bmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewo+PiArCQlEUk1fRVJST1Io ImRldmljZSBkb2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ ICsJfQo+PiArCj4+ICsJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAo+PiArCQlz aXplb2Yoc3RydWN0IHRpX3NuX2JyaWRnZSksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcGRhdGEp Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJcGRhdGEtPnBvd2VyX29uID0gZmFsc2U7 Cj4+ICsJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsKPj4gKwlwZGF0YS0+aTJjX2NsaWVudCA9 IGNsaWVudDsKPj4gKwlEUk1fREVCVUcoIkkyQyBhZGRyZXNzIGlzICV4XG4iLCBjbGllbnQtPmFk ZHIpOwo+PiArCj4+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHBkYXRhKTsK Pj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIGRldmljZSB0 cmVlXG4iKTsKPiAKPiB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QgcHJpbnRzIGEgZXJyb3Ig bWVzc2FnZSBvbiBldmVyeSBmYWlsdXJlIAo+IHBvaW50IC0geW91Cj4gZG9uJ3QgbmVlZCBhbm90 aGVyIG9uZSBoZXJlLgo+IAo+PiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPj4gKwl9Cj4+ICsKPj4g KwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZ3Bpb3MocGRhdGEpOwo+PiArCWlmIChyZXQpIHsK Pj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgZ3Bpb3MgZnJvbSBEVFxuIik7Cj4gCj4g U2FtZSAtIGFsbCB0aGUgcGF0aHMgYXJlIGNvdmVyZWQgaW4gdGhlIGNoaWxkIGZ1bmN0aW9uLgo+ IAo+PiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSB0aV9zbl9i cmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhwZGF0YSk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlEUk1f RVJST1IoImZhaWxlZCB0byBwYXJzZSByZWd1bGF0b3JzXG4iKTsKPj4gKwkJZ290byBlcnJfZHRf cGFyc2U7Cj4+ICsJfQo+PiArCj4+ICsJZGRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkYXRh LT5kZXYtPm9mX25vZGUsICJkZGMtaTJjLWJ1cyIsIDApOwo+PiArCWlmIChkZGNfbm9kZSkgewo+ PiArCQlwZGF0YS0+ZGRjID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsK Pj4gKwkJb2Zfbm9kZV9wdXQoZGRjX25vZGUpOwo+PiArCQlpZiAoIXBkYXRhLT5kZGMpIHsKPj4g KwkJCWRldl9kYmcocGRhdGEtPmRldiwgImZhaWxlZCB0byByZWFkIGRkYyBub2RlXG4iKTsKPj4g KwkJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+PiArCQl9Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZGV2 X2RiZyhwZGF0YS0+ZGV2LCAibm8gZGRjIHByb3BlcnR5IGZvdW5kXG4iKTsKPj4gKwl9Cj4+ICsK Pj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7Cj4+ICsJcmV0ID0gdGlf c25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldihwZGF0YSk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlE Uk1fRVJST1IoImZhaWxlZCB0byByZWFkIGNoaXAgcmV2XG4iKTsKPiAKPiB0aV9zbl9icmlkZ2Vf cmVhZF9kZXZpY2VfcmV2IGhhcyB5b3UgY292ZXJlZCB3aXRoIHRoZSBlcnJvciBtZXNzYWdlcy4K PiAKPj4gKwkJZ290byBlcnJfY29uZmlnOwo+PiArCX0gZWxzZSB7Cj4+ICsJCURSTV9ERUJVRygi YnJpZGdlIGNoaXAgZW5hYmxlZCBzdWNjZXNzZnVsbHlcbiIpOwo+PiArCX0KPiAKPiBBbmQgYWxz byB0aGUgZGVidWcgbWVzc2FnZXMgZm9yIHdoYXRldmVyIGl0cyB3b3J0aC4KPiAKPj4gKwl0aV9z bl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOwo+PiArCj4+ICsJaTJjX3NldF9jbGll bnRkYXRhKGNsaWVudCwgcGRhdGEpOwo+PiArCWRldl9zZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYs IHBkYXRhKTsKPj4gKwo+PiArCXBkYXRhLT5icmlkZ2UuZnVuY3MgPSAmdGlfc25fYnJpZGdlX2Z1 bmNzOwo+PiArCXBkYXRhLT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7Cj4+ ICsKPj4gKwlkcm1fYnJpZGdlX2FkZCgmcGRhdGEtPmJyaWRnZSk7Cj4+ICsKPj4gKwlyZXR1cm4g cmV0Owo+PiArCj4+ICtlcnJfY29uZmlnOgo+PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBk YXRhLCBmYWxzZSk7Cj4+ICtlcnJfZHRfcGFyc2U6Cj4+ICsJZGV2bV9rZnJlZSgmY2xpZW50LT5k ZXYsIHBkYXRhKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRp X3NuX2JyaWRnZV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPj4gK3sKPj4gKwlp bnQgcmV0ID0gLUVJTlZBTDsKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGkyY19n ZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+PiArCj4+ICsJaWYgKCFwZGF0YSkKPj4gKwkJZ290byBl bmQ7Cj4gCj4gcGRhdGEgaXMgdmVyeSB1bmxpa2VseSB0byBiZSBudWxsIGhlcmUsIGJ1dCBhcyBs b25nIGFzIHRoaXMgaXMgYSBsaWdodCAKPiB3ZWlnaHQKPiBjaGVjaywgSSBkb24ndCB0aGluayBp dCBodXJ0cyB0b28gbXVjaC4KPiAKPj4gKwo+PiArCW1pcGlfZHNpX2RldGFjaChwZGF0YS0+ZHNp KTsKPj4gKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+ZHNpKTsKPj4gKwo+PiAr CWRybV9icmlkZ2VfcmVtb3ZlKCZwZGF0YS0+YnJpZGdlKTsKPj4gKwo+PiArCWRpc2FibGVfaXJx KHBkYXRhLT5pcnEpOwo+PiArCWZyZWVfaXJxKHBkYXRhLT5pcnEsIHBkYXRhKTsKPj4gKwo+PiAr CXRpX3NuX2JyaWRnZV9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgZmFsc2UpOwo+PiArCWkyY19wdXRf YWRhcHRlcihwZGF0YS0+ZGRjKTsKPj4gKwo+PiArCWRldm1fa2ZyZWUoJmNsaWVudC0+ZGV2LCBw ZGF0YSk7Cj4+ICsKPj4gK2VuZDoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0 aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgdGlfc25fYnJpZGdlX2lkW10gPSB7Cj4+ICsJeyAidGks c242NWRzaTg2IiwgMH0sCj4+ICsJe30KPiAKPiBNaXNzaW5nIGEgY29tbWEgb24gdGhlIGVuZCBv ZiB0aGUgZW1wdHkgZW50cnkuCj4gCj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMs IHRpX3NuX2JyaWRnZV9pZCk7Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZVtdID0gewo+PiArCXsuY29tcGF0aWJsZSA9ICJ0 aSxzbjY1ZHNpODYifSwKPj4gKwl7fQo+IAo+IFNhbWUuCj4gCj4+ICt9Owo+PiArTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgdGlfc25fYnJpZGdlX21hdGNoX3RhYmxlKTsKPj4gKwo+PiArc3RhdGlj IHN0cnVjdCBpMmNfZHJpdmVyIHRpX3NuX2JyaWRnZV9kcml2ZXIgPSB7Cj4+ICsJLmRyaXZlciA9 IHsKPj4gKwkJLm5hbWUgPSAidGlfc242NWRzaTg2IiwKPj4gKwkJLm93bmVyID0gVEhJU19NT0RV TEUsCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSwKPj4g Kwl9LAo+PiArCS5wcm9iZSA9IHRpX3NuX2JyaWRnZV9wcm9iZSwKPj4gKwkucmVtb3ZlID0gdGlf c25fYnJpZGdlX3JlbW92ZSwKPj4gKwkuaWRfdGFibGUgPSB0aV9zbl9icmlkZ2VfaWQsCj4+ICt9 Owo+PiArCj4+ICttb2R1bGVfaTJjX2RyaXZlcih0aV9zbl9icmlkZ2VfZHJpdmVyKTsKPj4gK01P RFVMRV9ERVNDUklQVElPTigic242NWRzaTg2IERTSSB0byBlRFAgYnJpZGdlIGRyaXZlciIpOwo+ IAo+IExvb2tzIGxpa2UgeW91IGFyZSBtaXNzaW5nIHRoZSBtb2R1bGUgbGljZW5zZSBoZXJlLgo+ IAo+PiAtLQo+PiBUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1i ZXIgb2YgdGhlIENvZGUgQXVyb3JhIAo+PiBGb3J1bSwKPj4gYSBMaW51eCBGb3VuZGF0aW9uIENv bGxhYm9yYXRpdmUgUHJvamVjdAo+PiAKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+PiBkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ZyZWVkcmVubwo=