Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3317202imu; Wed, 7 Nov 2018 08:28:05 -0800 (PST) X-Google-Smtp-Source: AJdET5dgo7AQ8pnY55lFKfh/2hsW/eYaxGcTQjctz3qrdM7JdMn+AI6DrX5Dy3HQ8u5EF3Rjg0+8 X-Received: by 2002:a17:902:b612:: with SMTP id b18-v6mr892971pls.205.1541608085589; Wed, 07 Nov 2018 08:28:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541608085; cv=none; d=google.com; s=arc-20160816; b=qUaUd46S+DaQ/Ue4N2yQ7eKf1HjtzdCk/z1ZToGu/QXhruvqhAR2YEhJurMdBjhmS7 ZBPD2spMt4YinHG8rDug97D2Z6i20iutsWMjsHAI3laNfS72sHFY1zY556jxXt1W3Wsj 34DBLE4nDGjn2Gmx7cfKmC2nDu2mzKCCjT/oQc960vyhWXzd6T1ylqeqoGkwPI6/4BWs /5OCRVAIgnGmK+mw2H7Koobbd96j6ro+ZjK9eCgWAMwEOWicUBCcYtks5MQOiu6lCD+O qZODv5nNAz+ia+VHF8ff1DVb/WoW+ZSoJY7hp7uCq8xZW2ZFLpKoKpUtRJk7K2kNwMGu 7JpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from; bh=9II8nzvn4bXLpRwCqA55wYfcQ5RFrOTgU213/EXGj+c=; b=euky7eboB1g3evAk4skk8N2/95PaKIVPNJjQkR70MTmr9OBp7QsUfErJlQ9mdpg3r3 rou7hsE8CR03mp7JKYhcDBIuvvcAAufD9HynrTPwch+PtRsx7UkmttyTbYG4ErRXh2QE MM1aEB+5GdddK93VWr9Eh946tQqhK0LyHnfP5KH3BcHedwVDppsVIHPnq4I/DQSYnyfo g39yh/QiZRyzqGrC3LohjrRxqjrrJjTk+FwWJ1PZCuByRRB1xxboUE4mLUcCybkxouds aA5ANVRXfM6ALydH9nhD6+Dpv/LweEBuFY+KvY/ieepEHC0ZEiijF3R6cNIB9ot27lZ9 Jmjg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p188-v6si1150677pfp.119.2018.11.07.08.27.49; Wed, 07 Nov 2018 08:28:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727870AbeKHB6R (ORCPT + 99 others); Wed, 7 Nov 2018 20:58:17 -0500 Received: from skedge04.snt-world.com ([91.208.41.69]:40466 "EHLO skedge04.snt-world.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726752AbeKHB6Q (ORCPT ); Wed, 7 Nov 2018 20:58:16 -0500 X-Greylist: delayed 330 seconds by postgrey-1.27 at vger.kernel.org; Wed, 07 Nov 2018 20:58:09 EST Received: from sntmail10s.snt-is.com (unknown [10.203.32.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by skedge04.snt-world.com (Postfix) with ESMTPS id 4E69C67A879; Wed, 7 Nov 2018 17:21:32 +0100 (CET) Received: from sntmail11s.snt-is.com (10.203.32.181) by sntmail10s.snt-is.com (10.203.32.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1466.3; Wed, 7 Nov 2018 17:21:31 +0100 Received: from sntmail11s.snt-is.com ([fe80::b972:ad22:ada5:7c6a]) by sntmail11s.snt-is.com ([fe80::b972:ad22:ada5:7c6a%4]) with mapi id 15.01.1466.003; Wed, 7 Nov 2018 17:21:31 +0100 From: Schrempf Frieder To: Yogesh Narayan Gaur , "linux-mtd@lists.infradead.org" , "boris.brezillon@bootlin.com" , "marek.vasut@gmail.com" , "broonie@kernel.org" , "linux-spi@vger.kernel.org" , "devicetree@vger.kernel.org" CC: "robh@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "computersforpeace@gmail.com" , "frieder.schrempf@exceet.de" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH RESEND v4 1/5] spi: spi-mem: Add driver for NXP FlexSPI controller Thread-Topic: [PATCH RESEND v4 1/5] spi: spi-mem: Add driver for NXP FlexSPI controller Thread-Index: AQHUaq5Zw8dTea51OkCzSQw6GuFeNKVEhcEA Date: Wed, 7 Nov 2018 16:21:31 +0000 Message-ID: References: <1540284888-32307-1-git-send-email-yogeshnarayan.gaur@nxp.com> <1540284888-32307-2-git-send-email-yogeshnarayan.gaur@nxp.com> In-Reply-To: <1540284888-32307-2-git-send-email-yogeshnarayan.gaur@nxp.com> Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.25.9.42] x-c2processedorg: 51b406b7-48a2-4d03-b652-521f56ac89f3 Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-SnT-MailScanner-Information: Please contact the ISP for more information X-SnT-MailScanner-ID: 4E69C67A879.A0144 X-SnT-MailScanner: Found to be clean X-SnT-MailScanner-SpamCheck: X-SnT-MailScanner-From: frieder.schrempf@kontron.de X-SnT-MailScanner-To: boris.brezillon@bootlin.com, broonie@kernel.org, computersforpeace@gmail.com, devicetree@vger.kernel.org, frieder.schrempf@exceet.de, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-spi@vger.kernel.org, marek.vasut@gmail.com, mark.rutland@arm.com, robh@kernel.org, shawnguo@kernel.org, yogeshnarayan.gaur@nxp.com X-Spam-Status: No Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgWW9nZXNoLA0KDQpJIGRpZG4ndCBoYXZlIHRpbWUgdG8gbG9vayBhdCBhbGwgb2YgdGhlIGNv ZGUsIGJ1dCBuZXZlcnRoZWxlc3MgaGVyZSBhcmUgDQpzb21lIGNvbW1lbnRzLg0KDQpPbiAyMy4x MC4xOCAxMDo1NiwgWW9nZXNoIE5hcmF5YW4gR2F1ciB3cm90ZToNCj4gLSBBZGQgZHJpdmVyIGZv ciBOWFAgRmxleFNQSSBob3N0IGNvbnRyb2xsZXINCj4gDQo+ICgwKSBXaGF0IGlzIHRoZSBGbGV4 U1BJIGNvbnRyb2xsZXI/DQo+ICAgRmxleFNQSSBpcyBhIGZsZXhzaWJsZSBTUEkgaG9zdCBjb250 cm9sbGVyIHdoaWNoIHN1cHBvcnRzIHR3byBTUEkNCj4gICBjaGFubmVscyBhbmQgdXAgdG8gNCBl eHRlcm5hbCBkZXZpY2VzLiBFYWNoIGNoYW5uZWwgc3VwcG9ydHMNCj4gICBTaW5nbGUvRHVhbC9R dWFkL09jdGFsIG1vZGUgZGF0YSB0cmFuc2ZlciAoMS8yLzQvOCBiaWRpcmVjdGlvbmFsDQo+ICAg ZGF0YSBsaW5lcykgaS5lLiBGbGV4U1BJIGFjdHMgYXMgYW4gaW50ZXJmYWNlIHRvIGV4dGVybmFs IGRldmljZXMsDQo+ICAgbWF4aW11bSA0LCBlYWNoIHdpdGggdXAgdG8gOCBiaWRpcmVjdGlvbmFs IGRhdGEgbGluZXMuDQo+IA0KPiAgIEl0IHVzZXMgbmV3IFNQSSBtZW1vcnkgaW50ZXJmYWNlIG9m IHRoZSBTUEkgZnJhbWV3b3JrIHRvIGlzc3VlDQo+ICAgZmxhc2ggbWVtb3J5IG9wZXJhdGlvbnMg dG8gdXAgdG8gZm91ciBjb25uZWN0ZWQgZmxhc2gNCj4gICBkZXZpY2VzICgyIGJ1c2VzIHdpdGgg MiBDUyBlYWNoKS4NCj4gDQo+ICgxKSBUZXN0ZWQgdGhpcyBkcml2ZXIgd2l0aCB0aGUgbXRkX2Rl YnVnIGFuZCBKRkZTMiBmaWxlc3lzdGVtIHV0aWxpdHkNCj4gICBvbiBOWFAgTFgyMTYwQVJEQiBh bmQgTFgyMTYwQVFEUyB0YXJnZXRzLg0KPiAgIExYMjE2MEFSREIgaXMgaGF2aW5nIHR3byBOT1Ig c2xhdmUgZGV2aWNlIGNvbm5lY3RlZCBvbiBzaW5nbGUgYnVzIEENCj4gICBpLmUuIEEwIGFuZCBB MSAoQ1MwIGFuZCBDUzEpLg0KPiAgIExYMjE2MEFRRFMgaXMgaGF2aW5nIHR3byBOT1Igc2xhdmUg ZGV2aWNlIGNvbm5lY3RlZCBvbiBzZXBhcmF0ZSBidXNlcw0KPiAgIG9uZSBmbGFzaCBvbiBBMCBh bmQgc2Vjb25kIG9uIEIxIGkuZS4gKENTMCBhbmQgQ1MzKS4NCj4gICBWZXJpZmllZCB0aGlzIGRy aXZlciBvbiBmb2xsb3dpbmcgU1BJIE5PUiBmbGFzaGVzOg0KPiAgICAgIE1pY3JvbiwgbXQzNXh1 NTEyYWIsIFtSZWFkIC0gMSBiaXQgbW9kZV0NCj4gICAgICBDeXByZXNzLCBzMjVmbDUxMnMsIFtS ZWFkIC0gMS8yLzQgYml0IG1vZGVdDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBZb2dlc2ggR2F1ciA8 eW9nZXNobmFyYXlhbi5nYXVyQG54cC5jb20+DQo+IC0tLQ0KPiBDaGFuZ2VzIGZvciB2NDoNCj4g LSBJbmNvcnBvcmF0ZSBCb3JpcyByZXZpZXcgY29tbWVudHMNCj4gICAgKiBVc2UgcmVhZGxfcG9s bF90aW1lb3V0KCkgaW5zdGVhZCBvZiBidXN5IGxvb3BpbmcuDQo+ICAgICogUmUtZGVmaW5lIHJl Z2lzdGVyIG1hc2tpbmcgYXMgcGVyIGNvbW1lbnQuDQo+ICAgICogRHJvcCBmc3BpX2RldnR5cGUg ZW51bS4NCj4gQ2hhbmdlcyBmb3IgdjM6DQo+IC0gQWRkZWQgZW5kaWFubmVzcyBmbGFnIGluIHBs YXRmb3JtIHNwZWNpZmljIHN0cnVjdHVyZSBpbnN0ZWFkIG9mIERUUy4NCj4gLSBNb2RpZmllZCBu eHBfZnNwaV9yZWFkX2FoYigpLCByZW1vdmVkIHJlbWFwcGluZyBjb2RlLg0KPiAtIEFkZGVkIEJv cmlzIGFuZCBGcmllZGVyIGFzIEF1dGhvciBhbmQgcHJvdmlkZWQgcmVmZXJlbmNlIG9mIHNwaS1m c2wtcXNwaS5jDQo+IENoYW5nZXMgZm9yIHYyOg0KPiAtIEluY29ycG9yYXRlZCBCb3JpcyByZXZp ZXcgY29tbWVudHMuDQo+IC0gUmVtb3ZlIGRlcGVuZGVuY3kgb2YgZHJpdmVyIG92ZXIgY29ubmVj dGVkIGZsYXNoIGRldmljZSBzaXplLg0KPiAtIE1vZGlmaWVkIHRoZSBsb2dpYyB0byBzZWxlY3Qg cmVxdWVzdGVkIENTLg0KPiAtIFJlbW92ZSBTUEktT2N0YWwgTWFjcm9zLg0KPiANCj4gICBkcml2 ZXJzL3NwaS9LY29uZmlnICAgICAgICB8ICAgMTAgKw0KPiAgIGRyaXZlcnMvc3BpL01ha2VmaWxl ICAgICAgIHwgICAgMSArDQo+ICAgZHJpdmVycy9zcGkvc3BpLW54cC1mc3BpLmMgfCAxMTU4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICAgMyBmaWxlcyBj aGFuZ2VkLCAxMTY5IGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zcGkvc3BpLW54cC1mc3BpLmMNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29u ZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZw0KPiBpbmRleCBhZDVkNjhlLi42OGRhODc0IDEwMDY0 NA0KPiAtLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvc3BpL0tjb25m aWcNCj4gQEAgLTI1MSw2ICsyNTEsMTYgQEAgY29uZmlnIFNQSV9GU0xfTFBTUEkNCj4gICAJaGVs cA0KPiAgIAkgIFRoaXMgZW5hYmxlcyBGcmVlc2NhbGUgaS5NWCBMUFNQSSBjb250cm9sbGVycyBp biBtYXN0ZXIgbW9kZS4NCj4gICANCj4gK2NvbmZpZyBTUElfTlhQX0ZMRVhTUEkNCj4gKwl0cmlz dGF0ZSAiTlhQIEZsZXggU1BJIGNvbnRyb2xsZXIiDQo+ICsJZGVwZW5kcyBvbiBBUkNIX0xBWUVS U0NBUEUgfHwgSEFTX0lPTUVNDQo+ICsJaGVscA0KPiArCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQg Zm9yIHRoZSBGbGV4IFNQSSBjb250cm9sbGVyIGluIG1hc3RlciBtb2RlLg0KPiArCSAgVXAgdG8g Zm91ciBzbGF2ZSBkZXZpY2VzIGNhbiBiZSBjb25uZWN0ZWQgb24gdHdvIGJ1c2VzIHdpdGggdHdv DQo+ICsJICBjaGlwc2VsZWN0cyBlYWNoLg0KPiArCSAgVGhpcyBjb250cm9sbGVyIGRvZXMgbm90 IHN1cHBvcnQgZ2VuZXJpYyBTUEkgbWVzc2FnZXMgYW5kIG9ubHkNCj4gKwkgIHN1cHBvcnRzIHRo ZSBoaWdoLWxldmVsIFNQSSBtZW1vcnkgaW50ZXJmYWNlLg0KPiArDQo+ICAgY29uZmlnIFNQSV9H UElPDQo+ICAgCXRyaXN0YXRlICJHUElPLWJhc2VkIGJpdGJhbmdpbmcgU1BJIE1hc3RlciINCj4g ICAJZGVwZW5kcyBvbiBHUElPTElCIHx8IENPTVBJTEVfVEVTVA0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9zcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQ0KPiBpbmRleCBjYjFmNDM3 Li41MmM5ZjE4IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3NwaS9NYWtlZmlsZQ0KPiArKysgYi9k cml2ZXJzL3NwaS9NYWtlZmlsZQ0KPiBAQCAtNTksNiArNTksNyBAQCBvYmotJChDT05GSUdfU1BJ X01QQzUyeHgpCQkrPSBzcGktbXBjNTJ4eC5vDQo+ICAgb2JqLSQoQ09ORklHX1NQSV9NVDY1WFgp ICAgICAgICAgICAgICAgICs9IHNwaS1tdDY1eHgubw0KPiAgIG9iai0kKENPTkZJR19TUElfTVhT KQkJCSs9IHNwaS1teHMubw0KPiAgIG9iai0kKENPTkZJR19TUElfTlVDOTAwKQkJKz0gc3BpLW51 YzkwMC5vDQo+ICtvYmotJChDT05GSUdfU1BJX05YUF9GTEVYU1BJKQkJKz0gc3BpLW54cC1mc3Bp Lm8NCj4gICBvYmotJChDT05GSUdfU1BJX09DX1RJTlkpCQkrPSBzcGktb2MtdGlueS5vDQo+ICAg c3BpLW9jdGVvbi1vYmpzCQkJCTo9IHNwaS1jYXZpdW0ubyBzcGktY2F2aXVtLW9jdGVvbi5vDQo+ ICAgb2JqLSQoQ09ORklHX1NQSV9PQ1RFT04pCQkrPSBzcGktb2N0ZW9uLm8NCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3BpL3NwaS1ueHAtZnNwaS5jIGIvZHJpdmVycy9zcGkvc3BpLW54cC1mc3Bp LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uZTUxODhiMg0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvc3BpL3NwaS1ueHAtZnNwaS5jDQo+IEBAIC0w LDAgKzEsMTE1OCBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ ICsNCj4gKy8qDQo+ICsgKiBOWFAgRmxleFNQSShGU1BJKSBjb250cm9sbGVyIGRyaXZlci4NCj4g KyAqDQo+ICsgKiBDb3B5cmlnaHQgMjAxOCBOWFAuDQo+ICsgKg0KPiArICogRmxleFNQSSBpcyBh IGZsZXhzaWJsZSBTUEkgaG9zdCBjb250cm9sbGVyIHdoaWNoIHN1cHBvcnRzIHR3byBTUEkNCj4g KyAqIGNoYW5uZWxzIGFuZCB1cCB0byA0IGV4dGVybmFsIGRldmljZXMuIEVhY2ggY2hhbm5lbCBz dXBwb3J0cw0KPiArICogU2luZ2xlL0R1YWwvUXVhZC9PY3RhbCBtb2RlIGRhdGEgdHJhbnNmZXIg KDEvMi80LzggYmlkaXJlY3Rpb25hbA0KPiArICogZGF0YSBsaW5lcykuDQo+ICsgKg0KPiArICog RmxleFNQSSBjb250cm9sbGVyIGlzIGRyaXZlbiBieSB0aGUgTFVUKExvb2stdXAgVGFibGUpIHJl Z2lzdGVycw0KPiArICogTFVUIHJlZ2lzdGVycyBhcmUgYSBsb29rLXVwLXRhYmxlIGZvciBzZXF1 ZW5jZXMgb2YgaW5zdHJ1Y3Rpb25zLg0KPiArICogQSB2YWxpZCBzZXF1ZW5jZSBjb25zaXN0cyBv ZiBmb3VyIExVVCByZWdpc3RlcnMuDQo+ICsgKiBNYXhpbXVtIDMyIExVVCBzZXF1ZW5jZXMgY2Fu IGJlIHByb2dyYW1tZWQgc2ltdWx0YW5lb3VzbHkuDQo+ICsgKg0KPiArICogTFVUcyBhcmUgYmVp bmcgY3JlYXRlZCBhdCBydW4tdGltZSBiYXNlZCBvbiB0aGUgY29tbWFuZHMgcGFzc2VkDQo+ICsg KiBmcm9tIHRoZSBzcGktbWVtIGZyYW1ld29yaywgdGh1cyB1c2luZyBzaW5nbGUgTFVUIGluZGV4 Lg0KPiArICoNCj4gKyAqIFNvZnR3YXJlIHRyaWdnZXJlZCBGbGFzaCByZWFkL3dyaXRlIGFjY2Vz cyBieSBJUCBCdXMuDQo+ICsgKg0KPiArICogTWVtb3J5IG1hcHBlZCByZWFkIGFjY2VzcyBieSBB SEIgQnVzLg0KPiArICoNCj4gKyAqIEJhc2VkIG9uIFNQSSBNRU0gaW50ZXJmYWNlIGFuZCBzcGkt ZnNsLXFzcGkuYyBkcml2ZXIuDQo+ICsgKg0KPiArICogQXV0aG9yOg0KPiArICogICAgIFlvZ2Vz aCBHYXVyIDx5b2dlc2huYXJheWFuLmdhdXJAbnhwLmNvbT4NCj4gKyAqICAgICBCb3JpcyBCcmV6 aWxsaW9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+DQo+ICsgKiAgICAgRnJpZWRlciBT Y2hyZW1wZiA8ZnJpZWRlci5zY2hyZW1wZkBleGNlZXQuZGU+DQo+ICsgKi8NCj4gKw0KPiArI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0K PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbXV0 ZXguaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L29mX2Rl dmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3BtX3Fvcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvaW9wb2xsLmg+DQoNCklmIHlvdSB3b3VsZCBtb3ZlIHRoaXMgYmVsb3cgaW8u aCwgdGhlbiBhbGwgdGhlIGluY2x1ZGVzIHdvdWxkIHN0YXkgaW4gDQphbHBoYWJldGljYWwgb3Jk ZXIgOykNCg0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3NwaS9zcGktbWVtLmg+DQo+ICsNCj4gKy8qDQo+ICsgKiBUaGUgZHJpdmVyIG9ubHkg dXNlcyBvbmUgc2luZ2xlIExVVCBlbnRyeSwgdGhhdCBpcyB1cGRhdGVkIG9uDQo+ICsgKiBlYWNo IGNhbGwgb2YgZXhlY19vcCgpLiBJbmRleCAwIGlzIHByZXNldCBhdCBib290IHdpdGggYSBiYXNp Yw0KPiArICogcmVhZCBvcGVyYXRpb24sIHNvIGxldCdzIHVzZSB0aGUgbGFzdCBlbnRyeSAoMzEp Lg0KPiArICovDQo+ICsjZGVmaW5lCVNFUUlEX0xVVAkJCTMxDQo+ICsNCj4gKy8qIFJlZ2lzdGVy cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8NCj4gKyNkZWZpbmUgRlNQSV9NQ1IwCQkJMHgwMA0KPiAr I2RlZmluZSBGU1BJX01DUjBfQUhCX1RJTUVPVVQoeCkJKCh4KSA8PCAyNCkNCj4gKyNkZWZpbmUg RlNQSV9NQ1IwX0lQX1RJTUVPVVQoeCkJCSgoeCkgPDwgMTYpDQo+ICsjZGVmaW5lIEZTUElfTUNS MF9MRUFSTl9FTgkJQklUKDE1KQ0KPiArI2RlZmluZSBGU1BJX01DUjBfU0NSRlJVTl9FTgkJQklU KDE0KQ0KPiArI2RlZmluZSBGU1BJX01DUjBfT0NUQ09NQl9FTgkJQklUKDEzKQ0KPiArI2RlZmlu ZSBGU1BJX01DUjBfRE9aRV9FTgkJQklUKDEyKQ0KPiArI2RlZmluZSBGU1BJX01DUjBfSFNFTgkJ CUJJVCgxMSkNCj4gKyNkZWZpbmUgRlNQSV9NQ1IwX1NFUkNMS0RJVgkJQklUKDgpDQo+ICsjZGVm aW5lIEZTUElfTUNSMF9BVERGX0VOCQlCSVQoNykNCj4gKyNkZWZpbmUgRlNQSV9NQ1IwX0FSREZf RU4JCUJJVCg2KQ0KPiArI2RlZmluZSBGU1BJX01DUjBfUlhDTEtTUkMoeCkJCSgoeCkgPDwgNCkN Cj4gKyNkZWZpbmUgRlNQSV9NQ1IwX0VORF9DRkcoeCkJCSgoeCkgPDwgMikNCj4gKyNkZWZpbmUg RlNQSV9NQ1IwX01ESVMJCQlCSVQoMSkNCj4gKyNkZWZpbmUgRlNQSV9NQ1IwX1NXUlNUCQkJQklU KDApDQo+ICsNCj4gKyNkZWZpbmUgRlNQSV9NQ1IxCQkJMHgwNA0KPiArI2RlZmluZSBGU1BJX01D UjFfU0VRX1RJTUVPVVQoeCkJKCh4KSA8PCAxNikNCj4gKyNkZWZpbmUgRlNQSV9NQ1IxX0FIQl9U SU1FT1VUKHgpCSh4KQ0KPiArDQo+ICsjZGVmaW5lIEZTUElfTUNSMgkJCTB4MDgNCj4gKyNkZWZp bmUgRlNQSV9NQ1IyX0lETEVfV0FJVCh4KQkJKCh4KSA8PCAyNCkNCj4gKyNkZWZpbmUgRlNQSV9N Q1IyX1NBTUVERVZJQ0VFTgkJQklUKDE1KQ0KPiArI2RlZmluZSBGU1BJX01DUjJfQ0xSTFJQSFMJ CUJJVCgxNCkNCj4gKyNkZWZpbmUgRlNQSV9NQ1IyX0FCUkRBVFNaCQlCSVQoOCkNCj4gKyNkZWZp bmUgRlNQSV9NQ1IyX0FCUkxFQVJOCQlCSVQoNykNCj4gKyNkZWZpbmUgRlNQSV9NQ1IyX0FCUl9S RUFECQlCSVQoNikNCj4gKyNkZWZpbmUgRlNQSV9NQ1IyX0FCUldSSVRFCQlCSVQoNSkNCj4gKyNk ZWZpbmUgRlNQSV9NQ1IyX0FCUkRVTU1ZCQlCSVQoNCkNCj4gKyNkZWZpbmUgRlNQSV9NQ1IyX0FC Ul9NT0RFCQlCSVQoMykNCj4gKyNkZWZpbmUgRlNQSV9NQ1IyX0FCUkNBRERSCQlCSVQoMikNCj4g KyNkZWZpbmUgRlNQSV9NQ1IyX0FCUlJBRERSCQlCSVQoMSkNCj4gKyNkZWZpbmUgRlNQSV9NQ1Iy X0FCUl9DTUQJCUJJVCgwKQ0KPiArDQo+ICsjZGVmaW5lIEZTUElfQUhCQ1IJCQkweDBjDQo+ICsj ZGVmaW5lIEZTUElfQUhCQ1JfUkRBRERST1BUCQlCSVQoNikNCj4gKyNkZWZpbmUgRlNQSV9BSEJD Ul9QUkVGX0VOCQlCSVQoNSkNCj4gKyNkZWZpbmUgRlNQSV9BSEJDUl9CVUZGX0VOCQlCSVQoNCkN Cj4gKyNkZWZpbmUgRlNQSV9BSEJDUl9DQUNIX0VOCQlCSVQoMykNCj4gKyNkZWZpbmUgRlNQSV9B SEJDUl9DTFJUWEJVRgkJQklUKDIpDQo+ICsjZGVmaW5lIEZTUElfQUhCQ1JfQ0xSUlhCVUYJCUJJ VCgxKQ0KPiArI2RlZmluZSBGU1BJX0FIQkNSX1BBUl9FTgkJQklUKDApDQo+ICsNCj4gKyNkZWZp bmUgRlNQSV9JTlRFTgkJCTB4MTANCj4gKyNkZWZpbmUgRlNQSV9JTlRFTl9TQ0xLU0JXUgkJQklU KDkpDQo+ICsjZGVmaW5lIEZTUElfSU5URU5fU0NMS1NCUkQJCUJJVCg4KQ0KPiArI2RlZmluZSBG U1BJX0lOVEVOX0RBVEFMUk5GTAkJQklUKDcpDQo+ICsjZGVmaW5lIEZTUElfSU5URU5fSVBUWFdF CQlCSVQoNikNCj4gKyNkZWZpbmUgRlNQSV9JTlRFTl9JUFJYV0EJCUJJVCg1KQ0KPiArI2RlZmlu ZSBGU1BJX0lOVEVOX0FIQkNNREVSUgkJQklUKDQpDQo+ICsjZGVmaW5lIEZTUElfSU5URU5fSVBD TURFUlIJCUJJVCgzKQ0KPiArI2RlZmluZSBGU1BJX0lOVEVOX0FIQkNNREdFCQlCSVQoMikNCj4g KyNkZWZpbmUgRlNQSV9JTlRFTl9JUENNREdFCQlCSVQoMSkNCj4gKyNkZWZpbmUgRlNQSV9JTlRF Tl9JUENNRERPTkUJCUJJVCgwKQ0KPiArDQo+ICsjZGVmaW5lIEZTUElfSU5UUgkJCTB4MTQNCj4g KyNkZWZpbmUgRlNQSV9JTlRSX1NDTEtTQldSCQlCSVQoOSkNCj4gKyNkZWZpbmUgRlNQSV9JTlRS X1NDTEtTQlJECQlCSVQoOCkNCj4gKyNkZWZpbmUgRlNQSV9JTlRSX0RBVEFMUk5GTAkJQklUKDcp DQo+ICsjZGVmaW5lIEZTUElfSU5UUl9JUFRYV0UJCUJJVCg2KQ0KPiArI2RlZmluZSBGU1BJX0lO VFJfSVBSWFdBCQlCSVQoNSkNCj4gKyNkZWZpbmUgRlNQSV9JTlRSX0FIQkNNREVSUgkJQklUKDQp DQo+ICsjZGVmaW5lIEZTUElfSU5UUl9JUENNREVSUgkJQklUKDMpDQo+ICsjZGVmaW5lIEZTUElf SU5UUl9BSEJDTURHRQkJQklUKDIpDQo+ICsjZGVmaW5lIEZTUElfSU5UUl9JUENNREdFCQlCSVQo MSkNCj4gKyNkZWZpbmUgRlNQSV9JTlRSX0lQQ01ERE9ORQkJQklUKDApDQo+ICsNCj4gKyNkZWZp bmUgRlNQSV9MVVRLRVkJCQkweDE4DQo+ICsjZGVmaW5lIEZTUElfTFVUS0VZX1ZBTFVFCQkweDVB RjA1QUYwDQo+ICsNCj4gKyNkZWZpbmUgRlNQSV9MQ0tDUgkJCTB4MUMNCj4gKw0KPiArI2RlZmlu ZSBGU1BJX0xDS0VSX0xPQ0sJCQkweDENCj4gKyNkZWZpbmUgRlNQSV9MQ0tFUl9VTkxPQ0sJCTB4 Mg0KPiArDQo+ICsjZGVmaW5lIEZTUElfQlVGWENSX0lOVkFMSURfTVNUUklECTB4RQ0KPiArI2Rl ZmluZSBGU1BJX0FIQlJYX0JVRjBDUjAJCTB4MjANCj4gKyNkZWZpbmUgRlNQSV9BSEJSWF9CVUYx Q1IwCQkweDI0DQo+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVGMkNSMAkJMHgyOA0KPiArI2RlZmlu ZSBGU1BJX0FIQlJYX0JVRjNDUjAJCTB4MkMNCj4gKyNkZWZpbmUgRlNQSV9BSEJSWF9CVUY0Q1Iw CQkweDMwDQo+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVGNUNSMAkJMHgzNA0KPiArI2RlZmluZSBG U1BJX0FIQlJYX0JVRjZDUjAJCTB4MzgNCj4gKyNkZWZpbmUgRlNQSV9BSEJSWF9CVUY3Q1IwCQkw eDNDDQo+ICsjZGVmaW5lIEZTUElfQUhCUlhCVUYwQ1I3X1BSRUYJCUJJVCgzMSkNCj4gKw0KPiAr I2RlZmluZSBGU1BJX0FIQlJYX0JVRjBDUjEJCTB4NDANCj4gKyNkZWZpbmUgRlNQSV9BSEJSWF9C VUYxQ1IxCQkweDQ0DQo+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVGMkNSMQkJMHg0OA0KPiArI2Rl ZmluZSBGU1BJX0FIQlJYX0JVRjNDUjEJCTB4NEMNCj4gKyNkZWZpbmUgRlNQSV9BSEJSWF9CVUY0 Q1IxCQkweDUwDQo+ICsjZGVmaW5lIEZTUElfQUhCUlhfQlVGNUNSMQkJMHg1NA0KPiArI2RlZmlu ZSBGU1BJX0FIQlJYX0JVRjZDUjEJCTB4NTgNCj4gKyNkZWZpbmUgRlNQSV9BSEJSWF9CVUY3Q1Ix CQkweDVDDQo+ICsNCj4gKyNkZWZpbmUgRlNQSV9GTFNIQTFDUjAJCQkweDYwDQo+ICsjZGVmaW5l IEZTUElfRkxTSEEyQ1IwCQkJMHg2NA0KPiArI2RlZmluZSBGU1BJX0ZMU0hCMUNSMAkJCTB4NjgN Cj4gKyNkZWZpbmUgRlNQSV9GTFNIQjJDUjAJCQkweDZDDQo+ICsjZGVmaW5lIEZTUElfRkxTSFhD UjBfU1pfS0IJCTEwDQo+ICsjZGVmaW5lIEZTUElfRkxTSFhDUjBfU1ooeCkJCSgoeCkgPj4gRlNQ SV9GTFNIWENSMF9TWl9LQikNCj4gKw0KPiArI2RlZmluZSBGU1BJX0ZMU0hBMUNSMQkJCTB4NzAN Cj4gKyNkZWZpbmUgRlNQSV9GTFNIQTJDUjEJCQkweDc0DQo+ICsjZGVmaW5lIEZTUElfRkxTSEIx Q1IxCQkJMHg3OA0KPiArI2RlZmluZSBGU1BJX0ZMU0hCMkNSMQkJCTB4N0MNCj4gKyNkZWZpbmUg RlNQSV9GTFNIWENSMV9DU0lOVFIoeCkJCSgoeCkgPDwgMTYpDQo+ICsjZGVmaW5lIEZTUElfRkxT SFhDUjFfQ0FTKHgpCQkoKHgpIDw8IDExKQ0KPiArI2RlZmluZSBGU1BJX0ZMU0hYQ1IxX1dBCQlC SVQoMTApDQo+ICsjZGVmaW5lIEZTUElfRkxTSFhDUjFfVENTSCh4KQkJKCh4KSA8PCA1KQ0KPiAr I2RlZmluZSBGU1BJX0ZMU0hYQ1IxX1RDU1MoeCkJCSh4KQ0KPiArDQo+ICsjZGVmaW5lIEZTUElf RkxTSEExQ1IyCQkJMHg4MA0KPiArI2RlZmluZSBGU1BJX0ZMU0hBMkNSMgkJCTB4ODQNCj4gKyNk ZWZpbmUgRlNQSV9GTFNIQjFDUjIJCQkweDg4DQo+ICsjZGVmaW5lIEZTUElfRkxTSEIyQ1IyCQkJ MHg4Qw0KPiArI2RlZmluZSBGU1BJX0ZMU0hYQ1IyX0NMUklOU1AJCUJJVCgyNCkNCj4gKyNkZWZp bmUgRlNQSV9GTFNIWENSMl9BV1JXQUlUCQlCSVQoMTYpDQo+ICsjZGVmaW5lIEZTUElfRkxTSFhD UjJfQVdSU0VRTl9TSElGVAkxMw0KPiArI2RlZmluZSBGU1BJX0ZMU0hYQ1IyX0FXUlNFUUlfU0hJ RlQJOA0KPiArI2RlZmluZSBGU1BJX0ZMU0hYQ1IyX0FSRFNFUU5fU0hJRlQJNQ0KPiArI2RlZmlu ZSBGU1BJX0ZMU0hYQ1IyX0FSRFNFUUlfU0hJRlQJMA0KPiArDQo+ICsjZGVmaW5lIEZTUElfSVBD UjAJCQkweEEwDQo+ICsNCj4gKyNkZWZpbmUgRlNQSV9JUENSMQkJCTB4QTQNCj4gKyNkZWZpbmUg RlNQSV9JUENSMV9JUEFSRU4JCUJJVCgzMSkNCj4gKyNkZWZpbmUgRlNQSV9JUENSMV9TRVFOVU1f U0hJRlQJCTI0DQo+ICsjZGVmaW5lIEZTUElfSVBDUjFfU0VRSURfU0hJRlQJCTE2DQo+ICsjZGVm aW5lIEZTUElfSVBDUjFfSURBVFNaKHgpCQkoeCkNCj4gKw0KPiArI2RlZmluZSBGU1BJX0lQQ01E CQkJMHhCMA0KPiArI2RlZmluZSBGU1BJX0lQQ01EX1RSRwkJCUJJVCgwKQ0KPiArDQo+ICsjZGVm aW5lIEZTUElfRExQUgkJCTB4QjQNCj4gKw0KPiArI2RlZmluZSBGU1BJX0lQUlhGQ1IJCQkweEI4 DQo+ICsjZGVmaW5lIEZTUElfSVBSWEZDUl9DTFIJCUJJVCgwKQ0KPiArI2RlZmluZSBGU1BJX0lQ UlhGQ1JfRE1BX0VOCQlCSVQoMSkNCj4gKyNkZWZpbmUgRlNQSV9JUFJYRkNSX1dNUksoeCkJCSgo eCkgPDwgMikNCj4gKw0KPiArI2RlZmluZSBGU1BJX0lQVFhGQ1IJCQkweEJDDQo+ICsjZGVmaW5l IEZTUElfSVBUWEZDUl9DTFIJCUJJVCgwKQ0KPiArI2RlZmluZSBGU1BJX0lQVFhGQ1JfRE1BX0VO CQlCSVQoMSkNCj4gKyNkZWZpbmUgRlNQSV9JUFRYRkNSX1dNUksoeCkJCSgoeCkgPDwgMikNCj4g Kw0KPiArI2RlZmluZSBGU1BJX0RMTEFDUgkJCTB4QzANCj4gKyNkZWZpbmUgRlNQSV9ETExBQ1Jf T1ZSREVOCQlCSVQoOCkNCj4gKw0KPiArI2RlZmluZSBGU1BJX0RMTEJDUgkJCTB4QzQNCj4gKyNk ZWZpbmUgRlNQSV9ETExCQ1JfT1ZSREVOCQlCSVQoOCkNCj4gKw0KPiArI2RlZmluZSBGU1BJX1NU UzAJCQkweEUwDQo+ICsjZGVmaW5lIEZTUElfU1RTMF9ETFBIQih4KQkJKCh4KSA8PCA4KQ0KPiAr I2RlZmluZSBGU1BJX1NUUzBfRExQSEEoeCkJCSgoeCkgPDwgNCkNCj4gKyNkZWZpbmUgRlNQSV9T VFMwX0NNRF9TUkMoeCkJCSgoeCkgPDwgMikNCj4gKyNkZWZpbmUgRlNQSV9TVFMwX0FSQl9JRExF CQlCSVQoMSkNCj4gKyNkZWZpbmUgRlNQSV9TVFMwX1NFUV9JRExFCQlCSVQoMCkNCj4gKw0KPiAr I2RlZmluZSBGU1BJX1NUUzEJCQkweEU0DQo+ICsjZGVmaW5lIEZTUElfU1RTMV9JUF9FUlJDRCh4 KQkJKCh4KSA8PCAyNCkNCj4gKyNkZWZpbmUgRlNQSV9TVFMxX0lQX0VSUklEKHgpCQkoKHgpIDw8 IDE2KQ0KPiArI2RlZmluZSBGU1BJX1NUUzFfQUhCX0VSUkNEKHgpCQkoKHgpIDw8IDgpDQo+ICsj ZGVmaW5lIEZTUElfU1RTMV9BSEJfRVJSSUQoeCkJCSh4KQ0KPiArDQo+ICsjZGVmaW5lIEZTUElf QUhCU1BOU1QJCQkweEVDDQo+ICsjZGVmaW5lIEZTUElfQUhCU1BOU1RfREFUTEZUKHgpCQkoKHgp IDw8IDE2KQ0KPiArI2RlZmluZSBGU1BJX0FIQlNQTlNUX0JVRklEKHgpCQkoKHgpIDw8IDEpDQo+ ICsjZGVmaW5lIEZTUElfQUhCU1BOU1RfQUNUSVZFCQlCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBG U1BJX0lQUlhGU1RTCQkJMHhGMA0KPiArI2RlZmluZSBGU1BJX0lQUlhGU1RTX1JEQ05UUih4KQkJ KCh4KSA8PCAxNikNCj4gKyNkZWZpbmUgRlNQSV9JUFJYRlNUU19GSUxMKHgpCQkoeCkNCj4gKw0K PiArI2RlZmluZSBGU1BJX0lQVFhGU1RTCQkJMHhGNA0KPiArI2RlZmluZSBGU1BJX0lQVFhGU1RT X1dSQ05UUih4KQkJKCh4KSA8PCAxNikNCj4gKyNkZWZpbmUgRlNQSV9JUFRYRlNUU19GSUxMKHgp CQkoeCkNCj4gKw0KPiArI2RlZmluZSBGU1BJX1JGRFIJCQkweDEwMA0KPiArI2RlZmluZSBGU1BJ X1RGRFIJCQkweDE4MA0KPiArDQo+ICsjZGVmaW5lIEZTUElfTFVUX0JBU0UJCQkweDIwMA0KPiAr I2RlZmluZSBGU1BJX0xVVF9PRkZTRVQJCQkoU0VRSURfTFVUICogNCAqIDQpDQo+ICsjZGVmaW5l IEZTUElfTFVUX1JFRyhpZHgpIFwNCj4gKwkoRlNQSV9MVVRfQkFTRSArIEZTUElfTFVUX09GRlNF VCArIChpZHgpICogNCkNCj4gKw0KPiArLyogcmVnaXN0ZXIgbWFwIGVuZCAqLw0KPiArDQo+ICsv KiBJbnN0cnVjdGlvbiBzZXQgZm9yIHRoZSBMVVQgcmVnaXN0ZXIuICovDQo+ICsjZGVmaW5lIExV VF9TVE9QCQkJMHgwMA0KPiArI2RlZmluZSBMVVRfQ01ECQkJCTB4MDENCj4gKyNkZWZpbmUgTFVU X0FERFIJCQkweDAyDQo+ICsjZGVmaW5lIExVVF9DQUREUl9TRFIJCQkweDAzDQo+ICsjZGVmaW5l IExVVF9NT0RFCQkJMHgwNA0KPiArI2RlZmluZSBMVVRfTU9ERTIJCQkweDA1DQo+ICsjZGVmaW5l IExVVF9NT0RFNAkJCTB4MDYNCj4gKyNkZWZpbmUgTFVUX01PREU4CQkJMHgwNw0KPiArI2RlZmlu ZSBMVVRfTlhQX1dSSVRFCQkJMHgwOA0KPiArI2RlZmluZSBMVVRfTlhQX1JFQUQJCQkweDA5DQo+ ICsjZGVmaW5lIExVVF9MRUFSTl9TRFIJCQkweDBBDQo+ICsjZGVmaW5lIExVVF9EQVRTWl9TRFIJ CQkweDBCDQo+ICsjZGVmaW5lIExVVF9EVU1NWQkJCTB4MEMNCj4gKyNkZWZpbmUgTFVUX0RVTU1Z X1JXRFNfU0RSCQkweDBEDQo+ICsjZGVmaW5lIExVVF9KTVBfT05fQ1MJCQkweDFGDQo+ICsjZGVm aW5lIExVVF9DTURfRERSCQkJMHgyMQ0KPiArI2RlZmluZSBMVVRfQUREUl9ERFIJCQkweDIyDQo+ ICsjZGVmaW5lIExVVF9DQUREUl9ERFIJCQkweDIzDQo+ICsjZGVmaW5lIExVVF9NT0RFX0REUgkJ CTB4MjQNCj4gKyNkZWZpbmUgTFVUX01PREUyX0REUgkJCTB4MjUNCj4gKyNkZWZpbmUgTFVUX01P REU0X0REUgkJCTB4MjYNCj4gKyNkZWZpbmUgTFVUX01PREU4X0REUgkJCTB4MjcNCj4gKyNkZWZp bmUgTFVUX1dSSVRFX0REUgkJCTB4MjgNCj4gKyNkZWZpbmUgTFVUX1JFQURfRERSCQkJMHgyOQ0K PiArI2RlZmluZSBMVVRfTEVBUk5fRERSCQkJMHgyQQ0KPiArI2RlZmluZSBMVVRfREFUU1pfRERS CQkJMHgyQg0KPiArI2RlZmluZSBMVVRfRFVNTVlfRERSCQkJMHgyQw0KPiArI2RlZmluZSBMVVRf RFVNTVlfUldEU19ERFIJCTB4MkQNCj4gKw0KPiArLyoNCj4gKyAqIENhbGN1bGF0ZSBudW1iZXIg b2YgcmVxdWlyZWQgUEFEIGJpdHMgZm9yIExVVCByZWdpc3Rlci4NCj4gKyAqDQo+ICsgKiBUaGUg cGFkIHN0YW5kcyBmb3IgdGhlIG51bWJlciBvZiBJTyBsaW5lcyBbMDo3XS4NCj4gKyAqIEZvciBl eGFtcGxlLCB0aGUgb2N0YWwgcmVhZCBuZWVkcyBlaWdodCBJTyBsaW5lcywNCj4gKyAqIHNvIHlv dSBzaG91bGQgdXNlIExVVF9QQUQoOCkuIFRoaXMgbWFjcm8NCj4gKyAqIHJldHVybnMgMyBpLmUu IHVzZSBlaWdodCAoMl4zKSBJUCBsaW5lcyBmb3IgcmVhZC4NCj4gKyAqLw0KPiArI2RlZmluZSBM VVRfUEFEKHgpIChmbHMoeCkgLSAxKQ0KPiArDQo+ICsvKg0KPiArICogTWFjcm8gZm9yIGNvbnN0 cnVjdGluZyB0aGUgTFVUIGVudHJpZXMgd2l0aCB0aGUgZm9sbG93aW5nDQo+ICsgKiByZWdpc3Rl ciBsYXlvdXQ6DQo+ICsgKg0KPiArICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArICogIHwgSU5TVFIxIHwgUEFEMSB8IE9QUk5EMSB8IElO U1RSMCB8IFBBRDAgfCBPUFJORDAgfA0KPiArICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArICovDQo+ICsjZGVmaW5lIFBBRF9TSElGVAkJ OA0KPiArI2RlZmluZSBJTlNUUl9TSElGVAkJMTANCj4gKyNkZWZpbmUgT1BSTkRfU0hJRlQJCTE2 DQo+ICsNCj4gKy8qIE1hY3JvcyBmb3IgY29uc3RydWN0aW5nIHRoZSBMVVQgcmVnaXN0ZXIuICov DQo+ICsjZGVmaW5lIExVVF9ERUYoaWR4LCBpbnMsIHBhZCwgb3ByKQkJCSAgXA0KPiArCSgoKChp bnMpIDw8IElOU1RSX1NISUZUKSB8ICgocGFkKSA8PCBQQURfU0hJRlQpIHwgXA0KPiArCShvcHIp KSA8PCAoKChpZHgpICUgMikgKiBPUFJORF9TSElGVCkpDQo+ICsNCj4gKy8qIE9wcmFuZHMgZm9y IHRoZSBMVVQgcmVnaXN0ZXIuICovDQoNCnMvT3ByYW5kcy9PcGVyYW5kcw0KDQo+ICsjZGVmaW5l IEFERFI4QklUCQkweDA4DQo+ICsjZGVmaW5lIEFERFIxNkJJVAkJMHgxMA0KPiArI2RlZmluZSBB RERSMjRCSVQJCTB4MTgNCj4gKyNkZWZpbmUgQUREUjMyQklUCQkweDIwDQo+ICsNCj4gKyNkZWZp bmUgUE9MTF9UT1VUX1VTCQk1MDAwDQo+ICsNCj4gK3N0cnVjdCBueHBfZnNwaV9kZXZ0eXBlX2Rh dGEgew0KPiArCXVuc2lnbmVkIGludCByeGZpZm87DQo+ICsJdW5zaWduZWQgaW50IHR4ZmlmbzsN Cj4gKwl1bnNpZ25lZCBpbnQgYWhiX2J1Zl9zaXplOw0KPiArCXVuc2lnbmVkIGludCBxdWlya3M7 DQo+ICsJYm9vbCBsaXR0bGVfZW5kaWFuOw0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBueHBfZnNwaV9kZXZ0eXBlX2RhdGEgbHgyMTYwYV9kYXRhID0gew0KPiArCS5yeGZpZm8g PSBTWl81MTIsICAgICAgIC8qICg2NCAgKiA2NCBiaXRzKSAgKi8NCj4gKwkudHhmaWZvID0gU1pf MUssICAgICAgICAvKiAoMTI4ICogNjQgYml0cykgICovDQo+ICsJLmFoYl9idWZfc2l6ZSA9IFNa XzJLLCAgLyogKDI1NiAqIDY0IGJpdHMpICAqLw0KPiArCS5xdWlya3MgPSAwLA0KPiArCS5saXR0 bGVfZW5kaWFuID0gMSwgICAgIC8qIGxpdHRsZS1lbmRpYW4gICAgKi8NCg0KSSdtIG5vdCBzdXJl IGlmIHRoaXMgaXMgcmVhbGx5IG5lY2Vzc2FyeSwgYnV0IGZvciBhIGJvb2xlYW4gcHJvYmFibHkg DQondHJ1ZScgd291bGQgYmUgYmV0dGVyIHRoYW4gJzEnLg0KDQo+ICt9Ow0KPiArDQo+ICsjZGVm aW5lIE5YUF9GU1BJX01BWF9DSElQU0VMRUNUCQk0DQo+ICsNCj4gK3N0cnVjdCBueHBfZnNwaSB7 DQo+ICsJdm9pZCBfX2lvbWVtICppb2Jhc2U7DQo+ICsJdm9pZCBfX2lvbWVtICphaGJfYWRkcjsN Cj4gKwl1MzIgbWVtbWFwX3BoeTsNCj4gKwl1MzIgbWVtbWFwX3BoeV9zaXplOw0KPiArCXN0cnVj dCBjbGsgKmNsaywgKmNsa19lbjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJc3RydWN0 IGNvbXBsZXRpb24gYzsNCj4gKwljb25zdCBzdHJ1Y3QgbnhwX2ZzcGlfZGV2dHlwZV9kYXRhICpk ZXZ0eXBlX2RhdGE7DQo+ICsJc3RydWN0IG11dGV4IGxvY2s7DQo+ICsJc3RydWN0IHBtX3Fvc19y ZXF1ZXN0IHBtX3Fvc19yZXE7DQo+ICsJaW50IHNlbGVjdGVkOw0KPiArCXZvaWQgKCp3cml0ZSko dTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsNCj4gKwl1MzIgKCpyZWFkKSh2b2lkIF9faW9t ZW0gKmFkZHIpOw0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQgZnNwaV93cml0ZWxfYmUodTMy IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQ0KPiArew0KPiArCWlvd3JpdGUzMmJlKHZhbCwgYWRk cik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGZzcGlfd3JpdGVsKHUzMiB2YWwsIHZvaWQg X19pb21lbSAqYWRkcikNCj4gK3sNCj4gKwlpb3dyaXRlMzIodmFsLCBhZGRyKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHUzMiBmc3BpX3JlYWRsX2JlKHZvaWQgX19pb21lbSAqYWRkcikNCj4gK3sN Cj4gKwlyZXR1cm4gaW9yZWFkMzJiZShhZGRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHUzMiBm c3BpX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkcikNCj4gK3sNCj4gKwlyZXR1cm4gaW9yZWFkMzIo YWRkcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBueHBfZnNwaV9pcnFfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ICt7DQo+ICsJc3RydWN0IG54cF9mc3BpICpm ID0gZGV2X2lkOw0KPiArCXUzMiByZWc7DQo+ICsNCj4gKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8N Cj4gKwlyZWcgPSBmLT5yZWFkKGYtPmlvYmFzZSArIEZTUElfSU5UUik7DQo+ICsJZi0+d3JpdGUo RlNQSV9JTlRSX0lQQ01ERE9ORSwgZi0+aW9iYXNlICsgRlNQSV9JTlRSKTsNCj4gKw0KPiArCWlm IChyZWcgJiBGU1BJX0lOVFJfSVBDTURET05FKQ0KPiArCQljb21wbGV0ZSgmZi0+Yyk7DQo+ICsN Cj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbnhwX2Zz cGlfY2hlY2tfYnVzd2lkdGgoc3RydWN0IG54cF9mc3BpICpmLCB1OCB3aWR0aCkNCj4gK3sNCj4g Kwlzd2l0Y2ggKHdpZHRoKSB7DQo+ICsJY2FzZSAxOg0KPiArCWNhc2UgMjoNCj4gKwljYXNlIDQ6 DQo+ICsJY2FzZSA4Og0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gLUVO T1RTVVBQOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBueHBfZnNwaV9zdXBwb3J0c19vcChz dHJ1Y3Qgc3BpX21lbSAqbWVtLA0KPiArCQkJCSBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3Ap DQo+ICt7DQo+ICsJc3RydWN0IG54cF9mc3BpICpmID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRh dGEobWVtLT5zcGktPm1hc3Rlcik7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IG54cF9m c3BpX2NoZWNrX2J1c3dpZHRoKGYsIG9wLT5jbWQuYnVzd2lkdGgpOw0KPiArDQo+ICsJaWYgKG9w LT5hZGRyLm5ieXRlcykNCj4gKwkJcmV0IHw9IG54cF9mc3BpX2NoZWNrX2J1c3dpZHRoKGYsIG9w LT5hZGRyLmJ1c3dpZHRoKTsNCj4gKw0KPiArCWlmIChvcC0+ZHVtbXkubmJ5dGVzKQ0KPiArCQly ZXQgfD0gbnhwX2ZzcGlfY2hlY2tfYnVzd2lkdGgoZiwgb3AtPmR1bW15LmJ1c3dpZHRoKTsNCj4g Kw0KPiArCWlmIChvcC0+ZGF0YS5uYnl0ZXMpDQo+ICsJCXJldCB8PSBueHBfZnNwaV9jaGVja19i dXN3aWR0aChmLCBvcC0+ZGF0YS5idXN3aWR0aCk7DQo+ICsNCj4gKwlpZiAocmV0KQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rp b25zIG5lZWRlZCBmb3IgdGhlIG9wLCBuZWVkcw0KPiArCSAqIHRvIGZpdCBpbnRvIGEgc2luZ2xl IExVVCBlbnRyeS4NCj4gKwkgKi8NCj4gKwlpZiAob3AtPmFkZHIubmJ5dGVzICsNCj4gKwkgICAo b3AtPmR1bW15Lm5ieXRlcyA/IDE6MCkgKw0KPiArCSAgIChvcC0+ZGF0YS5uYnl0ZXMgPyAxOjAp ID4gNikNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJLyogTWF4IDY0IGR1bW15IGNsb2Nr IGN5Y2xlcyBzdXBwb3J0ZWQgKi8NCj4gKwlpZiAob3AtPmR1bW15LmJ1c3dpZHRoICYmDQo+ICsJ ICAgIChvcC0+ZHVtbXkubmJ5dGVzICogOCAvIG9wLT5kdW1teS5idXN3aWR0aCA+IDY0KSkNCj4g KwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJLyogTWF4IGRhdGEgbGVuZ3RoLCBjaGVjayBjb250 cm9sbGVyIGxpbWl0cyBhbmQgYWxpZ25tZW50ICovDQo+ICsJaWYgKG9wLT5kYXRhLmRpciA9PSBT UElfTUVNX0RBVEFfSU4gJiYNCj4gKwkgICAgKG9wLT5kYXRhLm5ieXRlcyA+IGYtPmRldnR5cGVf ZGF0YS0+YWhiX2J1Zl9zaXplIHx8DQo+ICsJICAgICAob3AtPmRhdGEubmJ5dGVzID4gZi0+ZGV2 dHlwZV9kYXRhLT5yeGZpZm8gLSA0ICYmDQo+ICsJICAgICAgIUlTX0FMSUdORUQob3AtPmRhdGEu bmJ5dGVzLCA4KSkpKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlpZiAob3AtPmRhdGEu ZGlyID09IFNQSV9NRU1fREFUQV9PVVQgJiYNCj4gKwkgICAgb3AtPmRhdGEubmJ5dGVzID4gZi0+ ZGV2dHlwZV9kYXRhLT50eGZpZm8pDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCXJldHVy biB0cnVlOw0KPiArfQ0KPiArDQo+ICsvKiBJbnN0ZWFkIG9mIGJ1c3kgbG9vcGluZyBpbnZva2Ug cmVhZGxfcG9sbF90aW1lb3V0IGZ1bmN0aW9uYWxpdHkuICovDQo+ICtzdGF0aWMgaW50IGZzcGlf cmVhZGxfcG9sbF90b3V0KHN0cnVjdCBueHBfZnNwaSAqZiwgdm9pZCBfX2lvbWVtICpiYXNlLCB1 MzIgcmVnLA0KPiArCQkJCXUzMiBtYXNrLCB1MzIgZGVsYXlfdXMsIHUzMiB0aW1lb3V0X3VzKQ0K DQpZb3UgZG8gbm90IG5lZWQgdG8gcGFzcyAncmVnJyBoZXJlLCB5b3UgY2FuIGp1c3QgdXNlIGEg bG9jYWwgdmFyaWFibGUuDQoNCj4gK3sNCj4gKwl1MzIgbF9tYXNrOw0KPiArDQo+ICsJaWYgKGYt PmRldnR5cGVfZGF0YS0+bGl0dGxlX2VuZGlhbikNCj4gKwkJbF9tYXNrID0gbWFzazsNCj4gKwll bHNlDQo+ICsJCWxfbWFzayA9ICh1MzIpY3B1X3RvX2JlMzIobWFzayk7DQoNCllvdSBjb3VsZCBz aG9ydGVuIHRoaXMgYSBiaXQgYnkganVzdCByZXVzaW5nICdtYXNrJyBhbmQgZHJvcCAnbF9tYXNr Jy4NClNlZSBteSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaW4gdjQgb2YgdGhlIEZTTCBRU1BJ IGRyaXZlci4NCg0KPiArDQo+ICsJcmV0dXJuIHJlYWRsX3BvbGxfdGltZW91dChiYXNlLCByZWcs IChyZWcgJiBsX21hc2spLA0KPiArCQkJCSAgZGVsYXlfdXMsIHRpbWVvdXRfdXMpOw0KPiArfQ0K PiArDQo+ICsvKg0KPiArICogSWYgdGhlIHNsYXZlIGRldmljZSBjb250ZW50IGJlaW5nIGNoYW5n ZWQgYnkgV3JpdGUvRXJhc2UsIG5lZWQgdG8NCj4gKyAqIGludmFsaWRhdGUgdGhlIEFIQiBidWZm ZXIuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IGRvaW5nIHRoZSByZXNldA0KPiArICogb2YgY29u dHJvbGxlciBhZnRlciBzZXR0aW5nIE1DUjBbU1dSRVNFVF0gYml0Lg0KPiArICovDQo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgbnhwX2ZzcGlfaW52YWxpZChzdHJ1Y3QgbnhwX2ZzcGkgKmYpDQo+ICt7 DQo+ICsJdTMyIHJlZzsNCj4gKwlpbnQgcmV0Ow0KPiArCXUzMiBsX21hc2s7DQo+ICsNCj4gKwly ZWcgPSBmLT5yZWFkKGYtPmlvYmFzZSArIEZTUElfTUNSMCk7DQo+ICsJZi0+d3JpdGUocmVnIHwg RlNQSV9NQ1IwX1NXUlNULCBmLT5pb2Jhc2UgKyBGU1BJX01DUjApOw0KPiArDQo+ICsJaWYgKGYt PmRldnR5cGVfZGF0YS0+bGl0dGxlX2VuZGlhbikNCj4gKwkJbF9tYXNrID0gRlNQSV9NQ1IwX1NX UlNUOw0KPiArCWVsc2UNCj4gKwkJbF9tYXNrID0gKHUzMiljcHVfdG9fYmUzMihGU1BJX01DUjBf U1dSU1QpOw0KPiArDQo+ICsJLyogdzFjIHJlZ2lzdGVyLCB3YWl0IHVuaXQgY2xlYXIgKi8NCj4g KwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZi0+aW9iYXNlICsgRlNQSV9NQ1IwLCByZWcsDQo+ ICsJCQkJICEocmVnICYgbF9tYXNrKSwgMCwgUE9MTF9UT1VUX1VTKTsNCg0KSXQgd291bGQgYmUg YmV0dGVyIHRvIGFkZCBhIHBhcmFtZXRlciB0byBmc3BpX3JlYWRsX3BvbGxfdG91dCgpIGZvciAN CmludmVydGluZyB0aGUgYnJlYWsgY29uZGl0aW9uIGFuZCB0aGVuIHJldXNlIHRoaXMgZnVuY3Rp b24gaGVyZS4NCg0KPiArCVdBUk5fT04ocmV0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg bnhwX2ZzcGlfcHJlcGFyZV9sdXQoc3RydWN0IG54cF9mc3BpICpmLA0KPiArCQkJCSBjb25zdCBz dHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0gZi0+ aW9iYXNlOw0KPiArCXUzMiBsdXR2YWxbNF0gPSB7fTsNCj4gKwlpbnQgbHV0aWR4ID0gMSwgaTsN Cj4gKw0KPiArCS8qIGNtZCAqLw0KPiArCWx1dHZhbFswXSB8PSBMVVRfREVGKDAsIExVVF9DTUQs IExVVF9QQUQob3AtPmNtZC5idXN3aWR0aCksDQo+ICsJCQkgICAgIG9wLT5jbWQub3Bjb2RlKTsN Cj4gKw0KPiArCS8qIGFkZHIgYnVzIHdpZHRoICovDQo+ICsJaWYgKG9wLT5hZGRyLm5ieXRlcykg ew0KPiArCQl1MzIgYWRkcmxlbiA9IDA7DQo+ICsNCj4gKwkJaWYgKG9wLT5hZGRyLm5ieXRlcyA9 PSAzKQ0KPiArCQkJYWRkcmxlbiA9IEFERFIyNEJJVDsNCj4gKwkJZWxzZSBpZiAob3AtPmFkZHIu bmJ5dGVzID09IDQpDQo+ICsJCQlhZGRybGVuID0gQUREUjMyQklUOw0KDQpJIGtub3cgd2UgYWxy ZWFkeSBoYWQgdGhpcyAgZGlzY3Vzc2lvbiB3aXRoIEJvcmlzIG9uIHYyLCBidXQgaWYgeW91IGtl ZXAgDQpvbmx5IHN1cHBvcnRpbmcgMyBhbmQgNCBieXRlIGFkcmVzc2VzLCB0aGVuIGl0IHNob3Vs ZCBiZSBkb2N1bWVudGVkIA0Kc29tZXdoZXJlIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoaXMg ZHJpdmVyIGNhbid0IGJlIHVzZWQgdG8gaW50ZXJmYWNlIA0KU1BJIE5BTkQgYW5kIG90aGVyIGZs YXNoIGNoaXBzIHRoYXQgdXNlIGRldmlhbnQgYWRkcmVzcyB3aWR0aHMuDQoNCkFuIGV2ZW4gYmV0 dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIG1ha2UgdGhpcyB3b3JrIHNvbWVob3cuIEkgY2FuJ3Qg c2VlIA0Kd2h5IHRoZSBhcHByb2FjaCBmcm9tIHRoZSBRU1BJIGRyaXZlciB1c2luZyBMVVRfTU9E RSBzaG91bGRuJ3Qgd29yaywgYnV0IA0Kd2hvIGtub3dzLi4uDQoNCkl0J3MgYSBwaXR5LCB0aGF0 IHRoZSBkZXNpZ25lcnMgb2YgdGhlIG5ldyBJUCBzdGlsbCBkaWQgbm90IHJlYWxseSB0YWtlIA0K U1BJIE5BTkQgaW50byBhY2NvdW50Lg0KDQo+ICsNCj4gKwkJbHV0dmFsW2x1dGlkeCAvIDJdIHw9 IExVVF9ERUYobHV0aWR4LCBMVVRfQUREUiwNCj4gKwkJCQkJICAgICAgTFVUX1BBRChvcC0+YWRk ci5idXN3aWR0aCksDQo+ICsJCQkJCSAgICAgIGFkZHJsZW4pOw0KPiArCQlsdXRpZHgrKzsNCj4g Kwl9DQo+ICsNCj4gKwkvKiBkdW1teSBieXRlcywgaWYgbmVlZGVkICovDQo+ICsJaWYgKG9wLT5k dW1teS5uYnl0ZXMpIHsNCj4gKwkJbHV0dmFsW2x1dGlkeCAvIDJdIHw9IExVVF9ERUYobHV0aWR4 LCBMVVRfRFVNTVksDQo+ICsJCS8qDQo+ICsJCSAqIER1ZSB0byBGbGV4U1BJIGNvbnRyb2xsZXIg bGltaXRhdGlvbiBudW1iZXIgb2YgUEFEIGZvciBkdW1teQ0KPiArCQkgKiBidXN3aWR0aCBuZWVk cyB0byBiZSBwcm9ncmFtbWVkIGFzIGVxdWFsIHRvIGRhdGEgYnVzd2lkdGguDQo+ICsJCSAqLw0K PiArCQkJCQkgICAgICBMVVRfUEFEKG9wLT5kYXRhLmJ1c3dpZHRoKSwNCg0KVGhpcyBzZWVtcyBs aWtlIGEgaGFjayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIGJldHRlciBoYW5kbGVkIGJ5 IA0KdGhlIHNwaSBtZW0gbGF5ZXIuIEkgdGhpbmsgeW91IHNob3VsZCBoYXZlIGEgY2hlY2sgZm9y IGRhdGEuYnVzd2lkdGggPT0gDQpkdW1teS5idXN3aWR0aCBpbiBueHBfZnNwaV9zdXBwb3J0c19v cCgpIGFuZCBpZiB0aGF0IGZhaWxzIHRoZSBzcGkgbWVtIA0KbGF5ZXIgbXVzdCBmaW5kIGEgd29y a2luZyBmYWxsYmFjay4gQnV0IEknbSBub3Qgc3VyZSwgc28gd2UgcHJvYmFibHkgDQpuZWVkIHRv IGFzayBCb3Jpcy4NCg0KPiArCQkJCQkgICAgICBvcC0+ZHVtbXkubmJ5dGVzICogOCAvDQo+ICsJ CQkJCSAgICAgIG9wLT5kdW1teS5idXN3aWR0aCk7DQo+ICsJCWx1dGlkeCsrOw0KPiArCX0NCj4g Kw0KPiArCS8qIHJlYWQvd3JpdGUgZGF0YSBieXRlcyAqLw0KPiArCWlmIChvcC0+ZGF0YS5uYnl0 ZXMpIHsNCj4gKwkJbHV0dmFsW2x1dGlkeCAvIDJdIHw9IExVVF9ERUYobHV0aWR4LA0KPiArCQkJ CQkgICAgICBvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOID8NCj4gKwkJCQkJICAgICAg TFVUX05YUF9SRUFEIDogTFVUX05YUF9XUklURSwNCj4gKwkJCQkJICAgICAgTFVUX1BBRChvcC0+ ZGF0YS5idXN3aWR0aCksDQo+ICsJCQkJCSAgICAgIDApOw0KPiArCQlsdXRpZHgrKzsNCj4gKwl9 DQo+ICsNCj4gKwkvKiBzdG9wIGNvbmRpdGlvbi4gKi8NCj4gKwlsdXR2YWxbbHV0aWR4IC8gMl0g fD0gTFVUX0RFRihsdXRpZHgsIExVVF9TVE9QLCAwLCAwKTsNCj4gKw0KPiArCS8qIHVubG9jayBM VVQgKi8NCj4gKwlmLT53cml0ZShGU1BJX0xVVEtFWV9WQUxVRSwgZi0+aW9iYXNlICsgRlNQSV9M VVRLRVkpOw0KPiArCWYtPndyaXRlKEZTUElfTENLRVJfVU5MT0NLLCBmLT5pb2Jhc2UgKyBGU1BJ X0xDS0NSKTsNCj4gKw0KPiArCS8qIGZpbGwgTFVUICovDQo+ICsJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUobHV0dmFsKTsgaSsrKQ0KPiArCQlmLT53cml0ZShsdXR2YWxbaV0sIGJhc2UgKyBG U1BJX0xVVF9SRUcoaSkpOw0KPiArDQo+ICsJZGV2X2RiZyhmLT5kZXYsICJDTURbJXhdIGx1dHZh bFswOiV4IFx0IDE6JXggXHQgMjoleCBcdCAzOiV4XVxuIiwNCj4gKwkJb3AtPmNtZC5vcGNvZGUs IGx1dHZhbFswXSwgbHV0dmFsWzFdLCBsdXR2YWxbMl0sIGx1dHZhbFszXSk7DQo+ICsNCj4gKwkv KiBsb2NrIExVVCAqLw0KPiArCWYtPndyaXRlKEZTUElfTFVUS0VZX1ZBTFVFLCBmLT5pb2Jhc2Ug KyBGU1BJX0xVVEtFWSk7DQo+ICsJZi0+d3JpdGUoRlNQSV9MQ0tFUl9MT0NLLCBmLT5pb2Jhc2Ug KyBGU1BJX0xDS0NSKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBueHBfZnNwaV9jbGtfcHJl cF9lbmFibGUoc3RydWN0IG54cF9mc3BpICpmKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4g KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZi0+Y2xrX2VuKTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGYtPmNsayk7 DQo+ICsJaWYgKHJldCkgew0KPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZi0+Y2xrX2VuKTsN Cj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgbnhwX2ZzcGlfY2xrX2Rpc2FibGVfdW5wcmVwKHN0cnVjdCBueHBfZnNw aSAqZikNCj4gK3sNCj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZi0+Y2xrKTsNCj4gKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoZi0+Y2xrX2VuKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIElu IEZsZXhTUEkgY29udHJvbGxlciwgZmxhc2ggYWNjZXNzIGlzIGJhc2VkIG9uIHZhbHVlIG9mIEZT UElfRkxTSFhYQ1IwDQo+ICsgKiByZWdpc3RlciBhbmQgc3RhcnQgYmFzZSBhZGRyZXNzIG9mIHRo ZSBzbGF2ZSBkZXZpY2UuDQo+ICsgKg0KPiArICoJCQkJCQkJICAgIChIaWdoZXIgYWRkcmVzcykN Cj4gKyAqCQkJCS0tLS0tLS0tICAgIDwtLSBGTFNIQjJDUjANCj4gKyAqCQkJCXwgIEIyICB8DQo+ ICsgKgkJCQl8ICAgICAgfA0KPiArICoJQjIgc3RhcnQgYWRkcmVzcyAtLT4JLS0tLS0tLS0gICAg PC0tIEZMU0hCMUNSMA0KPiArICoJCQkJfCAgQjEgIHwNCj4gKyAqCQkJCXwgICAgICB8DQo+ICsg KglCMSBzdGFydCBhZGRyZXNzIC0tPgktLS0tLS0tLSAgICA8LS0gRkxTSEEyQ1IwDQo+ICsgKgkJ CQl8ICBBMiAgfA0KPiArICoJCQkJfCAgICAgIHwNCj4gKyAqCUEyIHN0YXJ0IGFkZHJlc3MgLS0+ CS0tLS0tLS0tICAgIDwtLSBGTFNIQTFDUjANCj4gKyAqCQkJCXwgIEExICB8DQo+ICsgKgkJCQl8 ICAgICAgfA0KPiArICoJQTEgc3RhcnQgYWRkcmVzcyAtLT4JLS0tLS0tLS0JCSAgICAoTG93ZXIg YWRkcmVzcykNCj4gKyAqDQo+ICsgKg0KPiArICogU3RhcnQgYmFzZSBhZGRyZXNzIGRlZmluZXMg dGhlIHN0YXJ0aW5nIGFkZHJlc3MgcmFuZ2UgZm9yIGdpdmVuIENTIGFuZA0KPiArICogRlNQSV9G TFNIWFhDUjAgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgc2xhdmUgZGV2aWNlIGNvbm5lY3RlZCBh dCBnaXZlbiBDUy4NCj4gKyAqDQo+ICsgKiBCdXQsIGRpZmZlcmVudCB0YXJnZXRzIGFyZSBoYXZp bmcgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiBudW1iZXIgb2YgQ1MsDQo+ICsgKiBzb21lIHRh cmdldHMgb25seSBoYXZlIHNpbmdsZSBDUyBvciB0d28gQ1MgY292ZXJpbmcgY29udHJvbGxlcidz IGZ1bGwNCj4gKyAqIG1lbW9yeSBtYXBwZWQgc3BhY2UgYXJlYS4NCj4gKyAqIFRodXMsIGltcGxl bWVudGF0aW9uIGlzIGJlaW5nIGRvbmUgYXMgaW5kZXBlbmRlbnQgb2YgdGhlIHNpemUgYW5kIG51 bWJlcg0KPiArICogb2YgdGhlIGNvbm5lY3RlZCBzbGF2ZSBkZXZpY2UuDQo+ICsgKiBBc3NpZ24g Y29udHJvbGxlciBtZW1vcnkgbWFwcGVkIHNwYWNlIHNpemUgYXMgdGhlIHNpemUgdG8gdGhlIGNv bm5lY3RlZA0KPiArICogc2xhdmUgZGV2aWNlLg0KPiArICogTWFyayBGTFNIeHhDUjAgYXMgemVy byBpbml0aWFsbHkgYW5kIHRoZW4gYXNzaWduIHZhbHVlIG9ubHkgdG8gdGhlIHNlbGVjdGVkDQo+ ICsgKiBjaGlwLXNlbGVjdCBGbGFzaCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiArICoNCj4g KyAqIEZvciBlLmcuIHRvIGFjY2VzcyBDUzIgKEIxKSwgRkxTSEIxQ1IwIHJlZ2lzdGVyIHdvdWxk IGJlIGVxdWFsIHRvIHRoZQ0KPiArICogbWVtb3J5IG1hcHBlZCBzaXplIG9mIHRoZSBjb250cm9s bGVyLg0KPiArICogVmFsdWUgZm9yIHJlc3Qgb2YgdGhlIENTIEZMU0h4eENSMCByZWdpc3RlciB3 b3VsZCBiZSB6ZXJvLg0KPiArICoNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgbnhwX2ZzcGlfc2Vs ZWN0X21lbShzdHJ1Y3QgbnhwX2ZzcGkgKmYsIHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpDQo+ICt7 DQo+ICsJdW5zaWduZWQgbG9uZyByYXRlID0gc3BpLT5tYXhfc3BlZWRfaHo7DQo+ICsJaW50IHJl dDsNCj4gKwl1aW50NjRfdCBzaXplX2tiOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBSZXR1cm4sIGlm IHByZXZpb3VzbHkgc2VsZWN0ZWQgc2xhdmUgZGV2aWNlIGlzIHNhbWUgYXMgY3VycmVudA0KPiAr CSAqIHJlcXVlc3RlZCBzbGF2ZSBkZXZpY2UuDQo+ICsJICovDQo+ICsJaWYgKGYtPnNlbGVjdGVk ID09IHNwaS0+Y2hpcF9zZWxlY3QpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCS8qIFJlc2V0IEZM U0h4eENSMCByZWdpc3RlcnMgKi8NCj4gKwlmLT53cml0ZSgwLCBmLT5pb2Jhc2UgKyBGU1BJX0ZM U0hBMUNSMCk7DQo+ICsJZi0+d3JpdGUoMCwgZi0+aW9iYXNlICsgRlNQSV9GTFNIQTJDUjApOw0K PiArCWYtPndyaXRlKDAsIGYtPmlvYmFzZSArIEZTUElfRkxTSEIxQ1IwKTsNCj4gKwlmLT53cml0 ZSgwLCBmLT5pb2Jhc2UgKyBGU1BJX0ZMU0hCMkNSMCk7DQo+ICsNCj4gKwkvKiBBc3NpZ24gY29u dHJvbGxlciBtZW1vcnkgbWFwcGVkIHNwYWNlIGFzIHNpemUsIEtCeXRlcywgb2YgZmxhc2guICov DQo+ICsJc2l6ZV9rYiA9IEZTUElfRkxTSFhDUjBfU1ooZi0+bWVtbWFwX3BoeV9zaXplKTsNCj4g Kw0KPiArCXN3aXRjaCAoc3BpLT5jaGlwX3NlbGVjdCkgew0KPiArCWNhc2UgMDoNCj4gKwkJZi0+ d3JpdGUoc2l6ZV9rYiwgZi0+aW9iYXNlICsgRlNQSV9GTFNIQTFDUjApOw0KPiArCQlicmVhazsN Cj4gKwljYXNlIDE6DQo+ICsJCWYtPndyaXRlKHNpemVfa2IsIGYtPmlvYmFzZSArIEZTUElfRkxT SEEyQ1IwKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAyOg0KPiArCQlmLT53cml0ZShzaXplX2ti LCBmLT5pb2Jhc2UgKyBGU1BJX0ZMU0hCMUNSMCk7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgMzoN Cj4gKwkJZi0+d3JpdGUoc2l6ZV9rYiwgZi0+aW9iYXNlICsgRlNQSV9GTFNIQjJDUjApOw0KPiAr CQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlkZXZfZXJyKGYtPmRldiwgIkluLWNvcnJlY3Qg Q1MgcHJvdmlkZWRcbiIpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJZGV2X2RiZyhm LT5kZXYsICJTbGF2ZSBkZXZpY2UgW0NTOiV4XSBzZWxlY3RlZFxuIiwgc3BpLT5jaGlwX3NlbGVj dCk7DQo+ICsNCj4gKwlueHBfZnNwaV9jbGtfZGlzYWJsZV91bnByZXAoZik7DQo+ICsNCj4gKwly ZXQgPSBjbGtfc2V0X3JhdGUoZi0+Y2xrLCByYXRlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1 cm47DQo+ICsNCj4gKwlyZXQgPSBueHBfZnNwaV9jbGtfcHJlcF9lbmFibGUoZik7DQo+ICsJaWYg KHJldCkNCj4gKwkJcmV0dXJuOw0KPiArCWYtPnNlbGVjdGVkID0gc3BpLT5jaGlwX3NlbGVjdDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbnhwX2ZzcGlfcmVhZF9haGIoc3RydWN0IG54cF9m c3BpICpmLCBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJdTMyIGxlbiA9 IG9wLT5kYXRhLm5ieXRlczsNCj4gKw0KPiArCS8qIFJlYWQgb3V0IHRoZSBkYXRhIGRpcmVjdGx5 IGZyb20gdGhlIEFIQiBidWZmZXIuICovDQo+ICsJbWVtY3B5X2Zyb21pbyhvcC0+ZGF0YS5idWYu aW4sIChmLT5haGJfYWRkciArIG9wLT5hZGRyLnZhbCksIGxlbik7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIG54cF9mc3BpX2ZpbGxfdHhmaWZvKHN0cnVjdCBueHBfZnNwaSAqZiwNCj4gKwkJ CQkgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQ0KPiArew0KPiArCXZvaWQgX19pb21lbSAq YmFzZSA9IGYtPmlvYmFzZTsNCj4gKwlpbnQgaSwgaiwgcmV0Ow0KPiArCWludCBzaXplLCB0bXBf c2l6ZSwgd21fc2l6ZTsNCj4gKwl1MzIgZGF0YSA9IDAsIHJlZzsNCj4gKwl1MzIgKnR4YnVmID0g KHUzMiAqKSBvcC0+ZGF0YS5idWYub3V0Ow0KPiArDQo+ICsJLyogY2xlYXIgdGhlIFRYIEZJRk8u ICovDQo+ICsJZi0+d3JpdGUoRlNQSV9JUFRYRkNSX0NMUiwgYmFzZSArIEZTUElfSVBUWEZDUik7 DQo+ICsNCj4gKwkvKiBEZWZhdWx0IHZhbHVlIG9mIHdhdGVyIG1hcmsgbGV2ZWwgaXMgOCBieXRl cy4gKi8NCj4gKwl3bV9zaXplID0gODsNCj4gKwlzaXplID0gb3AtPmRhdGEubmJ5dGVzIC8gd21f c2l6ZTsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQo+ICsJCS8qIFdhaXQgZm9y IFRYRklGTyBlbXB0eSAqLw0KPiArCQlyZXQgPSBmc3BpX3JlYWRsX3BvbGxfdG91dChmLCBmLT5p b2Jhc2UgKyBGU1BJX0lOVFIsIHJlZywNCj4gKwkJCQkJICAgRlNQSV9JTlRSX0lQVFhXRSwgMCwg UE9MTF9UT1VUX1VTKTsNCj4gKwkJV0FSTl9PTihyZXQpOw0KPiArDQo+ICsJCWogPSAwOw0KPiAr CQl0bXBfc2l6ZSA9IHdtX3NpemU7DQo+ICsJCXdoaWxlICh0bXBfc2l6ZSA+IDApIHsNCj4gKwkJ CWRhdGEgPSAwOw0KPiArCQkJbWVtY3B5KCZkYXRhLCB0eGJ1ZiwgNCk7DQo+ICsJCQlmLT53cml0 ZShkYXRhLCBiYXNlICsgRlNQSV9URkRSICsgaiAqIDQpOw0KPiArCQkJdG1wX3NpemUgLT0gNDsN Cj4gKwkJCWorKzsNCj4gKwkJCXR4YnVmICs9IDE7DQo+ICsJCX0NCj4gKwkJZi0+d3JpdGUoRlNQ SV9JTlRSX0lQVFhXRSwgYmFzZSArIEZTUElfSU5UUik7DQo+ICsJfQ0KPiArDQo+ICsJc2l6ZSA9 IG9wLT5kYXRhLm5ieXRlcyAlIHdtX3NpemU7DQo+ICsJaWYgKHNpemUpIHsNCj4gKwkJLyogV2Fp dCBmb3IgVFhGSUZPIGVtcHR5ICovDQo+ICsJCXJldCA9IGZzcGlfcmVhZGxfcG9sbF90b3V0KGYs IGYtPmlvYmFzZSArIEZTUElfSU5UUiwgcmVnLA0KPiArCQkJCQkgICBGU1BJX0lOVFJfSVBUWFdF LCAwLCBQT0xMX1RPVVRfVVMpOw0KPiArCQlXQVJOX09OKHJldCk7DQo+ICsNCj4gKwkJaiA9IDA7 DQo+ICsJCXRtcF9zaXplID0gMDsNCj4gKwkJd2hpbGUgKHNpemUgPiAwKSB7DQo+ICsJCQlkYXRh ID0gMDsNCj4gKwkJCXRtcF9zaXplID0gKHNpemUgPCA0KSA/IHNpemUgOiA0Ow0KPiArCQkJbWVt Y3B5KCZkYXRhLCB0eGJ1ZiwgdG1wX3NpemUpOw0KPiArCQkJZi0+d3JpdGUoZGF0YSwgYmFzZSAr IEZTUElfVEZEUiArIGogKiA0KTsNCj4gKwkJCXNpemUgLT0gdG1wX3NpemU7DQo+ICsJCQlqKys7 DQo+ICsJCQl0eGJ1ZiArPSAxOw0KPiArCQl9DQo+ICsJCWYtPndyaXRlKEZTUElfSU5UUl9JUFRY V0UsIGJhc2UgKyBGU1BJX0lOVFIpOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg bnhwX2ZzcGlfcmVhZF9yeGZpZm8oc3RydWN0IG54cF9mc3BpICpmLA0KPiArCQkJICBjb25zdCBz dHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0gZi0+ aW9iYXNlOw0KPiArCWludCBpLCBqOw0KPiArCWludCBzaXplLCB0bXBfc2l6ZSwgd21fc2l6ZSwg cmV0Ow0KPiArCXUzMiB0bXAgPSAwLCByZWc7DQo+ICsJdTggKmJ1ZiA9IG9wLT5kYXRhLmJ1Zi5p bjsNCj4gKwl1MzIgbGVuID0gb3AtPmRhdGEubmJ5dGVzOw0KPiArDQo+ICsJLyogRGVmYXVsdCB2 YWx1ZSBvZiB3YXRlciBtYXJrIGxldmVsIGlzIDggYnl0ZXMuICovDQo+ICsJd21fc2l6ZSA9IDg7 DQo+ICsNCj4gKwl3aGlsZSAobGVuID4gMCkgew0KPiArCQlzaXplID0gbGVuIC8gd21fc2l6ZTsN Cj4gKw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQo+ICsJCQkvKiBXYWl0IGZv ciBSWEZJRk8gYXZhaWxhYmxlICovDQo+ICsJCQlyZXQgPSBmc3BpX3JlYWRsX3BvbGxfdG91dChm LCBmLT5pb2Jhc2UgKyBGU1BJX0lOVFIsDQo+ICsJCQkJCQkgICByZWcsIEZTUElfSU5UUl9JUFJY V0EsDQo+ICsJCQkJCQkgICAwLCBQT0xMX1RPVVRfVVMpOw0KPiArCQkJV0FSTl9PTihyZXQpOw0K PiArDQo+ICsJCQlqID0gMDsNCj4gKwkJCXRtcF9zaXplID0gd21fc2l6ZTsNCj4gKwkJCXdoaWxl ICh0bXBfc2l6ZSA+IDApIHsNCj4gKwkJCQl0bXAgPSAwOw0KPiArCQkJCXRtcCA9IGYtPnJlYWQo YmFzZSArIEZTUElfUkZEUiArIGogKiA0KTsNCj4gKwkJCQltZW1jcHkoYnVmLCAmdG1wLCA0KTsN Cj4gKwkJCQl0bXBfc2l6ZSAtPSA0Ow0KPiArCQkJCWorKzsNCj4gKwkJCQlidWYgKz0gNDsNCj4g KwkJCX0NCj4gKwkJCS8qIG1vdmUgdGhlIEZJRk8gcG9pbnRlciAqLw0KPiArCQkJZi0+d3JpdGUo RlNQSV9JTlRSX0lQUlhXQSwgYmFzZSArIEZTUElfSU5UUik7DQo+ICsJCQlsZW4gLT0gd21fc2l6 ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCXNpemUgPSBsZW4gJSB3bV9zaXplOw0KPiArDQo+ICsJCWog PSAwOw0KPiArCQlpZiAoc2l6ZSkgew0KPiArCQkJLyogV2FpdCBmb3IgUlhGSUZPIGF2YWlsYWJs ZSAqLw0KPiArCQkJcmV0ID0gZnNwaV9yZWFkbF9wb2xsX3RvdXQoZiwgZi0+aW9iYXNlICsgRlNQ SV9JTlRSLA0KPiArCQkJCQkJICAgcmVnLCBGU1BJX0lOVFJfSVBSWFdBLA0KPiArCQkJCQkJICAg MCwgUE9MTF9UT1VUX1VTKTsNCj4gKwkJCVdBUk5fT04ocmV0KTsNCj4gKw0KPiArCQkJd2hpbGUg KGxlbiA+IDApIHsNCj4gKwkJCQl0bXAgPSAwOw0KPiArCQkJCXNpemUgPSAobGVuIDwgNCkgPyBs ZW4gOiA0Ow0KPiArCQkJCXRtcCA9IGYtPnJlYWQoYmFzZSArIEZTUElfUkZEUiArIGogKiA0KTsN Cj4gKwkJCQltZW1jcHkoYnVmLCAmdG1wLCBzaXplKTsNCj4gKwkJCQlsZW4gLT0gc2l6ZTsNCj4g KwkJCQlqKys7DQo+ICsJCQkJYnVmICs9IHNpemU7DQo+ICsJCQl9DQo+ICsJCX0NCj4gKw0KPiAr CQkvKiBpbnZhbGlkIHRoZSBSWEZJRk8gKi8NCj4gKwkJZi0+d3JpdGUoRlNQSV9JUFJYRkNSX0NM UiwgYmFzZSArIEZTUElfSVBSWEZDUik7DQo+ICsJCS8qIG1vdmUgdGhlIEZJRk8gcG9pbnRlciAq Lw0KPiArCQlmLT53cml0ZShGU1BJX0lOVFJfSVBSWFdBLCBiYXNlICsgRlNQSV9JTlRSKTsNCj4g Kwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbnhwX2ZzcGlfZG9fb3Aoc3RydWN0IG54cF9m c3BpICpmLCBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJdm9pZCBfX2lv bWVtICpiYXNlID0gZi0+aW9iYXNlOw0KPiArCWludCBzZXFudW0gPSAwOw0KPiArCWludCBlcnIg PSAwOw0KPiArCXUzMiByZWc7DQo+ICsNCj4gKwlyZWcgPSBmLT5yZWFkKGJhc2UgKyBGU1BJX0lQ UlhGQ1IpOw0KPiArCS8qIGludmFsaWQgUlhGSUZPIGZpcnN0ICovDQo+ICsJcmVnICY9IH5GU1BJ X0lQUlhGQ1JfRE1BX0VOOw0KPiArCXJlZyA9IHJlZyB8IEZTUElfSVBSWEZDUl9DTFI7DQo+ICsJ Zi0+d3JpdGUocmVnLCBiYXNlICsgRlNQSV9JUFJYRkNSKTsNCj4gKw0KPiArCWluaXRfY29tcGxl dGlvbigmZi0+Yyk7DQo+ICsNCj4gKwlmLT53cml0ZShvcC0+YWRkci52YWwsIGJhc2UgKyBGU1BJ X0lQQ1IwKTsNCj4gKwkvKg0KPiArCSAqIEFsd2F5cyBzdGFydCB0aGUgc2VxdWVuY2UgYXQgdGhl IHNhbWUgaW5kZXggc2luY2Ugd2UgdXBkYXRlDQo+ICsJICogdGhlIExVVCBhdCBlYWNoIGV4ZWNf b3AoKSBjYWxsLiBBbmQgYWxzbyBzcGVjaWZ5IHRoZSBEQVRBDQo+ICsJICogbGVuZ3RoLCBzaW5j ZSBpdCdzIGhhcyBub3QgYmVlbiBzcGVjaWZpZWQgaW4gdGhlIExVVC4NCj4gKwkgKi8NCj4gKwlm LT53cml0ZShvcC0+ZGF0YS5uYnl0ZXMgfA0KPiArCQkgKFNFUUlEX0xVVCA8PCBGU1BJX0lQQ1Ix X1NFUUlEX1NISUZUKSB8DQo+ICsJCSAoc2VxbnVtIDw8IEZTUElfSVBDUjFfU0VRTlVNX1NISUZU KSwNCj4gKwkJIGJhc2UgKyBGU1BJX0lQQ1IxKTsNCj4gKw0KPiArCS8qIFRyaWdnZXIgdGhlIExV VCBub3cuICovDQo+ICsJZi0+d3JpdGUoRlNQSV9JUENNRF9UUkcsIGJhc2UgKyBGU1BJX0lQQ01E KTsNCj4gKw0KPiArCS8qIFdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQuICovDQo+ICsJaWYgKCF3YWl0 X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmYtPmMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKQ0K PiArCQllcnIgPSAtRVRJTUVET1VUOw0KPiArDQo+ICsJLyogSW52b2tlIElQIGRhdGEgcmVhZCwg aWYgcmVxdWVzdCBpcyBvZiBkYXRhIHJlYWQuICovDQo+ICsJaWYgKCFlcnIgJiYgb3AtPmRhdGEu bmJ5dGVzICYmIG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4pDQo+ICsJCW54cF9mc3Bp X3JlYWRfcnhmaWZvKGYsIG9wKTsNCj4gKw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbnhwX2ZzcGlfZXhlY19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBjb25zdCBz dHJ1Y3Qgc3BpX21lbV9vcCAqb3ApDQo+ICt7DQo+ICsJc3RydWN0IG54cF9mc3BpICpmID0gc3Bp X2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7DQo+ICsJdm9pZCBfX2lv bWVtICpiYXNlID0gZi0+aW9iYXNlOw0KPiArCWludCBlcnIgPSAwOw0KPiArCXUzMiBzdGF0dXM7 DQo+ICsNCj4gKwltdXRleF9sb2NrKCZmLT5sb2NrKTsNCj4gKw0KPiArCS8qIFdhaXQgZm9yIGNv bnRyb2xsZXIgYmVpbmcgcmVhZHkuICovDQo+ICsJc3RhdHVzID0gZi0+cmVhZChiYXNlICsgRlNQ SV9TVFMwKTsNCj4gKwllcnIgPSBmc3BpX3JlYWRsX3BvbGxfdG91dChmLCBmLT5pb2Jhc2UgKyBG U1BJX1NUUzAsIHN0YXR1cywNCj4gKwkJCQkgICBGU1BJX1NUUzBfQVJCX0lETEUsIDEsIFBPTExf VE9VVF9VUyk7DQo+ICsJV0FSTl9PTihlcnIpOw0KPiArDQo+ICsJbnhwX2ZzcGlfc2VsZWN0X21l bShmLCBtZW0tPnNwaSk7DQo+ICsNCj4gKwlueHBfZnNwaV9wcmVwYXJlX2x1dChmLCBvcCk7DQo+ ICsJLyoNCj4gKwkgKiBJZiB3ZSBoYXZlIGxhcmdlIGNodW5rcyBvZiBkYXRhLCB3ZSByZWFkIHRo ZW0gdGhyb3VnaCB0aGUgQUhCIGJ1cw0KPiArCSAqIGJ5IGFjY2Vzc2luZyB0aGUgbWFwcGVkIG1l bW9yeS4gSW4gYWxsIG90aGVyIGNhc2VzIHdlIHVzZQ0KPiArCSAqIElQIGNvbW1hbmRzIHRvIGFj Y2VzcyB0aGUgZmxhc2guDQo+ICsJICovDQo+ICsJaWYgKG9wLT5kYXRhLm5ieXRlcyA+IChmLT5k ZXZ0eXBlX2RhdGEtPnJ4ZmlmbyAtIDQpICYmDQo+ICsJICAgIG9wLT5kYXRhLmRpciA9PSBTUElf TUVNX0RBVEFfSU4pIHsNCj4gKwkJbnhwX2ZzcGlfcmVhZF9haGIoZiwgb3ApOw0KPiArCX0gZWxz ZSB7DQo+ICsJCWlmIChvcC0+ZGF0YS5uYnl0ZXMgJiYgb3AtPmRhdGEuZGlyID09IFNQSV9NRU1f REFUQV9PVVQpDQo+ICsJCQlueHBfZnNwaV9maWxsX3R4ZmlmbyhmLCBvcCk7DQo+ICsNCj4gKwkJ ZXJyID0gbnhwX2ZzcGlfZG9fb3AoZiwgb3ApOw0KPiArDQo+ICsJCS8qIEludmFsaWRhdGUgdGhl IGRhdGEgaW4gdGhlIEFIQiBidWZmZXIuICovDQo+ICsJCWlmIChvcC0+ZGF0YS5uYnl0ZXMgJiYg b3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9PVVQpDQo+ICsJCQlueHBfZnNwaV9pbnZhbGlk KGYpOw0KPiArCX0NCj4gKw0KPiArCW11dGV4X3VubG9jaygmZi0+bG9jayk7DQo+ICsNCj4gKwly ZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG54cF9mc3BpX2FkanVzdF9vcF9z aXplKHN0cnVjdCBzcGlfbWVtICptZW0sIHN0cnVjdCBzcGlfbWVtX29wICpvcCkNCj4gK3sNCj4g KwlzdHJ1Y3QgbnhwX2ZzcGkgKmYgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNw aS0+bWFzdGVyKTsNCj4gKw0KPiArCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09V VCkgew0KPiArCQlpZiAob3AtPmRhdGEubmJ5dGVzID4gZi0+ZGV2dHlwZV9kYXRhLT50eGZpZm8p DQo+ICsJCQlvcC0+ZGF0YS5uYnl0ZXMgPSBmLT5kZXZ0eXBlX2RhdGEtPnR4ZmlmbzsNCj4gKwl9 IGVsc2Ugew0KPiArCQlpZiAob3AtPmRhdGEubmJ5dGVzID4gZi0+ZGV2dHlwZV9kYXRhLT5haGJf YnVmX3NpemUpDQo+ICsJCQlvcC0+ZGF0YS5uYnl0ZXMgPSBmLT5kZXZ0eXBlX2RhdGEtPmFoYl9i dWZfc2l6ZTsNCj4gKwkJZWxzZSBpZiAob3AtPmRhdGEubmJ5dGVzID4gKGYtPmRldnR5cGVfZGF0 YS0+cnhmaWZvIC0gNCkpDQo+ICsJCQlvcC0+ZGF0YS5uYnl0ZXMgPSBBTElHTl9ET1dOKG9wLT5k YXRhLm5ieXRlcywgOCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbnhwX2ZzcGlfZGVmYXVsdF9zZXR1cChzdHJ1Y3QgbnhwX2ZzcGkgKmYpDQo+ ICt7DQo+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0gZi0+aW9iYXNlOw0KPiArCWludCByZXQsIGk7 DQo+ICsJdTMyIHJlZywgbF9tYXNrOw0KPiArDQo+ICsJLyogZGlzYWJsZSBhbmQgdW5wcmVwYXJl IGNsb2NrIHRvIGF2b2lkIGdsaXRjaCBwYXNzIHRvIGNvbnRyb2xsZXIgKi8NCj4gKwlueHBfZnNw aV9jbGtfZGlzYWJsZV91bnByZXAoZik7DQo+ICsNCj4gKwkvKiB0aGUgZGVmYXVsdCBmcmVxdWVu Y3ksIHdlIHdpbGwgY2hhbmdlIGl0IGxhdGVyIGlmIG5lY2Vzc2FyeS4gKi8NCj4gKwlyZXQgPSBj bGtfc2V0X3JhdGUoZi0+Y2xrLCAyMDAwMDAwMCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiArCXJldCA9IG54cF9mc3BpX2Nsa19wcmVwX2VuYWJsZShmKTsNCj4gKwlp ZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJLyogUmVzZXQgdGhlIG1vZHVsZSAq Lw0KPiArCWYtPndyaXRlKEZTUElfTUNSMF9TV1JTVCwgYmFzZSArIEZTUElfTUNSMCk7DQo+ICsN Cj4gKwlpZiAoZi0+ZGV2dHlwZV9kYXRhLT5saXR0bGVfZW5kaWFuKQ0KPiArCQlsX21hc2sgPSBG U1BJX01DUjBfU1dSU1Q7DQo+ICsJZWxzZQ0KPiArCQlsX21hc2sgPSAodTMyKWNwdV90b19iZTMy KEZTUElfTUNSMF9TV1JTVCk7DQo+ICsNCj4gKwkvKiB3MWMgcmVnaXN0ZXIsIHdhaXQgdW5pdCBj bGVhciAqLw0KPiArCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChmLT5pb2Jhc2UgKyBGU1BJX01D UjAsIHJlZywNCj4gKwkJCQkgIShyZWcgJiBsX21hc2spLCAwLCBQT0xMX1RPVVRfVVMpOw0KDQpT ZWUgYWJvdmUuIFJldXNlIGZzcGlfcmVhZGxfcG9sbF90b3V0KCkgaGVyZS4NCg0KUmVnYXJkcywN CkZyaWVkZXINCg0KPiArCVdBUk5fT04ocmV0KTsNCj4gKw0KPiArCS8qIERpc2FibGUgdGhlIG1v ZHVsZSAqLw0KPiArCWYtPndyaXRlKEZTUElfTUNSMF9NRElTLCBiYXNlICsgRlNQSV9NQ1IwKTsN Cj4gKw0KPiArCS8qIFJlc2V0IHRoZSBETEwgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZSAqLw0K PiArCWYtPndyaXRlKEZTUElfRExMQUNSX09WUkRFTiwgYmFzZSArIEZTUElfRExMQUNSKTsNCj4g KwlmLT53cml0ZShGU1BJX0RMTEJDUl9PVlJERU4sIGJhc2UgKyBGU1BJX0RMTEJDUik7DQo+ICsN Cj4gKwkvKiBlbmFibGUgbW9kdWxlICovDQo+ICsJZi0+d3JpdGUoRlNQSV9NQ1IwX0FIQl9USU1F T1VUKDB4RkYpIHwgRlNQSV9NQ1IwX0lQX1RJTUVPVVQoMHhGRiksDQo+ICsJCSBiYXNlICsgRlNQ SV9NQ1IwKTsNCj4gKw0KPiArCS8qDQo+ICsJICogRGlzYWJsZSBzYW1lIGRldmljZSBlbmFibGUg Yml0IGFuZCBjb25maWd1cmUgYWxsIHNsYXZlIGRldmljZXMNCj4gKwkgKiBpbmRlcGVuZGVudGx5 Lg0KPiArCSAqLw0KPiArCXJlZyA9IGYtPnJlYWQoZi0+aW9iYXNlICsgRlNQSV9NQ1IyKTsNCj4g KwlyZWcgPSByZWcgJiB+KEZTUElfTUNSMl9TQU1FREVWSUNFRU4pOw0KPiArCWYtPndyaXRlKHJl ZywgYmFzZSArIEZTUElfTUNSMik7DQo+ICsNCj4gKwkvKiBBSEIgY29uZmlndXJhdGlvbiBmb3Ig YWNjZXNzIGJ1ZmZlciAwfjcuICovDQo+ICsJZm9yIChpID0gMDsgaSA8IDc7IGkrKykNCj4gKwkJ Zi0+d3JpdGUoMCwgYmFzZSArIEZTUElfQUhCUlhfQlVGMENSMCArIDQgKiBpKTsNCj4gKw0KPiAr CS8qDQo+ICsJICogU2V0IEFEQVRTWiB3aXRoIHRoZSBtYXhpbXVtIEFIQiBidWZmZXIgc2l6ZSB0 byBpbXByb3ZlIHRoZSByZWFkDQo+ICsJICogcGVyZm9ybWFuY2UuDQo+ICsJICovDQo+ICsJZi0+ d3JpdGUoKGYtPmRldnR5cGVfZGF0YS0+YWhiX2J1Zl9zaXplIC8gOCB8DQo+ICsJCSAgRlNQSV9B SEJSWEJVRjBDUjdfUFJFRiksIGJhc2UgKyBGU1BJX0FIQlJYX0JVRjdDUjApOw0KPiArDQo+ICsJ LyogcHJlZmV0Y2ggYW5kIG5vIHN0YXJ0IGFkZHJlc3MgYWxpZ25tZW50IGxpbWl0YXRpb24gKi8N Cj4gKwlmLT53cml0ZShGU1BJX0FIQkNSX1BSRUZfRU4gfCBGU1BJX0FIQkNSX1JEQUREUk9QVCwN Cj4gKwkJIGJhc2UgKyBGU1BJX0FIQkNSKTsNCj4gKw0KPiArCS8qIEFIQiBSZWFkIC0gU2V0IGx1 dCBzZXF1ZW5jZSBJRCBmb3IgYWxsIENTLiAqLw0KPiArCWYtPndyaXRlKFNFUUlEX0xVVCwgYmFz ZSArIEZTUElfRkxTSEExQ1IyKTsNCj4gKwlmLT53cml0ZShTRVFJRF9MVVQsIGJhc2UgKyBGU1BJ X0ZMU0hBMkNSMik7DQo+ICsJZi0+d3JpdGUoU0VRSURfTFVULCBiYXNlICsgRlNQSV9GTFNIQjFD UjIpOw0KPiArCWYtPndyaXRlKFNFUUlEX0xVVCwgYmFzZSArIEZTUElfRkxTSEIyQ1IyKTsNCj4g Kw0KPiArCWYtPnNlbGVjdGVkID0gLTE7DQo+ICsNCj4gKwkvKiBlbmFibGUgdGhlIGludGVycnVw dCAqLw0KPiArCWYtPndyaXRlKEZTUElfSU5URU5fSVBDTURET05FLCBiYXNlICsgRlNQSV9JTlRF Tik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVj dCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIG54cF9mc3BpX21lbV9vcHMgPSB7DQo+ICsJLmFkanVz dF9vcF9zaXplID0gbnhwX2ZzcGlfYWRqdXN0X29wX3NpemUsDQo+ICsJLnN1cHBvcnRzX29wID0g bnhwX2ZzcGlfc3VwcG9ydHNfb3AsDQo+ICsJLmV4ZWNfb3AgPSBueHBfZnNwaV9leGVjX29wLA0K PiArfTsNCj4gKw0KPiArc3RhdGljIGludCBueHBfZnNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQ0KPiArew0KPiArCXN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscjsNCj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiArCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnAgPSBkZXYtPm9mX25vZGU7DQo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7DQo+ICsJc3Ry dWN0IG54cF9mc3BpICpmOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwljdGxyID0gc3BpX2FsbG9j X21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2YoKmYpKTsNCj4gKwlpZiAoIWN0bHIpDQo+ICsJCXJl dHVybiAtRU5PTUVNOw0KPiArDQo+ICsJY3Rsci0+bW9kZV9iaXRzID0gU1BJX1JYX0RVQUwgfCBT UElfUlhfUVVBRCB8DQo+ICsJCQkgIFNQSV9UWF9EVUFMIHwgU1BJX1RYX1FVQUQ7DQo+ICsNCj4g KwlmID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEoY3Rscik7DQo+ICsJZi0+ZGV2ID0gZGV2 Ow0KPiArCWYtPmRldnR5cGVfZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOw0K PiArCWlmICghZi0+ZGV2dHlwZV9kYXRhKSB7DQo+ICsJCXJldCA9IC1FTk9ERVY7DQo+ICsJCWdv dG8gZXJyX3B1dF9jdHJsOw0KPiArCX0NCj4gKw0KPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGYpOw0KPiArDQo+ICsJLyogZmluZCB0aGUgcmVzb3VyY2VzIC0gY29uZmlndXJhdGlvbiBy ZWdpc3RlciBhZGRyZXNzIHNwYWNlICovDQo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNl X2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImZzcGlfYmFzZSIpOw0KPiArCWYtPmlvYmFz ZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+ICsJaWYgKElTX0VSUihmLT5p b2Jhc2UpKSB7DQo+ICsJCXJldCA9IFBUUl9FUlIoZi0+aW9iYXNlKTsNCj4gKwkJZ290byBlcnJf cHV0X2N0cmw7DQo+ICsJfQ0KPiArDQo+ICsJLyogZmluZCB0aGUgcmVzb3VyY2VzIC0gY29udHJv bGxlciBtZW1vcnkgbWFwcGVkIHNwYWNlICovDQo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImZzcGlfbW1hcCIpOw0KPiArCWYtPmFo Yl9hZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsNCj4gKwlpZiAoSVNfRVJS KGYtPmFoYl9hZGRyKSkgew0KPiArCQlyZXQgPSBQVFJfRVJSKGYtPmFoYl9hZGRyKTsNCj4gKwkJ Z290byBlcnJfcHV0X2N0cmw7DQo+ICsJfQ0KPiArDQo+ICsJLyogYXNzaWduIG1lbW9yeSBtYXBw ZWQgc3RhcnRpbmcgYWRkcmVzcyBhbmQgbWFwcGVkIHNpemUuICovDQo+ICsJZi0+bWVtbWFwX3Bo eSA9IHJlcy0+c3RhcnQ7DQo+ICsJZi0+bWVtbWFwX3BoeV9zaXplID0gcmVzb3VyY2Vfc2l6ZShy ZXMpOw0KPiArDQo+ICsJLyogZmluZCB0aGUgY2xvY2tzICovDQo+ICsJZi0+Y2xrX2VuID0gZGV2 bV9jbGtfZ2V0KGRldiwgImZzcGlfZW4iKTsNCj4gKwlpZiAoSVNfRVJSKGYtPmNsa19lbikpIHsN Cj4gKwkJcmV0ID0gUFRSX0VSUihmLT5jbGtfZW4pOw0KPiArCQlnb3RvIGVycl9wdXRfY3RybDsN Cj4gKwl9DQo+ICsNCj4gKwlmLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZnNwaSIpOw0KPiAr CWlmIChJU19FUlIoZi0+Y2xrKSkgew0KPiArCQlyZXQgPSBQVFJfRVJSKGYtPmNsayk7DQo+ICsJ CWdvdG8gZXJyX3B1dF9jdHJsOw0KPiArCX0NCj4gKw0KPiArCS8qDQo+ICsJICogUi9XIGZ1bmN0 aW9ucyBmb3IgYmlnLSBvciBsaXR0bGUtZW5kaWFuIHJlZ2lzdGVyczoNCj4gKwkgKiBUaGUgRlNQ SSBjb250cm9sbGVyJ3MgZW5kaWFubmVzcyBpcyBpbmRlcGVuZGVudCBvZg0KPiArCSAqIHRoZSBD UFUgY29yZSdzIGVuZGlhbm5lc3MuIFNvIGZhciwgYWx0aG91Z2ggdGhlIENQVQ0KPiArCSAqIGNv cmUgaXMgbGl0dGxlLWVuZGlhbiB0aGUgRlNQSSBjb250cm9sbGVyIGNhbiB1c2UNCj4gKwkgKiBi aWctZW5kaWFuIG9yIGxpdHRsZS1lbmRpYW4uDQo+ICsJICovDQo+ICsJaWYgKGYtPmRldnR5cGVf ZGF0YS0+bGl0dGxlX2VuZGlhbikgew0KPiArCQlmLT53cml0ZSA9IGZzcGlfd3JpdGVsOw0KPiAr CQlmLT5yZWFkID0gZnNwaV9yZWFkbDsNCj4gKwl9IGVsc2Ugew0KPiArCQlmLT53cml0ZSA9IGZz cGlfd3JpdGVsX2JlOw0KPiArCQlmLT5yZWFkID0gZnNwaV9yZWFkbF9iZTsNCj4gKwl9DQo+ICsN Cj4gKwlyZXQgPSBueHBfZnNwaV9jbGtfcHJlcF9lbmFibGUoZik7DQo+ICsJaWYgKHJldCkgew0K PiArCQlkZXZfZXJyKGRldiwgImNhbiBub3QgZW5hYmxlIHRoZSBjbG9ja1xuIik7DQo+ICsJCWdv dG8gZXJyX3B1dF9jdHJsOw0KPiArCX0NCj4gKw0KPiArCS8qIGZpbmQgdGhlIGlycSAqLw0KPiAr CXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4g KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHRoZSBpcnE6ICVkXG4iLCByZXQpOw0KPiAr CQlnb3RvIGVycl9kaXNhYmxlX2NsazsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBkZXZtX3JlcXVl c3RfaXJxKGRldiwgcmV0LA0KPiArCQkJbnhwX2ZzcGlfaXJxX2hhbmRsZXIsIDAsIHBkZXYtPm5h bWUsIGYpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVx dWVzdCBpcnE6ICVkXG4iLCByZXQpOw0KPiArCQlnb3RvIGVycl9kaXNhYmxlX2NsazsNCj4gKwl9 DQo+ICsNCj4gKwltdXRleF9pbml0KCZmLT5sb2NrKTsNCj4gKw0KPiArCWN0bHItPmJ1c19udW0g PSAtMTsNCj4gKwljdGxyLT5udW1fY2hpcHNlbGVjdCA9IE5YUF9GU1BJX01BWF9DSElQU0VMRUNU Ow0KPiArCWN0bHItPm1lbV9vcHMgPSAmbnhwX2ZzcGlfbWVtX29wczsNCj4gKw0KPiArCW54cF9m c3BpX2RlZmF1bHRfc2V0dXAoZik7DQo+ICsNCj4gKwljdGxyLT5kZXYub2Zfbm9kZSA9IG5wOw0K PiArDQo+ICsJcmV0ID0gc3BpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoY3Rscik7DQo+ICsJaWYgKHJl dCkNCj4gKwkJZ290byBlcnJfZGVzdHJveV9tdXRleDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiAr DQo+ICtlcnJfZGVzdHJveV9tdXRleDoNCj4gKwltdXRleF9kZXN0cm95KCZmLT5sb2NrKTsNCj4g Kw0KPiArZXJyX2Rpc2FibGVfY2xrOg0KPiArCW54cF9mc3BpX2Nsa19kaXNhYmxlX3VucHJlcChm KTsNCj4gKw0KPiArZXJyX3B1dF9jdHJsOg0KPiArCXNwaV9jb250cm9sbGVyX3B1dChjdGxyKTsN Cj4gKw0KPiArCWRldl9lcnIoZGV2LCAiTlhQIEZTUEkgcHJvYmUgZmFpbGVkXG4iKTsNCj4gKwly ZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG54cF9mc3BpX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0KPiArCXN0cnVjdCBueHBfZnNwaSAqZiA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArDQo+ICsJLyogZGlzYWJsZSB0aGUgaGFy ZHdhcmUgKi8NCj4gKwlmLT53cml0ZShGU1BJX01DUjBfTURJUywgZi0+aW9iYXNlICsgRlNQSV9N Q1IwKTsNCj4gKw0KPiArCW54cF9mc3BpX2Nsa19kaXNhYmxlX3VucHJlcChmKTsNCj4gKw0KPiAr CW11dGV4X2Rlc3Ryb3koJmYtPmxvY2spOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgbnhwX2ZzcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7 DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbnhwX2ZzcGlfcmVzdW1l KHN0cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgbnhwX2ZzcGkgKmYgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCW54cF9mc3BpX2RlZmF1bHRfc2V0dXAoZik7DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgbnhwX2ZzcGlfZHRfaWRzW10gPSB7DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJueHAs bHgyMTYwYS1mc3BpIiwgLmRhdGEgPSAodm9pZCAqKSZseDIxNjBhX2RhdGEsIH0sDQo+ICsJeyAv KiBzZW50aW5lbCAqLyB9DQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbnhwX2Zz cGlfZHRfaWRzKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG54cF9m c3BpX3BtX29wcyA9IHsNCj4gKwkuc3VzcGVuZAk9IG54cF9mc3BpX3N1c3BlbmQsDQo+ICsJLnJl c3VtZQkJPSBueHBfZnNwaV9yZXN1bWUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBueHBfZnNwaV9kcml2ZXIgPSB7DQo+ICsJLmRyaXZlciA9IHsNCj4gKwkJ Lm5hbWUJPSAibnhwLWZzcGkiLA0KPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBueHBfZnNwaV9kdF9p ZHMsDQo+ICsJCS5wbSA9ICAgJm54cF9mc3BpX3BtX29wcywNCj4gKwl9LA0KPiArCS5wcm9iZSAg ICAgICAgICA9IG54cF9mc3BpX3Byb2JlLA0KPiArCS5yZW1vdmUJCT0gbnhwX2ZzcGlfcmVtb3Zl LA0KPiArfTsNCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobnhwX2ZzcGlfZHJpdmVyKTsNCj4g Kw0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJOWFAgRlNQSSBDb250cm9sbGVyIERyaXZlciIpOw0K PiArTU9EVUxFX0FVVEhPUigiTlhQIFNlbWljb25kdWN0b3IiKTsNCj4gK01PRFVMRV9MSUNFTlNF KCJHUEwgdjIiKTsNCj4g