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: Tue, 24 Apr 2018 15:18:51 +0530 Message-ID: <3fce2cdb002048001b5d17761bdc1806@codeaurora.org> References: <1524160568-27583-1-git-send-email-spanda@codeaurora.org> <1524160568-27583-2-git-send-email-spanda@codeaurora.org> <20180420193601.GI73214@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180420193601.GI73214@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org T24gMjAxOC0wNC0yMSAwMTowNiwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIFRodSwgQXByIDE5LCAy MDE4IGF0IDExOjI2OjA1UE0gKzA1MzAsIFNhbmRlZXAgUGFuZGEgd3JvdGU6Cj4+IEFkZCBzdXBw b3J0IGZvciBUSSdzIHNuNjVkc2k4NiBkc2kyZWRwIGJyaWRnZSBjaGlwLgo+PiBUaGUgY2hpcCBj b252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWduYWwsCj4+IHdoaWNoIGlz IGZlZCB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5lbC4KPj4gCj4+IFRoaXMgY2hpcCBjYW4gYmUg Y29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPj4gZHNpIGludGVyZmFjZS4g Q3VycmVudGx5IGluIGRyaXZlciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCj4+IGFyZSBiZWlu ZyBhY2Nlc3NlZCB0aHJvdWdoIGkyYyBpbnRlcmZhY2Ugb25seS4KPj4gQWxzbyBhcyBvZiBub3cg SFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+PiBjaGlwIGRyaXZlci4K Pj4gCj4+IENoYW5nZXMgaW4gdjE6Cj4+ICAtIFNwbGl0IHRoZSBkdC1iaW5kaW5ncyBhbmQgdGhl IGRyaXZlciBzdXBwb3J0IGludG8gc2VwYXJhdGUgcGF0Y2hlcwo+PiAgICAoQW5kcnplaiBIYWpk YSkuCj4+ICAtIFVzZSBvZiBncGlvZCBBUElzIHRvIHBhcnNlIGFuZCBjb25maWd1cmUgZ3Bpb3Mg aW5zdGVhZCBvZiBvYnNvbGV0ZSAKPj4gb25lcwo+PiAgICAoQW5kcnplaiBIYWpkYSkuCj4+ICAt IFVzZSBtYWNyb3MgdG8gZGVmaW5lIHRoZSByZWdpc3RlciBvZmZzZXRzIChBbmRyemVqIEhhamRh KS4KPj4gCj4+IENoYW5nZXMgaW4gdjI6Cj4+ICAtIFNlcGFyYXRlIG91dCBlZHAgcGFuZWwgc3Bl Y2lmaWMgSFcgcmVzb3VyY2UgaGFuZGxpbmcgZnJvbSBicmlkZ2UKPj4gICAgZHJpdmVyIGFuZCBj cmVhdGUgYSBzZXBhcmF0ZSBlZHAgcGFuZWwgZHJpdmVycyB0byBoYW5kbGUgcGFuZWwKPj4gICAg c3BlY2lmaWMgbW9kZSBpbmZvcm1hdGlvbiBhbmQgSFcgcmVzb3VyY2VzIChTZWFuIFBhdWwpLgo+ PiAgLSBSZXBsYWNlIHByXyogQVBJcyB0byBEUk1fKiBBUElzIHRvIGxvZyBlcnJvciBvciBkZWJ1 ZyBpbmZvcm1hdGlvbgo+PiAgICAoU2VhbiBQYXVsKS4KPj4gIC0gUmVtb3ZlIHNvbWUgb2YgdGhl IHVubmVjZXNzYXJ5IHN0cnVjdHVyZS92YXJpYWJsZSBmcm9tIGRyaXZlciAoU2Vhbgo+PiAgICBQ YXVsKS4KPj4gIC0gUmVuYW1lIHRoZSBmdW5jdGlvbiBhbmQgc3RydWN0dXJlIHByZWZpeCAic242 NWRzaTg2IiB0byAKPj4gInRpX3NuX2JyaWRnZSIKPj4gICAgKFNlYW4gUGF1bCAvIFJvYiBIZXJy aW5nKS4KPj4gIC0gUmVtb3ZlIG1vc3Qgb2YgdGhlIGhhcmQtY29kaW5nIGFuZCBtb2RpZmllZCB0 aGUgYnJpZGdlIGluaXQgCj4+IHNlcXVlbmNlCj4+ICAgIGJhc2VkIG9uIGN1cnJlbnQgbW9kZSAo U2VhbiBQYXVsKS4KPj4gIC0gUmVtb3ZlIHRoZSBleGlzdGluZyBmdW5jdGlvbiB0byByZXRyaWV2 ZSB0aGUgRURJRCBkYXRhIGFuZAo+PiAgICBpbXBsZW1lbnRlZCB0aGlzIGFzIGFuIGkyY19hZGFw dGVyIGFuZCB1c2UgZHJtX2dldF9lZGlkKCkgKFNlYW4gCj4+IFBhdWwpLgo+PiAgLSBSZW1vdmUg dGhlIGR1bW15IGlycSBoYW5kbGVyIGltcGxlbWVudGF0aW9uLCB3aWxsIGFkZCBiYWNrIHRoZQo+ PiAgICBwcm9wZXIgaXJxIGhhbmRsaW5nIGxhdGVyIChTZWFuIFBhdWwpLgo+PiAgLSBDYXB0dXJl IHRoZSByZXF1aXJlZCBlbmFibGUgZ3Bpb3MgaW4gYSBzaW5nbGUgYXJyYXkgYmFzZWQgb24gZHQg Cj4+IGVudHJ5Cj4+ICAgIGluc3RlYWQgb2YgaGF2aW5nIGluZGl2aWR1YWwgZGVzY3JpcHRvciBm b3IgZWFjaCBncGlvIChTZWFuIFBhdWwpLgo+PiAKPj4gQ2hhbmdlcyBpbiB2MzoKPj4gIC0gUmVt b3ZlIHVzYWdlIG9mIGlycV9ncGlvIGFuZCByZXBsYWNlIGl0IGFzICJpbnRlcnJ1cHRzIiBwcm9w ZXJ0eSAKPj4gKFJvYgo+PiAgICBIZXJyaW5nKS4KPj4gIC0gUmVtb3ZlIHRoZSB1bm5lY2Vzc2Fy eSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zIChTZWFuIFBhdWwpLgo+PiAgLSBSZWFycmFuZ2UgdGhl IGhlYWRlciBmaWxlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIgKFNlYW4gUGF1bCkuCj4+ICAtIFVz ZSByZWdtYXAgaW50ZXJmYWNlIHRvIHBlcmZvcm0gaTJjIHRyYW5zYWN0aW9ucy4KPj4gIC0gVXBk YXRlIENvcHlyaWdodC9MaWNlbnNlIGZpZWxkIGFuZCBhZGRyZXNzIG90aGVyIHJldmlldyBjb21t ZW50cwo+PiAgICAoSm9yZGFuIENyb3VzZSkuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5OiBTYW5kZWVw IFBhbmRhIDxzcGFuZGFAY29kZWF1cm9yYS5vcmc+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS90aS1zbjY1ZHNpODYuYyB8IDY5MCAKPj4gKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+IAo+IFdoYXQgYWJvdXQgS2NvbmZpZy9NYWtlZmlsZT8KClRob3VnaHQgb2Yg YWRkaW5nIHRoaXMgaW4gYW5vdGhlciBjaGFuZ2Ugb25jZSByZXZpZXcgaXMgb3Zlci4gQnV0IHdp bGwgCmFkZCB0byBjdXJyZW50IGNoYW5nZSBpbiBuZXh0IHBhdGNoc2V0LgoKPiAKPj4gIDEgZmls ZSBjaGFuZ2VkLCA2OTAgaW5zZXJ0aW9ucygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKPj4gCj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvdGktc242NWRzaTg2LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAw MDAwMC4uYTJhOTVmNQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvdGktc242NWRzaTg2LmMKPj4gQEAgLTAsMCArMSw2OTAgQEAKPj4gKy8qCj4+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsg KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICovCj4g Cj4gVXNlIFNQRFggbGljZW5zZQoKV2lsbCBhZGQgYmFjayBTUERYIGFsb25nIHdpdGggY29weXJp Z2h0IGluIG5leHQgcGF0Y2hzZXQuCgo+IAo+PiArCj4+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4K Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPj4gKyNp bmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5o Pgo+PiArI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3Jh cGguaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9y ZWd1bGF0b3IvY29uc3VtZXIuaD4KPj4gKwo+PiArI2RlZmluZSBTTl9CUklER0VfUkVWSVNJT05f SUQgMHgyCj4+ICsKPj4gKy8qIExpbmsgVHJhaW5pbmcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCj4+ ICsjZGVmaW5lIFNOX0RFVklDRV9SRVZfUkVHCQkJMHgwOAo+PiArI2RlZmluZSBTTl9SRUZDTEtf RlJFUV9SRUcJCQkweDBBCj4+ICsjZGVmaW5lIFNOX0RTSV9MQU5FU19SRUcJCQkweDEwCj4+ICsj ZGVmaW5lIFNOX0RTSUFfQ0xLX0ZSRVFfUkVHCQkJMHgxMgo+PiArI2RlZmluZSBTTl9FTkhfRlJB TUVfUkVHCQkJMHg1QQo+PiArI2RlZmluZSBTTl9TU0NfQ09ORklHX1JFRwkJCTB4OTMKPj4gKyNk ZWZpbmUgU05fREFUQVJBVEVfQ09ORklHX1JFRwkJCTB4OTQKPj4gKyNkZWZpbmUgU05fUExMX0VO QUJMRV9SRUcJCQkweDBECj4+ICsjZGVmaW5lIFNOX1NDUkFNQkxFX0NPTkZJR19SRUcJCQkweDk1 Cj4+ICsjZGVmaW5lIFNOX0FVWF9XREFUQTBfUkVHCQkJMHg2NAo+PiArI2RlZmluZSBTTl9BVVhf QUREUl8xOV8xNl9SRUcJCQkweDc0Cj4+ICsjZGVmaW5lIFNOX0FVWF9BRERSXzE1XzhfUkVHCQkJ MHg3NQo+PiArI2RlZmluZSBTTl9BVVhfQUREUl83XzBfUkVHCQkJMHg3Ngo+PiArI2RlZmluZSBT Tl9BVVhfTEVOR1RIX1JFRwkJCTB4NzcKPj4gKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcJCQkJMHg3 OAo+PiArI2RlZmluZSBTTl9NTF9UWF9NT0RFX1JFRwkJCTB4OTYKPj4gKy8qIHZpZGVvIGNvbmZp ZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPj4gKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xF TkdUSF9MT1dfUkVHCTB4MjAKPj4gKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9I SUdIX1JFRwkweDIxCj4+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9X X1JFRwkweDI0Cj4+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9S RUcJMHgyNQo+PiArI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDJD Cj4+ICsjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECj4+ICsj ZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4MzAKPj4gKyNkZWZpbmUg U05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MzEKPj4gKyNkZWZpbmUgU05fQ0hB X0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcJMHgzNAo+PiArI2RlZmluZSBTTl9DSEFfVkVSVElD QUxfQkFDS19QT1JDSF9SRUcJCTB4MzYKPj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfRlJP TlRfUE9SQ0hfUkVHCTB4MzgKPj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNI X1JFRwkJMHgzQQo+PiArI2RlZmluZSBTTl9EQVRBX0ZPUk1BVF9SRUcJCQkweDVCCj4+ICsKPj4g KyNkZWZpbmUgTUlOX0RTSV9DTEtfRlJFUV9NSFoJNDAKPj4gKwo+PiArI2RlZmluZSBEUFBMTF9D TEtfU1JDX1JFRkNMSwkwCj4+ICsjZGVmaW5lIERQUExMX0NMS19TUkNfRFNJQ0xLCTEKPj4gKwo+ PiArZW51bSB0aV9zbl9icmlkZ2VfcmVmX2Nsa3Mgewo+PiArCVNOX1JFRl9DTEtfMTJfTUhaID0g MCwKPj4gKwlTTl9SRUZfQ0xLXzE5XzJfTUhaLAo+PiArCVNOX1JFRl9DTEtfMjZfTUhaLAo+PiAr CVNOX1JFRl9DTEtfMjdfTUhaLAo+PiArCVNOX1JFRl9DTEtfMzhfNF9NSFosCj4+ICsJU05fUkVG X0NMS19NQVgsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwo+PiArCXN0cnVjdCBk cm1fYnJpZGdlIGJyaWRnZTsKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7Cj4+ ICsJc3RydWN0IGRldmljZV9ub2RlICpob3N0X25vZGU7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZHNpOwo+PiArCS8qIGhhbmRsZSB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5lbCAqLwo+ PiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOwo+PiArCS8qIGxpc3Qgb2YgZ3Bpb3MgbmVlZGVk IHRvIGVuYWJsZSB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgKi8KPj4gKwlzdHJ1Y3QgZ3Bpb19k ZXNjcyAqZW5hYmxlX2dwaW9zOwo+IAo+IEZyb20gbXkgcmVhZGluZyBvZiB0aGUgZGF0YXNoZWV0 LCB0aGVzZSBncGlvcyBjYW4gYmUgdXNlZCBmb3IgYSB2YXJpZXR5IAo+IG9mCj4gdGhpbmdzLCBu b3QganVzdCB0aWVkIHRvIGVuYWJsZSAoaW5wdXQvb3V0cHV0KS4gU28sIHNlcGFyYXRlIGVuYWJs ZSAKPiBpbnB1dAo+IGZyb20gdGhlIGdwaW9zLCBhbmQgbWFrZSB0aGUgZ3Bpb3MgY29uZmlndXJh YmxlIHZpYSBkdC4KPiAKClNvIGFyZSB5b3Ugc3VnZ2VzdGluZyBzb21ldGhpbmcgbGlrZSwKc3Ry dWN0IGdwaW9fZGVzYyAqZW5hYmxlOyAtLT4gZm9yIGVuYWJsZSBncGlvCnN0cnVjdCBncGlvX2Rl c2NzICptaXNjOyAtLT4gZm9yIG90aGVyIGdwaW9zIGxpa2UgYXV4X2NoYW5uZWwsIG1lbnRpb25l ZCAKaW4gdGhlIHNjaGVtYXRpYwoKCj4+ICsJaW50ICp2YWx1ZV9hcnJheTsKPj4gKwlpbnQgaW50 cF9pcnE7Cj4gCj4gV2hhdCdzIHRoaXMgdXNlZCBmb3I/Cj4gCldpbGwgcmVtb3ZlIHRoaXMgZm9y IG5vdyBhbmQgd2lsbCBhZGQgYmFjayB3aGlsZSBhZGRpbmcgc3VwcG9ydCBmb3IgCkhQRC9pbnRl cnJ1cHRzLgoKPj4gKwl1bnNpZ25lZCBpbnQgbnVtX3N1cHBsaWVzOwo+PiArCXN0cnVjdCByZWd1 bGF0b3JfYnVsa19kYXRhICpzdXBwbGllczsKPj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2Ns aWVudDsKPj4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkYzsKPj4gKwl1MzIgbnVtX21vZGVzOwo+ PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5n ZXNbXSA9IHsKPj4gKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2VfbWF4ID0gMHhmZiB9LAo+PiAr fTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIHRpX3Nu X2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IAo+PiB7Cj4+ICsJLnllc19yYW5nZXMgPSB0aV9zbl9i cmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLAo+PiArCS5uX3llc19yYW5nZXMgPSBBUlJBWV9TSVpFKHRp X3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0 IHN0cnVjdCByZWdtYXBfY29uZmlnIHRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnID0gewo+PiAr CS5yZWdfYml0cyA9IDgsCj4+ICsJLnZhbF9iaXRzID0gOCwKPj4gKwkudm9sYXRpbGVfdGFibGUg PSAmdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3RhYmxlLAo+PiArCS5jYWNoZV90eXBlID0gUkVHQ0FD SEVfTk9ORSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9ncGlvX2Nv bmZpZ3VyZShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwgCj4+IGJvb2wgb24pCj4+ICt7Cj4+ ICsJaW50IHZhbHVlLCBpID0gMDsKPj4gKwo+PiArCXZhbHVlID0gb24gPyAxIDogMDsKPj4gKwo+ PiArCWlmIChwZGF0YS0+ZW5hYmxlX2dwaW9zLT5uZGVzY3MgJiYgcGRhdGEtPnZhbHVlX2FycmF5 KSB7Cj4+ICsJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+ZW5hYmxlX2dwaW9zLT5uZGVzY3M7IGkr KykKPj4gKwkJCXBkYXRhLT52YWx1ZV9hcnJheVtpXSA9IHZhbHVlOwo+PiArCQlncGlvZF9zZXRf YXJyYXlfdmFsdWUocGRhdGEtPmVuYWJsZV9ncGlvcy0+bmRlc2NzLAo+PiArCQkJcGRhdGEtPmVu YWJsZV9ncGlvcy0+ZGVzYywgcGRhdGEtPnZhbHVlX2FycmF5KTsKPj4gKwl9Cj4+ICsKPj4gKwlE Uk1fREVCVUcoImNvbmZpZyB0bzogJWRcbiIsIHZhbHVlKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEs IGJvb2wgCj4+IGVuYWJsZSkKPj4gK3sKPj4gKwlzdGF0aWMgaW50IHJlZl9jb3VudDsKPiAKPiBJ J20gYSBsaXR0bGUgY29uZnVzZWQgd2h5IHlvdSBjaG9zZSBhIHN0YXRpYyB2YXJpYWJsZSBpbnN0 ZWFkIG9mIAo+IHN0YXNoaW5nIHRoaXMKPiBpbiB0aGUgcGRhdGEuIEFsc28sIHRoaXMgaXNuJ3Qg bG9ja2VkLCBzbyB5b3Ugd2lsbCBoYXZlIHJhY2VzIGJldHdlZW4gCj4gc2V0dGluZwo+IHJlZl9j b3VudCBhbmQgZG9pbmcgdGhlIGVuYWJsZS9kaXNhYmxlLgoKV2FudCB0byBsaW1pdCB0aGUgcmVm IGNvdW50IHRvIHRoaXMgZnVuY3Rpb24gb25seSwgaW5zdGVhZCBvZiBleHBvc2luZyAKdGhlIHJl ZiBjb3VudCB0bwpvdXRpc2RlLiBJIHdpbGwgYWRkIG11dGV4IHByb3RlY3Rpb24gdG8gdGhpcyBm dW5jdGlvbiwgc2luY2UgaXQgaXMgCmNhbGxlZCBmcm9tIG11bHRpcGxlCnBsYWNlcy4gTWlzc2Vk IGl0LgoKPiAKPj4gKwo+PiArCWlmIChlbmFibGUpCj4+ICsJCXJlZl9jb3VudCsrOwo+PiArCWVs c2UKPj4gKwkJcmVmX2NvdW50LS07Cj4+ICsKPj4gKwlpZiAoZW5hYmxlICYmIChyZWZfY291bnQg PT0gMSkpIHsKPj4gKwkJdGlfc25fYnJpZGdlX2dwaW9fY29uZmlndXJlKHBkYXRhLCB0cnVlKTsK Pj4gKwo+PiArCQlpZiAocmVndWxhdG9yX2J1bGtfZW5hYmxlKHBkYXRhLT5udW1fc3VwcGxpZXMs Cj4+ICsJCQkJCQlwZGF0YS0+c3VwcGxpZXMpKSB7Cj4+ICsJCQlEUk1fRVJST1IoImJyaWRnZSBy ZWd1bGF0b3IgZW5hYmxlIGZhaWxlZFxuIik7Cj4+ICsJCQlyZXR1cm47Cj4gCj4gV2h5IHJldHVy biB2b2lkIGlmIHlvdSBjYW4gZmFpbD8KCldlIGFyZSBub3QgdXNpbmcgdGhlIHJldHVybiB2YWx1 ZSBvZiB0aGlzIGZ1bmN0aW9uIGFueXdoZXJlLiBTbyBqdXN0IAp3YW50ZWQgdG8KcHV0IGEgcHJp bnQgaGVyZSBpbiBjYXNlLCBldmVuIHRob3VnaCByZWd1bGF0b3JfYnVsa19lbmFibGUgaXMgaGln aGx5IAp1bmxpa2VseSB0byBmYWlsLgoKPiAKPj4gKwkJfQo+PiArCX0gZWxzZSBpZiAoIWVuYWJs ZSAmJiAhcmVmX2NvdW50KSB7Cj4+ICsJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUocGRhdGEtPm51 bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKPj4gKwo+PiArCQl0aV9zbl9icmlkZ2VfZ3Bp b19jb25maWd1cmUocGRhdGEsIGZhbHNlKTsKPj4gKwl9IGVsc2Ugewo+PiArCQlEUk1fREVCVUco InRpX3NuX2JyaWRnZSBwb3dlciBjdHJsOiAlZCByZWZjb3VudDogJWRcbiIsCj4+ICsJCQkJCQkJ ZW5hYmxlLCByZWZfY291bnQpOwo+PiArCX0KPj4gK30KPj4gKwo+PiArLyogQ29ubmVjdG9yIGZ1 bmNzICovCj4+ICtzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqCj4+ICtjb25uZWN0b3JfdG9f dGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ICt7Cj4+ICsJ cmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB0aV9zbl9icmlkZ2UsIGNvbm5l Y3Rvcik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9n ZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgCj4+ICpjb25uZWN0b3IpCj4+ICt7Cj4+ICsJ c3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKGNv bm5lY3Rvcik7Cj4+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4+ ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4+ICsKPj4gKwlpZiAocGFuZWwpIHsKPj4gKwkJRFJNX0RF QlVHKCJnZXQgbW9kZSBmcm9tIGNvbm5lY3RlZCBkcm1fcGFuZWxcbiIpOwo+PiArCQlwZGF0YS0+ bnVtX21vZGVzID0gZHJtX3BhbmVsX2dldF9tb2RlcyhwYW5lbCk7Cj4gCj4gSnVzdCByZXR1cm4g ZWFybHkgaW5zdGVhZCBvZiBpbmRlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uLgpPSy4K PiAKPj4gKwl9IGVsc2Ugewo+PiArCQkvKiBnZXQgZnJvbSBFRElEICovCj4+ICsJCWlmICghcGRh dGEtPmRkYykKPj4gKwkJCXJldHVybiAwOwo+PiArCQl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChw ZGF0YSwgdHJ1ZSk7Cj4+ICsJCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCBwZGF0YS0+ ZGRjKTsKPj4gKwkJaWYgKGVkaWQpIHsKPj4gKwkJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVf ZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCj4+ICsJCQkJCQkJCWVkaWQpOwo+PiArCQkJcGRhdGEt Pm51bV9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+PiArCQkJ ZHJtX2VkaWRfdG9fZWxkKGNvbm5lY3RvciwgZWRpZCk7Cj4gCj4gVGhpcyBpcyBhIHN0YXRpYyBm dW5jdGlvbiBpbnNpZGUgZHJtX2VkaWQuYy4gSG93IGRpZCB0aGlzIGV2ZW4gY29tcGlsZT8KPiAK ICBUaGlzIGlzIG5vdCBzdGF0aWMgaW4gZHJtX2VkaWQuYywgQXRsZWFzdCBpIGNhbiBzZWUgdGhp cyBhcyBhIApub24tc3RhdGljIGZ1bmN0aW9uIGluIDQuMTQga2VybmVsLCBpdCBpcyB1c2VkIGJ5 IG90aGVyIGRyaXZlcnMgYWxzby4KCj4+ICsJCQlrZnJlZShlZGlkKTsKPj4gKwkJfSBlbHNlIHsK Pj4gKwkJCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBlZGlkXG4iKTsKPiAKPiBGbGlwIHRoZSBp ZiAoZWRpZCkgY29uZGl0aW9uIGFyb3VuZCBhbmQgZXhpdCBlYXJseS4KT0sKPiAKPj4gKwkJfQo+ PiArCQl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiBwZGF0YS0+bnVtX21vZGVzOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZW51bSBk cm1fbW9kZV9zdGF0dXMKPj4gK3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+PiArCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKPj4gK3sKPj4gKwkvKiBtYXhpbXVtIHN1cHBvcnRlZCByZXNvbHV0aW9u IGlzIDRLIGF0IDYwIGZwcyAqLwo+PiArCWlmIChtb2RlLT5jbG9jayA+IDU5NDAwMCkKPj4gKwkJ cmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKPj4gKwo+PiArCXJldHVybiBNT0RFX09LOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIAo+PiB0aV9z bl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPj4gKwkuZ2V0X21vZGVzID0gdGlf c25fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCj4+ICsJLm1vZGVfdmFsaWQgPSB0aV9zbl9i cmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgZW51bSBk cm1fY29ubmVjdG9yX3N0YXR1cwo+PiArdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3Qoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCAKPj4gZm9yY2UpCj4+ICt7Cj4+ICsJ c3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKGNv bm5lY3Rvcik7Cj4+ICsKPj4gKwkvKioKPj4gKwkgKiBUT0RPOiBDdXJyZW50bHkgaWYgZHJtX3Bh bmVsIGlzIHByZXNlbnQsIHRoZW4gYWx3YXlzCj4+ICsJICogcmV0dXJuIHRoZSBzdGF0dXMgYXMg Y29ubmVjdGVkLiBOZWVkIHRvIGFkZCBzdXBwb3J0IHRvIGRldGVjdAo+PiArCSAqIGRldmljZSBz dGF0ZSBmb3Igbm8gcGFuZWwoaG90IHBsdWdnYWJsZSkgc2NlbmFyaW9zLgo+IAo+IFBlcmhhcHMg dGhlbiB5b3Ugc2hvdWxkIHJldHVybiB1bmtub3duIGluc3RlYWQgb2YgZGlzY29ubmVjdGVkLgpP Swo+IAo+PiArCSAqLwo+PiArCWlmIChwZGF0YS0+cGFuZWwpCj4+ICsJCXJldHVybiBjb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPj4gKwllbHNlCj4+ICsJCXJldHVybiBjb25uZWN0b3Jfc3Rh dHVzX2Rpc2Nvbm5lY3RlZDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZnVuY3MgCj4+ID0gewo+PiAr CS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAo+ PiArCS5kZXRlY3QgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdCwKPj4gKwkuZGVzdHJv eSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKPj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfcmVzZXQsCj4+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSAKPj4gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPj4gKwkuYXRvbWljX2Rl c3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICpicmlkZ2VfdG9fdGlf c25fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlIAo+PiAqYnJpZGdlKQo+PiArewo+PiArCXJldHVy biBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBicmlkZ2UpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZWFkX2RldmljZV9yZXYoc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50IHJldiA9IDA7Cj4+ ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwlyZXQgPSByZWdtYXBfcmVhZChwZGF0YS0+cmVnbWFw LCBTTl9ERVZJQ0VfUkVWX1JFRywgJnJldik7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBleGl0 Owo+IAo+IFdoeSBkbyB5b3UgbmVlZCBhIGxhYmVsIGp1c3QgdG8gcmV0dXJuPwpPaywgc29tZSBr ZXJuZWwgYXBwcm92ZXJzIGRvbnQgYWxsb3cgbXVsdGlwbGUgcmV0dXJuIHN0YXRlbWVudHMgc28g dXNpbmcgCmxhYmVsIHdoZXJldmVyIHBvc3NpYmxlIHRocm91Z2ggb3V0IHRoZSBkcml2ZXIuCklm IGl0cyBvayB0byBoYXZlIG51bWVyb3VzIHJldHVybiBzdGF0ZW1lbnRzIHRoZW4gd2lsbCBmb2xs b3cgdGhhdCAKdGhyb3VnaCBvdXQuCj4gCj4+ICsKPj4gKwlpZiAocmV2ID09IFNOX0JSSURHRV9S RVZJU0lPTl9JRCkgewo+PiArCQlEUk1fREVCVUcoInRpX3NuX2JyaWRnZSByZXZpc2lvbiBpZDog MHgleFxuIiwgcmV2KTsKPiAKPiBUaGUgcmV2aXNpb24gaXMgaGFyZGNvZGVkLCBzbyB0aGlzIHBy aW50IGlzbid0IHJlYWxseSB1c2VmdWwuCj4gCk9rLCB3aWxsIHJlbW92ZSB0aGlzIHByaW50IGZy b20gaGVyZSBhbmQgYWRkIGEgZGVidWcgcHJpbnQgaW4gZW5kIG9mIApwcm9iZSwgdGhlIGludGVu dGlvbiBpcyB0byBpbmRpY2F0ZSB0aGF0IHByb2JlIGhhcyBiZWVuIHN1Y2Nlc3NmdWwuCj4+ICsJ fSBlbHNlIHsKPj4gKwkJRFJNX0VSUk9SKCJ0aV9zbl9icmlkZ2UgcmV2aXNpb24gaWQ6IDB4JXgg bWlzbWF0Y2hcbiIsIHJldik7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICtl eGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICog Y29uc3QgdGlfc25fYnJpZGdlX3N1cHBseV9uYW1lc1tdID0gewo+PiArCSJ2Y2NpbyIsCj4+ICsJ InZjY2EiLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfcmVn dWxhdG9ycyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwl1bnNpZ25lZCBp bnQgaTsKPj4gKwo+PiArCXBkYXRhLT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHRpX3NuX2Jy aWRnZV9zdXBwbHlfbmFtZXMpOwo+PiArCj4+ICsJcGRhdGEtPnN1cHBsaWVzID0gZGV2bV9rY2Fs bG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMsCj4+ICsJCQkJICAgICBzaXplb2Yo KnBkYXRhLT5zdXBwbGllcyksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcGRhdGEtPnN1cHBsaWVz KQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+ bnVtX3N1cHBsaWVzOyBpKyspCj4+ICsJCXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0aV9z bl9icmlkZ2Vfc3VwcGx5X25hbWVzW2ldOwo+PiArCj4+ICsJcmV0dXJuIGRldm1fcmVndWxhdG9y X2J1bGtfZ2V0KHBkYXRhLT5kZXYsCj4+ICsJCQkJcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEt PnN1cHBsaWVzKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNo X3BhbmVsKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+PiArewo+PiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqcGFuZWxfbm9kZSwgKnBvcnQsICplbmRwb2ludDsKPj4gKwo+PiArCXBkYXRhLT5w YW5lbCA9IE5VTEw7Cj4+ICsJcG9ydCA9IG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKHBkYXRhLT5k ZXYtPm9mX25vZGUsIDEpOwo+PiArCWlmIChwb3J0KSB7Cj4+ICsJCWVuZHBvaW50ID0gb2ZfZ2V0 X2NoaWxkX2J5X25hbWUocG9ydCwgImVuZHBvaW50Iik7Cj4+ICsJCW9mX25vZGVfcHV0KHBvcnQp Owo+PiArCQlpZiAoIWVuZHBvaW50KSB7Cj4+ICsJCQlkZXZfZXJyKHBkYXRhLT5kZXYsICJubyBv dXRwdXQgZW5kcG9pbnQgZm91bmRcbiIpOwo+IAo+IFdoeSBhcmUgeW91IHN3aXRjaGluZyB0byBk ZXZfZXJyPwp3aWxsIG1ha2UgdGhpcyBEUk1fRVJST1IKPiAKPj4gKwkJCXJldHVybiAtRUlOVkFM Owo+PiArCQl9Cj4+ICsKPj4gKwkJcGFuZWxfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9y dF9wYXJlbnQoZW5kcG9pbnQpOwo+PiArCQlvZl9ub2RlX3B1dChlbmRwb2ludCk7Cj4+ICsJCWlm ICghcGFuZWxfbm9kZSkgewo+PiArCQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8gb3V0cHV0IG5v ZGUgZm91bmRcbiIpOwo+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJCX0KPj4gKwo+PiArCQlw ZGF0YS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChwYW5lbF9ub2RlKTsKPj4gKwkJb2Zfbm9k ZV9wdXQocGFuZWxfbm9kZSk7Cj4+ICsJCWlmICghcGRhdGEtPnBhbmVsKSB7Cj4+ICsJCQlkZXZf ZXJyKHBkYXRhLT5kZXYsICJubyBwYW5lbCBub2RlIGZvdW5kXG4iKTsKPj4gKwkJCXJldHVybiAt RUlOVkFMOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+ cGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKPiAKPiBXaHkgaXMgdGhpcyBvdXRzaWRlIHRoZSBp ZiBzdGF0ZW1lbnQ/IElmIHBvcnQgaXMgTlVMTCwgdGhlbiAKPiBwZGF0YS0+cGFuZWwgaXMKPiBO VUxMLCBhbmQgdGhlIGZpcnN0IHRoaW5nIGRybV9wYW5lbF9hdHRhY2ggZG9lcyBpcyBkZXJlZmVy ZW5jZSBwYW5lbC4KVGhhbmtzIGZvciBwb2ludGluZyBvdXQgdGhpcywgZHJtX3BhbmVsX2F0dGFj aCgpIHNob3VsZCBiZSBpbnNpZGUgaWYgCnN0YXRlbWVudC4KPiAKPj4gKwo+PiArCXJldHVybiAw Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2goc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdDsK Pj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+ICsJaW50IHJldDsK Pj4gKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsgLnR5cGUgPSAi dGlfc25fYnJpZGdlIiwKPj4gKwkJCQkJCSAgIC5jaGFubmVsID0gMCwKPj4gKwkJCQkJCSAgIC5u b2RlID0gTlVMTCwKPj4gKwkJCQkJCSB9Owo+PiArCj4+ICsJaWYgKCFicmlkZ2UtPmVuY29kZXIp IHsKPj4gKwkJRFJNX0VSUk9SKCJQYXJlbnQgZW5jb2RlciBvYmplY3Qgbm90IGZvdW5kXG4iKTsK Pj4gKwkJcmV0ID0gLUVOT0RFVjsKPj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwkv KiBIUEQgbm90IHN1cHBvcnRlZCAqLwo+PiArCXBkYXRhLT5jb25uZWN0b3IucG9sbGVkID0gMDsK Pj4gKwo+PiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBkYXRhLT5j b25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAo+PiArCQkJ CSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJP UigiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKPj4gKwkJZ290 byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRh LT5jb25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5j cyk7Cj4+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVj dG9yLCAKPj4gYnJpZGdlLT5lbmNvZGVyKTsKPj4gKwo+PiArCWhvc3QgPSBvZl9maW5kX21pcGlf ZHNpX2hvc3RfYnlfbm9kZShwZGF0YS0+aG9zdF9ub2RlKTsKPj4gKwlpZiAoIWhvc3QpIHsKPj4g KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7Cj4+ICsJCXJldCA9IC1F Tk9ERVY7Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJZHNpID0gbWlwaV9kc2lf ZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9zdCwgJmluZm8pOwo+PiArCWlmIChJU19FUlIoZHNpKSkg ewo+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7Cj4+ICsJ CXJldCA9IFBUUl9FUlIoZHNpKTsKPj4gKwkJZ290byBlcnJvcjsKPiAKPiBBbGwgb2YgdGhlc2Ug ZXJyb3IgbGFiZWxzIGp1c3QgcmV0dXJuIHJldC4gU28sIHdoeSBub3QganVzdCByZXR1cm4gCj4g ZGlyZWN0bHk/Cj4gCj4+ICsJfQo+PiArCj4+ICsJLyogVE9ETzogc2V0dGluZyB0byA0IGxhbmVz IGFsd2F5cyBmb3Igbm93ICovCj4+ICsJZHNpLT5sYW5lcyA9IDQ7Cj4+ICsJZHNpLT5mb3JtYXQg PSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+PiArCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01P REVfVklERU8gfCAKPj4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKPj4gKwkJCSAg TUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7Cj4+ICsK Pj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiAr CQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOwo+PiArCQlnb3Rv IGVycl9kc2lfYXR0YWNoOwo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5kc2kgPSBkc2k7Cj4+ICsK Pj4gKwlEUk1fREVCVUcoImJyaWRnZSBhdHRhY2hlZFxuIik7Cj4+ICsJLyogYXR0YWNoIHBhbmVs IHRvIGJyaWRnZSAqLwo+PiArCXRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwocGRhdGEpOwo+PiAr Cj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2Vycl9kc2lfYXR0YWNoOgo+PiArCW1pcGlfZHNpX2Rl dmljZV91bnJlZ2lzdGVyKGRzaSk7Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKPj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4+ ICsJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKPj4gK3sKPj4gKwlz dHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdl KTsKPj4gKwo+PiArCURSTV9ERUJVRygibW9kZV9zZXQ6IGhkaXNwbGF5PSVkLCB2ZGlzcGxheT0l ZCwgdnJlZnJlc2g9JWQsIAo+PiBjbG9jaz0lZFxuIiwKPj4gKwkJYWRqX21vZGUtPmhkaXNwbGF5 LCBhZGpfbW9kZS0+dmRpc3BsYXksCj4+ICsJCWFkal9tb2RlLT52cmVmcmVzaCwgYWRqX21vZGUt PmNsb2NrKTsKPj4gKwo+PiArCWRybV9tb2RlX2NvcHkoJnBkYXRhLT5jdXJyX21vZGUsIGFkal9t b2RlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2Rpc2FibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwlzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKPj4gKwo+PiArCWlmIChwYW5lbCkgewo+PiArCQlk cm1fcGFuZWxfZGlzYWJsZShwYW5lbCk7Cj4+ICsJCWRybV9wYW5lbF91bnByZXBhcmUocGFuZWwp Owo+PiArCX0KPj4gKwo+PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9 IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCA9IHBkYXRhLT5wYW5lbDsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9 ICZwZGF0YS0+Y3Vycl9tb2RlOwo+PiArCXVuc2lnbmVkIGludCBiaXRfcmF0ZV9taHosIGNsa19m cmVxX21oejsKPj4gKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKPj4gKwo+PiArCWlmICghcGRhdGEt Pm51bV9tb2RlcykKPj4gKwkJcmV0dXJuOwo+IAo+IFRoaXMgcmVsaWVzIG9uIGdldF9tb2Rlcygp IHRvIGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxlLCB3aGljaCBpcyBub3QgCj4gZ3VhcmFudGVlZAo+ ICh1c2VyIGRlZmluZWQgbW9kZXMpLiBZb3UgYWxzbyBhcmUgcmFjaW5nIHdpdGggZ2V0X21vZGVz KCksIHNvIGl0J3MgCj4gcG9zc2libGUKPiB0aGlzIGlzIGluYWNjdXJhdGUgYW55d2F5cy4gSXMg dGhlcmUgYSBnb29kIHJlYXNvbiB0byBnYXRlIGVuYWJsZSBvbiAKPiBudW1fbW9kZXM/Cj4gCgpJ IHdpbGwgcmVtb3ZlIHRoZSBudW1fbW9kZXMgY2hlY2sgZnJvbSBoZXJlLCBmcmFtZXdvcmsgc2hv dWxkIGVuc3VyZSAKYnJpZGdlX2VuYWJsZQpnZXRzIGNhbGxlZCBvbmx5IGFmdGVyIHNldF9tb2Rl IGlzIGNhbGxlZC4KPj4gKwo+PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVl KTsKPj4gKwo+PiArCWlmIChwYW5lbCkKPj4gKwkJZHJtX3BhbmVsX3ByZXBhcmUocGFuZWwpOwo+ PiArCj4+ICsJLyogQ0xLX1NSQyBjb25maWcgKi8KPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJl Z21hcCwgU05fUkVGQ0xLX0ZSRVFfUkVHLAo+PiArCQkJKERQUExMX0NMS19TUkNfUkVGQ0xLIHwg KFNOX1JFRl9DTEtfMTlfMl9NSFogPDwgMHgxKSkpOwo+PiArCj4+ICsJLyogRFNJX0EgbGFuZSBj b25maWcgKi8KPj4gKwlyZWdtYXBfcmVhZChwZGF0YS0+cmVnbWFwLCBTTl9EU0lfTEFORVNfUkVH LCAmdmFsKTsKPj4gKwl2YWwgfD0gKCgweDQgLSBwZGF0YS0+ZHNpLT5sYW5lcykgJiAweDAzKSA8 PCAweDM7Cj4gCj4gVGhlc2UgbWFza3Mgc2hvdWxkIGJlICNkZWZpbmVkLCBhbmQgaW1vIHRoZSA0 IHdvdWxkIHJlYWQgYmV0dGVyIGlmIGl0IAo+IHdlcmUgbm90Cj4gbGlzdGVkIGluIGhleC4gU2Ft ZSBnb2VzIGJlbG93LCBtYXNrcyBhbmQgb2Zmc2V0cyBuZWVkIHRvIGJlICNkZWZpbmVkLgoKT2sg d2lsbCByZW1vdmUgaGV4IG5vdGF0aW9uLgo+IAo+IFlvdSdyZSBhbHNvIGRvaW5nIGEgYml0d2lz ZSBPUiBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBsYW5lcy4gU28gc2luY2UgCj4gdGhlCj4gZGVm YXVsdCB2YWx1ZSBpcyAweDMsIHlvdSdsbCBuZXZlciBhY3R1YWxseSBjaGFuZ2UgYW55dGhpbmcu IFlvdSBuZWVkIAo+IHRvIGNsZWFyCj4gdGhlIGN1cnJlbnQgdmFsdWUgYmVmb3JlIHNldHRpbmcg dGhlIG5ldyB2YWx1ZS4gVGhpcyBhcHBsaWVzIGJlbG93IGFzIAo+IHdlbGwuCgp5ZXMsIGkgc2hv dWxkIG1hc2sgdGhlIGJpdHMgZmlyc3QgYW5kIHRoZW4gcHJvZ3JhbSB0aGUgbmV3IHZhbHVlLgo+ IAo+IAo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lfTEFORVNfUkVHLCB2 YWwpOwo+PiArCj4+ICsJLyogRFAgbGFuZSBjb25maWcgKi8KPj4gKwlyZWdtYXBfcmVhZChwZGF0 YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywgJnZhbCk7Cj4+ICsJdmFsIHw9ICgocGRhdGEt PmRzaS0+bGFuZXMgLSAweDEpICYgMHgwMykgPDwgMHg0Owo+PiArCXJlZ21hcF93cml0ZShwZGF0 YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywgdmFsKTsKPj4gKwo+PiArCS8qIHNldCBkc2kg Y2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLwo+PiArCWJpdF9yYXRlX21oeiA9IChtb2RlLT5jbG9jayAv IDEwMDApICoKPj4gKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+ Zm9ybWF0KTsKPj4gKwljbGtfZnJlcV9taHogPSBiaXRfcmF0ZV9taHogLyAocGRhdGEtPmRzaS0+ bGFuZXMgKiAyKTsKPj4gKwkvKiBmb3IgZWFjaCBpbmNyZW1lbnQgaW4gdmFsLCBmcmVxdWVuY3kg aW5jcmVhc2VzIGJ5IDVNSHogKi8KPj4gKwl2YWwgPSAoTUlOX0RTSV9DTEtfRlJFUV9NSFogLyAw eDUpICsKPj4gKwkJKCgoY2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gMHg1 KSAmIDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19G UkVRX1JFRywgdmFsKTsKPj4gKwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9E QVRBUkFURV9DT05GSUdfUkVHLCAweDgwKTsgLyogc2V0IAo+PiBIQlIgKi8KPiAKPiBUaGlzIHNo b3VsZCBhbHNvIGJlIGEgZnVuY3Rpb24gb2YgdGhlIHBjbGssIHJpZ2h0PwpZZXMsIHdpbGwgcHJv Z3JhbSB0aGlzIGJhc2VkIG9uIHBjbGsuCj4gCj4+ICsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDB4MSk7IC8qIEVuYWJsZSBQTEwgCj4+ICovCj4+ ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDA1MCk7Cj4+ICsKPj4gKwkvKiBEUENEIFJlZ2lzdGVy IDB4MDAxMEEgaW4gU2luayAqLwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9B VVhfV0RBVEEwX1JFRywgMHgwMSk7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0FVWF9BRERSXzE5XzE2X1JFRywgMHgwMCk7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdt YXAsIFNOX0FVWF9BRERSXzE1XzhfUkVHLCAweDAxKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQVVYX0FERFJfN18wX1JFRywgMHgwQSk7Cj4+ICsJcmVnbWFwX3dyaXRlKHBk YXRhLT5yZWdtYXAsIFNOX0FVWF9MRU5HVEhfUkVHLCAweDAxKTsKPj4gKwlyZWdtYXBfd3JpdGUo cGRhdGEtPnJlZ21hcCwgU05fQVVYX0NNRF9SRUcsIDB4ODEpOwo+IAo+IFdoYXQgYXJlIHlvdSBk b2luZyBoZXJlIGFuZCB3aHk/CkFzIHBlciB0aGUgZGF0YXNoZWV0IHdlIG5lZWQgdG8gZW5hYmxl IEFTU1IoKEFsdGVybmF0ZSBTY3JhbWJsZXIgU2VlZCAKUmVzZXQpIGluIGVkcCBwYW5lbCBiZWZv cmUgd2Ugc3RhcnQgbGluayB0cmFpbmluZy4KVGhpcyBpcyBzdGVwIGlzIGRvbmUgZm9yIHRoYXQu IEl0IHdpbGwgY29tbW9uIGZvciBhbGwgZWRwIHBhbmVscy4KCiAgICAgICAgIlRoZSBTTjY1RFNJ ODYgb25seSBzdXBwb3J0cyBBU1NSIERpc3BsYXkgQXV0aGVudGljYXRpb24gbWV0aG9kIAphbmQg dGhpcyBtZXRob2QgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBBbiBlRFAgcGFuZWwKbXVzdCBzdXBw b3J0IHRoaXMgQXV0aGVudGljYXRpb24gbWV0aG9kLiBTb2Z0d2FyZSB3aWxsIG5lZWQgdG8gZW5h YmxlIAp0aGlzIG1ldGhvZCBpbiB0aGUgZURQIHBhbmVsIGF0IERpc3BsYXlQb3J0IGFkZHJlc3MK MHgwMDEwQS4iCgo+IAo+PiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTAwNTApOwo+PiArCj4+ICsJ LyogU2VtaSBhdXRvIGxpbmsgdHJhaW5pbmcgbW9kZSAqLwo+PiArCXJlZ21hcF93cml0ZShwZGF0 YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMHgwQSk7Cj4+ICsJdXNsZWVwX3JhbmdlKDIw MDAwLCAyMDA1MCk7Cj4gCj4gWW91IHNob3VsZCB1c2UgbXNsZWVwIGlmIHlvdSBuZWVkIHRvIHNs ZWVwIGZvciB+MjBtcwo+IAo+IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9r ZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC90cmVlL0RvY3VtZW50YXRpb24vdGltZXJzL3Rp bWVycy1ob3d0by50eHQKPiAKPj4gKwo+PiArCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0ZXJzICov Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5H VEhfTE9XX1JFRywKPj4gKwkJCW1vZGUtPmhkaXNwbGF5ICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dy aXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcsCj4+ ICsJCQkobW9kZS0+aGRpc3BsYXkgPj4gMHg4KSAmIDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcsCj4+ICsJ CQltb2RlLT52ZGlzcGxheSAmIDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFw LCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVHLAo+PiArCQkJKG1vZGUtPnZk aXNwbGF5ID4+IDB4OCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4+ICsJCQkobW9kZS0+aHN5bmNfZW5k IC0gbW9kZS0+aHN5bmNfc3RhcnQpICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKPj4gKwkJCSgobW9kZS0+ aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQpID4+IDB4OCkgJiAweEZGKTsKPj4gKwlyZWdt YXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcs Cj4+ICsJCQkobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQpICYgMHhGRik7Cj4+ ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9I SUdIX1JFRywKPj4gKwkJCSgobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQpID4+ IDB4OCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hP UklaT05UQUxfQkFDS19QT1JDSF9SRUcsCj4+ICsJCQkobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5 bmNfZW5kKSAmIDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFf VkVSVElDQUxfQkFDS19QT1JDSF9SRUcsCj4+ICsJCQkobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5 bmNfZW5kKSAmIDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFf SE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9SRUcsCj4+ICsJCQkobW9kZS0+aHN5bmNfc3RhcnQgLSBt b2RlLT5oZGlzcGxheSkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywKPj4gKwkJCShtb2RlLT52c3luY19zdGFy dCAtIG1vZGUtPnZkaXNwbGF5KSAmIDB4RkYpOwo+PiArCWlmIChwZGF0YS0+ZHNpLT5mb3JtYXQg PT0gTUlQSV9EU0lfRk1UX1JHQjg4OCkKPj4gKwkJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0RBVEFfRk9STUFUX1JFRywgMHgwMCk7Cj4+ICsJZWxzZQo+PiArCQlyZWdtYXBfd3JpdGUo cGRhdGEtPnJlZ21hcCwgU05fREFUQV9GT1JNQVRfUkVHLCAweDAxKTsKPiAKPiBUaGUgZm9ybWF0 IGlzIGhhcmRjb2RlZCBhYm92ZS4KCj4gCj4+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDA1MCk7 Cj4+ICsKPj4gKwkvKiBlbmFibGUgdmlkZW8gc3RyZWFtICovCj4+ICsJcmVnbWFwX3JlYWQocGRh dGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywgJnZhbCk7Cj4+ICsJdmFsIHw9IEJJVCgzKTsK Pj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywgdmFsKTsK Pj4gKwo+PiArCWlmIChwYW5lbCkKPj4gKwkJZHJtX3BhbmVsX2VuYWJsZShwYW5lbCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyB0aV9zbl9icmlk Z2VfZnVuY3MgPSB7Cj4+ICsJLmF0dGFjaCA9IHRpX3NuX2JyaWRnZV9hdHRhY2gsCj4+ICsJLmVu YWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCj4+ICsJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2Vf ZGlzYWJsZSwKPj4gKwkubW9kZV9zZXQgPSB0aV9zbl9icmlkZ2VfbW9kZV9zZXQsCj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJzZV9ncGlvcyhzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCXBkYXRhLT5l bmFibGVfZ3Bpb3MgPSBkZXZtX2dwaW9kX2dldF9hcnJheShwZGF0YS0+ZGV2LAo+PiArCQkJCQkJ ImVuYWJsZSIsIEdQSU9EX09VVF9MT1cpOwo+PiArCWlmIChJU19FUlIocGRhdGEtPmVuYWJsZV9n cGlvcykpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvIGZyb20g RFRcbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpb3MpOwo+PiArCQln b3RvIGV4aXQ7Cj4+ICsJfQo+PiArCS8qIGluaXRpYWxpemUgdGhlIHZhbHVlIGFycmF5ICovCj4+ ICsJcGRhdGEtPnZhbHVlX2FycmF5ID0ga21hbGxvYyhwZGF0YS0+ZW5hYmxlX2dwaW9zLT5uZGVz Y3MgKiAKPj4gc2l6ZW9mKGludCksCj4+ICsJCQkJCQkJCUdGUF9LRVJORUwpOwo+PiArCWlmICgh cGRhdGEtPnZhbHVlX2FycmF5KSB7Cj4+ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gZXhp dDsKPj4gKwl9Cj4+ICsJbWVtc2V0KHBkYXRhLT52YWx1ZV9hcnJheSwgMCwKPj4gKwkJCXBkYXRh LT5lbmFibGVfZ3Bpb3MtPm5kZXNjcyAqIHNpemVvZihpbnQpKTsKPj4gKwo+PiArZXhpdDoKPj4g KwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJz ZV9kc2lfaG9zdChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wID0gcGRhdGEtPmRldi0+b2Zfbm9kZTsKPj4gKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKmVuZF9ub2RlOwo+PiArCj4+ICsJZW5kX25vZGUgPSBvZl9ncmFwaF9nZXRfZW5kcG9p bnRfYnlfcmVncyhucCwgMCwgMCk7Cj4+ICsJaWYgKCFlbmRfbm9kZSkgewo+PiArCQlEUk1fRVJS T1IoInJlbW90ZSBlbmRwb2ludCBub3QgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsK Pj4gKwl9Cj4+ICsKPj4gKwlwZGF0YS0+aG9zdF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9w b3J0X3BhcmVudChlbmRfbm9kZSk7Cj4+ICsJb2Zfbm9kZV9wdXQoZW5kX25vZGUpOwo+PiArCWlm ICghcGRhdGEtPmhvc3Rfbm9kZSkgewo+PiArCQlEUk1fRVJST1IoInJlbW90ZSBub2RlIG5vdCBm b3VuZFxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwlvZl9ub2RlX3B1dChw ZGF0YS0+aG9zdF9ub2RlKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IHRpX3NuX2JyaWRnZV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+PiAr CSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4+ICt7Cj4+ICsJc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGE7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpkZGNfbm9kZTsKPj4gKwlp bnQgcmV0ID0gMDsKPj4gKwo+PiArCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50 LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Cj4+ICsJCURSTV9FUlJPUigiZGV2aWNlIGRvZXNu J3Qgc3VwcG9ydCBJMkNcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4g KwlwZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsCj4+ICsJCXNpemVvZihzdHJ1Y3Qg dGlfc25fYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFwZGF0YSkKPj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4+ICsKPj4gKwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2Owo+PiArCXBkYXRh LT5pMmNfY2xpZW50ID0gY2xpZW50Owo+PiArCXBkYXRhLT5pbnRwX2lycSA9IGNsaWVudC0+aXJx Owo+PiArCURSTV9ERUJVRygiSTJDIGFkZHJlc3MgaXMgJXhcbiIsIGNsaWVudC0+YWRkcik7Cj4+ ICsKPj4gKwlwZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAo+PiAr CQkJCSZ0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZpZyk7Cj4+ICsJaWYgKElTX0VSUihwZGF0YS0+ cmVnbWFwKSkKPj4gKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPnJlZ21hcCk7Cj4+ICsKPj4gKwly ZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRhdGEpOwo+PiArCWlmIChyZXQpCj4+ ICsJCWdvdG8gZXJyX2R0X3BhcnNlOwo+PiArCj4+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNl X2dwaW9zKHBkYXRhKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPj4g Kwo+PiArCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHBkYXRhKTsKPj4gKwlp ZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJlZ3VsYXRvcnNcbiIp Owo+PiArCQlnb3RvIGVycl9yZWdfcGFyc2U7Cj4+ICsJfQo+PiArCj4+ICsJZGRjX25vZGUgPSBv Zl9wYXJzZV9waGFuZGxlKHBkYXRhLT5kZXYtPm9mX25vZGUsICJkZGMtaTJjLWJ1cyIsIDApOwo+ PiArCWlmIChkZGNfbm9kZSkgewo+PiArCQlwZGF0YS0+ZGRjID0gb2ZfZmluZF9pMmNfYWRhcHRl cl9ieV9ub2RlKGRkY19ub2RlKTsKPj4gKwkJb2Zfbm9kZV9wdXQoZGRjX25vZGUpOwo+PiArCQlp ZiAoIXBkYXRhLT5kZGMpIHsKPj4gKwkJCWRldl9kYmcocGRhdGEtPmRldiwgImZhaWxlZCB0byBy ZWFkIGRkYyBub2RlXG4iKTsKPj4gKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+PiArCQl9Cj4+ ICsJfSBlbHNlIHsKPj4gKwkJZGV2X2RiZyhwZGF0YS0+ZGV2LCAibm8gZGRjIHByb3BlcnR5IGZv dW5kXG4iKTsKPj4gKwl9Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwg dHJ1ZSk7Cj4+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldihwZGF0YSk7Cj4+ ICsJaWYgKHJldCkKPj4gKwkJZ290byBlcnJfY29uZmlnOwo+PiArCXRpX3NuX2JyaWRnZV9wb3dl cl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4+ICsKPj4gKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50 LCBwZGF0YSk7Cj4+ICsJZGV2X3NldF9kcnZkYXRhKCZjbGllbnQtPmRldiwgcGRhdGEpOwo+IAo+ IGRydmRhdGEgZG9lc24ndCBzZWVtIHRvIGJlIHVzZWQgYW55d2hlcmUuCj4gCj4+ICsKPj4gKwlw ZGF0YS0+YnJpZGdlLmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKPj4gKwlwZGF0YS0+YnJp ZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOwo+PiArCj4+ICsJZHJtX2JyaWRnZV9h ZGQoJnBkYXRhLT5icmlkZ2UpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gKwo+PiArZXJyX2Nv bmZpZzoKPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOwo+IAo+IEp1 c3QgdHVybiBpdCBvZmYgYmVmb3JlIHlvdSBjaGVjayByZXQgKHNpbWlsYXIgdG8gdGhlIG9mX25v ZGVfcHV0IGNhbGxzCj4gdGhyb3VnaG91dCB0aGUgZHJpdmVyKS4KT0sKPiAKPj4gK2Vycl9yZWdf cGFyc2U6Cj4+ICsJa2ZyZWUocGRhdGEtPnZhbHVlX2FycmF5KTsKPj4gK2Vycl9kdF9wYXJzZToK Pj4gKwlkZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgcGRhdGEpOwo+IAo+IElmIGl0J3MgZGV2aWNl IG1hbmFnZWQsIHlvdSBkb24ndCBuZWVkIGV4cGxpY2l0IGZyZWVzLgpZZXMuIHdpbGwgcmVtb3Zl IHRoaXMuCj4gCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0aV9z bl9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4+ICt7Cj4+ICsJaW50 IHJldCA9IC1FSU5WQUw7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBpMmNfZ2V0 X2NsaWVudGRhdGEoY2xpZW50KTsKPj4gKwo+PiArCWlmICghcGRhdGEpCj4+ICsJCWdvdG8gZW5k Owo+PiArCj4+ICsJbWlwaV9kc2lfZGV0YWNoKHBkYXRhLT5kc2kpOwo+PiArCW1pcGlfZHNpX2Rl dmljZV91bnJlZ2lzdGVyKHBkYXRhLT5kc2kpOwo+PiArCj4+ICsJdGlfc25fYnJpZGdlX3Bvd2Vy X2N0cmwocGRhdGEsIGZhbHNlKTsKPiAKPiBJZiB5b3Ugd2FudCB0byByZWZjb3VudCBwb3dlcl9j dHJsLCB5b3UnbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCdzCj4gX2FjdHVhbGx5XyBvZmYu CmNoZWNrZWQgYWxsIHRoZSBjYWxscyB0byBwb3dlcl9jdHJsIGluIGRyaXZlciwgd2UgZG9udCBu ZWVkIGEgY2FsbCB0byAKcG93ZXJfY3RybC4KYnJpZGdlX2Rpc2FibGUgc2hvdWxkIGJlIHRoZSBw bGFjZSB3aGVyZSBsYXN0IGNhbGwgdG8gcG93ZXJfY3RybCBuZWVkcyAKdG8gYmUgbWFkZS4KCj4g Cj4+ICsJa2ZyZWUocGRhdGEtPnZhbHVlX2FycmF5KTsKPj4gKwo+PiArCWRybV9icmlkZ2VfcmVt b3ZlKCZwZGF0YS0+YnJpZGdlKTsKPj4gKwlpMmNfcHV0X2FkYXB0ZXIocGRhdGEtPmRkYyk7Cj4+ ICsKPj4gKwlkZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgcGRhdGEpOwo+PiArCj4+ICtlbmQ6Cj4+ ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lk IHRpX3NuX2JyaWRnZV9pZFtdID0gewo+PiArCXsgInRpLHNuNjVkc2k4NiIsIDB9LAo+PiArCXt9 LAo+PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0aV9zbl9icmlkZ2VfaWQpOwo+ PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0aV9zbl9icmlkZ2VfbWF0 Y2hfdGFibGVbXSA9IHsKPj4gKwl7LmNvbXBhdGlibGUgPSAidGksc242NWRzaTg2In0sCj4+ICsJ e30sCj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGlfc25fYnJpZGdlX21hdGNo X3RhYmxlKTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRpX3NuX2JyaWRnZV9k cml2ZXIgPSB7Cj4+ICsJLmRyaXZlciA9IHsKPj4gKwkJLm5hbWUgPSAidGlfc242NWRzaTg2IiwK Pj4gKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHRpX3Nu X2JyaWRnZV9tYXRjaF90YWJsZSwKPj4gKwl9LAo+PiArCS5wcm9iZSA9IHRpX3NuX2JyaWRnZV9w cm9iZSwKPj4gKwkucmVtb3ZlID0gdGlfc25fYnJpZGdlX3JlbW92ZSwKPj4gKwkuaWRfdGFibGUg PSB0aV9zbl9icmlkZ2VfaWQsCj4+ICt9Owo+PiArCj4+ICttb2R1bGVfaTJjX2RyaXZlcih0aV9z bl9icmlkZ2VfZHJpdmVyKTsKPj4gK01PRFVMRV9ERVNDUklQVElPTigic242NWRzaTg2IERTSSB0 byBlRFAgYnJpZGdlIGRyaXZlciIpOwo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IAo+IEdQ TCB2Mj8KPiAKPj4gLS0KPj4gVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlz IGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSAKPj4gRm9ydW0sCj4+IGEgTGludXggRm91bmRh dGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKPj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZyZWVkcmVubwo=