From mboxrd@z Thu Jan 1 00:00:00 1970 From: spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [PATCH v14 1/2] drm/bridge: add support for sn65dsi86 bridge driver Date: Thu, 19 Jul 2018 11:45:44 +0530 Message-ID: <0bc5b3a4979473db51a2d20a229e1918@codeaurora.org> References: <20180716084330.26698-1-spanda@codeaurora.org> <20180716084330.26698-2-spanda@codeaurora.org> <20180719052801eucas1p2e0bc48b844f027abe575a8cf5eb180f6~CrfK6hgTh2322323223eucas1p2Q@eucas1p2.samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180719052801eucas1p2e0bc48b844f027abe575a8cf5eb180f6~CrfK6hgTh2322323223eucas1p2Q-PmokGAFL9ItqW5MlFJXMulaTQe2KTcn/@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Andrzej Hajda 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 T24gMjAxOC0wNy0xOSAxMDo1NywgQW5kcnplaiBIYWpkYSB3cm90ZToKPiBPbiAxNi1KdWwtMTgg MTc6NDMsIFNhbmRlZXAgUGFuZGEgd3JvdGU6Cj4+IEFkZCBzdXBwb3J0IGZvciBUSSdzIHNuNjVk c2k4NiBkc2kyZWRwIGJyaWRnZSBjaGlwLgo+PiBUaGUgY2hpcCBjb252ZXJ0cyBEU0kgdHJhbnNt aXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWduYWwsCj4+IHdoaWNoIGlzIGZlZCB0byB0aGUgY29ubmVj dGVkIGVEUCBwYW5lbC4KPj4gCj4+IFRoaXMgY2hpcCBjYW4gYmUgY29udHJvbGxlZCB2aWEgZWl0 aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPj4gZHNpIGludGVyZmFjZS4gQ3VycmVudGx5IGluIGRyaXZl ciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCj4+IGFyZSBiZWluZyBhY2Nlc3NlZCB0aHJvdWdo IGkyYyBpbnRlcmZhY2Ugb25seS4KPj4gQWxzbyBhcyBvZiBub3cgSFBEIHN1cHBvcnQgaGFzIG5v dCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+PiBjaGlwIGRyaXZlci4KPj4gCj4+IENoYW5nZXMgaW4g djE6Cj4+ICAgLSBTcGxpdCB0aGUgZHQtYmluZGluZ3MgYW5kIHRoZSBkcml2ZXIgc3VwcG9ydCBp bnRvIHNlcGFyYXRlIHBhdGNoZXMKPj4gICAgIChBbmRyemVqIEhhamRhKS4KPj4gICAtIFVzZSBv ZiBncGlvZCBBUElzIHRvIHBhcnNlIGFuZCBjb25maWd1cmUgZ3Bpb3MgaW5zdGVhZCBvZiBvYnNv bGV0ZSAKPj4gb25lcwo+PiAgICAgKEFuZHJ6ZWogSGFqZGEpLgo+PiAgIC0gVXNlIG1hY3JvcyB0 byBkZWZpbmUgdGhlIHJlZ2lzdGVyIG9mZnNldHMgKEFuZHJ6ZWogSGFqZGEpLgo+PiAKPj4gQ2hh bmdlcyBpbiB2MjoKPj4gICAtIFNlcGFyYXRlIG91dCBlZHAgcGFuZWwgc3BlY2lmaWMgSFcgcmVz b3VyY2UgaGFuZGxpbmcgZnJvbSBicmlkZ2UKPj4gICAgIGRyaXZlciBhbmQgY3JlYXRlIGEgc2Vw YXJhdGUgZWRwIHBhbmVsIGRyaXZlcnMgdG8gaGFuZGxlIHBhbmVsCj4+ICAgICBzcGVjaWZpYyBt b2RlIGluZm9ybWF0aW9uIGFuZCBIVyByZXNvdXJjZXMgKFNlYW4gUGF1bCkuCj4+ICAgLSBSZXBs YWNlIHByXyogQVBJcyB0byBEUk1fKiBBUElzIHRvIGxvZyBlcnJvciBvciBkZWJ1ZyBpbmZvcm1h dGlvbgo+PiAgICAgKFNlYW4gUGF1bCkuCj4+ICAgLSBSZW1vdmUgc29tZSBvZiB0aGUgdW5uZWNl c3Nhcnkgc3RydWN0dXJlL3ZhcmlhYmxlIGZyb20gZHJpdmVyIAo+PiAoU2Vhbgo+PiAgICAgUGF1 bCkuCj4+ICAgLSBSZW5hbWUgdGhlIGZ1bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgcHJlZml4ICJzbjY1 ZHNpODYiIHRvIAo+PiAidGlfc25fYnJpZGdlIgo+PiAgICAgKFNlYW4gUGF1bCAvIFJvYiBIZXJy aW5nKS4KPj4gICAtIFJlbW92ZSBtb3N0IG9mIHRoZSBoYXJkLWNvZGluZyBhbmQgbW9kaWZpZWQg dGhlIGJyaWRnZSBpbml0IAo+PiBzZXF1ZW5jZQo+PiAgICAgYmFzZWQgb24gY3VycmVudCBtb2Rl IChTZWFuIFBhdWwpLgo+PiAgIC0gUmVtb3ZlIHRoZSBleGlzdGluZyBmdW5jdGlvbiB0byByZXRy aWV2ZSB0aGUgRURJRCBkYXRhIGFuZAo+PiAgICAgaW1wbGVtZW50ZWQgdGhpcyBhcyBhbiBpMmNf YWRhcHRlciBhbmQgdXNlIGRybV9nZXRfZWRpZCgpIChTZWFuIAo+PiBQYXVsKS4KPj4gICAtIFJl bW92ZSB0aGUgZHVtbXkgaXJxIGhhbmRsZXIgaW1wbGVtZW50YXRpb24sIHdpbGwgYWRkIGJhY2sg dGhlCj4+ICAgICBwcm9wZXIgaXJxIGhhbmRsaW5nIGxhdGVyIChTZWFuIFBhdWwpLgo+PiAgIC0g Q2FwdHVyZSB0aGUgcmVxdWlyZWQgZW5hYmxlIGdwaW9zIGluIGEgc2luZ2xlIGFycmF5IGJhc2Vk IG9uIGR0IAo+PiBlbnRyeQo+PiAgICAgaW5zdGVhZCBvZiBoYXZpbmcgaW5kaXZpZHVhbCBkZXNj cmlwdG9yIGZvciBlYWNoIGdwaW8gKFNlYW4gUGF1bCkuCj4+IAo+PiBDaGFuZ2VzIGluIHYzOgo+ PiAgIC0gUmVtb3ZlIHVzYWdlIG9mIGlycV9ncGlvIGFuZCByZXBsYWNlIGl0IGFzICJpbnRlcnJ1 cHRzIiBwcm9wZXJ0eSAKPj4gKFJvYgo+PiAgICAgSGVycmluZykuCj4+ICAgLSBSZW1vdmUgdGhl IHVubmVjZXNzYXJ5IGhlYWRlciBmaWxlIGluY2x1c2lvbnMgKFNlYW4gUGF1bCkuCj4+ICAgLSBS ZWFycmFuZ2UgdGhlIGhlYWRlciBmaWxlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIgKFNlYW4gUGF1 bCkuCj4+ICAgLSBVc2UgcmVnbWFwIGludGVyZmFjZSB0byBwZXJmb3JtIGkyYyB0cmFuc2FjdGlv bnMuCj4+ICAgLSBVcGRhdGUgQ29weXJpZ2h0L0xpY2Vuc2UgZmllbGQgYW5kIGFkZHJlc3Mgb3Ro ZXIgcmV2aWV3IGNvbW1lbnRzCj4+ICAgICAoSm9yZGFuIENyb3VzZSkuCj4+IAo+PiBDaGFuZ2Vz IGluIHY0Ogo+PiAgIC0gVXBkYXRlIExpY2Vuc2UvQ29weXJpZ2h0IChTZWFuIFBhdWwpLgo+PiAg IC0gQWRkIEtjb25maWcgYW5kIE1ha2VmaWxlIGNoYW5nZXMgKFNlYW4gUGF1bCkuCj4+ICAgLSBE cm9wIGkyYyBncGlvIGhhbmRsaW5nIGZyb20gdGhpcyBicmlkZ2UgZHJpdmVyLCBzaW5jZSBpMmMg c2RhL3NjbCAKPj4gZ3Bpb3MKPj4gICAgIHdpbGwgYmUgaGFuZGxlZCBieSBpMmMgbWFzdGVyLgo+ PiAgIC0gVXBkYXRlIHJlcXVpcmVkIHN1cHBsaWVzIG5hbWVzLgo+PiAgIC0gUmVtb3ZlIHVubmVj ZXNzYXJ5IGdvdG8gc3RhdGVtZW50cyAoU2VhbiBQYXVsKS4KPj4gICAtIEFkZCBtdXRleCBsb2Nr IHRvIHBvd2VyX2N0cmwgQVBJIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyAoU2Vhbgo+PiAgICAg UGF1bCkuCj4+ICAgLSBBZGQgc3VwcG9ydCB0byBwYXJzZSByZWZlcmVuY2UgY2xrIGZyZXF1ZW5j eSBmcm9tIGR0KG9wdGlvbmFsKS4KPj4gICAtIFVwZGF0ZSB0aGUgYnJpZGdlIGNoaXAgZW5hYmxl L2Rpc2FibGUgc2VxdWVuY2UuCj4+IAo+PiBDaGFuZ2VzIGluIHY1Ogo+PiAgIC0gRml4ZWQgS2J1 aWxkIHRlc3Qgc2VydmljZSByZXBvcnRlZCB3YXJuaW5ncy4KPj4gCj4+IENoYW5nZXMgaW4gdjY6 Cj4+ICAgLSBVc2UgUE0gcnVudGltZSBiYXNlZCByZWYtY291bnRpbmcgaW5zdGVhZCBvZiBsb2Nh bCByZWZfY291bnQgCj4+IG1lY2hhbmlzbQo+PiAgICAgKFN0ZXBoZW4gQm95ZCkuCj4+ICAgLSBD bGVhbiB1cCBzb21lIGRlYnVnIGxvZ3MgYW5kIGluZGVudGF0aW9ucyAoU2VhbiBQYXVsKS4KPj4g ICAtIFNpbXBsaWZ5IGRwIHJhdGUgY2FsY3VsYXRpb24gKFNlYW4gUGF1bCkuCj4+ICAgLSBBZGQg c3VwcG9ydCB0byBjb25maWd1cmUgcmVmY2xrIGJhc2VkIG9uIGlucHV0IFJFRkNMSyBwaW4gb3Ig Cj4+IERBQ1AvTgo+PiAgICAgcGluIChTdGVwaGVuIEJveWQpLgo+PiAKPj4gQ2hhbmdlcyBpbiB2 NzoKPj4gICAtIFVzZSBzdGF0aWMgc3VwcGx5IGVudHJpZXMgaW5zdGVhZCBvZiBkeW5hbWljIGFs bG9jYXRpb24gKEFuZHJ6ZWoKPj4gICAgIEhhamRhKS4KPj4gICAtIERlZmVyIGJyaWRnZSBkcml2 ZXIgcHJvYmUgaWYgcGFuZWwgaXMgbm90IHByb2JlZCAoQW5kcnplaiBIYWpkYSkuCj4+ICAgLSBV cGRhdGUgb2ZfZ3JhcGggQVBJcyBmb3IgY29ycmVjdCBub2RlIHJlZmVyZW5jZSBtYW5hZ2VtZW50 LiAKPj4gKEFuZHJ6ZWoKPj4gICAgIEhhamRhKS4KPj4gICAtIFJlbW92ZSBsb2NhbCBkaXNwbGF5 X21vZGUgb2JqZWN0IChBbmRyemVqIEhhamRhKS4KPj4gICAtIFJlbW92ZSB2ZXJzaW9uIGlkIGNo ZWNrIGZ1bmN0aW9uIGZyb20gZHJpdmVyLgo+PiAKPj4gQ2hhbmdlcyBpbiB2ODoKPj4gICAtIE1v dmUgZHNpIHJlZ2lzdGVyL2F0dGFjaCBmdW5jdGlvbiB0byBicmlkZ2UgZHJpdmVyIHByb2JlIChB bmRyemVqCj4+ICAgICBIYWpkYSkuCj4+ICAgLSBJbnRyb2R1Y2UgYSBuZXcgaGVscGVyIGZ1bmN0 aW9uIHRvIHdyaXRlIDE2Yml0IHdvcmRzIGludG8gCj4+IGNvbnNlY3V0aXZlCj4+ICAgICByZWdp c3RlcnMgKEFuZHJ6ZWogSGFqZGEpLgo+PiAgIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IG1hY3JvcyAo QW5kcnplaiBIYWpkYSkuCj4+IAo+PiBDaGFuZ2VzIGluIHY5Ogo+PiAgIC0gUmVtb3ZlIGRzaSBy ZWdpc3Rlci9hdHRhY2ggZnJvbSBicmlkZ2UgcHJvYmUsIHNpbmNlIGRzaSBkZXYgCj4+IHJlZ2lz dGVyCj4+ICAgICBjb21wbGV0aW9uIGFsc28gd2FpdHMgZm9yIGFueSBwYW5lbCBvciBicmlkZ2Ug dG8gZ2V0IGFkZGVkLiBUaGlzIAo+PiBjcmVhdGVzCj4+ICAgICBkZWFkbG9jayBzaXR1YXRpb24g d2hlbiBicmlkZ2UgZHJpdmVyIGNhbGxzIGRzaSBkZXYgcmVnaXN0ZXIgYW5kCj4+ICAgICBhdHRh Y2ggYmVmb3JlIGJyaWRnZSBhZGQsIGluIGl0cyBwcm9iZSBmdW5jdGlvbi4KPj4gICAtIEZpeCBp c3N1ZXMgZmFjZWQgZHVyaW5nIHRlc3Rpbmcgb2YgYnJpZGdlIGRyaXZlciBvbiBhY3R1YWwgSFcu Cj4+ICAgLSBSZW1vdmUgdW5uZWNlc3NhcnkgaW5pdGlhbGl6YXRpb25zIChTdGVwaGVuIEJveWQp Lgo+PiAgIC0gVXNlIGxvY2FsIHJlZmNsayBsdXQgc2l6ZSBpbnN0ZWFkIG9mIGdsb2JhbCBtYWNy byAoU2VhbiBQYXVsKS4KPj4gCj4+IENoYW5nZXMgaW4gdjEwOgo+PiAgIC0gVXNlIHJlZmNsayB0 byBkZXRlcm1pbmUgaWYgY29udGludW91cyBkc2kgY2xvY2sgaXMgbmVlZGVkIG9yIG5vdC4KPj4g Cj4+IENoYW5nZXMgaW4gdjExOgo+PiAgIC0gUmVhZCBEUFBMTF9TUkMgcmVnaXN0ZXIgdG8gZGV0 ZXJtaW5lIGNvbnRpbnVvdXMgY2xvY2sgaW5zdGVhZCBvZgo+PiAgICAgdXNpbmcgcmVmY2xrIGhh bmRsZSAoU3RlcGhlbiBCb3lkKS4KPj4gCj4+IENoYW5nZXMgaW4gdjEyOgo+PiAgIC0gRXhwbGFp biBpbiBjb21tZW50IGFzIGluIHdoeSBkc2kgZGV2IHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluCj4+ ICAgICBicmlkZ2VfYXR0YWNoIChBbmRyemVqIEhhamRhKS4KPj4gICAtIE1vdmUgSFBEIGRpc2Fi bGUgdG8gYnJpZGdlX3ByZV9lbmFibGUgKEFuZHJ6ZWogSGFqZGEpLgo+PiAgIC0gTWFrZSBwYW5l bC9EREMgZXhjbHVzaXZlIHVudGlsIEhQRCBzdXBwb3J0IGlzIGFkZGVkIChBbmRyemVqIAo+PiBI YWpkYSkuCj4+IAo+PiBDaGFuZ2VzIGluIHYxMzoKPj4gICAtIGVEUCBwYW5lbHMgcmVwb3J0IEVE SUQgdmlhIERQLUFVWCBjaGFubmVsLCBzbyByZW1vdmUgc3VwcG9ydCBmb3IKPj4gICAgIGRlZGlj YXRlZCBEREMgbGluZSAoQW5kcnplaiBIYWpkYSkuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5OiBTYW5k ZWVwIFBhbmRhIDxzcGFuZGFAY29kZWF1cm9yYS5vcmc+Cj4+IC0tLQo+PiAgIGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgfCAgIDkgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvTWFrZWZpbGUgICAgICAgfCAgIDEgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv dGktc242NWRzaTg2LmMgfCA2NzYgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPj4gICAzIGZpbGVzIGNoYW5nZWQsIDY4NiBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKPj4gCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgCj4+IGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnCj4+IGluZGV4IDNiOTlkNWEwNmMxNi4uODE1MzE1MGFjZDM2 IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4+IEBAIC0xMDgsNiArMTA4LDE1IEBAIGNv bmZpZyBEUk1fVElfVEZQNDEwCj4+ICAgCS0tLWhlbHAtLS0KPj4gICAJICBUZXhhcyBJbnN0cnVt ZW50cyBURlA0MTAgRFZJL0hETUkgVHJhbnNtaXR0ZXIgZHJpdmVyCj4+IAo+PiArY29uZmlnIERS TV9USV9TTjY1RFNJODYKPj4gKwl0cmlzdGF0ZSAiVEkgU042NURTSTg2IERTSSB0byBlRFAgYnJp ZGdlIgo+PiArCWRlcGVuZHMgb24gT0YKPj4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPj4gKwlz ZWxlY3QgUkVHTUFQX0kyQwo+PiArCXNlbGVjdCBEUk1fUEFORUwKPj4gKwktLS1oZWxwLS0tCj4+ ICsJICBUZXhhcyBJbnN0cnVtZW50cyBTTjY1RFNJODYgRFNJIHRvIGVEUCBCcmlkZ2UgZHJpdmVy Cj4+ICsKPj4gICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZp ZyIKPj4gCj4+ICAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZp ZyIKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgCj4+IGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+PiBpbmRleCAzNzNlYjI4ZjMxZWQuLmE3 Y2EwMDBmNjA0OCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4+IEBAIC0xMSw1ICsx MSw2IEBAIG9iai0kKENPTkZJR19EUk1fU0lJOTIzNCkgKz0gc2lpOTIzNC5vCj4+ICAgb2JqLSQo Q09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3KSArPSB0YzM1ODc2Ny5vCj4+ICAgb2JqLSQoQ09O RklHX0RSTV9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXgvCj4+ICAgb2JqLSQoQ09ORklHX0RSTV9J MkNfQURWNzUxMSkgKz0gYWR2NzUxMS8KPj4gK29iai0kKENPTkZJR19EUk1fVElfU042NURTSTg2 KSArPSB0aS1zbjY1ZHNpODYubwo+PiAgIG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0 aS10ZnA0MTAubwo+PiAgIG9iai15ICs9IHN5bm9wc3lzLwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL3RpLXNuNjVkc2k4Ni5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw MDAwMDAwMC4uMmY1NjBlM2ExNDYwCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+PiBAQCAtMCwwICsxLDY3NiBAQAo+PiArLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQg KGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+PiAr ICovCj4+ICsKPj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4+ICsjaW5j bHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9k c2kuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9w YW5lbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2dw aW8vY29uc3VtZXIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPj4gKyNpbmNsdWRlIDxs aW51eC9vZl9ncmFwaC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29u c3VtZXIuaD4KPj4gKwo+PiArLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8K Pj4gKyNkZWZpbmUgU05fREVWSUNFX1JFVl9SRUcJCQkweDA4Cj4+ICsjZGVmaW5lIFNOX0hQRF9E SVNBQkxFX1JFRwkJCTB4NUMKPj4gKyNkZWZpbmUgU05fRFBQTExfU1JDX1JFRwkJCTB4MEEKPj4g KyNkZWZpbmUgU05fRFNJX0xBTkVTX1JFRwkJCTB4MTAKPj4gKyNkZWZpbmUgU05fRFNJQV9DTEtf RlJFUV9SRUcJCQkweDEyCj4+ICsjZGVmaW5lIFNOX0VOSF9GUkFNRV9SRUcJCQkweDVBCj4+ICsj ZGVmaW5lIFNOX1NTQ19DT05GSUdfUkVHCQkJMHg5Mwo+PiArI2RlZmluZSBTTl9EQVRBUkFURV9D T05GSUdfUkVHCQkJMHg5NAo+PiArI2RlZmluZSBTTl9QTExfRU5BQkxFX1JFRwkJCTB4MEQKPj4g KyNkZWZpbmUgU05fU0NSQU1CTEVfQ09ORklHX1JFRwkJCTB4OTUKPj4gKyNkZWZpbmUgU05fQVVY X1dEQVRBMF9SRUcJCQkweDY0Cj4+ICsjZGVmaW5lIFNOX0FVWF9BRERSXzE5XzE2X1JFRwkJCTB4 NzQKPj4gKyNkZWZpbmUgU05fQVVYX0FERFJfMTVfOF9SRUcJCQkweDc1Cj4+ICsjZGVmaW5lIFNO X0FVWF9BRERSXzdfMF9SRUcJCQkweDc2Cj4+ICsjZGVmaW5lIFNOX0FVWF9MRU5HVEhfUkVHCQkJ MHg3Nwo+PiArI2RlZmluZSBTTl9BVVhfQ01EX1JFRwkJCQkweDc4Cj4+ICsjZGVmaW5lIFNOX01M X1RYX01PREVfUkVHCQkJMHg5Ngo+PiArLyogdmlkZW8gY29uZmlnIHNwZWNpZmljIHJlZ2lzdGVy cyAqLwo+PiArI2RlZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcJMHgyMAo+ PiArI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgyNAo+PiAr I2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDJDCj4+ICsjZGVmaW5l IFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECj4+ICsjZGVmaW5lIFNOX0NI QV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4MzAKPj4gKyNkZWZpbmUgU05fQ0hBX1ZTWU5D X1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MzEKPj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxf QkFDS19QT1JDSF9SRUcJMHgzNAo+PiArI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JD SF9SRUcJCTB4MzYKPj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVH CTB4MzgKPj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRwkJMHgzQQo+ PiArI2RlZmluZSBTTl9EQVRBX0ZPUk1BVF9SRUcJCQkweDVCCj4+ICsKPj4gKyNkZWZpbmUgTUlO X0RTSV9DTEtfRlJFUV9NSFoJNDAKPj4gKwo+PiArLyogZnVkZ2UgZmFjdG9yIHJlcXVpcmVkIHRv IGFjY291bnQgZm9yIDhiLzEwYiBlbmNvZGluZyAqLwo+PiArI2RlZmluZSBEUF9DTEtfRlVER0Vf TlVNCTEwCj4+ICsjZGVmaW5lIERQX0NMS19GVURHRV9ERU4JOAo+PiArCj4+ICsjZGVmaW5lIERQ UExMX0NMS19TUkNfUkVGQ0xLCTAKPj4gKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19EU0lDTEsJMQo+ PiArCj4+ICsjZGVmaW5lIFNOX1JFRkNMS19GUkVRX09GRlNFVAkxCj4+ICsjZGVmaW5lIFNOX0RT SUFfTEFORV9PRkZTRVQJMwo+PiArI2RlZmluZSBTTl9EUF9MQU5FX09GRlNFVAk0Cj4+ICsjZGVm aW5lIFNOX0RQX0RBVEFfUkFURV9PRkZTRVQJNQo+PiArI2RlZmluZSBTTl9TWU5DX1BPTEFSSVRZ X09GRlNFVAk3Cj4+ICsKPj4gKyNkZWZpbmUgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUCUJJVCgz KQo+PiArI2RlZmluZSBTTl9SRUZDTEtfRlJFUV9CSVRTCQlHRU5NQVNLKDMsIDEpCj4+ICsjZGVm aW5lIFNOX0RTSUFfTlVNX0xBTkVTX0JJVFMJCUdFTk1BU0soNCwgMykKPj4gKyNkZWZpbmUgU05f RFBfTlVNX0xBTkVTX0JJVFMJCUdFTk1BU0soNSwgNCkKPj4gKyNkZWZpbmUgU05fRFBfREFUQV9S QVRFX0JJVFMJCUdFTk1BU0soNywgNSkKPj4gKyNkZWZpbmUgU05fSFBEX0RJU0FCTEVfQklUCQlC SVQoMCkKPj4gKwo+PiArI2RlZmluZSBTTl9SRUdVTEFUT1JfU1VQUExZX05VTQkJNAo+PiArCj4+ ICtzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKPj4gKwlz dHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKPj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZQkJYnJpZGdlOwo+ PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yCQljb25uZWN0b3I7Cj4+ICsJc3RydWN0IGRldmljZV9u b2RlCQkqaG9zdF9ub2RlOwo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UJCSpkc2k7Cj4+ICsJ c3RydWN0IGNsawkJCSpyZWZjbGs7Cj4+ICsJc3RydWN0IGRybV9wYW5lbAkJKnBhbmVsOwo+PiAr CXN0cnVjdCBncGlvX2Rlc2MJCSplbmFibGVfZ3BpbzsKPj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1 bGtfZGF0YQlzdXBwbGllc1tTTl9SRUdVTEFUT1JfU1VQUExZX05VTV07Cj4+ICt9Owo+PiArCj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVf cmFuZ2VzW10gPSB7Cj4+ICsJeyAucmFuZ2VfbWluID0gMCwgLnJhbmdlX21heCA9IDB4RkYgfSwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSB0 aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgPSAKPj4gewo+PiArCS55ZXNfcmFuZ2VzID0gdGlf c25fYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcywKPj4gKwkubl95ZXNfcmFuZ2VzID0gQVJSQVlfU0la RSh0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZpZyA9IHsK Pj4gKwkucmVnX2JpdHMgPSA4LAo+PiArCS52YWxfYml0cyA9IDgsCj4+ICsJLnZvbGF0aWxlX3Rh YmxlID0gJnRpX3NuX2JyaWRnZV92b2xhdGlsZV90YWJsZSwKPj4gKwkuY2FjaGVfdHlwZSA9IFJF R0NBQ0hFX05PTkUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfd3Jp dGVfdTE2KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLAo+PiArCQkJCSAgIHVuc2lnbmVkIGlu dCByZWcsIHUxNiB2YWwpCj4+ICt7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIHJl ZywgdmFsICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIHJlZyArIDEs IHZhbCA+PiA4KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aV9z bl9icmlkZ2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlf c25fYnJpZGdlICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCWludCByZXQ7Cj4+ ICsKPj4gKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoU05fUkVHVUxBVE9SX1NVUFBMWV9O VU0sIAo+PiBwZGF0YS0+c3VwcGxpZXMpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzICVkXG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0 Owo+PiArCX0KPj4gKwo+PiArCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5hYmxlX2dwaW8sIDEp Owo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX21heWJl X3VudXNlZCB0aV9zbl9icmlkZ2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+ ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4g KwlpbnQgcmV0Owo+PiArCj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3Bpbywg MCk7Cj4+ICsKPj4gKwlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKFNOX1JFR1VMQVRPUl9T VVBQTFlfTlVNLCAKPj4gcGRhdGEtPnN1cHBsaWVzKTsKPj4gKwlpZiAocmV0KQo+PiArCQlEUk1f RVJST1IoImZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzICVkXG4iLCByZXQpOwo+PiArCj4+ICsJ cmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3Bz IHRpX3NuX2JyaWRnZV9wbV9vcHMgPSB7Cj4+ICsJU0VUX1JVTlRJTUVfUE1fT1BTKHRpX3NuX2Jy aWRnZV9zdXNwZW5kLCB0aV9zbl9icmlkZ2VfcmVzdW1lLCBOVUxMKQo+PiArfTsKPj4gKwo+PiAr LyogQ29ubmVjdG9yIGZ1bmNzICovCj4+ICtzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqCj4+ ICtjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCj4+ICt7Cj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB0aV9z bl9icmlkZ2UsIGNvbm5lY3Rvcik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgCj4+ICpjb25uZWN0 b3IpCj4+ICt7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9f dGlfc25fYnJpZGdlKGNvbm5lY3Rvcik7Cj4+ICsKPj4gKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9t b2RlcyhwZGF0YS0+cGFuZWwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZW51bSBkcm1fbW9kZV9z dGF0dXMKPj4gK3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAo+PiArCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKPj4gK3sKPj4gKwkvKiBtYXhpbXVtIHN1cHBvcnRlZCByZXNvbHV0aW9uIGlzIDRLIGF0 IDYwIGZwcyAqLwo+PiArCWlmIChtb2RlLT5jbG9jayA+IDU5NDAwMCkKPj4gKwkJcmV0dXJuIE1P REVfQ0xPQ0tfSElHSDsKPj4gKwo+PiArCXJldHVybiBNT0RFX09LOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIAo+PiB0aV9zbl9icmlkZ2Vf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPj4gKwkuZ2V0X21vZGVzID0gdGlfc25fYnJpZGdl X2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCj4+ICsJLm1vZGVfdmFsaWQgPSB0aV9zbl9icmlkZ2VfY29u bmVjdG9yX21vZGVfdmFsaWQsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVj dG9yX3N0YXR1cwo+PiArdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCAKPj4gZm9yY2UpCj4+ICt7Cj4+ICsJc3RydWN0IHRp X3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKGNvbm5lY3Rvcik7 Cj4+ICsKPj4gKwkvKioKPj4gKwkgKiBUT0RPOiBDdXJyZW50bHkgaWYgZHJtX3BhbmVsIGlzIHBy ZXNlbnQsIHRoZW4gYWx3YXlzCj4+ICsJICogcmV0dXJuIHRoZSBzdGF0dXMgYXMgY29ubmVjdGVk LiBOZWVkIHRvIGFkZCBzdXBwb3J0IHRvIGRldGVjdAo+PiArCSAqIGRldmljZSBzdGF0ZSBmb3Ig bm8gcGFuZWwoaG90IHBsdWdnYWJsZSkgc2NlbmFyaW9zLgo+PiArCSAqLwo+PiArCWlmIChwZGF0 YS0+cGFuZWwpCj4gCj4gU2luY2UgcGRhdGEtPnBhbmVsIGlzIGFsd2F5cyBub24temVybyBhZnRl ciBzdWNjZXNzZnVsIHByb2JlLCB5b3UgY2FuCj4gcmVtb3ZlIGFsbCBzdWNoIGNoZWNrcy4KPiAK T2suaSB3aWxsIHJlbW92ZSBhbGwgc3VjaCBjaGVja3MuCgo+PiArCQlyZXR1cm4gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQ7Cj4+ICsJZWxzZQo+PiArCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1 c191bmtub3duOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcyAKPj4gPSB7Cj4+ICsJLmZpbGxf bW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCj4+ICsJLmRl dGVjdCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0LAo+PiArCS5kZXN0cm95ID0gZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwLAo+PiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9yZXNldCwKPj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IAo+PiBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+PiArCS5hdG9taWNfZGVzdHJveV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+PiArfTsK Pj4gKwo+PiArc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKmJyaWRnZV90b190aV9zbl9icmlk Z2Uoc3RydWN0IGRybV9icmlkZ2UgCj4+ICpicmlkZ2UpCj4+ICt7Cj4+ICsJcmV0dXJuIGNvbnRh aW5lcl9vZihicmlkZ2UsIHN0cnVjdCB0aV9zbl9icmlkZ2UsIGJyaWRnZSk7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50IGk7Cj4+ICsJY29uc3QgY2hh ciAqIGNvbnN0IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbXSA9IHsKPj4gKwkJInZjY2EiLCAi dmNjIiwgInZjY2lvIiwgInZwbGwiLAo+PiArCX07Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwg U05fUkVHVUxBVE9SX1NVUFBMWV9OVU07IGkrKykKPj4gKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1 cHBseSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07Cj4+ICsKPj4gKwlyZXR1cm4gZGV2 bV9yZWd1bGF0b3JfYnVsa19nZXQocGRhdGEtPmRldiwgU05fUkVHVUxBVE9SX1NVUFBMWV9OVU0s Cj4+ICsJCQkJICAgICAgIHBkYXRhLT5zdXBwbGllcyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgdGlfc25fYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+PiArewo+ PiArCWludCByZXQsIHZhbDsKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRn ZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9z dDsKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7Cj4+ICsJY29uc3Qgc3RydWN0IG1p cGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInRpX3NuX2JyaWRnZSIsCj4+ICsJ CQkJCQkgICAuY2hhbm5lbCA9IDAsCj4+ICsJCQkJCQkgICAubm9kZSA9IE5VTEwsCj4+ICsJCQkJ CQkgfTsKPj4gKwo+PiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBk YXRhLT5jb25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAo+ PiArCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURS TV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKPj4g KwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQo JnBkYXRhLT5jb25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBl cl9mdW5jcyk7Cj4+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+ Y29ubmVjdG9yLCAKPj4gYnJpZGdlLT5lbmNvZGVyKTsKPj4gKwo+PiArCS8qCj4+ICsJICogVE9E TzogaWRlYWxseSBmaW5kaW5nIGhvc3QgcmVzb3VyY2UgYW5kIGRzaSBkZXYgcmVnaXN0cmF0aW9u IAo+PiBuZWVkcwo+PiArCSAqIHRvIGJlIGRvbmUgaW4gYnJpZGdlIHByb2JlLiBCdXQgc29tZSBl eGlzdGluZyBEU0kgaG9zdCBkcml2ZXJzIAo+PiB3aWxsCj4+ICsJICogd2FpdCBmb3IgYW55IG9m IHRoZSBkcm1fYnJpZGdlL2RybV9wYW5lbCB0byBnZXQgYWRkZWQgdG8gdGhlIAo+PiBnbG9iYWwK Pj4gKwkgKiBicmlkZ2UvcGFuZWwgbGlzdCwgYmVmb3JlIGNvbXBsZXRpbmcgdGhlaXIgcHJvYmUu IFNvIGlmIHdlIGRvIHRoZQo+PiArCSAqIGRzaSBkZXYgcmVnaXN0cmF0aW9uIHBhcnQgaW4gYnJp ZGdlIHByb2JlLCBiZWZvcmUgcG9wdWxhdGluZyBpbgo+PiArCSAqIHRoZSBnbG9iYWwgYnJpZGdl IGxpc3QsIHRoZW4gaXQgd2lsbCBjYXVzZSBkZWFkbG9jayBhcyBkc2kgaG9zdCAKPj4gcHJvYmUK Pj4gKwkgKiB3aWxsIG5ldmVyIGNvbXBsZXRlLCBuZWl0aGVyIG91ciBicmlkZ2UgcHJvYmUuIFNv IGtlZXBpbmcgaXQgaGVyZQo+PiArCSAqIHdpbGwgc2F0aXNmeSBtb3N0IG9mIHRoZSBleGlzdGlu ZyBob3N0IGRyaXZlcnMuIE9uY2UgdGhlIGhvc3QgCj4+IGRyaXZlcgo+PiArCSAqIGlzIGZpeGVk IHdlIGNhbiBtb3ZlIHRoZSBiZWxvdyBjb2RlIHRvIGJyaWRnZSBwcm9iZSBzYWZlbHkuCj4+ICsJ ICovCj4+ICsJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBkYXRhLT5ob3N0 X25vZGUpOwo+PiArCWlmICghaG9zdCkgewo+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5k IGRzaSBob3N0XG4iKTsKPj4gKwkJcmV0ID0gLUVOT0RFVjsKPj4gKwkJZ290byBlcnJfZHNpX2hv c3Q7Cj4+ICsJfQo+PiArCj4+ICsJZHNpID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwo aG9zdCwgJmluZm8pOwo+PiArCWlmIChJU19FUlIoZHNpKSkgewo+PiArCQlEUk1fRVJST1IoImZh aWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7Cj4+ICsJCXJldCA9IFBUUl9FUlIoZHNpKTsK Pj4gKwkJZ290byBlcnJfZHNpX2hvc3Q7Cj4+ICsJfQo+PiArCj4+ICsJLyogVE9ETzogc2V0dGlu ZyB0byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCj4+ICsJZHNpLT5sYW5lcyA9IDQ7Cj4+ICsJ ZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+PiArCWRzaS0+bW9kZV9mbGFncyA9 IE1JUElfRFNJX01PREVfVklERU8gfCAKPj4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNF IHwKPj4gKwkJCSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURF T19IU0U7Cj4+ICsKPj4gKwkvKiBjaGVjayBpZiBjb250aW51b3VzIGRzaSBjbG9jayBpcyByZXF1 aXJlZCBvciBub3QgKi8KPj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOwo+PiAr CXJlZ21hcF9yZWFkKHBkYXRhLT5yZWdtYXAsIFNOX0RQUExMX1NSQ19SRUcsICZ2YWwpOwo+PiAr CXBtX3J1bnRpbWVfcHV0KHBkYXRhLT5kZXYpOwo+PiArCWlmICghKHZhbCAmIERQUExMX0NMS19T UkNfRFNJQ0xLKSkKPj4gKwkJZHNpLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX0NMT0NLX05PTl9D T05USU5VT1VTOwo+PiArCj4+ICsJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7Cj4+ICsJaWYg KHJldCA8IDApIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGRzaSB0byBob3N0 XG4iKTsKPj4gKwkJZ290byBlcnJfZHNpX2F0dGFjaDsKPj4gKwl9Cj4+ICsJcGRhdGEtPmRzaSA9 IGRzaTsKPj4gKwo+PiArCS8qIGF0dGFjaCBwYW5lbCB0byBicmlkZ2UgKi8KPj4gKwlpZiAocGRh dGEtPnBhbmVsKQo+PiArCQlkcm1fcGFuZWxfYXR0YWNoKHBkYXRhLT5wYW5lbCwgJnBkYXRhLT5j b25uZWN0b3IpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2Vycl9kc2lfYXR0YWNoOgo+ PiArCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGRzaSk7Cj4+ICtlcnJfZHNpX2hvc3Q6Cj4+ ICsJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZwZGF0YS0+Y29ubmVjdG9yKTsKPj4gKwlyZXR1cm4g cmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZGlzYWJsZShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+PiArewo+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+PiArCj4+ICsJaWYgKHBkYXRh LT5wYW5lbCkKPj4gKwkJZHJtX3BhbmVsX2Rpc2FibGUocGRhdGEtPnBhbmVsKTsKPj4gKwo+PiAr CS8qIGRpc2FibGUgdmlkZW8gc3RyZWFtICovCj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRh LT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcsCj4+ICsJCQkgICBTTl9FTkFCTEVfVklEX1NUUkVB TV9CSVQsIDApOwo+PiArCS8qIHNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgT0ZGICovCj4+ ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsKPj4g KwkvKiBkaXNhYmxlIERQIFBMTCAqLwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBT Tl9QTExfRU5BQkxFX1JFRywgMCk7Cj4+ICsKPj4gKwlpZiAocGRhdGEtPnBhbmVsKQo+PiArCQlk cm1fcGFuZWxfdW5wcmVwYXJlKHBkYXRhLT5wYW5lbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1 MzIgdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkK Pj4gK3sKPj4gKwl1MzIgYml0X3JhdGVfa2h6LCBjbGtfZnJlcV9raHo7Cj4+ICsJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUgPQo+PiArCQkmcGRhdGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRj LT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPj4gKwo+PiArCWJpdF9yYXRlX2toeiA9IG1vZGUtPmNs b2NrICoKPj4gKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9y bWF0KTsKPj4gKwljbGtfZnJlcV9raHogPSBiaXRfcmF0ZV9raHogLyAocGRhdGEtPmRzaS0+bGFu ZXMgKiAyKTsKPj4gKwo+PiArCXJldHVybiBjbGtfZnJlcV9raHo7Cj4+ICt9Cj4+ICsKPj4gKy8q IGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZl ZCBmcm9tIAo+PiBSRUZDTEsgcGluICovCj4+ICtzdGF0aWMgY29uc3QgdTMyIHRpX3NuX2JyaWRn ZV9yZWZjbGtfbHV0W10gPSB7Cj4+ICsJMTIwMDAwMDAsCj4+ICsJMTkyMDAwMDAsCj4+ICsJMjYw MDAwMDAsCj4+ICsJMjcwMDAwMDAsCj4+ICsJMzg0MDAwMDAsCj4+ICt9Owo+PiArCj4+ICsvKiBj bGsgZnJlcXVlbmNpZXMgc3VwcG9ydGVkIGJ5IGJyaWRnZSBpbiBIeiBpbiBjYXNlIGRlcml2ZWQg ZnJvbSAKPj4gREFDUC9OIHBpbiAqLwo+PiArc3RhdGljIGNvbnN0IHUzMiB0aV9zbl9icmlkZ2Vf ZHNpY2xrX2x1dFtdID0gewo+PiArCTQ2ODAwMDAwMCwKPj4gKwkzODQwMDAwMDAsCj4+ICsJNDE2 MDAwMDAwLAo+PiArCTQ4NjAwMDAwMCwKPj4gKwk0NjA4MDAwMDAsCj4+ICt9Owo+PiArCj4+ICtz dGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsa19mcmVxKHN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhKQo+PiArewo+PiArCWludCBpOwo+PiArCXUzMiByZWZjbGtfcmF0ZTsKPj4gKwlj b25zdCB1MzIgKnJlZmNsa19sdXQ7Cj4+ICsJc2l6ZV90IHJlZmNsa19sdXRfc2l6ZTsKPj4gKwo+ PiArCWlmIChwZGF0YS0+cmVmY2xrKSB7Cj4+ICsJCXJlZmNsa19yYXRlID0gY2xrX2dldF9yYXRl KHBkYXRhLT5yZWZjbGspOwo+PiArCQlyZWZjbGtfbHV0ID0gdGlfc25fYnJpZGdlX3JlZmNsa19s dXQ7Cj4+ICsJCXJlZmNsa19sdXRfc2l6ZSA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3JlZmNs a19sdXQpOwo+PiArCQljbGtfcHJlcGFyZV9lbmFibGUocGRhdGEtPnJlZmNsayk7Cj4+ICsJfSBl bHNlIHsKPj4gKwkJcmVmY2xrX3JhdGUgPSB0aV9zbl9icmlkZ2VfZ2V0X2RzaV9mcmVxKHBkYXRh KSAqIDEwMDA7Cj4+ICsJCXJlZmNsa19sdXQgPSB0aV9zbl9icmlkZ2VfZHNpY2xrX2x1dDsKPj4g KwkJcmVmY2xrX2x1dF9zaXplID0gQVJSQVlfU0laRSh0aV9zbl9icmlkZ2VfZHNpY2xrX2x1dCk7 Cj4+ICsJfQo+PiArCj4+ICsJLyogZm9yIGkgZXF1YWxzIHRvIHJlZmNsa19sdXRfc2l6ZSBtZWFu cyBkZWZhdWx0IGZyZXF1ZW5jeSAqLwo+PiArCWZvciAoaSA9IDA7IGkgPCByZWZjbGtfbHV0X3Np emU7IGkrKykKPj4gKwkJaWYgKHJlZmNsa19sdXRbaV0gPT0gcmVmY2xrX3JhdGUpCj4+ICsJCQli cmVhazsKPj4gKwo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9EUFBM TF9TUkNfUkVHLAo+PiArCQkJICAgU05fUkVGQ0xLX0ZSRVFfQklUUywgaSA8PCBTTl9SRUZDTEtf RlJFUV9PRkZTRVQpOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIExVVCBpbmRleCBjb3JyZXNw b25kcyB0byByZWdpc3RlciB2YWx1ZSBhbmQKPj4gKyAqIExVVCB2YWx1ZXMgY29ycmVzcG9uZHMg dG8gZHAgZGF0YSByYXRlIHN1cHBvcnRlZAo+PiArICogYnkgdGhlIGJyaWRnZSBpbiBNYnBzIHVu aXQuCj4+ICsgKi8KPj4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdGlfc25fYnJpZGdlX2Rw X3JhdGVfbHV0W10gPSB7Cj4+ICsJMCwgMTYyMCwgMjE2MCwgMjQzMCwgMjcwMCwgMzI0MCwgNDMy MCwgNTQwMAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF9kc2lf ZHBfcmF0ZShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwl1bnNpZ25lZCBp bnQgYml0X3JhdGVfbWh6LCBjbGtfZnJlcV9taHosIGRwX3JhdGVfbWh6Owo+PiArCXVuc2lnbmVk IGludCB2YWwsIGk7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQo+PiArCQkm cGRhdGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPj4gKwo+ PiArCS8qIHNldCBEU0lBIGNsayBmcmVxdWVuY3kgKi8KPj4gKwliaXRfcmF0ZV9taHogPSAobW9k ZS0+Y2xvY2sgLyAxMDAwKSAqCj4+ICsJCQltaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKHBk YXRhLT5kc2ktPmZvcm1hdCk7Cj4+ICsJY2xrX2ZyZXFfbWh6ID0gYml0X3JhdGVfbWh6IC8gKHBk YXRhLT5kc2ktPmxhbmVzICogMik7Cj4+ICsKPj4gKwkvKiBmb3IgZWFjaCBpbmNyZW1lbnQgaW4g dmFsLCBmcmVxdWVuY3kgaW5jcmVhc2VzIGJ5IDVNSHogKi8KPj4gKwl2YWwgPSAoTUlOX0RTSV9D TEtfRlJFUV9NSFogLyA1KSArCj4+ICsJCSgoKGNsa19mcmVxX21oeiAtIE1JTl9EU0lfQ0xLX0ZS RVFfTUhaKSAvIDUpICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0RTSUFfQ0xLX0ZSRVFfUkVHLCB2YWwpOwo+PiArCj4+ICsJLyogc2V0IERQIGRhdGEgcmF0ZSAq Lwo+PiArCWRwX3JhdGVfbWh6ID0gKChiaXRfcmF0ZV9taHogLyBwZGF0YS0+ZHNpLT5sYW5lcykg KiAKPj4gRFBfQ0xLX0ZVREdFX05VTSkgLwo+PiArCQkJCQkJCURQX0NMS19GVURHRV9ERU47Cj4+ ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0KSAt IDE7IGkrKykKPj4gKwkJaWYgKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtpXSA+IGRwX3JhdGVf bWh6KQo+PiArCQkJYnJlYWs7Cj4+ICsKPj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJl Z21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKPj4gKwkJCSAgIFNOX0RQX0RBVEFfUkFURV9C SVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3Moc3RydWN0IHRpX3NuX2JyaWRnZSAK Pj4gKnBkYXRhKQo+PiArewo+PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0KPj4g KwkJJnBkYXRhLT5icmlkZ2UuZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7Cj4+ ICsJdTggaHN5bmNfcG9sYXJpdHkgPSAwLCB2c3luY19wb2xhcml0eSA9IDA7Cj4+ICsKPj4gKwlp ZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKPj4gKwkJaHN5bmNfcG9sYXJp dHkgPSBCSVQoU05fU1lOQ19QT0xBUklUWV9PRkZTRVQpOwo+PiArCWlmIChtb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfUFZTWU5DKQo+PiArCQl2c3luY19wb2xhcml0eSA9IEJJVChTTl9TWU5D X1BPTEFSSVRZX09GRlNFVCk7Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGVfdTE2KHBkYXRh LCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcsCj4+ICsJCQkgICAgICAgbW9kZS0+ aGRpc3BsYXkpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZV91MTYocGRhdGEsIFNOX0NIQV9WRVJU SUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRywKPj4gKwkJCSAgICAgICBtb2RlLT52ZGlzcGxheSk7 Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURU SF9MT1dfUkVHLAo+PiArCQkgICAgIChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFy dCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hTWU5D X1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+PiArCQkgICAgICgoKG1vZGUtPmhzeW5jX2VuZCAtIG1v ZGUtPmhzeW5jX3N0YXJ0KSA+PiA4KSAmIDB4N0YpIHwKPj4gKwkJICAgICBoc3luY19wb2xhcml0 eSk7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WU1lOQ19QVUxTRV9X SURUSF9MT1dfUkVHLAo+PiArCQkgICAgIChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19z dGFydCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZT WU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+PiArCQkgICAgKCgobW9kZS0+dnN5bmNfZW5kIC0g bW9kZS0+dnN5bmNfc3RhcnQpID4+IDgpICYgMHg3RikgfAo+PiArCQkgICAgdnN5bmNfcG9sYXJp dHkpOwo+PiArCj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IT1JJWk9O VEFMX0JBQ0tfUE9SQ0hfUkVHLAo+PiArCQkgICAgIChtb2RlLT5odG90YWwgLSBtb2RlLT5oc3lu Y19lbmQpICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9W RVJUSUNBTF9CQUNLX1BPUkNIX1JFRywKPj4gKwkJICAgICAobW9kZS0+dnRvdGFsIC0gbW9kZS0+ dnN5bmNfZW5kKSAmIDB4RkYpOwo+PiArCj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRywKPj4gKwkJICAgICAobW9kZS0+aHN5 bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRh dGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywKPj4gKwkJICAgICAo bW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKPj4gKwo+PiArCXVz bGVlcF9yYW5nZSgxMDAwMCwgMTA1MDApOyAvKiAxMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNw ZWMgKi8KPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2VuYWJsZShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+PiArewo+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+PiArCXVuc2lnbmVkIGludCB2 YWw7Cj4+ICsKPj4gKwlpZiAocGRhdGEtPnBhbmVsKQo+PiArCQlkcm1fcGFuZWxfcHJlcGFyZShw ZGF0YS0+cGFuZWwpOwo+PiArCj4+ICsJLyogRFNJX0EgbGFuZSBjb25maWcgKi8KPj4gKwl2YWwg PSAoNCAtIHBkYXRhLT5kc2ktPmxhbmVzKSA8PCBTTl9EU0lBX0xBTkVfT0ZGU0VUOwo+PiArCXJl Z21hcF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9EU0lfTEFORVNfUkVHLAo+PiArCQkJ ICAgU05fRFNJQV9OVU1fTEFORVNfQklUUywgdmFsKTsKPj4gKwo+PiArCS8qIERQIGxhbmUgY29u ZmlnICovCj4+ICsJdmFsID0gKHBkYXRhLT5kc2ktPmxhbmVzIC0gMSkgPDwgU05fRFBfTEFORV9P RkZTRVQ7Cj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX1NTQ19DT05G SUdfUkVHLAo+PiArCQkJICAgU05fRFBfTlVNX0xBTkVTX0JJVFMsIHZhbCk7Cj4+ICsKPj4gKwkv KiBzZXQgZHNpL2RwIGNsayBmcmVxdWVuY3kgdmFsdWUgKi8KPj4gKwl0aV9zbl9icmlkZ2Vfc2V0 X2RzaV9kcF9yYXRlKHBkYXRhKTsKPj4gKwo+PiArCS8qIGVuYWJsZSBEUCBQTEwgKi8KPj4gKwly ZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDEpOwo+PiArCXVz bGVlcF9yYW5nZSgxMDAwMCwgMTA1MDApOyAvKiAxMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNw ZWMgKi8KPj4gKwo+PiArCS8qKgo+PiArCSAqIFRoZSBTTjY1RFNJODYgb25seSBzdXBwb3J0cyBB U1NSIERpc3BsYXkgQXV0aGVudGljYXRpb24gbWV0aG9kIAo+PiBhbmQKPj4gKwkgKiB0aGlzIG1l dGhvZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEFuIGVEUCBwYW5lbCBtdXN0IHN1cHBvcnQgdGhp cwo+PiArCSAqIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gV2UgbmVlZCB0byBlbmFibGUgdGhpcyBt ZXRob2QgaW4gdGhlIGVEUCAKPj4gcGFuZWwKPj4gKwkgKiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNz IDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmluZy4KPj4gKwkgKi8KPj4gKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX1dEQVRBMF9SRUcsIDB4MDEpOwo+PiArCXJlZ21hcF93 cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOwo+PiArCXJl Z21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgwMSk7Cj4+ ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4MEEp Owo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgw MSk7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9DTURfUkVHLCAweDgx KTsKPj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSByZWNvbW1l bmRlZCBieSBzcGVjICovCj4+ICsKPj4gKwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2Rl ICovCj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAw eDBBKTsKPj4gKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMg Ki8KPj4gKwo+PiArCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0ZXJzICovCj4+ICsJdGlfc25fYnJp ZGdlX3NldF92aWRlb190aW1pbmdzKHBkYXRhKTsKPj4gKwo+PiArCS8qIGVuYWJsZSB2aWRlbyBz dHJlYW0gKi8KPj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZS QU1FX1JFRywKPj4gKwkJCSAgIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgU05fRU5BQkxFX1ZJ RF9TVFJFQU1fQklUKTsKPj4gKwo+PiArCWlmIChwZGF0YS0+cGFuZWwpCj4+ICsJCWRybV9wYW5l bF9lbmFibGUocGRhdGEtPnBhbmVsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25f YnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlz dHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdl KTsKPj4gKwo+PiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7Cj4+ICsKPj4gKwkv KiBjb25maWd1cmUgYnJpZGdlIHJlZl9jbGsgKi8KPj4gKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNs a19mcmVxKHBkYXRhKTsKPj4gKwo+PiArCS8qIGluIGNhc2UgZHJtX3BhbmVsIGlzIGNvbm5lY3Rl ZCB0aGVuIEhQRCBpcyBub3Qgc3VwcG9ydGVkICovCj4+ICsJaWYgKHBkYXRhLT5wYW5lbCkKPj4g KwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0hQRF9ESVNBQkxFX1JFRywK Pj4gKwkJCQkgICBTTl9IUERfRElTQUJMRV9CSVQsIFNOX0hQRF9ESVNBQkxFX0JJVCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9 IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwo+PiArCWlmIChwZGF0YS0+cmVm Y2xrKQo+PiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGRhdGEtPnJlZmNsayk7Cj4+ICsKPj4g KwlwbV9ydW50aW1lX3B1dF9zeW5jKHBkYXRhLT5kZXYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgdGlfc25fYnJpZGdlX2Z1bmNzID0gewo+PiAr CS5hdHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0YWNoLAo+PiArCS5wcmVfZW5hYmxlID0gdGlfc25f YnJpZGdlX3ByZV9lbmFibGUsCj4+ICsJLmVuYWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCj4+ ICsJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlzYWJsZSwKPj4gKwkucG9zdF9kaXNhYmxlID0g dGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlf c25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+PiAr ewo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2RlOwo+PiAr Cj4+ICsJcGRhdGEtPmhvc3Rfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShucCwgMCwg MCk7Cj4+ICsKPj4gKwlpZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKPj4gKwkJRFJNX0VSUk9SKCJy ZW1vdGUgZHNpIGhvc3Qgbm9kZSBub3QgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsK Pj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0aV9z bl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPj4gKwkgY29uc3Qgc3Ry dWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+PiArewo+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5 KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewo+PiArCQlEUk1fRVJST1IoImRldmlj ZSBkb2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+ PiArCj4+ICsJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0 IHRpX3NuX2JyaWRnZSksCj4+ICsJCQkgICAgIEdGUF9LRVJORUwpOwo+PiArCWlmICghcGRhdGEp Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJcGRhdGEtPnJlZ21hcCA9IGRldm1fcmVn bWFwX2luaXRfaTJjKGNsaWVudCwKPj4gKwkJCQkJICAgICAmdGlfc25fYnJpZGdlX3JlZ21hcF9j b25maWcpOwo+PiArCWlmIChJU19FUlIocGRhdGEtPnJlZ21hcCkpIHsKPj4gKwkJRFJNX0VSUk9S KCJyZWdtYXAgaTJjIGluaXQgZmFpbGVkXG4iKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEt PnJlZ21hcCk7Cj4+ICsJfQo+PiArCj4+ICsJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsKPj4g Kwo+PiArCXJldCA9IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShwZGF0YS0+ZGV2LT5vZl9u b2RlLCAxLCAwLAo+PiArCQkJCQkgICZwZGF0YS0+cGFuZWwsIE5VTEwpOwo+PiArCWlmIChyZXQp IHsKPj4gKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBhbnkgcGFuZWwgbm9kZVxuIik7Cj4+ ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJZGV2X3NldF9kcnZkYXRhKCZjbGllbnQt PmRldiwgcGRhdGEpOwo+PiArCj4+ICsJcGRhdGEtPmVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9n ZXQocGRhdGEtPmRldiwgImVuYWJsZSIsCj4+ICsJCQkJCSAgICBHUElPRF9PVVRfTE9XKTsKPj4g KwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3BpbykpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gZ2V0IGVuYWJsZSBncGlvIGZyb20gRFRcbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKHBk YXRhLT5lbmFibGVfZ3Bpbyk7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0 ID0gdGlfc25fYnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMocGRhdGEpOwo+PiArCWlmIChyZXQpIHsK Pj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgcmVndWxhdG9yc1xuIik7Cj4+ICsJCXJl dHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcGRhdGEtPnJlZmNsayA9IGRldm1fY2xrX2dldChw ZGF0YS0+ZGV2LCAicmVmY2xrIik7Cj4+ICsJaWYgKElTX0VSUihwZGF0YS0+cmVmY2xrKSkgewo+ PiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5yZWZjbGspOwo+PiArCQlpZiAocmV0ID09IC1FUFJP QkVfREVGRVIpCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCQlEUk1fREVCVUdfS01TKCJyZWZjbGsg bm90IGZvdW5kXG4iKTsKPj4gKwkJcGRhdGEtPnJlZmNsayA9IE5VTEw7Cj4+ICsJfQo+PiArCj4+ ICsJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHBkYXRhKTsKPj4gKwlpZiAocmV0 KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcG1fcnVudGltZV9lbmFibGUocGRhdGEtPmRl dik7Cj4+ICsKPj4gKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwZGF0YSk7Cj4+ICsKPj4g KwlwZGF0YS0+YnJpZGdlLmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKPj4gKwlwZGF0YS0+ YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOwo+PiArCj4+ICsJZHJtX2JyaWRn ZV9hZGQoJnBkYXRhLT5icmlkZ2UpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 KQo+PiArewo+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gaTJjX2dldF9jbGllbnRk YXRhKGNsaWVudCk7Cj4+ICsKPj4gKwlpZiAoIXBkYXRhKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsK Pj4gKwo+PiArCWlmIChwZGF0YS0+aG9zdF9ub2RlKQo+PiArCQlvZl9ub2RlX3B1dChwZGF0YS0+ aG9zdF9ub2RlKTsKPiAKPiBJdCBpcyBhbHdheXMgdHJ1ZS4KT2suIGkgd2lsbCByZW1vdmUgdGhp cyBob3N0X25vZGUgY2hlY2suCj4gCj4+ICsKPj4gKwlwbV9ydW50aW1lX2Rpc2FibGUocGRhdGEt PmRldik7Cj4+ICsKPj4gKwlpZiAocGRhdGEtPmRzaSkgewo+IAo+IEl0IGlzIGFsd2F5cyB0cnVl LgoKQXMgcHJldmlvdXNseSBkaXNjdXNzZWQsIHBkYXRhLT5kc2kgaXMgZmlsbGVkIGJyaWRnZV9h dHRhY2goKSBoZXJlLCBzbyAKdGhpcyBpcyB0byBhdm9pZCBjYXNlcyB3aGVyZSByZW1vdmUoKSBt aWdodCBnZXQgY2FsbGVkIGJlZm9yZSBhdHRhY2goKS4KCj4gQmVzaWRlIHRoZXNlIGNoZWNrcyBp dCBsb29rcyBPSy4KPiAKPiBSZWdhcmRzCj4gQW5kcnplago+IAo+IAo+PiArCQltaXBpX2RzaV9k ZXRhY2gocGRhdGEtPmRzaSk7Cj4+ICsJCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHBkYXRh LT5kc2kpOwo+PiArCX0KPj4gKwo+PiArCWRybV9icmlkZ2VfcmVtb3ZlKCZwZGF0YS0+YnJpZGdl KTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGkyY19k ZXZpY2VfaWQgdGlfc25fYnJpZGdlX2lkW10gPSB7Cj4+ICsJeyAidGksc242NWRzaTg2IiwgMH0s Cj4+ICsJe30sCj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRn ZV9pZCk7Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2Jy aWRnZV9tYXRjaF90YWJsZVtdID0gewo+PiArCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYi fSwKPj4gKwl7fSwKPj4gK307Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aV9zbl9icmlk Z2VfbWF0Y2hfdGFibGUpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGlfc25f YnJpZGdlX2RyaXZlciA9IHsKPj4gKwkuZHJpdmVyID0gewo+PiArCQkubmFtZSA9ICJ0aV9zbjY1 ZHNpODYiLAo+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUs Cj4+ICsJCS5wbSA9ICZ0aV9zbl9icmlkZ2VfcG1fb3BzLAo+PiArCX0sCj4+ICsJLnByb2JlID0g dGlfc25fYnJpZGdlX3Byb2JlLAo+PiArCS5yZW1vdmUgPSB0aV9zbl9icmlkZ2VfcmVtb3ZlLAo+ PiArCS5pZF90YWJsZSA9IHRpX3NuX2JyaWRnZV9pZCwKPj4gK307Cj4+ICttb2R1bGVfaTJjX2Ry aXZlcih0aV9zbl9icmlkZ2VfZHJpdmVyKTsKPj4gKwo+PiArTU9EVUxFX0FVVEhPUigiU2FuZGVl cCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPiIpOwo+PiArTU9EVUxFX0RFU0NSSVBUSU9O KCJzbjY1ZHNpODYgRFNJIHRvIGVEUCBicmlkZ2UgZHJpdmVyIik7Cj4+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVu bwo=