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=-14.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 7BDFDC433DB for ; Wed, 27 Jan 2021 11:33:45 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 830E02075B for ; Wed, 27 Jan 2021 11:33:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 830E02075B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ite.com.tw Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=z56CixwOcZxMm9xI95NjE3dnzqMAjf0Eiq4TDhk7LME=; b=LaahH8KcKd2Br7O0mCKB7EuhM 5IjiSzlWRWAuGaifKxUqCDajLPTyDRt2xyyVKTkWFsGNa2G8woR1hpFzXTsbxIE5oLUl+EVJRpMkS 4C9F+TJvHQGJIvmWJzaAmpcGZsB9QFGr0N17JVyWHpbiwia8RDerLWTje8xcoR1gW3zzlyVWws9Be p9bkgOp7E1GnlvrB3B+r5VWC0Bh6YAwEH05cp/Gs1r06SJfWRDPTFaL7hbcxi6PNtclS38ZiOARgr tD2ZDY14Q+jhIHTFMv3XvlMUgBQKN89+iEHSdH4xV7UUOiVmesZtNbkAfI5/0lLFGWhDlc8zYNHm7 M0RCNLeCw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4j4b-0000Jw-Eq; Wed, 27 Jan 2021 11:33:21 +0000 Received: from 60-251-196-230.hinet-ip.hinet.net ([60.251.196.230] helo=ironport.ite.com.tw) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4j4U-0000HI-22; Wed, 27 Jan 2021 11:33:18 +0000 IronPort-SDR: VLpGmYriooVbQ9ah5bWU1vxPQ8Iki1abRDr0kgkJ0fdFJodgb2SeykFj7QBivOX78eE7QCQXhi c+ssEJ3D0nbQ== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 27 Jan 2021 19:33:06 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 10RBX0AO044428; Wed, 27 Jan 2021 19:33:00 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Wed, 27 Jan 2021 19:33:00 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f]) by CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f%22]) with mapi id 15.01.1713.004; Wed, 27 Jan 2021 19:33:00 +0800 From: To: Subject: RE: [PATCH v6] drm/bridge: add it6505 driver Thread-Topic: [PATCH v6] drm/bridge: add it6505 driver Thread-Index: AQHW8K4BrayroTBoaEiI4pwts9P7Xao7XhKQ Date: Wed, 27 Jan 2021 11:33:00 +0000 Message-ID: <0379d150a2144a79af415bcf6680d80b@ite.com.tw> References: <20201208105808.78029-1-allen.chen@ite.com.tw> In-Reply-To: Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.104] x-tm-snts-smtp: 52DC703E65883D1A9C7DC8F28C1D8471F8BD2409D29FE51E02B124C85E6129AE2000:8 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 10RBX0AO044428 X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kenneth.Hung@ite.com.tw, jitao.shi@mediatek.com, narmstrong@baylibre.com, yllin@google.com, Jau-Chih.Tseng@ite.com.tw, jernej.skrabec@siol.net, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, airlied@linux.ie, Hermes.Wu@ite.com.tw, linux-mediatek@lists.infradead.org, Laurent.pinchart@ideasonboard.com, pihsun@chromium.org, matthias.bgg@gmail.com, linux-arm-kernel@lists.infradead.org, jonas@kwiboo.se Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkgQW5kcnplag0KDQpJIHdpbGwgZml4ZWQgdGhlc2UgYW5kIHVwc3RyZWFtLg0KDQpUaGFua3Mg Zm9yIHlvdXIgY29tbWVudC4NCg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTog QW5kcnplaiBIYWpkYSBbbWFpbHRvOmEuaGFqZGFAc2Ftc3VuZy5jb21dIA0KU2VudDogRnJpZGF5 LCBKYW51YXJ5IDIyLCAyMDIxIDc6MDIgUE0NClRvOiBBbGxlbiBDaGVuICjpmbPmn4/lrocpDQpD YzogS2VubmV0aCBIdW5nICjmtKrlrrblgKspOyBKaXRhbyBTaGk7IEphdS1DaGloIFRzZW5nICjm m77mmK3mmbopOyBZaWx1biBMaW47IERhdmlkIEFpcmxpZTsgTmVpbCBBcm1zdHJvbmc7IEplcm5l aiBTa3JhYmVjOyBvcGVuIGxpc3Q6RFJNIERSSVZFUlM7IG9wZW4gbGlzdDsgSGVybWVzIFd1ICjl kLPkvbPlro8pOyBtb2RlcmF0ZWQgbGlzdDpBUk0vTWVkaWF0ZWsgU29DIHN1cHBvcnQ7IExhdXJl bnQgUGluY2hhcnQ7IFBpLUhzdW4gU2hpaDsgTWF0dGhpYXMgQnJ1Z2dlcjsgbW9kZXJhdGVkIGxp c3Q6QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0OyBKb25hcyBLYXJsbWFuDQpTdWJqZWN0OiBSZTog W1BBVENIIHY2XSBkcm0vYnJpZGdlOiBhZGQgaXQ2NTA1IGRyaXZlcg0KDQpIaSBBbGxlbiwNCg0K U29ycnkgZm9yIGxvbmcgZGVsYXkuDQoNClcgZG5pdSAwOC4xMi4yMDIwIG/CoDExOjU4LCBhbGxl biBwaXN6ZToNCj4gVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBpVEUgSVQ2NTA1Lg0KPiBUaGlz IGRldmljZSBjYW4gY29udmVydCBEUEkgc2lnbmFsIHRvIERQIG91dHB1dC4NCj4NCj4gRnJvbTog QWxsZW4gQ2hlbiA8YWxsZW4uY2hlbkBpdGUuY29tLnR3Pg0KPiBTaWduZWQtb2ZmLWJ5OiBKaXRh byBTaGkgPGppdGFvLnNoaUBtZWRpYXRlay5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IFBpLUhzdW4g U2hpaCA8cGloc3VuQGNocm9taXVtLm9yZz4NCj4gU2lnbmVkLW9mZi1ieTogWWlsdW4gTGluIDx5 bGxpbkBnb29nbGUuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBIZXJtZXMgV3UgPGhlcm1lcy53dUBp dGUuY29tLnR3Pg0KPiBTaWduZWQtb2ZmLWJ5OiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5j b20udHc+DQo+IC0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgIHwg ICAgNyArDQo+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgfCAgICAxICsN Cj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYyB8IDMzNDMgKysrKysrKysr KysrKysrKysrKysrKysrKysrDQo+ICAgMyBmaWxlcyBjaGFuZ2VkLCAzMzUxIGluc2VydGlvbnMo KykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2 NTA1LmMNCj4NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KPiBpbmRleCBlNDExMGQ2Y2E3YjNjLi4y NWQzNGQ3MTk2MDA0IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnDQo+IEBAIC03NCw2ICs3 NCwxMyBAQCBjb25maWcgRFJNX0xPTlRJVU1fTFQ5NjExVVhDDQo+ICAgCSAgSERNSSBzaWduYWxz DQo+ICAgCSAgUGxlYXNlIHNheSBZIGlmIHlvdSBoYXZlIHN1Y2ggaGFyZHdhcmUuDQo+ICAgDQo+ ICtjb25maWcgRFJNX0lURV9JVDY1MDUNCj4gKwl0cmlzdGF0ZSAiSVRFIElUNjUwNSBEaXNwbGF5 UG9ydCBicmlkZ2UiDQo+ICsJZGVwZW5kcyBvbiBPRg0KPiArCXNlbGVjdCBEUk1fS01TX0hFTFBF Ug0KPiArCWhlbHANCj4gKwkgIElURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIGNoaXAgZHJp dmVyLg0KPiArDQo+ICAgY29uZmlnIERSTV9MVkRTX0NPREVDDQo+ICAgCXRyaXN0YXRlICJUcmFu c3BhcmVudCBMVkRTIGVuY29kZXJzIGFuZCBkZWNvZGVycyBzdXBwb3J0Ig0KPiAgIAlkZXBlbmRz IG9uIE9GDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQ0KPiBpbmRleCA4NmU3YWNjNzZmOGQ2Li4y YjJmOGYwYjViMGZhIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gQEAgLTQsNiAr NCw3IEBAIG9iai0kKENPTkZJR19EUk1fQ0hST05URUxfQ0g3MDMzKSArPSBjaHJvbnRlbC1jaDcw MzMubw0KPiAgIG9iai0kKENPTkZJR19EUk1fRElTUExBWV9DT05ORUNUT1IpICs9IGRpc3BsYXkt Y29ubmVjdG9yLm8NCj4gICBvYmotJChDT05GSUdfRFJNX0xPTlRJVU1fTFQ5NjExKSArPSBsb250 aXVtLWx0OTYxMS5vDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9MT05USVVNX0xUOTYxMVVYQykgKz0g bG9udGl1bS1sdDk2MTF1eGMubw0KPiArb2JqLSQoQ09ORklHX0RSTV9JVEVfSVQ2NTA1KSArPSBp dGUtaXQ2NTA1Lm8NCg0KDQpQbGVhc2Uga2VlcCBhbHBoYWJldGljIG9yZGVyLg0KDQoNCj4gICBv YmotJChDT05GSUdfRFJNX0xWRFNfQ09ERUMpICs9IGx2ZHMtY29kZWMubw0KPiAgIG9iai0kKENP TkZJR19EUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVykgKz0gbWVnYWNoaXBzLXN0 ZHB4eHh4LWdlLWI4NTB2My1mdy5vDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9OWFBfUFROMzQ2MCkg Kz0gbnhwLXB0bjM0NjAubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9p dGUtaXQ2NTA1LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAwLi41ZTc2NzE5YTUxYTRhDQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1 LmMNCj4gQEAgLTAsMCArMSwzMzQzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog KEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpDQo+ICsvKg0KPiArICogQ29weXJpZ2h0IChj KSAyMDIwLCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAq Lw0KPiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGNy eXB0by9oYXNoLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4N Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0 Yy5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxk cm0vZHJtX2RwX2hlbHBlci5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPg0KPiArI2lu Y2x1ZGUgPGRybS9kcm1faGRjcC5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4NCj4g KyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPg0KPiArDQo+ICsjaW5jbHVkZSA8c291 bmQvaGRtaS1jb2RlYy5oPg0KPiArDQo+ICsjZGVmaW5lIFJFR19JQ19WRVIgMHgwNA0KPiArDQo+ ICsjZGVmaW5lIFJFR19SRVNFVF9DVFJMIDB4MDUNCj4gKyNkZWZpbmUgVklERU9fUkVTRVQgQklU KDApDQo+ICsjZGVmaW5lIEFVRElPX1JFU0VUIEJJVCgxKQ0KPiArI2RlZmluZSBBTExfTE9HSUNf UkVTRVQgQklUKDIpDQo+ICsjZGVmaW5lIEFVWF9SRVNFVCBCSVQoMykNCj4gKyNkZWZpbmUgSERD UF9SRVNFVCBCSVQoNCkNCj4gKw0KPiArI2RlZmluZSBJTlRfU1RBVFVTXzAxIDB4MDYNCj4gKyNk ZWZpbmUgSU5UX01BU0tfMDEgMHgwOQ0KPiArI2RlZmluZSBJTlRfSFBEX0NIQU5HRSBCSVQoMCkN Cj4gKyNkZWZpbmUgSU5UX1JFQ0VJVkVfSFBEX0lSUSBCSVQoMSkNCj4gKyNkZWZpbmUgSU5UX1ND RFRfQ0hBTkdFIEJJVCgyKQ0KPiArI2RlZmluZSBJTlRfSERDUF9GQUlMIEJJVCgzKQ0KPiArI2Rl ZmluZSBJTlRfSERDUF9ET05FIEJJVCg0KQ0KPiArDQo+ICsjZGVmaW5lIElOVF9TVEFUVVNfMDIg MHgwNw0KPiArI2RlZmluZSBJTlRfTUFTS18wMiAweDBBDQo+ICsjZGVmaW5lIElOVF9BVVhfQ01E X0ZBSUwgQklUKDApDQo+ICsjZGVmaW5lIElOVF9IRENQX0tTVl9DSEVDSyBCSVQoMSkNCj4gKyNk ZWZpbmUgSU5UX0FVRElPX0ZJRk9fRVJST1IgQklUKDIpDQo+ICsNCj4gKyNkZWZpbmUgSU5UX1NU QVRVU18wMyAweDA4DQo+ICsjZGVmaW5lIElOVF9NQVNLXzAzIDB4MEINCj4gKyNkZWZpbmUgSU5U X0xJTktfVFJBSU5fRkFJTCBCSVQoNCkNCj4gKyNkZWZpbmUgSU5UX1ZJRF9GSUZPX0VSUk9SIEJJ VCg1KQ0KPiArI2RlZmluZSBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxPVyBCSVQoNykNCj4gKw0K PiArI2RlZmluZSBSRUdfU1lTVEVNX1NUUyAweDBEDQo+ICsjZGVmaW5lIElOVF9TVFMgQklUKDAp DQo+ICsjZGVmaW5lIEhQRF9TVFMgQklUKDEpDQo+ICsjZGVmaW5lIFZJREVPX1NUQiBCSVQoMikN Cj4gKw0KPiArI2RlZmluZSBSRUdfTElOS19UUkFJTl9TVFMgMHgwRQ0KPiArI2RlZmluZSBMSU5L X1NUQVRFX0NSIEJJVCgyKQ0KPiArI2RlZmluZSBMSU5LX1NUQVRFX0VRIEJJVCgzKQ0KPiArI2Rl ZmluZSBMSU5LX1NUQVRFX05PUlAgQklUKDQpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0JBTktfU0VM IDB4MEYNCj4gKyNkZWZpbmUgUkVHX0NMS19DVFJMMCAweDEwDQo+ICsjZGVmaW5lIE1fUENMS19E RUxBWSAweDAzDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVWF9PUFQgMHgxMQ0KPiArI2RlZmluZSBB VVhfQVVUT19SU1QgQklUKDApDQo+ICsjZGVmaW5lIEFVWF9GSVhfRlJFUSBCSVQoMykNCj4gKw0K PiArI2RlZmluZSBSRUdfREFUQV9DVFJMMCAweDEyDQo+ICsjZGVmaW5lIFZJREVPX0xBVENIX0VE R0UgQklUKDQpDQo+ICsjZGVmaW5lIEVOQUJMRV9QQ0xLX0NPVU5URVIgQklUKDcpDQo+ICsNCj4g KyNkZWZpbmUgUkVHX1BDTEtfQ09VTlRFUl9WQUxVRSAweDEzDQo+ICsNCj4gKyNkZWZpbmUgUkVH XzUwMV9GSUZPX0NUUkwgMHgxNQ0KPiArI2RlZmluZSBSU1RfNTAxX0ZJRk8gQklUKDEpDQo+ICsN Cj4gKyNkZWZpbmUgUkVHX1RSQUlOX0NUUkwwIDB4MTYNCj4gKyNkZWZpbmUgRk9SQ0VfTEJSIEJJ VCgwKQ0KPiArI2RlZmluZSBMQU5FX0NPVU5UX01BU0sgMHgwNg0KPiArI2RlZmluZSBMQU5FX1NX QVAgQklUKDMpDQo+ICsjZGVmaW5lIFNQUkVBRF9BTVBfNSBCSVQoNCkNCj4gKyNkZWZpbmUgRk9S Q0VfQ1JfRE9ORSBCSVQoNSkNCj4gKyNkZWZpbmUgRk9SQ0VfRVFfRE9ORSBCSVQoNikNCj4gKw0K PiArI2RlZmluZSBSRUdfVFJBSU5fQ1RSTDEgMHgxNw0KPiArI2RlZmluZSBBVVRPX1RSQUlOIEJJ VCgwKQ0KPiArI2RlZmluZSBNQU5VQUxfVFJBSU4gQklUKDEpDQo+ICsjZGVmaW5lIEZPUkNFX1JF VFJBSU4gQklUKDIpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVWF9DVFJMIDB4MjMNCj4gKyNkZWZp bmUgQ0xSX0VESURfRklGTyBCSVQoMCkNCj4gKyNkZWZpbmUgQVVYX1VTRVJfTU9ERSBCSVQoMSkN Cj4gKyNkZWZpbmUgQVVYX05PX1NFR01FTlRfV1IgQklUKDYpDQo+ICsjZGVmaW5lIEFVWF9FTl9G SUZPX1JFQUQgQklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVWF9BRFJfMF83IDB4MjQNCj4g KyNkZWZpbmUgUkVHX0FVWF9BRFJfOF8xNSAweDI1DQo+ICsjZGVmaW5lIFJFR19BVVhfQURSXzE2 XzE5IDB4MjYNCj4gKyNkZWZpbmUgUkVHX0FVWF9PVVRfREFUQTAgMHgyNw0KPiArDQo+ICsjZGVm aW5lIFJFR19BVVhfQ01EX1JFUSAweDJCDQo+ICsjZGVmaW5lIEFVWF9CVVNZIEJJVCg1KQ0KPiAr DQo+ICsjZGVmaW5lIFJFR19BVVhfREFUQV8wXzcgMHgyQw0KPiArI2RlZmluZSBSRUdfQVVYX0RB VEFfOF8xNSAweDJEDQo+ICsjZGVmaW5lIFJFR19BVVhfREFUQV8xNl8yMyAweDJFDQo+ICsjZGVm aW5lIFJFR19BVVhfREFUQV8yNF8zMSAweDJGDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVWF9EQVRB X0ZJRk8gMHgyRg0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhfRVJST1JfU1RTIDB4OUYNCj4gKyNk ZWZpbmUgTV9BVVhfUkVRX0ZBSUwgMHgwMw0KPiArDQo+ICsjZGVmaW5lIFJFR19IRENQX0NUUkwx IDB4MzgNCj4gKyNkZWZpbmUgSERDUF9DUF9FTkFCTEUgQklUKDApDQo+ICsNCj4gKyNkZWZpbmUg UkVHX0hEQ1BfVFJJR0dFUiAweDM5DQo+ICsjZGVmaW5lIEhEQ1BfVFJJR0dFUl9TVEFSVCAgQklU KDApDQo+ICsjZGVmaW5lIEhEQ1BfVFJJR0dFUl9DUElSUSAgQklUKDEpDQo+ICsjZGVmaW5lIEhE Q1BfVFJJR0dFUl9LU1ZfRE9ORSAgQklUKDQpDQo+ICsjZGVmaW5lIEhEQ1BfVFJJR0dFUl9LU1Zf RkFJTCBCSVQoNSkNCj4gKw0KPiArI2RlZmluZSBSRUdfSERDUF9DVFJMMiAweDNBDQo+ICsjZGVm aW5lIEhEQ1BfQU5fU0VMIEJJVCgwKQ0KPiArI2RlZmluZSBIRENQX0FOX0dFTiBCSVQoMSkNCj4g KyNkZWZpbmUgSERDUF9IV19IUERJUlFfQUNUIEJJVCgyKQ0KPiArI2RlZmluZSBIRENQX0VOX00w X1JFQUQgQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX00wXzBfNyAweDRDDQo+ICsjZGVmaW5l IFJFR19BTl8wXzcgMHg0Qw0KPiArI2RlZmluZSBSRUdfU1BfQ1RSTDAgMHg1OA0KPiArI2RlZmlu ZSBSRUdfSVBfQ1RSTDEgMHg1OQ0KPiArI2RlZmluZSBSRUdfSVBfQ1RSTDIgMHg1QQ0KPiArDQo+ ICsjZGVmaW5lIFJFR19MSU5LX0RSViAweDVDDQo+ICsjZGVmaW5lIERSVl9IUyBCSVQoMSkNCj4g Kw0KPiArI2RlZmluZSBSRUdfRFJWX0xOX0RBVEFfU0VMIDB4NUQNCj4gKw0KPiArI2RlZmluZSBS RUdfQVVYIDB4NUUNCj4gKw0KPiArI2RlZmluZSBSRUdfVklEX0JVU19DVFJMMCAweDYwDQo+ICsj ZGVmaW5lIElOX0REUiBCSVQoMikNCj4gKyNkZWZpbmUgRERSX0NEICgweDAxIDw8IDYpDQo+ICsN Cj4gKyNkZWZpbmUgUkVHX1ZJRF9CVVNfQ1RSTDEgMHg2MQ0KPiArI2RlZmluZSBUWF9GSUZPX1JF U0VUIEJJVCgxKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9DVFJMIDB4QTANCj4gKyNkZWZp bmUgSU5QVVRfSFNZTkNfUE9MIEJJVCgwKQ0KPiArI2RlZmluZSBJTlBVVF9WU1lOQ19QT0wgQklU KDIpDQo+ICsjZGVmaW5lIElOUFVUX0lOVEVSTEFDRUQgQklUKDQpDQo+ICsNCj4gKyNkZWZpbmUg UkVHX0lOUFVUX0hUT1RBTCAweEExDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJU IDB4QTMNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJVkVfV0lEVEggMHhBNQ0KPiArI2RlZmlu ZSBSRUdfSU5QVVRfSEZST05UX1BPUkNIIDB4QTcNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX0hTWU5D X1dJRFRIIDB4QTkNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZUT1RBTCAweEFCDQo+ICsjZGVmaW5l IFJFR19JTlBVVF9WQUNUSVZFX1NUQVJUIDB4QUQNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZBQ1RJ VkVfV0lEVEggMHhBRg0KPiArI2RlZmluZSBSRUdfSU5QVVRfVkZST05UX1BPUkNIIDB4QjENCj4g KyNkZWZpbmUgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIIDB4QjMNCj4gKw0KPiArI2RlZmluZSBSRUdf QVVESU9fU1JDX0NUUkwgMHhCOA0KPiArI2RlZmluZSBNX0FVRElPX0kyU19FTiAweDBGDQo+ICsj ZGVmaW5lIEVOX0kyUzAgQklUKDApDQo+ICsjZGVmaW5lIEVOX0kyUzEgQklUKDEpDQo+ICsjZGVm aW5lIEVOX0kyUzIgQklUKDIpDQo+ICsjZGVmaW5lIEVOX0kyUzMgQklUKDMpDQo+ICsjZGVmaW5l IEFVRElPX0ZJRk9fUkVTRVQgQklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVRElPX0ZNVCAw eEI5DQo+ICsjZGVmaW5lIFJFR19BVURJT19GSUZPX1NFTCAweEJBDQo+ICsNCj4gKyNkZWZpbmUg UkVHX0FVRElPX0NUUkwwIDB4QkINCj4gKyNkZWZpbmUgQVVESU9fRlVMTF9QS1QgQklUKDQpDQo+ ICsjZGVmaW5lIEFVRElPXzE2Ql9CT1VORCBCSVQoNSkNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVE SU9fQ1RSTDEgMHhCQw0KPiArI2RlZmluZSBSRUdfQVVESU9fSU5QVVRfRlJFUSAweEJFDQo+ICsN Cj4gKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFMwIDB4QkYNCj4gKyNkZWZpbmUgUkVHX0lFQzk1OF9T VFMxIDB4QzANCj4gKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFMyIDB4QzENCj4gKyNkZWZpbmUgUkVH X0lFQzk1OF9TVFMzIDB4QzINCj4gKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFM0IDB4QzMNCj4gKw0K PiArI2RlZmluZSBSRUdfSFBEX0lSUV9USU1FIDB4QzkNCj4gKyNkZWZpbmUgUkVHX0FVWF9ERUJV R19NT0RFIDB4Q0ENCj4gKyNkZWZpbmUgUkVHX0FVWF9PUFQyIDB4Q0INCj4gKyNkZWZpbmUgUkVH X0hEQ1BfT1BUIDB4Q0UNCj4gKyNkZWZpbmUgUkVHX1VTRVJfRFJWX1BSRSAweENGDQo+ICsNCj4g KyNkZWZpbmUgUkVHX0RBVEFfTVVURV9DVFJMIDB4RDMNCj4gKyNkZWZpbmUgRU5BQkxFX0VOSEFO Q0VEX0ZSQU1FIEJJVCgwKQ0KPiArI2RlZmluZSBFTkFCTEVfQVVUT19WSURFT19GSUZPX1JFU0VU IEJJVCgxKQ0KPiArI2RlZmluZSBFTl9WSURfTVVURSBCSVQoNCkNCj4gKyNkZWZpbmUgRU5fQVVE X01VVEUgQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1RJTUVfU1RNUF9DVFJMIDB4RDQNCj4g KyNkZWZpbmUgRU5fRU5IQU5DRV9WSURfU1RNUCBCSVQoMCkNCj4gKyNkZWZpbmUgRU5fRU5IQU5D RV9BVURfU1RNUCBCSVQoMikNCj4gKyNkZWZpbmUgTV9TVEFNUF9TVEVQIDB4MzANCj4gKyNkZWZp bmUgRU5fU1NDX0dBVCBCSVQoNikNCj4gKw0KPiArI2RlZmluZSBSRUdfSU5GT0ZSQU1FX0NUUkwg MHhFOA0KPiArI2RlZmluZSBFTl9BVklfUEtUIEJJVCgwKQ0KPiArI2RlZmluZSBFTl9BVURfUEtU IEJJVCgxKQ0KPiArI2RlZmluZSBFTl9NUEdfUEtUIEJJVCgyKQ0KPiArI2RlZmluZSBFTl9HRU5f UEtUIEJJVCgzKQ0KPiArI2RlZmluZSBFTl9WSURfVElNRV9TVE1QIEJJVCg0KQ0KPiArI2RlZmlu ZSBFTl9BVURfVElNRV9TVE1QIEJJVCg1KQ0KPiArI2RlZmluZSBFTl9WSURfQ1RSTF9QS1QgKEVO X0FWSV9QS1QgfCBFTl9WSURfVElNRV9TVE1QKQ0KPiArI2RlZmluZSBFTl9BVURfQ1RSTF9QS1Qg KEVOX0FVRF9QS1QgfCBFTl9BVURfVElNRV9TVE1QKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVURJ T19OXzBfNyAweERFDQo+ICsjZGVmaW5lIFJFR19BVURJT19OXzhfMTUgMHhERg0KPiArI2RlZmlu ZSBSRUdfQVVESU9fTl8xNl8yMyAweEUwDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RC MSAweEU5DQo+ICsjZGVmaW5lIFJFR19BVklfSU5GT19EQjIgMHhFQQ0KPiArI2RlZmluZSBSRUdf QVZJX0lORk9fREIzIDB4RUINCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCNCAweEVDDQo+ICsj ZGVmaW5lIFJFR19BVklfSU5GT19EQjUgMHhFRA0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fU1VN IDB4RjYNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMSAweEY3DQo+ICsjZGVm aW5lIFJFR19BVURfSU5GT0ZSQU1fREIyIDB4RjgNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJB TV9EQjMgMHhGOQ0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCNCAweEZBDQo+ICsjZGVm aW5lIFJFR19BVURfSU5GT0ZSQU1fU1VNIDB4RkINCj4gKw0KPiArLyogdGhlIGZvbGxvd2luZyBz aXggcmVnaXN0ZXJzIGFyZSBpbiBiYW5rMSAqLw0KPiArI2RlZmluZSBSRUdfRFJWXzBfREJfODAw X01WIDB4N0UNCj4gKyNkZWZpbmUgUkVHX1BSRV8wX0RCXzgwMF9NViAweDdGDQo+ICsjZGVmaW5l IFJFR19QUkVfM1A1X0RCXzgwMF9NViAweDgxDQo+ICsjZGVmaW5lIFJFR19TU0NfQ1RSTDAgMHg4 OA0KPiArI2RlZmluZSBSRUdfU1NDX0NUUkwxIDB4ODkNCj4gKyNkZWZpbmUgUkVHX1NTQ19DVFJM MiAweDhBDQo+ICsNCj4gKyNkZWZpbmUgUkJSIERQX0xJTktfQldfMV82Mg0KPiArI2RlZmluZSBI QlIgRFBfTElOS19CV18yXzcNCj4gKyNkZWZpbmUgSEJSMiBEUF9MSU5LX0JXXzVfNA0KPiArI2Rl ZmluZSBIQlIzIERQX0xJTktfQldfOF8xDQo+ICsNCj4gKy8qIFZlbmRvciBvcHRpb24gKi8NCj4g KyNkZWZpbmUgSERDUF9ERVNJUkVEIDENCj4gKyNkZWZpbmUgTUFYX0xBTkVfQ09VTlQgNA0KPiAr I2RlZmluZSBNQVhfTElOS19SQVRFIEhCUg0KPiArI2RlZmluZSBBVVRPX1RSQUlOX1JFVFJZIDMN Cj4gKyNkZWZpbmUgTUFYX0hEQ1BfRE9XTl9TVFJFQU1fQ09VTlQgMTANCj4gKyNkZWZpbmUgTUFY X0NSX0xFVkVMIDB4MDMNCj4gKyNkZWZpbmUgTUFYX0VRX0xFVkVMIDB4MDMNCj4gKyNkZWZpbmUg QVVYX1dBSVRfVElNRU9VVF9NUyAxNQ0KPiArI2RlZmluZSBBVVhfRklGT19NQVhfU0laRSAzMg0K PiArI2RlZmluZSBQSVhFTF9DTEtfREVMQVkgMQ0KPiArI2RlZmluZSBQSVhFTF9DTEtfSU5WRVJT RSAwDQo+ICsjZGVmaW5lIEFESlVTVF9QSEFTRV9USFJFU0hPTEQgODAwMDANCj4gKyNkZWZpbmUg RFBJX1BJWEVMX0NMS19NQVggOTUwMDANCj4gKyNkZWZpbmUgSERDUF9TSEExX0ZJRk9fTEVOIChN QVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCAqIDUgKyAxMCkNCj4gKyNkZWZpbmUgREVGQVVMVF9Q V1JfT04gMA0KPiArI2RlZmluZSBERUZBVUxUX0RSVl9IT0xEIDANCj4gKw0KPiArI2RlZmluZSBB VURJT19TRUxFQ1QgSTJTDQo+ICsjZGVmaW5lIEFVRElPX1RZUEUgTFBDTQ0KPiArI2RlZmluZSBB VURJT19TQU1QTEVfUkFURSBTQU1QTEVfUkFURV80OEsNCkJldHRlciBkcm9wIHRoaXMgZGVmaW5l IGFuZCB1c2UgU0FNUExFX1JBVEVfNDhLIGRpcmVjdGx5Lg0KPiArI2RlZmluZSBBVURJT19DSEFO TkVMX0NPVU5UIDINCj4gKw0KPiArLyoNCj4gKyAqIDA6IFN0YW5kYXJkIEkyUw0KPiArICogMTog MzJiaXQgSTJTDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX0lOUFVUX0ZPUk1BVCAxDQoNCg0KTWF5 YmUgaXQgd291bGQgYmUgbW9yZSB1c2FibGUgdG8gdXNlIGRlZmluZXMgYXMgZm9sbG93czoNCg0K KyNkZWZpbmUgSTJTX0lOUFVUX0ZPUk1BVF9TVEFOREFSRCAwDQoNCisjZGVmaW5lIEkyU19JTlBV VF9GT1JNQVRfMzJCSVQgMQ0KDQorI2RlZmluZSBJMlNfSU5QVVRfRk9STUFUX0RFRkFVTFQgSTJT X0lOUFVUX0ZPUk1BVF8zMkJJVA0KDQpMZXNzIGxpbmVzLCBubyBjb21tZW50cywgc2VsZi1kb2N1 bWVudGluZyBjb2RlLiBFdmVuIG1vcmUgSSBndWVzcyB5b3UgY2FuIGRyb3AgSTJTX0lOUFVUX0ZP Uk1BVF9ERUZBVUxUIGFuZCB1c2UgSTJTX0lOUFVUX0ZPUk1BVF8zMkJJVCBpbnN0ZWFkLg0KDQo+ ICsNCj4gKy8qDQo+ICsgKiAwOiBMZWZ0LWp1c3RpZmllZA0KPiArICogMTogUmlnaHQtanVzdGlm aWVkDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX0pVU1RJRklFRCAwDQo+ICsNCj4gKy8qDQo+ICsg KiAwOiBEYXRhIGRlbGF5IDFUIGNvcnJlc3BvbmQgdG8gV1MNCj4gKyAqIDE6IE5vIGRhdGEgZGVs YXkgY29ycmVzcG9uZCB0byBXUw0KPiArICovDQo+ICsjZGVmaW5lIEkyU19EQVRBX0RFTEFZIDAN Cj4gKw0KPiArLyoNCj4gKyAqIDA6IExlZnQgY2hhbm5lbA0KPiArICogMTogUmlnaHQgY2hhbm5l bA0KPiArICovDQo+ICsjZGVmaW5lIEkyU19XU19DSEFOTkVMIDANCj4gKw0KPiArLyoNCj4gKyAq IDA6IE1TQiBzaGlmdCBmaXJzdA0KPiArICogMTogTFNCIHNoaWZ0IGZpcnN0DQo+ICsgKi8NCj4g KyNkZWZpbmUgSTJTX0RBVEFfU0VRVUVOQ0UgMA0KDQpkaXR0byBmb3IgYWJvdmUgNCBkZWZpbmVz DQoNCg0KPiArDQo+ICsvKg0KPiArICogQXVkaW8gU2FtcGxlIFdvcmQgTGVuZ3RoDQo+ICsgKiBX T1JEX0xFTkdUSF8xNkJJVA0KPiArICogV09SRF9MRU5HVEhfMThCSVQNCj4gKyAqIFdPUkRfTEVO R1RIXzIwQklUDQo+ICsgKiBXT1JEX0xFTkdUSF8yNEJJVA0KPiArICovDQo+ICsjZGVmaW5lIEFV RElPX1dPUkRfTEVOR1RIIFdPUkRfTEVOR1RIXzI0QklUDQoNCmRpdHRvLCBtb3Jlb3ZlciB1c2lu ZyBzeW1ib2xzIG5vdCB5ZXQgZGVmaW5lZCBpcyBjb25mdXNpbmcvdWdseSwgZXZlbiBpZiANCnRo ZSAocHJlKWNvbXBpbGVyIGFsbG93cyBpdC4NCg0KPiArDQo+ICtlbnVtIGF1eF9jbWRfdHlwZSB7 DQo+ICsJQ01EX0FVWF9OQVRJVkVfUkVBRCA9IDB4MCwNCj4gKwlDTURfQVVYX05BVElWRV9XUklU RSA9IDB4NSwNCj4gKwlDTURfQVVYX0kyQ19FRElEX1JFQUQgPSAweEIsDQo+ICt9Ow0KPiArDQo+ ICtlbnVtIGF1eF9jbWRfcmVwbHkgew0KPiArCVJFUExZX0FDSywNCj4gKwlSRVBMWV9OQUNLLA0K PiArCVJFUExZX0RFRkVSLA0KPiArfTsNCj4gKw0KPiArZW51bSBsaW5rX3RyYWluX3N0YXR1cyB7 DQo+ICsJTElOS19JRExFLA0KPiArCUxJTktfQlVTWSwNCj4gKwlMSU5LX09LLA0KPiArfTsNCj4g Kw0KPiArZW51bSBoZGNwX3N0YXRlIHsNCj4gKwlIRENQX0FVVEhfSURMRSwNCj4gKwlIRENQX0FV VEhfR09JTkcsDQo+ICsJSERDUF9BVVRIX0RPTkUsDQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgaXQ2 NTA1X3BsYXRmb3JtX2RhdGEgew0KPiArCXN0cnVjdCByZWd1bGF0b3IgKnB3cjE4Ow0KPiArCXN0 cnVjdCByZWd1bGF0b3IgKm92ZGQ7DQo+ICsJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2RfcmVzZXQ7 DQo+ICt9Ow0KPiArDQo+ICtlbnVtIGl0NjUwNV9hdWRpb19zZWxlY3Qgew0KPiArCUkyUyA9IDAs DQo+ICsJU1BESUYsDQo+ICt9Ow0KPiArDQo+ICtlbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0 ZSB7DQo+ICsJU0FNUExFX1JBVEVfMjRLID0gMHg2LA0KPiArCVNBTVBMRV9SQVRFXzMySyA9IDB4 MywNCj4gKwlTQU1QTEVfUkFURV80OEsgPSAweDIsDQo+ICsJU0FNUExFX1JBVEVfOTZLID0gMHhB LA0KPiArCVNBTVBMRV9SQVRFXzE5MksgPSAweEUsDQo+ICsJU0FNUExFX1JBVEVfNDRfMUsgPSAw eDAsDQo+ICsJU0FNUExFX1JBVEVfODhfMksgPSAweDgsDQo+ICsJU0FNUExFX1JBVEVfMTc2XzRL ID0gMHhDLA0KPiArfTsNCj4gKw0KPiArZW51bSBpdDY1MDVfYXVkaW9fdHlwZSB7DQo+ICsJTFBD TSA9IDAsDQo+ICsJTkxQQ00sDQo+ICsJRFNTLA0KPiArfTsNCj4gKw0KPiArZW51bSBpdDY1MDVf YXVkaW9fd29yZF9sZW5ndGggew0KPiArCVdPUkRfTEVOR1RIXzE2QklUID0gMCwNCj4gKwlXT1JE X0xFTkdUSF8xOEJJVCwNCj4gKwlXT1JEX0xFTkdUSF8yMEJJVCwNCj4gKwlXT1JEX0xFTkdUSF8y NEJJVCwNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSB7DQo+ICsJZW51 bSBpdDY1MDVfYXVkaW9fc2VsZWN0IHNlbGVjdDsNCj4gKwllbnVtIGl0NjUwNV9hdWRpb19zYW1w bGVfcmF0ZSBzYW1wbGVfcmF0ZTsNCj4gKwllbnVtIGl0NjUwNV9hdWRpb190eXBlIHR5cGU7DQo+ ICsJZW51bSBpdDY1MDVfYXVkaW9fd29yZF9sZW5ndGggd29yZF9sZW5ndGg7DQo+ICsJdTggY2hh bm5lbF9jb3VudDsNCj4gKwl1OCBpMnNfaW5wdXRfZm9ybWF0Ow0KPiArCXU4IGkyc19qdXN0aWZp ZWQ7DQo+ICsJdTggaTJzX2RhdGFfZGVsYXk7DQo+ICsJdTggaTJzX3dzX2NoYW5uZWw7DQo+ICsJ dTggaTJzX2RhdGFfc2VxdWVuY2U7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgaXQ2NTA1X2F1ZGlv X3NhbXBsZV9yYXRlX21hcCB7DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgcmF0 ZTsNCj4gKwlpbnQgc2FtcGxlX3JhdGVfdmFsdWU7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgaXQ2 NTA1X2RybV9kcF9saW5rIHsNCj4gKwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uOw0KPiArCXVuc2ln bmVkIGludCByYXRlOw0KPiArCXVuc2lnbmVkIGludCBudW1fbGFuZXM7DQo+ICsJdW5zaWduZWQg bG9uZyBjYXBhYmlsaXRpZXM7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgaXQ2NTA1IHsNCj4gKwlz dHJ1Y3QgZHJtX2RwX2F1eCBhdXg7DQo+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOw0KPiAr CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7DQo+ICsJc3RydWN0IGVkaWQgKmVkaWQ7DQo+ICsJ c3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOw0KPiArCXN0cnVjdCBpdDY1MDVfZHJtX2Rw X2xpbmsgbGluazsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgcGRhdGE7DQo+ICsJ c3RydWN0IG11dGV4IGV4dGNvbl9sb2NrOw0KPiArCXN0cnVjdCBtdXRleCBtb2RlX2xvY2s7DQo+ ICsJc3RydWN0IG11dGV4IGF1eF9sb2NrOw0KPiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsNCj4g KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSB2aWRlb19pbmZvOw0KPiArCXN0cnVjdCBub3RpZmll cl9ibG9jayBldmVudF9uYjsNCj4gKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOw0KPiArCXN0 cnVjdCB3b3JrX3N0cnVjdCBleHRjb25fd3E7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1 cyBjb25uZWN0b3Jfc3RhdHVzOw0KPiArCWVudW0gbGlua190cmFpbl9zdGF0dXMgbGlua19zdGF0 ZTsNCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua193b3JrczsNCj4gKwl1OCBkcGNkW0RQX1JF Q0VJVkVSX0NBUF9TSVpFXTsNCj4gKwl1OCBsYW5lX2NvdW50Ow0KPiArCXU4IGxpbmtfcmF0ZV9i d19jb2RlOw0KPiArCXU4IHNpbmtfY291bnQ7DQo+ICsJYm9vbCBzdGVwX3RyYWluOw0KPiArCWJv b2wgYnJhbmNoX2RldmljZTsNCj4gKwlib29sIGVuYWJsZV9zc2M7DQo+ICsJYm9vbCBsYW5lX3N3 YXBfZGlzYWJsZWQ7DQo+ICsJYm9vbCBsYW5lX3N3YXA7DQo+ICsJYm9vbCBwb3dlcmVkOw0KPiAr CXUzMiBhZmVfc2V0dGluZzsNCj4gKwllbnVtIGhkY3Bfc3RhdGUgaGRjcF9zdGF0dXM7DQo+ICsJ c3RydWN0IGRlbGF5ZWRfd29yayBoZGNwX3dvcms7DQo+ICsJc3RydWN0IHdvcmtfc3RydWN0IGhk Y3Bfd2FpdF9rc3ZfbGlzdDsNCj4gKwlzdHJ1Y3QgY29tcGxldGlvbiB3YWl0X2VkaWRfY29tcGxl dGU7DQo+ICsJdTggYXV0b190cmFpbl9yZXRyeTsNCj4gKwlib29sIGhkY3BfZGVzaXJlZDsNCj4g Kwlib29sIGlzX3JlcGVhdGVyOw0KPiArCXU4IGhkY3BfZG93bl9zdHJlYW1fY291bnQ7DQo+ICsJ dTggYmtzdnNbRFJNX0hEQ1BfS1NWX0xFTl07DQo+ICsJdTggc2hhMV9pbnB1dFtIRENQX1NIQTFf RklGT19MRU5dOw0KPiArCWJvb2wgZW5hYmxlX2VuaGFuY2VkX2ZyYW1lOw0KPiArCWhkbWlfY29k ZWNfcGx1Z2dlZF9jYiBwbHVnZ2VkX2NiOw0KPiArCXN0cnVjdCBkZXZpY2UgKmNvZGVjX2RldjsN Cj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRlbGF5ZWRfYXVkaW87DQo+ICsJc3RydWN0IGl0NjUw NV9hdWRpb19kYXRhIGF1ZGlvOw0KPiArDQo+ICsJLyogaXQ2NTA1IGRyaXZlciBob2xkIG9wdGlv biAqLw0KPiArCWJvb2wgZW5hYmxlX2Rydl9ob2xkOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0 NjUwNV9zdGVwX3RyYWluX3BhcmEgew0KPiArCXU4IHZvbHRhZ2Vfc3dpbmdbTUFYX0xBTkVfQ09V TlRdOw0KPiArCXU4IHByZV9lbXBoYXNpc1tNQVhfTEFORV9DT1VOVF07DQo+ICt9Ow0KPiArDQo+ ICsvKg0KPiArICogVmVuZG9yIG9wdGlvbiBhZmUgc2V0dGluZ3MgZm9yIGRpZmZlcmVudCBwbGF0 Zm9ybXMNCj4gKyAqIDA6IHdpdGhvdXQgRlBDIGNhYmxlDQo+ICsgKiAxOiB3aXRoIEZQQyBjYWJs ZQ0KPiArICovDQo+ICsNCj4gK3N0YXRpYyB1OCBjb25zdCBhZmVfc2V0dGluZ190YWJsZVtdWzNd ID0gew0KPiArCXsweDgyLCAweDAwLCAweDQ1fSwNCj4gKwl7MHg5MywgMHgyQSwgMHg4NX0NCj4g K307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRl X21hcCBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbXSA9IHsNCj4gKwl7U0FNUExFX1JBVEVfMjRLLCAy NDAwMH0sDQo+ICsJe1NBTVBMRV9SQVRFXzMySywgMzIwMDB9LA0KPiArCXtTQU1QTEVfUkFURV80 OEssIDQ4MDAwfSwNCj4gKwl7U0FNUExFX1JBVEVfOTZLLCA5NjAwMH0sDQo+ICsJe1NBTVBMRV9S QVRFXzE5MkssIDE5MjAwMH0sDQo+ICsJe1NBTVBMRV9SQVRFXzQ0XzFLLCA0NDEwMH0sDQo+ICsJ e1NBTVBMRV9SQVRFXzg4XzJLLCA4ODIwMH0sDQo+ICsJe1NBTVBMRV9SQVRFXzE3Nl80SywgMTc2 NDAwfSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGl0 NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzW10gPSB7DQo+ICsJeyAucmFuZ2VfbWluID0gMCwg LnJhbmdlX21heCA9IDB4RkYgfSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg cmVnbWFwX2FjY2Vzc190YWJsZSBpdDY1MDVfYnJpZGdlX3ZvbGF0aWxlX3RhYmxlID0gew0KPiAr CS55ZXNfcmFuZ2VzID0gaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsDQo+ICsJLm5feWVz X3JhbmdlcyA9IEFSUkFZX1NJWkUoaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLA0KPiAr fTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGl0NjUwNV9yZWdt YXBfY29uZmlnID0gew0KPiArCS5yZWdfYml0cyA9IDgsDQo+ICsJLnZhbF9iaXRzID0gOCwNCj4g Kwkudm9sYXRpbGVfdGFibGUgPSAmaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV90YWJsZSwNCj4gKwku Y2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IGl0 NjUwNV9yZWFkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZ19hZGRyKQ0K PiArew0KPiArCXVuc2lnbmVkIGludCB2YWx1ZTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJZXJyID0gcmVnbWFw X3JlYWQoaXQ2NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCAmdmFsdWUpOw0KPiArCWlmIChlcnIgPCAw KSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAicmVhZCBmYWlsZWQgcmVnWzB4JXhdIGVycjog JWQiLCByZWdfYWRkciwNCj4gKwkJCSAgICAgIGVycik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIHZhbHVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUw NV93cml0ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWdfYWRkciwNCj4g KwkJICAgICAgdW5zaWduZWQgaW50IHJlZ192YWwpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9 IHJlZ21hcF93cml0ZShpdDY1MDUtPnJlZ21hcCwgcmVnX2FkZHIsIHJlZ192YWwpOw0KPiArDQo+ ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJ3cml0ZSBmYWlsZWQg cmVnWzB4JXhdID0gMHgleCBlcnIgPSAlZCIsDQo+ICsJCQkgICAgICByZWdfYWRkciwgcmVnX3Zh bCwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfc2V0X2JpdHMoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArCQkJIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25l ZCBpbnQgdmFsdWUpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9IHJlZ21hcF91cGRhdGVfYml0 cyhpdDY1MDUtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWx1ZSk7DQo+ICsJaWYgKGVyciA8IDApIHsN Cj4gKwkJRFJNX0RFVl9FUlJPUigNCj4gKwkJCWRldiwgIndyaXRlIHJlZ1sweCV4XSA9IDB4JXgg bWFzayA9IDB4JXggZmFpbGVkIGVyciAlZCIsDQo+ICsJCQlyZWcsIHZhbHVlLCBtYXNrLCBlcnIp Ow0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZGVidWdfcHJpbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArCQkJICAgICBjb25zdCBjaGFyICpwcmVmaXgpDQo+ICt7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50 IHZhbDsNCj4gKw0KPiArCWlmIChsaWtlbHkoIShfX2RybV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIp KSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJdmFsID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCByZWcp Ow0KPiArCWlmICh2YWwgPCAwKQ0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyBy ZWdbJTAyeF0gcmVhZCBlcnJvciAoJWQpIiwNCj4gKwkJCQkgICAgIHByZWZpeCwgcmVnLCB2YWwp Ow0KPiArCWVsc2UNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgcmVnWyUwMnhd ID0gMHglMDJ4IiwgcHJlZml4LCByZWcsDQo+ICsJCQkJICAgICB2YWwpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGl0NjUwNV9kcGNkX3JlYWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNp Z25lZCBsb25nIG9mZnNldCkNCj4gK3sNCj4gKwl1OCB2YWx1ZTsNCj4gKwlpbnQgcmV0Ow0KPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJcmV0 ID0gZHJtX2RwX2RwY2RfcmVhZGIoJml0NjUwNS0+YXV4LCBvZmZzZXQsICZ2YWx1ZSk7DQo+ICsJ aWYgKHJldCA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJEUENEIHJlYWQgZmFpbGVk IFsweCVseF0gcmV0OiAlZCIsIG9mZnNldCwNCj4gKwkJCSAgICAgIHJldCk7DQo+ICsJCXJldHVy biByZXQ7DQo+ICsJfQ0KPiArCXJldHVybiB2YWx1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBpdDY1MDVfZHBjZF93cml0ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGxvbmcg b2Zmc2V0LA0KPiArCQkJICAgICB1bnNpZ25lZCBsb25nIGRhdGFpbikNCj4gK3sNCj4gKwlpbnQg cmV0Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiAr DQo+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCBkYXRh aW4pOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRFBDRCB3 cml0ZSBmYWlsZWQgWzB4JWx4XSByZXQ6ICVkIiwgb2Zmc2V0LA0KPiArCQkJICAgICAgcmV0KTsN Cj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X2dldF9kcGNkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgaW50IG9mZnNl dCwgdTggKmRwY2QsIGludCBudW0pDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9kcF9k cGNkX3JlYWQoJml0NjUwNS0+YXV4LCBvZmZzZXQsIGRwY2QsIG51bSk7DQo+ICsNCj4gKwlpZiAo cmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgInJldCA9ICVkIERQQ0RbMHgleF0gPSAweCUqcGgiLCByZXQsIG9mZnNldCwNCj4gKwkJ CSAgICAgbnVtLCBkcGNkKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBpdDY1MDVfZHVtcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJdW5z aWduZWQgaW50IGksIGo7DQo+ICsJdTggcmVnc1sxNl07DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDw9IDB4ZmY7 IGkgKz0gMTYpIHsNCj4gKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspDQo+ICsJCQlyZWdzW2pd ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBpICsgaik7DQo+ICsNCj4gKwkJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiWzB4JTAyeF0gPSAlMTZwaCIsIGksIHJlZ3MpOw0KPiArCX0NCj4gK30NCj4g Kw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoc3RydWN0IGl0NjUw NSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCByZWdfMGQ7DQo+ICsNCj4gKwlyZWdfMGQgPSBpdDY1 MDVfcmVhZChpdDY1MDUsIFJFR19TWVNURU1fU1RTKTsNCj4gKw0KPiArCWlmIChyZWdfMGQgPCAw KQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlyZXR1cm4gISEocmVnXzBkICYgSFBEX1NU Uyk7DQoNCg0KRHJvcCAhISwgY29tcGlsZXIgd2lsbCBwZXJmb3JtIGNvcnJlY3QgY29udmVyc2lv bi4NCg0KDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWRfd29yZChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcpDQo+ICt7DQo+ICsJaW50IHZhbDAsIHZh bDE7DQo+ICsNCj4gKwl2YWwwID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCByZWcpOw0KPiArCWlmICh2 YWwwIDwgMCkNCj4gKwkJcmV0dXJuIHZhbDA7DQo+ICsNCj4gKwl2YWwxID0gaXQ2NTA1X3JlYWQo aXQ2NTA1LCByZWcgKyAxKTsNCj4gKwlpZiAodmFsMSA8IDApDQo+ICsJCXJldHVybiB2YWwxOw0K PiArDQo+ICsJcmV0dXJuICh2YWwxIDw8IDgpIHwgdmFsMDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHZvaWQgaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50 IGhzeW5jX3BvbCwgdnN5bmNfcG9sLCBpbnRlcmxhY2VkOw0KPiArCWludCBodG90YWwsIGhkZXMs IGhkZXcsIGhmcGgsIGhzeW5jdzsNCj4gKwlpbnQgdnRvdGFsLCB2ZGVzLCB2ZGV3LCB2ZnBoLCB2 c3luY3c7DQo+ICsJaW50IHJkZGF0YSwgaSwgcGNsaywgc3VtID0gMDsNCj4gKw0KPiArCXVzbGVl cF9yYW5nZSgxMDAwMCwgMTUwMDApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5L X1NFTCwgMHgwMCk7DQo+ICsJcmRkYXRhID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfSU5QVVRf Q1RSTCk7DQo+ICsJaHN5bmNfcG9sID0gcmRkYXRhICYgSU5QVVRfSFNZTkNfUE9MOw0KPiArCXZz eW5jX3BvbCA9IChyZGRhdGEgJiBJTlBVVF9WU1lOQ19QT0wpID4+IDI7DQo+ICsJaW50ZXJsYWNl ZCA9IChyZGRhdGEgJiBJTlBVVF9JTlRFUkxBQ0VEKSA+PiA0Ow0KPiArDQo+ICsJaHRvdGFsID0g aXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IVE9UQUwpICYgMHgxRkZGOw0KPiAr CWhkZXMgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX0hBQ1RJVkVfU1RBUlQp ICYgMHgxRkZGOw0KPiArCWhkZXcgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVU X0hBQ1RJVkVfV0lEVEgpICYgMHgxRkZGOw0KPiArCWhmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0 NjUwNSwgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCkgJiAweDFGRkY7DQo+ICsJaHN5bmN3ID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IU1lOQ19XSURUSCkgJiAweDFGRkY7DQo+ ICsNCj4gKwl2dG90YWwgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZUT1RB TCkgJiAweEZGRjsNCj4gKwl2ZGVzID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBV VF9WQUNUSVZFX1NUQVJUKSAmIDB4RkZGOw0KPiArCXZkZXcgPSBpdDY1MDVfcmVhZF93b3JkKGl0 NjUwNSwgUkVHX0lOUFVUX1ZBQ1RJVkVfV0lEVEgpICYgMHhGRkY7DQo+ICsJdmZwaCA9IGl0NjUw NV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkZST05UX1BPUkNIKSAmIDB4RkZGOw0KPiAr CXZzeW5jdyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVlNZTkNfV0lEVEgp ICYgMHhGRkY7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoc3luY19wb2w6 JWQsIHZzeW5jX3BvbDolZCwgaW50ZXJsYWNlZDolZCIsDQo+ICsJCQkgICAgIGhzeW5jX3BvbCwg dnN5bmNfcG9sLCBpbnRlcmxhY2VkKTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJo YWN0aXZlX3N0YXJ0OiVkLCB2YWN0aXZlX3N0YXJ0OiVkIiwNCj4gKwkJCSAgICAgaGRlcywgdmRl cyk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgew0KPiArCQlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BDTEtfQ09VTlRFUiwNCj4gKwkJ CQlFTkFCTEVfUENMS19DT1VOVEVSKTsNCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7 DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkwwLCBFTkFCTEVfUENM S19DT1VOVEVSLA0KPiArCQkJCTB4MDApOw0KPiArCQlyZGRhdGEgPSBpdDY1MDVfcmVhZF93b3Jk KGl0NjUwNSwgUkVHX1BDTEtfQ09VTlRFUl9WQUxVRSkgJg0KPiArCQkJIDB4RkZGOw0KPiArDQo+ ICsJCXN1bSArPSByZGRhdGE7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHN1bSA9PSAwKSB7DQo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImNhbGMgdmlkZW8gdGltaW5nIGVycm9yIik7DQo+ ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlzdW0gLz0gMTA7DQo+ICsJcGNsayA9IDEzNTAw ICogMjA0OCAvIHN1bTsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sgPSBwY2xrOw0KPiAr CWl0NjUwNS0+dmlkZW9faW5mby5oZGlzcGxheSA9IGhkZXc7DQo+ICsJaXQ2NTA1LT52aWRlb19p bmZvLmhzeW5jX3N0YXJ0ID0gaGRldyArIGhmcGg7DQo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLmhz eW5jX2VuZCA9IGhkZXcgKyBoZnBoICsgaHN5bmN3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5o dG90YWwgPSBodG90YWw7DQo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZkaXNwbGF5ID0gdmRldzsN Cj4gKwlpdDY1MDUtPnZpZGVvX2luZm8udnN5bmNfc3RhcnQgPSB2ZGV3ICsgdmZwaDsNCj4gKwlp dDY1MDUtPnZpZGVvX2luZm8udnN5bmNfZW5kID0gdmRldyArIHZmcGggKyB2c3luY3c7DQo+ICsJ aXQ2NTA1LT52aWRlb19pbmZvLnZ0b3RhbCA9IHZ0b3RhbDsNCj4gKw0KPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgRFJNX01PREVfRk1ULA0KPiArCQkJICAgICBEUk1fTU9ERV9BUkcoJml0 NjUwNS0+dmlkZW9faW5mbykpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcm1f ZHBfbGlua19wcm9iZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KPiArCQkJCSAgICBzdHJ1Y3Qg aXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQ0KPiArew0KPiArCXU4IHZhbHVlc1szXTsNCj4gKwlp bnQgZXJyOw0KPiArDQo+ICsJbWVtc2V0KGxpbmssIDAsIHNpemVvZigqbGluaykpOw0KPiArDQo+ ICsJZXJyID0gZHJtX2RwX2RwY2RfcmVhZChhdXgsIERQX0RQQ0RfUkVWLCB2YWx1ZXMsIHNpemVv Zih2YWx1ZXMpKTsNCj4gKwlpZiAoZXJyIDwgMCkNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiAr CWxpbmstPnJldmlzaW9uID0gdmFsdWVzWzBdOw0KPiArCWxpbmstPnJhdGUgPSBkcm1fZHBfYndf Y29kZV90b19saW5rX3JhdGUodmFsdWVzWzFdKTsNCj4gKwlsaW5rLT5udW1fbGFuZXMgPSB2YWx1 ZXNbMl0gJiBEUF9NQVhfTEFORV9DT1VOVF9NQVNLOw0KPiArDQo+ICsJaWYgKHZhbHVlc1syXSAm IERQX0VOSEFOQ0VEX0ZSQU1FX0NBUCkNCj4gKwkJbGluay0+Y2FwYWJpbGl0aWVzID0gMTsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcm1fZHBf bGlua19wb3dlcl91cChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KPiArCQkJCSAgICAgICBzdHJ1 Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQ0KPiArew0KPiArCXU4IHZhbHVlOw0KPiArCWlu dCBlcnI7DQo+ICsNCj4gKwkvKiBEUF9TRVRfUE9XRVIgcmVnaXN0ZXIgaXMgb25seSBhdmFpbGFi bGUgb24gRFBDRCB2MS4xIGFuZCBsYXRlciAqLw0KPiArCWlmIChsaW5rLT5yZXZpc2lvbiA8IDB4 MTEpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJZXJyID0gZHJtX2RwX2RwY2RfcmVhZGIoYXV4 LCBEUF9TRVRfUE9XRVIsICZ2YWx1ZSk7DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCXJldHVybiBl cnI7DQo+ICsNCj4gKwl2YWx1ZSAmPSB+RFBfU0VUX1BPV0VSX01BU0s7DQo+ICsJdmFsdWUgfD0g RFBfU0VUX1BPV0VSX0QwOw0KPiArDQo+ICsJZXJyID0gZHJtX2RwX2RwY2Rfd3JpdGViKGF1eCwg RFBfU0VUX1BPV0VSLCB2YWx1ZSk7DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCXJldHVybiBlcnI7 DQo+ICsNCj4gKwkvKg0KPiArCSAqIEFjY29yZGluZyB0byB0aGUgRFAgMS4xIHNwZWNpZmljYXRp b24sIGEgIlNpbmsgRGV2aWNlIG11c3QgZXhpdCB0aGUNCj4gKwkgKiBwb3dlciBzYXZpbmcgc3Rh dGUgd2l0aGluIDEgbXMiIChTZWN0aW9uIDIuNS4zLjEsIFRhYmxlIDUtNTIsICJTaW5rDQo+ICsJ ICogQ29udHJvbCBGaWVsZCIgKHJlZ2lzdGVyIDB4NjAwKS4NCj4gKwkgKi8NCj4gKwl1c2xlZXBf cmFuZ2UoMTAwMCwgMjAwMCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgaXQ2NTA1X2NsZWFyX2ludChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBJTlRfU1RBVFVTXzAxLCAweEZGKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBJTlRfU1RBVFVTXzAyLCAweEZGKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRf U1RBVFVTXzAzLCAweEZGKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2ludF9t YXNrX2VuYWJsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJ TlRfTUFTS18wMSwgMHgxRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDIs IDB4MDcpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAzLCAweEIwKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDEsIDB4MDApOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDAwKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHgwMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwlpbnQgcmVnY2Y7DQo+ICsNCj4gKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwg UkVHX1VTRVJfRFJWX1BSRSk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0gMHhGMCkNCj4gKwkJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHgwMCk7DQo+ ICsNCj4gKwlpZiAocmVnY2YgPT0gMHg3MCkgew0KPiArCQlpZiAoaXQ2NTA1LT5sYW5lX3N3YXAp IHsNCj4gKwkJCXN3aXRjaCAoaXQ2NTA1LT5sYW5lX2NvdW50KSB7DQo+ICsJCQljYXNlIDE6DQo+ ICsJCQljYXNlIDI6DQo+ICsJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9E QVRBX1NFTCwNCj4gKwkJCQkJCTB4MEMsIDB4MDgpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJZGVm YXVsdDoNCj4gKwkJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VM LA0KPiArCQkJCQkJMHgwQywgMHgwQyk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsJCX0g ZWxzZSB7DQo+ICsJCQlzd2l0Y2ggKGl0NjUwNS0+bGFuZV9jb3VudCkgew0KPiArCQkJY2FzZSAx Og0KPiArCQkJY2FzZSAyOg0KPiArCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZf TE5fREFUQV9TRUwsDQo+ICsJCQkJCQkweDBDLCAweDA0KTsNCj4gKwkJCQlicmVhazsNCj4gKwkJ CWRlZmF1bHQ6DQo+ICsJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRB X1NFTCwNCj4gKwkJCQkJCTB4MEMsIDB4MEMpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiAr CQl9DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5h dGlvbl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCByZWdjZjsNCj4g Kw0KPiArCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNFUl9EUlZfUFJFKTsNCj4g Kw0KPiArCWlmIChyZWdjZiA9PSAweEYwKQ0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfRFJWX0xOX0RBVEFfU0VMLCAweDgwLCAweDgwKTsNCj4gKw0KPiArCWlmIChyZWdjZiA9PSAw eDcwKQ0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLCAw eDBDLCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfcG93ZXJf b24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19MSU5LX0RSViwgMHhGMSwNCj4gKwkJCShpdDY1MDUtPmxhbmVfc3dhcCA/DQo+ICsJ CQkJIEdFTk1BU0soNywgOCAtIGl0NjUwNS0+bGFuZV9jb3VudCkgOg0KPiArCQkJCSBHRU5NQVNL KDMgKyBpdDY1MDUtPmxhbmVfY291bnQsIDQpKSB8DQo+ICsJCQkJMHgwMSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX3Bvd2VyX29mZihzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCAweEYw LCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfb2ZmKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfbGFuZV9wb3dlcl9vZmYoaXQ2NTA1 KTsNCj4gKwlpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoaXQ2NTA1KTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF90ZXJtaW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ2NmOw0KPiArDQo+ICsJcmVnY2YgPSBpdDY1MDVfcmVh ZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUpOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09IDB4RjAp DQo+ICsJCWl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29uKGl0NjUwNSk7DQo+ICsNCj4gKwlpZiAo cmVnY2YgPT0gMHg3MCkNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9E QVRBX1NFTCwgMHg4MCwgMHg4MCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9h dXhfcG93ZXJfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19BVVgsIDB4MDIsIDB4MDIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfYXV4X29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1 MDVfYXV4X3Bvd2VyX29uKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2F1eF90ZXJtaW5hdGlvbl9vbihp dDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Jlc2V0KHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgQVVYX1JFU0VULCBBVVhfUkVTRVQpOw0KPiArCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVVhfUkVTRVQsIDB4MDApOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfbG9naWMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiAr ew0KPiArCXJlZ21hcF93cml0ZShpdDY1MDUtPnJlZ21hcCwgUkVHX1JFU0VUX0NUUkwsIEFMTF9M T0dJQ19SRVNFVCk7DQo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDE1MDApOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgYm9vbCBpdDY1MDVfYXV4X29wX2ZpbmlzaGVkKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCj4gK3sNCj4gKwlpbnQgcmVnMmIgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfQ01E X1JFUSk7DQo+ICsNCj4gKwlpZiAocmVnMmIgPCAwKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsN Cj4gKwlyZXR1cm4gKHJlZzJiICYgQVVYX0JVU1kpID09IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X2F1eF93YWl0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlp bnQgc3RhdHVzOw0KPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXRpbWVvdXQgPSBqaWZmaWVz ICsgbXNlY3NfdG9famlmZmllcyhBVVhfV0FJVF9USU1FT1VUX01TKSArIDE7DQo+ICsNCj4gKwl3 aGlsZSAoIWl0NjUwNV9hdXhfb3BfZmluaXNoZWQoaXQ2NTA1KSkgew0KPiArCQlpZiAodGltZV9h ZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgew0KPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsICJUaW1l ZCBvdXQgd2FpdGluZyBBVVggdG8gZmluaXNoIik7DQo+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsN Cj4gKwkJfQ0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQo+ICsJfQ0KPiArDQo+ICsJ c3RhdHVzID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0VSUk9SX1NUUyk7DQo+ICsJaWYg KHN0YXR1cyA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVhZCBB VVggY2hhbm5lbDogJWQiLCBzdGF0dXMpOw0KPiArCQlyZXR1cm4gc3RhdHVzOw0KPiArCX0NCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4 X29wZXJhdGlvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJICAgIGVudW0gYXV4X2Nt ZF90eXBlIGNtZCwNCj4gKwkJCQkgICAgdW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIs DQo+ICsJCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGF1eF9jbWRfcmVwbHkgKnJlcGx5KQ0KPiAr ew0KPiArCWludCBpLCByZXQ7DQo+ICsJYm9vbCBhdXhfd3JpdGVfY2hlY2sgPSBmYWxzZTsNCj4g Kw0KPiArCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCj4gKwkJcmV0 dXJuIC1FSU87DQo+ICsNCj4gKwkvKiBzZXQgQVVYIHVzZXIgbW9kZSAqLw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwgQVVYX1VTRVJfTU9ERSwgQVVYX1VTRVJfTU9E RSk7DQo+ICsNCj4gK2F1eF9vcF9zdGFydDoNCj4gKwlpZiAoY21kID09IENNRF9BVVhfSTJDX0VE SURfUkVBRCkgew0KPiArCQkvKiBBVVggRURJRCBGSUZPIGhhcyBtYXggbGVuZ3RoIG9mIEFVWF9G SUZPX01BWF9TSVpFIGJ5dGVzLiAqLw0KPiArCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBB VVhfRklGT19NQVhfU0laRSk7DQo+ICsJCS8qIEVuYWJsZSBBVVggRklGTyByZWFkIGJhY2sgYW5k IGNsZWFyIEZJRk8gKi8NCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KPiArCQkJCUFVWF9F Tl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPKTsNCj4gKw0KPiArCQlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfQVVYX0NUUkwsDQo+ICsJCQkJQVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElE X0ZJRk8sDQo+ICsJCQkJQVVYX0VOX0ZJRk9fUkVBRCk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyog VGhlIERQIEFVWCB0cmFuc21pdCBidWZmZXIgaGFzIDQgYnl0ZXMuICovDQo+ICsJCXNpemUgPSBt aW5fdChzaXplX3QsIHNpemUsIDQpOw0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf QVVYX0NUUkwsIEFVWF9OT19TRUdNRU5UX1dSLA0KPiArCQkJCUFVWF9OT19TRUdNRU5UX1dSKTsN Cj4gKwl9DQo+ICsNCj4gKwkvKiBTdGFydCBBZGRyZXNzWzc6MF0gKi8NCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl8wXzcsIChhZGRyZXNzID4+IDApICYgMHhGRik7DQo+ICsJ LyogU3RhcnQgQWRkcmVzc1sxNTo4XSAqLw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19B VVhfQURSXzhfMTUsIChhZGRyZXNzID4+IDgpICYgMHhGRik7DQo+ICsJLyogV3JpdGVOdW1bMzow XStTdGFydEFkclsxOToxNl0gKi8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FE Ul8xNl8xOSwNCj4gKwkJICAgICAoKGFkZHJlc3MgPj4gMTYpICYgMHgwRikgfCAoKHNpemUgLSAx KSA8PCA0KSk7DQo+ICsNCj4gKwlpZiAoY21kID09IENNRF9BVVhfTkFUSVZFX1dSSVRFKQ0KPiAr CQlyZWdtYXBfYnVsa193cml0ZShpdDY1MDUtPnJlZ21hcCwgUkVHX0FVWF9PVVRfREFUQTAsIGJ1 ZmZlciwNCj4gKwkJCQkgIHNpemUpOw0KPiArDQo+ICsJLyogQXV4IEZpcmUgKi8NCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEsIGNtZCk7DQo+ICsNCj4gKwlyZXQgPSBp dDY1MDVfYXV4X3dhaXQoaXQ2NTA1KTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJZ290byBhdXhf b3BfZXJyOw0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0VSUk9S X1NUUyk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiAr CXN3aXRjaCAoKHJldCA+PiA2KSAmIDB4Mykgew0KPiArCWNhc2UgMDoNCj4gKwkJKnJlcGx5ID0g UkVQTFlfQUNLOw0KPiArCQlicmVhazsNCj4gKwljYXNlIDE6DQo+ICsJCSpyZXBseSA9IFJFUExZ X0RFRkVSOw0KPiArCQlyZXQgPSAtRUFHQUlOOw0KPiArCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJ Y2FzZSAyOg0KPiArCQkqcmVwbHkgPSBSRVBMWV9OQUNLOw0KPiArCQlyZXQgPSAtRUlPOw0KPiAr CQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJY2FzZSAzOg0KPiArCQlyZXQgPSAtRVRJTUVET1VUOw0K PiArCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJfQ0KPiArDQo+ICsJLyogUmVhZCBiYWNrIE5hdGl2 ZSBXcml0ZSBkYXRhICovDQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkgew0K PiArCQlhdXhfd3JpdGVfY2hlY2sgPSB0cnVlOw0KPiArCQljbWQgPSBDTURfQVVYX05BVElWRV9S RUFEOw0KPiArCQlnb3RvIGF1eF9vcF9zdGFydDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoY21kID09 IENNRF9BVVhfSTJDX0VESURfUkVBRCkgew0KPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSB7DQo+ICsJCQlyZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFUQV9GSUZPKTsN Cj4gKwkJCWlmIChyZXQgPCAwKQ0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKwkJCWJ1ZmZl cltpXSA9IHJldDsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBz aXplOyBpKyspIHsNCj4gKwkJCXJldCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9EQVRB XzBfNyArIGkpOw0KPiArCQkJaWYgKHJldCA8IDApDQo+ICsJCQkJZ290byBhdXhfb3BfZXJyOw0K PiArDQo+ICsJCQlpZiAoYXV4X3dyaXRlX2NoZWNrICYmIGJ1ZmZlcltzaXplIC0gMSAtIGldICE9 IHJldCkgew0KPiArCQkJCXJldCA9IC1FSU5WQUw7DQo+ICsJCQkJZ290byBhdXhfb3BfZXJyOw0K PiArCQkJfQ0KPiArDQo+ICsJCQlidWZmZXJbc2l6ZSAtIDEgLSBpXSA9IHJldDsNCj4gKwkJfQ0K PiArCX0NCj4gKw0KPiArCXJldCA9IGk7DQo+ICsNCj4gK2F1eF9vcF9lcnI6DQo+ICsJaWYgKGNt ZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCj4gKwkJLyogY2xlYXIgQVVYIEZJRk8gKi8N Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJMLA0KPiArCQkJCUFVWF9F Tl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBD TFJfRURJRF9GSUZPKTsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLCAweDAwKTsNCj4gKwl9 DQo+ICsNCj4gKwkvKiBMZWF2ZSBBVVggdXNlciBtb2RlICovDQo+ICsJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfVVNFUl9NT0RFLCAwKTsNCj4gKw0KPiArCXJldHVy biByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfZG9fdHJhbnNm ZXIoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KPiArCQkJCSAgICAgIGVudW0gYXV4X2NtZF90eXBl IGNtZCwNCj4gKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdTggKmJ1ZmZlciwNCj4g KwkJCQkgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkNCj4gK3sN Cj4gKwlpbnQgaSwgcmV0X3NpemUsIHJldCA9IDAsIHJlcXVlc3Rfc2l6ZTsNCj4gKw0KPiArCW11 dGV4X2xvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiArCWZvciAoaSA9IDA7IGkgPCBzaXplOyBp ICs9IDQpIHsNCj4gKwkJcmVxdWVzdF9zaXplID0gbWluKChpbnQpc2l6ZSAtIGksIDQpOw0KPiAr CQlyZXRfc2l6ZSA9IGl0NjUwNV9hdXhfb3BlcmF0aW9uKGl0NjUwNSwgY21kLCBhZGRyZXNzICsg aSwNCj4gKwkJCQkJCWJ1ZmZlciArIGksIHJlcXVlc3Rfc2l6ZSwNCj4gKwkJCQkJCXJlcGx5KTsN Cj4gKwkJaWYgKHJldF9zaXplIDwgMCkgew0KPiArCQkJcmV0ID0gcmV0X3NpemU7DQo+ICsJCQln b3RvIGF1eF9vcF9lcnI7DQo+ICsJCX0NCj4gKw0KPiArCQlyZXQgKz0gcmV0X3NpemU7DQo+ICsJ fQ0KPiArDQo+ICthdXhfb3BfZXJyOg0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5hdXhfbG9j ayk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHNzaXplX3QgaXQ2NTA1 X2F1eF90cmFuc2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LA0KPiArCQkJCSAgIHN0cnVjdCBk cm1fZHBfYXV4X21zZyAqbXNnKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNv bnRhaW5lcl9vZihhdXgsIHN0cnVjdCBpdDY1MDUsIGF1eCk7DQo+ICsJdTggY21kOw0KPiArCWJv b2wgaXNfaTJjID0gIShtc2ctPnJlcXVlc3QgJiBEUF9BVVhfTkFUSVZFX1dSSVRFKTsNCj4gKwlp bnQgcmV0Ow0KPiArCWVudW0gYXV4X2NtZF9yZXBseSByZXBseTsNCj4gKw0KPiArCS8qIElUNjUw NSBkb2Vzbid0IHN1cHBvcnQgYXJiaXRyYXJ5IEkyQyByZWFkIC8gd3JpdGUuICovDQo+ICsJaWYg KGlzX2kyYykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlzd2l0Y2ggKG1zZy0+cmVx dWVzdCkgew0KPiArCWNhc2UgRFBfQVVYX05BVElWRV9SRUFEOg0KPiArCQljbWQgPSBDTURfQVVY X05BVElWRV9SRUFEOw0KPiArCQlicmVhazsNCj4gKwljYXNlIERQX0FVWF9OQVRJVkVfV1JJVEU6 DQo+ICsJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1dSSVRFOw0KPiArCQlicmVhazsNCj4gKwlkZWZh dWx0Og0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBpdDY1MDVf YXV4X2RvX3RyYW5zZmVyKGl0NjUwNSwgY21kLCBtc2ctPmFkZHJlc3MsIG1zZy0+YnVmZmVyLA0K PiArCQkJCSAgICAgbXNnLT5zaXplLCAmcmVwbHkpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQly ZXR1cm4gcmV0Ow0KPiArDQo+ICsJc3dpdGNoIChyZXBseSkgew0KPiArCWNhc2UgUkVQTFlfQUNL Og0KPiArCQltc2ctPnJlcGx5ID0gRFBfQVVYX05BVElWRV9SRVBMWV9BQ0s7DQo+ICsJCWJyZWFr Ow0KPiArCWNhc2UgUkVQTFlfTkFDSzoNCj4gKwkJbXNnLT5yZXBseSA9IERQX0FVWF9OQVRJVkVf UkVQTFlfTkFDSzsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBSRVBMWV9ERUZFUjoNCj4gKwkJbXNn LT5yZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfREVGRVI7DQo+ICsJCWJyZWFrOw0KPiArCX0N Cj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2dl dF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICpidWYsIHVuc2lnbmVkIGludCBibG9jaywNCj4g KwkJCQkgc2l6ZV90IGxlbikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRh Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWVu dW0gYXV4X2NtZF9yZXBseSByZXBseTsNCj4gKwlpbnQgb2Zmc2V0LCByZXQsIGF1eF9yZXRyeSA9 IDEwMDsNCj4gKw0KPiArCWl0NjUwNV9hdXhfcmVzZXQoaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJibG9jayBudW1iZXIgPSAlZCIsIGJsb2NrKTsNCj4gKw0KPiArCWZv ciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgRURJRF9MRU5HVEg7KSB7DQo+ICsJCXJldCA9IGl0NjUw NV9hdXhfZG9fdHJhbnNmZXIoaXQ2NTA1LCBDTURfQVVYX0kyQ19FRElEX1JFQUQsDQo+ICsJCQkJ CSAgICAgYmxvY2sgKiBFRElEX0xFTkdUSCArIG9mZnNldCwNCj4gKwkJCQkJICAgICBidWYgKyBv ZmZzZXQsIDgsICZyZXBseSk7DQo+ICsNCj4gKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQUdB SU4pDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJCXN3aXRjaCAocmVwbHkpIHsNCj4gKwkJ Y2FzZSBSRVBMWV9BQ0s6DQo+ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJbMHglMDJ4 XTogJThwaCIsIG9mZnNldCwNCj4gKwkJCQkJICAgICBidWYgKyBvZmZzZXQpOw0KPiArCQkJb2Zm c2V0ICs9IDg7DQo+ICsJCQlhdXhfcmV0cnkgPSAxMDA7DQo+ICsJCQlicmVhazsNCj4gKwkJY2Fz ZSBSRVBMWV9OQUNLOg0KPiArCQkJcmV0dXJuIC1FSU87DQo+ICsJCWNhc2UgUkVQTFlfREVGRVI6 DQo+ICsJCQltc2xlZXAoMjApOw0KPiArCQkJaWYgKCEoLS1hdXhfcmV0cnkpKQ0KPiArCQkJCXJl dHVybiAtRUlPOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92YXJpYWJsZV9jb25maWcoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQ0KPiArew0KPiArCWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBIQlI7DQo+ICsJaXQ2 NTA1LT5sYW5lX2NvdW50ID0gTUFYX0xBTkVfQ09VTlQ7DQo+ICsJaXQ2NTA1LT5saW5rX3N0YXRl ID0gTElOS19JRExFOw0KPiArCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gSERDUF9ERVNJUkVEOw0K PiArCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7DQo+ICsJaXQ2 NTA1LT5hdWRpby5zZWxlY3QgPSBBVURJT19TRUxFQ1Q7DQo+ICsJaXQ2NTA1LT5hdWRpby5zYW1w bGVfcmF0ZSA9IEFVRElPX1NBTVBMRV9SQVRFOw0KPiArCWl0NjUwNS0+YXVkaW8uY2hhbm5lbF9j b3VudCA9IEFVRElPX0NIQU5ORUxfQ09VTlQ7DQo+ICsJaXQ2NTA1LT5hdWRpby50eXBlID0gQVVE SU9fVFlQRTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQgPSBJMlNfSU5QVVRf Rk9STUFUOw0KPiArCWl0NjUwNS0+YXVkaW8uaTJzX2p1c3RpZmllZCA9IEkyU19KVVNUSUZJRUQ7 DQo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9kZWxheSA9IEkyU19EQVRBX0RFTEFZOw0KPiAr CWl0NjUwNS0+YXVkaW8uaTJzX3dzX2NoYW5uZWwgPSBJMlNfV1NfQ0hBTk5FTDsNCj4gKwlpdDY1 MDUtPmF1ZGlvLmkyc19kYXRhX3NlcXVlbmNlID0gSTJTX0RBVEFfU0VRVUVOQ0U7DQo+ICsJaXQ2 NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IEFVRElPX1dPUkRfTEVOR1RIOw0KPiArCW1lbXNldChp dDY1MDUtPnNoYTFfaW5wdXQsIDAsIHNpemVvZihpdDY1MDUtPnNoYTFfaW5wdXQpKTsNCj4gKwlt ZW1zZXQoaXQ2NTA1LT5ia3N2cywgMCwgc2l6ZW9mKGl0NjUwNS0+YmtzdnMpKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBpdDY1MDVfc2VuZF92aWRlb19pbmZvZnJhbWUoc3RydWN0IGl0NjUw NSAqaXQ2NTA1LA0KPiArCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lICpmcmFt ZSkNCj4gK3sNCj4gKwl1OCBidWZmZXJbSERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkUgKyBIRE1J X0FWSV9JTkZPRlJBTUVfU0laRV07DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9IGhkbWlfYXZpX2luZm9m cmFtZV9wYWNrKGZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBwYWNrIEFWSSBpbmZvZnJh bWU6ICVkIiwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwllcnIgPSBp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FWSV9QS1QsIDB4 MDApOw0KPiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwllcnIgPSByZWdt YXBfYnVsa193cml0ZShpdDY1MDUtPnJlZ21hcCwgUkVHX0FWSV9JTkZPX0RCMSwNCj4gKwkJCQli dWZmZXIgKyBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRSwNCj4gKwkJCQlmcmFtZS0+bGVuZ3Ro KTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJZXJyID0gaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVklfUEtULA0KPiArCQkJ ICAgICAgRU5fQVZJX1BLVCk7DQo+ICsJaWYgKGVycikNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZ2V0X2V4dGNv bl9wcm9wZXJ0eShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4g Kwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5leHRj b24gJiYgIWl0NjUwNS0+bGFuZV9zd2FwX2Rpc2FibGVkKSB7DQo+ICsJCWVyciA9IGV4dGNvbl9n ZXRfcHJvcGVydHkoaXQ2NTA1LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KPiArCQkJCQkgIEVY VENPTl9QUk9QX1VTQl9UWVBFQ19QT0xBUklUWSwNCj4gKwkJCQkJICAmcHJvcGVydHkpOw0KPiAr CQlpZiAoZXJyKSB7DQo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwgImdldCBwcm9wZXJ0eSBmYWls ISIpOw0KPiArCQkJcmV0dXJuOw0KPiArCQl9DQo+ICsJCWl0NjUwNS0+bGFuZV9zd2FwID0gcHJv cGVydHkuaW50dmFsOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2Ns a19waGFzZV9hZGp1c3RtZW50KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkJY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0NMS19DVFJMMCwgTV9QQ0xLX0RFTEFZLA0KPiArCQltb2RlLT5jbG9jayA8 IEFESlVTVF9QSEFTRV9USFJFU0hPTEQgPyBQSVhFTF9DTEtfREVMQVkgOiAwKTsNCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgVklERU9fTEFUQ0hfRURHRSwNCj4g KwkJCVBJWEVMX0NMS19JTlZFUlNFIDw8IDQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBp dDY1MDVfaW5pdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBS RUdfQVVYX09QVCwgQVVYX0FVVE9fUlNUIHwgQVVYX0ZJWF9GUkVRKTsNCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9OT19TRUdNRU5UX1dSKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9BTl9TRUwgfCBIRENQX0hXX0hQRElS UV9BQ1QpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19WSURfQlVTX0NUUkwwLCBJTl9E RFIgfCBERFJfQ0QpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19WSURfQlVTX0NUUkwx LCAweDAxKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fQ1RSTDAsIEFVRElP XzE2Ql9CT1VORCk7DQo+ICsNCj4gKwkvKiBjaGlwIGludGVybmFsIHNldHRpbmcsIGRvbid0IG1v ZGlmeSAqLw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19IUERfSVJRX1RJTUUsIDB4RjUp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfREVCVUdfTU9ERSwgMHg0RCk7DQo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQyLCAweDE3KTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9PUFQsIDB4NjApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwNCj4gKwkJICAgICBFTl9WSURfTVVURSB8IEVOX0FVRF9N VVRFIHwgRU5BQkxFX0FVVE9fVklERU9fRklGT19SRVNFVCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLA0KPiArCQkgICAgIEVOX1NTQ19HQVQgfCBFTl9FTkhB TkNFX1ZJRF9TVE1QIHwgRU5fRU5IQU5DRV9BVURfU1RNUCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQkFOS19TRUwsIDB4MDEpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19EUlZf MF9EQl84MDBfTVYsDQo+ICsJCSAgICAgYWZlX3NldHRpbmdfdGFibGVbaXQ2NTA1LT5hZmVfc2V0 dGluZ11bMF0pOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19QUkVfMF9EQl84MDBfTVYs DQo+ICsJCSAgICAgYWZlX3NldHRpbmdfdGFibGVbaXQ2NTA1LT5hZmVfc2V0dGluZ11bMV0pOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19QUkVfM1A1X0RCXzgwMF9NViwNCj4gKwkJICAg ICBhZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9zZXR0aW5nXVsyXSk7DQo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMCwgMHg5RSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX1NTQ19DVFJMMSwgMHgxQyk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X1NTQ19DVFJMMiwgMHg0Mik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VM LCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVvX2Rpc2FibGUo c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwg MHgwMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIFZJREVP X1JFU0VULCBWSURFT19SRVNFVCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92 aWRlb19yZXNldChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVURV9DVFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUp Ow0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fVklE X0NUUkxfUEtULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRf Q1RSTCwgVklERU9fUkVTRVQsIFZJREVPX1JFU0VUKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCBSU1RfNTAxX0ZJRk8pOw0KPiAr CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR181MDFfRklGT19DVFJMLCBSU1RfNTAxX0ZJRk8s IDB4MDApOw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURF T19SRVNFVCwgMHgwMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV91cGRhdGVf dmlkZW9fcGFyYW1ldGVyKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkJICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4gK3sNCj4gKwlpdDY1MDVfY2xrX3BoYXNl X2FkanVzdG1lbnQoaXQ2NTA1LCBtb2RlKTsNCj4gKwlpdDY1MDVfdmlkZW9fZGlzYWJsZShpdDY1 MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfYXVkaW9faW5wdXQoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCByZWcwNSwgcmVnYmU7DQo+ICsNCj4gKwly ZWcwNSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwpOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgMHgwMCk7DQo+ICsJ dXNsZWVwX3JhbmdlKDMwMDAsIDQwMDApOw0KPiArCXJlZ2JlID0gaXQ2NTA1X3JlYWQoaXQ2NTA1 LCBSRUdfQVVESU9fSU5QVVRfRlJFUSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1JF U0VUX0NUUkwsIHJlZzA1KTsNCj4gKw0KPiArCXJldHVybiByZWdiZSAhPSAweEZGOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fY2hhbm5lbF9zdGF0dXMoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9y YXRlIHNhbXBsZV9yYXRlID0gaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZTsNCj4gKwl1OCBhdWRp b193b3JkX2xlbmd0aF9tYXBbXSA9IHsgMHgwMiwgMHgwNCwgMHgwMywgMHgwQiB9Ow0KPiArDQo+ ICsJLyogQ2hhbm5lbCBTdGF0dXMgKi8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVD OTU4X1NUUzAsIGl0NjUwNS0+YXVkaW8udHlwZSA8PCAxKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfSUVDOTU4X1NUUzEsIDB4MDApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJF R19JRUM5NThfU1RTMiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1 OF9TVFMzLCBzYW1wbGVfcmF0ZSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1 OF9TVFM0LCAofnNhbXBsZV9yYXRlIDw8IDQpIHwNCj4gKwkJICAgICBhdWRpb193b3JkX2xlbmd0 aF9tYXBbaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aF0pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwkvKiBJMlMgTU9ERSAqLw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJ T19GTVQsDQo+ICsJCSAgICAgKGl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPDwgNSkgfA0KPiAr CQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX3NlcXVlbmNlIDw8IDQpIHwNCj4gKwkJICAg ICAoaXQ2NTA1LT5hdWRpby5pMnNfd3NfY2hhbm5lbCA8PCAzKSB8DQo+ICsJCSAgICAgKGl0NjUw NS0+YXVkaW8uaTJzX2RhdGFfZGVsYXkgPDwgMikgfA0KPiArCQkgICAgIChpdDY1MDUtPmF1ZGlv Lmkyc19qdXN0aWZpZWQgPDwgMSkgfA0KPiArCQkgICAgIGl0NjUwNS0+YXVkaW8uaTJzX2lucHV0 X2Zvcm1hdCk7DQo+ICsJaWYgKGl0NjUwNS0+YXVkaW8uc2VsZWN0ID09IFNQRElGKSB7DQo+ICsJ CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GSUZPX1NFTCwgMHgwMCk7DQo+ICsJCS8q IDB4MzAgPSAxMjgqRlMgKi8NCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9P UFQsIDB4RjAsIDB4MzApOw0KPiArCX0gZWxzZSB7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19BVURJT19GSUZPX1NFTCwgMHhFNCk7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCAweDIwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQVVESU9fQ1RSTDEsIDB4MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfZW5hYmxlX2F1ZGlvX3NvdXJjZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ dW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZV9jb3VudDsNCj4gKw0KPiArCWF1ZGlvX3NvdXJjZV9j b3VudCA9IEJJVChESVZfUk9VTkRfVVAoaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50LCAyKSkN Cj4gKwkJCQkgLSAxOw0KPiArDQo+ICsJYXVkaW9fc291cmNlX2NvdW50IHw9IGl0NjUwNS0+YXVk aW8uc2VsZWN0IDw8IDQ7DQo+ICsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9f U1JDX0NUUkwsIGF1ZGlvX3NvdXJjZV9jb3VudCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGl0NjUwNV9lbmFibGVfYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwl1 OCBhdWRpb19pbmZvX2NhW10gPSB7IDB4MDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4MDcsIDB4MEIs IDB4MEYsIDB4MUYgfTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImluZm9m cmFtZSBjaGFubmVsX2FsbG9jYXRpb246MHglMDJ4IiwNCj4gKwkJCSAgICAgYXVkaW9faW5mb19j YVtpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgLSAxXSk7DQo+ICsNCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCMSwgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2Nv dW50DQo+ICsJCSAgICAgLSAxKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lO Rk9GUkFNX0RCMiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZP RlJBTV9EQjMsDQo+ICsJCSAgICAgYXVkaW9faW5mb19jYVtpdDY1MDUtPmF1ZGlvLmNoYW5uZWxf Y291bnQgLSAxXSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9E QjQsIDB4MDApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fU1VN LCAweDAwKTsNCj4gKw0KPiArCS8qIEVuYWJsZSBBdWRpbyBJbmZvRnJhbWUgKi8NCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwN Cj4gKwkJCUVOX0FVRF9DVFJMX1BLVCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9kaXNhYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX0FVRF9NVVRFLCBFTl9BVURf TVVURSk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBN X0FVRElPX0kyU19FTiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lO Rk9GUkFNRV9DVFJMLCBFTl9BVURfQ1RSTF9QS1QsIDB4MDApOw0KPiArCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgQVVESU9fUkVTRVQpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCj4gKwlpbnQgcmVnYmU7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJzdGFydCIpOw0KPiArCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICsNCj4gKwlp dDY1MDVfc2V0dXBfYXVkaW9fY2hhbm5lbF9zdGF0dXMoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfc2V0 dXBfYXVkaW9fZm9ybWF0KGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3VyY2Uo aXQ2NTA1KTsNCj4gKwlpdDY1MDVfZW5hYmxlX2F1ZGlvX2luZm9mcmFtZShpdDY1MDUpOw0KPiAr DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX05fMF83LCAweDAwKTsNCj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl84XzE1LCAweDgwKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl8xNl8yMywgMHgwMCk7DQo+ICsNCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVESU9fU1JDX0NUUkwsIEFVRElPX0ZJRk9fUkVTRVQsDQo+ ICsJCQlBVURJT19GSUZPX1JFU0VUKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf QVVESU9fU1JDX0NUUkwsIEFVRElPX0ZJRk9fUkVTRVQsIDB4MDApOw0KPiArCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgMHgwMCk7DQo+ICsJcmVn YmUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVURJT19JTlBVVF9GUkVRKTsNCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJyZWdiZToweCUwMnggYXVkaW8gaW5wdXQgZnM6ICVkLiVk IGtIeiIsDQo+ICsJCQkgICAgIHJlZ2JlLCA2NzUwIC8gcmVnYmUsICg2NzUwICUgcmVnYmUpICog MTAgLyByZWdiZSk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVURV9D VFJMLCBFTl9BVURfTVVURSwgMHgwMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUw NV91c2Vfc3RlcF90cmFpbl9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ aWYgKGl0NjUwNS0+bGluay5yZXZpc2lvbiA+PSAweDEyKQ0KPiArCQlyZXR1cm4gaXQ2NTA1LT5k cGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPj0gMHgwMTsNCj4gKw0KPiArCXJldHVy biB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcGFyc2VfbGlua19jYXBh YmlsaXRpZXMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXN0cnVjdCBpdDY1MDVfZHJtX2RwX2xp bmsgKmxpbmsgPSAmaXQ2NTA1LT5saW5rOw0KPiArCWludCBiY2FwczsNCj4gKw0KPiArCWlmIChp dDY1MDUtPmRwY2RbMF0gPT0gMCkgew0KPiArCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7DQo+ICsJ CWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0RfUkVWLCBpdDY1MDUtPmRwY2QsDQo+ICsJ CQkJQVJSQVlfU0laRShpdDY1MDUtPmRwY2QpKTsNCj4gKwl9DQo+ICsNCj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJEUENEIFJldi46ICVkLiVkIiwNCj4gKwkJCSAgICAgbGluay0+cmV2 aXNpb24gPj4gNCwgbGluay0+cmV2aXNpb24gJiAweDBGKTsNCj4gKw0KPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIlNpbmsgbWF4IGxpbmsgcmF0ZTogJWQuJTAyZCBHYnBzIHBlciBsYW5l IiwNCj4gKwkJCSAgICAgbGluay0+cmF0ZSAvIDEwMDAwMCwgbGluay0+cmF0ZSAvIDEwMDAgJSAx MDApOw0KPiArDQo+ICsJaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9IGRybV9kcF9saW5rX3Jh dGVfdG9fYndfY29kZShsaW5rLT5yYXRlKTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJsaW5rIHJhdGUgYncgY29kZToweCUwMngiLA0KPiArCQkJICAgICBpdDY1MDUtPmxpbmtfcmF0 ZV9id19jb2RlKTsNCj4gKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gbWluKChpbnQpaXQ2 NTA1LT5saW5rX3JhdGVfYndfY29kZSwNCj4gKwkJCQkJTUFYX0xJTktfUkFURSk7DQo+ICsNCj4g KwlpdDY1MDUtPmxhbmVfY291bnQgPSBsaW5rLT5udW1fbGFuZXM7DQo+ICsJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiU2luayBzdXBwb3J0ICVkIGxhbmVzIHRyYWluaW5nIiwNCj4gKwkJCSAg ICAgaXQ2NTA1LT5sYW5lX2NvdW50KTsNCj4gKwlpdDY1MDUtPmxhbmVfY291bnQgPSBtaW4oKGlu dClpdDY1MDUtPmxhbmVfY291bnQsIE1BWF9MQU5FX0NPVU5UKTsNCj4gKw0KPiArCWl0NjUwNS0+ YnJhbmNoX2RldmljZSA9IGRybV9kcF9pc19icmFuY2goaXQ2NTA1LT5kcGNkKTsNCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rICVzYnJhbmNoIGRldmljZSIsDQo+ICsJCQkgICAg IGl0NjUwNS0+YnJhbmNoX2RldmljZSA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+ ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lID0gISFsaW5rLT5jYXBhYmlsaXRpZXM7DQo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiU2luayAlc1N1cHBvcnQgRW5oYW5jZWQgRnJhbWluZyIsDQo+ ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lID8gIiIgOiAiTm90ICIpOw0K PiArDQo+ICsJaXQ2NTA1LT5lbmFibGVfc3NjID0gISEoaXQ2NTA1LT5kcGNkW0RQX01BWF9ET1dO U1BSRUFEXSAmDQo+ICsJCQkJRFBfTUFYX0RPV05TUFJFQURfMF81KTsNCj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJNYXhpbXVtIERvd24tU3ByZWFkOiAlcywgJXNzdXBwb3J0IFNTQyEi LA0KPiArCQkJICAgICBpdDY1MDUtPmVuYWJsZV9zc2MgPyAiMC41IiA6ICIwIiwNCj4gKwkJCSAg ICAgaXQ2NTA1LT5lbmFibGVfc3NjID8gIiIgOiAiTm90ICIpOw0KPiArDQo+ICsJaXQ2NTA1LT5z dGVwX3RyYWluID0gaXQ2NTA1X3VzZV9zdGVwX3RyYWluX2NoZWNrKGl0NjUwNSk7DQo+ICsJaWYg KGl0NjUwNS0+c3RlcF90cmFpbikNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYXV0 byB0cmFpbiBmYWlsLCB3aWxsIHN0ZXAgdHJhaW4iKTsNCj4gKw0KPiArCWJjYXBzID0gaXQ2NTA1 X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJiY2FwczoweCUwMngiLCBiY2Fwcyk7DQo+ICsJaWYgKGJjYXBzICYgRFBf QkNBUFNfSERDUF9DQVBBQkxFKSB7DQo+ICsJCWl0NjUwNS0+aXNfcmVwZWF0ZXIgPSAhIShiY2Fw cyAmIERQX0JDQVBTX1JFUEVBVEVSX1BSRVNFTlQpOw0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJTdXBwb3J0IEhEQ1AhIERvd25zdHJlYW0gaXMgJXMhIiwNCj4gKwkJCQkgICAgIGl0 NjUwNS0+aXNfcmVwZWF0ZXIgPyAicmVwZWF0ZXIiIDoNCj4gKwkJCQkgICAgICJyZWNlaXZlciIp Ow0KPiArCX0gZWxzZSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgbm90 IHN1cHBvcnQgSERDUCEiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX2Rlc2lyZWQgPSBmYWxzZTsNCj4g Kwl9DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSERDUCAlcyIsDQo+ICsJCQkgICAg IGl0NjUwNS0+aGRjcF9kZXNpcmVkID8gImRlc2lyZWQiIDogInVuZGVzaXJlZCIpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc2V0dXBfc3NjKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIFNQ UkVBRF9BTVBfNSwNCj4gKwkJCWl0NjUwNS0+ZW5hYmxlX3NzYyA/IFNQUkVBRF9BTVBfNSA6IDB4 MDApOw0KPiArCWlmIChpdDY1MDUtPmVuYWJsZV9zc2MpIHsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0JBTktfU0VMLCAweDAxKTsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X1NTQ19DVFJMMCwgMHg5RSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RS TDEsIDB4MUMpOw0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwyLCAweDQy KTsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsNCj4gKwkJ aXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1NQX0NUUkwwLCAweDA3KTsNCj4gKwkJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX0lQX0NUUkwxLCAweDI5KTsNCj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX0lQX0NUUkwyLCAweDAzKTsNCj4gKwkJLyogU3RhbXAgSW50ZXJydXB0IFN0ZXAgKi8N Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1Q X1NURVAsDQo+ICsJCQkJMHgxMCk7DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBf RE9XTlNQUkVBRF9DVFJMLA0KPiArCQkJCSAgRFBfU1BSRUFEX0FNUF8wXzUpOw0KPiArCX0gZWxz ZSB7DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfRE9XTlNQUkVBRF9DVFJMLCAw eDAwKTsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBN X1NUQU1QX1NURVAsDQo+ICsJCQkJMHgwMCk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIHZvaWQgaXQ2NTA1X2xpbmtfcmF0ZV9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBGT1JD RV9MQlIsDQo+ICsJCQkoaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9PSBSQlIpID8gRk9SQ0Vf TEJSIDogMHgwMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCBE UlZfSFMsDQo+ICsJCQkoaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9PSBSQlIpID8gMHgwMCA6 IERSVl9IUyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX2NvdW50X3Nl dHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfZ2V0X2V4dGNvbl9w cm9wZXJ0eShpdDY1MDUpOw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9D VFJMMCwgTEFORV9TV0FQLA0KPiArCQkJaXQ2NTA1LT5sYW5lX3N3YXAgPyBMQU5FX1NXQVAgOiAw eDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVf Q09VTlRfTUFTSywNCj4gKwkJCShpdDY1MDUtPmxhbmVfY291bnQgLSAxKSA8PCAxKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfc2V0dXAoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lKQ0K PiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsDQo+ICsJCQkJ RU5BQkxFX0VOSEFOQ0VEX0ZSQU1FLCBFTkFCTEVfRU5IQU5DRURfRlJBTUUpOw0KPiArDQo+ICsJ aXQ2NTA1X2xpbmtfcmF0ZV9zZXR1cChpdDY1MDUpOw0KPiArCWl0NjUwNV9sYW5lX2NvdW50X3Nl dHVwKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X3NldHVwX3NzYyhpdDY1MDUpOw0KPiArCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwNCj4gKwkJCSAgICAgIiVzLCAlZCBsYW5lcywgJXNhYmxlIHNzYywg JXNhYmxlIGVuaGFuY2VkIGZyYW1lIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVfYndf Y29kZSAhPSBSQlIgPyAiSEJSIiA6ICJSQlIiLA0KPiArCQkJICAgICBpdDY1MDUtPmxhbmVfY291 bnQsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/ICJlbiIgOiAiZGlzIiwNCj4gKwkJ CSAgICAgaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJhbWUgPyAiZW4iIDogImRpcyIpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfbGlua19zdGFydF9hdXRvX3RyYWluKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpbnQgdGltZW91dCA9IDUwMCwgbGlua190cmFp bmluZ19zdGF0ZTsNCj4gKwlib29sIHN0YXRlID0gZmFsc2U7DQo+ICsNCj4gKwltdXRleF9sb2Nr KCZpdDY1MDUtPmF1eF9sb2NrKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJB SU5fQ1RSTDAsDQo+ICsJCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUsIDB4MDApOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJTik7 DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwxLCBBVVRPX1RSQUlOKTsN Cj4gKw0KPiArCXdoaWxlICh0aW1lb3V0ID4gMCkgew0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwg MjAwMCk7DQo+ICsJCWxpbmtfdHJhaW5pbmdfc3RhdGUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJF R19MSU5LX1RSQUlOX1NUUyk7DQo+ICsNCj4gKwkJaWYgKChsaW5rX3RyYWluaW5nX3N0YXRlID4g MCkgJiYNCj4gKwkJICAgIChsaW5rX3RyYWluaW5nX3N0YXRlICYgTElOS19TVEFURV9OT1JQKSkg ew0KPiArCQkJc3RhdGUgPSB0cnVlOw0KPiArCQkJZ290byB1bmxvY2s7DQo+ICsJCX0NCj4gKw0K PiArCQl0aW1lb3V0LS07DQo+ICsJfQ0KPiArdW5sb2NrOg0KPiArCW11dGV4X3VubG9jaygmaXQ2 NTA1LT5hdXhfbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gc3RhdGU7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X2RybV9kcF9saW5rX2NvbmZpZ3VyZShzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpDQo+ICt7DQo+ICsJdTggdmFsdWVzWzJdOw0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRy bV9kcF9hdXggKmF1eCA9ICZpdDY1MDUtPmF1eDsNCj4gKw0KPiArCXZhbHVlc1swXSA9IGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGU7DQo+ICsJdmFsdWVzWzFdID0gaXQ2NTA1LT5sYW5lX2NvdW50 Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lKQ0KPiArCQl2YWx1 ZXNbMV0gfD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsNCj4gKw0KPiArCWVyciA9 IGRybV9kcF9kcGNkX3dyaXRlKGF1eCwgRFBfTElOS19CV19TRVQsIHZhbHVlcywgc2l6ZW9mKHZh bHVlcykpOw0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9jaGVja192b2x0YWdlX3N3 aW5nX21heCh1OCBsYW5lX3ZvbHRhZ2Vfc3dpbmdfcHJlX2VtcGhhc2lzKQ0KPiArew0KPiArCXJl dHVybiAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFzaXMgJiAweDAzKSA9PSBNQVhfQ1Jf TEVWRUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfcHJlX2VtcGhh c2lzX21heCh1OCBsYW5lX3ZvbHRhZ2Vfc3dpbmdfcHJlX2VtcGhhc2lzKQ0KPiArew0KPiArCXJl dHVybiAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFzaXMgJiAweDAzKSA9PSBNQVhfRVFf TEVWRUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfbWF4X3ZvbHRh Z2Vfc3dpbmdfcmVhY2hlZCh1OCAqbGFuZV92b2x0YWdlX3N3aW5nLA0KPiArCQkJCQkJICAgdTgg bGFuZV9jb3VudCkNCj4gK3sNCj4gKwl1OCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGxh bmVfY291bnQ7IGkrKykgew0KPiArCQlpZiAobGFuZV92b2x0YWdlX3N3aW5nW2ldICYgRFBfVFJB SU5fTUFYX1NXSU5HX1JFQUNIRUQpDQo+ICsJCQlyZXR1cm4gdHJ1ZTsNCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gZmFsc2U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9zdGVwX3Ry YWluX2xhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KA0KPiArCXN0cnVjdCBpdDY1MDUgKml0 NjUwNSwNCj4gKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFyYSAqbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcywNCj4gKwl1OCAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXQpDQo+ICt7 DQo+ICsJdTggaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUtPmxhbmVfY291bnQ7 IGkrKykgew0KPiArCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ld ICY9IDB4MDM7DQo+ICsJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldID0NCj4gKwkJ CWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV07DQo+ICsJCWlmIChp dDY1MDVfY2hlY2tfdm9sdGFnZV9zd2luZ19tYXgoDQo+ICsJCQkgICAgbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSkpDQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzX3NldFtpXSB8PQ0KPiArCQkJCURQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEOw0KPiAr DQo+ICsJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXSAmPSAweDAz Ow0KPiArCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSB8PQ0KPiArCQkJbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldDQo+ICsJCQk8PCBEUF9UUkFJTl9Q UkVfRU1QSEFTSVNfU0hJRlQ7DQo+ICsJCWlmIChpdDY1MDVfY2hlY2tfcHJlX2VtcGhhc2lzX21h eCgNCj4gKwkJCSAgICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0p KQ0KPiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4gKwkJCQlEUF9U UkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQ7DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0 NjUwNSwgRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgaSwNCj4gKwkJCQkgIGxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXNfc2V0W2ldKTsNCj4gKw0KPiArCQlpZiAobGFuZV92b2x0YWdlX3ByZV9lbXBo YXNpc19zZXRbaV0gIT0NCj4gKwkJICAgIGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9UUkFJ TklOR19MQU5FMF9TRVQgKyBpKSkNCj4gKwkJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wNCj4gK2l0NjUwNV9zdGVw X2NyX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJICAgICBzdHJ1Y3QgaXQ2NTA1 X3N0ZXBfdHJhaW5fcGFyYSAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwl1 OCBsb29wX2NvdW50ID0gMCwgaSA9IDAsIGo7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV0gPSB7IDAgfTsNCj4gKwl1OCBsYW5lX2xldmVsX2NvbmZpZ1tNQVhfTEFORV9D T1VOVF0gPSB7IDAgfTsNCj4gKwlpbnQgcHJlX2VtcGhhc2lzX2FkanVzdCA9IC0xLCB2b2x0YWdl X3N3aW5nX2FkanVzdCA9IC0xOw0KPiArDQo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBE UF9ET1dOU1BSRUFEX0NUUkwsDQo+ICsJCQkgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/IERQX1NQUkVB RF9BTVBfMF81IDogMHgwMCk7DQo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJ TklOR19QQVRURVJOX1NFVCwNCj4gKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsNCj4gKw0K PiArCXdoaWxlIChsb29wX2NvdW50IDwgNSAmJiBpIDwgMTApIHsNCj4gKwkJaSsrOw0KPiArCQlp ZiAoIWl0NjUwNV9zdGVwX3RyYWluX2xhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KA0KPiAr CQkJICAgIGl0NjUwNSwgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywNCj4gKwkJCSAgICBsYW5l X2xldmVsX2NvbmZpZykpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJZHJtX2RwX2xpbmtfdHJhaW5f Y2xvY2tfcmVjb3ZlcnlfZGVsYXkoaXQ2NTA1LT5kcGNkKTsNCj4gKwkJZHJtX2RwX2RwY2RfcmVh ZF9saW5rX3N0YXR1cygmaXQ2NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsNCj4gKw0KPiArCQlpZiAo ZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQp KSB7DQo+ICsJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIEZPUkNF X0NSX0RPTkUsDQo+ICsJCQkJCUZPUkNFX0NSX0RPTkUpOw0KPiArCQkJcmV0dXJuIHRydWU7DQo+ ICsJCX0NCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJj ciBub3QgZG9uZSIpOw0KPiArDQo+ICsJCWlmIChpdDY1MDVfY2hlY2tfbWF4X3ZvbHRhZ2Vfc3dp bmdfcmVhY2hlZChsYW5lX2xldmVsX2NvbmZpZywNCj4gKwkJCQkJCQkgICBpdDY1MDUtPmxhbmVf Y291bnQpKQ0KPiArCQkJZ290byBjcl90cmFpbl9mYWlsOw0KPiArDQo+ICsJCWZvciAoaiA9IDA7 IGogPCBpdDY1MDUtPmxhbmVfY291bnQ7IGorKykgew0KPiArCQkJbGFuZV92b2x0YWdlX3ByZV9l bXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tqXSA9DQo+ICsJCQkJZHJtX2RwX2dldF9hZGp1c3RfcmVx dWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLA0KPiArCQkJCQkJCQkgIGopID4+DQo+ICsJCQkJRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnByZV9lbXBoYXNpc1tqXSA9DQo+ICsJCQkJZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9w cmVfZW1waGFzaXMoDQo+ICsJCQkJCWxpbmtfc3RhdHVzLCBqKSA+Pg0KPiArCQkJCURQX1RSQUlO X1BSRV9FTVBIQVNJU19TSElGVDsNCj4gKwkJCWlmICgodm9sdGFnZV9zd2luZ19hZGp1c3QgPT0N Cj4gKwkJCSAgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tqXSkg JiYNCj4gKwkJCSAgICAocHJlX2VtcGhhc2lzX2FkanVzdCA9PQ0KPiArCQkJICAgICBsYW5lX3Zv bHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbal0pKSB7DQo+ICsJCQkJbG9vcF9jb3Vu dCsrOw0KPiArCQkJCWNvbnRpbnVlOw0KPiArCQkJfQ0KPiArDQo+ICsJCQl2b2x0YWdlX3N3aW5n X2FkanVzdCA9DQo+ICsJCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2lu Z1tqXTsNCj4gKwkJCXByZV9lbXBoYXNpc19hZGp1c3QgPQ0KPiArCQkJCWxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXTsNCj4gKwkJCWxvb3BfY291bnQgPSAwOw0KPiAr DQo+ICsJCQlpZiAodm9sdGFnZV9zd2luZ19hZGp1c3QgKyBwcmVfZW1waGFzaXNfYWRqdXN0ID4N Cj4gKwkJCSAgICBNQVhfRVFfTEVWRUwpDQo+ICsJCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNp cy0+dm9sdGFnZV9zd2luZ1tqXSA9DQo+ICsJCQkJCU1BWF9FUV9MRVZFTCAtDQo+ICsJCQkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMNCj4gKwkJCQkJCS0+cHJlX2VtcGhhc2lzW2pdOw0KPiAr CQl9DQo+ICsJfQ0KPiArDQo+ICtjcl90cmFpbl9mYWlsOg0KPiArCWl0NjUwNV9kcGNkX3dyaXRl KGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQo+ICsJCQkgIERQX1RSQUlOSU5HX1BB VFRFUk5fRElTQUJMRSk7DQo+ICsNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBib29sDQo+ICtpdDY1MDVfc3RlcF9lcV90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUs DQo+ICsJCSAgICAgc3RydWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXMpDQo+ICt7DQo+ICsJdTggbG9vcF9jb3VudCA9IDAsIGksIGxpbmtfc3RhdHVz W0RQX0xJTktfU1RBVFVTX1NJWkVdID0geyAwIH07DQo+ICsJdTggbGFuZV9sZXZlbF9jb25maWdb TUFYX0xBTkVfQ09VTlRdID0geyAwIH07DQo+ICsNCj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1 MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULA0KPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJO XzIpOw0KPiArDQo+ICsJd2hpbGUgKGxvb3BfY291bnQgPCA2KSB7DQo+ICsJCWxvb3BfY291bnQr KzsNCj4gKw0KPiArCQlpZiAoIWl0NjUwNV9zdGVwX3RyYWluX2xhbmVfdm9sdGFnZV9wcmVfZW1w aGFzaXNfc2V0KA0KPiArCQkJICAgIGl0NjUwNSwgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywN Cj4gKwkJCSAgICBsYW5lX2xldmVsX2NvbmZpZykpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQlkcm1fZHBfbGlua190cmFpbl9jaGFubmVsX2VxX2RlbGF5KGl0NjUwNS0+ZHBjZCk7DQo+ICsJ CWRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUwNS0+YXV4LCBsaW5rX3N0YXR1cyk7 DQo+ICsNCj4gKwkJaWYgKCFkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGl0 NjUwNS0+bGFuZV9jb3VudCkpDQo+ICsJCQlnb3RvIGVxX3RyYWluX2ZhaWw7DQo+ICsNCj4gKwkJ aWYgKGRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQp KSB7DQo+ICsJCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5f U0VULA0KPiArCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7DQo+ICsJCQlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VRX0RPTkUsDQo+ICsJ CQkJCUZPUkNFX0VRX0RPTkUpOw0KPiArCQkJcmV0dXJuIHRydWU7DQo+ICsJCX0NCj4gKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJlcSBub3QgZG9uZSIpOw0K PiArDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUtPmxhbmVfY291bnQ7IGkrKykgew0KPiAr CQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSA9DQo+ICsJCQkJ ZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLA0KPiArCQkJCQkJ CQkgIGkpID4+DQo+ICsJCQkJRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsNCj4gKwkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXSA9DQo+ICsJCQkJZHJtX2Rw X2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMoDQo+ICsJCQkJCWxpbmtfc3RhdHVzLCBp KSA+Pg0KPiArCQkJCURQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsNCj4gKw0KPiArCQkJaWYg KGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0gKw0KPiArCQkJCSAg ICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0gPg0KPiArCQkJICAg IE1BWF9FUV9MRVZFTCkNCj4gKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdl X3N3aW5nW2ldID0NCj4gKwkJCQkJMHgwMyAtIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMNCj4g KwkJCQkJCSAgICAgICAtPnByZV9lbXBoYXNpc1tpXTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr ZXFfdHJhaW5fZmFpbDoNCj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5H X1BBVFRFUk5fU0VULA0KPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiAr CXJldHVybiBmYWxzZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1X2xpbmtfc3Rh cnRfc3RlcF90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IGVycjsN Cj4gKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFyYSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzID0gew0KPiArCQkudm9sdGFnZV9zd2luZyA9IHsgMCB9LA0KPiArCQkucHJlX2VtcGhhc2lz ID0geyAwIH0sDQo+ICsJfTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUt PmNsaWVudC0+ZGV2LCAic3RhcnQiKTsNCj4gKwllcnIgPSBpdDY1MDVfZHJtX2RwX2xpbmtfY29u ZmlndXJlKGl0NjUwNSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwgMCkNCj4gKwkJcmV0dXJuIGZhbHNl Ow0KPiArCWlmICghaXQ2NTA1X3N0ZXBfY3JfdHJhaW4oaXQ2NTA1LCAmbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpcykpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlpZiAoIWl0NjUwNV9zdGVwX2Vx X3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KPiArCQlyZXR1cm4g ZmFsc2U7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCg0KDQpUaGUgd2hvbGUgbGluayB0 cmFpbmluZyBpcyBwZXJmb3JtZWQgaW4gZGlmZmVyZW50IGRyaXZlcnMgaW4gc2ltaWxhciANCndh eSwgbWF5YmUgc29tZSBkYXkgc29tZW9uZSB3aWxsIGJlIGFibGUgdG8gYWJzdHJhY3Qgb3V0IGNv bW1vbiBwYXJ0cyANCmFuZCBjcmVhdGUgbmljZSBoZWxwZXJzIGZvciBpdC4NCg0KDQo+ICtzdGF0 aWMgYm9vbCBpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaW50IHJlZ18wZDsNCj4gKw0KPiArCXJlZ18wZCA9IGl0NjUwNV9yZWFkKGl0NjUw NSwgUkVHX1NZU1RFTV9TVFMpOw0KPiArDQo+ICsJaWYgKHJlZ18wZCA8IDApDQo+ICsJCXJldHVy biBmYWxzZTsNCj4gKw0KPiArCXJldHVybiAhIShyZWdfMGQgJiBWSURFT19TVEIpOw0KDQoNCkFn YWluICEhDQoNCg0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfaGRjcChz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhE Q1BfQVVUSF9JRExFOw0KPiArCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgwMCk7DQo+ ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEhEQ1BfUkVTRVQsIEhE Q1BfUkVTRVQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc3RhcnRfaGRjcChz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJz dGFydCIpOw0KPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0NjUwNSk7DQo+ICsJcXVldWVfZGVsYXll ZF93b3JrKHN5c3RlbV93cSwgJml0NjUwNS0+aGRjcF93b3JrLA0KPiArCQkJICAgbXNlY3NfdG9f amlmZmllcygyNDAwKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9zdG9wX2hk Y3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0 NjUwNSk7DQo+ICsJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNwX3dvcmspOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTggKmtzdikN Cj4gK3sNCj4gKwlpbnQgaSwgb25lcyA9IDA7DQo+ICsNCj4gKwkvKiBLU1YgaGFzIDIwIDEncyBh bmQgMjAgMCdzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IERSTV9IRENQX0tTVl9MRU47IGkrKykN Cj4gKwkJb25lcyArPSBod2VpZ2h0OChrc3ZbaV0pOw0KPiArCWlmIChvbmVzICE9IDIwKQ0KPiAr CQlyZXR1cm4gZmFsc2U7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9oZGNwX3BhcnQxX2F1dGgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0K PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXU4IGhk Y3BfYmNhcHM7DQo+ICsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RS TCwgSERDUF9SRVNFVCwgMHgwMCk7DQo+ICsJLyogRGlzYWJsZSBDUF9EZXNpcmVkICovDQo+ICsJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5BQkxFLCAw eDAwKTsNCj4gKw0KPiArCXVzbGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCj4gKwloZGNwX2JjYXBz ID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJEUENEWzB4NjgwMjhdOiAweCUwMngiLA0KPiArCQkJICAg ICBoZGNwX2JjYXBzKTsNCj4gKw0KPiArCWlmICghaGRjcF9iY2FwcykNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJLyogY2xlYXIgdGhlIHJlcGVhdGVyIExpc3QgQ2hrIERvbmUgYW5kIGZhaWwgYml0 ICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCj4gKwkJ CUhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwNCj4gKwkJCTB4 MDApOw0KPiArDQo+ICsJLyogRW5hYmxlIEFuIEdlbmVyYXRvciAqLw0KPiArCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0FOX0dFTiwgSERDUF9BTl9HRU4pOw0K PiArCS8qIGRlbGF5MW1zKDEwKTsqLw0KZHJvcCB0aGUgY29tbWVudCAtIGl0IGRvZXMgbm90IGFk ZCB2YWx1YWJsZSBpbmZvDQo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7DQo+ICsJLyog U3RvcCBBbiBHZW5lcmF0b3IgKi8NCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERD UF9DVFJMMiwgSERDUF9BTl9HRU4sIDB4MDApOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5BQkxFLCBIRENQX0NQX0VOQUJMRSk7DQo+ ICsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLCBIRENQX1RS SUdHRVJfU1RBUlQsDQo+ICsJCQlIRENQX1RSSUdHRVJfU1RBUlQpOw0KPiArDQo+ICsJaXQ2NTA1 LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9HT0lORzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBpdDY1MDVfc2hhMV9kaWdlc3Qoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1OCAqc2hhMV9pbnB1 dCwNCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLCB1OCAqb3V0cHV0X2F2KQ0KPiArew0K PiArCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjOw0KPiArCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRm bTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArDQo+ICsJdGZtID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJzaGExIiwgMCwgMCk7 DQo+ICsJaWYgKElTX0VSUih0Zm0pKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiY3J5cHRv X2FsbG9jX3NoYXNoIHNoYTEgZmFpbGVkIik7DQo+ICsJCXJldHVybiBQVFJfRVJSKHRmbSk7DQo+ ICsJfQ0KPiArCWRlc2MgPSBremFsbG9jKHNpemVvZigqZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVz Y3NpemUodGZtKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFkZXNjKSB7DQo+ICsJCWNyeXB0b19m cmVlX3NoYXNoKHRmbSk7DQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArCX0NCj4gKw0KPiArCWRl c2MtPnRmbSA9IHRmbTsNCj4gKwllcnIgPSBjcnlwdG9fc2hhc2hfZGlnZXN0KGRlc2MsIHNoYTFf aW5wdXQsIHNpemUsIG91dHB1dF9hdik7DQo+ICsJaWYgKGVycikNCj4gKwkJRFJNX0RFVl9FUlJP UihkZXYsICJjcnlwdG9fc2hhc2hfZGlnZXN0IHNoYTEgZmFpbGVkIik7DQo+ICsNCj4gKwljcnlw dG9fZnJlZV9zaGFzaCh0Zm0pOw0KPiArCWtmcmVlKGRlc2MpOw0KPiArCXJldHVybiBlcnI7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3NldHVwX3NoYTFfaW5wdXQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LCB1OCAqc2hhMV9pbnB1dCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwl1OCBiaW5mb1syXTsNCj4gKwlpbnQgZG93 bl9zdHJlYW1fY291bnQsIGksIGVyciwgbXNnX2NvdW50ID0gMDsNCj4gKw0KPiArCWVyciA9IGl0 NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX0JJTkZPLCBiaW5mbywNCj4gKwkJCSAg ICAgIEFSUkFZX1NJWkUoYmluZm8pKTsNCj4gKw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURS TV9ERVZfRVJST1IoZGV2LCAiUmVhZCBiaW5mbyB2YWx1ZSBGYWlsIik7DQo+ICsJCXJldHVybiBl cnI7DQo+ICsJfQ0KPiArDQo+ICsJZG93bl9zdHJlYW1fY291bnQgPSBiaW5mb1swXSAmIDB4N0Y7 DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmluZm86MHglKnBoIiwgKGludClBUlJB WV9TSVpFKGJpbmZvKSwNCj4gKwkJCSAgICAgYmluZm8pOw0KPiArDQo+ICsJaWYgKChiaW5mb1sw XSAmIEJJVCg3KSkgfHwgKGJpbmZvWzFdICYgQklUKDMpKSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgIkhEQ1AgbWF4IGNhc2NhZGUgZGV2aWNlIGV4Y2VlZCIpOw0KPiArCQlyZXR1cm4gMDsN Cj4gKwl9DQo+ICsNCj4gKwlpZiAoIWRvd25fc3RyZWFtX2NvdW50IHx8DQo+ICsJICAgIChkb3du X3N0cmVhbV9jb3VudCA+IE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5UKSkgew0KPiArCQlEUk1f REVWX0VSUk9SKGRldiwgIkhEQ1AgZG93biBzdHJlYW0gY291bnQgRXJyb3IgJWQiLA0KPiArCQkJ ICAgICAgZG93bl9zdHJlYW1fY291bnQpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4g Kwlmb3IgKGkgPSAwOyBpIDwgZG93bl9zdHJlYW1fY291bnQ7IGkrKykgew0KPiArCQllcnIgPSBp dDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9LU1ZfRklGTyArDQo+ICsJCQkJICAg ICAgKGkgJSAzKSAqIERSTV9IRENQX0tTVl9MRU4sDQo+ICsJCQkJICAgICAgc2hhMV9pbnB1dCAr IG1zZ19jb3VudCwNCj4gKwkJCQkgICAgICBEUk1fSERDUF9LU1ZfTEVOKTsNCj4gKw0KPiArCQlp ZiAoZXJyIDwgMCkNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsNCj4gKwkJbXNnX2NvdW50ICs9IDU7 DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5oZGNwX2Rvd25fc3RyZWFtX2NvdW50ID0gZG93bl9z dHJlYW1fY291bnQ7DQo+ICsJc2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1swXTsNCj4g KwlzaGExX2lucHV0W21zZ19jb3VudCsrXSA9IGJpbmZvWzFdOw0KPiArDQo+ICsJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfRU5fTTBfUkVBRCwNCj4gKwkJCUhE Q1BfRU5fTTBfUkVBRCk7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfYnVsa19yZWFkKGl0NjUwNS0+ cmVnbWFwLCBSRUdfTTBfMF83LA0KPiArCQkJICAgICAgIHNoYTFfaW5wdXQgKyBtc2dfY291bnQs IDgpOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhE Q1BfRU5fTTBfUkVBRCwgMHgwMCk7DQo+ICsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1f REVWX0VSUk9SKGRldiwgIiBXYXJuaW5nLCBSZWFkIE0gdmFsdWUgRmFpbCIpOw0KPiArCQlyZXR1 cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCW1zZ19jb3VudCArPSA4Ow0KPiArDQo+ICsJcmV0dXJu IG1zZ19jb3VudDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1X2hkY3BfcGFydDJf a3N2bGlzdF9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggYXZbNV1bNF0sIGJ2WzVd WzRdOw0KPiArCWludCBpLCBlcnI7DQo+ICsNCj4gKwlpID0gaXQ2NTA1X3NldHVwX3NoYTFfaW5w dXQoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5wdXQpOw0KPiArCWlmIChpIDw9IDApIHsNCj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJTSEEtMSBJbnB1dCBsZW5ndGggZXJyb3IgJWQiLCBpKTsNCj4g KwkJcmV0dXJuIGZhbHNlOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNV9zaGExX2RpZ2VzdChpdDY1 MDUsIGl0NjUwNS0+c2hhMV9pbnB1dCwgaSwgKHU4ICopYXYpOw0KPiArDQo+ICsJZXJyID0gaXQ2 NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfVl9QUklNRSgwKSwgKHU4ICopYnYsDQo+ ICsJCQkgICAgICBzaXplb2YoYnYpKTsNCj4gKw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURS TV9ERVZfRVJST1IoZGV2LCAiUmVhZCBWJyB2YWx1ZSBGYWlsIik7DQo+ICsJCXJldHVybiBmYWxz ZTsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQ0KPiArCQlpZiAoKGJ2 W2ldWzNdICE9IGF2W2ldWzBdKSB8fCAoYnZbaV1bMl0gIT0gYXZbaV1bMV0pIHx8DQo+ICsJCSAg ICAoYnZbaV1bMV0gIT0gYXZbaV1bMl0pIHx8IChidltpXVswXSAhPSBhdltpXVszXSkpDQo+ICsJ CQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJWJyBh bGwgbWF0Y2ghISIpOw0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBpdDY1MDVfaGRjcF93YWl0X2tzdl9saXN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4g K3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0 IGl0NjUwNSwNCj4gKwkJCQkJICAgICBoZGNwX3dhaXRfa3N2X2xpc3QpOw0KPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXVuc2lnbmVkIGludCB0aW1l b3V0ID0gNTAwMDsNCj4gKwl1OCBic3RhdHVzID0gMDsNCj4gKwlib29sIGtzdl9saXN0X2NoZWNr Ow0KPiArDQo+ICsJdGltZW91dCAvPSAyMDsNCj4gKwl3aGlsZSAodGltZW91dCA+IDApIHsNCj4g KwkJaWYgKCFpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQkJcmV0dXJu Ow0KPiArDQo+ICsJCWJzdGF0dXMgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfQVVYX0hE Q1BfQlNUQVRVUyk7DQo+ICsNCj4gKwkJaWYgKGJzdGF0dXMgJiBEUF9CU1RBVFVTX1JFQURZKQ0K PiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJbXNsZWVwKDIwKTsNCj4gKwkJdGltZW91dC0tOw0KPiAr CX0NCj4gKw0KPiArCWlmICh0aW1lb3V0ID09IDApIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAidGltZW91dCBhbmQga3N2IGxpc3Qgd2FpdCBmYWlsZWQiKTsNCj4gKwkJZ290byB0 aW1lb3V0Ow0KPiArCX0NCj4gKw0KPiArCWtzdl9saXN0X2NoZWNrID0gaXQ2NTA1X2hkY3BfcGFy dDJfa3N2bGlzdF9jaGVjayhpdDY1MDUpOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg ImtzdiBsaXN0IHJlYWR5LCBrc3YgbGlzdCBjaGVjayAlcyIsDQo+ICsJCQkgICAgIGtzdl9saXN0 X2NoZWNrID8gInBhc3MiIDogImZhaWwiKTsNCj4gKwlpZiAoa3N2X2xpc3RfY2hlY2spIHsNCj4g KwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCj4gKwkJCQlIRENQ X1RSSUdHRVJfS1NWX0RPTkUsIEhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSk7DQo+ICsJCXJldHVybjsN Cj4gKwl9DQo+ICt0aW1lb3V0Og0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQ X1RSSUdHRVIsDQo+ICsJCQlIRENQX1RSSUdHRVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NW X0ZBSUwsDQo+ICsJCQlIRENQX1RSSUdHRVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZB SUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfaGRjcF93b3JrKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwNCj4gKwkJCQkJICAgICBoZGNwX3dvcmsud29y ayk7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJ aW50IHJldDsNCj4gKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSA9IHsgMCB9 Ow0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQiKTsNCj4gKw0KPiAr CWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2NTA1LT5hdXgs IGxpbmtfc3RhdHVzKTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJyZXQ6ICVkIGxp bmtfc3RhdHVzOiAlKnBoIiwgcmV0LA0KPiArCQkJICAgICAoaW50KXNpemVvZihsaW5rX3N0YXR1 cyksIGxpbmtfc3RhdHVzKTsNCj4gKw0KPiArCWlmICgocmV0IDwgMCkgfHwgIWRybV9kcF9jaGFu bmVsX2VxX29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpDQo+ICsJICAgIHx8ICFp dDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUpKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgImxpbmsgdHJhaW4gbm90IGRvbmUgb3Igbm8gdmlkZW8iKTsNCj4gKwkJcmV0dXJu Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9I RENQX0JLU1YsIGl0NjUwNS0+YmtzdnMsDQo+ICsJCQkgICAgICBBUlJBWV9TSVpFKGl0NjUwNS0+ YmtzdnMpKTsNCj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZh aWwgdG8gZ2V0IGJrc3YgIHJldDogJWQiLCByZXQpOw0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJCUhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwgSERD UF9UUklHR0VSX0tTVl9GQUlMKTsNCj4gKwl9DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJia3N2ID0gMHglKnBoIiwNCj4gKwkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUw NS0+YmtzdnMpLCBpdDY1MDUtPmJrc3ZzKTsNCj4gKw0KPiArCWlmICghaXQ2NTA1X2hkY3BfaXNf a3N2X3ZhbGlkKGl0NjUwNS0+YmtzdnMpKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRGlz cGxheSBQb3J0IGJrc3Ygbm90IHZhbGlkIik7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19IRENQX1RSSUdHRVIsDQo+ICsJCQkJSERDUF9UUklHR0VSX0tTVl9GQUlMLCBIRENQX1RS SUdHRVJfS1NWX0ZBSUwpOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNV9oZGNwX3BhcnQxX2F1dGgo aXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3Nob3dfaGRjcF9pbmZv KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwlpbnQgaTsNCj4gKwl1OCAqc2hhMSA9IGl0NjUwNS0+ c2hhMV9pbnB1dDsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3Bfc3Rh dHVzOiAlZCBpc19yZXBlYXRlcjogJWQiLA0KPiArCQkJICAgICBpdDY1MDUtPmhkY3Bfc3RhdHVz LCBpdDY1MDUtPmlzX3JlcGVhdGVyKTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJi a3N2ID0gMHglKnBoIiwNCj4gKwkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMp LCBpdDY1MDUtPmJrc3ZzKTsNCj4gKw0KPiArCWlmIChpdDY1MDUtPmlzX3JlcGVhdGVyKSB7DQo+ ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3BfZG93bl9zdHJlYW1fY291bnQ6ICVk IiwNCj4gKwkJCQkgICAgIGl0NjUwNS0+aGRjcF9kb3duX3N0cmVhbV9jb3VudCk7DQo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNoYTFfaW5wdXQ6IDB4JSpwaCIsDQo+ICsJCQkJICAg ICAoaW50KUFSUkFZX1NJWkUoaXQ2NTA1LT5zaGExX2lucHV0KSwNCj4gKwkJCQkgICAgIGl0NjUw NS0+c2hhMV9pbnB1dCk7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUtPmhkY3BfZG93bl9z dHJlYW1fY291bnQ7IGkrKykgew0KPiArCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiS1NW XyVkID0gMHglKnBoIiwgaSwNCj4gKwkJCQkJICAgICBEUk1fSERDUF9LU1ZfTEVOLCBzaGExKTsN Cj4gKwkJCXNoYTEgKz0gRFJNX0hEQ1BfS1NWX0xFTjsNCj4gKwkJfQ0KPiArCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJiaW5mbzogMHglMnBoIE0wOiAweCU4cGgiLA0KPiArCQkJCSAgICAg c2hhMSwgc2hhMSArIDIpOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1 X3N0b3BfbGlua190cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1 LT5saW5rX3N0YXRlID0gTElOS19JRExFOw0KPiArCWNhbmNlbF93b3JrX3N5bmMoJml0NjUwNS0+ bGlua193b3Jrcyk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwxLCBG T1JDRV9SRVRSQUlOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJh aW5fb2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0g TElOS19PSzsNCj4gKwkvKiBkaXNhbGJlIG11dGUgZW5hYmxlIGF2aSBpbmZvIGZyYW1lICovDQo+ ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVURV9DVFJMLCBFTl9WSURfTVVU RSwgMHgwMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJM LA0KPiArCQkJRU5fVklEX0NUUkxfUEtULCBFTl9WSURfQ1RSTF9QS1QpOw0KPiArDQo+ICsJaWYg KGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIkVuYWJsZSBhdWRpbyEiKTsNCj4gKwkJaXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUp Ow0KPiArCX0NCj4gKw0KPiArCWlmIChpdDY1MDUtPmhkY3BfZGVzaXJlZCkNCj4gKwkJaXQ2NTA1 X3N0YXJ0X2hkY3AoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xp bmtfc3RlcF90cmFpbl9wcm9jZXNzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwlpbnQgcmV0LCBp LCBzdGVwX3JldHJ5ID0gMzsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlN0 YXJ0IHN0ZXAgdHJhaW4iKTsNCj4gKw0KPiArCWlmIChpdDY1MDUtPnNpbmtfY291bnQgPT0gMCkg ew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6JWQs IGZvcmNlIGVxIiwNCj4gKwkJCQkgICAgIGl0NjUwNS0+c2lua19jb3VudCk7DQo+ICsJCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsCVJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfRVFfRE9ORSwNCj4gKwkJ CQlGT1JDRV9FUV9ET05FKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCWlmICghaXQ2 NTA1LT5zdGVwX3RyYWluKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIm5vdCBz dXBwb3J0IHN0ZXAgdHJhaW4iKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCS8qIHNl dHAgdHJhaW5pbmcgc3RhcnQgaGVyZSAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCBzdGVwX3JldHJ5 OyBpKyspIHsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLA0K PiArCQkJCUZPUkNFX0NSX0RPTkUgfCBGT1JDRV9FUV9ET05FLCAweDAwKTsNCj4gKwkJaXQ2NTA1 X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJCQkgIERQ X1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7DQo+ICsJCXJldCA9IGl0NjUwNV9saW5rX3N0YXJ0 X3N0ZXBfdHJhaW4oaXQ2NTA1KTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3Rl cCB0cmFpbiAlcywgcmV0cnk6JWQgdGltZXMiLA0KPiArCQkJCSAgICAgcmV0ID8gInBhc3MiIDog ImZhaWxlZCIsIGkgKyAxKTsNCj4gKwkJaWYgKHJldCkgew0KPiArCQkJaXQ2NTA1X2xpbmtfdHJh aW5fb2soaXQ2NTA1KTsNCj4gKwkJCXJldHVybjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInRyYWluaW5nIGZhaWwiKTsNCj4gKwlpdDY1MDUtPmxp bmtfc3RhdGUgPSBMSU5LX0lETEU7DQo+ICsJaXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9saW5rX3RyYWluaW5nX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LCBsaW5rX3dvcmtzKTsNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiAlZCIsDQo+ ICsJCQkgICAgIGl0NjUwNS0+c2lua19jb3VudCk7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9nZXRf c2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWl0NjUwNV9s aW5rX3RyYWluaW5nX3NldHVwKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1 KTsNCj4gKwlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5h dXRvX3RyYWluX3JldHJ5IDwgMSkgew0KPiArCQlpdDY1MDVfbGlua19zdGVwX3RyYWluX3Byb2Nl c3MoaXQ2NTA1KTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IGl0NjUwNV9s aW5rX3N0YXJ0X2F1dG9fdHJhaW4oaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJhdXRvIHRyYWluICVzLCBhdXRvX3RyYWluX3JldHJ5OiAlZCIsDQo+ICsJCQkgICAgIHJl dCA/ICJwYXNzIiA6ICJmYWlsZWQiLCBpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkpOw0KPiArCWl0 NjUwNS0+YXV0b190cmFpbl9yZXRyeS0tOw0KPiArDQo+ICsJaWYgKHJldCkgew0KPiArCQlpdDY1 MDVfbGlua190cmFpbl9vayhpdDY1MDUpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJ aXQ2NTA1X2R1bXAoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3Bs dWdnZWRfc3RhdHVzX3RvX2NvZGVjKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwll bnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1 czsNCj4gKw0KPiArCWlmIChpdDY1MDUtPnBsdWdnZWRfY2IgJiYgaXQ2NTA1LT5jb2RlY19kZXYp DQo+ICsJCWl0NjUwNS0+cGx1Z2dlZF9jYihpdDY1MDUtPmNvZGVjX2RldiwNCj4gKwkJCQkgICBz dGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IGl0NjUwNV9wcm9jZXNzX2hwZF9pcnEoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiAr ew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWlu dCByZXQsIGRwY2Rfc2lua19jb3VudCwgZHBfaXJxX3ZlY3RvciwgYnN0YXR1czsNCj4gKwl1OCBs aW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsNCj4gKw0KPiArCWlmICghaXQ2NTA1X2dl dF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJIUERfSVJRIEhQRCBsb3ciKTsNCj4gKwkJaXQ2NTA1LT5zaW5rX2NvdW50ID0gMDsNCj4g KwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1 MDUsIERQX1NJTktfQ09VTlQpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlyZXR1cm4gcmV0Ow0K PiArDQo+ICsJZHBjZF9zaW5rX2NvdW50ID0gRFBfR0VUX1NJTktfQ09VTlQocmV0KTsNCj4gKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJkcGNkX3NpbmtfY291bnQ6ICVkIGl0NjUwNS0+c2lu a19jb3VudDolZCIsDQo+ICsJCQkgICAgIGRwY2Rfc2lua19jb3VudCwgaXQ2NTA1LT5zaW5rX2Nv dW50KTsNCj4gKw0KPiArCWlmIChpdDY1MDUtPmJyYW5jaF9kZXZpY2UgJiYgZHBjZF9zaW5rX2Nv dW50ICE9IGl0NjUwNS0+c2lua19jb3VudCkgew0KPiArCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAw LCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQo+ICsJCWl0NjUwNS0+c2lua19jb3VudCA9IGRwY2Rf c2lua19jb3VudDsNCj4gKwkJa2ZyZWUoaXQ2NTA1LT5lZGlkKTsNCj4gKwkJaXQ2NTA1LT5lZGlk ID0gTlVMTDsNCj4gKwkJaXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9p bnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCj4gKwkJ cmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJZHBfaXJxX3ZlY3RvciA9IGl0NjUwNV9kcGNkX3Jl YWQoaXQ2NTA1LCBEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SKTsNCj4gKwlpZiAoZHBfaXJx X3ZlY3RvciA8IDApDQo+ICsJCXJldHVybiBkcF9pcnFfdmVjdG9yOw0KPiArDQo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiZHBfaXJxX3ZlY3RvciA9IDB4JTAyeCIsIGRwX2lycV92ZWN0 b3IpOw0KPiArDQo+ICsJaWYgKGRwX2lycV92ZWN0b3IgJiBEUF9DUF9JUlEpIHsNCj4gKwkJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwgSERDUF9UUklHR0VSX0NQSVJR LA0KPiArCQkJCUhEQ1BfVFJJR0dFUl9DUElSUSk7DQo+ICsNCj4gKwkJYnN0YXR1cyA9IGl0NjUw NV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CU1RBVFVTKTsNCj4gKwkJaWYgKGJzdGF0 dXMgPCAwKQ0KPiArCQkJcmV0dXJuIGJzdGF0dXM7DQo+ICsNCj4gKwkJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiQnN0YXR1cyA9IDB4JTAyeCIsIGJzdGF0dXMpOw0KPiArCX0NCj4gKw0KPiAr CXJldCA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUwNS0+YXV4LCBsaW5rX3N0 YXR1cyk7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWls IHRvIHJlYWQgbGluayBzdGF0dXMgcmV0OiAlZCIsDQo+ICsJCQkgICAgICByZXQpOw0KPiArCQly ZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxp bmsgc3RhdHVzID0gMHglKnBoIiwNCj4gKwkJCSAgICAgKGludClBUlJBWV9TSVpFKGxpbmtfc3Rh dHVzKSwgbGlua19zdGF0dXMpOw0KPiArDQo+ICsJaWYgKCFkcm1fZHBfY2hhbm5lbF9lcV9vayhs aW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KPiArCQlpdDY1MDUtPmF1dG9fdHJh aW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KPiArCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2 NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgaXQ2NTA1X2NoZWNrX3JlZzA2KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50 IHJlZzA2KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KPiArCWJvb2wgZGF0YTsNCj4gKw0KPiArCWlmIChyZWcwNiAmIElOVF9IUERfQ0hBTkdF KSB7DQo+ICsJCWRhdGEgPSBpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpOw0KPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJocGQgY2hhbmdlIGludGVycnVwdCwgY2hhbmdl IHRvICVzIiwNCj4gKwkJCQkgICAgIGRhdGEgPyAiaGlnaCIgOiAibG93Iik7DQo+ICsJCWlmIChp dDY1MDUtPmNvbm5lY3Rvci5kZXYpDQo+ICsJCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaXQ2 NTA1LT5jb25uZWN0b3IuZGV2KTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2 NTA1LT5zaW5rX2NvdW50OiAlZCIsDQo+ICsJCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQpOw0K PiArDQo+ICsJCWlmIChkYXRhKSB7DQo+ICsJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQo Jml0NjUwNS0+d2FpdF9lZGlkX2NvbXBsZXRlLA0KPiArCQkJCQkJICAgIG1zZWNzX3RvX2ppZmZp ZXMoNjAwMCkpOw0KPiArCQkJaXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oaXQ2NTA1KTsNCj4g KwkJCWl0NjUwNV9sYW5lX3Bvd2VyX29uKGl0NjUwNSk7DQo+ICsNCj4gKwkJCS8qDQo+ICsJCQkg KiBmb3Igc29tZSBkb25nbGUgd2hpY2ggaXNzdWUgSFBEX2lycQ0KPiArCQkJICogd2hlbiBzaW5r IGNvdW50IGNoYW5nZSBmcm9tICAwLT4xDQo+ICsJCQkgKiBpdDY1MDUgbm90IGFibGUgdG8gcmVj ZWl2ZSBIUERfSVJRDQo+ICsJCQkgKiBpZiBIVyBuZXZlciBnbyBpbnRvIHRyYWluaWcgZG9uZQ0K PiArCQkJICovDQo+ICsNCj4gKwkJCWlmIChpdDY1MDUtPmJyYW5jaF9kZXZpY2UgJiYgaXQ2NTA1 LT5zaW5rX2NvdW50ID09IDApDQo+ICsJCQkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dv cmtzKTsNCj4gKw0KPiArCQkJaWYgKCFpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUpKQ0K PiArCQkJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KPiArDQo+ICsJCQlpdDY1MDVfY2Fs Y192aWRlb19pbmZvKGl0NjUwNSk7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlrZnJlZShpdDY1MDUt PmVkaWQpOw0KPiArCQkJaXQ2NTA1LT5lZGlkID0gTlVMTDsNCj4gKwkJCW1lbXNldChpdDY1MDUt PmRwY2QsIDAsIHNpemVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKw0KPiArCQkJaWYgKGl0NjUwNS0+ aGRjcF9kZXNpcmVkKQ0KPiArCQkJCWl0NjUwNV9zdG9wX2hkY3AoaXQ2NTA1KTsNCj4gKw0KPiAr CQkJaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsNCj4gKwkJCWl0NjUwNV9kaXNhYmxlX2F1 ZGlvKGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfc3RvcF9saW5rX3RyYWluKGl0NjUwNSk7DQo+ICsJ CQlpdDY1MDVfbGFuZV9vZmYoaXQ2NTA1KTsNCj4gKwkJCXJldHVybjsNCj4gKwkJfQ0KPiArCX0N Cj4gKw0KPiArCWlmIChyZWcwNiAmIElOVF9SRUNFSVZFX0hQRF9JUlEpIHsNCj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiaHBkX2lycSBpbnRlcnJ1cHQiKTsNCj4gKw0KPiArCQlpZiAo aXQ2NTA1X3Byb2Nlc3NfaHBkX2lycShpdDY1MDUpIDwgMCkNCj4gKwkJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgInByb2Nlc3MgaHBkX2lycSBmYWlsISIpOw0KPiArCX0NCj4gKw0KPiArCWlm IChyZWcwNiAmIElOVF9TQ0RUX0NIQU5HRSkgew0KPiArCQlkYXRhID0gaXQ2NTA1X2dldF92aWRl b19zdGF0dXMoaXQ2NTA1KTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8g c3RhYmxlIGNoYW5nZSBpbnRlcnJ1cHQsICVzIiwNCj4gKwkJCQkgICAgIGRhdGEgPyAic3RhYmxl IiA6ICJ1bnN0YWJsZSIpOw0KPiArCQlpdDY1MDVfY2FsY192aWRlb19pbmZvKGl0NjUwNSk7DQo+ ICsNCj4gKwkJaWYgKGRhdGEpDQo+ICsJCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUtPmxpbmtfd29y a3MpOw0KPiArCX0NCj4gKw0KPiArCWlmIChyZWcwNiAmIElOVF9IRENQX0RPTkUpIHsNCj4gKwkJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaGRjcCBkb25lIGludGVycnVwdCIpOw0KPiArCQlp dDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0RPTkU7DQo+ICsJCWl0NjUwNV9zaG93X2hk Y3BfaW5mbyhpdDY1MDUpOw0KPiArCX0NCj4gKw0KPiArCWlmIChyZWcwNiAmIElOVF9IRENQX0ZB SUwpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaGRjcCBmYWlsIGludGVycnVw dCIpOw0KPiArCQlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0lETEU7DQo+ICsJCWl0 NjUwNV9zaG93X2hkY3BfaW5mbyhpdDY1MDUpOw0KPiArCQlpdDY1MDVfc3RhcnRfaGRjcChpdDY1 MDUpOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2NoZWNrX3JlZzA3 KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZzA3KQ0KPiArew0KPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJaWYgKHJl ZzA3ICYgSU5UX0FVWF9DTURfRkFJTCkNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi QVVYIFBDIFJlcXVlc3QgRmFpbCBJbnRlcnJ1cHQiKTsNCj4gKw0KPiArCWlmIChyZWcwNyAmIElO VF9IRENQX0tTVl9DSEVDSykgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJIRENQ IGV2ZW50IEludGVycnVwdCIpOw0KPiArCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUtPmhkY3Bfd2Fp dF9rc3ZfbGlzdCk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHJlZzA3ICYgSU5UX0FVRElPX0ZJRk9f RVJST1IpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYXVkaW8gZmlmbyBlcnJv ciBJbnRlcnJ1cHQiKTsNCj4gKw0KPiArCQlpZiAoaXQ2NTA1X2F1ZGlvX2lucHV0KGl0NjUwNSkp DQo+ICsJCQlpdDY1MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICsJfQ0KPiArDQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jaGVja19yZWcwOChzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUsIHVuc2lnbmVkIGludCByZWcwOCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWlmIChyZWcwOCAmIElOVF9MSU5LX1RSQUlO X0ZBSUwpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAibGluayB0cmFpbmluZyBm YWlsIGludGVycnVwdCIpOw0KPiArCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3Mp Ow0KPiArCX0NCj4gKw0KPiArCWlmIChyZWcwOCAmIElOVF9WSURfRklGT19FUlJPUikgew0KPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ2aWRlbyBmaWZvIG92ZXJmbG93IGludGVycnVw dCIpOw0KPiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0K PiArCQlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCQlpdDY1MDVfc3RvcF9o ZGNwKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOw0KPiArCX0NCj4g Kw0KPiArCWlmIChyZWcwOCAmIElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XKSB7DQo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIklPIGxhdGNoIGZpZm8gb3ZlcmZsb3cgaW50ZXJydXB0 Iik7DQo+ICsJCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7DQo+ ICsJCWZsdXNoX3dvcmsoJml0NjUwNS0+bGlua193b3Jrcyk7DQo+ICsJCWl0NjUwNV9zdG9wX2hk Y3AoaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7DQo+ICsJfQ0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgaXQ2NTA1X2ludF90aHJlYWRlZF9oYW5kbGVy KGludCB1bnVzZWQsIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1 ID0gZGF0YTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsN Cj4gKwlpbnQgcmVnMDYsIHJlZzA3LCByZWcwODsNCj4gKw0KPiArCW1zbGVlcCgxMDApOw0KPiAr CW11dGV4X2xvY2soJml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ ZW5hYmxlX2Rydl9ob2xkIHx8ICFpdDY1MDUtPnBvd2VyZWQpDQo+ICsJCWdvdG8gdW5sb2NrOw0K PiArDQo+ICsJcmVnMDYgPSBpdDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDEpOw0KPiAr CXJlZzA3ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RBVFVTXzAyKTsNCj4gKwlyZWcwOCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMyk7DQo+ICsNCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBJTlRfU1RBVFVTXzAxLCByZWcwNik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgSU5UX1NUQVRVU18wMiwgcmVnMDcpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9T VEFUVVNfMDMsIHJlZzA4KTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJl ZzA2ID0gMHglMDJ4IiwgcmVnMDYpOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJl ZzA3ID0gMHglMDJ4IiwgcmVnMDcpOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJl ZzA4ID0gMHglMDJ4IiwgcmVnMDgpOw0KPiArCWl0NjUwNV9kZWJ1Z19wcmludChpdDY1MDUsIFJF R19TWVNURU1fU1RTLCAiIik7DQo+ICsNCj4gKwlpZiAocmVnMDYgIT0gMCkNCj4gKwkJaXQ2NTA1 X2NoZWNrX3JlZzA2KGl0NjUwNSwgcmVnMDYpOw0KPiArDQo+ICsJaWYgKHJlZzA3ICE9IDApDQo+ ICsJCWl0NjUwNV9jaGVja19yZWcwNyhpdDY1MDUsIHJlZzA3KTsNCj4gKw0KPiArCWlmIChyZWcw OCAhPSAwKQ0KPiArCQlpdDY1MDVfY2hlY2tfcmVnMDgoaXQ2NTA1LCByZWcwOCk7DQoNCg0KVGhl IHdob2xlIGlycSBoYW5kbGVyIGxvb2tzIHVnbHksIHlvdSBjYW4gY29sbGF0ZSBhbGwgdGhyZWUg SU5UX1NUQVRVU18qIA0KcmVncyBpbnRvIG9uZSB2YWx1ZSBhbmQgdGhlbiBjaGVjayB3aGljaCBi aXRzIGFyZSBvbiBhbmQgdGhlbiBjYWxsIA0KYXByb3ByaWF0ZSBpcnEgaGFuZGxlci4NCg0KU2Vl IFsxXSBmb3IgZXhhbXBsZS4NCg0KWzFdOiANCmh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xp bnV4L3Y0LjE1L3NvdXJjZS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmMjTDIw NTUNCg0KDQoNCj4gKw0KPiArdW5sb2NrOg0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5leHRj b25fbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X3Bvd2Vyb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXN0cnVjdCBp dDY1MDVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmaXQ2NTA1LT5wZGF0YTsNCj4gKwlpbnQgZXJy Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+cG93ZXJlZCkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJpdDY1MDUgYWxyZWFkeSBwb3dlcmVkIG9uIik7DQo+ICsJCXJldHVybiAwOw0K PiArCX0NCj4gKw0KPiArCWlmIChwZGF0YS0+cHdyMTgpIHsNCj4gKwkJZXJyID0gcmVndWxhdG9y X2VuYWJsZShwZGF0YS0+cHdyMTgpOw0KPiArCQlpZiAoZXJyKSB7DQo+ICsJCQlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIFZERDE4OiAlZCIsDQo+ICsJCQkJCSAg ICAgZXJyKTsNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAo cGRhdGEtPm92ZGQpIHsNCj4gKwkJLyogdGltZSBpbnRlcnZhbCBiZXR3ZWVuIElWREQgYW5kIE9W REQgYXQgbGVhc3QgYmUgMW1zICovDQo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsNCj4g KwkJZXJyID0gcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+b3ZkZCk7DQo+ICsJCWlmIChlcnIpIHsN Cj4gKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKHBkYXRhLT5wd3IxOCk7DQo+ICsJCQlyZXR1cm4gZXJy Ow0KPiArCQl9DQo+ICsJfQ0KPiArCS8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBPVkREIGFuZCBT WVNSU1ROIGF0IGxlYXN0IGJlIDEwbXMgKi8NCj4gKwlpZiAocGRhdGEtPmdwaW9kX3Jlc2V0KSB7 DQo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOw0KPiArCQlncGlvZF9zZXRfdmFsdWVf Y2Fuc2xlZXAocGRhdGEtPmdwaW9kX3Jlc2V0LCAwKTsNCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAs IDIwMDApOw0KPiArCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3Jlc2V0 LCAxKTsNCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7DQo+ICsJfQ0KPiArDQo+ICsJ aXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShp dDY1MDUpOw0KPiArCWl0NjUwNV9pbml0KGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2xhbmVfb2ZmKGl0 NjUwNSk7DQo+ICsNCj4gKwlpdDY1MDUtPnBvd2VyZWQgPSB0cnVlOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3Bvd2Vyb2ZmKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJml0NjUw NS0+cGRhdGE7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCWlmICghaXQ2NTA1LT5wb3dlcmVkKSB7 DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBvd2VyIGhhZCBiZWVuIGFscmVhZHkg b2ZmIik7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCWlmIChwZGF0YS0+Z3Bpb2Rf cmVzZXQpDQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQs IDApOw0KPiArDQo+ICsJaWYgKHBkYXRhLT5wd3IxOCkgew0KPiArCQllcnIgPSByZWd1bGF0b3Jf ZGlzYWJsZShwZGF0YS0+cHdyMTgpOw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJcmV0dXJuIGVycjsN Cj4gKwl9DQo+ICsNCj4gKwlpZiAocGRhdGEtPm92ZGQpIHsNCj4gKwkJZXJyID0gcmVndWxhdG9y X2Rpc2FibGUocGRhdGEtPm92ZGQpOw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJcmV0dXJuIGVycjsN Cj4gKwl9DQo+ICsNCj4gKwlpdDY1MDUtPnBvd2VyZWQgPSBmYWxzZTsNCj4gKwlrZnJlZShpdDY1 MDUtPmVkaWQpOw0KPiArCWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJaXQ2NTA1LT5zaW5rX2Nv dW50ID0gMDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBpdDY1MDUgKmNvbm5lY3Rvcl90b19pdDY1MDUoc3RydWN0IGRybV9jb25uZWN0b3Ig KmMpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgaXQ2NTA1LCBjb25u ZWN0b3IpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9nZXRfbW9kZXMoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUgPSBjb25uZWN0b3JfdG9faXQ2NTA1KGNvbm5lY3Rvcik7DQo+ICsJaW50IGVyciwgbnVtX21v ZGVzID0gMCwgaTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRl djsNCj4gKw0KPiArCWlmIChpdDY1MDUtPmVkaWQpDQo+ICsJCXJldHVybiBkcm1fYWRkX2VkaWRf bW9kZXMoY29ubmVjdG9yLCBpdDY1MDUtPmVkaWQpOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2 NTA1LT5tb2RlX2xvY2spOw0KPiArCXJlaW5pdF9jb21wbGV0aW9uKCZpdDY1MDUtPndhaXRfZWRp ZF9jb21wbGV0ZSk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7DQo+ICsJCWlm ICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkNCj4gKwkJCWdvdG8gdW5sb2Nr Ow0KPiArDQo+ICsJCWl0NjUwNS0+ZWRpZCA9IGRybV9kb19nZXRfZWRpZCgmaXQ2NTA1LT5jb25u ZWN0b3IsDQo+ICsJCQkJCSAgICAgICBpdDY1MDVfZ2V0X2VkaWRfYmxvY2ssIGl0NjUwNSk7DQo+ ICsNCj4gKwkJaWYgKGl0NjUwNS0+ZWRpZCkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKwlpZiAo IWl0NjUwNS0+ZWRpZCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWFk IEVESUQiKTsNCj4gKwkJbnVtX21vZGVzID0gLUVJTzsNCj4gKwkJZ290byB1bmxvY2s7DQo+ICsJ fQ0KPiArDQo+ICsJZXJyID0gZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25u ZWN0b3IsIGl0NjUwNS0+ZWRpZCk7DQo+ICsJaWYgKGVycikgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byB1cGRhdGUgRURJRCBwcm9wZXJ0eTogJWQiLCBlcnIpOw0KPiArCQlu dW1fbW9kZXMgPSBlcnI7DQo+ICsJCWdvdG8gdW5sb2NrOw0KPiArCX0NCj4gKw0KPiArCW51bV9t b2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGl0NjUwNS0+ZWRpZCk7DQo+ICsN Cj4gK3VubG9jazoNCj4gKwljb21wbGV0ZSgmaXQ2NTA1LT53YWl0X2VkaWRfY29tcGxldGUpOw0K PiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ICsJcmV0dXJuIG51 bV9tb2RlczsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y X2hlbHBlcl9mdW5jcyBpdDY1MDVfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsNCj4gKwkuZ2V0 X21vZGVzID0gaXQ2NTA1X2dldF9tb2RlcywNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBlbnVtIGRy bV9jb25uZWN0b3Jfc3RhdHVzIGl0NjUwNV9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwNCj4gKwkJCQkJICAgICAgIGJvb2wgZm9yY2UpDQo+ICt7DQo+ICsJc3RydWN0IGl0 NjUwNSAqaXQ2NTA1ID0gY29ubmVjdG9yX3RvX2l0NjUwNShjb25uZWN0b3IpOw0KPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsN Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6JWQgcG93 ZXJlZDolZCIsDQo+ICsJCQkgICAgIGl0NjUwNS0+c2lua19jb3VudCwgaXQ2NTA1LT5wb3dlcmVk KTsNCj4gKw0KPiArCW11dGV4X2xvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsNCj4gKw0KPiArCWlm ICghaXQ2NTA1LT5wb3dlcmVkKQ0KPiArCQlnb3RvIHVubG9jazsNCj4gKw0KPiArCWlmIChpdDY1 MDUtPmVuYWJsZV9kcnZfaG9sZCkgew0KPiArCQlzdGF0dXMgPSBpdDY1MDVfZ2V0X3NpbmtfaHBk X3N0YXR1cyhpdDY1MDUpID8NCj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOg0K PiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gKwkJZ290byB1bmxvY2s7 DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkp IHsNCj4gKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOw0KPiArCQlpdDY1MDVfZHJtX2RwX2xpbmtf cHJvYmUoJml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCj4gKwkJaXQ2NTA1X2RybV9kcF9s aW5rX3Bvd2VyX3VwKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+bGluayk7DQo+ICsJCWl0NjUwNS0+ YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7DQo+ICsNCj4gKwkJaWYgKGl0NjUw NS0+ZHBjZFswXSA9PSAwKSB7DQo+ICsJCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9EUENE X1JFViwgaXQ2NTA1LT5kcGNkLA0KPiArCQkJCQlBUlJBWV9TSVpFKGl0NjUwNS0+ZHBjZCkpOw0K PiArCQkJaXQ2NTA1X3ZhcmlhYmxlX2NvbmZpZyhpdDY1MDUpOw0KPiArCQkJaXQ2NTA1X3BhcnNl X2xpbmtfY2FwYWJpbGl0aWVzKGl0NjUwNSk7DQo+ICsJCX0NCj4gKw0KPiArCQlpdDY1MDUtPnNp bmtfY291bnQgPSBEUF9HRVRfU0lOS19DT1VOVChpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwNCj4g KwkJCQkJCSAgICAgICBEUF9TSU5LX0NPVU5UKSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBicmFuY2g6JWQiLA0KPiArCQkJCSAgICAgaXQ2 NTA1LT5zaW5rX2NvdW50LCBpdDY1MDUtPmJyYW5jaF9kZXZpY2UpOw0KPiArDQo+ICsJCWlmIChp dDY1MDUtPmJyYW5jaF9kZXZpY2UpIHsNCj4gKwkJCXN0YXR1cyA9IChpdDY1MDUtPnNpbmtfY291 bnQgIT0gMCkgPw0KPiArCQkJCSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJCQkJ IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJc3Rh dHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0K PiArCQlpdDY1MDUtPnNpbmtfY291bnQgPSAwOw0KPiArCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAw LCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQo+ICsJfQ0KPiArDQo+ICt1bmxvY2s6DQo+ICsJaWYg KGl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyAhPSBzdGF0dXMpIHsNCj4gKwkJaXQ2NTA1LT5jb25u ZWN0b3Jfc3RhdHVzID0gc3RhdHVzOw0KPiArCQlpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29k ZWMoaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+bW9kZV9s b2NrKTsNCj4gKw0KPiArCXJldHVybiBzdGF0dXM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBpdDY1MDVfY29ubmVjdG9yX2Z1bmNzID0gew0K PiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVz LA0KPiArCS5kZXRlY3QgPSBpdDY1MDVfZGV0ZWN0LA0KPiArCS5kZXN0cm95ID0gZHJtX2Nvbm5l Y3Rvcl9jbGVhbnVwLA0KPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9y ZXNldCwNCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsDQo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsDQo+ICt9Ow0KPiArDQo+ICtz dGF0aWMgaW50IGl0NjUwNV9leHRjb25fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpz ZWxmLA0KPiArCQkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQ0KPiArew0KPiAr CXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZihzZWxmLCBzdHJ1Y3QgaXQ2NTA1 LCBldmVudF9uYik7DQo+ICsNCj4gKwlzY2hlZHVsZV93b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7 DQo+ICsJcmV0dXJuIE5PVElGWV9ET05FOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfZXh0Y29uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KPiArew0KPiArCXN0cnVj dCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LCBleHRj b25fd3EpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0K PiArCWludCBzdGF0ZSA9IGV4dGNvbl9nZXRfc3RhdGUoaXQ2NTA1LT5leHRjb24sIEVYVENPTl9E SVNQX0RQKTsNCj4gKwl1bnNpZ25lZCBpbnQgcHdyb2ZmcmV0cnkgPSAwOw0KPiArDQo+ICsJaWYg KGl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwltdXRleF9s b2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIkVYVENPTl9ESVNQX0RQID0gMHglMDJ4Iiwgc3RhdGUpOw0KPiArCWlmIChzdGF0ZSA+ IDApIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQgdG8gcG93ZXIgb24i KTsNCj4gKwkJbXNsZWVwKDEwMCk7DQo+ICsJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQo+ICsJ fSBlbHNlIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQgdG8gcG93ZXIg b2ZmIik7DQo+ICsJCXdoaWxlIChpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KSAmJiBwd3JvZmZyZXRy eSsrIDwgNSkgew0KPiArCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgb2ZmIGZh aWwgJWQgdGltZXMiLA0KPiArCQkJCQkgICAgIHB3cm9mZnJldHJ5KTsNCj4gKwkJfQ0KPiArDQo+ ICsJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChpdDY1MDUtPmNvbm5lY3Rvci5kZXYpOw0KPiAr CQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBvd2VyIG9mZiBpdDY1MDUgc3VjY2VzcyEiKTsNCj4g Kwl9DQo+ICsNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV91c2Vfbm90aWZpZXJfbW9kdWxlKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJaXQ2NTA1LT5ldmVudF9uYi5ub3RpZmll cl9jYWxsID0gaXQ2NTA1X2V4dGNvbl9ub3RpZmllcjsNCj4gKwlJTklUX1dPUksoJml0NjUwNS0+ ZXh0Y29uX3dxLCBpdDY1MDVfZXh0Y29uX3dvcmspOw0KPiArCXJldCA9IGRldm1fZXh0Y29uX3Jl Z2lzdGVyX25vdGlmaWVyKCZpdDY1MDUtPmNsaWVudC0+ZGV2LA0KPiArCQkJCQkgICAgaXQ2NTA1 LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLA0KPiArCQkJCQkgICAgJml0NjUwNS0+ZXZlbnRfbmIp Ow0KPiArCWlmIChyZXQpIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gcmVn aXN0ZXIgbm90aWZpZXIgZm9yIERQIik7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ ICsJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5leHRjb25fd3EpOw0KPiArDQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9yZW1vdmVfbm90aWZpZXJfbW9kdWxl KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpZiAoaXQ2NTA1LT5leHRjb24pIHsN Cj4gKwkJZGV2bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmllcigmaXQ2NTA1LT5jbGllbnQtPmRl diwNCj4gKwkJCQkJCWl0NjUwNS0+ZXh0Y29uLAlFWFRDT05fRElTUF9EUCwNCj4gKwkJCQkJCSZp dDY1MDUtPmV2ZW50X25iKTsNCj4gKw0KPiArCQlmbHVzaF93b3JrKCZpdDY1MDUtPmV4dGNvbl93 cSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBpdDY1 MDVfZGVsYXllZF9hdWRpbyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsDQo+ ICsJCQkJCSAgICAgZGVsYXllZF9hdWRpby53b3JrKTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdf RFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAic3RhcnQiKTsNCj4gKw0KPiArCWlmICghaXQ2 NTA1LT5wb3dlcmVkKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoIWl0NjUwNS0+ZW5hYmxl X2Rydl9ob2xkKQ0KPiArCQlpdDY1MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NldHVwX2h3X3BhcmFt cyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJCXN0cnVjdCBoZG1pX2NvZGVjX3BhcmFt cyAqcGFyYW1zKQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArCWludCBpID0gMDsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIiVzICVkIEh6LCAlZCBiaXQsICVkIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXywNCj4gKwkJCSAg ICAgcGFyYW1zLT5zYW1wbGVfcmF0ZSwgcGFyYW1zLT5zYW1wbGVfd2lkdGgsDQo+ICsJCQkgICAg IHBhcmFtcy0+Y2VhLmNoYW5uZWxzKTsNCj4gKw0KPiArCWlmICghaXQ2NTA1LT5icmlkZ2UuZW5j b2RlcikNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsNCj4gKwlpZiAocGFyYW1zLT5jZWEuY2hh bm5lbHMgPD0gMSB8fCBwYXJhbXMtPmNlYS5jaGFubmVscyA+IDgpIHsNCj4gKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiY2hhbm5lbCBudW1iZXI6ICVkIG5vdCBzdXBwb3J0IiwNCj4gKwkJ CQkgICAgIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudCk7DQo+ICsJCXJldHVybiAtRUlOVkFM Ow0KPiArCX0NCj4gKw0KPiArCWl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudCA9IHBhcmFtcy0+ Y2VhLmNoYW5uZWxzOw0KPiArDQo+ICsJd2hpbGUgKGkgPCBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBs ZV9yYXRlX21hcCkgJiYNCj4gKwkgICAgICAgcGFyYW1zLT5zYW1wbGVfcmF0ZSAhPQ0KPiArCQkg ICAgICAgYXVkaW9fc2FtcGxlX3JhdGVfbWFwW2ldLnNhbXBsZV9yYXRlX3ZhbHVlKSB7DQo+ICsJ CWkrKzsNCj4gKwl9DQo+ICsJaWYgKGkgPT0gQVJSQVlfU0laRShhdWRpb19zYW1wbGVfcmF0ZV9t YXApKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInNhbXBsZSByYXRlOiAlZCBI eiBub3Qgc3VwcG9ydCIsDQo+ICsJCQkJICAgICBwYXJhbXMtPnNhbXBsZV9yYXRlKTsNCj4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArCWl0NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGUgPSBh dWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0ucmF0ZTsNCj4gKw0KPiArCXN3aXRjaCAocGFyYW1zLT5z YW1wbGVfd2lkdGgpIHsNCj4gKwljYXNlIDE2Og0KPiArCQlpdDY1MDUtPmF1ZGlvLndvcmRfbGVu Z3RoID0gV09SRF9MRU5HVEhfMTZCSVQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgMTg6DQo+ICsJ CWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xFTkdUSF8xOEJJVDsNCj4gKwkJYnJl YWs7DQo+ICsJY2FzZSAyMDoNCj4gKwkJaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRf TEVOR1RIXzIwQklUOw0KPiArCQlicmVhazsNCj4gKwljYXNlIDI0Og0KPiArCWNhc2UgMzI6DQo+ ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xFTkdUSF8yNEJJVDsNCj4gKwkJ YnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAid29y ZGxlbmd0aDogJWQgYml0IG5vdCBzdXBwb3J0IiwNCj4gKwkJCQkgICAgIHBhcmFtcy0+c2FtcGxl X3dpZHRoKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGl0NjUwNV9hdWRpb19z aHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsJc3RydWN0 IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsNCj4gKwlpZiAoaXQ2 NTA1LT5wb3dlcmVkKQ0KPiArCQlpdDY1MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGl0NjUwNV9hdWRpb19ob29rX3BsdWdn ZWRfY2Ioc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJCQkJICAgICAgIHZvaWQgKmRhdGEsDQo+ ICsJCQkJCQkgICAgICAgaGRtaV9jb2RlY19wbHVnZ2VkX2NiIGZuLA0KPiArCQkJCQkJICAgICAg IHN0cnVjdCBkZXZpY2UgKmNvZGVjX2RldikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUgPSBkYXRhOw0KPiArDQo+ICsJaXQ2NTA1LT5wbHVnZ2VkX2NiID0gZm47DQo+ICsJaXQ2NTA1 LT5jb2RlY19kZXYgPSBjb2RlY19kZXY7DQo+ICsJaXQ2NTA1X3BsdWdnZWRfc3RhdHVzX3RvX2Nv ZGVjKGl0NjUwNSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu bGluZSBzdHJ1Y3QgaXQ2NTA1ICpicmlkZ2VfdG9faXQ2NTA1KHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCBpdDY1 MDUsIGJyaWRnZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9icmlkZ2VfbW9k ZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4gKwkJCQkgICBjb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwNCj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUg PSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsJc3RydWN0IGhkbWlfYXZpX2luZm9mcmFt ZSBmcmFtZTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJaWYgKFdBUk5fT04oIWl0NjUwNS0+cG93ZXJlZCkpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsNCj4g Kw0KPiArCWVyciA9IGRybV9oZG1pX2F2aV9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZy YW1lLA0KPiArCQkJCQkJICAgICAgICZpdDY1MDUtPmNvbm5lY3RvciwNCj4gKwkJCQkJCSAgICAg ICBhZGp1c3RlZF9tb2RlKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHNldHVwIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsNCj4gKwkJZ290byB1 bmxvY2s7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1X3VwZGF0ZV92aWRlb19wYXJhbWV0ZXIoaXQ2 NTA1LCBhZGp1c3RlZF9tb2RlKTsNCj4gKw0KPiArCWVyciA9IGl0NjUwNV9zZW5kX3ZpZGVvX2lu Zm9mcmFtZShpdDY1MDUsICZmcmFtZSk7DQo+ICsJaWYgKGVycikNCj4gKwkJRFJNX0RFVl9FUlJP UihkZXYsICJGYWlsZWQgdG8gc2VuZCBBVkkgaW5mb2ZyYW1lOiAlZCIsIGVycik7DQo+ICsNCj4g K3VubG9jazoNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBpdDY1MDVfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlLA0KPiArCQkJCWVudW0gZHJtX2JyaWRnZV9hdHRhY2hfZmxhZ3MgZmxhZ3MpDQo+ICt7 DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0K PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCBl cnI7DQo+ICsNCj4gKwlpZiAoZmxhZ3MgJiBEUk1fQlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1Ip IHsNCj4gKwkJRFJNX0VSUk9SKCJGaXggYnJpZGdlIGRyaXZlciB0byBtYWtlIGNvbm5lY3RvciBv cHRpb25hbCEiKTsNCj4gKwkJcmV0dXJuIDA7DQpFcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgaGVy ZQ0KPiArCX0NCj4gKw0KPiArCWlmICghYnJpZGdlLT5lbmNvZGVyKSB7DQo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOw0KPiArCQlyZXR1 cm4gLUVOT0RFVjsNCj4gKwl9DQo+ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJp ZGdlLT5kZXYsICZpdDY1MDUtPmNvbm5lY3RvciwNCj4gKwkJCQkgJml0NjUwNV9jb25uZWN0b3Jf ZnVuY3MsDQo+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7DQo+ICsJaWYg KGVyciA8IDApIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6 ZSBjb25uZWN0b3I6ICVkIiwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4g Kwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJml0NjUwNS0+Y29ubmVjdG9yLA0KPiArCQkJCSAm aXQ2NTA1X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOw0KPiArDQo+ICsJaXQ2NTA1LT5jb25uZWN0 b3IucG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsNCj4gKw0KPiArCWVyciA9IGRybV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJml0NjUwNS0+Y29ubmVjdG9yLCBicmlkZ2UtPmVuY29k ZXIpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIGxpbmsgdXAgY29ubmVjdG9yIHRvIGVuY29kZXI6ICVkIiwNCj4gKwkJCSAgICAgIGVycik7 DQo+ICsJCWdvdG8gY2xlYW51cF9jb25uZWN0b3I7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gZHJt X2Nvbm5lY3Rvcl9yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWlmIChlcnIgPCAw KSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbm5lY3Rv cjogJWQiLCBlcnIpOw0KPiArCQlnb3RvIGNsZWFudXBfY29ubmVjdG9yOw0KPiArCX0NCj4gKw0K PiArCWlmIChpdDY1MDUtPmV4dGNvbikgew0KPiArCQllcnIgPSBpdDY1MDVfdXNlX25vdGlmaWVy X21vZHVsZShpdDY1MDUpOw0KPiArCQlpZiAoZXJyIDwgMCkgew0KPiArCQkJZHJtX2Nvbm5lY3Rv cl91bnJlZ2lzdGVyKCZpdDY1MDUtPmNvbm5lY3Rvcik7DQo+ICsJCQlnb3RvIGNsZWFudXBfY29u bmVjdG9yOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK2NsZWFu dXBfY29ubmVjdG9yOg0KPiArCWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0 b3IpOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9i cmlkZ2VfZGV0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ICt7DQo+ICsJc3RydWN0 IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KPiArDQo+ICsJZmx1 c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCj4gKwlpdDY1MDVfcmVtb3ZlX25vdGlmaWVy X21vZHVsZShpdDY1MDUpOw0KPiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5j b25uZWN0b3IpOw0KPiArCWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3Ip Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMNCj4gK2l0NjUwNV9i cmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArCQkJIGNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvLA0KPiArCQkJIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJy aWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCj4gKw0KPiArCWlmIChtb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfSU5URVJMQUNFKQ0KPiArCQlyZXR1cm4gTU9ERV9OT19JTlRFUkxBQ0U7DQo+ICsN Cj4gKwlpZiAobW9kZS0+Y2xvY2sgPiBEUElfUElYRUxfQ0xLX01BWCkNCj4gKwkJcmV0dXJuIE1P REVfQ0xPQ0tfSElHSDsNCj4gKw0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5jbG9jayA9IG1vZGUt PmNsb2NrOw0KPiArDQo+ICsJcmV0dXJuIE1PREVfT0s7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ICt7 DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0K PiArDQo+ICsJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShpdDY1MDUpOw0KPiArCWl0NjUwNV92aWRl b19yZXNldChpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdl X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsNCj4gKwlpZiAoaXQ2 NTA1LT5wb3dlcmVkKQ0KPiArCQlpdDY1MDVfdmlkZW9fZGlzYWJsZShpdDY1MDUpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cw0KPiAraXQ2NTA1X2JyaWRn ZV9kZXRlY3Qoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsNCj4gKwlyZXR1cm4g aXQ2NTA1X2RldGVjdCgmaXQ2NTA1LT5jb25uZWN0b3IsIDApOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgc3RydWN0IGVkaWQgKml0NjUwNV9icmlkZ2VfZ2V0X2VkaWQoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSwNCj4gKwkJCQkJICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikNCj4g K3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJc3Ry dWN0IGVkaWQgKmVkaWQ7DQo+ICsNCj4gKwllZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUt PmNvbm5lY3RvciwgaXQ2NTA1X2dldF9lZGlkX2Jsb2NrLA0KPiArCQkJICAgICAgIGl0NjUwNSk7 DQo+ICsNCj4gKwlpZiAoIWVkaWQpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi ZmFpbGVkIHRvIGdldCBlZGlkISIpOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gZWRpZDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJp ZGdlX2Z1bmNzIGl0NjUwNV9icmlkZ2VfZnVuY3MgPSB7DQo+ICsJLmF0dGFjaCA9IGl0NjUwNV9i cmlkZ2VfYXR0YWNoLA0KPiArCS5kZXRhY2ggPSBpdDY1MDVfYnJpZGdlX2RldGFjaCwNCj4gKwku bW9kZV92YWxpZCA9IGl0NjUwNV9icmlkZ2VfbW9kZV92YWxpZCwNCj4gKwkubW9kZV9zZXQgPSBp dDY1MDVfYnJpZGdlX21vZGVfc2V0LA0KPiArCS5lbmFibGUgPSBpdDY1MDVfYnJpZGdlX2VuYWJs ZSwNCj4gKwkuZGlzYWJsZSA9IGl0NjUwNV9icmlkZ2VfZGlzYWJsZSwNCj4gKwkuZGV0ZWN0ID0g aXQ2NTA1X2JyaWRnZV9kZXRlY3QsDQo+ICsJLmdldF9lZGlkID0gaXQ2NTA1X2JyaWRnZV9nZXRf ZWRpZCwNCj4gK307DQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gKw0KPiArc3Rh dGljIGludCBpdDY1MDVfYnJpZGdlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+ ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsNCj4g KwlyZXR1cm4gaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBpdDY1MDVfYnJpZGdlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJcmV0 dXJuIGl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgU0lNUExF X0RFVl9QTV9PUFMoaXQ2NTA1X2JyaWRnZV9wbV9vcHMsIGl0NjUwNV9icmlkZ2Vfc3VzcGVuZCwN Cj4gKwkJCSBpdDY1MDVfYnJpZGdlX3Jlc3VtZSk7DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICtz dGF0aWMgaW50IGl0NjUwNV9pbml0X3BkYXRhKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJml0NjUwNS0+cGRhdGE7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4g KwkvKiAxLjBWIGRpZ2l0YWwgY29yZSBwb3dlciByZWd1bGF0b3IgICovDQo+ICsJcGRhdGEtPnB3 cjE4ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgInB3cjE4Iik7DQo+ICsJaWYgKElTX0VSUihw ZGF0YS0+cHdyMTgpKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAicHdyMTggcmVndWxhdG9y IG5vdCBmb3VuZCIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cHdyMTgpOw0KPiArCX0N Cj4gKw0KPiArCXBkYXRhLT5vdmRkID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgIm92ZGQiKTsN Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5vdmRkKSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwg Im92ZGQgcmVndWxhdG9yIG5vdCBmb3VuZCIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+ b3ZkZCk7DQo+ICsJfQ0KPiArDQo+ICsJcGRhdGEtPmdwaW9kX3Jlc2V0ID0gZGV2bV9ncGlvZF9n ZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7DQo+ICsJaWYgKElTX0VSUihwZGF0YS0+ Z3Bpb2RfcmVzZXQpKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiZ3Bpb2RfcmVzZXQgZ3Bp byBub3QgZm91bmQiKTsNCj4gKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPmdwaW9kX3Jlc2V0KTsN Cj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2 NTA1X3BhcnNlX2R0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwl1MzIgKmFmZV9zZXR0aW5nID0g Jml0NjUwNS0+YWZlX3NldHRpbmc7DQo+ICsNCj4gKwlpdDY1MDUtPmxhbmVfc3dhcF9kaXNhYmxl ZCA9DQo+ICsJCWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAibm8tbGFuZXN3YXAiKTsN Cj4gKw0KPiArCWlmIChpdDY1MDUtPmxhbmVfc3dhcF9kaXNhYmxlZCkNCj4gKwkJaXQ2NTA1LT5s YW5lX3N3YXAgPSBmYWxzZTsNCj4gKw0KPiArCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIo ZGV2LCAiYWZlLXNldHRpbmciLCBhZmVfc2V0dGluZykgPT0gMCkgew0KPiArCQlpZiAoKmFmZV9z ZXR0aW5nID49IEFSUkFZX1NJWkUoYWZlX3NldHRpbmdfdGFibGUpKSB7DQo+ICsJCQlEUk1fREVW X0VSUk9SKGRldiwgImFmZSBzZXR0aW5nIGVycm9yLCB1c2UgZGVmYXVsdCIpOw0KPiArCQkJKmFm ZV9zZXR0aW5nID0gMDsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJCSphZmVfc2V0dGluZyA9 IDA7DQo+ICsJfQ0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInVzaW5nIGFmZV9zZXR0 aW5nOiAlZCIsICphZmVfc2V0dGluZyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IHBy aW50X3RpbWluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqdmlkID0gJml0NjUwNS0+dmlkZW9faW5mbzsNCj4gKwljaGFyICpzdHIgPSBidWYsICplbmQg PSBidWYgKyBQQUdFX1NJWkU7DQo+ICsNCj4gKwlpdDY1MDVfY2FsY192aWRlb19pbmZvKGl0NjUw NSk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIi0tLXZpZGVvIHRpbWlu Zy0tLVxuIik7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlBDTEs6JWQu JTAzZE1IelxuIiwNCj4gKwkJCSB2aWQtPmNsb2NrIC8gMTAwMCwgdmlkLT5jbG9jayAlIDEwMDAp Ow0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIVG90YWw6JWRcbiIsIHZp ZC0+aHRvdGFsKTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSEFjdGl2 ZTolZFxuIiwgdmlkLT5oZGlzcGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAt IHN0ciwgIkhGcm9udFBvcmNoOiVkXG4iLA0KPiArCQkJIHZpZC0+aHN5bmNfc3RhcnQgLSB2aWQt PmhkaXNwbGF5KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiSFN5bmNX aWR0aDolZFxuIiwNCj4gKwkJCSB2aWQtPmhzeW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOw0K PiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIQmFja1BvcmNoOiVkXG4iLA0K PiArCQkJIHZpZC0+aHRvdGFsIC0gdmlkLT5oc3luY19lbmQpOw0KPiArCXN0ciArPSBzY25wcmlu dGYoc3RyLCBlbmQgLSBzdHIsICJWVG90YWw6JWRcbiIsIHZpZC0+dnRvdGFsKTsNCj4gKwlzdHIg Kz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVkFjdGl2ZTolZFxuIiwgdmlkLT52ZGlzcGxh eSk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZGcm9udFBvcmNoOiVk XG4iLA0KPiArCQkJIHZpZC0+dnN5bmNfc3RhcnQgLSB2aWQtPnZkaXNwbGF5KTsNCj4gKwlzdHIg Kz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVlN5bmNXaWR0aDolZFxuIiwNCj4gKwkJCSB2 aWQtPnZzeW5jX2VuZCAtIHZpZC0+dnN5bmNfc3RhcnQpOw0KPiArCXN0ciArPSBzY25wcmludGYo c3RyLCBlbmQgLSBzdHIsICJWQmFja1BvcmNoOiVkXG4iLA0KPiArCQkJIHZpZC0+dnRvdGFsIC0g dmlkLT52c3luY19lbmQpOw0KPiArDQo+ICsJcmV0dXJuIHN0ciAtIGJ1ZjsNCj4gK30NCj4gKw0K PiArc3RhdGljIHNzaXplX3QgZm9yY2VfcHdyb25vZmZfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2 LA0KPiArCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gKwkJCQkgICAg Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAq aXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsJaW50IHB3cjsNCj4gKw0KPiArCWlm IChrc3RydG9pbnQoYnVmLCAxMCwgJnB3cikgPCAwKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g Kw0KPiArCWlmIChwd3IpDQo+ICsJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQo+ICsJZWxzZQ0K PiArCQlpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsNCj4gKw0KPiArCXJldHVybiBjb3VudDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHNzaXplX3QgZW5hYmxlX2Rydl9ob2xkX3Nob3coc3RydWN0IGRl dmljZSAqZGV2LA0KPiArCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOw0KPiArDQo+ICsJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4i LCBpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90 IGVuYWJsZV9kcnZfaG9sZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJICAgICBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1 Ziwgc2l6ZV90IGNvdW50KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOw0KPiArCXVuc2lnbmVkIGludCBkcnZfaG9sZDsNCj4gKw0KPiArCWlm IChrc3RydG9pbnQoYnVmLCAxMCwgJmRydl9ob2xkKSA8IDApDQo+ICsJCXJldHVybiAtRUlOVkFM Ow0KPiArDQo+ICsJaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQgPSAhIWRydl9ob2xkOw0KDQoNCkFn YWluICEhLCBwbGVhc2UganVzdCBmaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBpdCBhbiByZW1vdmUg dGhlbSBpZiBpdCBpcyANCmFzc2lnbmVkIHRvIGJvb2wgdHlwZS4NCg0KDQo+ICsNCj4gKwlpZiAo aXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpIHsNCj4gKwkJaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUo aXQ2NTA1KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpdDY1MDVfY2xlYXJfaW50KGl0NjUwNSk7DQo+ ICsJCWl0NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsNCj4gKw0KPiArCQlpZiAoaXQ2NTA1 LT5wb3dlcmVkKSB7DQo+ICsJCQlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPQ0KPiArCQkJCQlp dDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpID8NCj4gKwkJCQkJY29ubmVjdG9yX3N0 YXR1c19jb25uZWN0ZWQgOg0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsN Cj4gKwkJfSBlbHNlIHsNCj4gKwkJCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9DQo+ICsJCQkJ CWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQl9DQo+ICsJfQ0KPiArCXJldHVy biBjb3VudDsNCj4gK30NCj4gKw0KPiArc3RhdGljIERFVklDRV9BVFRSX1JPKHByaW50X3RpbWlu Zyk7DQo+ICtzdGF0aWMgREVWSUNFX0FUVFJfV08oZm9yY2VfcHdyb25vZmYpOw0KPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGVuYWJsZV9kcnZfaG9sZCk7DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgYXR0cmlidXRlICppdDY1MDVfYXR0cnNbXSA9IHsNCj4gKwkmZGV2X2F0dHJfcHJpbnRf dGltaW5nLmF0dHIsDQo+ICsJJmRldl9hdHRyX2ZvcmNlX3B3cm9ub2ZmLmF0dHIsDQo+ICsJJmRl dl9hdHRyX2VuYWJsZV9kcnZfaG9sZC5hdHRyLA0KPiArCU5VTEwsDQo+ICt9Ow0KPiArDQo+ICtz dGF0aWMgdm9pZCBpdDY1MDVfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4g K3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoJmNsaWVudC0+ ZGV2KTsNCj4gKw0KPiArCWtmcmVlKGl0NjUwNS0+ZWRpZCk7DQo+ICsJaXQ2NTA1LT5lZGlkID0g TlVMTDsNCj4gKw0KPiArCWlmIChpdDY1MDUtPnBvd2VyZWQpDQo+ICsJCWl0NjUwNV9sYW5lX29m ZihpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9pMmNfcHJvYmUoc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCwNCj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2Rldmlj ZV9pZCAqaWQpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1Ow0KPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsNCj4gKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29u Ow0KPiArCWludCBlcnIsIGludHBfaXJxOw0KPiArDQo+ICsJaXQ2NTA1ID0gZGV2bV9remFsbG9j KCZjbGllbnQtPmRldiwgc2l6ZW9mKCppdDY1MDUpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWl0 NjUwNSkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwltdXRleF9pbml0KCZpdDY1MDUt PmV4dGNvbl9sb2NrKTsNCj4gKwltdXRleF9pbml0KCZpdDY1MDUtPm1vZGVfbG9jayk7DQo+ICsJ bXV0ZXhfaW5pdCgmaXQ2NTA1LT5hdXhfbG9jayk7DQo+ICsNCj4gKwlpdDY1MDUtPmJyaWRnZS5v Zl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsNCj4gKwlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0 dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gKwlpdDY1MDUtPmNsaWVudCA9 IGNsaWVudDsNCj4gKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpdDY1MDUpOw0KPiArDQo+ ICsJLyogZ2V0IGV4dGNvbiBkZXZpY2UgZnJvbSBEVFMgKi8NCj4gKwlleHRjb24gPSBleHRjb25f Z2V0X2VkZXZfYnlfcGhhbmRsZShkZXYsIDApOw0KPiArCWlmIChQVFJfRVJSKGV4dGNvbikgPT0g LUVQUk9CRV9ERUZFUikNCj4gKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7DQo+ICsJaWYgKElTX0VS UihleHRjb24pKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiY2FuIG5vdCBnZXQgZXh0Y29u IGRldmljZSEiKTsNCj4gKwkJcmV0dXJuIFBUUl9FUlIoZXh0Y29uKTsNCj4gKwl9DQo+ICsNCj4g KwlpdDY1MDUtPmV4dGNvbiA9IGV4dGNvbjsNCj4gKw0KPiArCWl0NjUwNS0+cmVnbWFwID0gZGV2 bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmaXQ2NTA1X3JlZ21hcF9jb25maWcpOw0KPiArCWlm IChJU19FUlIoaXQ2NTA1LT5yZWdtYXApKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAicmVn bWFwIGkyYyBpbml0IGZhaWxlZCIpOw0KPiArCQllcnIgPSBQVFJfRVJSKGl0NjUwNS0+cmVnbWFw KTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwllcnIgPSBpdDY1MDVfaW5pdF9w ZGF0YShpdDY1MDUpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBwZGF0YTogJWQiLCBlcnIpOw0KPiArCQlyZXR1cm4gZXJyOw0K PiArCX0NCj4gKw0KPiArCWl0NjUwNV9wYXJzZV9kdChpdDY1MDUpOw0KPiArDQo+ICsJaW50cF9p cnEgPSBjbGllbnQtPmlycTsNCj4gKw0KPiArCWlmICghaW50cF9pcnEpIHsNCj4gKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZ2V0IElOVFAgSVJRIik7DQo+ICsJCWVyciA9IC1FTk9E RVY7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gZGV2bV9yZXF1ZXN0 X3RocmVhZGVkX2lycSgmY2xpZW50LT5kZXYsIGludHBfaXJxLCBOVUxMLA0KPiArCQkJCQlpdDY1 MDVfaW50X3RocmVhZGVkX2hhbmRsZXIsDQo+ICsJCQkJCUlSUUZfVFJJR0dFUl9MT1cgfCBJUlFG X09ORVNIT1QsDQo+ICsJCQkJCSJpdDY1MDUtaW50cCIsIGl0NjUwNSk7DQo+ICsJaWYgKGVycikg ew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElOVFAgdGhyZWFk ZWQgSVJROiAlZCIsDQo+ICsJCQkgICAgICBlcnIpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0N Cj4gKw0KPiArCS8qIFJlZ2lzdGVyIGF1eCBjaGFubmVsICovDQo+ICsJaXQ2NTA1LT5hdXgubmFt ZSA9ICJEUC1BVVgiOw0KPiArCWl0NjUwNS0+YXV4LmRldiA9IGRldjsNCj4gKwlpdDY1MDUtPmF1 eC50cmFuc2ZlciA9IGl0NjUwNV9hdXhfdHJhbnNmZXI7DQo+ICsNCj4gKwllcnIgPSBkcm1fZHBf YXV4X3JlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQo+ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJRFJN X0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgYXV4OiAlZCIsIGVycik7DQo+ICsJ CXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJSU5JVF9XT1JLKCZpdDY1MDUtPmxpbmtfd29y a3MsIGl0NjUwNV9saW5rX3RyYWluaW5nX3dvcmspOw0KPiArCUlOSVRfV09SSygmaXQ2NTA1LT5o ZGNwX3dhaXRfa3N2X2xpc3QsIGl0NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3QpOw0KPiArCUlOSVRf REVMQVlFRF9XT1JLKCZpdDY1MDUtPmhkY3Bfd29yaywgaXQ2NTA1X2hkY3Bfd29yayk7DQo+ICsJ aW5pdF9jb21wbGV0aW9uKCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSk7DQo+ICsJbWVtc2V0 KGl0NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KPiArCWl0NjUwNS0+cG93 ZXJlZCA9IGZhbHNlOw0KPiArCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkID0gREVGQVVMVF9EUlZf SE9MRDsNCj4gKw0KPiArCWlmIChERUZBVUxUX1BXUl9PTikNCj4gKwkJaXQ2NTA1X3Bvd2Vyb24o aXQ2NTA1KTsNCj4gKw0KPiArCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlcygmY2xpZW50LT5kZXYu a29iaiwgaXQ2NTA1X2F0dHJzKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCWRybV9kcF9hdXhfdW5y ZWdpc3RlcigmaXQ2NTA1LT5hdXgpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiAr CWl0NjUwNS0+YnJpZGdlLmZ1bmNzID0gJml0NjUwNV9icmlkZ2VfZnVuY3M7DQo+ICsJZHJtX2Jy aWRnZV9hZGQoJml0NjUwNS0+YnJpZGdlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGl0NjUwNV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gaTJjX2dldF9jbGllbnRkYXRh KGNsaWVudCk7DQo+ICsNCj4gKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJml0NjUwNS0+Y29u bmVjdG9yKTsNCj4gKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsN Cj4gKwlkcm1fYnJpZGdlX3JlbW92ZSgmaXQ2NTA1LT5icmlkZ2UpOw0KPiArCWRybV9kcF9hdXhf dW5yZWdpc3RlcigmaXQ2NTA1LT5hdXgpOw0KPiArCXN5c2ZzX3JlbW92ZV9maWxlcygmY2xpZW50 LT5kZXYua29iaiwgaXQ2NTA1X2F0dHJzKTsNCj4gKwlpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsN Cj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGky Y19kZXZpY2VfaWQgaXQ2NTA1X2lkW10gPSB7DQo+ICsJeyAiaXQ2NTA1IiwgMCB9LA0KPiArCXsg fQ0KPiArfTsNCj4gKw0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGl0NjUwNV9pZCk7DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGl0NjUwNV9vZl9tYXRjaFtd ID0gew0KPiArCXsgLmNvbXBhdGlibGUgPSAiaXRlLGl0NjUwNSIgfSwNCj4gKwl7IH0NCj4gK307 DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpdDY1MDVfaTJjX2RyaXZlciA9IHsN Cj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFtZSA9ICJpdDY1MDUiLA0KPiArCQkub2ZfbWF0Y2hf dGFibGUgPSBpdDY1MDVfb2ZfbWF0Y2gsDQo+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQDQo+ICsJ CS5wbSA9ICZpdDY1MDVfYnJpZGdlX3BtX29wcywNCj4gKyNlbmRpZg0KPiArCX0sDQo+ICsJLnBy b2JlID0gaXQ2NTA1X2kyY19wcm9iZSwNCj4gKwkucmVtb3ZlID0gaXQ2NTA1X2kyY19yZW1vdmUs DQo+ICsJLnNodXRkb3duID0gaXQ2NTA1X3NodXRkb3duLA0KPiArCS5pZF90YWJsZSA9IGl0NjUw NV9pZCwNCj4gK307DQo+ICsNCj4gK21vZHVsZV9pMmNfZHJpdmVyKGl0NjUwNV9pMmNfZHJpdmVy KTsNCj4gKw0KPiArTU9EVUxFX0FVVEhPUigiQWxsZW4gQ2hlbiA8YWxsZW4uY2hlbkBpdGUuY29t LnR3PiIpOw0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJJVDY1MDUgRGlzcGxheVBvcnQgVHJhbnNt aXR0ZXIgZHJpdmVyIik7DQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQoNCg0KVGhlIHNo YXBlIG9mIHRoZSBkcml2ZXIgbG9va3MgT0sgdG8gbWUsIGJ1dCBpdCBpcyBxdWl0ZSBiaWcgYW5k IA0KaW50ZXJhY3RzIHdpdGggbWFueSBzdWJzeXN0ZW0sIHNvIGZvciBzdXJlIG15IHJldmlldyB3 YXMgbm90IHByb2ZvdW5kIDopDQoNCkZldyBtb3JlIHRoaW5nczoNCg0KLSBpdCB3b3VsZCBiZSBn b29kIHRvIHJlcGxhY2Ugc29tZSBtYWdpYyBudW1iZXJzIGluc2lkZSB0aGUgY29kZSB3aXRoIA0K cHJvcGVyIG1hY3JvcywgYWxsIHRoZXNlIDB4RjAsIDB4NzAsIEJJVCh4KSBhcmUgcXVpdGUgY3J5 cHRpYy4NCg0KLSBSRUdfQkFOS19TRUwgaXMgdXN1YWxseSBhdCAwLCBvbmx5IHNvbWV0aW1lcyBp cyBzd2l0Y2hlZCB0byAxLCBzbyANCm1heWJlIGl0IHNob3VsZCBiZSBlbm91Z2ggdG8gc2V0IGl0 IHRvIDEgaWYgbmVjZXNzYXJ5IGFuZCB0aGVuIA0KaW1tZWRpYXRlbHkgc2V0IGJhY2sgdG8gMCwg YXMgZGVmYXVsdCB2YWx1ZSwgaW5zdGVhZCBvZiBzZXR0aW5nIGl0IA0KbXVsdGlwbGUgdGltZXMs DQoNCi0gc29tZXRpbWVzIHlvdSBhcmUgYWNjZXNzaW5nIGFycmF5cyAoaW50IHN0YXR1cywgbWFz aywgaXQ2NTA1X2R1bXApIA0KbWF5YmUgaXQgd291bGQgYmUgZ29vZCB0byBjcmVhdGUgaGVscGVy cyB0byByZWFkL3dyaXRlIGFycmF5cyB0byANCnNpbXBsaWZ5IHRoZSBjb2RlIGxpdHRsZSBiaXQu DQoNCg0KQXMgSSBzYWlkIGl0IHdvdWxkIGJlIGdvb2QgdG8gZ2V0IHNvbWVvbmUncyBlbHNlIHJl dmlldywgYXMgdGhlIGRyaXZlciANCmlzIGJpZy4NCg0KDQpSZWdhcmRzDQoNCkFuZHJ6ZWoNCg0K DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1t ZWRpYXRlayBtYWlsaW5nIGxpc3QKTGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW1lZGlhdGVr Cg==