Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp5128407imm; Tue, 18 Sep 2018 04:56:11 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZqNw0I9XHo+dOy3+fZsZcYvU/TGUmqk2vwi980O1fMxqEbmhSsKjga+9o3aNEUQTrRymvm X-Received: by 2002:a63:2022:: with SMTP id g34-v6mr28223962pgg.235.1537271771448; Tue, 18 Sep 2018 04:56:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537271771; cv=none; d=google.com; s=arc-20160816; b=c8N1MbnyBbrR85rsSNBsggjJqS80al9GO4E+GxOH0k5xqpCWflvmKHMg322M8YyChV 3GnTT7ZvErD/I8OUzHxg09cC0G6XoZcCSTZc7rL7mSp3r9hoeucNgxpAJ04gkmllWNI7 WZls5FuY68zb2/3A50RbvUpYyrfqnfuoGhnGh8CJf0zkbyQ7zt4jWCb9li7B2CXjcK2F VMMPJIQSKk9DezQ8k8ZaaOtcOOzE9wmMEyz+VG/175Q3h89CK3RqL1PIi92yETSGw4ok 8rJVMLZwJqUq17Lty+SjAYgQq7g/3/kTeSJVHMmMiZS4KBl/TdcE8ddrfPTOCPXyUPP2 F5mg== 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 :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=Mn6Z9GT8ZviWbDUffLpE/3mAHengWITqJpYQEiG+zJY=; b=KDMS+2s3P50r24JAQftA42WsG6Gs+KiZPrh+o2ulCoV9zz6NJlDPU7KaZ5E7MjPirw ljKNfMQ6NTg/Pt8LGVz9+JcbIjgdsL4X7lxjkqHwwxzZN4f8G2MiVol9/r9uxxhMAZWA YY/2prmE7Y/bCG8Q9chkbV6lWiSoZ3pVHxIpenj6+qdBO/k2U9wIjPlOzXJ0urm9+m+W QLHvqVj/3/Z29FCxUnGshRvnnDOaWfHpsbBReYo4a5dw4d195/i3VXu/XkT7IGCiTYPt YvqBt8G/nNwZpHUaNcw4ED0h7gqC1+7O/j4uLmyMLmbDEr97goelJRn5Su8/rqnXCsg5 iXzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@renesasgroup.onmicrosoft.com header.s=selector1-renesas-com header.b=f6PtHmFR; 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 e36-v6si17827150pge.507.2018.09.18.04.55.55; Tue, 18 Sep 2018 04:56:11 -0700 (PDT) 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; dkim=pass header.i=@renesasgroup.onmicrosoft.com header.s=selector1-renesas-com header.b=f6PtHmFR; 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 S1729573AbeIRR1q (ORCPT + 99 others); Tue, 18 Sep 2018 13:27:46 -0400 Received: from relmlor3.renesas.com ([210.160.252.173]:53069 "EHLO relmlie2.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726786AbeIRR1q (ORCPT ); Tue, 18 Sep 2018 13:27:46 -0400 Received: from unknown (HELO relmlir2.idc.renesas.com) ([10.200.68.152]) by relmlie2.idc.renesas.com with ESMTP; 18 Sep 2018 20:55:22 +0900 Received: from relmlii2.idc.renesas.com (relmlii2.idc.renesas.com [10.200.68.66]) by relmlir2.idc.renesas.com (Postfix) with ESMTP id 9A4D385697; Tue, 18 Sep 2018 20:55:22 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.53,389,1531753200"; d="scan'208";a="292812110" Received: from mail-ty1jpn01lp0175.outbound.protection.outlook.com (HELO JPN01-TY1-obe.outbound.protection.outlook.com) ([23.103.139.175]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-GCM-SHA384; 18 Sep 2018 20:55:21 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Mn6Z9GT8ZviWbDUffLpE/3mAHengWITqJpYQEiG+zJY=; b=f6PtHmFRWTlUeVOnFqmAxxfmKRox5eRQhK1Ae+ZA5AYkvbEArrScV87J/Z0RxswEk491nVA4l962TUIofWPfQXdJLZXfoxqA1aApQVJ7O1mGT4MfHfJjZ8hy8isKx69HkeDpRiubajaocc/JnIlivD6pC5cUvk+cbMFnoFOKPMA= Received: from TY1PR01MB1769.jpnprd01.prod.outlook.com (52.133.163.146) by TY1PR01MB1406.jpnprd01.prod.outlook.com (10.174.227.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1143.17; Tue, 18 Sep 2018 11:55:16 +0000 Received: from TY1PR01MB1769.jpnprd01.prod.outlook.com ([fe80::90da:703e:a3a9:cd97]) by TY1PR01MB1769.jpnprd01.prod.outlook.com ([fe80::90da:703e:a3a9:cd97%6]) with mapi id 15.20.1143.014; Tue, 18 Sep 2018 11:55:16 +0000 From: Phil Edworthy To: jacopo mondi CC: Geert Uytterhoeven , Laurent Pinchart , Linus Walleij , Simon Horman , "linux-gpio@vger.kernel.org" , "linux-renesas-soc@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH v3 2/3] pinctrl: renesas: Renesas RZ/N1 pinctrl driver Thread-Topic: [PATCH v3 2/3] pinctrl: renesas: Renesas RZ/N1 pinctrl driver Thread-Index: AQHUTqSfDRS9p34fS0yIKdKxrpkM66T125cAgAANvDA= Date: Tue, 18 Sep 2018 11:55:16 +0000 Message-ID: References: <20180917163609.30457-1-phil.edworthy@renesas.com> <20180917163609.30457-3-phil.edworthy@renesas.com> <20180918104330.GO16851@w540> In-Reply-To: <20180918104330.GO16851@w540> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=phil.edworthy@renesas.com; x-originating-ip: [193.141.220.21] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;TY1PR01MB1406;20:LiGpHl/qA1t4F8FXgb8sgNDpPwwC9MaWBVWIdg35/sfq5X+POIOG3TUiVnwMQvv002f/pC6n/yzh9sA+ulMWvK9xuKazIGYRovC4xVNwnLUMG+iehIojXLxmKKZFFQzeKLd4jfMT1mY5jPvxh1uFJbNcmmXxo3IkJLLClT5QcUc= x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 515e10a2-0cdd-406f-955f-08d61d5d99ae x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020);SRVR:TY1PR01MB1406; x-ms-traffictypediagnostic: TY1PR01MB1406: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(788757137089); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(93006095)(93001095)(3231355)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123564045)(20161123558120)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699050);SRVR:TY1PR01MB1406;BCL:0;PCL:0;RULEID:;SRVR:TY1PR01MB1406; x-forefront-prvs: 0799B1B2D7 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(376002)(346002)(396003)(366004)(39860400002)(136003)(199004)(189003)(51914003)(305945005)(7696005)(478600001)(99286004)(14444005)(256004)(68736007)(102836004)(76176011)(7736002)(66066001)(6436002)(6246003)(26005)(105586002)(575784001)(6506007)(86362001)(2900100001)(229853002)(2906002)(186003)(106356001)(5660300001)(8676002)(53546011)(6916009)(6116002)(3846002)(55016002)(486006)(25786009)(54906003)(97736004)(9686003)(5250100002)(11346002)(316002)(44832011)(8936002)(74316002)(81166006)(446003)(53936002)(81156014)(4326008)(33656002)(16200700003)(53946003)(14454004)(476003)(559001)(569006);DIR:OUT;SFP:1102;SCL:1;SRVR:TY1PR01MB1406;H:TY1PR01MB1769.jpnprd01.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 6nWebaBd1AOHq98BhlNwaTfg1fkQmXh96AYB509a+19tGwRjpJxtRLLEyOPgusoHxoyNazn4NHsX9T2iO8a6YWPIBnPQ0yP1xgs6VkqpCmQq9y+56jReQ+ncu6Hp82RMKNY8/Gjp+graG2a3XrTxcvFujVjTVVeGCiLZbgEaZc6Hj7n4QGxR4a1hb0kcqxALTq05Et5PUYiyNSBpxrC/hqaYefLOqJkfCu6eeBFc/6XjaMitgWsTrajTEvt771Stu8PStE4PCB3jGTYIBXbc6X1hwVUldyfSFpShe3ylDGoDKuKBe4NduTvR2q2HAcgJh2JKxcDhYeOir0RsosYroyZbYjSOIDVfCq04Twk8e5g= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: 515e10a2-0cdd-406f-955f-08d61d5d99ae X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Sep 2018 11:55:16.4821 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY1PR01MB1406 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSmFjb3BvLA0KDQpPbiAxOCBTZXB0ZW1iZXIgMjAxOCAxMTo0NCBqYWNvcG8gbW9uZGkgd3Jv dGU6DQo+IEhpIFBoaWwsDQo+ICAgIHRoYW5rcyBmb3IgdGhlIHBhdGNoDQpUaGFua3MgZm9yIHRo ZSByZXZpZXchDQoNCg0KPiBPbiBNb24sIFNlcCAxNywgMjAxOCBhdCAwNTozNjowOFBNICswMTAw LCBQaGlsIEVkd29ydGh5IHdyb3RlOg0KPiA+IFRoaXMgcHJvdmlkZXMgYSBwaW5jdHJsIGRyaXZl ciBmb3IgdGhlIFJlbmVzYXMgUlovTjEgZGV2aWNlIGZhbWlseS4NCj4gPg0KPiA+IEJhc2VkIG9u IGEgcGF0Y2ggb3JpZ2luYWxseSB3cml0dGVuIGJ5IE1pY2hlbCBQb2xsZXQgYXQgUmVuZXNhcy4N Cj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFBoaWwgRWR3b3J0aHkgPHBoaWwuZWR3b3J0aHlAcmVu ZXNhcy5jb20+DQo+ID4gLS0tDQo+ID4gdjM6DQo+ID4gIC0gVXNlIHN0YW5kYXJkIERUIHByb3Bz IGluc3RlYWQgb2YgcHJvcHJpZXRhcnkgb25lcy4NCj4gPiAgLSBSZXBsYWNlIHZpcnR1YWwgcGlu cyB1c2VkIGZvciBNRElPIG11eGluZyB3aXRoIGV4dHJhIGZ1bmNzLg0KPiA+ICAtIFVzZSBwaW5j dHJsX3V0aWxzIGZ1bmNzIHRvIGhhbmRsZSB0aGUgbWFwcy4NCj4gPiAgLSBSZW1vdmUgdGhlIGRi ZyBmdW5jdGlvbnMgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLg0KPiA+DQo+ID4gdjI6DQo+ID4gIC0g Q2hhbmdlIGZpbGVuYW1lIHRvIGdlbmVyaWMgcnpuMSwgaW5zdGVhZCBvZiBkZXZpY2Ugc3BlY2lm aWMuDQo+ID4gIC0gQ2hhbmdlZCBLY29uZmlnIHN5bWJvbCBhbmQgZmlsZSBuYW1lIHRvIGdlbmVy aWMgcnpuMSBmYW1pbHkuDQo+ID4gIC0gQWRkZWQgInJlbmVzYXMscnpuMS1waW5jdHJsIiBjb21w YXRpYmxlIGZhbGxiYWNrIHN0cmluZw0KPiA+ICAtIENoYW5nZXMgc3VnZ2VzdGVkIGJ5IEphY29w byBNb25kaS4gTWFpbmx5IGZvcm1hdHRpbmcsIHBsdXM6DQo+ID4gICAgLSBSZW1vdmVkIGdsb2Jh bCBwdHINCj4gPiAgICAtIFJlbW92ZWQgdW51c2VkIGNvZGUgYWNjZXNzaW5nIHBhcmVudCBvZiBu b2RlLg0KPiA+ICAgIC0gUmVtb3ZlZCBjaGVjayBmb3IgbnVsbCBPRiBucCB0aGF0IGNhbid0IGhh cHBlbi4NCj4gPiAgICAtIFJlcGxhY2VkIG92ZXJsYXBwaW5nIGVudW1zIHdpdGggI2RlZmluZXMN Cj4gPiAgLSBSZW5hbWVkIHNvbWUgdmFyaWFibGVzIGFuZCBzeW1ib2xzIHRvIGNsYXJpZnkgdGhl aXIgdXNlDQo+ID4gIC0gRml4IGVycm9yIGhhbmRsaW5nIGR1cmluZyBwcm9iZQ0KPiA+ICAtIE1v dmUgcHJvYmUgZnJvbSBwb3N0Y29yZV9pbml0Y2FsbCB0byBzdWJzeXNfaW5pdGNhbGwgdG8gZW5z dXJlDQo+ID4gICAgZHJpdmVycyB0aGF0IHJlcXVpcmUgY2xvY2tzIGdldCB0aGVtIGluc3RlYWQg b2YgaGF2aW5nIHRvIGRlZmVyDQo+ID4gICAgcHJvYmluZy4NCj4gPiAtLS0NCj4gPiAgZHJpdmVy cy9waW5jdHJsL0tjb25maWcgICAgICAgIHwgIDEwICsNCj4gPiAgZHJpdmVycy9waW5jdHJsL01h a2VmaWxlICAgICAgIHwgICAxICsNCj4gPiAgZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcnpuMS5j IHwgOTI2DQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmls ZXMgY2hhbmdlZCwgOTM3IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvcGluY3RybC9waW5jdHJsLXJ6bjEuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGluY3RybC9LY29uZmlnIGIvZHJpdmVycy9waW5jdHJsL0tjb25maWcgaW5kZXgNCj4gPiBl ODY3NTJiZTFmMTkuLmU1MjRlYjEwMTM4NCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BpbmN0 cmwvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvcGluY3RybC9LY29uZmlnDQo+ID4gQEAgLTE5 NSw2ICsxOTUsMTYgQEAgY29uZmlnIFBJTkNUUkxfUlpBMQ0KPiA+ICAJaGVscA0KPiA+ICAJICBU aGlzIHNlbGVjdHMgcGluY3RybCBkcml2ZXIgZm9yIFJlbmVzYXMgUlovQTEgcGxhdGZvcm1zLg0K PiA+DQo+ID4gK2NvbmZpZyBQSU5DVFJMX1JaTjENCj4gPiArCWJvb2wgIlJlbmVzYXMgUlovTjEg cGluY3RybCBkcml2ZXIiDQo+ID4gKwlkZXBlbmRzIG9uIE9GDQo+ID4gKwlkZXBlbmRzIG9uIEFS Q0hfUlpOMSB8fCBDT01QSUxFX1RFU1QNCj4gPiArCXNlbGVjdCBHRU5FUklDX1BJTkNUUkxfR1JP VVBTDQo+ID4gKwlzZWxlY3QgR0VORVJJQ19QSU5NVVhfRlVOQ1RJT05TDQo+ID4gKwlzZWxlY3Qg R0VORVJJQ19QSU5DT05GDQo+ID4gKwloZWxwDQo+ID4gKwkgIFRoaXMgc2VsZWN0cyBwaW5jdHJs IGRyaXZlciBmb3IgUmVuZXNhcyBSWi9OMSBkZXZpY2VzLg0KPiA+ICsNCj4gPiAgY29uZmlnIFBJ TkNUUkxfU0lOR0xFDQo+ID4gIAl0cmlzdGF0ZSAiT25lLXJlZ2lzdGVyLXBlci1waW4gdHlwZSBk ZXZpY2UgdHJlZSBiYXNlZCBwaW5jdHJsIGRyaXZlciINCj4gPiAgCWRlcGVuZHMgb24gT0YNCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL01ha2VmaWxlIGIvZHJpdmVycy9waW5jdHJs L01ha2VmaWxlIGluZGV4DQo+ID4gNDZlZjliZDUyMDk2Li5kMDdmOWEyMGY2YWUgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9waW5jdHJsL01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9waW5j dHJsL01ha2VmaWxlDQo+ID4gQEAgLTI3LDYgKzI3LDcgQEAgb2JqLSQoQ09ORklHX1BJTkNUUkxf UElDMzIpCSs9IHBpbmN0cmwtcGljMzIubw0KPiA+ICBvYmotJChDT05GSUdfUElOQ1RSTF9QSVNU QUNISU8pCSs9IHBpbmN0cmwtcGlzdGFjaGlvLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BJTkNUUkxf Uk9DS0NISVApCSs9IHBpbmN0cmwtcm9ja2NoaXAubw0KPiA+ICBvYmotJChDT05GSUdfUElOQ1RS TF9SWkExKQkrPSBwaW5jdHJsLXJ6YTEubw0KPiA+ICtvYmotJChDT05GSUdfUElOQ1RSTF9SWk4x KQkrPSBwaW5jdHJsLXJ6bjEubw0KPiA+ICBvYmotJChDT05GSUdfUElOQ1RSTF9TSU5HTEUpCSs9 IHBpbmN0cmwtc2luZ2xlLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BJTkNUUkxfU0lSRikJKz0gc2ly Zi8NCj4gPiAgb2JqLSQoQ09ORklHX1BJTkNUUkxfU1gxNTBYKQkrPSBwaW5jdHJsLXN4MTUweC5v DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXJ6bjEuYw0KPiA+IGIv ZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcnpuMS5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4 DQo+ID4gMDAwMDAwMDAwMDAwLi44ZjBjYWEyNjZkYmINCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcnpuMS5jDQo+ID4gQEAgLTAsMCArMSw5MjYg QEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4g PiArICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggUmVuZXNhcyBFbGVjdHJvbmljcyBFdXJvcGUg TGltaXRlZA0KPiA+ICsgKg0KPiA+ICsgKiBQaGlsIEVkd29ydGh5IDxwaGlsLmVkd29ydGh5QHJl bmVzYXMuY29tPg0KPiA+ICsgKiBCYXNlZCBvbiBhIGRyaXZlciBvcmlnaW5hbGx5IHdyaXR0ZW4g YnkgTWljaGVsIFBvbGxldCBhdCBSZW5lc2FzLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNs dWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL3J6bjEtcGluY3RybC5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L29mLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmNvbmYt Z2VuZXJpYy5oPiAjaW5jbHVkZQ0KPiA+ICs8bGludXgvcGluY3RybC9waW5jdHJsLmg+ICNpbmNs dWRlIDxsaW51eC9waW5jdHJsL3Bpbm11eC5oPiAjaW5jbHVkZQ0KPiA+ICs8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+ICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ICNpbmNsdWRlICJjb3JlLmgiDQo+ ID4gKyNpbmNsdWRlICJwaW5jb25mLmgiDQo+ID4gKyNpbmNsdWRlICJwaW5jdHJsLXV0aWxzLmgi DQo+ID4gKw0KPiA+ICsvKiBGaWVsZCBwb3NpdGlvbnMgYW5kIG1hc2tzIGluIHRoZSBwaW5tdXgg cmVnaXN0ZXJzICovDQo+ID4gKyNkZWZpbmUgUlpOMV9MMV9QSU5fRFJJVkVfU1RSRU5HVEgJMTAN Cj4gPiArI2RlZmluZSBSWk4xX0wxX1BJTl9EUklWRV9TVFJFTkdUSF80TUEJMA0KPiA+ICsjZGVm aW5lIFJaTjFfTDFfUElOX0RSSVZFX1NUUkVOR1RIXzZNQQkxDQo+ID4gKyNkZWZpbmUgUlpOMV9M MV9QSU5fRFJJVkVfU1RSRU5HVEhfOE1BCTINCj4gPiArI2RlZmluZSBSWk4xX0wxX1BJTl9EUklW RV9TVFJFTkdUSF8xMk1BCTMNCj4gPiArI2RlZmluZSBSWk4xX0wxX1BJTl9QVUxMCQk4DQo+ID4g KyNkZWZpbmUgUlpOMV9MMV9QSU5fUFVMTF9OT05FCQkwDQo+ID4gKyNkZWZpbmUgUlpOMV9MMV9Q SU5fUFVMTF9VUAkJMQ0KPiA+ICsjZGVmaW5lIFJaTjFfTDFfUElOX1BVTExfRE9XTgkJMw0KPiA+ ICsjZGVmaW5lIFJaTjFfTDFfRlVOQ1RJT04JCTANCj4gPiArI2RlZmluZSBSWk4xX0wxX0ZVTkNf TUFTSwkJMHhmDQo+ID4gKyNkZWZpbmUgUlpOMV9MMV9GVU5DVElPTl9MMgkJMHhmDQo+ID4gKw0K PiA+ICsvKg0KPiA+ICsgKiBUaGUgaGFyZHdhcmUgbWFudWFsIGRlc2NyaWJlcyB0d28gbGV2ZWxz IG9mIG11bHRpcGxleGluZywgYnV0IGl0J3MNCj4gPiArbW9yZQ0KPiA+ICsgKiBsb2dpY2FsIHRv IHRoaW5rIG9mIHRoZSBoYXJkd2FyZSBhcyB0aHJlZSBsZXZlbHMsIHdpdGggbGV2ZWwgMw0KPiA+ ICtjb25zaXN0aW5nIG9mDQo+ID4gKyAqIHRoZSBtdWx0aXBsZXhpbmcgZm9yIEV0aGVybmV0IE1E SU8gc2lnbmFscy4NCj4gPiArICoNCj4gPiArICogTGV2ZWwgMSBmdW5jdGlvbnMgZ28gZnJvbSAw IHRvIDksIHdpdGggbGV2ZWwgMSBmdW5jdGlvbiAnMTUnICgweGYpDQo+ID4gK3NwZWNpZnlpbmcN Cj4gPiArICogdGhhdCBsZXZlbCAyIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbnN0ZWFkLiBMZXZlbCAy IGhhcyBhIGxvdCBtb3JlDQo+ID4gK29wdGlvbnMsDQo+ID4gKyAqIGdvaW5nIGZyb20gMCB0byA2 MS4gTGV2ZWwgMyBhbGxvd3Mgc2VsZWN0aW9uIG9mIE1ESU8gZnVuY3Rpb25zDQo+ID4gK3doaWNo IGNhbiBiZQ0KPiA+ICsgKiBmbG9hdGluZywgb3Igb25lIG9mIHNldmVuIGludGVybmFsIHBlcmlw aGVyYWxzLiBVbmZvcnR1bmF0ZWx5LA0KPiA+ICt0aGVyZSBhcmUgdHdvDQo+ID4gKyAqIGxldmVs IDIgZnVuY3Rpb25zIHRoYXQgY2FuIHNlbGVjdCBNRElPLCBhbmQgdHdvIE1ESU8gY2hhbm5lbHMg c28NCj4gPiArd2UgaGF2ZSBmb3VyDQo+ID4gKyAqIHNldHMgb2YgbGV2ZWwgMyBmdW5jdGlvbnMu DQo+ID4gKyAqDQo+ID4gKyAqIEZvciB0aGlzIGRyaXZlciwgd2UndmUgY29tcG91bmRlZCB0aGUg bnVtYmVycyB0b2dldGhlciwgc286DQo+ID4gKyAqICAgIDAgdG8gICA5IGlzIGxldmVsIDENCj4g PiArICogICAxMCB0byAgNzEgaXMgMTAgKyBsZXZlbCAyIG51bWJlcg0KPiA+ICsgKiAgIDcyIHRv ICA3OSBpcyA3MiArIE1ESU8wIHNvdXJjZSBmb3IgbGV2ZWwgMiBNRElPIGZ1bmN0aW9uLg0KPiA+ ICsgKiAgIDgwIHRvICA4NyBpcyA4MCArIE1ESU8wIHNvdXJjZSBmb3IgbGV2ZWwgMiBNRElPX0Ux IGZ1bmN0aW9uLg0KPiA+ICsgKiAgIDg4IHRvICA5NSBpcyA4OCArIE1ESU8xIHNvdXJjZSBmb3Ig bGV2ZWwgMiBNRElPIGZ1bmN0aW9uLg0KPiA+ICsgKiAgIDk2IHRvIDEwMyBpcyA5NiArIE1ESU8x IHNvdXJjZSBmb3IgbGV2ZWwgMiBNRElPX0UxIGZ1bmN0aW9uLg0KPiA+ICsgKiBFeGFtcGxlczoN Cj4gPiArICogIEZ1bmN0aW9uIDI4IGNvcnJlc3BvbmRzIFVBUlQwDQo+ID4gKyAqICBGdW5jdGlv biA3MyBjb3JyZXNwb25kcyB0byBNRElPMCB0byBHTUFDMA0KPiA+ICsgKg0KPiA+ICsgKiBUaGVy ZSBhcmUgMTcwIGNvbmZpZ3VyYWJsZSBwaW5zIChjYWxsZWQgUExfR1BJTyBpbiB0aGUgZGF0YXNo ZWV0KS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBTdHJ1Y3R1cmUgZGV0YWls aW5nIHRoZSBIVyByZWdpc3RlcnMgb24gdGhlIFJaL04xIGRldmljZXMuDQo+ID4gKyAqIEJvdGgg dGhlIExldmVsIDEgbXV4IHJlZ2lzdGVycyBhbmQgTGV2ZWwgMiBtdXggcmVnaXN0ZXJzIGhhdmUg dGhlDQo+ID4gK3NhbWUNCj4gPiArICogc3RydWN0dXJlLiBUaGUgb25seSBkaWZmZXJlbmNlIGlz IHRoYXQgTGV2ZWwgMiBoYXMgYWRkaXRpb25hbCBNRElPDQo+ID4gK3JlZ2lzdGVycw0KPiA+ICsg KiBhdCB0aGUgZW5kLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHJ6bjFfcGluY3RybF9yZWdzIHsN Cj4gPiArCXVuaW9uIHsNCj4gPiArCQl1MzIJY29uZlsxNzBdOw0KPiA+ICsJCXU4CXBhZDBbMHg0 MDBdOw0KPiANCj4gSXMgcGFkMCBhY3R1YWxseSB1c2VkPw0KTm8sIGl0J3MganVzdCB0byBpbXBs ZW1lbnQgdGhlIHBhZGRpbmcuIFdvdWxkIHlvdSBwcmVmZXIgbm90IHVzaW5nIGEgdW5pb24NCmhl cmU/DQoNCj4gPiArCX07DQo+ID4gKwl1MzIJc3RhdHVzX3Byb3RlY3Q7CS8qIDB4NDAwICovDQo+ ID4gKwkvKiBNRElPIG11eCByZWdpc3RlcnMsIGxldmVsMiBvbmx5ICovDQo+ID4gKwl1MzIJbDJf bWRpb1syXTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgcnpuMV9w bXhfZnVuYyAtIGRlc2NyaWJlcyByem4xIHBpbm11eCBmdW5jdGlvbnMNCj4gPiArICogQG5hbWU6 IHRoZSBuYW1lIG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24NCj4gPiArICogQGdyb3VwczogY29y cmVzcG9uZGluZyBwaW4gZ3JvdXBzDQo+ID4gKyAqIEBudW1fZ3JvdXBzOiB0aGUgbnVtYmVyIG9m IGdyb3Vwcw0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHJ6bjFfcG14X2Z1bmMgew0KPiA+ICsJY29u c3QgY2hhciAqbmFtZTsNCj4gPiArCWNvbnN0IGNoYXIgKipncm91cHM7DQo+ID4gKwl1bnNpZ25l ZCBpbnQgbnVtX2dyb3VwczsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1 Y3QgcnpuMV9waW5fZ3JvdXAgLSBkZXNjcmliZXMgYW4gcnpuMSBwaW4gZ3JvdXANCj4gPiArICog QG5hbWU6IHRoZSBuYW1lIG9mIHRoaXMgc3BlY2lmaWMgcGluIGdyb3VwDQo+ID4gKyAqIEBmdW5j OiB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gc2VsZWN0ZWQgYnkgdGhpcyBncm91cA0KPiA+ICsg KiBAbnBpbnM6IHRoZSBudW1iZXIgb2YgcGlucyBpbiB0aGlzIGdyb3VwIGFycmF5LCBpLmUuIHRo ZSBudW1iZXIgb2YNCj4gPiArICoJZWxlbWVudHMgaW4gLnBpbnMgc28gd2UgY2FuIGl0ZXJhdGUg b3ZlciB0aGF0IGFycmF5DQo+ID4gKyAqIEBwaW5faWRzOiBhcnJheSBvZiBwaW5faWRzLCBpLmUu IHRoZSB2YWx1ZSB1c2VkIHRvIHNlbGVjdCB0aGUgbXV4DQo+ID4gKyAqIEBwaW5zOiBhcnJheSBv ZiBwaW5zLiBOZWVkZWQgZHVlIHRvIHBpbmN0cmxfb3BzLmdldF9ncm91cF9waW5zKCkNCj4gPiAr Ki8gc3RydWN0IHJ6bjFfcGluX2dyb3VwIHsNCj4gPiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ID4g Kwljb25zdCBjaGFyICpmdW5jOw0KPiA+ICsJdW5zaWduZWQgaW50IG5waW5zOw0KPiA+ICsJdTgg KnBpbl9pZHM7DQo+ID4gKwl1MzIgKnBpbnM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg cnpuMV9waW5jdHJsIHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArCXN0cnVjdCBj bGsgKmNsazsNCj4gPiArCXN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bDsNCj4gPiArCXN0cnVjdCBy em4xX3BpbmN0cmxfcmVncyBfX2lvbWVtICpsZXYxOw0KPiA+ICsJc3RydWN0IHJ6bjFfcGluY3Ry bF9yZWdzIF9faW9tZW0gKmxldjI7DQo+ID4gKwl1MzIgbGV2MV9wcm90ZWN0X3BoeXM7DQo+ID4g Kwl1MzIgbGV2Ml9wcm90ZWN0X3BoeXM7DQo+ID4gKwlpbnQgbWRpb19mdW5jWzJdOw0KPiA+ICsN Cj4gPiArCXN0cnVjdCByem4xX3Bpbl9ncm91cCAqZ3JvdXBzOw0KPiA+ICsJdW5zaWduZWQgaW50 IG5ncm91cHM7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHJ6bjFfcG14X2Z1bmMgKmZ1bmN0aW9uczsN Cj4gPiArCXVuc2lnbmVkIGludCBuZnVuY3Rpb25zOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArI2Rl ZmluZSBSWk4xX1BJTlNfUFJPUCAicGlubXV4Ig0KPiA+ICsNCj4gPiArI2RlZmluZSBSWk4xX1BJ TihwaW4pIFBJTkNUUkxfUElOKHBpbiwgInBsX2dwaW8iI3BpbikNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcGluY3RybF9waW5fZGVzYyByem4xX3BpbnNbXSA9IHsNCj4gPiArCVJa TjFfUElOKDApLCBSWk4xX1BJTigxKSwgUlpOMV9QSU4oMiksIFJaTjFfUElOKDMpLA0KPiBSWk4x X1BJTig0KSwNCj4gPiArCVJaTjFfUElOKDUpLCBSWk4xX1BJTig2KSwgUlpOMV9QSU4oNyksIFJa TjFfUElOKDgpLA0KPiBSWk4xX1BJTig5KSwNCj4gPiArCVJaTjFfUElOKDEwKSwgUlpOMV9QSU4o MTEpLCBSWk4xX1BJTigxMiksIFJaTjFfUElOKDEzKSwNCj4gUlpOMV9QSU4oMTQpLA0KPiA+ICsJ UlpOMV9QSU4oMTUpLCBSWk4xX1BJTigxNiksIFJaTjFfUElOKDE3KSwgUlpOMV9QSU4oMTgpLA0K PiBSWk4xX1BJTigxOSksDQo+ID4gKwlSWk4xX1BJTigyMCksIFJaTjFfUElOKDIxKSwgUlpOMV9Q SU4oMjIpLCBSWk4xX1BJTigyMyksDQo+IFJaTjFfUElOKDI0KSwNCj4gPiArCVJaTjFfUElOKDI1 KSwgUlpOMV9QSU4oMjYpLCBSWk4xX1BJTigyNyksIFJaTjFfUElOKDI4KSwNCj4gUlpOMV9QSU4o MjkpLA0KPiA+ICsJUlpOMV9QSU4oMzApLCBSWk4xX1BJTigzMSksIFJaTjFfUElOKDMyKSwgUlpO MV9QSU4oMzMpLA0KPiBSWk4xX1BJTigzNCksDQo+ID4gKwlSWk4xX1BJTigzNSksIFJaTjFfUElO KDM2KSwgUlpOMV9QSU4oMzcpLCBSWk4xX1BJTigzOCksDQo+IFJaTjFfUElOKDM5KSwNCj4gPiAr CVJaTjFfUElOKDQwKSwgUlpOMV9QSU4oNDEpLCBSWk4xX1BJTig0MiksIFJaTjFfUElOKDQzKSwN Cj4gUlpOMV9QSU4oNDQpLA0KPiA+ICsJUlpOMV9QSU4oNDUpLCBSWk4xX1BJTig0NiksIFJaTjFf UElOKDQ3KSwgUlpOMV9QSU4oNDgpLA0KPiBSWk4xX1BJTig0OSksDQo+ID4gKwlSWk4xX1BJTig1 MCksIFJaTjFfUElOKDUxKSwgUlpOMV9QSU4oNTIpLCBSWk4xX1BJTig1MyksDQo+IFJaTjFfUElO KDU0KSwNCj4gPiArCVJaTjFfUElOKDU1KSwgUlpOMV9QSU4oNTYpLCBSWk4xX1BJTig1NyksIFJa TjFfUElOKDU4KSwNCj4gUlpOMV9QSU4oNTkpLA0KPiA+ICsJUlpOMV9QSU4oNjApLCBSWk4xX1BJ Tig2MSksIFJaTjFfUElOKDYyKSwgUlpOMV9QSU4oNjMpLA0KPiBSWk4xX1BJTig2NCksDQo+ID4g KwlSWk4xX1BJTig2NSksIFJaTjFfUElOKDY2KSwgUlpOMV9QSU4oNjcpLCBSWk4xX1BJTig2OCks DQo+IFJaTjFfUElOKDY5KSwNCj4gPiArCVJaTjFfUElOKDcwKSwgUlpOMV9QSU4oNzEpLCBSWk4x X1BJTig3MiksIFJaTjFfUElOKDczKSwNCj4gUlpOMV9QSU4oNzQpLA0KPiA+ICsJUlpOMV9QSU4o NzUpLCBSWk4xX1BJTig3NiksIFJaTjFfUElOKDc3KSwgUlpOMV9QSU4oNzgpLA0KPiBSWk4xX1BJ Tig3OSksDQo+ID4gKwlSWk4xX1BJTig4MCksIFJaTjFfUElOKDgxKSwgUlpOMV9QSU4oODIpLCBS Wk4xX1BJTig4MyksDQo+IFJaTjFfUElOKDg0KSwNCj4gPiArCVJaTjFfUElOKDg1KSwgUlpOMV9Q SU4oODYpLCBSWk4xX1BJTig4NyksIFJaTjFfUElOKDg4KSwNCj4gUlpOMV9QSU4oODkpLA0KPiA+ ICsJUlpOMV9QSU4oOTApLCBSWk4xX1BJTig5MSksIFJaTjFfUElOKDkyKSwgUlpOMV9QSU4oOTMp LA0KPiBSWk4xX1BJTig5NCksDQo+ID4gKwlSWk4xX1BJTig5NSksIFJaTjFfUElOKDk2KSwgUlpO MV9QSU4oOTcpLCBSWk4xX1BJTig5OCksDQo+IFJaTjFfUElOKDk5KSwNCj4gPiArCVJaTjFfUElO KDEwMCksIFJaTjFfUElOKDEwMSksIFJaTjFfUElOKDEwMiksIFJaTjFfUElOKDEwMyksDQo+ID4g KwlSWk4xX1BJTigxMDQpLCBSWk4xX1BJTigxMDUpLCBSWk4xX1BJTigxMDYpLCBSWk4xX1BJTigx MDcpLA0KPiA+ICsJUlpOMV9QSU4oMTA4KSwgUlpOMV9QSU4oMTA5KSwgUlpOMV9QSU4oMTEwKSwg UlpOMV9QSU4oMTExKSwNCj4gPiArCVJaTjFfUElOKDExMiksIFJaTjFfUElOKDExMyksIFJaTjFf UElOKDExNCksIFJaTjFfUElOKDExNSksDQo+ID4gKwlSWk4xX1BJTigxMTYpLCBSWk4xX1BJTigx MTcpLCBSWk4xX1BJTigxMTgpLCBSWk4xX1BJTigxMTkpLA0KPiA+ICsJUlpOMV9QSU4oMTIwKSwg UlpOMV9QSU4oMTIxKSwgUlpOMV9QSU4oMTIyKSwgUlpOMV9QSU4oMTIzKSwNCj4gPiArCVJaTjFf UElOKDEyNCksIFJaTjFfUElOKDEyNSksIFJaTjFfUElOKDEyNiksIFJaTjFfUElOKDEyNyksDQo+ ID4gKwlSWk4xX1BJTigxMjgpLCBSWk4xX1BJTigxMjkpLCBSWk4xX1BJTigxMzApLCBSWk4xX1BJ TigxMzEpLA0KPiA+ICsJUlpOMV9QSU4oMTMyKSwgUlpOMV9QSU4oMTMzKSwgUlpOMV9QSU4oMTM0 KSwgUlpOMV9QSU4oMTM1KSwNCj4gPiArCVJaTjFfUElOKDEzNiksIFJaTjFfUElOKDEzNyksIFJa TjFfUElOKDEzOCksIFJaTjFfUElOKDEzOSksDQo+ID4gKwlSWk4xX1BJTigxNDApLCBSWk4xX1BJ TigxNDEpLCBSWk4xX1BJTigxNDIpLCBSWk4xX1BJTigxNDMpLA0KPiA+ICsJUlpOMV9QSU4oMTQ0 KSwgUlpOMV9QSU4oMTQ1KSwgUlpOMV9QSU4oMTQ2KSwgUlpOMV9QSU4oMTQ3KSwNCj4gPiArCVJa TjFfUElOKDE0OCksIFJaTjFfUElOKDE0OSksIFJaTjFfUElOKDE1MCksIFJaTjFfUElOKDE1MSks DQo+ID4gKwlSWk4xX1BJTigxNTIpLCBSWk4xX1BJTigxNTMpLCBSWk4xX1BJTigxNTQpLCBSWk4x X1BJTigxNTUpLA0KPiA+ICsJUlpOMV9QSU4oMTU2KSwgUlpOMV9QSU4oMTU3KSwgUlpOMV9QSU4o MTU4KSwgUlpOMV9QSU4oMTU5KSwNCj4gPiArCVJaTjFfUElOKDE2MCksIFJaTjFfUElOKDE2MSks IFJaTjFfUElOKDE2MiksIFJaTjFfUElOKDE2MyksDQo+ID4gKwlSWk4xX1BJTigxNjQpLCBSWk4x X1BJTigxNjUpLCBSWk4xX1BJTigxNjYpLCBSWk4xX1BJTigxNjcpLA0KPiA+ICsJUlpOMV9QSU4o MTY4KSwgUlpOMV9QSU4oMTY5KSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gew0KPiA+ICsJ TE9DS19MRVZFTDEgPSAweDEsDQo+ID4gKwlMT0NLX0xFVkVMMiA9IDB4MiwNCj4gPiArCUxPQ0tf QUxMID0gTE9DS19MRVZFTDEgfCBMT0NLX0xFVkVMMiwNCj4gDQo+IDB4MDMgaXMgYWxyZWFkeSAo MHgwMSB8IDB4MDIpIDopDQo+IE5vdCBhIGJpZyBkZWFsIHRob3VnaC4NClN1cmUNCg0KDQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCByem4xX2h3X3NldF9sb2NrKHN0cnVjdCByem4x X3BpbmN0cmwgKmlwY3RsLCB1OCBsb2NrLCB1OA0KPiA+ICt2YWx1ZSkgew0KPiA+ICsJLyoNCj4g PiArCSAqIFRoZSBwaW5tdXggY29uZmlndXJhdGlvbiBpcyBsb2NrZWQgYnkgd3JpdGluZyB0aGUg cGh5c2ljYWwgYWRkcmVzcw0KPiBvZg0KPiA+ICsJICogdGhlIHN0YXR1c19wcm90ZWN0IHJlZ2lz dGVyIHRvIGl0c2VsZi4gSXQgaXMgdW5sb2NrZWQgYnkgd3JpdGluZyB0aGUNCj4gPiArCSAqIGFk ZHJlc3MgfCAxLg0KPiA+ICsJICovDQo+ID4gKwlpZiAobG9jayAmIExPQ0tfTEVWRUwxKSB7DQo+ ID4gKwkJdTMyIHZhbCA9IGlwY3RsLT5sZXYxX3Byb3RlY3RfcGh5cyB8ICEodmFsdWUgJiBMT0NL X0xFVkVMMSk7DQo+ID4gKw0KPiA+ICsJCXdyaXRlbCh2YWwsICZpcGN0bC0+bGV2MS0+c3RhdHVz X3Byb3RlY3QpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChsb2NrICYgTE9DS19MRVZFTDIp IHsNCj4gPiArCQl1MzIgdmFsID0gaXBjdGwtPmxldjJfcHJvdGVjdF9waHlzIHwgISh2YWx1ZSAm IExPQ0tfTEVWRUwyKTsNCj4gPiArDQo+ID4gKwkJd3JpdGVsKHZhbCwgJmlwY3RsLT5sZXYyLT5z dGF0dXNfcHJvdGVjdCk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHJ6bjFfcGluY3RybF9tZGlvX3NlbGVjdChzdHJ1Y3QgcnpuMV9waW5jdHJsICppcGN0bCwgdTgg bWRpbywNCj4gPiArCQkJCSAgICAgdTMyIGZ1bmMpDQo+ID4gK3sNCj4gPiArCWlmIChpcGN0bC0+ bWRpb19mdW5jW21kaW9dID49IDAgJiYgaXBjdGwtPm1kaW9fZnVuY1ttZGlvXSAhPSBmdW5jKQ0K PiA+ICsJCWRldl93YXJuKGlwY3RsLT5kZXYsICJjb25mbGljdGluZyBzZXR0aW5nIGZvciBtZGlv JWQhXG4iLA0KPiBtZGlvKTsNCj4gPiArCWlwY3RsLT5tZGlvX2Z1bmNbbWRpb10gPSBmdW5jOw0K PiA+ICsNCj4gPiArCWRldl9kYmcoaXBjdGwtPmRldiwgInNldHRpbmcgbWRpbyVkIHRvICVkXG4i LCBtZGlvLCBmdW5jKTsNCj4gPiArDQo+ID4gKwl3cml0ZWwoZnVuYywgJmlwY3RsLT5sZXYyLT5s Ml9tZGlvW21kaW9dKTsgfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogVXNpbmcgYSBjb21wb3Np dGUgcGluIGRlc2NyaXB0aW9uLCBzZXQgdGhlIGhhcmR3YXJlIHBpbm11eA0KPiA+ICtyZWdpc3Rl cnMNCj4gPiArICogd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuDQo+ID4gKyAqIE1ha2Ug c3VyZSB0byB1bmxvY2sgd3JpdGUgcHJvdGVjdGlvbiBhbmQgcmVzZXQgaXQgYWZ0ZXJ3YXJkLg0K PiA+ICsgKg0KPiA+ICsgKiBOT1RFOiBUaGVyZSBpcyBubyBwcm90ZWN0aW9uIGZvciBwb3RlbnRp YWwgY29uY3VycmVuY3ksIGl0IGlzDQo+ID4gK2Fzc3VtZWQgdGhlc2UNCj4gPiArICogY2FsbHMg YXJlIHNlcmlhbGl6ZWQgYWxyZWFkeS4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcnpuMV9z ZXRfaHdfcGluX2Z1bmMoc3RydWN0IHJ6bjFfcGluY3RybCAqaXBjdGwsIHUzMiBwaW4sDQo+ID4g KwkJCQl1MzIgcGluX2NvbmZpZywgdTggdXNlX2xvY2tzKQ0KPiA+ICt7DQo+ID4gKwl1MzIgbDFf Y2FjaGU7DQo+ID4gKwl1MzIgbDJfY2FjaGU7DQo+ID4gKwl1MzIgbDE7DQo+ID4gKwl1MzIgbDI7 DQo+ID4gKw0KPiA+ICsJLyogTGV2ZWwgMyBNRElPIG11bHRpcGxleGluZyAqLw0KPiA+ICsJaWYg KHBpbl9jb25maWcgPj0gUlpOMV9GVU5DX01ESU8wX0hJR0haICYmDQo+ID4gKwkgICAgcGluX2Nv bmZpZyA8PSBSWk4xX0ZVTkNfTURJTzFfRTFfU1dJVENIKSB7DQo+ID4gKwkJdTggbWRpb19jaGFu bmVsOw0KPiA+ICsJCXUzMiBtZGlvX2Z1bmM7DQo+ID4gKw0KPiA+ICsJCWlmIChwaW5fY29uZmln IDw9IFJaTjFfRlVOQ19NRElPMV9ISUdIWikNCj4gPiArCQkJbWRpb19jaGFubmVsID0gMDsNCj4g PiArCQllbHNlDQo+ID4gKwkJCW1kaW9fY2hhbm5lbCA9IDE7DQo+ID4gKw0KPiA+ICsJCS8qIEdl dCBNRElPIGZ1bmMsIGFuZCBjb252ZXJ0IHRoZSBmdW5jIHRvIHRoZSBsZXZlbCAyDQo+IG51bWJl ciAqLw0KPiA+ICsJCWlmIChwaW5fY29uZmlnIDw9IFJaTjFfRlVOQ19NRElPMF9TV0lUQ0gpIHsN Cj4gPiArCQkJbWRpb19mdW5jID0gcGluX2NvbmZpZyAtDQo+IFJaTjFfRlVOQ19NRElPMF9ISUdI WjsNCj4gPiArCQkJcGluX2NvbmZpZyA9IFJaTjFfRlVOQ19FVEhfTURJTzsNCj4gPiArCQl9IGVs c2UgaWYgKHBpbl9jb25maWcgPD0gUlpOMV9GVU5DX01ESU8wX0UxX1NXSVRDSCkgew0KPiA+ICsJ CQltZGlvX2Z1bmMgPSBwaW5fY29uZmlnIC0NCj4gUlpOMV9GVU5DX01ESU8wX0UxX0hJR0haOw0K PiA+ICsJCQlwaW5fY29uZmlnID0gUlpOMV9GVU5DX0VUSF9NRElPX0UxOw0KPiA+ICsJCX0gZWxz ZSBpZiAocGluX2NvbmZpZyA8PSBSWk4xX0ZVTkNfTURJTzFfU1dJVENIKSB7DQo+ID4gKwkJCW1k aW9fZnVuYyA9IHBpbl9jb25maWcgLQ0KPiBSWk4xX0ZVTkNfTURJTzFfSElHSFo7DQo+ID4gKwkJ CXBpbl9jb25maWcgPSBSWk4xX0ZVTkNfRVRIX01ESU87DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiAr CQkJbWRpb19mdW5jID0gcGluX2NvbmZpZyAtDQo+IFJaTjFfRlVOQ19NRElPMV9FMV9ISUdIWjsN Cj4gPiArCQkJcGluX2NvbmZpZyA9IFJaTjFfRlVOQ19FVEhfTURJT19FMTsNCj4gPiArCQl9DQo+ ID4gKwkJcnpuMV9waW5jdHJsX21kaW9fc2VsZWN0KGlwY3RsLCBtZGlvX2NoYW5uZWwsIG1kaW9f ZnVuYyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogTm90ZSBoZXJlLCB3ZSBkbyBub3QgYWxs b3cgYW55dGhpbmcgcGFzdCB0aGUgTURJTyBNdXggdmFsdWVzICovDQo+ID4gKwlpZiAocGluID49 IEFSUkFZX1NJWkUoaXBjdGwtPmxldjEtPmNvbmYpIHx8DQo+ID4gKwkgICAgcGluX2NvbmZpZyA+ PSBSWk4xX0ZVTkNfTURJTzBfSElHSFopDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0K PiA+ICsJbDEgPSByZWFkbCgmaXBjdGwtPmxldjEtPmNvbmZbcGluXSk7DQo+ID4gKwlsMV9jYWNo ZSA9IGwxOw0KPiA+ICsJbDIgPSByZWFkbCgmaXBjdGwtPmxldjItPmNvbmZbcGluXSk7DQo+ID4g KwlsMl9jYWNoZSA9IGwyOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoaXBjdGwtPmRldiwgInNldHRp bmcgZnVuYyBmb3IgcGluICVkIHRvICVkXG4iLCBwaW4sDQo+ID4gK3Bpbl9jb25maWcpOw0KPiA+ ICsNCj4gPiArCWlmIChwaW5fY29uZmlnIDwgUlpOMV9GVU5DX0wyX09GRlNFVCkgew0KPiA+ICsJ CWwxICY9IH4oUlpOMV9MMV9GVU5DX01BU0sgPDwgUlpOMV9MMV9GVU5DVElPTik7DQo+ID4gKwkJ bDEgfD0gKHBpbl9jb25maWcgPDwgUlpOMV9MMV9GVU5DVElPTik7DQo+ID4gKwl9IGVsc2Ugew0K PiA+ICsJCWwxICY9IH4oUlpOMV9MMV9GVU5DX01BU0sgPDwgUlpOMV9MMV9GVU5DVElPTik7DQo+ ID4gKwkJbDEgfD0gKFJaTjFfTDFfRlVOQ1RJT05fTDIgPDwgUlpOMV9MMV9GVU5DVElPTik7DQo+ ID4gKw0KPiA+ICsJCWwyID0gcGluX2NvbmZpZyAtIFJaTjFfRlVOQ19MMl9PRkZTRVQ7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJLyogSWYgZWl0aGVyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgd2Ug dXBkYXRlIGJvdGggYW55d2F5ICovDQo+ID4gKwlpZiAobDEgIT0gbDFfY2FjaGUgfHwgbDIgIT0g bDJfY2FjaGUpIHsNCj4gPiArCQl3cml0ZWwobDEsICZpcGN0bC0+bGV2MS0+Y29uZltwaW5dKTsN Cj4gPiArCQl3cml0ZWwobDIsICZpcGN0bC0+bGV2Mi0+Y29uZltwaW5dKTsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCByem4xX3Bpbl9ncm91cCAqcnpuMV9waW5jdHJsX2ZpbmRfZ3JvdXBfYnlfbmFtZSgNCj4g PiArCWNvbnN0IHN0cnVjdCByem4xX3BpbmN0cmwgKmlwY3RsLCBjb25zdCBjaGFyICpuYW1lKSB7 DQo+ID4gKwljb25zdCBzdHJ1Y3QgcnpuMV9waW5fZ3JvdXAgKmdycCA9IE5VTEw7DQo+ID4gKwlp bnQgaTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgaXBjdGwtPm5ncm91cHM7IGkrKykg ew0KPiA+ICsJCWlmICghc3RyY21wKGlwY3RsLT5ncm91cHNbaV0ubmFtZSwgbmFtZSkpIHsNCj4g PiArCQkJZ3JwID0gJmlwY3RsLT5ncm91cHNbaV07DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0N Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gZ3JwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IHJ6bjFfZ2V0X2dyb3Vwc19jb3VudChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxk ZXYpIHsNCj4gPiArCXN0cnVjdCByem4xX3BpbmN0cmwgKmlwY3RsID0gcGluY3RybF9kZXZfZ2V0 X2RydmRhdGEocGN0bGRldik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGlwY3RsLT5uZ3JvdXBzOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqcnpuMV9nZXRfZ3JvdXBfbmFt ZShzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsDQo+ID4gKwkJCQkgICAgICAgdW5zaWduZWQg aW50IHNlbGVjdG9yKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcnpuMV9waW5jdHJsICppcGN0bCA9 IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxkZXYpOw0KPiA+ICsNCj4gPiArCXJldHVybiBp cGN0bC0+Z3JvdXBzW3NlbGVjdG9yXS5uYW1lOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ6 bjFfZ2V0X2dyb3VwX3BpbnMoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LA0KPiA+ICsJCQkg ICAgICAgdW5zaWduZWQgaW50IHNlbGVjdG9yLCBjb25zdCB1bnNpZ25lZCBpbnQgKipwaW5zLA0K PiA+ICsJCQkgICAgICAgdW5zaWduZWQgaW50ICpucGlucykNCj4gPiArew0KPiA+ICsJc3RydWN0 IHJ6bjFfcGluY3RybCAqaXBjdGwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsN Cj4gPiArDQo+ID4gKwlpZiAoc2VsZWN0b3IgPj0gaXBjdGwtPm5ncm91cHMpDQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJKnBpbnMgPSBpcGN0bC0+Z3JvdXBzW3NlbGVjdG9y XS5waW5zOw0KPiA+ICsJKm5waW5zID0gaXBjdGwtPmdyb3Vwc1tzZWxlY3Rvcl0ubnBpbnM7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFRo aXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIHBpbmN0bCAnRnVuY3Rpb24nIG5vZGUuDQo+ ID4gKyAqIFN1Yi1ub2RlcyBjYW4gYmUgdXNlZCB0byBkZXNjcmliZSBtdWx0aXBsZSAnR3JvdXBz JyBmb3IgdGhlICdGdW5jdGlvbicNCj4gPiArICogSWYgdGhlcmUgYXJlbid0IGFueSBzdWItbm9k ZXMsIHRoZSAnR3JvdXAnIGlzIGVzc2VudGlhbGx5IHRoZSAnRnVuY3Rpb24nLg0KPiA+ICsgKiBF YWNoICdHcm91cCcgdXNlcyBwaW5tdXggPSA8Li4uPiB0byBkZXRhaWwgdGhlIHBpbnMgYW5kIGRh dGEgdXNlZA0KPiA+ICt0byBzZWxlY3QNCj4gPiArICogdGhlIGZ1bmN0aW9uYWxpdHkuIEVhY2gg J0dyb3VwJyBoYXMgb3B0aW9uYWwgcGluIGNvbmZpZ3VyYXRpb25zDQo+ID4gK3RoYXQgYXBwbHkN Cj4gPiArICogdG8gYWxsIHBpbnMgaW4gdGhlICdHcm91cCcuDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMgaW50IHJ6bjFfZHRfbm9kZV90b19tYXBfb25lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRl diwNCj4gPiArCQkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsDQo+ID4gKwkJCQkgICBzdHJ1 Y3QgcGluY3RybF9tYXAgKiptYXAsDQo+ID4gKwkJCQkgICB1bnNpZ25lZCBpbnQgKm51bV9tYXBz KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcnpuMV9waW5jdHJsICppcGN0bCA9IHBpbmN0cmxfZGV2 X2dldF9kcnZkYXRhKHBjdGxkZXYpOw0KPiA+ICsJY29uc3Qgc3RydWN0IHJ6bjFfcGluX2dyb3Vw ICpncnA7DQo+ID4gKwl1bnNpZ25lZCBsb25nICpjb25maWdzID0gTlVMTDsNCj4gPiArCXVuc2ln bmVkIGludCBudW1fY29uZmlncyA9IDA7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRfbWFw cyA9ICpudW1fbWFwczsNCj4gPiArCXVuc2lnbmVkIGludCByZXNlcnZlID0gMTsNCj4gPiArCWlu dCByZXQ7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhpcGN0bC0+ZGV2LCAicHJvY2Vzc2luZyBub2Rl ICVwT0ZcbiIsIG5wKTsNCj4gPiArDQo+ID4gKwlncnAgPSByem4xX3BpbmN0cmxfZmluZF9ncm91 cF9ieV9uYW1lKGlwY3RsLCBucC0+bmFtZSk7DQo+ID4gKwlpZiAoIWdycCkgew0KPiA+ICsJCWRl dl9lcnIoaXBjdGwtPmRldiwgInVuYWJsZSB0byBmaW5kIGdyb3VwIGZvciBub2RlICVwT0ZcbiIs DQo+IG5wKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkv KiBHZXQgdGhlIGdyb3VwJ3MgcGluIGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCXJldCA9IHBpbmNv bmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnAsIHBjdGxkZXYsICZjb25maWdzLA0KPiA+ICsJ CQkJCSAgICAgICZudW1fY29uZmlncyk7DQo+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ICsJCWRl dl9lcnIoaXBjdGwtPmRldiwgIiVzOiBjb3VsZCBub3QgcGFyc2Ugbm9kZSBwcm9wZXJ0eVxuIiwN Cj4gPiArCQkJb2Zfbm9kZV9mdWxsX25hbWUobnApKTsNCj4gDQo+IFdoeSAlcE9GIGFib3ZlIGFu ZCBvZl9ub2RlX2Z1bGxfbmFtZT8gSSB3b3VsZCB1c2UgdGhlIGZpcnN0LCBpZiBub3RoaW5nDQo+ IGNoYW5nZWQgcmVjZW50bHkgd2l0aCBPRiBuYW1pbmcuDQpZb3UgYXJlIHJpZ2h0LCAlcE9GIHNo b3VsZCBiZSB1c2VkDQoNCg0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKG51bV9jb25maWdzKQ0KPiA+ICsJCXJlc2VydmUrKzsNCj4gPiArDQo+ID4gKwkvKiBJ bmNyZWFzZSB0aGUgbnVtYmVyIG9mIG1hcHMgdG8gY292ZXIgdGhpcyBncm91cCAqLw0KPiA+ICsJ cmV0ID0gcGluY3RybF91dGlsc19yZXNlcnZlX21hcChwY3RsZGV2LCBtYXAsICZyZXNlcnZlZF9t YXBzLA0KPiBudW1fbWFwcywNCj4gPiArCQkJCQlyZXNlcnZlKTsNCj4gPiArCWlmIChyZXQgPCAw KQ0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArCS8qIEFzc29jaWF0ZSB0aGUgZ3JvdXAg d2l0aCB0aGUgZnVuY3Rpb24gKi8NCj4gPiArCXJldCA9IHBpbmN0cmxfdXRpbHNfYWRkX21hcF9t dXgocGN0bGRldiwgbWFwLCAmcmVzZXJ2ZWRfbWFwcywNCj4gbnVtX21hcHMsDQo+ID4gKwkJCQkJ Z3JwLT5uYW1lLCBncnAtPmZ1bmMpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJZ290byBv dXQ7DQo+ID4gKw0KPiA+ICsJaWYgKG51bV9jb25maWdzKSB7DQo+ID4gKwkJLyogQXNzb2NpYXRl IHRoZSBncm91cCdzIHBpbiBjb25maWd1cmF0aW9uIHdpdGggdGhlIGdyb3VwICovDQo+ID4gKwkJ cmV0ID0gcGluY3RybF91dGlsc19hZGRfbWFwX2NvbmZpZ3MocGN0bGRldiwgbWFwLA0KPiA+ICsJ CQkJJnJlc2VydmVkX21hcHMsIG51bV9tYXBzLCBncnAtPm5hbWUsDQo+ID4gKwkJCQljb25maWdz LCBudW1fY29uZmlncywNCj4gPiArCQkJCVBJTl9NQVBfVFlQRV9DT05GSUdTX0dST1VQKTsNCj4g PiArCQlpZiAocmV0IDwgMCkNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJZGV2X2RiZyhwY3RsZGV2LT5kZXYsICJtYXBzOiBmdW5jdGlvbiAlcyBncm91cCAlcyAoJWQg cGlucylcbiIsDQo+ID4gKwkJZ3JwLT5mdW5jLCBncnAtPm5hbWUsIGdycC0+bnBpbnMpOw0KPiA+ ICsNCj4gPiArb3V0Og0KPiA+ICsJa2ZyZWUoY29uZmlncyk7DQo+ID4gKwlyZXR1cm4gMDsNCj4g DQo+IFlvdSBuZXZlciByZXR1cm4gZXJyb3IgaGVyZSAobml0OiBuZXdsaW5lIGJlZm9yZSByZXR1 cm5pbmcsIGhlcmUgYW5kIGluIG90aGVyDQo+IHBsYWNlcykNCk9rLCB3aWxsIGZpeC4NCg0KDQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnpuMV9kdF9ub2RlX3RvX21hcChzdHJ1Y3Qg cGluY3RybF9kZXYgKnBjdGxkZXYsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wLA0KPiA+ICsJCQkgICAgICAgc3RydWN0IHBpbmN0cmxfbWFwICoqbWFwLA0KPiA+ICsJCQkg ICAgICAgdW5zaWduZWQgaW50ICpudW1fbWFwcykNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldmlj ZV9ub2RlICpjaGlsZDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJKm1hcCA9IE5VTEw7 DQo+ID4gKwkqbnVtX21hcHMgPSAwOw0KPiA+ICsNCj4gPiArCXJldCA9IHJ6bjFfZHRfbm9kZV90 b19tYXBfb25lKHBjdGxkZXYsIG5wLCBtYXAsIG51bV9tYXBzKTsNCj4gPiArCWlmIChyZXQgPCAw KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9k ZShucCwgY2hpbGQpIHsNCj4gPiArCQlyZXQgPSByem4xX2R0X25vZGVfdG9fbWFwX29uZShwY3Rs ZGV2LCBjaGlsZCwgbWFwLA0KPiBudW1fbWFwcyk7DQo+ID4gKwkJaWYgKHJldCA8IDApDQo+ID4g KwkJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY3RybF9vcHMgcnpuMV9wY3RybF9v cHMgPSB7DQo+ID4gKwkuZ2V0X2dyb3Vwc19jb3VudCA9IHJ6bjFfZ2V0X2dyb3Vwc19jb3VudCwN Cj4gPiArCS5nZXRfZ3JvdXBfbmFtZSA9IHJ6bjFfZ2V0X2dyb3VwX25hbWUsDQo+ID4gKwkuZ2V0 X2dyb3VwX3BpbnMgPSByem4xX2dldF9ncm91cF9waW5zLA0KPiA+ICsJLmR0X25vZGVfdG9fbWFw ID0gcnpuMV9kdF9ub2RlX3RvX21hcCwNCj4gPiArCS5kdF9mcmVlX21hcCA9IHBpbmN0cmxfdXRp bHNfZnJlZV9tYXAsIH07DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ6bjFfcG14X2dldF9mdW5j c19jb3VudChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYpIHsNCj4gPiArCXN0cnVjdCByem4x X3BpbmN0cmwgKmlwY3RsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIGlwY3RsLT5uZnVuY3Rpb25zOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgY29uc3QgY2hhciAqcnpuMV9wbXhfZ2V0X2Z1bmNfbmFtZShzdHJ1Y3QgcGluY3RybF9k ZXYgKnBjdGxkZXYsDQo+ID4gKwkJCQkJICB1bnNpZ25lZCBpbnQgc2VsZWN0b3IpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCByem4xX3BpbmN0cmwgKmlwY3RsID0gcGluY3RybF9kZXZfZ2V0X2RydmRh dGEocGN0bGRldik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGlwY3RsLT5mdW5jdGlvbnNbc2VsZWN0 b3JdLm5hbWU7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnpuMV9wbXhfZ2V0X2dyb3Vwcyhz dHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsDQo+ID4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQg c2VsZWN0b3IsDQo+ID4gKwkJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgKipncm91cHMsDQo+ ID4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKiBjb25zdCBudW1fZ3JvdXBzKSB7DQo+ID4gKwlz dHJ1Y3QgcnpuMV9waW5jdHJsICppcGN0bCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxk ZXYpOw0KPiA+ICsNCj4gPiArCSpncm91cHMgPSBpcGN0bC0+ZnVuY3Rpb25zW3NlbGVjdG9yXS5n cm91cHM7DQo+ID4gKwkqbnVtX2dyb3VwcyA9IGlwY3RsLT5mdW5jdGlvbnNbc2VsZWN0b3JdLm51 bV9ncm91cHM7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgcnpuMV9zZXRfbXV4KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwgdW5zaWdu ZWQgaW50IHNlbGVjdG9yLA0KPiA+ICsJCQl1bnNpZ25lZCBpbnQgZ3JvdXApDQo+ID4gK3sNCj4g PiArCXN0cnVjdCByem4xX3BpbmN0cmwgKmlwY3RsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEo cGN0bGRldik7DQo+ID4gKwlzdHJ1Y3QgcnpuMV9waW5fZ3JvdXAgKmdycCA9ICZpcGN0bC0+Z3Jv dXBzW2dyb3VwXTsNCj4gPiArCXVuc2lnbmVkIGludCBpLCBncnBfcGlucyA9IGdycC0+bnBpbnM7 DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhpcGN0bC0+ZGV2LCAic2V0IG11eCAlcyglZCkgZ3JvdXAg JXMoJWQpXG4iLA0KPiA+ICsJCWlwY3RsLT5mdW5jdGlvbnNbc2VsZWN0b3JdLm5hbWUsIHNlbGVj dG9yLCBncnAtPm5hbWUsDQo+IGdyb3VwKTsNCj4gPiArDQo+ID4gKwlyem4xX2h3X3NldF9sb2Nr KGlwY3RsLCBMT0NLX0FMTCwgTE9DS19BTEwpOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGdycF9w aW5zOyBpKyspDQo+ID4gKwkJcnpuMV9zZXRfaHdfcGluX2Z1bmMoaXBjdGwsIGdycC0+cGluc1tp XSwgZ3JwLT5waW5faWRzW2ldLCAwKTsNCj4gPiArCXJ6bjFfaHdfc2V0X2xvY2soaXBjdGwsIExP Q0tfQUxMLCAwKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBwaW5tdXhfb3BzIHJ6bjFfcG14X29wcyA9IHsNCj4gPiArCS5n ZXRfZnVuY3Rpb25zX2NvdW50ID0gcnpuMV9wbXhfZ2V0X2Z1bmNzX2NvdW50LA0KPiA+ICsJLmdl dF9mdW5jdGlvbl9uYW1lID0gcnpuMV9wbXhfZ2V0X2Z1bmNfbmFtZSwNCj4gPiArCS5nZXRfZnVu Y3Rpb25fZ3JvdXBzID0gcnpuMV9wbXhfZ2V0X2dyb3VwcywNCj4gPiArCS5zZXRfbXV4ID0gcnpu MV9zZXRfbXV4LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCByem4xX3BpbmNvbmZf Z2V0KHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwgdW5zaWduZWQgaW50IHBpbiwNCj4gPiAr CQkJICAgIHVuc2lnbmVkIGxvbmcgKmNvbmZpZykNCj4gPiArew0KPiA+ICsJc3RydWN0IHJ6bjFf cGluY3RybCAqaXBjdGwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsNCj4gPiAr CWVudW0gcGluX2NvbmZpZ19wYXJhbSBwYXJhbSA9DQo+IHBpbmNvbmZfdG9fY29uZmlnX3BhcmFt KCpjb25maWcpOw0KPiA+ICsJY29uc3QgdTMyIHJlZ19kcml2ZVs0XSA9IHsgNCwgNiwgOCwgMTIg fTsNCj4gPiArCXUzMiBsMSwgbDI7DQo+ID4gKwl1MzIgcHVsbCwgZHJpdmUsIGwxbXV4Ow0KPiA+ ICsJdTMyIGFyZyA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKHBpbiA+PSBBUlJBWV9TSVpFKGlwY3Rs LT5sZXYxLT5jb25mKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlsMSA9 IHJlYWRsKCZpcGN0bC0+bGV2MS0+Y29uZltwaW5dKTsNCj4gPiArDQo+ID4gKwlsMW11eCA9IGwx ICYgUlpOMV9MMV9GVU5DX01BU0s7DQo+ID4gKwlwdWxsID0gKGwxID4+IFJaTjFfTDFfUElOX1BV TEwpICYgMHgzOw0KPiA+ICsJZHJpdmUgPSAobDEgPj4gUlpOMV9MMV9QSU5fRFJJVkVfU1RSRU5H VEgpICYgMHgzOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAocGFyYW0pIHsNCj4gPiArCWNhc2UgUElO X0NPTkZJR19CSUFTX1BVTExfVVA6DQo+ID4gKwkJaWYgKHB1bGwgPT0gUlpOMV9MMV9QSU5fUFVM TF9VUCkNCj4gPiArCQkJYXJnID0gMTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgUElOX0NP TkZJR19CSUFTX1BVTExfRE9XTjoNCj4gPiArCQlpZiAocHVsbCA9PSBSWk4xX0wxX1BJTl9QVUxM X0RPV04pDQo+ID4gKwkJCWFyZyA9IDE7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFBJTl9D T05GSUdfQklBU19ESVNBQkxFOg0KPiA+ICsJCWlmIChwdWxsID09IFJaTjFfTDFfUElOX1BVTExf Tk9ORSkNCj4gPiArCQkJYXJnID0gMTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgUElOX0NP TkZJR19EUklWRV9TVFJFTkdUSDoNCj4gPiArCQlhcmcgPSByZWdfZHJpdmVbZHJpdmVdOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBQSU5fQ09ORklHX0JJQVNfSElHSF9JTVBFREFOQ0U6DQo+ ID4gKwkJbDIgPSByZWFkbCgmaXBjdGwtPmxldjEtPmNvbmZbcGluXSk7DQo+ID4gKwkJaWYgKGwx bXV4ID09IFJaTjFfRlVOQ19ISUdIWikNCj4gPiArCQkJYXJnID0gMTsNCj4gPiArCQlpZiAobDFt dXggPT0gUlpOMV9MMV9GVU5DVElPTl9MMiAmJiBsMiA9PSAwKQ0KPiA+ICsJCQlhcmcgPSAxOw0K PiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVBQOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCSpjb25maWcgPSBwaW5jb25mX3RvX2NvbmZpZ19wYWNrZWQo cGFyYW0sIGFyZyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgcnpuMV9waW5jb25mX3NldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYs IHVuc2lnbmVkIGludCBwaW4sDQo+ID4gKwkJCSAgICB1bnNpZ25lZCBsb25nICpjb25maWdzLCB1 bnNpZ25lZCBpbnQgbnVtX2NvbmZpZ3MpDQo+IHsNCj4gPiArCXN0cnVjdCByem4xX3BpbmN0cmwg KmlwY3RsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7DQo+ID4gKwllbnVtIHBp bl9jb25maWdfcGFyYW0gcGFyYW07DQo+ID4gKwlpbnQgaTsNCj4gPiArCXUzMiBhcmc7DQo+ID4g Kwl1MzIgbDEsIGwxX2NhY2hlOw0KPiA+ICsJdTMyIGRydjsNCj4gPiArDQo+ID4gKwlpZiAocGlu ID49IEFSUkFZX1NJWkUoaXBjdGwtPmxldjEtPmNvbmYpKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFM Ow0KPiA+ICsNCj4gPiArCWwxID0gcmVhZGwoJmlwY3RsLT5sZXYxLT5jb25mW3Bpbl0pOw0KPiA+ ICsJbDFfY2FjaGUgPSBsMTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbmZp Z3M7IGkrKykgew0KPiA+ICsJCXBhcmFtID0gcGluY29uZl90b19jb25maWdfcGFyYW0oY29uZmln c1tpXSk7DQo+ID4gKwkJYXJnID0gcGluY29uZl90b19jb25maWdfYXJndW1lbnQoY29uZmlnc1tp XSk7DQo+ID4gKw0KPiA+ICsJCXN3aXRjaCAocGFyYW0pIHsNCj4gPiArCQljYXNlIFBJTl9DT05G SUdfQklBU19QVUxMX1VQOg0KPiA+ICsJCQlkZXZfZGJnKGlwY3RsLT5kZXYsICJzZXQgcGluICVk IHB1bGwgdXBcbiIsIHBpbik7DQo+ID4gKwkJCWwxICY9IH4oMHgzIDw8IFJaTjFfTDFfUElOX1BV TEwpOw0KPiA+ICsJCQlsMSB8PSAoUlpOMV9MMV9QSU5fUFVMTF9VUCA8PA0KPiBSWk4xX0wxX1BJ Tl9QVUxMKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBQSU5fQ09ORklHX0JJQVNfUFVM TF9ET1dOOg0KPiA+ICsJCQlkZXZfZGJnKGlwY3RsLT5kZXYsICJzZXQgcGluICVkIHB1bGwgZG93 blxuIiwgcGluKTsNCj4gPiArCQkJbDEgJj0gfigweDMgPDwgUlpOMV9MMV9QSU5fUFVMTCk7DQo+ ID4gKwkJCWwxIHw9IChSWk4xX0wxX1BJTl9QVUxMX0RPV04gPDwNCj4gUlpOMV9MMV9QSU5fUFVM TCk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgUElOX0NPTkZJR19CSUFTX0RJU0FCTEU6 DQo+ID4gKwkJCWRldl9kYmcoaXBjdGwtPmRldiwgInNldCBwaW4gJWQgYmlhcyBvZmZcbiIsIHBp bik7DQo+ID4gKwkJCWwxICY9IH4oMHgzIDw8IFJaTjFfTDFfUElOX1BVTEwpOw0KPiA+ICsJCQls MSB8PSAoUlpOMV9MMV9QSU5fUFVMTF9OT05FIDw8DQo+IFJaTjFfTDFfUElOX1BVTEwpOw0KPiA+ ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFBJTl9DT05GSUdfRFJJVkVfU1RSRU5HVEg6DQo+ID4g KwkJCWRldl9kYmcoaXBjdGwtPmRldiwgInNldCBwaW4gJWQgZHJ2ICV1bUFcbiIsIHBpbiwNCj4g YXJnKTsNCj4gPiArCQkJZHJ2ID0gMDsNCj4gPiArCQkJc3dpdGNoIChhcmcpIHsNCj4gPiArCQkJ Y2FzZSA0Og0KPiA+ICsJCQkJZHJ2ID0gUlpOMV9MMV9QSU5fRFJJVkVfU1RSRU5HVEhfNE1BOw0K PiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCWNhc2UgNjoNCj4gPiArCQkJCWRydiA9IFJaTjFfTDFf UElOX0RSSVZFX1NUUkVOR1RIXzZNQTsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQljYXNlIDg6 DQo+ID4gKwkJCQlkcnYgPSBSWk4xX0wxX1BJTl9EUklWRV9TVFJFTkdUSF84TUE7DQo+ID4gKwkJ CQlicmVhazsNCj4gPiArCQkJY2FzZSAxMjoNCj4gPiArCQkJCWRydiA9DQo+IFJaTjFfTDFfUElO X0RSSVZFX1NUUkVOR1RIXzEyTUE7DQo+ID4gKwkJCQlicmVhazsNCj4gPiArCQkJZGVmYXVsdDoN Cj4gPiArCQkJCWRldl9lcnIoaXBjdGwtPmRldiwNCj4gPiArCQkJCQkiRHJpdmUgc3RyZW5ndGgg JXVtQSBub3QNCj4gc3VwcG9ydGVkXG4iLA0KPiA+ICsJCQkJCWFyZyk7DQo+ID4gKwkJCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJbDEgJj0gfigweDMgPDwgUlpO MV9MMV9QSU5fRFJJVkVfU1RSRU5HVEgpOw0KPiA+ICsJCQlsMSB8PSAoZHJ2IDw8IFJaTjFfTDFf UElOX0RSSVZFX1NUUkVOR1RIKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2Ug UElOX0NPTkZJR19CSUFTX0hJR0hfSU1QRURBTkNFOg0KPiA+ICsJCQlkZXZfZGJnKGlwY3RsLT5k ZXYsICJzZXQgcGluICVkIEhpZ2gtWlxuIiwgcGluKTsNCj4gPiArCQkJbDEgJj0gflJaTjFfTDFf RlVOQ19NQVNLOw0KPiA+ICsJCQlsMSB8PSBSWk4xX0ZVTkNfSElHSFo7DQo+ID4gKwkJCWJyZWFr Ow0KPiA+ICsJCWRlZmF1bHQ6DQo+IA0KPiBJJ2xsIHJlLWNvbW1lbnQgb24gYmluZGluZ3MgdG9v LCBidXQgdGhlIHBpbmNvbmYgcHJvcGVydGllcyB5b3Ugc3VwcG9ydA0KPiBzaG91bGQgYmUgbGlz dGVkIHRoZXJlDQpPaywgSSdsbCBmaXggdGhhdC4NCg0KDQo+ID4gKwkJCXJldHVybiAtRU5PVFNV UFA7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChsMSAhPSBsMV9jYWNoZSkg ew0KPiA+ICsJCXJ6bjFfaHdfc2V0X2xvY2soaXBjdGwsIExPQ0tfTEVWRUwxLCBMT0NLX0xFVkVM MSk7DQo+ID4gKwkJd3JpdGVsKGwxLCAmaXBjdGwtPmxldjEtPmNvbmZbcGluXSk7DQo+ID4gKwkJ cnpuMV9od19zZXRfbG9jayhpcGN0bCwgTE9DS19MRVZFTDEsIDApOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ6bjFfcGlu X2NvbmZpZ19ncm91cF9zZXQoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LA0KPiA+ICsJCQkJ ICAgICB1bnNpZ25lZCBpbnQgc2VsZWN0b3IsDQo+ID4gKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcg KmNvbmZpZ3MsDQo+ID4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBudW1fY29uZmlncykNCj4gPiAr ew0KPiA+ICsJc3RydWN0IHJ6bjFfcGluY3RybCAqaXBjdGwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2 ZGF0YShwY3RsZGV2KTsNCj4gPiArCXN0cnVjdCByem4xX3Bpbl9ncm91cCAqZ3JwID0gJmlwY3Rs LT5ncm91cHNbc2VsZWN0b3JdOw0KPiA+ICsJaW50IHJldCwgaTsNCj4gPiArDQo+ID4gKwlkZXZf ZGJnKGlwY3RsLT5kZXYsICJncm91cCBzZXQgJXMgc2VsZWN0b3I6JWQgY29uZmlnczolcC8lZFxu IiwNCj4gPiArCQlncnAtPm5hbWUsIHNlbGVjdG9yLCBjb25maWdzLCBudW1fY29uZmlncyk7DQo+ ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGdycC0+bnBpbnM7IGkrKykgew0KPiA+ICsJCXVu c2lnbmVkIGludCBwaW4gPSBncnAtPnBpbnNbaV07DQo+ID4gKw0KPiA+ICsJCXJldCA9IHJ6bjFf cGluY29uZl9zZXQocGN0bGRldiwgcGluLCBjb25maWdzLCBudW1fY29uZmlncyk7DQo+ID4gKwkJ aWYgKHJldCkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jb25mX29w cyByem4xX3BpbmNvbmZfb3BzID0gew0KPiA+ICsJLnBpbl9jb25maWdfZ2V0ID0gcnpuMV9waW5j b25mX2dldCwNCj4gPiArCS5waW5fY29uZmlnX3NldCA9IHJ6bjFfcGluY29uZl9zZXQsDQo+ID4g KwkucGluX2NvbmZpZ19ncm91cF9zZXQgPSByem4xX3Bpbl9jb25maWdfZ3JvdXBfc2V0LA0KPiAN Cj4gTml0OiB5b3UgcmVnaXN0ZXIgYSBwaW5jb25mIG1hcCB3aXRoIFBJTl9NQVBfVFlQRV9DT05G SUdTX0dST1VQIHNvDQo+IHRoZSAncGluY29uZl9bc2V0fGdldF0nIHNob3VsZCBuZXZlciBiZSBj YWxsZWQuIEhhdmUgeW91IHRlc3RlZCBpZiB0aGV5IGRvID8NCj4gKGp1c3QgZm9yIG15IGJldHRl ciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwaW5jdHJsIGZyYW1ld29yayA6KQ0KQWgsIHJpZ2h0ISAg cGluX2NvbmZpZ19nZXQgaXMgbm90IGNhbGxlZCBhdCBhbGwuIHBpbl9jb25maWdfc2V0IGlzIG9u bHkgY2FsbGVkDQpmcm9tIHJ6bjFfcGluX2NvbmZpZ19ncm91cF9zZXQoKS4NCg0KU28sIEkgZ3Vl c3MgdGhhdCBtZWFucyBJIHNob3VsZCBpbXBsZW1lbnQgcGluX2NvbmZpZ19ncm91cF9nZXQgYXMg d2VsbC4NCg0KDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBpbmN0cmxfZGVz YyByem4xX3BpbmN0cmxfZGVzYyA9IHsNCj4gPiArCS5wY3Rsb3BzID0gJnJ6bjFfcGN0cmxfb3Bz LA0KPiA+ICsJLnBteG9wcyA9ICZyem4xX3BteF9vcHMsDQo+ID4gKwkuY29uZm9wcyA9ICZyem4x X3BpbmNvbmZfb3BzLA0KPiA+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHJ6bjFfcGluY3RybF9wYXJzZV9ncm91cHMoc3RydWN0IGRldmlj ZV9ub2RlICpucCwNCj4gPiArCQkJCSAgICAgc3RydWN0IHJ6bjFfcGluX2dyb3VwICpncnAsDQo+ ID4gKwkJCQkgICAgIHN0cnVjdCByem4xX3BpbmN0cmwgKmlwY3RsKQ0KPiA+ICt7DQo+ID4gKwlp bnQgc2l6ZTsNCj4gPiArCWNvbnN0IF9fYmUzMiAqbGlzdDsNCj4gPiArCWludCBpOw0KPiANCj4g dW5zaWduZWQgaW50IGk7DQo+IA0KPiBJdCBpcyBvbmx5IHVzZWQgaW4gdGhlIGJvdHRvbSBmb3Ig bG9vcCBhZmFpY3QNClllcyBpbmRlZWQsIEknbGwgZml4Lg0KDQoNCj4gPiArDQo+ID4gKwlkZXZf ZGJnKGlwY3RsLT5kZXYsICIlczogJXNcbiIsIF9fZnVuY19fLCBucC0+bmFtZSk7DQo+ID4gKw0K PiA+ICsJLyogSW5pdGlhbGlzZSBncm91cCAqLw0KPiA+ICsJZ3JwLT5uYW1lID0gbnAtPm5hbWU7 DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIFRoZSBiaW5kaW5nIGZvcm1hdCBpcw0KPiA+ICsJ ICoJcGlubXV4ID0gPFBJTl9GVU5DX0lEIENPTkZJRyAuLi4+LA0KPiA+ICsJICogZG8gc2FuaXR5 IGNoZWNrIGFuZCBjYWxjdWxhdGUgcGlucyBudW1iZXINCj4gPiArCSAqLw0KPiA+ICsJbGlzdCA9 IG9mX2dldF9wcm9wZXJ0eShucCwgUlpOMV9QSU5TX1BST1AsICZzaXplKTsNCj4gPiArCWlmICgh bGlzdCkgew0KPiA+ICsJCWRldl9lcnIoaXBjdGwtPmRldiwNCj4gPiArCQkJIm5vICIgUlpOMV9Q SU5TX1BST1AgIiBwcm9wZXJ0eSBpbiBub2RlICVzXG4iLA0KPiA+ICsJCQlucC0+ZnVsbF9uYW1l KTsNCj4gDQo+IElzbid0IGl0IGJldHRlciB0byBwcmludCBvdXQgdGhlIE9GIG5vZGUgbmFtZSB3 aXRoICVwT0Y/IEhlcmUgYW5kIGJlbG93Li4uDQpTdXJlDQoNCg0KPiA+ICsJCXJldHVybiAtRUlO VkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFdlIGRvIG5vdCBjaGVjayByZXR1cm4gc2lu Y2UgaXQncyBzYWZlIG5vZGUgcGFzc2VkIGRvd24gKi8NCj4gPiArCWlmICghc2l6ZSkgew0KPiA+ ICsJCWRldl9lcnIoaXBjdGwtPmRldiwgIkludmFsaWQgIiBSWk4xX1BJTlNfUFJPUCAiIGluIG5v ZGUNCj4gJXNcbiIsDQo+ID4gKwkJCW5wLT5mdWxsX25hbWUpOw0KPiA+ICsJCXJldHVybiAtRUlO VkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWdycC0+bnBpbnMgPSBzaXplIC8gc2l6ZW9mKGxp c3RbMF0pOw0KPiA+ICsJaWYgKCFncnAtPm5waW5zKQ0KPiA+ICsJCXJldHVybiAwOw0KPiANCj4g SWYgeW91IGdldCBoZXJlIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSBhbmQgaGFzID4gMCBsZW5ndGgN ClRydWUNCg0KDQo+ID4gKw0KPiA+ICsJZ3JwLT5waW5faWRzID0gZGV2bV9rbWFsbG9jX2FycmF5 KGlwY3RsLT5kZXYsDQo+ID4gKwkJCQkJICBncnAtPm5waW5zLCBzaXplb2YoZ3JwLT5waW5faWRz WzBdKSwNCj4gPiArCQkJCQkgIEdGUF9LRVJORUwpOw0KPiA+ICsJZ3JwLT5waW5zID0gZGV2bV9r bWFsbG9jX2FycmF5KGlwY3RsLT5kZXYsDQo+ID4gKwkJCQkgICAgICAgZ3JwLT5ucGlucywgc2l6 ZW9mKGdycC0+cGluc1swXSksDQo+ID4gKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7DQo+ID4gKwlp ZiAoIWdycC0+cGluX2lkcyB8fCAhZ3JwLT5waW5zKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0K PiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBncnAtPm5waW5zOyBpKyspIHsNCj4gPiArCQl1 MzIgcGluX2lkID0gYmUzMl90b19jcHUoKmxpc3QrKyk7DQo+ID4gKw0KPiA+ICsJCWdycC0+cGlu c1tpXSA9IHBpbl9pZCAmIDB4ZmY7DQo+ID4gKwkJZ3JwLT5waW5faWRzW2ldID0gKHBpbl9pZCA+ PiA4KSAmIDB4N2Y7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGdycC0+bnBpbnM7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnpuMV9waW5jdHJsX2NvdW50X2Z1bmN0aW9u X2dyb3VwcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKmNoaWxkOw0KPiA+ICsJaW50IGNvdW50ID0gMDsNCj4gPiArDQo+ID4gKwlpZiAo b2ZfcHJvcGVydHlfY291bnRfdTMyX2VsZW1zKG5wLCBSWk4xX1BJTlNfUFJPUCkgPiAwKQ0KPiA+ ICsJCWNvdW50Kys7DQo+ID4gKw0KPiA+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hp bGQpIHsNCj4gPiArCQlpZiAob2ZfcHJvcGVydHlfY291bnRfdTMyX2VsZW1zKGNoaWxkLCBSWk4x X1BJTlNfUFJPUCkNCj4gPiAwKQ0KPiA+ICsJCQljb3VudCsrOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXJldHVybiBjb3VudDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCByem4xX3Bp bmN0cmxfcGFyc2VfZnVuY3Rpb25zKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsDQo+ID4gKwkJCQkJ c3RydWN0IHJ6bjFfcGluY3RybCAqaXBjdGwsIHUzMiBpbmRleCkgew0KPiA+ICsJc3RydWN0IGRl dmljZV9ub2RlICpjaGlsZDsNCj4gPiArCXN0cnVjdCByem4xX3BteF9mdW5jICpmdW5jOw0KPiA+ ICsJc3RydWN0IHJ6bjFfcGluX2dyb3VwICpncnA7DQo+ID4gKwl1MzIgaSA9IDA7DQo+ID4gKwlp bnQgcmV0Ow0KPiA+ICsNCj4gPiArCWRldl9kYmcoaXBjdGwtPmRldiwgInBhcnNlIGZ1bmN0aW9u KCVkKTogJXNcbiIsIGluZGV4LCBucC0+bmFtZSk7DQo+ID4gKw0KPiA+ICsJZnVuYyA9ICZpcGN0 bC0+ZnVuY3Rpb25zW2luZGV4XTsNCj4gPiArDQo+ID4gKwkvKiBJbml0aWFsaXNlIGZ1bmN0aW9u ICovDQo+ID4gKwlmdW5jLT5uYW1lID0gbnAtPm5hbWU7DQo+ID4gKwlmdW5jLT5udW1fZ3JvdXBz ID0gcnpuMV9waW5jdHJsX2NvdW50X2Z1bmN0aW9uX2dyb3VwcyhucCk7DQo+ID4gKwlkZXZfZGJn KGlwY3RsLT5kZXYsICJmdW5jdGlvbiAlcyBoYXMgJWQgZ3JvdXBzXG4iLA0KPiA+ICsJCW5wLT5u YW1lLCBmdW5jLT5udW1fZ3JvdXBzKTsNCj4gDQo+IE1heWJlIG1vdmUgdGhpcyBkZWJ1ZyBwcmlu dG91dCBiZWxvdyB0aGUgZXJyb3IgY2hlY2ssIGl0IGhlbHBzIHRvIGtub3cNCj4gcGFyc2luZyB3 ZW50IGZpbmUuDQpNYWtlcyBzZW5zZQ0KDQoNCj4gPiArCWlmIChmdW5jLT5udW1fZ3JvdXBzID09 IDApIHsNCj4gPiArCQlkZXZfZXJyKGlwY3RsLT5kZXYsICJubyBncm91cHMgZGVmaW5lZCBpbiAl c1xuIiwgbnAtDQo+ID5mdWxsX25hbWUpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWZ1bmMtPmdyb3VwcyA9IGRldm1fa21hbGxvY19hcnJheShpcGN0bC0+ ZGV2LA0KPiA+ICsJCQkJCSAgZnVuYy0+bnVtX2dyb3Vwcywgc2l6ZW9mKGNoYXIgKiksDQo+ID4g KwkJCQkJICBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghZnVuYy0+Z3JvdXBzKQ0KPiA+ICsJCXJl dHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWlmIChvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxl bXMobnAsIFJaTjFfUElOU19QUk9QKSA+IDApIHsNCj4gPiArCQlmdW5jLT5ncm91cHNbaV0gPSBu cC0+bmFtZTsNCj4gPiArCQlncnAgPSAmaXBjdGwtPmdyb3Vwc1tpcGN0bC0+bmdyb3Vwc107DQo+ ID4gKwkJZ3JwLT5mdW5jID0gZnVuYy0+bmFtZTsNCj4gPiArCQlyZXQgPSByem4xX3BpbmN0cmxf cGFyc2VfZ3JvdXBzKG5wLCBncnAsIGlwY3RsKTsNCj4gPiArCQlpZiAocmV0IDwgMCkNCj4gPiAr CQkJcmV0dXJuIHJldDsNCj4gPiArCQlpZiAocmV0ID4gMCkgew0KPiANCj4gWW91IG5ldmVyIHJl dHVybiBncnAtPm5waW5zID09IDA7IGl0J3MgZWl0aGVyIGVycm9yIG9yID4gMC4gSSB0aGluayB5 b3UgY2FuIGRyb3ANCj4gdGhpcyBjaGVjay4NCj4gDQo+ID4gKwkJCWkrKzsNCj4gPiArCQkJaXBj dGwtPm5ncm91cHMrKzsNCj4gPiArCQl9DQo+IA0KPiBUaGlzIGRlc2lnbiBhbGxvd3MgYSBzdWIt bm9kZSB3aXRoIHRoZSBmb2xsb3dpbmcgbGF5b3V0DQo+IA0KPiAgICAgICAgIG4tMSB7DQo+ICAg ICAgICAgICAgICAgICBwaW5tdXggPSA8Li4+Ow0KPiANCj4gICAgICAgICAgICAgICAgIHN1Yi1u LTEgew0KPiAgICAgICAgICAgICAgICAgICAgICAgICBwaW5tdXggPSA8Li4+Ow0KPiAgICAgICAg ICAgICAgICAgfTsNCj4gDQo+ICAgICAgICAgICAgICAgICBzdWItbi0yIHsNCj4gICAgICAgICAg ICAgICAgICAgICAgICAgcGlubXV4ID0gPC4uPjsNCj4gICAgICAgICAgICAgICAgIH07DQo+ICAg ICAgICAgfTsNCj4gDQo+IFRoZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIG9ubHkgYWxsb3dzIGVp dGhlciB0aGlzDQo+IA0KPiAgICAgICAgIG4tMSB7DQo+ICAgICAgICAgICAgICAgICBwaW5tdXgg PSA8Li4+Ow0KPiAgICAgICAgIH07DQo+IA0KPiBPciB0aGlzDQo+ICAgICAgICAgbi0xIHsNCj4g ICAgICAgICAgICAgICAgIHN1Yi1uLTEgew0KPiAgICAgICAgICAgICAgICAgICAgICAgICBwaW5t dXggPSA8Li4+Ow0KPiAgICAgICAgICAgICAgICAgfTsNCj4gDQo+ICAgICAgICAgICAgICAgICBz dWItbi0yIHsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgcGlubXV4ID0gPC4uPjsNCj4gICAg ICAgICAgICAgICAgIH07DQo+ICAgICAgICAgfTsNCj4gDQo+IFNvIEkgZ3Vlc3MgaXQncyBvbmUg b3IgdGhlIG90aGVyIGhlcmUuIFdoYXQgZG8geW91IHRoaW5rPw0KSW5kZWVkLCB0aGUgYmluZGlu Z3MgbmVlZCB1cGRhdGluZyB0byBjb3ZlciB0aGUgZXh0cmEgY2FzZS4gSSB0aGluaw0KdGhpcyBl eHRyYSBjYXNlIGlzIHF1aXRlIG5lYXQuDQoNCg0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvcl9l YWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7DQo+ID4gKwkJZnVuYy0+Z3JvdXBzW2ldID0g Y2hpbGQtPm5hbWU7DQo+ID4gKwkJZ3JwID0gJmlwY3RsLT5ncm91cHNbaXBjdGwtPm5ncm91cHNd Ow0KPiA+ICsJCWdycC0+ZnVuYyA9IGZ1bmMtPm5hbWU7DQo+ID4gKwkJcmV0ID0gcnpuMV9waW5j dHJsX3BhcnNlX2dyb3VwcyhjaGlsZCwgZ3JwLCBpcGN0bCk7DQo+ID4gKwkJaWYgKHJldCA8IDAp DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJaWYgKHJldCA+IDApIHsNCj4gPiArCQkJaSsr Ow0KPiA+ICsJCQlpcGN0bC0+bmdyb3VwcysrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlkZXZfZGJnKGlwY3RsLT5kZXYsICJmdW5jdGlvbiAlcyBwYXJzZWQgJWQvJWQgZ3JvdXBz XG4iLA0KPiA+ICsJCW5wLT5uYW1lLCBpLCBmdW5jLT5udW1fZ3JvdXBzKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCByem4xX3BpbmN0cmxf cHJvYmVfZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwNCj4gPiArCQkJCSBzdHJ1Y3Qg cnpuMV9waW5jdHJsICppcGN0bCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpu cCA9IHBkZXYtPmRldi5vZl9ub2RlOw0KPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsN Cj4gPiArCXVuc2lnbmVkIGludCBtYXhncm91cHMgPSAwOw0KPiA+ICsJdTMyIG5mdW5jcyA9IDA7 DQo+ID4gKwl1MzIgaSA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCW5mdW5jcyA9 IG9mX2dldF9jaGlsZF9jb3VudChucCk7DQo+ID4gKwlpZiAobmZ1bmNzIDw9IDApIHsNCj4gPiAr CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBmdW5jdGlvbnMgZGVmaW5lZFxuIik7DQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+IA0KPiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZmFp bCBpZiBubyBwaW5tdXhpbmcgc3ViLW5vZGUgaXMgZGVmaW5lZD8gSSBjYW4gdGhpbmsgb2YNCj4g Ym9hcmRzIHdoaWNoIGluY2x1ZGVzIHRoZSBTb0MgLmR0c2kgYnV0IGRvIG5vdCBkZWZpbmUgKHll dCkgYW55IHBpbm11eC9jb25mDQo+IHN1Yi1ub2Rlcy4gVGhpcyBzaG91bGRuJ3QgYmUgYW4gZXJy b3IuDQpNYWtlcyBzZW5zZS4NCg0KDQo+ID4gKw0KPiA+ICsJaXBjdGwtPm5mdW5jdGlvbnMgPSBu ZnVuY3M7DQo+ID4gKwlpcGN0bC0+ZnVuY3Rpb25zID0gZGV2bV9rbWFsbG9jX2FycmF5KCZwZGV2 LT5kZXYsIG5mdW5jcywNCj4gPiArCQkJCQkgICAgICBzaXplb2YoKmlwY3RsLT5mdW5jdGlvbnMp LA0KPiA+ICsJCQkJCSAgICAgIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFpcGN0bC0+ZnVuY3Rp b25zKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWlwY3RsLT5uZ3JvdXBz ID0gMDsNCj4gPiArCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKQ0KPiA+ICsJCW1h eGdyb3VwcyArPSByem4xX3BpbmN0cmxfY291bnRfZnVuY3Rpb25fZ3JvdXBzKGNoaWxkKTsNCj4g PiArDQo+ID4gKwlpcGN0bC0+Z3JvdXBzID0gZGV2bV9rbWFsbG9jX2FycmF5KCZwZGV2LT5kZXYs DQo+ID4gKwkJCQkJICAgbWF4Z3JvdXBzLA0KPiA+ICsJCQkJCSAgIHNpemVvZigqaXBjdGwtPmdy b3VwcyksDQo+ID4gKwkJCQkJICAgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIWlwY3RsLT5ncm91 cHMpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJZm9yX2VhY2hfY2hpbGRf b2Zfbm9kZShucCwgY2hpbGQpIHsNCj4gPiArCQlyZXQgPSByem4xX3BpbmN0cmxfcGFyc2VfZnVu Y3Rpb25zKGNoaWxkLCBpcGN0bCwgaSsrKTsNCj4gPiArCQlpZiAocmV0IDwgMCkNCj4gPiArCQkJ cmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCByem4xX3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IHJ6bjFfcGluY3RybCAqaXBjdGw7DQo+ID4gKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlczsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJLyogQ3Jl YXRlIHN0YXRlIGhvbGRlcnMgZXRjIGZvciB0aGlzIGRyaXZlciAqLw0KPiA+ICsJaXBjdGwgPSBk ZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppcGN0bCksIEdGUF9LRVJORUwpOw0KPiA+ ICsJaWYgKCFpcGN0bCkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlpcGN0 bC0+bWRpb19mdW5jWzBdID0gLTE7DQo+ID4gKwlpcGN0bC0+bWRpb19mdW5jWzFdID0gLTE7DQo+ ID4gKw0KPiA+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsNCj4gPiArCWlwY3RsLT5sZXYxX3Byb3RlY3RfcGh5cyA9ICh1MzIpcmVzLT5zdGFy dCArIDB4NDAwOw0KPiA+ICsJaXBjdGwtPmxldjEgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBk ZXYtPmRldiwgcmVzKTsNCj4gPiArCWlmIChJU19FUlIoaXBjdGwtPmxldjEpKQ0KPiA+ICsJCXJl dHVybiBQVFJfRVJSKGlwY3RsLT5sZXYxKTsNCj4gPiArDQo+ID4gKwlyZXMgPSBwbGF0Zm9ybV9n ZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOw0KPiA+ICsJaXBjdGwtPmxldjJf cHJvdGVjdF9waHlzID0gKHUzMilyZXMtPnN0YXJ0ICsgMHg0MDA7DQo+ID4gKwlpcGN0bC0+bGV2 MiA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOw0KPiA+ICsJaWYgKElT X0VSUihpcGN0bC0+bGV2MikpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoaXBjdGwtPmxldjIpOw0K PiA+ICsNCj4gPiArCWlwY3RsLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImJ1cyIp Ow0KPiA+ICsJaWYgKElTX0VSUihpcGN0bC0+Y2xrKSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihp cGN0bC0+Y2xrKTsNCj4gPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpcGN0bC0+Y2xrKTsN Cj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlpcGN0bC0+ ZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCXJ6bjFfcGluY3RybF9kZXNjLm5hbWUgPSBkZXZfbmFt ZSgmcGRldi0+ZGV2KTsNCj4gPiArCXJ6bjFfcGluY3RybF9kZXNjLnBpbnMgPSByem4xX3BpbnM7 DQo+ID4gKwlyem4xX3BpbmN0cmxfZGVzYy5ucGlucyA9IEFSUkFZX1NJWkUocnpuMV9waW5zKTsN Cj4gPiArDQo+ID4gKwlyZXQgPSByem4xX3BpbmN0cmxfcHJvYmVfZHQocGRldiwgaXBjdGwpOw0K PiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWwgdG8gcHJv YmUgZHQgcHJvcGVydGllc1xuIik7DQo+ID4gKwkJZ290byBlcnJfY2xrOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlwY3RsKTsNCj4gPiArCWlwY3Rs LT5wY3RsID0gcGluY3RybF9yZWdpc3RlcigmcnpuMV9waW5jdHJsX2Rlc2MsICZwZGV2LT5kZXYs IGlwY3RsKTsNCj4gPiArCWlmICghaXBjdGwtPnBjdGwpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2 LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgcnpuMSBwaW5jdHJsDQo+IGRyaXZlclxuIik7DQo+ ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlnb3RvIGVycl9jbGs7DQo+ID4gKwl9DQo+IA0K PiBCaW5kaW5ncyBjbGFpbSB0aGlzIGlzIGEgcGluY3RybC9ncGlvIGNvbnRyb2xsZXIsIGJ1dCBJ IGRvbid0IHNlZSBhbnkgZ3BpbyBzdXBwb3J0DQo+IGhlcmUuIEknbGwgY29tbWVudCBvbiB0aGUg YmluZGluZ3MgZm9yIHJlZmVyZW5jZSB0b28uDQpJbmRlZWQsIEknbGwgcmVtb3ZlIGZyb20gdGhl IGJpbmRpbmcuDQoNClRoYW5rcyBhZ2FpbiBmb3IgdGhlIHJldmlldyENClBoaWwNCg0KDQo+IFRo YW5rcw0KPiAgICBqDQo+IA0KPiA+ICsNCj4gPiArCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcm9i ZWRcbiIpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2NsazoNCj4g PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShpcGN0bC0+Y2xrKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ6bjFfcGluY3RybF9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IHJ6bjFfcGlu Y3RybCAqaXBjdGwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArDQo+ID4gKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoaXBjdGwtPmNsayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ6 bjFfcGluY3RybF9tYXRjaFtdID0gew0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJ6 bjEtcGluY3RybCIsIH0sDQo+ID4gKwl7fQ0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCByem4xX3BpbmN0cmxfbWF0Y2gpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgcnpuMV9waW5jdHJsX2RyaXZlciA9IHsNCj4gPiArCS5wcm9iZQk9IHJ6 bjFfcGluY3RybF9wcm9iZSwNCj4gPiArCS5yZW1vdmUgPSByem4xX3BpbmN0cmxfcmVtb3ZlLA0K PiA+ICsJLmRyaXZlcgk9IHsNCj4gPiArCQkubmFtZQkJPSAicnpuMS1waW5jdHJsIiwNCj4gPiAr CQkub3duZXIJCT0gVEhJU19NT0RVTEUsDQo+ID4gKwkJLm9mX21hdGNoX3RhYmxlCT0gcnpuMV9w aW5jdHJsX21hdGNoLA0KPiA+ICsJfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg X19pbml0IF9waW5jdHJsX2Rydl9yZWdpc3Rlcih2b2lkKSB7DQo+ID4gKwlyZXR1cm4gcGxhdGZv cm1fZHJpdmVyX3JlZ2lzdGVyKCZyem4xX3BpbmN0cmxfZHJpdmVyKTsNCj4gPiArfQ0KPiA+ICtz dWJzeXNfaW5pdGNhbGwoX3BpbmN0cmxfZHJ2X3JlZ2lzdGVyKTsNCj4gPiArDQo+ID4gK01PRFVM RV9BVVRIT1IoIlBoaWwgRWR3b3J0aHkgPHBoaWwuZWR3b3J0aHlAcmVuZXNhcy5jb20+Iik7DQo+ ID4gK01PRFVMRV9ERVNDUklQVElPTigiUmVuZXNhcyBSWi9OMSBwaW5jdHJsIGRyaXZlciIpOw0K PiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+ID4gLS0NCj4gPiAyLjE3LjENCj4gPg0K