From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.2 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8C7DBC433B4 for ; Thu, 8 Apr 2021 06:57:39 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1BD6F61040 for ; Thu, 8 Apr 2021 06:57:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1BD6F61040 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id BDEC440698; Thu, 8 Apr 2021 06:57:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZLq1LMD8QU_V; Thu, 8 Apr 2021 06:57:36 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTP id D79C44194E; Thu, 8 Apr 2021 06:57:35 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 9F484C000C; Thu, 8 Apr 2021 06:57:35 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 29E81C000A for ; Thu, 8 Apr 2021 06:57:34 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 0765D400DB for ; Thu, 8 Apr 2021 06:57:34 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp2.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fA51Xxc4ING0 for ; Thu, 8 Apr 2021 06:57:32 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp2.osuosl.org (Postfix) with ESMTPS id B0410400D7 for ; Thu, 8 Apr 2021 06:57:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1617865050; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kaYkgYQd1T50pHu2n8PHvDfrgbTCt/YHvOcBPz72Vac=; b=gdvOs2h8NdubIGpZrgFSrqHKtB+FukTB7p93lqRsJOfWKGey1F7b+mmXGeqRohr3Lb0xSJ 7tCjEJJjz8x6eTJ7ir67lgLjWsJ8mlwhE+AvjNOVjVF2xrr0CYkIYAMzU/kRAcEiNX/fW2 PO/K6cUL0iP1onpQLLyV0WUKvnA+iGc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-316-mhJgrrNGMtmhcLZDi_gVFw-1; Thu, 08 Apr 2021 02:57:26 -0400 X-MC-Unique: mhJgrrNGMtmhcLZDi_gVFw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B1009801814; Thu, 8 Apr 2021 06:57:23 +0000 (UTC) Received: from wangxiaodeMacBook-Air.local (ovpn-12-78.pek2.redhat.com [10.72.12.78]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5457C7959D; Thu, 8 Apr 2021 06:57:08 +0000 (UTC) Subject: Re: [PATCH v6 09/10] vduse: Introduce VDUSE - vDPA Device in Userspace To: Xie Yongji , mst@redhat.com, stefanha@redhat.com, sgarzare@redhat.com, parav@nvidia.com, hch@infradead.org, christian.brauner@canonical.com, rdunlap@infradead.org, willy@infradead.org, viro@zeniv.linux.org.uk, axboe@kernel.dk, bcrl@kvack.org, corbet@lwn.net, mika.penttila@nextfour.com, dan.carpenter@oracle.com References: <20210331080519.172-1-xieyongji@bytedance.com> <20210331080519.172-10-xieyongji@bytedance.com> From: Jason Wang Message-ID: Date: Thu, 8 Apr 2021 14:57:06 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210331080519.172-10-xieyongji@bytedance.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Cc: linux-fsdevel@vger.kernel.org, netdev@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CuWcqCAyMDIxLzMvMzEg5LiL5Y2INDowNSwgWGllIFlvbmdqaSDlhpnpgZM6Cj4gVGhpcyBWRFVT RSBkcml2ZXIgZW5hYmxlcyBpbXBsZW1lbnRpbmcgdkRQQSBkZXZpY2VzIGluIHVzZXJzcGFjZS4K PiBCb3RoIGNvbnRyb2wgcGF0aCBhbmQgZGF0YSBwYXRoIG9mIHZEUEEgZGV2aWNlcyB3aWxsIGJl IGFibGUgdG8KPiBiZSBoYW5kbGVkIGluIHVzZXJzcGFjZS4KPgo+IEluIHRoZSBjb250cm9sIHBh dGgsIHRoZSBWRFVTRSBkcml2ZXIgd2lsbCBtYWtlIHVzZSBvZiBtZXNzYWdlCj4gbWVjaG5pc20g dG8gZm9yd2FyZCB0aGUgY29uZmlnIG9wZXJhdGlvbiBmcm9tIHZkcGEgYnVzIGRyaXZlcgo+IHRv IHVzZXJzcGFjZS4gVXNlcnNwYWNlIGNhbiB1c2UgcmVhZCgpL3dyaXRlKCkgdG8gcmVjZWl2ZS9y ZXBseQo+IHRob3NlIGNvbnRyb2wgbWVzc2FnZXMuCj4KPiBJbiB0aGUgZGF0YSBwYXRoLCBWRFVT RV9JT1RMQl9HRVRfRkQgaW9jdGwgd2lsbCBiZSB1c2VkIHRvIGdldAo+IHRoZSBmaWxlIGRlc2Ny aXB0b3JzIHJlZmVycmluZyB0byB2RFBBIGRldmljZSdzIGlvdmEgcmVnaW9ucy4gVGhlbgo+IHVz ZXJzcGFjZSBjYW4gdXNlIG1tYXAoKSB0byBhY2Nlc3MgdGhvc2UgaW92YSByZWdpb25zLiBCZXNp ZGVzLAo+IHVzZXJzcGFjZSBjYW4gdXNlIGlvY3RsKCkgdG8gaW5qZWN0IGludGVycnVwdCBhbmQg dXNlIHRoZSBldmVudGZkCj4gbWVjaGFuaXNtIHRvIHJlY2VpdmUgdmlydHF1ZXVlIGtpY2tzLgo+ Cj4gU2lnbmVkLW9mZi1ieTogWGllIFlvbmdqaSA8eGlleW9uZ2ppQGJ5dGVkYW5jZS5jb20+Cj4g LS0tCj4gICBEb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJz dCB8ICAgIDEgKwo+ICAgZHJpdmVycy92ZHBhL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDEwICsKPiAgIGRyaXZlcnMvdmRwYS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgMSArCj4gICBkcml2ZXJzL3ZkcGEvdmRwYV91c2VyL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKwo+ICAgZHJpdmVycy92ZHBhL3ZkcGFfdXNl ci92ZHVzZV9kZXYuYyAgICAgICAgICAgICAgICAgfCAxMzYyICsrKysrKysrKysrKysrKysrKysr Cj4gICBpbmNsdWRlL3VhcGkvbGludXgvdmR1c2UuaCAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAxNzUgKysrCj4gICA2IGZpbGVzIGNoYW5nZWQsIDE1NTQgaW5zZXJ0aW9ucygrKQo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmRwYS92ZHBhX3VzZXIvTWFrZWZpbGUKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3ZkdXNlX2Rldi5jCj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xpbnV4L3ZkdXNlLmgKPgo+IGRpZmYgLS1naXQg YS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0Rv Y3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0Cj4gaW5kZXgg YTRjNzVhMjhjODM5Li43MTcyMmU2ZjhmMjMgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91 c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QKPiArKysgYi9Eb2N1bWVudGF0aW9u L3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdAo+IEBAIC0zMDAsNiArMzAwLDcg QEAgQ29kZSAgU2VxIyAgICBJbmNsdWRlIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ29tbWVudHMKPiAgICd6JyAgIDEwLTRGICBkcml2ZXJzL3MzOTAvY3J5 cHRvL3pjcnlwdF9hcGkuaCAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0IQo+ICAgJ3wn ICAgMDAtN0YgIGxpbnV4L21lZGlhLmgKPiAgIDB4ODAgIDAwLTFGICBsaW51eC9mYi5oCj4gKzB4 ODEgIDAwLTFGICBsaW51eC92ZHVzZS5oCj4gICAweDg5ICAwMC0wNiAgYXJjaC94ODYvaW5jbHVk ZS9hc20vc29ja2lvcy5oCj4gICAweDg5ICAwQi1ERiAgbGludXgvc29ja2lvcy5oCj4gICAweDg5 ICBFMC1FRiAgbGludXgvc29ja2lvcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTSU9DUFJPVE9QUklWQVRFIHJhbmdlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmRw YS9LY29uZmlnIGIvZHJpdmVycy92ZHBhL0tjb25maWcKPiBpbmRleCBhMjQ1ODA5Yzk5ZDAuLjc3 YTFkYTUyMmMyMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZkcGEvS2NvbmZpZwo+ICsrKyBiL2Ry aXZlcnMvdmRwYS9LY29uZmlnCj4gQEAgLTI1LDYgKzI1LDE2IEBAIGNvbmZpZyBWRFBBX1NJTV9O RVQKPiAgIAloZWxwCj4gICAJICB2RFBBIG5ldHdvcmtpbmcgZGV2aWNlIHNpbXVsYXRvciB3aGlj aCBsb29wcyBUWCB0cmFmZmljIGJhY2sgdG8gUlguCj4gICAKPiArY29uZmlnIFZEUEFfVVNFUgo+ ICsJdHJpc3RhdGUgIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnQiCj4g KwlkZXBlbmRzIG9uIEVWRU5URkQgJiYgTU1VICYmIEhBU19ETUEKPiArCXNlbGVjdCBETUFfT1BT Cj4gKwlzZWxlY3QgVkhPU1RfSU9UTEIKPiArCXNlbGVjdCBJT01NVV9JT1ZBCj4gKwloZWxwCj4g KwkgIFdpdGggVkRVU0UgaXQgaXMgcG9zc2libGUgdG8gZW11bGF0ZSBhIHZEUEEgRGV2aWNlCj4g KwkgIGluIGEgdXNlcnNwYWNlIHByb2dyYW0uCj4gKwo+ICAgY29uZmlnIElGQ1ZGCj4gICAJdHJp c3RhdGUgIkludGVsIElGQyBWRiB2RFBBIGRyaXZlciIKPiAgIAlkZXBlbmRzIG9uIFBDSV9NU0kK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZHBhL01ha2VmaWxlIGIvZHJpdmVycy92ZHBhL01ha2Vm aWxlCj4gaW5kZXggNjdmZTdmM2Q2OTQzLi5mMDJlYmVkMzNmMTkgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy92ZHBhL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy92ZHBhL01ha2VmaWxlCj4gQEAgLTEs NiArMSw3IEBACj4gICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gICBvYmot JChDT05GSUdfVkRQQSkgKz0gdmRwYS5vCj4gICBvYmotJChDT05GSUdfVkRQQV9TSU0pICs9IHZk cGFfc2ltLwo+ICtvYmotJChDT05GSUdfVkRQQV9VU0VSKSArPSB2ZHBhX3VzZXIvCj4gICBvYmot JChDT05GSUdfSUZDVkYpICAgICs9IGlmY3ZmLwo+ICAgb2JqLSQoQ09ORklHX01MWDVfVkRQQSkg Kz0gbWx4NS8KPiAgIG9iai0kKENPTkZJR19WUF9WRFBBKSAgICArPSB2aXJ0aW9fcGNpLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL01ha2VmaWxlIGIvZHJpdmVycy92ZHBh L3ZkcGFfdXNlci9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMDAwLi4yNjBlMGIyNmFmOTkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy92ZHBh L3ZkcGFfdXNlci9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsNSBAQAo+ICsjIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKwo+ICt2ZHVzZS15IDo9IHZkdXNlX2Rldi5vIGlvdmFfZG9t YWluLm8KPiArCj4gK29iai0kKENPTkZJR19WRFBBX1VTRVIpICs9IHZkdXNlLm8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy92ZHBhL3ZkcGFfdXNlci92ZHVzZV9kZXYuYyBiL2RyaXZlcnMvdmRwYS92 ZHBhX3VzZXIvdmR1c2VfZGV2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uNTFjYTczNDY0ZDBkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdmRw YS92ZHBhX3VzZXIvdmR1c2VfZGV2LmMKPiBAQCAtMCwwICsxLDEzNjIgQEAKPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKgo+ICsgKiBWRFVTRTogdkRQQSBE ZXZpY2UgaW4gVXNlcnNwYWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEJ5 dGVkYW5jZSBJbmMuIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K PiArICoKPiArICogQXV0aG9yOiBYaWUgWW9uZ2ppIDx4aWV5b25namlAYnl0ZWRhbmNlLmNvbT4K PiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9jZGV2Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2V2ZW50ZmQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3dhaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXAtb3BzLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9wb2xsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC91aW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZkcGEuaD4KPiArI2luY2x1ZGUg PHVhcGkvbGludXgvdmR1c2UuaD4KPiArI2luY2x1ZGUgPHVhcGkvbGludXgvdmRwYS5oPgo+ICsj aW5jbHVkZSA8dWFwaS9saW51eC92aXJ0aW9fY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9t b2RfZGV2aWNldGFibGUuaD4KPiArCj4gKyNpbmNsdWRlICJpb3ZhX2RvbWFpbi5oIgo+ICsKPiAr I2RlZmluZSBEUlZfVkVSU0lPTiAgIjEuMCIKPiArI2RlZmluZSBEUlZfQVVUSE9SICAgIllvbmdq aSBYaWUgPHhpZXlvbmdqaUBieXRlZGFuY2UuY29tPiIKPiArI2RlZmluZSBEUlZfREVTQyAgICAg InZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSIKPiArI2RlZmluZSBEUlZfTElDRU5TRSAgIkdQTCB2 MiIKPiArCj4gKyNkZWZpbmUgVkRVU0VfREVWX01BWCAoMVUgPDwgTUlOT1JCSVRTKQo+ICsKPiAr c3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSB7Cj4gKwl1MTYgaW5kZXg7Cj4gKwlib29sIHJlYWR5Owo+ ICsJc3BpbmxvY2tfdCBraWNrX2xvY2s7Cj4gKwlzcGlubG9ja190IGlycV9sb2NrOwo+ICsJc3Ry dWN0IGV2ZW50ZmRfY3R4ICpraWNrZmQ7Cj4gKwlzdHJ1Y3QgdmRwYV9jYWxsYmFjayBjYjsKPiAr CXN0cnVjdCB3b3JrX3N0cnVjdCBpbmplY3Q7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZGV2 Owo+ICsKPiArc3RydWN0IHZkdXNlX3ZkcGEgewo+ICsJc3RydWN0IHZkcGFfZGV2aWNlIHZkcGE7 Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXY7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZGV2 IHsKPiArCXN0cnVjdCB2ZHVzZV92ZHBhICp2ZGV2Owo+ICsJc3RydWN0IGRldmljZSBkZXY7Cj4g KwlzdHJ1Y3QgY2RldiBjZGV2Owo+ICsJc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnFzOwo+ICsJ c3RydWN0IHZkdXNlX2lvdmFfZG9tYWluICpkb21haW47Cj4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsK PiArCXNwaW5sb2NrX3QgbXNnX2xvY2s7Cj4gKwlhdG9taWM2NF90IG1zZ191bmlxdWU7Cj4gKwl3 YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKPiArCXN0cnVjdCBsaXN0X2hlYWQgc2VuZF9saXN0Owo+ ICsJc3RydWN0IGxpc3RfaGVhZCByZWN2X2xpc3Q7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7 Cj4gKwlzdHJ1Y3QgdmRwYV9jYWxsYmFjayBjb25maWdfY2I7Cj4gKwlzcGlubG9ja190IGlycV9s b2NrOwo+ICsJdW5zaWduZWQgbG9uZyBhcGlfdmVyc2lvbjsKPiArCWJvb2wgY29ubmVjdGVkOwo+ ICsJaW50IG1pbm9yOwo+ICsJdTE2IHZxX3NpemVfbWF4Owo+ICsJdTE2IHZxX251bTsKPiArCXUz MiB2cV9hbGlnbjsKPiArCXUzMiBkZXZpY2VfaWQ7Cj4gKwl1MzIgdmVuZG9yX2lkOwo+ICt9Owo+ ICsKPiArc3RydWN0IHZkdXNlX2Rldl9tc2cgewo+ICsJc3RydWN0IHZkdXNlX2Rldl9yZXF1ZXN0 IHJlcTsKPiArCXN0cnVjdCB2ZHVzZV9kZXZfcmVzcG9uc2UgcmVzcDsKPiArCXN0cnVjdCBsaXN0 X2hlYWQgbGlzdDsKPiArCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwo+ICsJYm9vbCBjb21wbGV0 ZWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfY29udHJvbCB7Cj4gKwl1bnNpZ25lZCBsb25n IGFwaV92ZXJzaW9uOwo+ICt9Owo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2JvdW5j ZV9zaXplID0gKDY0ICogMTAyNCAqIDEwMjQpOwo+ICttb2R1bGVfcGFyYW0obWF4X2JvdW5jZV9z aXplLCB1bG9uZywgMDQ0NCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MobWF4X2JvdW5jZV9zaXplLCAi TWF4aW11bSBib3VuY2UgYnVmZmVyIHNpemUuIChkZWZhdWx0OiA2NE0pIik7Cj4gKwo+ICtzdGF0 aWMgdW5zaWduZWQgbG9uZyBtYXhfaW92YV9zaXplID0gKDEyOCAqIDEwMjQgKiAxMDI0KTsKPiAr bW9kdWxlX3BhcmFtKG1heF9pb3ZhX3NpemUsIHVsb25nLCAwNDQ0KTsKPiArTU9EVUxFX1BBUk1f REVTQyhtYXhfaW92YV9zaXplLCAiTWF4aW11bSBpb3ZhIHNwYWNlIHNpemUgKGRlZmF1bHQ6IDEy OE0pIik7Cj4gKwo+ICtzdGF0aWMgREVGSU5FX01VVEVYKHZkdXNlX2xvY2spOwo+ICtzdGF0aWMg TElTVF9IRUFEKHZkdXNlX2RldnMpOwo+ICtzdGF0aWMgREVGSU5FX0lEQSh2ZHVzZV9pZGEpOwo+ ICsKPiArc3RhdGljIGRldl90IHZkdXNlX21ham9yOwo+ICtzdGF0aWMgc3RydWN0IGNsYXNzICp2 ZHVzZV9jbGFzczsKPiArc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp2ZHVzZV9pcnFf d3E7Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB2ZHVzZV9kZXYgKnZkcGFfdG9fdmR1c2Uo c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmRwYSAqdmRl diA9IGNvbnRhaW5lcl9vZih2ZHBhLCBzdHJ1Y3QgdmR1c2VfdmRwYSwgdmRwYSk7Cj4gKwo+ICsJ cmV0dXJuIHZkZXYtPmRldjsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdmR1c2Vf ZGV2ICpkZXZfdG9fdmR1c2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmRw YV9kZXZpY2UgKnZkcGEgPSBkZXZfdG9fdmRwYShkZXYpOwo+ICsKPiArCXJldHVybiB2ZHBhX3Rv X3ZkdXNlKHZkcGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHZkdXNlX2Rldl9tc2cgKnZk dXNlX2ZpbmRfbXNnKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCj4gKwkJCQkJICAgIHVpbnQzMl90 IHJlcXVlc3RfaWQpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXZfbXNnICp0bXAsICptc2cgPSBO VUxMOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBoZWFkLCBsaXN0KSB7Cj4gKwkJ aWYgKHRtcC0+cmVxLnJlcXVlc3RfaWQgPT0gcmVxdWVzdF9pZCkgewo+ICsJCQltc2cgPSB0bXA7 Cj4gKwkJCWxpc3RfZGVsKCZ0bXAtPmxpc3QpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIG1zZzsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCB2ZHVzZV9kZXZfbXNn ICp2ZHVzZV9kZXF1ZXVlX21zZyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQo+ICt7Cj4gKwlzdHJ1 Y3QgdmR1c2VfZGV2X21zZyAqbXNnID0gTlVMTDsKPiArCj4gKwlpZiAoIWxpc3RfZW1wdHkoaGVh ZCkpIHsKPiArCQltc2cgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB2ZHVzZV9kZXZf bXNnLCBsaXN0KTsKPiArCQlsaXN0X2RlbCgmbXNnLT5saXN0KTsKPiArCX0KPiArCj4gKwlyZXR1 cm4gbXNnOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV9lbnF1ZXVlX21zZyhzdHJ1Y3Qg bGlzdF9oZWFkICpoZWFkLAo+ICsJCQkgICAgICBzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqbXNnKQo+ ICt7Cj4gKwlsaXN0X2FkZF90YWlsKCZtc2ctPmxpc3QsIGhlYWQpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHZkdXNlX2Rldl9tc2dfc3luYyhzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsCj4gKwkJCSAg ICAgIHN0cnVjdCB2ZHVzZV9kZXZfbXNnICptc2cpCj4gK3sKPiArCWluaXRfd2FpdHF1ZXVlX2hl YWQoJm1zZy0+d2FpdHEpOwo+ICsJc3Bpbl9sb2NrKCZkZXYtPm1zZ19sb2NrKTsKPiArCXZkdXNl X2VucXVldWVfbXNnKCZkZXYtPnNlbmRfbGlzdCwgbXNnKTsKPiArCXdha2VfdXAoJmRldi0+d2Fp dHEpOwo+ICsJc3Bpbl91bmxvY2soJmRldi0+bXNnX2xvY2spOwo+ICsJd2FpdF9ldmVudF9pbnRl cnJ1cHRpYmxlKG1zZy0+d2FpdHEsIG1zZy0+Y29tcGxldGVkKTsKPiArCXNwaW5fbG9jaygmZGV2 LT5tc2dfbG9jayk7Cj4gKwlpZiAoIW1zZy0+Y29tcGxldGVkKQo+ICsJCWxpc3RfZGVsKCZtc2ct Pmxpc3QpOwo+ICsJc3Bpbl91bmxvY2soJmRldi0+bXNnX2xvY2spOwo+ICsKPiArCXJldHVybiAo bXNnLT5yZXNwLnJlc3VsdCA9PSBWRFVTRV9SRVFVRVNUX09LKSA/IDAgOiAtMTsKPiArfQo+ICsK PiArc3RhdGljIHUzMiB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoc3RydWN0IHZkdXNlX2RldiAq ZGV2KQo+ICt7Cj4gKwlyZXR1cm4gYXRvbWljNjRfZmV0Y2hfaW5jKCZkZXYtPm1zZ191bmlxdWUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdTY0IHZkdXNlX2Rldl9nZXRfZmVhdHVyZXMoc3RydWN0IHZk dXNlX2RldiAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cgPSB7IDAgfTsK PiArCj4gKwltc2cucmVxLnR5cGUgPSBWRFVTRV9HRVRfRkVBVFVSRVM7Cj4gKwltc2cucmVxLnJl cXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPiArCj4gKwlyZXR1cm4g dmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZykgPyAwIDogbXNnLnJlc3AuZi5mZWF0dXJlczsK PiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV9kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2ZHVz ZV9kZXYgKmRldiwgdTY0IGZlYXR1cmVzKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyBt c2cgPSB7IDAgfTsKPiArCj4gKwltc2cucmVxLnR5cGUgPSBWRFVTRV9TRVRfRkVBVFVSRVM7Cj4g Kwltc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPiAr CW1zZy5yZXEuZi5mZWF0dXJlcyA9IGZlYXR1cmVzOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZf bXNnX3N5bmMoZGV2LCAmbXNnKTsKPiArfQo+ICsKPiArc3RhdGljIHU4IHZkdXNlX2Rldl9nZXRf c3RhdHVzKHN0cnVjdCB2ZHVzZV9kZXYgKmRldikKPiArewo+ICsJc3RydWN0IHZkdXNlX2Rldl9t c2cgbXNnID0geyAwIH07Cj4gKwo+ICsJbXNnLnJlcS50eXBlID0gVkRVU0VfR0VUX1NUQVRVUzsK PiArCW1zZy5yZXEucmVxdWVzdF9pZCA9IHZkdXNlX2Rldl9nZXRfcmVxdWVzdF9pZChkZXYpOwo+ ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNnKSA/IDAgOiBtc2cucmVz cC5zLnN0YXR1czsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X3NldF9zdGF0dXMo c3RydWN0IHZkdXNlX2RldiAqZGV2LCB1OCBzdGF0dXMpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9k ZXZfbXNnIG1zZyA9IHsgMCB9Owo+ICsKPiArCW1zZy5yZXEudHlwZSA9IFZEVVNFX1NFVF9TVEFU VVM7Cj4gKwltc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoZGV2 KTsKPiArCW1zZy5yZXEucy5zdGF0dXMgPSBzdGF0dXM7Cj4gKwo+ICsJdmR1c2VfZGV2X21zZ19z eW5jKGRldiwgJm1zZyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX2Rldl9nZXRfY29u ZmlnKHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKPiArCQkJCSB2 b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXZfbXNn IG1zZyA9IHsgMCB9Owo+ICsJdW5zaWduZWQgaW50IHN6Owo+ICsKPiArCXdoaWxlIChsZW4pIHsK PiArCQlzeiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YobXNnLnJlcS5jb25maWcu ZGF0YSkpOwo+ICsJCW1zZy5yZXEudHlwZSA9IFZEVVNFX0dFVF9DT05GSUc7Cj4gKwkJbXNnLnJl cS5yZXF1ZXN0X2lkID0gdmR1c2VfZGV2X2dldF9yZXF1ZXN0X2lkKGRldik7Cj4gKwkJbXNnLnJl cS5jb25maWcub2Zmc2V0ID0gb2Zmc2V0Owo+ICsJCW1zZy5yZXEuY29uZmlnLmxlbiA9IHN6Owo+ ICsJCXZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZtc2cpOwo+ICsJCW1lbWNweShidWYsIG1zZy5y ZXNwLmNvbmZpZy5kYXRhLCBzeik7Cj4gKwkJYnVmICs9IHN6Owo+ICsJCW9mZnNldCArPSBzejsK PiArCQlsZW4gLT0gc3o7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX2Rldl9z ZXRfY29uZmlnKHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKPiAr CQkJCSBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+ICsJdW5zaWduZWQgaW50IHN6Owo+ICsKPiArCXdo aWxlIChsZW4pIHsKPiArCQlzeiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YobXNn LnJlcS5jb25maWcuZGF0YSkpOwo+ICsJCW1zZy5yZXEudHlwZSA9IFZEVVNFX1NFVF9DT05GSUc7 Cj4gKwkJbXNnLnJlcS5yZXF1ZXN0X2lkID0gdmR1c2VfZGV2X2dldF9yZXF1ZXN0X2lkKGRldik7 Cj4gKwkJbXNnLnJlcS5jb25maWcub2Zmc2V0ID0gb2Zmc2V0Owo+ICsJCW1zZy5yZXEuY29uZmln LmxlbiA9IHN6Owo+ICsJCW1lbWNweShtc2cucmVxLmNvbmZpZy5kYXRhLCBidWYsIHN6KTsKPiAr CQl2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNnKTsKPiArCQlidWYgKz0gc3o7Cj4gKwkJb2Zm c2V0ICs9IHN6Owo+ICsJCWxlbiAtPSBzejsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dmR1c2VfZGV2X3NldF92cV9udW0oc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+ICsJCQkJIHN0cnVj dCB2ZHVzZV92aXJ0cXVldWUgKnZxLCB1MzIgbnVtKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2 X21zZyBtc2cgPSB7IDAgfTsKPiArCj4gKwltc2cucmVxLnR5cGUgPSBWRFVTRV9TRVRfVlFfTlVN Owo+ICsJbXNnLnJlcS5yZXF1ZXN0X2lkID0gdmR1c2VfZGV2X2dldF9yZXF1ZXN0X2lkKGRldik7 Cj4gKwltc2cucmVxLnZxX251bS5pbmRleCA9IHZxLT5pbmRleDsKPiArCW1zZy5yZXEudnFfbnVt Lm51bSA9IG51bTsKPiArCj4gKwl2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNnKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCB2ZHVzZV9kZXZfc2V0X3ZxX2FkZHIoc3RydWN0IHZkdXNlX2RldiAq ZGV2LAo+ICsJCQkJIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxLCB1NjQgZGVzY19hZGRyLAo+ ICsJCQkJIHU2NCBkcml2ZXJfYWRkciwgdTY0IGRldmljZV9hZGRyKQo+ICt7Cj4gKwlzdHJ1Y3Qg dmR1c2VfZGV2X21zZyBtc2cgPSB7IDAgfTsKPiArCj4gKwltc2cucmVxLnR5cGUgPSBWRFVTRV9T RVRfVlFfQUREUjsKPiArCW1zZy5yZXEucmVxdWVzdF9pZCA9IHZkdXNlX2Rldl9nZXRfcmVxdWVz dF9pZChkZXYpOwo+ICsJbXNnLnJlcS52cV9hZGRyLmluZGV4ID0gdnEtPmluZGV4Owo+ICsJbXNn LnJlcS52cV9hZGRyLmRlc2NfYWRkciA9IGRlc2NfYWRkcjsKPiArCW1zZy5yZXEudnFfYWRkci5k cml2ZXJfYWRkciA9IGRyaXZlcl9hZGRyOwo+ICsJbXNnLnJlcS52cV9hZGRyLmRldmljZV9hZGRy ID0gZGV2aWNlX2FkZHI7Cj4gKwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZt c2cpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV9kZXZfc2V0X3ZxX3JlYWR5KHN0cnVj dCB2ZHVzZV9kZXYgKmRldiwKPiArCQkJCXN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxLCBib29s IHJlYWR5KQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cgPSB7IDAgfTsKPiArCj4g Kwltc2cucmVxLnR5cGUgPSBWRFVTRV9TRVRfVlFfUkVBRFk7Cj4gKwltc2cucmVxLnJlcXVlc3Rf aWQgPSB2ZHVzZV9kZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPiArCW1zZy5yZXEudnFfcmVhZHku aW5kZXggPSB2cS0+aW5kZXg7Cj4gKwltc2cucmVxLnZxX3JlYWR5LnJlYWR5ID0gcmVhZHk7Cj4g Kwo+ICsJdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIHZkdXNlX2Rldl9nZXRfdnFfcmVhZHkoc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+ICsJCQkJ ICAgc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXZf bXNnIG1zZyA9IHsgMCB9Owo+ICsKPiArCW1zZy5yZXEudHlwZSA9IFZEVVNFX0dFVF9WUV9SRUFE WTsKPiArCW1zZy5yZXEucmVxdWVzdF9pZCA9IHZkdXNlX2Rldl9nZXRfcmVxdWVzdF9pZChkZXYp Owo+ICsJbXNnLnJlcS52cV9yZWFkeS5pbmRleCA9IHZxLT5pbmRleDsKPiArCj4gKwlyZXR1cm4g dmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZykgPyBmYWxzZSA6IG1zZy5yZXNwLnZxX3JlYWR5 LnJlYWR5Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZkdXNlX2Rldl9nZXRfdnFfc3RhdGUoc3Ry dWN0IHZkdXNlX2RldiAqZGV2LAo+ICsJCQkJc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEsCj4g KwkJCQlzdHJ1Y3QgdmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9k ZXZfbXNnIG1zZyA9IHsgMCB9Owo+ICsJaW50IHJldDsKPiArCj4gKwltc2cucmVxLnR5cGUgPSBW RFVTRV9HRVRfVlFfU1RBVEU7Cj4gKwltc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9kZXZfZ2V0 X3JlcXVlc3RfaWQoZGV2KTsKPiArCW1zZy5yZXEudnFfc3RhdGUuaW5kZXggPSB2cS0+aW5kZXg7 Cj4gKwo+ICsJcmV0ID0gdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4gKwlpZiAoIXJl dCkKPiArCQlzdGF0ZS0+YXZhaWxfaW5kZXggPSBtc2cucmVzcC52cV9zdGF0ZS5hdmFpbF9pZHg7 Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV9kZXZfc2V0 X3ZxX3N0YXRlKHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwKPiArCQkJCXN0cnVjdCB2ZHVzZV92aXJ0 cXVldWUgKnZxLAo+ICsJCQkJY29uc3Qgc3RydWN0IHZkcGFfdnFfc3RhdGUgKnN0YXRlKQo+ICt7 Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cgPSB7IDAgfTsKPiArCj4gKwltc2cucmVxLnR5 cGUgPSBWRFVTRV9TRVRfVlFfU1RBVEU7Cj4gKwltc2cucmVxLnJlcXVlc3RfaWQgPSB2ZHVzZV9k ZXZfZ2V0X3JlcXVlc3RfaWQoZGV2KTsKPiArCW1zZy5yZXEudnFfc3RhdGUuaW5kZXggPSB2cS0+ aW5kZXg7Cj4gKwltc2cucmVxLnZxX3N0YXRlLmF2YWlsX2lkeCA9IHN0YXRlLT5hdmFpbF9pbmRl eDsKPiArCj4gKwlyZXR1cm4gdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdmR1c2VfZGV2X3VwZGF0ZV9pb3RsYihzdHJ1Y3QgdmR1c2VfZGV2ICpk ZXYsCj4gKwkJCQl1NjQgc3RhcnQsIHU2NCBsYXN0KQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2 X21zZyBtc2cgPSB7IDAgfTsKPiArCj4gKwlpZiAobGFzdCA8IHN0YXJ0KQo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCW1zZy5yZXEudHlwZSA9IFZEVVNFX1VQREFURV9JT1RMQjsKPiArCW1z Zy5yZXEucmVxdWVzdF9pZCA9IHZkdXNlX2Rldl9nZXRfcmVxdWVzdF9pZChkZXYpOwo+ICsJbXNn LnJlcS5pb3ZhLnN0YXJ0ID0gc3RhcnQ7Cj4gKwltc2cucmVxLmlvdmEubGFzdCA9IGxhc3Q7Cj4g Kwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYsICZtc2cpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc3NpemVfdCB2ZHVzZV9kZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3Ry dWN0IGlvdl9pdGVyICp0bykKPiArewo+ICsJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9m aWxwOwo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsJ c3RydWN0IHZkdXNlX2Rldl9tc2cgKm1zZzsKPiArCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCB2 ZHVzZV9kZXZfcmVxdWVzdCk7Cj4gKwlzc2l6ZV90IHJldCA9IDA7Cj4gKwo+ICsJaWYgKGlvdl9p dGVyX2NvdW50KHRvKSA8IHNpemUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZk ZXYtPm1zZ19sb2NrKTsKPiArCXdoaWxlICgxKSB7Cj4gKwkJbXNnID0gdmR1c2VfZGVxdWV1ZV9t c2coJmRldi0+c2VuZF9saXN0KTsKPiArCQlpZiAobXNnKQo+ICsJCQlicmVhazsKPiArCj4gKwkJ cmV0ID0gLUVBR0FJTjsKPiArCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCj4gKwkJ CWdvdG8gdW5sb2NrOwo+ICsKPiArCQlzcGluX3VubG9jaygmZGV2LT5tc2dfbG9jayk7Cj4gKwkJ cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZShkZXYtPndhaXRxLAo+ICsJ CQkJCSFsaXN0X2VtcHR5KCZkZXYtPnNlbmRfbGlzdCkpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJl dHVybiByZXQ7Cj4gKwo+ICsJCXNwaW5fbG9jaygmZGV2LT5tc2dfbG9jayk7Cj4gKwl9Cj4gKwlz cGluX3VubG9jaygmZGV2LT5tc2dfbG9jayk7Cj4gKwlyZXQgPSBjb3B5X3RvX2l0ZXIoJm1zZy0+ cmVxLCBzaXplLCB0byk7Cj4gKwlzcGluX2xvY2soJmRldi0+bXNnX2xvY2spOwo+ICsJaWYgKHJl dCAhPSBzaXplKSB7Cj4gKwkJcmV0ID0gLUVGQVVMVDsKPiArCQl2ZHVzZV9lbnF1ZXVlX21zZygm ZGV2LT5zZW5kX2xpc3QsIG1zZyk7Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwl9Cj4gKwl2ZHVzZV9l bnF1ZXVlX21zZygmZGV2LT5yZWN2X2xpc3QsIG1zZyk7Cj4gKwl3YWtlX3VwKCZkZXYtPndhaXRx KTsKPiArdW5sb2NrOgo+ICsJc3Bpbl91bmxvY2soJmRldi0+bXNnX2xvY2spOwo+ICsKPiArCXJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IHZkdXNlX2Rldl93cml0ZV9pdGVy KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQo+ICt7Cj4gKwlzdHJ1 Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYg PSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X3Jlc3BvbnNlIHJlc3A7 Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqbXNnOwo+ICsJc2l6ZV90IHJldDsKPiArCj4gKwly ZXQgPSBjb3B5X2Zyb21faXRlcigmcmVzcCwgc2l6ZW9mKHJlc3ApLCBmcm9tKTsKPiArCWlmIChy ZXQgIT0gc2l6ZW9mKHJlc3ApKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXNwaW5fbG9j aygmZGV2LT5tc2dfbG9jayk7Cj4gKwltc2cgPSB2ZHVzZV9maW5kX21zZygmZGV2LT5yZWN2X2xp c3QsIHJlc3AucmVxdWVzdF9pZCk7Cj4gKwlpZiAoIW1zZykgewo+ICsJCXJldCA9IC1FSU5WQUw7 Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KCZtc2ctPnJlc3AsICZyZXNw LCBzaXplb2YocmVzcCkpOwo+ICsJbXNnLT5jb21wbGV0ZWQgPSAxOwo+ICsJd2FrZV91cCgmbXNn LT53YWl0cSk7Cj4gK3VubG9jazoKPiArCXNwaW5fdW5sb2NrKCZkZXYtPm1zZ19sb2NrKTsKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgX19wb2xsX3QgdmR1c2VfZGV2X3Bv bGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCV9fcG9sbF90IG1hc2sgPSAw Owo+ICsKPiArCXBvbGxfd2FpdChmaWxlLCAmZGV2LT53YWl0cSwgd2FpdCk7Cj4gKwo+ICsJaWYg KCFsaXN0X2VtcHR5KCZkZXYtPnNlbmRfbGlzdCkpCj4gKwkJbWFzayB8PSBFUE9MTElOIHwgRVBP TExSRE5PUk07Cj4gKwlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cmVjdl9saXN0KSkKPiArCQltYXNr IHw9IEVQT0xMT1VUOwo+ICsKPiArCXJldHVybiBtYXNrOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCB2ZHVzZV9kZXZfcmVzZXQoc3RydWN0IHZkdXNlX2RldiAqZGV2KQo+ICt7Cj4gKwlpbnQgaTsK PiArCj4gKwkvKiBUaGUgY29oZXJlbnQgbWFwcGluZ3MgYXJlIGhhbmRsZWQgaW4gdmR1c2VfZGV2 X2ZyZWVfY29oZXJlbnQoKSAqLwo+ICsJdmR1c2VfZG9tYWluX3Jlc2V0X2JvdW5jZV9tYXAoZGV2 LT5kb21haW4pOwo+ICsJdmR1c2VfZGV2X3VwZGF0ZV9pb3RsYihkZXYsIDBVTEwsIFVMTE9OR19N QVgpOwo+ICsKPiArCXNwaW5fbG9jaygmZGV2LT5pcnFfbG9jayk7Cj4gKwlkZXYtPmNvbmZpZ19j Yi5jYWxsYmFjayA9IE5VTEw7Cj4gKwlkZXYtPmNvbmZpZ19jYi5wcml2YXRlID0gTlVMTDsKPiAr CXNwaW5fdW5sb2NrKCZkZXYtPmlycV9sb2NrKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZGV2 LT52cV9udW07IGkrKykgewo+ICsJCXN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxID0gJmRldi0+ dnFzW2ldOwo+ICsKPiArCQlzcGluX2xvY2soJnZxLT5pcnFfbG9jayk7Cj4gKwkJdnEtPnJlYWR5 ID0gZmFsc2U7Cj4gKwkJdnEtPmNiLmNhbGxiYWNrID0gTlVMTDsKPiArCQl2cS0+Y2IucHJpdmF0 ZSA9IE5VTEw7Cj4gKwkJc3Bpbl91bmxvY2soJnZxLT5pcnFfbG9jayk7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdmR1c2VfdmRwYV9zZXRfdnFfYWRkcmVzcyhzdHJ1Y3QgdmRwYV9kZXZp Y2UgKnZkcGEsIHUxNiBpZHgsCj4gKwkJCQl1NjQgZGVzY19hcmVhLCB1NjQgZHJpdmVyX2FyZWEs Cj4gKwkJCQl1NjQgZGV2aWNlX2FyZWEpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9 IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZk ZXYtPnZxc1tpZHhdOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfc2V0X3ZxX2FkZHIoZGV2LCB2 cSwgZGVzY19hcmVhLAo+ICsJCQkJCWRyaXZlcl9hcmVhLCBkZXZpY2VfYXJlYSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfa2lja192cShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZk cGEsIHUxNiBpZHgpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1 c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZkZXYtPnZxc1tpZHhd Owo+ICsKPiArCXNwaW5fbG9jaygmdnEtPmtpY2tfbG9jayk7Cj4gKwlpZiAodnEtPnJlYWR5ICYm IHZxLT5raWNrZmQpCj4gKwkJZXZlbnRmZF9zaWduYWwodnEtPmtpY2tmZCwgMSk7Cj4gKwlzcGlu X3VubG9jaygmdnEtPmtpY2tfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX3Zk cGFfc2V0X3ZxX2NiKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2IGlkeCwKPiArCQkJICAg ICAgc3RydWN0IHZkcGFfY2FsbGJhY2sgKmNiKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpk ZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsJc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEg PSAmZGV2LT52cXNbaWR4XTsKPiArCj4gKwlzcGluX2xvY2soJnZxLT5pcnFfbG9jayk7Cj4gKwl2 cS0+Y2IuY2FsbGJhY2sgPSBjYi0+Y2FsbGJhY2s7Cj4gKwl2cS0+Y2IucHJpdmF0ZSA9IGNiLT5w cml2YXRlOwo+ICsJc3Bpbl91bmxvY2soJnZxLT5pcnFfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3ZxX251bShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUx NiBpZHgsIHUzMiBudW0pCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9f dmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZkZXYtPnZxc1tp ZHhdOwo+ICsKPiArCXZkdXNlX2Rldl9zZXRfdnFfbnVtKGRldiwgdnEsIG51bSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3ZxX3JlYWR5KHN0cnVjdCB2ZHBhX2Rldmlj ZSAqdmRwYSwKPiArCQkJCQl1MTYgaWR4LCBib29sIHJlYWR5KQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1 c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsJc3RydWN0IHZkdXNlX3ZpcnRx dWV1ZSAqdnEgPSAmZGV2LT52cXNbaWR4XTsKPiArCj4gKwl2ZHVzZV9kZXZfc2V0X3ZxX3JlYWR5 KGRldiwgdnEsIHJlYWR5KTsKPiArCXZxLT5yZWFkeSA9IHJlYWR5Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCB2ZHVzZV92ZHBhX2dldF92cV9yZWFkeShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEs IHUxNiBpZHgpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2Uo dmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZkZXYtPnZxc1tpZHhdOwo+ ICsKPiArCXZxLT5yZWFkeSA9IHZkdXNlX2Rldl9nZXRfdnFfcmVhZHkoZGV2LCB2cSk7Cj4gKwo+ ICsJcmV0dXJuIHZxLT5yZWFkeTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV92ZHBhX3Nl dF92cV9zdGF0ZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgsCj4gKwkJCQljb25z dCBzdHJ1Y3QgdmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYg KmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2 cSA9ICZkZXYtPnZxc1tpZHhdOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfc2V0X3ZxX3N0YXRl KGRldiwgdnEsIHN0YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV92ZHBhX2dldF92 cV9zdGF0ZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgsCj4gKwkJCQlzdHJ1Y3Qg dmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZk cGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZkZXYt PnZxc1tpZHhdOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfZ2V0X3ZxX3N0YXRlKGRldiwgdnEs IHN0YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiB2ZHVzZV92ZHBhX2dldF92cV9hbGlnbihz dHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9 IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwo+ICsJcmV0dXJuIGRldi0+dnFfYWxpZ247Cj4gK30K PiArCj4gK3N0YXRpYyB1NjQgdmR1c2VfdmRwYV9nZXRfZmVhdHVyZXMoc3RydWN0IHZkcGFfZGV2 aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNl KHZkcGEpOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfZ2V0X2ZlYXR1cmVzKGRldik7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfdmRwYV9zZXRfZmVhdHVyZXMoc3RydWN0IHZkcGFfZGV2 aWNlICp2ZHBhLCB1NjQgZmVhdHVyZXMpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9 IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwo+ICsJaWYgKCEoZmVhdHVyZXMgJiAoMVVMTCA8PCBW SVJUSU9fRl9BQ0NFU1NfUExBVEZPUk0pKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwly ZXR1cm4gdmR1c2VfZGV2X3NldF9mZWF0dXJlcyhkZXYsIGZlYXR1cmVzKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdmR1c2VfdmRwYV9zZXRfY29uZmlnX2NiKHN0cnVjdCB2ZHBhX2RldmljZSAq dmRwYSwKPiArCQkJCSAgc3RydWN0IHZkcGFfY2FsbGJhY2sgKmNiKQo+ICt7Cj4gKwlzdHJ1Y3Qg dmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsKPiArCXNwaW5fbG9jaygm ZGV2LT5pcnFfbG9jayk7Cj4gKwlkZXYtPmNvbmZpZ19jYi5jYWxsYmFjayA9IGNiLT5jYWxsYmFj azsKPiArCWRldi0+Y29uZmlnX2NiLnByaXZhdGUgPSBjYi0+cHJpdmF0ZTsKPiArCXNwaW5fdW5s b2NrKCZkZXYtPmlycV9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIHUxNiB2ZHVzZV92ZHBhX2dl dF92cV9udW1fbWF4KHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSkKPiArewo+ICsJc3RydWN0IHZk dXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPiArCj4gKwlyZXR1cm4gZGV2LT52 cV9zaXplX21heDsKPiArfQo+ICsKPiArc3RhdGljIHUzMiB2ZHVzZV92ZHBhX2dldF9kZXZpY2Vf aWQoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpk ZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsKPiArCXJldHVybiBkZXYtPmRldmljZV9pZDsK PiArfQo+ICsKPiArc3RhdGljIHUzMiB2ZHVzZV92ZHBhX2dldF92ZW5kb3JfaWQoc3RydWN0IHZk cGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3Rv X3ZkdXNlKHZkcGEpOwo+ICsKPiArCXJldHVybiBkZXYtPnZlbmRvcl9pZDsKPiArfQo+ICsKPiAr c3RhdGljIHU4IHZkdXNlX3ZkcGFfZ2V0X3N0YXR1cyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEp Cj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4g Kwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9nZXRfc3RhdHVzKGRldik7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3N0YXR1cyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHU4 IHN0YXR1cykKPiArewo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2 ZHBhKTsKPiArCj4gKwl2ZHVzZV9kZXZfc2V0X3N0YXR1cyhkZXYsIHN0YXR1cyk7Cj4gKwo+ICsJ aWYgKHN0YXR1cyA9PSAwKQo+ICsJCXZkdXNlX2Rldl9yZXNldChkZXYpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB2ZHVzZV92ZHBhX2dldF9jb25maWcoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBh LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ICsJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50 IGxlbikKPiArewo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBh KTsKPiArCj4gKwl2ZHVzZV9kZXZfZ2V0X2NvbmZpZyhkZXYsIG9mZnNldCwgYnVmLCBsZW4pOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV92ZHBhX3NldF9jb25maWcoc3RydWN0IHZkcGFf ZGV2aWNlICp2ZHBhLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ICsJCQljb25zdCB2b2lkICpidWYs IHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFf dG9fdmR1c2UodmRwYSk7Cj4gKwo+ICsJdmR1c2VfZGV2X3NldF9jb25maWcoZGV2LCBvZmZzZXQs IGJ1ZiwgbGVuKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV92ZHBhX3NldF9tYXAoc3Ry dWN0IHZkcGFfZGV2aWNlICp2ZHBhLAo+ICsJCQkJc3RydWN0IHZob3N0X2lvdGxiICppb3RsYikK PiArewo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gdmR1c2VfZG9tYWluX3NldF9tYXAoZGV2LT5kb21haW4s IGlvdGxiKTsKPiArCXZkdXNlX2Rldl91cGRhdGVfaW90bGIoZGV2LCAwVUxMLCBVTExPTkdfTUFY KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV92ZHBh X2ZyZWUoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2 ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsKPiArCVdBUk5fT04oIWxpc3RfZW1wdHko JmRldi0+c2VuZF9saXN0KSk7Cj4gKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZkZXYtPnJlY3ZfbGlz dCkpOwo+ICsJZGV2LT52ZGV2ID0gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCB2ZHBhX2NvbmZpZ19vcHMgdmR1c2VfdmRwYV9jb25maWdfb3BzID0gewo+ICsJLnNldF92cV9h ZGRyZXNzCQk9IHZkdXNlX3ZkcGFfc2V0X3ZxX2FkZHJlc3MsCj4gKwkua2lja192cQkJPSB2ZHVz ZV92ZHBhX2tpY2tfdnEsCj4gKwkuc2V0X3ZxX2NiCQk9IHZkdXNlX3ZkcGFfc2V0X3ZxX2NiLAo+ ICsJLnNldF92cV9udW0gICAgICAgICAgICAgPSB2ZHVzZV92ZHBhX3NldF92cV9udW0sCj4gKwku c2V0X3ZxX3JlYWR5CQk9IHZkdXNlX3ZkcGFfc2V0X3ZxX3JlYWR5LAo+ICsJLmdldF92cV9yZWFk eQkJPSB2ZHVzZV92ZHBhX2dldF92cV9yZWFkeSwKPiArCS5zZXRfdnFfc3RhdGUJCT0gdmR1c2Vf dmRwYV9zZXRfdnFfc3RhdGUsCj4gKwkuZ2V0X3ZxX3N0YXRlCQk9IHZkdXNlX3ZkcGFfZ2V0X3Zx X3N0YXRlLAo+ICsJLmdldF92cV9hbGlnbgkJPSB2ZHVzZV92ZHBhX2dldF92cV9hbGlnbiwKPiAr CS5nZXRfZmVhdHVyZXMJCT0gdmR1c2VfdmRwYV9nZXRfZmVhdHVyZXMsCj4gKwkuc2V0X2ZlYXR1 cmVzCQk9IHZkdXNlX3ZkcGFfc2V0X2ZlYXR1cmVzLAo+ICsJLnNldF9jb25maWdfY2IJCT0gdmR1 c2VfdmRwYV9zZXRfY29uZmlnX2NiLAo+ICsJLmdldF92cV9udW1fbWF4CQk9IHZkdXNlX3ZkcGFf Z2V0X3ZxX251bV9tYXgsCj4gKwkuZ2V0X2RldmljZV9pZAkJPSB2ZHVzZV92ZHBhX2dldF9kZXZp Y2VfaWQsCj4gKwkuZ2V0X3ZlbmRvcl9pZAkJPSB2ZHVzZV92ZHBhX2dldF92ZW5kb3JfaWQsCj4g KwkuZ2V0X3N0YXR1cwkJPSB2ZHVzZV92ZHBhX2dldF9zdGF0dXMsCj4gKwkuc2V0X3N0YXR1cwkJ PSB2ZHVzZV92ZHBhX3NldF9zdGF0dXMsCj4gKwkuZ2V0X2NvbmZpZwkJPSB2ZHVzZV92ZHBhX2dl dF9jb25maWcsCj4gKwkuc2V0X2NvbmZpZwkJPSB2ZHVzZV92ZHBhX3NldF9jb25maWcsCj4gKwku c2V0X21hcAkJPSB2ZHVzZV92ZHBhX3NldF9tYXAsCj4gKwkuZnJlZQkJCT0gdmR1c2VfdmRwYV9m cmVlLAo+ICt9Owo+ICsKPiArc3RhdGljIGRtYV9hZGRyX3QgdmR1c2VfZGV2X21hcF9wYWdlKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCj4gKwkJCQkgICAgIHVuc2lnbmVk IGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKPiArCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJl Y3Rpb24gZGlyLAo+ICsJCQkJICAgICB1bnNpZ25lZCBsb25nIGF0dHJzKQo+ICt7Cj4gKwlzdHJ1 Y3QgdmR1c2VfZGV2ICp2ZGV2ID0gZGV2X3RvX3ZkdXNlKGRldik7Cj4gKwlzdHJ1Y3QgdmR1c2Vf aW92YV9kb21haW4gKmRvbWFpbiA9IHZkZXYtPmRvbWFpbjsKPiArCj4gKwlyZXR1cm4gdmR1c2Vf ZG9tYWluX21hcF9wYWdlKGRvbWFpbiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIGF0dHJzKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X3VubWFwX3BhZ2Uoc3RydWN0IGRldmlj ZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAo+ICsJCQkJc2l6ZV90IHNpemUsIGVudW0gZG1h X2RhdGFfZGlyZWN0aW9uIGRpciwKPiArCQkJCXVuc2lnbmVkIGxvbmcgYXR0cnMpCj4gK3sKPiAr CXN0cnVjdCB2ZHVzZV9kZXYgKnZkZXYgPSBkZXZfdG9fdmR1c2UoZGV2KTsKPiArCXN0cnVjdCB2 ZHVzZV9pb3ZhX2RvbWFpbiAqZG9tYWluID0gdmRldi0+ZG9tYWluOwo+ICsKPiArCXJldHVybiB2 ZHVzZV9kb21haW5fdW5tYXBfcGFnZShkb21haW4sIGRtYV9hZGRyLCBzaXplLCBkaXIsIGF0dHJz KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKnZkdXNlX2Rldl9hbGxvY19jb2hlcmVudChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAo+ICsJCQkJCWRtYV9hZGRyX3QgKmRtYV9hZGRy LCBnZnBfdCBmbGFnLAo+ICsJCQkJCXVuc2lnbmVkIGxvbmcgYXR0cnMpCj4gK3sKPiArCXN0cnVj dCB2ZHVzZV9kZXYgKnZkZXYgPSBkZXZfdG9fdmR1c2UoZGV2KTsKPiArCXN0cnVjdCB2ZHVzZV9p b3ZhX2RvbWFpbiAqZG9tYWluID0gdmRldi0+ZG9tYWluOwo+ICsJdW5zaWduZWQgbG9uZyBpb3Zh Owo+ICsJdm9pZCAqYWRkcjsKPiArCj4gKwkqZG1hX2FkZHIgPSBETUFfTUFQUElOR19FUlJPUjsK PiArCWFkZHIgPSB2ZHVzZV9kb21haW5fYWxsb2NfY29oZXJlbnQoZG9tYWluLCBzaXplLAo+ICsJ CQkJKGRtYV9hZGRyX3QgKikmaW92YSwgZmxhZywgYXR0cnMpOwo+ICsJaWYgKCFhZGRyKQo+ICsJ CXJldHVybiBOVUxMOwo+ICsKPiArCSpkbWFfYWRkciA9IChkbWFfYWRkcl90KWlvdmE7Cj4gKwl2 ZHVzZV9kZXZfdXBkYXRlX2lvdGxiKHZkZXYsIGlvdmEsIGlvdmEgKyBzaXplIC0gMSk7Cj4gKwo+ ICsJcmV0dXJuIGFkZHI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX2Rldl9mcmVlX2Nv aGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCj4gKwkJCQkJdm9pZCAqdmFk ZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCj4gKwkJCQkJdW5zaWduZWQgbG9uZyBhdHRycykKPiAr ewo+ICsJc3RydWN0IHZkdXNlX2RldiAqdmRldiA9IGRldl90b192ZHVzZShkZXYpOwo+ICsJc3Ry dWN0IHZkdXNlX2lvdmFfZG9tYWluICpkb21haW4gPSB2ZGV2LT5kb21haW47Cj4gKwl1bnNpZ25l ZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpZG1hX2FkZHI7Cj4gKwl1bnNpZ25lZCBsb25n IGxhc3QgPSBzdGFydCArIHNpemUgLSAxOwo+ICsKPiArCXZkdXNlX2RvbWFpbl9mcmVlX2NvaGVy ZW50KGRvbWFpbiwgc2l6ZSwgdmFkZHIsIGRtYV9hZGRyLCBhdHRycyk7Cj4gKwl2ZHVzZV9kZXZf dXBkYXRlX2lvdGxiKHZkZXYsIHN0YXJ0LCBsYXN0KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkbWFfbWFwX29wcyB2ZHVzZV9kZXZfZG1hX29wcyA9IHsKPiArCS5tYXBfcGFnZSA9 IHZkdXNlX2Rldl9tYXBfcGFnZSwKPiArCS51bm1hcF9wYWdlID0gdmR1c2VfZGV2X3VubWFwX3Bh Z2UsCj4gKwkuYWxsb2MgPSB2ZHVzZV9kZXZfYWxsb2NfY29oZXJlbnQsCj4gKwkuZnJlZSA9IHZk dXNlX2Rldl9mcmVlX2NvaGVyZW50LAo+ICt9Owo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBw ZXJtX3RvX2ZpbGVfZmxhZ3ModTggcGVybSkKPiArewo+ICsJdW5zaWduZWQgaW50IGZsYWdzID0g MDsKPiArCj4gKwlzd2l0Y2ggKHBlcm0pIHsKPiArCWNhc2UgVkRVU0VfQUNDRVNTX1dPOgo+ICsJ CWZsYWdzIHw9IE9fV1JPTkxZOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWRFVTRV9BQ0NFU1NfUk86 Cj4gKwkJZmxhZ3MgfD0gT19SRE9OTFk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFZEVVNFX0FDQ0VT U19SVzoKPiArCQlmbGFncyB8PSBPX1JEV1I7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJ CVdBUk4oMSwgImludmFsaWRhdGUgdmhvc3QgSU9UTEIgcGVybWlzc2lvblxuIik7Cj4gKwkJYnJl YWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZsYWdzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZk dXNlX2tpY2tmZF9zZXR1cChzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsCj4gKwkJCXN0cnVjdCB2ZHVz ZV92cV9ldmVudGZkICpldmVudGZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9 IE5VTEw7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cTsKPiArCj4gKwlpZiAoZXZlbnRm ZC0+aW5kZXggPj0gZGV2LT52cV9udW0pCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJdnEg PSAmZGV2LT52cXNbZXZlbnRmZC0+aW5kZXhdOwo+ICsJaWYgKGV2ZW50ZmQtPmZkID4gMCkgewo+ ICsJCWN0eCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGV2ZW50ZmQtPmZkKTsKPiArCQlpZiAoSVNfRVJS KGN0eCkpCj4gKwkJCXJldHVybiBQVFJfRVJSKGN0eCk7Cj4gKwl9IGVsc2UgaWYgKGV2ZW50ZmQt PmZkICE9IFZEVVNFX0VWRU5URkRfREVBU1NJR04pCj4gKwkJcmV0dXJuIDA7CgoKRG8gd2UgYWxs b3cgdGhlIHVzZXJzcGFjZSB0byBzd2l0Y2gga2lja2ZkIGhlcmU/IElmIHllcywgd2UgbmVlZCB0 byBkZWFsIAp3aXRoIHRoYXQuCgoKPiArCj4gKwlzcGluX2xvY2soJnZxLT5raWNrX2xvY2spOwo+ ICsJaWYgKHZxLT5raWNrZmQpCj4gKwkJZXZlbnRmZF9jdHhfcHV0KHZxLT5raWNrZmQpOwo+ICsJ dnEtPmtpY2tmZCA9IGN0eDsKPiArCXNwaW5fdW5sb2NrKCZ2cS0+a2lja19sb2NrKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfdnFfaXJxX2luamVjdChz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV92aXJ0cXVldWUg KnZxID0gY29udGFpbmVyX29mKHdvcmssCj4gKwkJCQkJc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSwg aW5qZWN0KTsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZ2cS0+aXJxX2xvY2spOwo+ICsJaWYgKHZx LT5yZWFkeSAmJiB2cS0+Y2IuY2FsbGJhY2spCj4gKwkJdnEtPmNiLmNhbGxiYWNrKHZxLT5jYi5w cml2YXRlKTsKPiArCXNwaW5fdW5sb2NrX2lycSgmdnEtPmlycV9sb2NrKTsKPiArfQo+ICsKPiAr c3RhdGljIGxvbmcgdmR1c2VfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBp bnQgY21kLAo+ICsJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCj4gK3sKPiArCXN0cnVjdCB2ZHVz ZV9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCXZvaWQgX191c2VyICphcmdwID0g KHZvaWQgX191c2VyICopYXJnOwo+ICsJaW50IHJldDsKPiArCj4gKwlzd2l0Y2ggKGNtZCkgewo+ ICsJY2FzZSBWRFVTRV9JT1RMQl9HRVRfRkQ6IHsKPiArCQlzdHJ1Y3QgdmR1c2VfaW90bGJfZW50 cnkgZW50cnk7Cj4gKwkJc3RydWN0IHZob3N0X2lvdGxiX21hcCAqbWFwOwo+ICsJCXN0cnVjdCB2 ZHBhX21hcF9maWxlICptYXBfZmlsZTsKPiArCQlzdHJ1Y3QgdmR1c2VfaW92YV9kb21haW4gKmRv bWFpbiA9IGRldi0+ZG9tYWluOwo+ICsJCXN0cnVjdCBmaWxlICpmID0gTlVMTDsKPiArCj4gKwkJ cmV0ID0gLUVGQVVMVDsKPiArCQlpZiAoY29weV9mcm9tX3VzZXIoJmVudHJ5LCBhcmdwLCBzaXpl b2YoZW50cnkpKSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJaWYg KGVudHJ5LnN0YXJ0ID4gZW50cnkubGFzdCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXNwaW5fbG9j aygmZG9tYWluLT5pb3RsYl9sb2NrKTsKPiArCQltYXAgPSB2aG9zdF9pb3RsYl9pdHJlZV9maXJz dChkb21haW4tPmlvdGxiLAo+ICsJCQkJCSAgICAgIGVudHJ5LnN0YXJ0LCBlbnRyeS5sYXN0KTsK PiArCQlpZiAobWFwKSB7Cj4gKwkJCW1hcF9maWxlID0gKHN0cnVjdCB2ZHBhX21hcF9maWxlICop bWFwLT5vcGFxdWU7Cj4gKwkJCWYgPSBnZXRfZmlsZShtYXBfZmlsZS0+ZmlsZSk7Cj4gKwkJCWVu dHJ5Lm9mZnNldCA9IG1hcF9maWxlLT5vZmZzZXQ7Cj4gKwkJCWVudHJ5LnN0YXJ0ID0gbWFwLT5z dGFydDsKPiArCQkJZW50cnkubGFzdCA9IG1hcC0+bGFzdDsKPiArCQkJZW50cnkucGVybSA9IG1h cC0+cGVybTsKPiArCQl9Cj4gKwkJc3Bpbl91bmxvY2soJmRvbWFpbi0+aW90bGJfbG9jayk7Cj4g KwkJcmV0ID0gLUVJTlZBTDsKPiArCQlpZiAoIWYpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlyZXQg PSAtRUZBVUxUOwo+ICsJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmVudHJ5LCBzaXplb2YoZW50 cnkpKSkgewo+ICsJCQlmcHV0KGYpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJcmV0ID0gcmVj ZWl2ZV9mZChmLCBwZXJtX3RvX2ZpbGVfZmxhZ3MoZW50cnkucGVybSkpOwo+ICsJCWZwdXQoZik7 CgoKQW55IHJlYXNvbiB0byBkcm9wIHRoZSByZWZjbnQgaGVyZT8KCgo+ICsJCWJyZWFrOwo+ICsJ fQo+ICsJY2FzZSBWRFVTRV9WUV9TRVRVUF9LSUNLRkQ6IHsKPiArCQlzdHJ1Y3QgdmR1c2VfdnFf ZXZlbnRmZCBldmVudGZkOwo+ICsKPiArCQlyZXQgPSAtRUZBVUxUOwo+ICsJCWlmIChjb3B5X2Zy b21fdXNlcigmZXZlbnRmZCwgYXJncCwgc2l6ZW9mKGV2ZW50ZmQpKSkKPiArCQkJYnJlYWs7Cj4g Kwo+ICsJCXJldCA9IHZkdXNlX2tpY2tmZF9zZXR1cChkZXYsICZldmVudGZkKTsKPiArCQlicmVh azsKPiArCX0KPiArCWNhc2UgVkRVU0VfSU5KRUNUX1ZRX0lSUToKPiArCQlyZXQgPSAtRUlOVkFM Owo+ICsJCWlmIChhcmcgPj0gZGV2LT52cV9udW0pCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlyZXQg PSAwOwo+ICsJCXF1ZXVlX3dvcmsodmR1c2VfaXJxX3dxLCAmZGV2LT52cXNbYXJnXS5pbmplY3Qp Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWRFVTRV9JTkpFQ1RfQ09ORklHX0lSUToKPiArCQlyZXQg PSAtRUlOVkFMOwo+ICsJCXNwaW5fbG9ja19pcnEoJmRldi0+aXJxX2xvY2spOwo+ICsJCWlmIChk ZXYtPmNvbmZpZ19jYi5jYWxsYmFjaykgewo+ICsJCQlkZXYtPmNvbmZpZ19jYi5jYWxsYmFjayhk ZXYtPmNvbmZpZ19jYi5wcml2YXRlKTsKPiArCQkJcmV0ID0gMDsKPiArCQl9Cj4gKwkJc3Bpbl91 bmxvY2tfaXJxKCZkZXYtPmlycV9sb2NrKTsKCgpGb3IgY29uc2lzdGVuY3ksIGlzIGl0IGJldHRl ciB0byB1c2UgdmR1c2VfaXJxX3dxIGhlcmU/CgoKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4g KwkJcmV0ID0gLUVOT0lPQ1RMQ01EOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfZGV2X3JlbGVhc2Uoc3RydWN0IGlub2Rl ICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRl diA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCXN0cnVjdCB2ZHVzZV9kZXZfbXNnICptc2c7Cj4g KwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT52cV9udW07IGkrKykgewo+ICsJ CXN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxID0gJmRldi0+dnFzW2ldOwo+ICsKPiArCQlzcGlu X2xvY2soJnZxLT5raWNrX2xvY2spOwo+ICsJCWlmICh2cS0+a2lja2ZkKQo+ICsJCQlldmVudGZk X2N0eF9wdXQodnEtPmtpY2tmZCk7Cj4gKwkJdnEtPmtpY2tmZCA9IE5VTEw7Cj4gKwkJc3Bpbl91 bmxvY2soJnZxLT5raWNrX2xvY2spOwo+ICsJfQo+ICsKPiArCXNwaW5fbG9jaygmZGV2LT5tc2df bG9jayk7Cj4gKwkvKiAgTWFrZSBzdXJlIHRoZSBpbmZsaWdodCBtZXNzYWdlcyBjYW4gcHJvY2Vz c2VkICovCgoKVGhpcyBtaWdodCBiZSBiZXR0ZXI6CgovKsKgIE1ha2Ugc3VyZSB0aGUgaW5mbGln aHQgbWVzc2FnZXMgY2FuIHByb2Nlc3NlZCBhZnRlciByZWNvbm5jZWN0aW9uICovCgo+ICsJd2hp bGUgKChtc2cgPSB2ZHVzZV9kZXF1ZXVlX21zZygmZGV2LT5yZWN2X2xpc3QpKSkKPiArCQl2ZHVz ZV9lbnF1ZXVlX21zZygmZGV2LT5zZW5kX2xpc3QsIG1zZyk7Cj4gKwlzcGluX3VubG9jaygmZGV2 LT5tc2dfbG9jayk7Cj4gKwo+ICsJZGV2LT5jb25uZWN0ZWQgPSBmYWxzZTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2 ID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsCj4gKwkJCQkJc3RydWN0IHZkdXNlX2Rldiwg Y2Rldik7Cj4gKwlpbnQgcmV0ID0gLUVCVVNZOwo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+bG9j ayk7Cj4gKwlpZiAoZGV2LT5jb25uZWN0ZWQpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJcmV0 ID0gMDsKPiArCWRldi0+Y29ubmVjdGVkID0gdHJ1ZTsKPiArCWZpbGUtPnByaXZhdGVfZGF0YSA9 IGRldjsKPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwo+ICsKPiArCXJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHZkdXNlX2Rldl9mb3BzID0gewo+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ICsJLm9wZW4J CT0gdmR1c2VfZGV2X29wZW4sCj4gKwkucmVsZWFzZQk9IHZkdXNlX2Rldl9yZWxlYXNlLAo+ICsJ LnJlYWRfaXRlcgk9IHZkdXNlX2Rldl9yZWFkX2l0ZXIsCj4gKwkud3JpdGVfaXRlcgk9IHZkdXNl X2Rldl93cml0ZV9pdGVyLAo+ICsJLnBvbGwJCT0gdmR1c2VfZGV2X3BvbGwsCj4gKwkudW5sb2Nr ZWRfaW9jdGwJPSB2ZHVzZV9kZXZfaW9jdGwsCj4gKwkuY29tcGF0X2lvY3RsCT0gY29tcGF0X3B0 cl9pb2N0bCwKPiArCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCj4gK307Cj4gKwo+ICtzdGF0aWMg c3RydWN0IHZkdXNlX2RldiAqdmR1c2VfZGV2X2NyZWF0ZSh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3Qg dmR1c2VfZGV2ICpkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7Cj4gKwo+ ICsJaWYgKCFkZXYpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmZGV2LT5s b2NrKTsKPiArCXNwaW5fbG9ja19pbml0KCZkZXYtPm1zZ19sb2NrKTsKPiArCUlOSVRfTElTVF9I RUFEKCZkZXYtPnNlbmRfbGlzdCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5yZWN2X2xpc3Qp Owo+ICsJYXRvbWljNjRfc2V0KCZkZXYtPm1zZ191bmlxdWUsIDApOwo+ICsJc3Bpbl9sb2NrX2lu aXQoJmRldi0+aXJxX2xvY2spOwo+ICsKPiArCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2Fp dHEpOwo+ICsKPiArCXJldHVybiBkZXY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX2Rl dl9kZXN0cm95KHN0cnVjdCB2ZHVzZV9kZXYgKmRldikKPiArewo+ICsJa2ZyZWUoZGV2KTsKPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCB2ZHVzZV9kZXYgKnZkdXNlX2ZpbmRfZGV2KGNvbnN0IGNo YXIgKm5hbWUpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKnRtcCwgKmRldiA9IE5VTEw7Cj4g Kwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZ2ZHVzZV9kZXZzLCBsaXN0KSB7Cj4gKwkJ aWYgKCFzdHJjbXAoZGV2X25hbWUoJnRtcC0+ZGV2KSwgbmFtZSkpIHsKPiArCQkJZGV2ID0gdG1w Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4gZGV2Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHZkdXNlX2Rlc3Ryb3lfZGV2KGNoYXIgKm5hbWUpCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXYgKmRldiA9IHZkdXNlX2ZpbmRfZGV2KG5hbWUpOwo+ICsKPiArCWlmICghZGV2KQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+bG9jayk7Cj4gKwlp ZiAoZGV2LT52ZGV2IHx8IGRldi0+Y29ubmVjdGVkKSB7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZkZXYt PmxvY2spOwo+ICsJCXJldHVybiAtRUJVU1k7Cj4gKwl9Cj4gKwlkZXYtPmNvbm5lY3RlZCA9IHRy dWU7Cj4gKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7Cj4gKwo+ICsJbGlzdF9kZWwoJmRldi0+ bGlzdCk7Cj4gKwljZGV2X2RldmljZV9kZWwoJmRldi0+Y2RldiwgJmRldi0+ZGV2KTsKPiArCXB1 dF9kZXZpY2UoJmRldi0+ZGV2KTsKPiArCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV9yZWxlYXNlX2RldihzdHJ1 Y3QgZGV2aWNlICpkZXZpY2UpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9Cj4gKwkJ Y29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IHZkdXNlX2RldiwgZGV2KTsKPiArCj4gKwlpZGFf c2ltcGxlX3JlbW92ZSgmdmR1c2VfaWRhLCBkZXYtPm1pbm9yKTsKPiArCWtmcmVlKGRldi0+dnFz KTsKPiArCXZkdXNlX2RvbWFpbl9kZXN0cm95KGRldi0+ZG9tYWluKTsKPiArCXZkdXNlX2Rldl9k ZXN0cm95KGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfY3JlYXRlX2RldihzdHJ1 Y3QgdmR1c2VfZGV2X2NvbmZpZyAqY29uZmlnLAo+ICsJCQkgICAgdW5zaWduZWQgbG9uZyBhcGlf dmVyc2lvbikKPiArewo+ICsJaW50IGksIHJldCA9IC1FTk9NRU07Cj4gKwlzdHJ1Y3QgdmR1c2Vf ZGV2ICpkZXY7Cj4gKwo+ICsJaWYgKGNvbmZpZy0+Ym91bmNlX3NpemUgPiBtYXhfYm91bmNlX3Np emUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKGNvbmZpZy0+Ym91bmNlX3NpemUg PiBtYXhfaW92YV9zaXplKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICh2ZHVzZV9m aW5kX2Rldihjb25maWctPm5hbWUpKQo+ICsJCXJldHVybiAtRUVYSVNUOwo+ICsKPiArCWRldiA9 IHZkdXNlX2Rldl9jcmVhdGUoKTsKPiArCWlmICghZGV2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCWRldi0+YXBpX3ZlcnNpb24gPSBhcGlfdmVyc2lvbjsKPiArCWRldi0+ZGV2aWNlX2lk ID0gY29uZmlnLT5kZXZpY2VfaWQ7Cj4gKwlkZXYtPnZlbmRvcl9pZCA9IGNvbmZpZy0+dmVuZG9y X2lkOwo+ICsJZGV2LT5kb21haW4gPSB2ZHVzZV9kb21haW5fY3JlYXRlKG1heF9pb3ZhX3NpemUg LSAxLAo+ICsJCQkJCWNvbmZpZy0+Ym91bmNlX3NpemUpOwo+ICsJaWYgKCFkZXYtPmRvbWFpbikK PiArCQlnb3RvIGVycl9kb21haW47Cj4gKwo+ICsJZGV2LT52cV9hbGlnbiA9IGNvbmZpZy0+dnFf YWxpZ247Cj4gKwlkZXYtPnZxX3NpemVfbWF4ID0gY29uZmlnLT52cV9zaXplX21heDsKPiArCWRl di0+dnFfbnVtID0gY29uZmlnLT52cV9udW07Cj4gKwlkZXYtPnZxcyA9IGtjYWxsb2MoZGV2LT52 cV9udW0sIHNpemVvZigqZGV2LT52cXMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZGV2LT52cXMp Cj4gKwkJZ290byBlcnJfdnFzOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkZXYtPnZxX251bTsg aSsrKSB7Cj4gKwkJZGV2LT52cXNbaV0uaW5kZXggPSBpOwo+ICsJCUlOSVRfV09SSygmZGV2LT52 cXNbaV0uaW5qZWN0LCB2ZHVzZV92cV9pcnFfaW5qZWN0KTsKPiArCQlzcGluX2xvY2tfaW5pdCgm ZGV2LT52cXNbaV0ua2lja19sb2NrKTsKPiArCQlzcGluX2xvY2tfaW5pdCgmZGV2LT52cXNbaV0u aXJxX2xvY2spOwo+ICsJfQo+ICsKPiArCXJldCA9IGlkYV9zaW1wbGVfZ2V0KCZ2ZHVzZV9pZGEs IDAsIFZEVVNFX0RFVl9NQVgsIEdGUF9LRVJORUwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290 byBlcnJfaWRhOwo+ICsKPiArCWRldi0+bWlub3IgPSByZXQ7Cj4gKwlkZXZpY2VfaW5pdGlhbGl6 ZSgmZGV2LT5kZXYpOwo+ICsJZGV2LT5kZXYucmVsZWFzZSA9IHZkdXNlX3JlbGVhc2VfZGV2Owo+ ICsJZGV2LT5kZXYuY2xhc3MgPSB2ZHVzZV9jbGFzczsKPiArCWRldi0+ZGV2LmRldnQgPSBNS0RF VihNQUpPUih2ZHVzZV9tYWpvciksIGRldi0+bWlub3IpOwo+ICsJcmV0ID0gZGV2X3NldF9uYW1l KCZkZXYtPmRldiwgIiVzIiwgY29uZmlnLT5uYW1lKTsKPiArCWlmIChyZXQpIHsKPiArCQlwdXRf ZGV2aWNlKCZkZXYtPmRldik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCWNkZXZfaW5pdCgm ZGV2LT5jZGV2LCAmdmR1c2VfZGV2X2ZvcHMpOwo+ICsJZGV2LT5jZGV2Lm93bmVyID0gVEhJU19N T0RVTEU7Cj4gKwo+ICsJcmV0ID0gY2Rldl9kZXZpY2VfYWRkKCZkZXYtPmNkZXYsICZkZXYtPmRl dik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHV0X2RldmljZSgmZGV2LT5kZXYpOwo+ICsJCXJldHVy biByZXQ7CgoKTGV0J3MgaW50cm9kdWNlIGFuIGVycm9yIGxhYmVsIGZvciB0aGlzLgoKCj4gKwl9 Cj4gKwlsaXN0X2FkZCgmZGV2LT5saXN0LCAmdmR1c2VfZGV2cyk7Cj4gKwlfX21vZHVsZV9nZXQo VEhJU19NT0RVTEUpOwo+ICsKPiArCXJldHVybiAwOwo+ICtlcnJfaWRhOgo+ICsJa2ZyZWUoZGV2 LT52cXMpOwo+ICtlcnJfdnFzOgo+ICsJdmR1c2VfZG9tYWluX2Rlc3Ryb3koZGV2LT5kb21haW4p Owo+ICtlcnJfZG9tYWluOgo+ICsJdmR1c2VfZGV2X2Rlc3Ryb3koZGV2KTsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBsb25nIHZkdXNlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxl LCB1bnNpZ25lZCBpbnQgY21kLAo+ICsJCQl1bnNpZ25lZCBsb25nIGFyZykKPiArewo+ICsJaW50 IHJldDsKPiArCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwo+ICsJc3Ry dWN0IHZkdXNlX2NvbnRyb2wgKmNvbnRyb2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmdmR1c2VfbG9jayk7Cj4gKwlzd2l0Y2ggKGNtZCkgewo+ICsJY2FzZSBWRFVT RV9HRVRfQVBJX1ZFUlNJT046Cj4gKwkJcmV0ID0gY29udHJvbC0+YXBpX3ZlcnNpb247Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIFZEVVNFX1NFVF9BUElfVkVSU0lPTjoKPiArCQlyZXQgPSAtRUlOVkFM Owo+ICsJCWlmIChhcmcgPiBWRFVTRV9BUElfVkVSU0lPTikKPiArCQkJYnJlYWs7Cj4gKwo+ICsJ CXJldCA9IDA7Cj4gKwkJY29udHJvbC0+YXBpX3ZlcnNpb24gPSBhcmc7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIFZEVVNFX0NSRUFURV9ERVY6IHsKPiArCQlzdHJ1Y3QgdmR1c2VfZGV2X2NvbmZpZyBj b25maWc7Cj4gKwo+ICsJCXJldCA9IC1FRkFVTFQ7Cj4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZj b25maWcsIGFyZ3AsIHNpemVvZihjb25maWcpKSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXJldCA9 IHZkdXNlX2NyZWF0ZV9kZXYoJmNvbmZpZywgY29udHJvbC0+YXBpX3ZlcnNpb24pOwo+ICsJCWJy ZWFrOwo+ICsJfQo+ICsJY2FzZSBWRFVTRV9ERVNUUk9ZX0RFVjogewo+ICsJCWNoYXIgbmFtZVtW RFVTRV9OQU1FX01BWF07Cj4gKwo+ICsJCXJldCA9IC1FRkFVTFQ7Cj4gKwkJaWYgKGNvcHlfZnJv bV91c2VyKG5hbWUsIGFyZ3AsIFZEVVNFX05BTUVfTUFYKSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJ CXJldCA9IHZkdXNlX2Rlc3Ryb3lfZGV2KG5hbWUpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJZGVm YXVsdDoKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJbXV0ZXhfdW5s b2NrKCZ2ZHVzZV9sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHZkdXNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUp Cj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9jb250cm9sICpjb250cm9sID0gZmlsZS0+cHJpdmF0ZV9k YXRhOwo+ICsKPiArCWtmcmVlKGNvbnRyb2wpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdmR1c2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmls ZSkKPiArewo+ICsJc3RydWN0IHZkdXNlX2NvbnRyb2wgKmNvbnRyb2w7Cj4gKwo+ICsJY29udHJv bCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2ZHVzZV9jb250cm9sKSwgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIWNvbnRyb2wpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY29udHJvbC0+YXBp X3ZlcnNpb24gPSBWRFVTRV9BUElfVkVSU0lPTjsKPiArCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNv bnRyb2w7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIHZkdXNlX2ZvcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUs Cj4gKwkub3BlbgkJPSB2ZHVzZV9vcGVuLAo+ICsJLnJlbGVhc2UJPSB2ZHVzZV9yZWxlYXNlLAo+ ICsJLnVubG9ja2VkX2lvY3RsCT0gdmR1c2VfaW9jdGwsCj4gKwkuY29tcGF0X2lvY3RsCT0gY29t cGF0X3B0cl9pb2N0bCwKPiArCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCj4gK307Cj4gKwo+ICtz dGF0aWMgY2hhciAqdmR1c2VfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVtb2RlX3QgKm1v ZGUpCj4gK3sKPiArCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInZkdXNlLyVzIiwgZGV2 X25hbWUoZGV2KSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2ZHVzZV9t aXNjID0gewo+ICsJLmZvcHMgPSAmdmR1c2VfZm9wcywKPiArCS5taW5vciA9IE1JU0NfRFlOQU1J Q19NSU5PUiwKPiArCS5uYW1lID0gInZkdXNlIiwKPiArCS5ub2RlbmFtZSA9ICJ2ZHVzZS9jb250 cm9sIiwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX21nbXRkZXZfcmVsZWFzZShzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkZXZpY2UgdmR1 c2VfbWdtdGRldiA9IHsKPiArCS5pbml0X25hbWUgPSAidmR1c2UiLAo+ICsJLnJlbGVhc2UgPSB2 ZHVzZV9tZ210ZGV2X3JlbGVhc2UsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHZkcGFfbWdt dF9kZXYgbWdtdF9kZXY7Cj4gKwo+ICtzdGF0aWMgaW50IHZkdXNlX2Rldl9pbml0X3ZkcGEoc3Ry dWN0IHZkdXNlX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1 c2VfdmRwYSAqdmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGRldi0+dmRldikKPiArCQly ZXR1cm4gLUVFWElTVDsKPiArCj4gKwl2ZGV2ID0gdmRwYV9hbGxvY19kZXZpY2Uoc3RydWN0IHZk dXNlX3ZkcGEsIHZkcGEsICZkZXYtPmRldiwKPiArCQkJCSAmdmR1c2VfdmRwYV9jb25maWdfb3Bz LCBuYW1lLCB0cnVlKTsKPiArCWlmICghdmRldikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4g KwlkZXYtPnZkZXYgPSB2ZGV2Owo+ICsJdmRldi0+ZGV2ID0gZGV2Owo+ICsJdmRldi0+dmRwYS5k ZXYuZG1hX21hc2sgPSAmdmRldi0+dmRwYS5kZXYuY29oZXJlbnRfZG1hX21hc2s7Cj4gKwlyZXQg PSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZ2ZGV2LT52ZHBhLmRldiwgRE1BX0JJVF9NQVNL KDY0KSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHV0X2RldmljZSgmdmRldi0+dmRwYS5kZXYpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlzZXRfZG1hX29wcygmdmRldi0+dmRwYS5kZXYsICZ2 ZHVzZV9kZXZfZG1hX29wcyk7Cj4gKwl2ZGV2LT52ZHBhLmRtYV9kZXYgPSAmdmRldi0+dmRwYS5k ZXY7Cj4gKwl2ZGV2LT52ZHBhLm1kZXYgPSAmbWdtdF9kZXY7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgdmRwYV9kZXZfYWRkKHN0cnVjdCB2ZHBhX21nbXRfZGV2ICpt ZGV2LCBjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXY7Cj4g KwlpbnQgcmV0ID0gLUVJTlZBTDsKPiArCj4gKwltdXRleF9sb2NrKCZ2ZHVzZV9sb2NrKTsKPiAr CWRldiA9IHZkdXNlX2ZpbmRfZGV2KG5hbWUpOwo+ICsJaWYgKCFkZXYpIHsKPiArCQltdXRleF91 bmxvY2soJnZkdXNlX2xvY2spOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsJcmV0ID0g dmR1c2VfZGV2X2luaXRfdmRwYShkZXYsIG5hbWUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZ2ZHVzZV9s b2NrKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBfdmRwYV9y ZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldi0+dmRwYSwgZGV2LT52cV9udW0pOwo+ICsJaWYgKHJl dCkgewo+ICsJCXB1dF9kZXZpY2UoJmRldi0+dmRldi0+dmRwYS5kZXYpOwo+ICsJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkcGFf ZGV2X2RlbChzdHJ1Y3QgdmRwYV9tZ210X2RldiAqbWRldiwgc3RydWN0IHZkcGFfZGV2aWNlICpk ZXYpCj4gK3sKPiArCV92ZHBhX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgdmRwYV9tZ210ZGV2X29wcyB2ZHBhX2Rldl9tZ210ZGV2X29wcyA9 IHsKPiArCS5kZXZfYWRkID0gdmRwYV9kZXZfYWRkLAo+ICsJLmRldl9kZWwgPSB2ZHBhX2Rldl9k ZWwsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVb XSA9IHsKPiArCXsgVklSVElPX0RFVl9BTllfSUQsIFZJUlRJT19ERVZfQU5ZX0lEIH0sCj4gKwl7 IDAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmRwYV9tZ210X2RldiBtZ210X2RldiA9 IHsKPiArCS5kZXZpY2UgPSAmdmR1c2VfbWdtdGRldiwKPiArCS5pZF90YWJsZSA9IGlkX3RhYmxl LAo+ICsJLm9wcyA9ICZ2ZHBhX2Rldl9tZ210ZGV2X29wcywKPiArfTsKPiArCj4gK3N0YXRpYyBp bnQgdmR1c2VfbWdtdGRldl9pbml0KHZvaWQpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0 ID0gZGV2aWNlX3JlZ2lzdGVyKCZ2ZHVzZV9tZ210ZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwlyZXQgPSB2ZHBhX21nbXRkZXZfcmVnaXN0ZXIoJm1nbXRfZGV2KTsK PiArCWlmIChyZXQpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2VycjoKPiAr CWRldmljZV91bnJlZ2lzdGVyKCZ2ZHVzZV9tZ210ZGV2KTsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX21nbXRkZXZfZXhpdCh2b2lkKQo+ICt7Cj4gKwl2ZHBh X21nbXRkZXZfdW5yZWdpc3RlcigmbWdtdF9kZXYpOwo+ICsJZGV2aWNlX3VucmVnaXN0ZXIoJnZk dXNlX21nbXRkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZkdXNlX2luaXQodm9pZCkKPiAr ewo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAobWF4X2JvdW5jZV9zaXplID49IG1heF9pb3ZhX3Np emUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0ID0gbWlzY19yZWdpc3RlcigmdmR1 c2VfbWlzYyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJdmR1c2VfY2xh c3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ2ZHVzZSIpOwo+ICsJaWYgKElTX0VSUih2 ZHVzZV9jbGFzcykpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHZkdXNlX2NsYXNzKTsKPiArCQlnb3Rv IGVycl9jbGFzczsKPiArCX0KPiArCXZkdXNlX2NsYXNzLT5kZXZub2RlID0gdmR1c2VfZGV2bm9k ZTsKPiArCj4gKwlyZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZ2ZHVzZV9tYWpvciwgMCwgVkRV U0VfREVWX01BWCwgInZkdXNlIik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NoYXJkZXY7 Cj4gKwo+ICsJdmR1c2VfaXJxX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJ2ZHVzZS1pcnEiLAo+ICsJ CQkJV1FfSElHSFBSSSB8IFdRX1NZU0ZTIHwgV1FfVU5CT1VORCwgMCk7Cj4gKwlpZiAoIXZkdXNl X2lycV93cSkKPiArCQlnb3RvIGVycl93cTsKPiArCj4gKwlyZXQgPSB2ZHVzZV9kb21haW5faW5p dCgpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9kb21haW47Cj4gKwo+ICsJcmV0ID0gdmR1 c2VfbWdtdGRldl9pbml0KCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX21nbXRkZXY7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK2Vycl9tZ210ZGV2Ogo+ICsJdmR1c2VfZG9tYWluX2V4aXQoKTsK PiArZXJyX2RvbWFpbjoKPiArCWRlc3Ryb3lfd29ya3F1ZXVlKHZkdXNlX2lycV93cSk7Cj4gK2Vy cl93cToKPiArCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbih2ZHVzZV9tYWpvciwgVkRVU0VfREVW X01BWCk7Cj4gK2Vycl9jaGFyZGV2Ogo+ICsJY2xhc3NfZGVzdHJveSh2ZHVzZV9jbGFzcyk7Cj4g K2Vycl9jbGFzczoKPiArCW1pc2NfZGVyZWdpc3RlcigmdmR1c2VfbWlzYyk7Cj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gK21vZHVsZV9pbml0KHZkdXNlX2luaXQpOwo+ICsKPiArc3RhdGljIHZvaWQg dmR1c2VfZXhpdCh2b2lkKQo+ICt7Cj4gKwltaXNjX2RlcmVnaXN0ZXIoJnZkdXNlX21pc2MpOwo+ ICsJY2xhc3NfZGVzdHJveSh2ZHVzZV9jbGFzcyk7Cj4gKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdp b24odmR1c2VfbWFqb3IsIFZEVVNFX0RFVl9NQVgpOwo+ICsJZGVzdHJveV93b3JrcXVldWUodmR1 c2VfaXJxX3dxKTsKPiArCXZkdXNlX2RvbWFpbl9leGl0KCk7Cj4gKwl2ZHVzZV9tZ210ZGV2X2V4 aXQoKTsKPiArfQo+ICttb2R1bGVfZXhpdCh2ZHVzZV9leGl0KTsKPiArCj4gK01PRFVMRV9WRVJT SU9OKERSVl9WRVJTSU9OKTsKPiArTU9EVUxFX0xJQ0VOU0UoRFJWX0xJQ0VOU0UpOwo+ICtNT0RV TEVfQVVUSE9SKERSVl9BVVRIT1IpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MpOwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmR1c2UuaCBiL2luY2x1ZGUvdWFwaS9s aW51eC92ZHVzZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu LjY2YTZlNTIxMjIyNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgv dmR1c2UuaAo+IEBAIC0wLDAgKzEsMTc1IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCj4gKyNpZm5kZWYgX1VBUElfVkRV U0VfSF8KPiArI2RlZmluZSBfVUFQSV9WRFVTRV9IXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Cj4gKwo+ICsjZGVmaW5lIFZEVVNFX0FQSV9WRVJTSU9OCTAKPiArCj4gKyNkZWZpbmUg VkRVU0VfQ09ORklHX0RBVEFfTEVOCTI1Ngo+ICsjZGVmaW5lIFZEVVNFX05BTUVfTUFYCTI1Ngo+ ICsKPiArLyogdGhlIGNvbnRyb2wgbWVzc2FnZXMgZGVmaW5pdGlvbiBmb3IgcmVhZC93cml0ZSAq Lwo+ICsKPiArZW51bSB2ZHVzZV9yZXFfdHlwZSB7Cj4gKwkvKiBTZXQgdGhlIHZyaW5nIGFkZHJl c3Mgb2YgdmlydHF1ZXVlLiAqLwo+ICsJVkRVU0VfU0VUX1ZRX05VTSwKPiArCS8qIFNldCB0aGUg dnJpbmcgYWRkcmVzcyBvZiB2aXJ0cXVldWUuICovCj4gKwlWRFVTRV9TRVRfVlFfQUREUiwKPiAr CS8qIFNldCByZWFkeSBzdGF0dXMgb2YgdmlydHF1ZXVlICovCj4gKwlWRFVTRV9TRVRfVlFfUkVB RFksCj4gKwkvKiBHZXQgcmVhZHkgc3RhdHVzIG9mIHZpcnRxdWV1ZSAqLwo+ICsJVkRVU0VfR0VU X1ZRX1JFQURZLAo+ICsJLyogU2V0IHRoZSBzdGF0ZSBmb3IgdmlydHF1ZXVlICovCj4gKwlWRFVT RV9TRVRfVlFfU1RBVEUsCj4gKwkvKiBHZXQgdGhlIHN0YXRlIGZvciB2aXJ0cXVldWUgKi8KPiAr CVZEVVNFX0dFVF9WUV9TVEFURSwKPiArCS8qIFNldCB2aXJ0aW8gZmVhdHVyZXMgc3VwcG9ydGVk IGJ5IHRoZSBkcml2ZXIgKi8KPiArCVZEVVNFX1NFVF9GRUFUVVJFUywKPiArCS8qIEdldCB2aXJ0 aW8gZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgKi8KPiArCVZEVVNFX0dFVF9GRUFU VVJFUywKPiArCS8qIFNldCB0aGUgZGV2aWNlIHN0YXR1cyAqLwo+ICsJVkRVU0VfU0VUX1NUQVRV UywKPiArCS8qIEdldCB0aGUgZGV2aWNlIHN0YXR1cyAqLwo+ICsJVkRVU0VfR0VUX1NUQVRVUywK PiArCS8qIFdyaXRlIHRvIGRldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNwYWNlICovCj4g KwlWRFVTRV9TRVRfQ09ORklHLAo+ICsJLyogUmVhZCBmcm9tIGRldmljZSBzcGVjaWZpYyBjb25m aWd1cmF0aW9uIHNwYWNlICovCj4gKwlWRFVTRV9HRVRfQ09ORklHLAo+ICsJLyogTm90aWZ5IHVz ZXJzcGFjZSB0byB1cGRhdGUgdGhlIG1lbW9yeSBtYXBwaW5nIGluIGRldmljZSBJT1RMQiAqLwo+ ICsJVkRVU0VfVVBEQVRFX0lPVExCLAo+ICt9Owo+ICsKPiArc3RydWN0IHZkdXNlX3ZxX251bSB7 Cj4gKwlfX3UzMiBpbmRleDsgLyogdmlydHF1ZXVlIGluZGV4ICovCgoKSSB0aGluayBpdCdzIGJl dHRlciB0byBoYXZlIGEgY29uc2lzdGVudCBzdHlsZSBvZiB0aGUgZG9jL2NvbW1lbnQuIElmIAp5 ZXMsIGxldCdzIG1vdmUgdGhvc2UgY29tbWVudCBhYm92ZSB0aGUgZmllbGQuCgoKPiArCV9fdTMy IG51bTsgLyogdGhlIHNpemUgb2YgdmlydHF1ZXVlICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1 c2VfdnFfYWRkciB7Cj4gKwlfX3UzMiBpbmRleDsgLyogdmlydHF1ZXVlIGluZGV4ICovCj4gKwlf X3U2NCBkZXNjX2FkZHI7IC8qIGFkZHJlc3Mgb2YgZGVzYyBhcmVhICovCj4gKwlfX3U2NCBkcml2 ZXJfYWRkcjsgLyogYWRkcmVzcyBvZiBkcml2ZXIgYXJlYSAqLwo+ICsJX191NjQgZGV2aWNlX2Fk ZHI7IC8qIGFkZHJlc3Mgb2YgZGV2aWNlIGFyZWEgKi8KPiArfTsKPiArCj4gK3N0cnVjdCB2ZHVz ZV92cV9yZWFkeSB7Cj4gKwlfX3UzMiBpbmRleDsgLyogdmlydHF1ZXVlIGluZGV4ICovCj4gKwlf X3U4IHJlYWR5OyAvKiByZWFkeSBzdGF0dXMgb2YgdmlydHF1ZXVlICovCj4gK307Cj4gKwo+ICtz dHJ1Y3QgdmR1c2VfdnFfc3RhdGUgewo+ICsJX191MzIgaW5kZXg7IC8qIHZpcnRxdWV1ZSBpbmRl eCAqLwo+ICsJX191MTYgYXZhaWxfaWR4OyAvKiB2aXJ0cXVldWUgc3RhdGUgKGxhc3RfYXZhaWxf aWR4KSAqLwoKCkxldCdzIHVzZSBfX3U2NCBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBnZXRf dnFfc3RhdGUoKS4gVGhlIGlkZWEgaXMgCnRvIHN1cHBvcnQgcGFja2VkIHZpcnRxdWV1ZS4KCgo+ ICt9Owo+ICsKPiArc3RydWN0IHZkdXNlX2Rldl9jb25maWdfZGF0YSB7Cj4gKwlfX3UzMiBvZmZz ZXQ7IC8qIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgY29uZmlnIHNwYWNlICovCj4gKwlf X3UzMiBsZW47IC8qIHRoZSBsZW5ndGggdG8gcmVhZC93cml0ZSAqLwo+ICsJX191OCBkYXRhW1ZE VVNFX0NPTkZJR19EQVRBX0xFTl07IC8qIGRhdGEgYnVmZmVyIHVzZWQgdG8gcmVhZC93cml0ZSAq LwoKCk5vdGUgdGhhdCBzaW5jZSBWRFVTRV9DT05GSUdfREFUQV9MRU4gaXMgcGFydCBvZiB1QVBJ IGl0IG1lYW5zIHdlIGNhbiAKbm90IGNoYW5nZSBpdCBpbiB0aGUgZnV0dXJlLgoKU28gdGhpcyBt aWdodCBzdWZmY2llbnQgZm9yIGZ1dHVyZSBmZWF0dXJlcyBvciBhbGwgdHlwZSBvZiB2aXJ0aW8g ZGV2aWNlcy4KCgo+ICt9Owo+ICsKPiArc3RydWN0IHZkdXNlX2lvdmFfcmFuZ2Ugewo+ICsJX191 NjQgc3RhcnQ7IC8qIHN0YXJ0IG9mIHRoZSBJT1ZBIHJhbmdlICovCj4gKwlfX3U2NCBsYXN0OyAv KiBlbmQgb2YgdGhlIElPVkEgcmFuZ2UgKi8KPiArfTsKPiArCj4gK3N0cnVjdCB2ZHVzZV9mZWF0 dXJlcyB7Cj4gKwlfX3U2NCBmZWF0dXJlczsgLyogdmlydGlvIGZlYXR1cmVzICovCj4gK307Cj4g Kwo+ICtzdHJ1Y3QgdmR1c2Vfc3RhdHVzIHsKPiArCV9fdTggc3RhdHVzOyAvKiBkZXZpY2Ugc3Rh dHVzICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZGV2X3JlcXVlc3Qgewo+ICsJX191MzIg dHlwZTsgLyogcmVxdWVzdCB0eXBlICovCj4gKwlfX3UzMiByZXF1ZXN0X2lkOyAvKiByZXF1ZXN0 IGlkICovCj4gKwlfX3UzMiByZXNlcnZlZFsyXTsgLyogZm9yIGZ1dHVyZSB1c2UgKi8KPiArCXVu aW9uIHsKPiArCQlzdHJ1Y3QgdmR1c2VfdnFfbnVtIHZxX251bTsgLyogdmlydHF1ZXVlIG51bSAq Lwo+ICsJCXN0cnVjdCB2ZHVzZV92cV9hZGRyIHZxX2FkZHI7IC8qIHZpcnRxdWV1ZSBhZGRyZXNz ICovCj4gKwkJc3RydWN0IHZkdXNlX3ZxX3JlYWR5IHZxX3JlYWR5OyAvKiB2aXJ0cXVldWUgcmVh ZHkgc3RhdHVzICovCj4gKwkJc3RydWN0IHZkdXNlX3ZxX3N0YXRlIHZxX3N0YXRlOyAvKiB2aXJ0 cXVldWUgc3RhdGUgKi8KPiArCQlzdHJ1Y3QgdmR1c2VfZGV2X2NvbmZpZ19kYXRhIGNvbmZpZzsg LyogdmlydGlvIGRldmljZSBjb25maWcgc3BhY2UgKi8KPiArCQlzdHJ1Y3QgdmR1c2VfaW92YV9y YW5nZSBpb3ZhOyAvKiBpb3ZhIHJhbmdlIGZvciB1cGRhdGluZyAqLwo+ICsJCXN0cnVjdCB2ZHVz ZV9mZWF0dXJlcyBmOyAvKiB2aXJ0aW8gZmVhdHVyZXMgKi8KPiArCQlzdHJ1Y3QgdmR1c2Vfc3Rh dHVzIHM7IC8qIGRldmljZSBzdGF0dXMgKi8KPiArCQlfX3UzMiBwYWRkaW5nWzE2XTsgLyogcGFk ZGluZyAqLwo+ICsJfTsKPiArfTsKPiArCj4gK3N0cnVjdCB2ZHVzZV9kZXZfcmVzcG9uc2Ugewo+ ICsJX191MzIgcmVxdWVzdF9pZDsgLyogY29ycmVzcG9uZGluZyByZXF1ZXN0IGlkICovCj4gKyNk ZWZpbmUgVkRVU0VfUkVRVUVTVF9PSwkweDAwCj4gKyNkZWZpbmUgVkRVU0VfUkVRVUVTVF9GQUlM RUQJMHgwMQo+ICsJX191MzIgcmVzdWx0OyAvKiB0aGUgcmVzdWx0IG9mIHJlcXVlc3QgKi8KPiAr CV9fdTMyIHJlc2VydmVkWzJdOyAvKiBmb3IgZnV0dXJlIHVzZSAqLwo+ICsJdW5pb24gewo+ICsJ CXN0cnVjdCB2ZHVzZV92cV9yZWFkeSB2cV9yZWFkeTsgLyogdmlydHF1ZXVlIHJlYWR5IHN0YXR1 cyAqLwo+ICsJCXN0cnVjdCB2ZHVzZV92cV9zdGF0ZSB2cV9zdGF0ZTsgLyogdmlydHF1ZXVlIHN0 YXRlICovCj4gKwkJc3RydWN0IHZkdXNlX2Rldl9jb25maWdfZGF0YSBjb25maWc7IC8qIHZpcnRp byBkZXZpY2UgY29uZmlnIHNwYWNlICovCj4gKwkJc3RydWN0IHZkdXNlX2ZlYXR1cmVzIGY7IC8q IHZpcnRpbyBmZWF0dXJlcyAqLwo+ICsJCXN0cnVjdCB2ZHVzZV9zdGF0dXMgczsgLyogZGV2aWNl IHN0YXR1cyAqLwo+ICsJCV9fdTMyIHBhZGRpbmdbMTZdOyAvKiBwYWRkaW5nICovCgoKU28gaXQg bG9va3MgdG8gbWUgdGhpcyBwYWRkaW5nIGRvZXNuJ3Qgd29yayBzaW5jZSB2ZHVzZV9kZXZfY29u ZmlnX2RhdGEgCmlzIGxhcmdlciB0aGFuIGl0LgoKCj4gKwl9Owo+ICt9Owo+ICsKPiArLyogaW9j dGxzICovCj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZGV2X2NvbmZpZyB7Cj4gKwljaGFyIG5hbWVbVkRV U0VfTkFNRV9NQVhdOyAvKiB2ZHVzZSBkZXZpY2UgbmFtZSAqLwo+ICsJX191MzIgdmVuZG9yX2lk OyAvKiB2aXJ0aW8gdmVuZG9yIGlkICovCj4gKwlfX3UzMiBkZXZpY2VfaWQ7IC8qIHZpcnRpbyBk ZXZpY2UgaWQgKi8KPiArCV9fdTY0IGJvdW5jZV9zaXplOyAvKiBib3VuY2UgYnVmZmVyIHNpemUg Zm9yIGlvbW11ICovCj4gKwlfX3UxNiB2cV9udW07IC8qIHRoZSBudW1iZXIgb2YgdmlydHF1ZXVl cyAqLwo+ICsJX191MTYgdnFfc2l6ZV9tYXg7IC8qIHRoZSBtYXggc2l6ZSBvZiB2aXJ0cXVldWUg Ki8KPiArCV9fdTMyIHZxX2FsaWduOyAvKiB0aGUgYWxsb2NhdGlvbiBhbGlnbm1lbnQgb2Ygdmly dHF1ZXVlJ3MgbWV0YWRhdGEgKi8KPiArCV9fdTMyIHJlc2VydmVkWzhdOyAvKiBmb3IgZnV0dXJl IHVzZSAqLwoKCklzIHRoZXJlIGEgaG9sZSBiZWZvcmUgcmVzZXJ2ZWQ/CgoKPiArfTsKPiArCj4g K3N0cnVjdCB2ZHVzZV9pb3RsYl9lbnRyeSB7Cj4gKwlfX3U2NCBvZmZzZXQ7IC8qIHRoZSBtbWFw IG9mZnNldCBvbiBmZCAqLwo+ICsJX191NjQgc3RhcnQ7IC8qIHN0YXJ0IG9mIHRoZSBJT1ZBIHJh bmdlICovCj4gKwlfX3U2NCBsYXN0OyAvKiBsYXN0IG9mIHRoZSBJT1ZBIHJhbmdlICovCj4gKyNk ZWZpbmUgVkRVU0VfQUNDRVNTX1JPIDB4MQo+ICsjZGVmaW5lIFZEVVNFX0FDQ0VTU19XTyAweDIK PiArI2RlZmluZSBWRFVTRV9BQ0NFU1NfUlcgMHgzCj4gKwlfX3U4IHBlcm07IC8qIGFjY2VzcyBw ZXJtaXNzaW9uIG9mIHRoaXMgcmFuZ2UgKi8KPiArfTsKPiArCj4gK3N0cnVjdCB2ZHVzZV92cV9l dmVudGZkIHsKPiArCV9fdTMyIGluZGV4OyAvKiB2aXJ0cXVldWUgaW5kZXggKi8KPiArI2RlZmlu ZSBWRFVTRV9FVkVOVEZEX0RFQVNTSUdOIC0xCj4gKwlpbnQgZmQ7IC8qIGV2ZW50ZmQsIC0xIG1l YW5zIGRlLWFzc2lnbmluZyB0aGUgZXZlbnRmZCAqLwo+ICt9Owo+ICsKPiArI2RlZmluZSBWRFVT RV9CQVNFCTB4ODEKPiArCj4gKy8qIEdldCB0aGUgdmVyc2lvbiBvZiBWRFVTRSBBUEkuIFRoaXMg aXMgdXNlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbiAqLwo+ICsjZGVmaW5lIFZEVVNFX0dFVF9BUElf VkVSU0lPTglfSU8oVkRVU0VfQkFTRSwgMHgwMCkKPiArCj4gKy8qIFNldCB0aGUgdmVyc2lvbiBv ZiBWRFVTRSBBUEkuICovCj4gKyNkZWZpbmUgVkRVU0VfU0VUX0FQSV9WRVJTSU9OCV9JTyhWRFVT RV9CQVNFLCAweDAxKQo+ICsKPiArLyogQ3JlYXRlIGEgdmR1c2UgZGV2aWNlIHdoaWNoIGlzIHJl cHJlc2VudGVkIGJ5IGEgY2hhciBkZXZpY2UgKC9kZXYvdmR1c2UvPG5hbWU+KSAqLwo+ICsjZGVm aW5lIFZEVVNFX0NSRUFURV9ERVYJX0lPVyhWRFVTRV9CQVNFLCAweDAyLCBzdHJ1Y3QgdmR1c2Vf ZGV2X2NvbmZpZykKPiArCj4gKy8qIERlc3Ryb3kgYSB2ZHVzZSBkZXZpY2UuIE1ha2Ugc3VyZSB0 aGVyZSBhcmUgbm8gcmVmZXJlbmNlcyB0byB0aGUgY2hhciBkZXZpY2UgKi8KPiArI2RlZmluZSBW RFVTRV9ERVNUUk9ZX0RFVglfSU9XKFZEVVNFX0JBU0UsIDB4MDMsIGNoYXJbVkRVU0VfTkFNRV9N QVhdKQo+ICsKPiArLyoKPiArICogR2V0IGEgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlyc3Qg b3ZlcmxhcHBlZCBpb3ZhIHJlZ2lvbiwKPiArICogLUVJTlZBTCBtZWFucyB0aGUgaW92YSByZWdp b24gZG9lc24ndCBleGlzdC4KPiArICovCj4gKyNkZWZpbmUgVkRVU0VfSU9UTEJfR0VUX0ZECV9J T1dSKFZEVVNFX0JBU0UsIDB4MDQsIHN0cnVjdCB2ZHVzZV9pb3RsYl9lbnRyeSkKPiArCj4gKy8q IFNldHVwIGFuIGV2ZW50ZmQgdG8gcmVjZWl2ZSBraWNrIGZvciB2aXJ0cXVldWUgKi8KPiArI2Rl ZmluZSBWRFVTRV9WUV9TRVRVUF9LSUNLRkQJX0lPVyhWRFVTRV9CQVNFLCAweDA1LCBzdHJ1Y3Qg dmR1c2VfdnFfZXZlbnRmZCkKPiArCj4gKy8qIEluamVjdCBhbiBpbnRlcnJ1cHQgZm9yIHNwZWNp ZmljIHZpcnRxdWV1ZSAqLwo+ICsjZGVmaW5lIFZEVVNFX0lOSkVDVF9WUV9JUlEJX0lPKFZEVVNF X0JBU0UsIDB4MDYpCgoKTWlzc2luZyBwYXJhbWV0ZXI/CgpUaGFua3MKCgo+ICsKPiArLyogSW5q ZWN0IGEgY29uZmlnIGludGVycnVwdCAqLwo+ICsjZGVmaW5lIFZEVVNFX0lOSkVDVF9DT05GSUdf SVJRCV9JTyhWRFVTRV9CQVNFLCAweDA3KQo+ICsKPiArI2VuZGlmIC8qIF9VQVBJX1ZEVVNFX0hf ICovCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmly dHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5k YXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3ZpcnR1YWxpemF0aW9u