From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 36489C433E1 for ; Tue, 9 Jun 2020 18:25:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 74FE72068D for ; Tue, 9 Jun 2020 18:25:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="eo+kkmLJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389167AbgFISZD (ORCPT ); Tue, 9 Jun 2020 14:25:03 -0400 Received: from mail-eopbgr750089.outbound.protection.outlook.com ([40.107.75.89]:17984 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732034AbgFISYo (ORCPT ); Tue, 9 Jun 2020 14:24:44 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n7SdbiHF0mkYjxv+HCBq/jzg2nb70PhzdKdu0SUAg/v6m0XolJU9bUmb9xi0sR2teL7l0sw/73f24mL+S5XxXiIKw1ouUvniGw3Lk3PRwsQE3s2p/vYeTwC6DjziMMxThn4PkpzeaKv/M4xxRXWdOe+pdmtUegZaKQTaZtOaK9HrL09QhkD4u78zCi+n7urL0kflstjypcTXxkriu2SwRabe+T2vCqRM3cicEKX/OGC6XtlQcosMwOEyD+G6QlH0KfwXkM6gyJqBNviV/pvD5jaha9UNwllGoOvqgP8eUhhxBIMXfH3tizTk7m9rQlnf0vNgDRdMmqWLmtynCMJ9WA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Vs3mPPbWfOqDgJW5CKqS6oMgGEuufxGlqUcS8LncJoI=; b=gThP+Z7/YydluKXiBMY4qNUy0CKqpcqobw2DgBl5NLuSDGPsWhivxLs809h7MXpB8RvsXbfMgmaUCh0iMAQK596h//yXVyhq0V4Cl+1lhryQfoRqDo5n0FSOuf5ZNGbNIjB4tStgsNMH75NHKOP1HRfVXtJ85bVMRKHbmTwEHRwMGe1FJTYXIkp+HwOfcHLYnXz6eIwVzrXsjbHJhbFX/KIBkcam6pmjytHUFLSN2f59mSjYGhykR/gLMIcT7xAn4cA5ClTqgrGWmrZn1l5p1HfjmeGM0jZ2DtsrwtK13twXQrPblqyrhc3a7UV3XtaLyfcyTSPiRfmy+jflAlobBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=xilinx.com; dmarc=pass action=none header.from=xilinx.com; dkim=pass header.d=xilinx.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Vs3mPPbWfOqDgJW5CKqS6oMgGEuufxGlqUcS8LncJoI=; b=eo+kkmLJBhib3zhJ9bBdCxg85FGXBZZcZu9uE9EHawR7wSXaTIxBcGB51lIsD1VL47lcWvZTwRullTGMtd5kB6I995aJ6/ooHrj9ObFTkcUsji7Ia1sd4irKyd9ZkHJuxhEQQvhr5KQELw163KOEFZ6ztFxmNMRsfYffsTWO5LU= Received: from BY5PR02MB6867.namprd02.prod.outlook.com (2603:10b6:a03:21c::9) by BY5PR02MB6212.namprd02.prod.outlook.com (2603:10b6:a03:1f6::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.18; Tue, 9 Jun 2020 18:23:55 +0000 Received: from BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::307b:d6d0:221d:9550]) by BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::307b:d6d0:221d:9550%8]) with mapi id 15.20.3066.023; Tue, 9 Jun 2020 18:23:55 +0000 From: Vishal Sagar To: Hyun Kwon CC: "laurent.pinchart@ideasonboard.com" , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Joe Perches , Vishal Sagar Subject: RE: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Topic: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Index: AQHWHjEiqUZz1pXhF0WpN20jJIL4b6ibb88AgDOCNpA= Date: Tue, 9 Jun 2020 18:23:55 +0000 Message-ID: References: <20200429141705.18755-1-vishal.sagar@xilinx.com> <20200429141705.18755-3-vishal.sagar@xilinx.com> <20200506184229.GA27667@smtp.xilinx.com> In-Reply-To: <20200506184229.GA27667@smtp.xilinx.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: xilinx.com; dkim=none (message not signed) header.d=none;xilinx.com; dmarc=none action=none header.from=xilinx.com; x-originating-ip: [223.230.54.177] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 9e20bc50-6dd2-424a-7346-08d80ca244e5 x-ms-traffictypediagnostic: BY5PR02MB6212: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 042957ACD7 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: O+RoMoDn6+iAuMF7AWcYEvy7k+fpVu4BnsfMU6tycrx73BM+wjYaXZzv+zIy/okYME14/qUDxdCJX8dxybGQ/RMnV7L3Ufp8RKp8Slt0hGlXaCn2cjOMwgibKvuT39fYcFnpfcnNXueeBRo5h7Di+CZ515LNFd1vuJJNljKBvALz5lZ+BwN6hSTAh6K8pCMWWnD0QY+wM86kA855TC66bJotMbiOoELfCn/o5SsCBoR2af77GNejwYUUqcaCOEkfGa4UFlJZkv7m68e+45ajEx57afuwgQ9ZlN+4Vve+b+1Ktr2Rak2t+anmIr3dNxKoKzpamudqG2ObyiACaX0h4QNu2BDXVcUJJ0ybEYYu3nMzrP6vlwIhKISEcMcd1zKporUOYfAVUN1hmT2JcjYr/Q== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR02MB6867.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(366004)(39850400004)(396003)(346002)(376002)(136003)(55016002)(71200400001)(7416002)(8676002)(8936002)(19627235002)(316002)(54906003)(2906002)(186003)(966005)(33656002)(6862004)(86362001)(107886003)(478600001)(76116006)(53546011)(4326008)(6506007)(52536014)(26005)(5660300002)(6636002)(7696005)(9686003)(66476007)(66556008)(30864003)(83380400001)(66946007)(64756008)(66446008)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: G/pSvExOrP0yoxO1ZvpFGW7deZUbaxaxRw80uiXbLVGyYupYgp+td3m8Jq3OaHVuPNzcxlbMNjqf5PyWvWQHB2LiQ13a6+GfvIFt6G4GkigWe8Lm5rfm0TjEtbGl4jtXSszopaehqP39U3W5ZtmcQQSKslQLdizk0/hsGBWn+dJSY5r59W0EpP5F/1/vL0/yzIfCLFH/QAzNrrm62LePZP/La3A72DyWSE/DS8J1wxKyVHrhbxuK5Kl+yZbmmqMLMBlb+CJz7wegPc3ikm6bNYaPnX+DoKHo0IMlnqamke7f4Fchoy9q7oJw/YurdrRF52QQPFuU668k1AHVW2DvDZK/p787ZPS/lFRLIb1qOPfzYQ5j+24yHOOqsC528YSLh+KfpGarfnm6X8y/Z4M7Q3tHLGJ8APgphfxkIQovWXoJP9QLOwOeU1ASHh6U1jldBRHtw87cVH1mCGw9n4QCZnxVUHeRP3cegnpczXpWsLqez/3uyPxOIsKWN5Lzz367 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e20bc50-6dd2-424a-7346-08d80ca244e5 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jun 2020 18:23:55.1196 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ooGn6VIgPv34utnn1nIuz8rA1JQGWewWS3CrxSZTF8ihGJqiUmaAHI0VkBdHOAozAgTVhqmfGyzoZFgqoPwaNw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB6212 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSHl1biwNCg0KVGhhbmtzIGZvciB0aGUgcmV2aWV3Lg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+IEZyb206IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+DQo+IFNl bnQ6IFRodXJzZGF5LCBNYXkgNywgMjAyMCAxMjoxMyBBTQ0KPiBUbzogVmlzaGFsIFNhZ2FyIDx2 c2FnYXJAeGlsaW54LmNvbT4NCj4gQ2M6IEh5dW4gS3dvbiA8aHl1bmtAeGlsaW54LmNvbT47IGxh dXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbTsNCj4gbWNoZWhhYkBrZXJuZWwub3JnOyBy b2JoK2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0bGFuZEBhcm0uY29tOyBNaWNoYWwNCj4gU2ltZWsg PG1pY2hhbHNAeGlsaW54LmNvbT47IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZzsNCj4gZGV2 aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGhhbnMudmVya3VpbEBjaXNjby5jb207IGxpbnV4LWFy bS0NCj4ga2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5l bC5vcmc7IERpbmVzaCBLdW1hcg0KPiA8ZGluZXNoa0B4aWxpbnguY29tPjsgU2FuZGlwIEtvdGhh cmkgPHNhbmRpcGtAeGlsaW54LmNvbT47IEpvZSBQZXJjaGVzDQo+IDxqb2VAcGVyY2hlcy5jb20+ OyBWaXNoYWwgU2FnYXIgPHZzYWdhckB4aWxpbnguY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENI IHYyIDIvMl0gbWVkaWE6IHY0bDogeGlsaW54OiBBZGQgWGlsaW54IFVIRC1TREkgUnggU3Vic3lz dGVtDQo+IGRyaXZlcg0KPiANCj4gSGkgVmlzaGFsLA0KPiANCj4gVGhhbmtzIGZvciB0aGUgcGF0 Y2guIFNvcnJ5IGZvciBsYXRlIHJlcGx5Lg0KPiANCj4gT24gV2VkLCAyMDIwLTA0LTI5IGF0IDA3 OjE3OjA0IC0wNzAwLCBWaXNoYWwgU2FnYXIgd3JvdGU6DQo+ID4gVGhlIFhpbGlueCBVSEQtU0RJ IFJ4IHN1YnN5c3RlbSBzb2Z0IElQIGlzIHVzZWQgdG8gY2FwdHVyZSBuYXRpdmUgU0RJDQo+ID4g c3RyZWFtcyBmcm9tIFNESSBzb3VyY2VzIGxpa2UgU0RJIGJyb2FkY2FzdCBlcXVpcG1lbnQgbGlr ZSBjYW1lcmFzIGFuZA0KPiA+IG1peGVycy4gVGhpcyBibG9jayBvdXRwdXRzIGVpdGhlciBuYXRp dmUgU0RJLCBuYXRpdmUgdmlkZW8gb3INCj4gPiBBWEk0LVN0cmVhbSBjb21wbGlhbnQgZGF0YSBz dHJlYW0gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gUGxlYXNlIHJlZmVyDQo+ID4gdG8gUEcyOTAg Zm9yIGRldGFpbHMuDQo+ID4NCj4gPiBUaGUgZHJpdmVyIGlzIHVzZWQgdG8gY29uZmlndXJlIHRo ZSBJUCB0byBhZGQgZnJhbWVyLCBzZWFyY2ggZm9yDQo+ID4gc3BlY2lmaWMgbW9kZXMsIGdldCB0 aGUgZGV0ZWN0ZWQgbW9kZSwgc3RyZWFtIHBhcmFtZXRlcnMsIGVycm9ycywgZXRjLg0KPiA+IEl0 IGFsc28gZ2VuZXJhdGVzIGV2ZW50cyBmb3IgdmlkZW8gbG9jay91bmxvY2ssIGJyaWRnZSBvdmVy L3VuZGVyIGZsb3cuDQo+ID4NCj4gPiBUaGUgZHJpdmVyIHN1cHBvcnRzIDEwLzEyIGJwYyBZVVYg NDIyIG1lZGlhIGJ1cyBmb3JtYXQgY3VycmVudGx5LiBJdCBhbHNvDQo+ID4gZGVjb2RlcyB0aGUg c3RyZWFtIHBhcmFtZXRlcnMgYmFzZWQgb24gdGhlIFNUMzUyIHBhY2tldCBlbWJlZGRlZCBpbiB0 aGUNCj4gPiBzdHJlYW0uIEluIGNhc2UgdGhlIFNUMzUyIHBhY2tldCBpc24ndCBwcmVzZW50IGlu IHRoZSBzdHJlYW0sIHRoZSBjb3JlJ3MNCj4gPiBkZXRlY3RlZCBwcm9wZXJ0aWVzIGFyZSB1c2Vk IHRvIHNldCBzdHJlYW0gcHJvcGVydGllcy4NCj4gPg0KPiA+IFRoZSBkcml2ZXIgY3VycmVudGx5 IHN1cHBvcnRzIG9ubHkgdGhlIEFYSTQtU3RyZWFtIElQIGNvbmZpZ3VyYXRpb24uDQo+ID4NCj4g PiBTaWduZWQtb2ZmLWJ5OiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbnguY29tPg0K PiA+IC0tLQ0KPiA+IHYyDQo+ID4gLSBBZGRlZCBEViB0aW1pbmcgc3VwcG9ydCBiYXNlZCBvbiBI YW5zIFZlcmt1aWzFmyBmZWVkYmFjaw0KPiA+IC0gTW9yZSBkb2N1bWVudGF0aW9uIHRvIGN1c3Rv bSB2NGwgY29udHJvbHMgYW5kIGV2ZW50cw0KPiA+IC0gRml4ZWQgSHl1bsWbIGNvbW1lbnRzDQo+ ID4gLSBBZGRlZCBtYWNybyBmb3IgbWFza2luZyBhbmQgc2hpZnRpbmcgYXMgcGVyIEpvZSBQZXJj aGVzIGNvbW1lbnRzDQo+ID4gLSBVcGRhdGVkIHRvIGxhdGVzdCBhcyBwZXIgWGlsaW54IGdpdGh1 YiByZXBvIGRyaXZlciBsaWtlDQo+ID4gICBhZGRpbmcgbmV3IERWIHRpbWluZ3Mgbm90IGluIG1h aW5saW5lIHlldCB1cHRpbGwgMDMvMjEvMjANCj4gPg0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL3hpbGlueC9LY29uZmlnICAgICAgICAgfCAgIDExICsNCj4gPiAgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS94aWxpbngvTWFrZWZpbGUgICAgICAgIHwgICAgMSArDQo+ID4gIC4uLi9tZWRpYS9w bGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYyAgICB8IDIxNjIgKysrKysrKysrKysrKysr KysNCj4gPiAgaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNzLmggICAgICAgICAgIHwg IDE3OSArKw0KPiA+ICBpbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMuaCAg ICAgfCAgIDY3ICsNCj4gPiAgNSBmaWxlcyBjaGFuZ2VkLCAyNDIwIGluc2VydGlvbnMoKykNCj4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlu eC1zZGlyeHNzLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC94 aWxpbngtc2Rpcnhzcy5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS94aWxpbngvS2NvbmZpZw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tj b25maWcNCj4gPiBpbmRleCAwMWM5NmZiNjY0MTQuLjc3MDkxMzE4YTljOSAxMDA2NDQNCj4gPiAt LS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ID4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZw0KPiA+IEBAIC0xMiw2ICsxMiwxNyBA QCBjb25maWcgVklERU9fWElMSU5YDQo+ID4NCj4gPiAgaWYgVklERU9fWElMSU5YDQo+ID4NCj4g PiArY29uZmlnIFZJREVPX1hJTElOWF9TRElSWFNTDQo+ID4gKwl0cmlzdGF0ZSAiWGlsaW54IFVI RCBTREkgUnggU3Vic3lzdGVtIg0KPiA+ICsJaGVscA0KPiA+ICsJICBEcml2ZXIgZm9yIFhpbGlu eCBVSEQtU0RJIFJ4IFN1YnN5c3RlbS4gVGhpcyBpcyBhIFY0TCBzdWItZGV2aWNlDQo+ID4gKwkg IGJhc2VkIGRyaXZlciB0aGF0IHRha2VzIGlucHV0IGZyb20gYSBTREkgc291cmNlIGxpa2UgU0RJ IGNhbWVyYSBhbmQNCj4gPiArCSAgY29udmVydHMgaXQgaW50byBhbiBBWEk0LVN0cmVhbS4gVGhl IHN1YnN5c3RlbSBjb21wcmlzZXMgb2YgYSBTTVBURQ0KPiA+ICsJICBVSEQtU0RJIFJ4IGNvcmUs IGEgU0RJIFJ4IHRvIE5hdGl2ZSBWaWRlbyBicmlkZ2UgYW5kIGEgVmlkZW8gSW4gdG8NCj4gPiAr CSAgQVhJNC1TdHJlYW0gYnJpZGdlLiBUaGUgZHJpdmVyIGlzIHVzZWQgdG8gc2V0IGRpZmZlcmVu dCBzdHJlYW0NCj4gPiArCSAgZGV0ZWN0aW9uIG1vZGVzIGFuZCBpZGVudGlmeSBzdHJlYW0gcHJv cGVydGllcyB0byBwcm9wZXJseSBjb25maWd1cmUNCj4gPiArCSAgZG93bnN0cmVhbS4NCj4gPiAr DQo+ID4gIGNvbmZpZyBWSURFT19YSUxJTlhfVFBHDQo+ID4gIAl0cmlzdGF0ZSAiWGlsaW54IFZp ZGVvIFRlc3QgUGF0dGVybiBHZW5lcmF0b3IiDQo+ID4gIAlkZXBlbmRzIG9uIFZJREVPX1hJTElO WA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmls ZQ0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlDQo+ID4gaW5kZXgg NGNkYzBiMWVjN2E1Li42YzM3NWYwM2Y1ODcgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL3hpbGlueC9NYWtlZmlsZQ0KPiA+IEBAIC0yLDYgKzIsNyBAQA0KPiA+DQo+ID4gIHhpbGlu eC12aWRlby1vYmpzICs9IHhpbGlueC1kbWEubyB4aWxpbngtdmlwLm8geGlsaW54LXZpcHAubw0K PiA+DQo+ID4gK29iai0kKENPTkZJR19WSURFT19YSUxJTlhfU0RJUlhTUykgKz0geGlsaW54LXNk aXJ4c3Mubw0KPiANCj4gVGhpcyBiZXR0ZXIgY29tZSBhZnRlciBDT05GSUdfVklERU9fWElMSU5Y Lg0KPiANCg0KT2sgSSB3aWxsIHRha2UgY2FyZSBvZiB0aGlzIGluIG5leHQgdmVyc2lvbi4NCg0K PiA+ICBvYmotJChDT05GSUdfVklERU9fWElMSU5YKSArPSB4aWxpbngtdmlkZW8ubw0KPiA+ICBv YmotJChDT05GSUdfVklERU9fWElMSU5YX1RQRykgKz0geGlsaW54LXRwZy5vDQo+ID4gIG9iai0k KENPTkZJR19WSURFT19YSUxJTlhfVlRDKSArPSB4aWxpbngtdnRjLm8NCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYw0KPiBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzUzNmVhM2FhYTBkDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hp bGlueC1zZGlyeHNzLmMNCj4gPiBAQCAtMCwwICsxLDIxNjIgQEANCj4gPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogRHJpdmVyIGZvciBYaWxp bnggU0RJIFJ4IFN1YnN5c3RlbQ0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcg LSAyMDIwIFhpbGlueCwgSW5jLg0KPiA+ICsgKg0KPiA+ICsgKiBDb250YWN0czogVmlzaGFsIFNh Z2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4NCj4gPiArICoNCj4gPiArICovDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSA8ZHQtYmluZGluZ3MvbWVkaWEveGlsaW54LXZpcC5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvYml0b3BzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPg0K PiANCj4gSXMgdGhpcyBuZWVkZWQ/IE1heWJlIHVudXNlZCBvbmVzIGNhbiBiZSByZW1vdmVkLg0K PiANCg0KWWVzIG1vc3Qgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IHZlcnNpb24uDQoNCj4g PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L29mLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcG0u aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Nw aW5sb2NrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Y0bDItZHYtdGlt aW5ncy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdjRsMi1zdWJkZXYuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L3hpbGlueC1zZGlyeHNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC94aWxpbngt djRsMi1jb250cm9scy5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvbWVkaWEtZW50aXR5Lmg+DQo+ ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEv djRsMi1jdHJscy5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPg0KPiA+ICsj aW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDIt c3ViZGV2Lmg+DQo+ID4gKyNpbmNsdWRlICJ4aWxpbngtdmlwLmgiDQo+ID4gKw0KPiA+ICsvKg0K PiA+ICsgKiBTREkgUnggcmVnaXN0ZXIgbWFwLCBiaXRtYXNrIGFuZCBvZmZzZXRzDQo+ID4gKyAq Lw0KPiA+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9SRUcJCTB4MDANCj4gPiArI2RlZmluZSBY U0RJUlhfTURMX0NUUkxfUkVHCQkweDA0DQo+ID4gKyNkZWZpbmUgWFNESVJYX0dMQkxfSUVSX1JF RwkJMHgwQw0KPiA+ICsjZGVmaW5lIFhTRElSWF9JU1JfUkVHCQkJMHgxMA0KPiA+ICsjZGVmaW5l IFhTRElSWF9JRVJfUkVHCQkJMHgxNA0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9S RUcJCTB4MTgNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFMxX1JFRwkJMHgxQw0KPiA+ICsj ZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzNfUkVHCQkweDIwDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NU MzUyX0RTNV9SRUcJCTB4MjQNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFM3X1JFRwkJMHgy OA0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzlfUkVHCQkweDJDDQo+ID4gKyNkZWZpbmUg WFNESVJYX1NUMzUyX0RTMTFfUkVHCQkweDMwDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RT MTNfUkVHCQkweDM0DQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTVfUkVHCQkweDM4DQo+ ID4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05fUkVHCQkweDNDDQo+ID4gKyNkZWZpbmUgWFNESVJY X1NTX0NPTkZJR19SRUcJCTB4NDANCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9S RUcJMHg0NA0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SRUcJCTB4NDgNCj4gPiAr I2RlZmluZSBYU0RJUlhfRURIX1NUQVRfUkVHCQkweDRDDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VE SF9FUlJDTlRfRU5fUkVHCTB4NTANCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9SRUcJ CTB4NTQNCj4gPiArI2RlZmluZSBYU0RJUlhfQ1JDX0VSUkNOVF9SRUcJCTB4NTgNCj4gPiArI2Rl ZmluZSBYU0RJUlhfVklEX0xPQ0tfV0lORE9XX1JFRwkweDVDDQo+ID4gKyNkZWZpbmUgWFNESVJY X1NCX1JYX1NUU19SRUcJCTB4NjANCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJM X1NTX0VOX01BU0sJCQlCSVQoMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfU1JTVF9N QVNLCQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1JTVF9DUkNfRVJSQ05U X01BU0sJCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9SU1RfRURIX0VSUkNO VF9NQVNLCQlCSVQoMykNCj4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfU0RJUlhfQlJJREdF X0VOQl9NQVNLCQlCSVQoOCkNCj4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJ NFNfTU9EX0VOQl9NQVNLCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9CUklE R0VfQ0hfRk1UX09GRlNFVAkJMTANCj4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfQlJJREdF X0NIX0ZNVF9NQVNLCQlHRU5NQVNLKDEyLA0KPiAxMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfUlNU X0NUUkxfQlJJREdFX0NIX0ZNVF9ZVVY0NDQJCTENCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJY X01ETF9DVFJMX0ZSTV9FTl9NQVNLCQlCSVQoNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NU UkxfTU9ERV9ERVRfRU5fTUFTSwlCSVQoNSkNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxf TU9ERV9IRF9FTl9NQVNLCQlCSVQoOCkNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9E RV9TRF9FTl9NQVNLCQlCSVQoOSkNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV8z R19FTl9NQVNLCQlCSVQoMTApDQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfNkdf RU5fTUFTSwkJQklUKDExKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0lf RU5fTUFTSwlCSVQoMTIpDQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfMTJHRl9F Tl9NQVNLCUJJVCgxMykNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRPX0RF VF9NQVNLCUdFTk1BU0soMTMsDQo+IDgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExf Q1RSTF9GT1JDRURfTU9ERV9PRkZTRVQJMTYNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxf Rk9SQ0VEX01PREVfTUFTSwlHRU5NQVNLKDE4LCAxNikNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNE SVJYX0dMQkxfSU5UUl9FTl9NQVNLCUJJVCgwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhf SU5UUl9WSURMT0NLX01BU0sJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJfVklEVU5M T0NLX01BU0sJQklUKDEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJfT1ZFUkZMT1dfTUFTSwlC SVQoOSkNCj4gPiArI2RlZmluZSBYU0RJUlhfSU5UUl9VTkRFUkZMT1dfTUFTSwlCSVQoMTApDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9JTlRSX0FMTF9NQVNLCShYU0RJUlhfSU5UUl9WSURM T0NLX01BU0sgfFwNCj4gPiArCQkJCVhTRElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLIHxcDQo+ID4g KwkJCQlYU0RJUlhfSU5UUl9PVkVSRkxPV19NQVNLIHxcDQo+ID4gKwkJCQlYU0RJUlhfSU5UUl9V TkRFUkZMT1dfTUFTSykNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RT MV9NQVNLCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzNfTUFTSwlC SVQoMSkNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFM1X01BU0sJQklUKDIpDQo+ ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTN19NQVNLCUJJVCgzKQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzlfTUFTSwlCSVQoNCkNCj4gPiArI2RlZmluZSBYU0RJ UlhfU1QzNTJfVkFMSURfRFMxMV9NQVNLCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1 Ml9WQUxJRF9EUzEzX01BU0sJQklUKDYpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElE X0RTMTVfTUFTSwlCSVQoNykNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NU QVRfUlhfTU9ERV9NQVNLCUdFTk1BU0soMiwgMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9E RVRfU1RBVF9NT0RFX0xPQ0tfTUFTSwlCSVQoMykNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9E RVRfU1RBVF9BQ1RfU1RSRUFNX01BU0sJR0VOTUFTSyg2LA0KPiA0KQ0KPiA+ICsjZGVmaW5lIFhT RElSWF9NT0RFX0RFVF9TVEFUX0FDVF9TVFJFQU1fT0ZGU0VUCTQNCj4gPiArI2RlZmluZSBYU0RJ UlhfTU9ERV9ERVRfU1RBVF9MVkxCXzNHX01BU0sJQklUKDcpDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFhTRElSWF9UU19ERVRfU1RBVF9MT0NLRURfTUFTSwkJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNE SVJYX1RTX0RFVF9TVEFUX1NDQU5fTUFTSwkJQklUKDEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1RT X0RFVF9TVEFUX1NDQU5fT0ZGU0VUCQkoMSkNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NU QVRfRkFNSUxZX01BU0sJCUdFTk1BU0soNywNCj4gNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNf REVUX1NUQVRfRkFNSUxZX09GRlNFVAkoNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NU QVRfUkFURV9NQVNLCQlHRU5NQVNLKDExLCA4KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRf U1RBVF9SQVRFX09GRlNFVAkJKDgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRf U1RBVF9SQVRFX05PTkUJCTB4MA0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRF XzIzXzk4SFoJCTB4Mg0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFoJ CTB4Mw0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzQ3Xzk1SFoJCTB4NA0K PiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI1SFoJCTB4NQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI5Xzk3SFoJCTB4Ng0KPiA+ICsjZGVmaW5lIFhT RElSWF9UU19ERVRfU1RBVF9SQVRFXzMwSFoJCTB4Nw0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19E RVRfU1RBVF9SQVRFXzQ4SFoJCTB4OA0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9S QVRFXzUwSFoJCTB4OQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzU5Xzk0 SFoJCTB4QQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzYwSFoJCTB4Qg0K PiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRfRURIX0FQX01BU0sJQklUKDApDQo+ ID4gKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX0VESF9GRl9NQVNLCUJJVCgxKQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9FREhfU1RBVF9FREhfQU5DX01BU0sJQklUKDIpDQo+ID4gKyNkZWZpbmUgWFNE SVJYX0VESF9TVEFUX0FQX0ZMQUdfTUFTSwlHRU5NQVNLKDgsIDQpDQo+ID4gKyNkZWZpbmUgWFNE SVJYX0VESF9TVEFUX0ZGX0ZMQUdfTUFTSwlHRU5NQVNLKDEzLCA5KQ0KPiA+ICsjZGVmaW5lIFhT RElSWF9FREhfU1RBVF9BTkNfRkxBR19NQVNLCUdFTk1BU0soMTgsIDE0KQ0KPiA+ICsjZGVmaW5l IFhTRElSWF9FREhfU1RBVF9QS1RfRkxBR19NQVNLCUdFTk1BU0soMjIsIDE5KQ0KPiA+ICsNCj4g PiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9DT1VOVF9NQVNLCUdFTk1BU0soMTUsIDApDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9DUkNfRVJSQ05UX0NPVU5UX01BU0sJR0VOTUFTSygz MSwgMTYpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0NSQ19FUlJDTlRfRFNfQ1JDX01BU0sJR0VOTUFT SygxNSwgMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05fUkVWX01BU0sJCUdF Tk1BU0soNywgMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfVkVSU0lPTl9QQVRDSElEX01BU0sJR0VO TUFTSygxMSwgOCkNCj4gPiArI2RlZmluZSBYU0RJUlhfVkVSU0lPTl9WRVJfUkVWX01BU0sJR0VO TUFTSygxNSwgMTIpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJT05fVkVSX01JTl9NQVNLCUdF Tk1BU0soMjMsIDE2KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1ZFUl9NQUpfTUFTSwlH RU5NQVNLKDMxLCAyNCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NTX0NPTkZJR19FREhf SU5DTFVERURfTUFTSwkJQklUKDEpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVEFUX1NC X1JYX1REQVRBX0NIQU5HRV9ET05FX01BU0sJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NU QVRfU0JfUlhfVERBVEFfQ0hBTkdFX0ZBSUxfTUFTSwlCSVQoMSkNCj4gPiArI2RlZmluZSBYU0RJ UlhfU1RBVF9TQl9SWF9UREFUQV9HVF9SRVNFVERPTkVfTUFTSwlCSVQoMikNCj4gPiArI2RlZmlu ZSBYU0RJUlhfU1RBVF9TQl9SWF9UREFUQV9HVF9CSVRSQVRFX01BU0sJCUJJVCgzKQ0KPiA+ICsN Cj4gPiArI2RlZmluZSBYU0RJUlhfREVGQVVMVF9XSURUSAkoMTkyMCkNCj4gPiArI2RlZmluZSBY U0RJUlhfREVGQVVMVF9IRUlHSFQJKDEwODApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9N QVhfU1RSX0xFTkdUSAkxNg0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhTU19TRElfU1REXzNH CQkwDQo+ID4gKyNkZWZpbmUgWFNESVJYU1NfU0RJX1NURF82RwkJMQ0KPiA+ICsjZGVmaW5lIFhT RElSWFNTX1NESV9TVERfMTJHXzhEUwkyDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9ERUZB VUxUX1ZJREVPX0xPQ0tfV0lORE9XCTB4MzAwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhf TU9ERV9IRF9NQVNLCTB4MA0KPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFX1NEX01BU0sJMHgxDQo+ ID4gKyNkZWZpbmUgWFNESVJYX01PREVfM0dfTUFTSwkweDINCj4gPiArI2RlZmluZSBYU0RJUlhf TU9ERV82R19NQVNLCTB4NA0KPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFXzEyR0lfTUFTSwkweDUN Cj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV8xMkdGX01BU0sJMHg2DQo+ID4gKw0KPiA+ICsvKiBN YXhpbXVtIG51bWJlciBvZiBldmVudHMgcGVyIGZpbGUgaGFuZGxlLiAqLw0KPiA+ICsjZGVmaW5l IFhTRElSWF9NQVhfRVZFTlRTCSgxMjgpDQo+ID4gKw0KPiA+ICsvKiBTVDM1MiByZWxhdGVkIG1h Y3JvcyAqLw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9QQVlMT0FEX0JZVEUxX01BU0sJMHhGRg0KPiA+ ICsjZGVmaW5lIFhTVDM1Ml9QQVlMT0FEX0JZVEUxX09GRlNFVAkwDQo+ID4gKyNkZWZpbmUgWFNU MzUyX1BBWUxPQURfQllURTJfT0ZGU0VUCTgNCj4gPiArI2RlZmluZSBYU1QzNTJfUEFZTE9BRF9C WVRFM19PRkZTRVQJMTYNCj4gPiArI2RlZmluZSBYU1QzNTJfUEFZTE9BRF9CWVRFNF9PRkZTRVQJ MjQNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjkyXzF4NzIwTF8xXzVHCQkw eDg0DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjkyXzF4MTA4MExfMV81RwkJMHg4NQ0K PiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDQyNV8yMDA4Xzc1MExfM0dCCTB4ODgNCj4gPiAr I2RlZmluZSBYU1QzNTJfQllURTFfU1Q0MjVfMjAwOF8xMTI1TF8zR0EJMHg4OQ0KPiA+ICsjZGVm aW5lIFhTVDM1Ml9CWVRFMV9TVDM3Ml9ETF8zR0IJCTB4OEENCj4gPiArI2RlZmluZSBYU1QzNTJf QllURTFfU1QzNzJfMng3MjBMXzNHQgkJMHg4Qg0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9T VDM3Ml8yeDEwODBMXzNHQgkJMHg4Qw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDIwODFf MTBfMjE2MExfNkcJCTB4QzANCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwXzJf MTA4MExfNkcJMHhDMQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDIwODFfMTBfRExfMjE2 MExfNkcJMHhDMg0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDIwODJfMTBfMjE2MExfMTJH CTB4Q0UNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX1RTX1RZUEVfTUFTSwkJQklU KDE1KQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9UU19UWVBFX09GRlNFVAkJMTUNCj4gPiAr I2RlZmluZSBYU1QzNTJfQllURTJfUElDX1RZUEVfTUFTSwkJQklUKDE0KQ0KPiA+ICsjZGVmaW5l IFhTVDM1Ml9CWVRFMl9QSUNfVFlQRV9PRkZTRVQJCTE0DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZ VEUyX1RTX1BJQ19UWVBFX0lOVEVSTEFDRUQJMA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9U U19QSUNfVFlQRV9QUk9HUkVTU0lWRQkxDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRF Ml9GUFNfTUFTSwkJCTB4Rg0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfT0ZGU0VUCQkJ OA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMjRGCQkJMHgyDQo+ID4gKyNkZWZpbmUg WFNUMzUyX0JZVEUyX0ZQU18yNAkJCTB4Mw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNf NDhGCQkJMHg0DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18yNQkJCTB4NQ0KPiA+ICsj ZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMzBGCQkJMHg2DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZ VEUyX0ZQU18zMAkJCTB4Nw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfNDgJCQkweDgN Cj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzUwCQkJMHg5DQo+ID4gKyNkZWZpbmUgWFNU MzUyX0JZVEUyX0ZQU182MEYJCQkweEENCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzYw CQkJMHhCDQo+ID4gKy8qIFRhYmxlIDQgU1QgMjA4MS0xMDoyMDE1ICovDQo+ID4gKyNkZWZpbmUg WFNUMzUyX0JZVEUyX0ZQU185NgkJCTB4Qw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNf MTAwCQkJMHhEDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18xMjAJCQkweEUNCj4gPiAr I2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzEyMEYJCQkweEYNCj4gPiArDQo+ID4gKyNkZWZpbmUg WFNUMzUyX0JZVEUzX0FDVF9MVU1BX0NPVU5UX01BU0sJQklUKDIyKQ0KPiA+ICsjZGVmaW5lIFhT VDM1Ml9CWVRFM19BQ1RfTFVNQV9DT1VOVF9PRkZTRVQJMjINCj4gPiArDQo+ID4gKyNkZWZpbmUg WFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF9NQVNLCQlHRU5NQVNLKDE5LA0KPiAxNikNCj4gPiAr I2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUX09GRlNFVAkxNg0KPiA+ICsjZGVmaW5l IFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfNDIyCQkweDANCj4gPiArI2RlZmluZSBYU1QzNTJf QllURTNfQ09MT1JfRk9STUFUX1lVVjQ0NAkweDENCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTNf Q09MT1JfRk9STUFUXzQyMAkJMHgzDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUzX0NPTE9SX0ZP Uk1BVF9HQlIJCTB4Mg0KPiA+ICsNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTRfQklUX0RFUFRI X01BU0sJCUdFTk1BU0soMjUsIDI0KQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFNF9CSVRfREVQ VEhfT0ZGU0VUCQkyNA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfMTAJCTB4 MQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfMTIJCTB4Mg0KPiA+ICsNCj4g PiArI2RlZmluZSBDTEtfSU5UCQkxNDg1MDAwMDBVTA0KPiANCj4gQSBjb21tZW50IGZvciB0aGlz IHdvdWxkIGJlIGhlbHBmdWwuDQo+IA0KDQpPayBJIHdpbGwgYWRkIGEgY29tbWVudCBhYm91dCB0 aGlzLiANCiJHVCBpbnB1dCBjbG9jayBmb3Igc2RpX3J4X2NsayINCg0KPiA+ICsNCj4gPiArI2Rl ZmluZSByc2hpZnRfYW5kX21hc2sodmFsLCB0eXBlKSBcDQo+ID4gKwkJKCgodmFsKSA+PiB0eXBl IyNfT0ZGU0VUKSAmIHR5cGUjI19NQVNLKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBtYXNrX2FuZF9y c2hpZnQodmFsLCB0eXBlKSBcDQo+ID4gKwkJKCgodmFsKSAmIHR5cGUjI19NQVNLKSA+PiB0eXBl IyNfT0ZGU0VUKQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGVudW0gc2RpX2ZhbWlseV9lbmMg LSBTREkgVHJhbnNwb3J0IFZpZGVvIEZvcm1hdCBEZXRlY3RlZCB3aXRoIEFjdGl2ZQ0KPiBQaXhl bHMNCj4gPiArICogQFhTRElSWF9TTVBURV9TVF8yNzQ6IFNNUFRFIFNUIDI3NCBkZXRlY3RlZCB3 aXRoIEFQIDE5MjB4MTA4MA0KPiA+ICsgKiBAWFNESVJYX1NNUFRFX1NUXzI5NjogU01QVEUgU1Qg Mjk2IGRldGVjdGVkIHdpdGggQVAgMTI4MHg3MjANCj4gPiArICogQFhTRElSWF9TTVBURV9TVF8y MDQ4XzI6IFNNUFRFIFNUIDIwNDgtMiBkZXRlY3RlZCB3aXRoIEFQDQo+IDIwNDh4MTA4MA0KPiA+ ICsgKiBAWFNESVJYX1NNUFRFX1NUXzI5NTogU01QVEUgU1QgMjk1IGRldGVjdGVkIHdpdGggQVAg MTkyMHgxMDgwDQo+ID4gKyAqIEBYU0RJUlhfTlRTQzogTlRTQyBlbmNvZGluZyBkZXRlY3RlZCB3 aXRoIEFQIDcyMHg0ODYNCj4gPiArICogQFhTRElSWF9QQUw6IFBBTCBlbmNvZGluZyBkZXRlY3Rl ZCB3aXRoIEFQIDcyMHg1NzYNCj4gPiArICogQFhTRElSWF9UU19VTktOT1dOOiBVbmtub3duIFNN UFRFIFRyYW5zcG9ydCBmYW1pbHkgdHlwZQ0KPiA+ICsgKi8NCj4gPiArZW51bSBzZGlfZmFtaWx5 X2VuYyB7DQo+ID4gKwlYU0RJUlhfU01QVEVfU1RfMjc0CT0gMCwNCj4gPiArCVhTRElSWF9TTVBU RV9TVF8yOTYJPSAxLA0KPiA+ICsJWFNESVJYX1NNUFRFX1NUXzIwNDhfMgk9IDIsDQo+ID4gKwlY U0RJUlhfU01QVEVfU1RfMjk1CT0gMywNCj4gPiArCVhTRElSWF9OVFNDCQk9IDgsDQo+ID4gKwlY U0RJUlhfUEFMCQk9IDksDQo+ID4gKwlYU0RJUlhfVFNfVU5LTk9XTgk9IDE1DQo+ID4gK307DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IHhzZGlyeHNzX2NvcmUgLSBDb3JlIGNvbmZp Z3VyYXRpb24gU0RJIFJ4IFN1YnN5c3RlbSBkZXZpY2UNCj4gc3RydWN0dXJlDQo+ID4gKyAqIEBk ZXY6IFBsYXRmb3JtIHN0cnVjdHVyZQ0KPiA+ICsgKiBAaW9tZW06IEJhc2UgYWRkcmVzcyBvZiBz dWJzeXN0ZW0NCj4gPiArICogQGlycTogcmVxdWVzdGVkIGlycSBudW1iZXINCj4gPiArICogQGlu Y2x1ZGVfZWRoOiBFREggcHJvY2Vzc29yIHByZXNlbmNlDQo+ID4gKyAqIEBtb2RlOiAzRy82Ry8x MkcgbW9kZQ0KPiA+ICsgKiBAY2xrczogYXJyYXkgb2YgY2xvY2tzDQo+ID4gKyAqIEBudW1fY2xr czogbnVtYmVyIG9mIGNsb2Nrcw0KPiA+ICsgKiBAYnBjOiBCaXRzIHBlciBjb21wb25lbnQsIGNh biBiZSAxMCBvciAxMg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHhzZGlyeHNzX2NvcmUgew0KPiA+ ICsJc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsJdm9pZCBfX2lvbWVtICppb21lbTsNCj4gPiAr CWludCBpcnE7DQo+IA0KPiBJIGRvbid0IHRoaW5rIHRoaXMgaGFzIHRvIGJlIHN0b3JlZC4NCj4g DQoNCkFncmVlZC4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4g Kwlib29sIGluY2x1ZGVfZWRoOw0KPiA+ICsJaW50IG1vZGU7DQo+IA0KPiB1bnNpZ25lZCB0eXBl Pw0KDQpBZ3JlZWQuIFRoaXMgd2lsbCBiZSB1MzIgaW4gbmV4dCB2ZXJzaW9uLg0KPiANCj4gPiAr CXN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzOw0KPiA+ICsJaW50IG51bV9jbGtzOw0KPiANCj4g dW5zaWduZWQgdHlwZT8NCj4NCg0KQWdyZWVkLiBJIHdpbGwgbWFrZSB0aGlzIHUzMiBpbiBuZXh0 IHZlcnNpb24uIEJ1dCBJIGRvbid0IGtub3cgd2h5IGNsayBhcGlzIGxpa2UgZGV2bV9jbGtfYnVs a19nZXQoKSB1c2UgaW50IGFzIGRhdGEgdHlwZSBmb3IgbnVtX2Nsa3MuIA0KDQo+ID4gKwl1MzIg YnBjOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCB4c2Rpcnhzc19z dGF0ZSAtIFNESSBSeCBTdWJzeXN0ZW0gZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY29yZTog Q29yZSBzdHJ1Y3R1cmUgZm9yIE1JUEkgU0RJIFJ4IFN1YnN5c3RlbQ0KPiA+ICsgKiBAc3ViZGV2 OiBUaGUgdjRsMiBzdWJkZXYgc3RydWN0dXJlDQo+ID4gKyAqIEBjdHJsX2hhbmRsZXI6IGNvbnRy b2wgaGFuZGxlcg0KPiA+ICsgKiBAZXZlbnQ6IEhvbGRzIHRoZSB2aWRlbyB1bmxvY2sgZXZlbnQN Cj4gPiArICogQGZvcm1hdDogQWN0aXZlIFY0TDIgZm9ybWF0IG9uIHNvdXJjZSBwYWQNCj4gPiAr ICogQGRlZmF1bHRfZm9ybWF0OiBkZWZhdWx0IFY0TDIgbWVkaWEgYnVzIGZvcm1hdA0KPiA+ICsg KiBAZnJhbWVfaW50ZXJ2YWw6IENhcHR1cmVzIHRoZSBmcmFtZSByYXRlDQo+ID4gKyAqIEBwYWQ6 IHNvdXJjZSBtZWRpYSBwYWQNCj4gPiArICogQHZpZGxvY2t3aW46IFZpZGVvIGxvY2sgd2luZG93 IHZhbHVlIHNldCBieSBjb250cm9sDQo+ID4gKyAqIEBlZGhtYXNrOiBFREggbWFzayBzZXQgYnkg Y29udHJvbA0KPiA+ICsgKiBAc2VhcmNobWFzazogU2VhcmNoIG1hc2sgc2V0IGJ5IGNvbnRyb2wN Cj4gPiArICogQHN0cmVhbWluZzogRmxhZyBmb3Igc3RvcmluZyBzdHJlYW1pbmcgc3RhdGUNCj4g PiArICogQHZpZGxvY2tlZDogRmxhZyBpbmRpY2F0aW5nIFNESSBSeCBoYXMgbG9ja2VkIG9udG8g dmlkZW8gc3RyZWFtDQo+ID4gKyAqIEB0c19pc19pbnRlcmxhY2VkOiBGbGFnIGluZGljYXRpbmcg VHJhbnNwb3J0IFN0cmVhbSBpcyBpbnRlcmxhY2VkLg0KPiA+ICsgKiBAZnJhbWVyX2VuYWJsZTog RmxhZyBmb3IgZnJhbWVyIGVuYWJsZWQgb3Igbm90IHNldCBieSBjb250cm9sDQo+ID4gKyAqDQo+ ID4gKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBkZXZpY2UgZHJpdmVyIHJlbGF0ZWQg cGFyYW1ldGVycw0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHhzZGlyeHNzX3N0YXRlIHsNCj4gPiAr CXN0cnVjdCB4c2Rpcnhzc19jb3JlIGNvcmU7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3Vi ZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsNCj4gPiAr CXN0cnVjdCB2NGwyX2V2ZW50IGV2ZW50Ow0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZt dCBmb3JtYXQ7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IGRlZmF1bHRfZm9ybWF0 Ow0KPiA+ICsJc3RydWN0IHY0bDJfZnJhY3QgZnJhbWVfaW50ZXJ2YWw7DQo+ID4gKwlzdHJ1Y3Qg bWVkaWFfcGFkIHBhZDsNCj4gPiArCXUzMiB2aWRsb2Nrd2luOw0KPiA+ICsJdTMyIGVkaG1hc2s7 DQo+ID4gKwl1MTYgc2VhcmNobWFzazsNCj4gPiArCWJvb2wgc3RyZWFtaW5nOw0KPiA+ICsJYm9v bCB2aWRsb2NrZWQ7DQo+ID4gKwlib29sIHRzX2lzX2ludGVybGFjZWQ7DQo+ID4gKwlib29sIGZy YW1lcl9lbmFibGU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBMaXN0IG9mIGNsb2NrcyByZXF1 aXJlZCBieSBVSEQtU0RJIFJ4IHN1YnN5c3RlbSAqLw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAq IGNvbnN0IHhzZGlyeHNzX2Nsa3NbXSA9IHsNCj4gPiArCSJzX2F4aV9hY2xrIiwgInNkaV9yeF9j bGsiLCAidmlkZW9fb3V0X2NsayIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBUT0RPIC0gQWRk IFlVViA0NDQvNDIwIGFuZCBSQkcgMTAvMTIgYnBjIG1idXMgZm9ybWF0cyBoZXJlICovDQo+ID4g K3N0YXRpYyBjb25zdCB1MzIgeHNkaXJ4c3NfMTBicGNfbWJ1c19mbXRzW10gPSB7DQo+ID4gKwlN RURJQV9CVVNfRk1UX1VZVlkxMF8xWDIwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNv bnN0IHUzMiB4c2Rpcnhzc18xMmJwY19tYnVzX2ZtdHNbXSA9IHsNCj4gPiArCU1FRElBX0JVU19G TVRfVVlWWTEyXzFYMjQsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHY0bDJfZHZfdGltaW5ncyBmbXRfY2FwW10gPSB7DQo+ID4gKwlWNEwyX0RWX0JUX1NESV83MjBY NDg3STYwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNzIwWDU3Nkk1MCwNCj4gPiArCVY0TDJfRFZf QlRfQ0VBXzEyODBYNzIwUDI0LA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQMjUsDQo+ ID4gKwlWNEwyX0RWX0JUX0NFQV8xMjgwWDcyMFAzMCwNCj4gPiArCVY0TDJfRFZfQlRfQ0VBXzEy ODBYNzIwUDUwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQNjAsDQo+ID4gKwlWNEwy X0RWX0JUX0NFQV8xOTIwWDEwODBQMjQsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQ MzAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBJNTAsDQo+ID4gKwlWNEwyX0RWX0JU X0NFQV8xOTIwWDEwODBJNjAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNTAsDQo+ ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNjAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8z ODQwWDIxNjBQMjQsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMzAsDQo+ID4gKwlW NEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNTAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIx NjBQNjAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMjQsDQo+ID4gKwlWNEwyX0RW X0JUX0NFQV80MDk2WDIxNjBQMjUsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAs DQo+ID4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQNTAsDQo+ID4gKwlWNEwyX0RWX0JUX0NF QV80MDk2WDIxNjBQNjAsDQo+ID4gKw0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAy NCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjUsDQo+ID4gKwlYTE5YX1Y0TDJf RFZfQlRfMjA0OFgxMDgwUDMwLA0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCwN Cj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNTAsDQo+ID4gKwlYTE5YX1Y0TDJfRFZf QlRfMjA0OFgxMDgwSTYwLA0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA0OCwNCj4g PiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNTAsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRf MjA0OFgxMDgwUDYwLA0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MFA0OCwNCj4gPiAr CVhMTlhfVjRMMl9EVl9CVF8xOTIwWDEwODBJNDgsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMzg0 MFgyMTYwUDQ4LA0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzQwOTZYMjE2MFA0OCwNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0cnVjdCB4c2Rpcnhzc19kdl9tYXAgew0KPiA+ICsJdTMyIHdpZHRoOw0K PiA+ICsJdTMyIGhlaWdodDsNCj4gPiArCXUzMiBmcHM7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9kdl90 aW1pbmdzIGZvcm1hdDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg eHNkaXJ4c3NfZHZfbWFwIHhzZGlyeHNzX2R2X3RpbWluZ3NbXSA9IHsNCj4gPiArCS8qIFNEIC0g NzIweDQ4N2k2MCAqLw0KPiA+ICsJeyA3MjAsIDI0MywgMzAsIFY0TDJfRFZfQlRfU0RJXzcyMFg0 ODdJNjAgfSwNCj4gPiArCS8qIFNEIC0gNzIweDU3Nmk1MCAqLw0KPiA+ICsJeyA3MjAsIDI4OCwg MjUsIFY0TDJfRFZfQlRfQ0VBXzcyMFg1NzZJNTAgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBw MjMuOTggKi8NCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwMjQgKi8NCj4gPiArCXsgMTI4MCwgNzIw LCAyNCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQMjQgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3 MjBwMjUgKi8NCj4gPiArCXsgMTI4MCwgNzIwLCAyNSwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQ MjUgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwMjkuOTcgKi8NCj4gPiArCS8qIEhEIC0gMTI4 MHg3MjBwMzAgKi8NCj4gPiArCXsgMTI4MCwgNzIwLCAzMCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3 MjBQMzAgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwNTAgKi8NCj4gPiArCXsgMTI4MCwgNzIw LCA1MCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQNTAgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3 MjBwNTkuOTQgKi8NCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwNjAgKi8NCj4gPiArCXsgMTI4MCwg NzIwLCA2MCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQNjAgfSwNCj4gPiArCS8qIEhEIC0gMTky MHgxMDgwcDIzLjk4ICovDQo+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MHAyNCAqLw0KPiA+ICsJeyAx OTIwLCAxMDgwLCAyNCwgVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDI0IH0sDQo+ID4gKwkvKiBI RCAtIDE5MjB4MTA4MHAyNSAqLw0KPiA+ICsJeyAxOTIwLCAxMDgwLCAyNSwgVjRMMl9EVl9CVF9D RUFfMTkyMFgxMDgwUDI1IH0sDQo+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MHAyOS45NyAqLw0KPiA+ ICsJLyogSEQgLSAxOTIweDEwODBwMzAgKi8NCj4gPiArCXsgMTkyMCwgMTA4MCwgMzAsIFY0TDJf RFZfQlRfQ0VBXzE5MjBYMTA4MFAzMCB9LA0KPiA+ICsNCj4gPiArCS8qIEhEIC0gMjA0OHgxMDgw cDIzLjk4ICovDQo+ID4gKwkvKiBIRCAtIDIwNDh4MTA4MHAyNCAqLw0KPiA+ICsJeyAyMDQ4LCAx MDgwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAyNCB9LA0KPiA+ICsJLyogSEQgLSAy MDQ4eDEwODBwMjUgKi8NCj4gPiArCXsgMjA0OCwgMTA4MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBQMjUgfSwNCj4gPiArCS8qIEhEIC0gMjA0OHgxMDgwcDI5Ljk3ICovDQo+ID4gKwkv KiBIRCAtIDIwNDh4MTA4MHAzMCAqLw0KPiA+ICsJeyAyMDQ4LCAxMDgwLCAyNCwgWExOWF9WNEwy X0RWX0JUXzIwNDhYMTA4MFAzMCB9LA0KPiA+ICsJLyogSEQgLSAxOTIweDEwODBpNDcuOTUgKi8N Cj4gPiArCS8qIEhEIC0gMTkyMHgxMDgwaTQ4ICovDQo+ID4gKwl7IDE5MjAsIDU0MCwgMjQsIFhM TlhfVjRMMl9EVl9CVF8xOTIwWDEwODBJNDggfSwNCj4gPiArDQo+ID4gKwkvKiBIRCAtIDE5MjB4 MTA4MGk1MCAqLw0KPiA+ICsJeyAxOTIwLCA1NDAsIDI1LCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEw ODBJNTAgfSwNCj4gPiArCS8qIEhEIC0gMTkyMHgxMDgwaTU5Ljk0ICovDQo+ID4gKwkvKiBIRCAt IDE5MjB4MTA4MGk2MCAqLw0KPiA+ICsJeyAxOTIwLCA1NDAsIDMwLCBWNEwyX0RWX0JUX0NFQV8x OTIwWDEwODBJNjAgfSwNCj4gPiArDQo+ID4gKwkvKiBIRCAtIDIwNDh4MTA4MGk0Ny45NSAqLw0K PiA+ICsJLyogSEQgLSAyMDQ4eDEwODBpNDggKi8NCj4gPiArCXsgMjA0OCwgNTQwLCAyNCwgWExO WF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCB9LA0KPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBpNTAg Ki8NCj4gPiArCXsgMjA0OCwgNTQwLCAyNSwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk1MCB9 LA0KPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBpNTkuOTQgKi8NCj4gPiArCS8qIEhEIC0gMjA0OHgx MDgwaTYwICovDQo+ID4gKwl7IDIwNDgsIDU0MCwgMzAsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEw ODBJNjAgfSwNCj4gPiArCS8qIDNHIC0gMTkyMHgxMDgwcDQ3Ljk1ICovDQo+ID4gKwkvKiAzRyAt IDE5MjB4MTA4MHA0OCAqLw0KPiA+ICsJeyAxOTIwLCAxMDgwLCA0OCwgWExOWF9WNEwyX0RWX0JU XzE5MjBYMTA4MFA0OCB9LA0KPiA+ICsNCj4gPiArCS8qIDNHIC0gMTkyMHgxMDgwcDUwIDE0OC41 ICovDQo+ID4gKwl7IDE5MjAsIDEwODAsIDUwLCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNTAg fSwNCj4gPiArCS8qIDNHIC0gMTkyMHgxMDgwcDU5Ljk0IDE0OC41LzEuMDAxICovDQo+ID4gKwkv KiAzRyAtIDE5MjB4MTA4MHA2MCAxNDguNSAqLw0KPiA+ICsJeyAxOTIwLCAxMDgwLCA2MCwgVjRM Ml9EVl9CVF9DRUFfMTkyMFgxMDgwUDYwIH0sDQo+ID4gKw0KPiA+ICsJLyogM0cgLSAyMDQ4eDEw ODBwNDcuOTUgKi8NCj4gPiArCS8qIDNHIC0gMjA0OHgxMDgwcDQ4ICovDQo+ID4gKwl7IDIwNDgs IDEwODAsIDQ4LCBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDQ4IH0sDQo+ID4gKwkvKiAzRyAt IDIwNDh4MTA4MHA1MCAqLw0KPiA+ICsJeyAyMDQ4LCAxMDgwLCA1MCwgWExOWF9WNEwyX0RWX0JU XzIwNDhYMTA4MFA1MCB9LA0KPiA+ICsJLyogM0cgLSAyMDQ4eDEwODBwNTkuOTQgKi8NCj4gPiAr CS8qIDNHIC0gMjA0OHgxMDgwcDYwICovDQo+ID4gKwl7IDIwNDgsIDEwODAsIDYwLCBYTE5YX1Y0 TDJfRFZfQlRfMjA0OFgxMDgwUDYwIH0sDQo+ID4gKw0KPiA+ICsJLyogNkcgLSAzODQwWDIxNjBw MjMuOTggKi8NCj4gPiArCS8qIDZHIC0gMzg0MFgyMTYwcDI0ICovDQo+ID4gKwl7IDM4NDAsIDIx NjAsIDI0LCBWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMjQgfSwNCj4gPiArCS8qIDZHIC0gMzg0 MFgyMTYwcDI1ICovDQo+ID4gKwl7IDM4NDAsIDIxNjAsIDI1LCBWNEwyX0RWX0JUX0NFQV8zODQw WDIxNjBQMjUgfSwNCj4gPiArCS8qIDZHIC0gMzg0MFgyMTYwcDI5Ljk3ICovDQo+ID4gKwkvKiA2 RyAtIDM4NDBYMjE2MHAzMCAqLw0KPiA+ICsJeyAzODQwLCAyMTYwLCAzMCwgVjRMMl9EVl9CVF9D RUFfMzg0MFgyMTYwUDMwIH0sDQo+ID4gKwkvKiA2RyAtIDQwOTZYMjE2MHAyMy45OCAqLw0KPiA+ ICsJLyogNkcgLSA0MDk2WDIxNjBwMjQgKi8NCj4gPiArCXsgNDA5NiwgMjE2MCwgMjQsIFY0TDJf RFZfQlRfQ0VBXzQwOTZYMjE2MFAyNCB9LA0KPiA+ICsJLyogNkcgLSA0MDk2WDIxNjBwMjUgKi8N Cj4gPiArCXsgNDA5NiwgMjE2MCwgMjUsIFY0TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFAyNSB9LA0K PiA+ICsJLyogNkcgLSA0MDk2WDIxNjBwMjkuOTcgKi8NCj4gPiArCS8qIDZHIC0gNDA5NlgyMTYw cDMwICovDQo+ID4gKwl7IDQwOTYsIDIxNjAsIDMwLCBWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQ MzAgfSwNCj4gPiArCS8qIDEyRyAtIDM4NDBYMjE2MHA0Ny45NSAqLw0KPiA+ICsJLyogMTJHIC0g Mzg0MFgyMTYwcDQ4ICovDQo+ID4gKwl7IDM4NDAsIDIxNjAsIDQ4LCBYTE5YX1Y0TDJfRFZfQlRf Mzg0MFgyMTYwUDQ4IH0sDQo+ID4gKw0KPiA+ICsJLyogMTJHIC0gMzg0MFgyMTYwcDUwICovDQo+ ID4gKwl7IDM4NDAsIDIxNjAsIDUwLCBWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNTAgfSwNCj4g PiArCS8qIDEyRyAtIDM4NDBYMjE2MHA1OS45NCAqLw0KPiA+ICsJLyogMTJHIC0gMzg0MFgyMTYw cDYwICovDQo+ID4gKwl7IDM4NDAsIDIxNjAsIDYwLCBWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQ NjAgfSwNCj4gPiArDQo+ID4gKwkvKiAxMkcgLSA0MDk2WDIxNjBwNDcuOTUgKi8NCj4gPiArCS8q IDEyRyAtIDQwOTZYMjE2MHA0OCAqLw0KPiA+ICsJeyAzODQwLCAyMTYwLCA0OCwgWExOWF9WNEwy X0RWX0JUXzQwOTZYMjE2MFA0OCB9LA0KPiA+ICsNCj4gPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA1 MCAqLw0KPiA+ICsJeyA0MDk2LCAyMTYwLCA1MCwgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDUw IH0sDQo+ID4gKwkvKiAxMkcgLSA0MDk2WDIxNjBwNTkuOTQgKi8NCj4gPiArCS8qIDEyRyAtIDQw OTZYMjE2MHA2MCAqLw0KPiA+ICsJeyA0MDk2LCAyMTYwLCA2MCwgVjRMMl9EVl9CVF9DRUFfNDA5 NlgyMTYwUDYwIH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4 c2Rpcnhzc19zdGF0ZSAqDQo+ID4gK3RvX3hzZGlyeHNzc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2 ICpzdWJkZXYpDQo+ID4gK3sNCj4gPiArCXJldHVybiBjb250YWluZXJfb2Yoc3ViZGV2LCBzdHJ1 Y3QgeHNkaXJ4c3Nfc3RhdGUsIHN1YmRldik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4g KyAqIFJlZ2lzdGVyIHJlbGF0ZWQgb3BlcmF0aW9ucw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlu bGluZSB1MzIgeHNkaXJ4c3NfcmVhZChzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUz MiBhZGRyKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gaW9yZWFkMzIoeHNkaXJ4c3MtPmlvbWVtICsg YWRkcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2Rpcnhzc193 cml0ZShzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUzMiBhZGRyLA0KPiA+ICsJCQkJ ICB1MzIgdmFsdWUpDQo+ID4gK3sNCj4gPiArCWlvd3JpdGUzMih2YWx1ZSwgeHNkaXJ4c3MtPmlv bWVtICsgYWRkcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2Rp cnhzc19jbHIoc3RydWN0IHhzZGlyeHNzX2NvcmUgKnhzZGlyeHNzLCB1MzIgYWRkciwNCj4gPiAr CQkJCXUzMiBjbHIpDQo+ID4gK3sNCj4gPiArCXhzZGlyeHNzX3dyaXRlKHhzZGlyeHNzLCBhZGRy LCB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLCBhZGRyKSAmIH5jbHIpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4c3Nfc2V0KHN0cnVjdCB4c2Rpcnhzc19jb3Jl ICp4c2RpcnhzcywgdTMyIGFkZHIsDQo+ID4gKwkJCQl1MzIgc2V0KQ0KPiA+ICt7DQo+ID4gKwl4 c2Rpcnhzc193cml0ZSh4c2RpcnhzcywgYWRkciwgeHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywgYWRk cikgfCBzZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4 X2NvcmVfZGlzYWJsZShzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsJ eHNkaXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsDQo+IFhTRElSWF9SU1RfQ1RS TF9TU19FTl9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHhz ZGlyeF9jb3JlX2VuYWJsZShzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ ICsJeHNkaXJ4c3Nfc2V0KGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsDQo+IFhTRElSWF9SU1Rf Q1RSTF9TU19FTl9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4c2Rpcnhf c2V0X21vZGVkZXRlY3Qoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIHUxNiBtYXNrKQ0KPiA+ ICt7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2 Ow0KPiA+ICsNCj4gPiArCW1hc2sgJj0gWFNESVJYX0RFVEVDVF9BTExfTU9ERVM7DQo+ID4gKwlp ZiAoIW1hc2spIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgYml0IG1hc2sgPSAweCUw OHhcbiIsIG1hc2spOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWRldl9kYmcoZGV2LCAibWFzayA9IDB4JXhcbiIsIG1hc2spOw0KPiA+ICsNCj4gPiArCXZh bCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRyk7DQo+ID4gKwl2YWwg Jj0gflhTRElSWF9NRExfQ1RSTF9NT0RFX0RFVF9FTl9NQVNLOw0KPiA+ICsJdmFsICY9IH5YU0RJ UlhfTURMX0NUUkxfTU9ERV9BVVRPX0RFVF9NQVNLOw0KPiA+ICsJdmFsICY9IH5YU0RJUlhfTURM X0NUUkxfRk9SQ0VEX01PREVfTUFTSzsNCj4gPiArDQo+ID4gKwlpZiAoaHdlaWdodDE2KG1hc2sp ID4gMSkgew0KPiA+ICsJCS8qIE11bHRpIG1vZGUgZGV0ZWN0aW9uIGFzIG1vcmUgdGhhbiAxIGJp dCBzZXQgaW4gbWFzayAqLw0KPiA+ICsJCWRldl9kYmcoZGV2LCAiRGV0ZWN0IG11bHRpcGxlIG1v ZGVzXG4iKTsNCj4gPiArDQo+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfU0RfT0ZG U0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFX1NEX0VOX01BU0s7DQo+ ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfSERfT0ZGU0VUKSkNCj4gPiArCQkJdmFs IHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFX0hEX0VOX01BU0s7DQo+ID4gKwkJaWYgKG1hc2sgJiBC SVQoWFNESVJYX01PREVfM0dfT0ZGU0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RS TF9NT0RFXzNHX0VOX01BU0s7DQo+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfNkdf T0ZGU0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzZHX0VOX01BU0s7 DQo+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfMTJHSV9PRkZTRVQpKQ0KPiA+ICsJ CQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVfMTJHSV9FTl9NQVNLOw0KPiA+ICsJCWlmICht YXNrICYgQklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElS WF9NRExfQ1RSTF9NT0RFXzEyR0ZfRU5fTUFTSzsNCj4gPiArDQo+ID4gKwkJdmFsIHw9IFhTRElS WF9NRExfQ1RSTF9NT0RFX0RFVF9FTl9NQVNLOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQkvKiBG aXhlZCBNb2RlICovDQo+ID4gKwkJdTMyIGZvcmNlZF9tb2RlX21hc2s7DQo+ID4gKw0KPiA+ICsJ CWRldl9kYmcoZGV2LCAiRGV0ZWN0IGZpeGVkIG1vZGVcbiIpOw0KPiA+ICsNCj4gPiArCQkvKiBG aW5kIG9mZnNldCBvZiBmaXJzdCBiaXQgc2V0ICovDQo+ID4gKwkJc3dpdGNoIChfX2ZmcyhtYXNr KSkgew0KPiANCj4gSXNuJ3QgaXQgc2luZ2xlIGJpdCBhdCB0aGlzIHBvaW50LCBzbyBfX2Zmcygp IGlzIG5vdCBuZWVkZWQ/DQo+IA0KDQpSaWdodC4gSSB3aWxsIG1vZGlmeSB0aGlzIGluIG5leHQg dmVyc2lvbi4NCg0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfU0RfT0ZGU0VUOg0KPiA+ICsJCQlm b3JjZWRfbW9kZV9tYXNrID0gWFNESVJYX01PREVfU0RfTUFTSzsNCj4gPiArCQkJYnJlYWs7DQo+ ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV9IRF9PRkZTRVQ6DQo+ID4gKwkJCWZvcmNlZF9tb2RlX21h c2sgPSBYU0RJUlhfTU9ERV9IRF9NQVNLOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhT RElSWF9NT0RFXzNHX09GRlNFVDoNCj4gPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9N T0RFXzNHX01BU0s7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfNkdf T0ZGU0VUOg0KPiA+ICsJCQlmb3JjZWRfbW9kZV9tYXNrID0gWFNESVJYX01PREVfNkdfTUFTSzsN Cj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdJX09GRlNFVDoNCj4g PiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzEyR0lfTUFTSzsNCj4gPiArCQkJ YnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdGX09GRlNFVDoNCj4gPiArCQkJZm9y Y2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzEyR0ZfTUFTSzsNCj4gPiArCQkJYnJlYWs7DQo+ ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IDA7DQo+IA0KPiBTaG91 bGRuJ3QgdGhpcyBiZSBhbiBlcnJvcj8NCj4gDQoNClJpZ2h0LiBJIHdpbGwgYWRkIGFuIGVycm9y IG1lc3NhZ2UgImludmFsaWQgbWFzayBmb3IgZml4ZWQgZGV0ZWN0IG1vZGUiIGhlcmUgYW5kIHJl dHVybiAtRUlOVkFMLg0KDQo+ID4gKwkJfQ0KPiA+ICsJCWRldl9kYmcoZGV2LCAiRm9yY2VkIE1v ZGUgTWFzayA6IDB4JXhcbiIsDQo+ID4gKwkJCWZvcmNlZF9tb2RlX21hc2spOw0KPiA+ICsJCXZh bCB8PSBmb3JjZWRfbW9kZV9tYXNrIDw8DQo+IFhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9P RkZTRVQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhkZXYsICJNb2RlcyB0byBiZSBk ZXRlY3RlZCA6IHNkaSBjdHJsIHJlZyA9IDB4JTA4eFxuIiwNCj4gPiArCQl2YWwpOw0KPiA+ICsJ eHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRywgdmFsKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeHNkaXJ4X2Zy YW1lcihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbCBmbGFnKQ0KPiA+ICt7DQo+ID4g KwlpZiAoZmxhZykNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX01ETF9DVFJMX1JF RywNCj4gPiArCQkJICAgICBYU0RJUlhfTURMX0NUUkxfRlJNX0VOX01BU0spOw0KPiA+ICsJZWxz ZQ0KPiA+ICsJCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfTURMX0NUUkxfUkVHLA0KPiA+ICsJ CQkgICAgIFhTRElSWF9NRExfQ1RSTF9GUk1fRU5fTUFTSyk7DQo+IA0KPiBJJ2QgdXNlIHt9LCBi dXQgcHJvYmFibHkgdXAgdG8geW91Lg0KPiANCg0KT2suIEkgd2lsbCBhZGQge30uDQoNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeHNkaXJ4X3NldGVkaGVycmNudHRyaWdnZXIoc3Ry dWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIHUzMg0KPiBlbmFibGUpDQo+IA0KPiBDYW4gdGhpcyBh bmQgc2ltaWxhciBuYW1lcyBoYXZlIHNvbWUgJ18nPyBNYXliZSB0aGUgbmFtZSBnZXRzIHRvbyBs b25nLiBJDQo+IGtub3cNCj4gaG93IGRpZmZpY3VsdCBuYW1pbmcgY2FuIGJlLiA6LSkNCj4gDQoN CkZpeGluZyB0aGlzIGluIHRoZSBuZXh0IHZlcnNpb24uDQoNCj4gPiArew0KPiA+ICsJdTMyIHZh bCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX0VESF9FUlJDTlRfRU5fUkVHKTsNCj4gPiAr DQo+ID4gKwl2YWwgPSBlbmFibGUgJiBYU0RJUlhfRURIX0FMTEVSUl9NQVNLOw0KPiA+ICsNCj4g DQo+IE5pdC4gSSdkIHJlbW92ZSB0aGlzIGVtcHR5IGxpbmUsIGJ1dCB1cCB0byB5b3UuDQo+IA0K DQpXaWxsIHJlbW92ZSB0aGUgZW1wdHkgbGluZSBoZXJlLg0KDQo+ID4gKwl4c2Rpcnhzc193cml0 ZShjb3JlLCBYU0RJUlhfRURIX0VSUkNOVF9FTl9SRUcsIHZhbCk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2Rpcnhfc2V0dmlkbG9ja3dpbmRvdyhzdHJ1Y3QgeHNk aXJ4c3NfY29yZSAqY29yZSwgdTMyDQo+IHZhbCkNCj4gPiArew0KPiA+ICsJLyoNCj4gPiArCSAq IFRoZSB2aWRlbyBsb2NrIHdpbmRvdyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgZm9yIHdoaWNoIHRo ZQ0KPiA+ICsJICogdGhlIG1vZGUgYW5kIHRyYW5zcG9ydCBzdHJlYW0gc2hvdWxkIGJlIGxvY2tl ZCB0byBnZXQgdGhlDQo+ID4gKwkgKiB2aWRlbyBsb2NrIGludGVycnVwdC4NCj4gPiArCSAqLw0K PiA+ICsJeHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX1ZJRF9MT0NLX1dJTkRPV19SRUcsIHZh bCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2RpcnhfZGlzYWJs ZWludHIoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIHUzMiBtYXNrKQ0KPiA+ICt7DQo+ID4g Kwl4c2Rpcnhzc19jbHIoY29yZSwgWFNESVJYX0lFUl9SRUcsIG1hc2spOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X2VuYWJsZWludHIoc3RydWN0IHhzZGly eHNzX2NvcmUgKmNvcmUsIHUzMiBtYXNrKQ0KPiA+ICt7DQo+ID4gKwl4c2Rpcnhzc19zZXQoY29y ZSwgWFNESVJYX0lFUl9SRUcsIG1hc2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p ZCB4c2RpcnhfZ2xvYmFsaW50cihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbCBmbGFn KQ0KPiA+ICt7DQo+ID4gKwlpZiAoZmxhZykNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNE SVJYX0dMQkxfSUVSX1JFRywNCj4gPiArCQkJICAgICBYU0RJUlhfR0xCTF9JTlRSX0VOX01BU0sp Ow0KPiA+ICsJZWxzZQ0KPiA+ICsJCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfR0xCTF9JRVJf UkVHLA0KPiA+ICsJCQkgICAgIFhTRElSWF9HTEJMX0lOVFJfRU5fTUFTSyk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2RpcnhfY2xlYXJpbnRyKHN0cnVjdCB4c2Rp cnhzc19jb3JlICpjb3JlLCB1MzIgbWFzaykNCj4gPiArew0KPiA+ICsJeHNkaXJ4c3Nfc2V0KGNv cmUsIFhTRElSWF9JU1JfUkVHLCBtYXNrKTsNCj4gPiArfQ0KPiANCj4gTm90IHN1cmUgaWYgdGhl c2Ugc2luZ2xlIGxpbmUgd3JhcHBlcnMgYXJlIG5lZWRlZC4gSW5saW5pbmcgd291bGQgYmUgc2lt cGxlci4NCj4gDQoNCkFkZGluZyBmdW5jdGlvbiBuYW1lcyBtYWtlcyBpdCBlYXNpZXIgZm9yIG1l IHRvIHVuZGVyc3RhbmQgcmF0aGVyIHRoYW4gc2V0IG9yIGNsZWFyIGZ1bmN0aW9ucy4NClNvIEkg d2lsbCBrZWVwIHRoZXNlLiBJZiB5b3Ugc3RpbGwgZmVlbCBzdHJvbmdseSBhYm91dCByZW1vdmlu ZyB0aGlzLCBsZXQgbWUga25vdyBhbmQgSSBjYW4gcmVtb3ZlIHRoZW0gaW4gbmV4dCB2ZXJzaW9u Lg0KDQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2RpcnhfdmlkX2JyaWRnZV9jb250cm9sKHN0 cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLA0KPiA+ICsJCQkJICAgICAgYm9vbCBlbmFibGUpDQo+ ID4gK3sNCj4gPiArCXUzMiBtYXNrID0gWFNESVJYX1JTVF9DVFJMX1NESVJYX0JSSURHRV9FTkJf TUFTSzsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVE9ETyAtIEVuYWJsZSBZVVY0NDQvUkJH IGZvcm1hdCBpbiB0aGUgYnJpZGdlIGJhc2VkDQo+ID4gKwkgKiBvbiBCWVRFMyBjb2xvciBmb3Jt YXQuDQo+ID4gKwkgKiBYU0RJUlhfUlNUX0NUUkxfQlJJREdFX0NIX0ZNVF9ZVVY0NDQNCj4gPiAr CSAqLw0KPiA+ICsJaWYgKGVuYWJsZSkNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJY X1JTVF9DVFJMX1JFRywgbWFzayk7DQo+ID4gKwllbHNlDQo+ID4gKwkJeHNkaXJ4c3NfY2xyKGNv cmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsIG1hc2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCB4c2RpcnhfYXhpczRfYnJpZGdlX2NvbnRyb2woc3RydWN0IHhzZGlyeHNzX2NvcmUg KmNvcmUsDQo+ID4gKwkJCQkJYm9vbCBlbmFibGUpDQo+ID4gK3sNCj4gPiArCWlmIChlbmFibGUp DQo+ID4gKwkJeHNkaXJ4c3Nfc2V0KGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsDQo+ID4gKw0K PiBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJNFNfTU9EX0VOQl9NQVNLKTsNCj4gPiArCWVsc2UN Cj4gPiArCQl4c2Rpcnhzc19jbHIoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywNCj4gPiArDQo+ IFhTRElSWF9SU1RfQ1RSTF9WSURJTl9BWEk0U19NT0RfRU5CX01BU0spOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKHN0cnVjdCB4c2Rp cnhzc19jb3JlICpjb3JlLCBib29sDQo+IGVuYWJsZSkNCj4gPiArew0KPiA+ICsJLyogVGhlIHNk aSB0byBuYXRpdmUgYnJpZGdlIGlzIGZvbGxvd2VkIGJ5IG5hdGl2ZSB0byBheGlzNCBicmlkZ2Ug Ki8NCj4gPiArCWlmIChlbmFibGUpIHsNCj4gPiArCQl4c2RpcnhfYXhpczRfYnJpZGdlX2NvbnRy b2woY29yZSwgZW5hYmxlKTsNCj4gPiArCQl4c2RpcnhfdmlkX2JyaWRnZV9jb250cm9sKGNvcmUs IGVuYWJsZSk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXhzZGlyeF92aWRfYnJpZGdlX2NvbnRy b2woY29yZSwgZW5hYmxlKTsNCj4gPiArCQl4c2RpcnhfYXhpczRfYnJpZGdlX2NvbnRyb2woY29y ZSwgZW5hYmxlKTsNCj4gPiArCX0NCj4gPiArfQ0KPiANCj4gRXZlbiB0aGVzZSB3cmFwcGVycy4g VGhlIGlmIGNoZWNrIGZvciBlbmFibGUgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGVzZSBhcmUNCj4g aW5saW5lZCwgaGVuY2UgbGVzcyBvcGVyYXRpb25zLg0KPiANCg0KU2FtZSBjb21tZW50IGFzIGFi b3ZlLiANCg0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeHNkaXJ4c3NfZ2V0X2ZyYW1lcmF0ZShz dHJ1Y3QgdjRsMl9mcmFjdCAqZnJhbWVfaW50ZXJ2YWwsDQo+ID4gKwkJCQkgICB1MzIgZnJhbWVy YXRlKQ0KPiA+ICt7DQo+ID4gKwlzd2l0Y2ggKGZyYW1lcmF0ZSkgew0KPiA+ICsJY2FzZSBYU0RJ UlhfVFNfREVUX1NUQVRfUkFURV8yM185OEhaOg0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5udW1l cmF0b3IgPSAxMDAxOw0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDI0MDAw Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yNEha Og0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAwOw0KPiA+ICsJCWZyYW1l X2ludGVydmFsLT5kZW5vbWluYXRvciA9IDI0MDAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yNUhaOg0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5u dW1lcmF0b3IgPSAxMDAwOw0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDI1 MDAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8y OV85N0haOg0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAxOw0KPiA+ICsJ CWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDMwMDAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8zMEhaOg0KPiA+ICsJCWZyYW1lX2ludGVy dmFsLT5udW1lcmF0b3IgPSAxMDAwOw0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRv ciA9IDMwMDAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRf UkFURV80N185NUhaOg0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAxOw0K PiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDQ4MDAwOw0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV80OEhaOg0KPiA+ICsJCWZyYW1l X2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAwOw0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5v bWluYXRvciA9IDQ4MDAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVU X1NUQVRfUkFURV81MEhaOg0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAw Ow0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDUwMDAwOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81OV85NEhaOg0KPiA+ICsJ CWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3IgPSAxMDAxOw0KPiA+ICsJCWZyYW1lX2ludGVydmFs LT5kZW5vbWluYXRvciA9IDYwMDAwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhf VFNfREVUX1NUQVRfUkFURV82MEhaOg0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3Ig PSAxMDAwOw0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDYwMDAwOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJh dG9yID0gMTsNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSAxOw0KPiA+ICsJ fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rpcnhzc19zZXRfZ3RjbGsoc3Ry dWN0IHhzZGlyeHNzX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGNsayAqZ3Rj bGs7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGNsa3JhdGU7DQo+ID4gKwlpbnQgcmV0LCBpc19mcmFj Ow0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ID4g Kwl1MzIgbW9kZTsNCj4gPiArCXN0YXRpYyBpbnQgcHJldl9pc19mcmFjID0gLTE7DQo+IA0KPiBU aGlzIHdvdWxkIHByZXZlbnQgbXVsdGlwbGUgaW5zdGFuY2VzLiBDYW4gaXQgYmUgcGFydCBvZiB4 c2Rpcnhzc19zdGF0ZT8NCj4gDQo+IEJ1dCBJIHdvbmRlciB3aHkgdGhpcyBwcmV2aW91cyBzZXR0 aW5nIGFuZCBhbHNvIGJlaW5nIGZyYWN0aW9uYWwgZnBzDQo+IHJlYWxseSBtYXR0ZXIuIEluc3Rl YWQsIHRoaXMgYWx3YXlzIGhhcyB0byBzZXQgdG8gdGhlIHJlcXVpcmVkIHJhdGUuDQo+IA0KDQpH b29kIGNhdGNoIEkgd2lsbCBtb3ZlIHRoZSBwcmV2X2lzX2ZyYWMgdG8geHNkaXJ4c3Nfc3RhdGUu DQpUaGUgcHJldl9pc19mcmFjIHNldHRpbmcgaGVscHMgdXMgY29uZmlybSBpZiBhIGNsb2NrIHBy b2dyYW1taW5nIGlzIHJlYWxseSByZXF1aXJlZCBvciBub3QuDQpUaGUgY2hlY2sgd2lsbCBoZWxw IGluIGNoYW5naW5nIHRoZSBjbG9jayBvbmx5IHdoZW4gY2hhbmdlZCBjbG9jayBpcyByZXF1aXJl ZC4NCg0KPiA+ICsNCj4gPiArCW1vZGUgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9NT0RF X0RFVF9TVEFUX1JFRyk7DQo+ID4gKwltb2RlICY9IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01P REVfTUFTSzsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVE9ETzogRm9yIG5vdywgZG9uJ3Qg Y2hhbmdlIHRoZSBjbG9jayByYXRlIGZvciBhbnkgbW9kZSBleGNlcHQNCj4gMTJHLg0KPiA+ICsJ ICogSW4gZnV0dXJlLCBjb25maWd1cmUgZ3QgY2xvY2sgZm9yIGFsbCBtb2RlcyBhbmQgZW5hYmxl IGNsb2NrIG9ubHkNCj4gPiArCSAqIHdoZW4gbmVlZGVkIChzdHJlYW0gb24vb2ZmKS4NCj4gPiAr CSAqLw0KPiA+ICsJaWYgKG1vZGUgIT0gWFNESVJYX01PREVfMTJHSV9NQVNLICYmIG1vZGUgIT0N Cj4gWFNESVJYX01PREVfMTJHRl9NQVNLKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlp c19mcmFjID0gc3RhdGUtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciA9PSAxMDAxID8gMSA6IDA7 DQo+IA0KPiBUaGlzIGlzIHJlbGF0ZWQgdG8gaG93IGZyYW1lIGludGVydmFscyBhcmUgZGVmaW5l ZCBpbiB4c2Rpcnhzc19nZXRfZnJhbWVyYXRlKCksDQo+IGNvcnJlY3Q/IE1heWJlIHNvbWUgY29t bWVudHMgb24gYm90aCBzaWRlcyB3b3VsZCBiZSBoZWxwZnVsLCBzYXlpbmcNCj4gbnVtZXJhdG9y DQo+ID09IDEwMDEgaXMgdHJlYXRlZCBhcyBmcmFjdGlvbmFsIGZwcz8NCj4gDQoNClN1cmUuIEkg d2lsbCBhZGQgYSBjb21tZW50IGZvciB0aGlzLg0KIldoZW4gbnVtZXJhdG9yIGlzIDEwMDEgdGhl biBmcmFtZSByYXRlIGlzIGZyYWN0aW9uYWwgZWxzZSBpbnRlZ2VyIg0KDQo+ID4gKw0KPiA+ICsJ aWYgKHByZXZfaXNfZnJhYyA9PSBpc19mcmFjKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4g Kwl4c2RpcnhfY29yZV9kaXNhYmxlKGNvcmUpOw0KPiA+ICsJeHNkaXJ4X2dsb2JhbGludHIoY29y ZSwgZmFsc2UpOw0KPiA+ICsJeHNkaXJ4X2Rpc2FibGVpbnRyKGNvcmUsIFhTRElSWF9JTlRSX0FM TF9NQVNLKTsNCj4gPiArDQo+ID4gKwkvKiBnZXQgc2RpX3J4X2NsayAqLw0KPiA+ICsJZ3RjbGsg PSBjb3JlLT5jbGtzWzFdLmNsazsNCj4gPiArCWNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUoZ3RjbGsp Ow0KPiANCj4gVGhpcyBpcyBub3QgbmVlZGVkLg0KPg0KPiA+ICsJaXNfZnJhYyA9IHN0YXRlLT5m cmFtZV9pbnRlcnZhbC5udW1lcmF0b3IgPT0gMTAwMSA/IDEgOiAwOw0KPiANCj4gTm90IG5lZWRl ZC4NCj4NCg0KSSB3aWxsIHJlbW92ZSBib3RoLg0KIA0KPiA+ICsNCj4gPiArCS8qIGNhbGN1YWx0 ZSBjbGtyYXRlICovDQo+ID4gKwlpZiAoIWlzX2ZyYWMpDQo+ID4gKwkJY2xrcmF0ZSA9IENMS19J TlQ7DQo+ID4gKwllbHNlDQo+ID4gKwkJY2xrcmF0ZSA9IChDTEtfSU5UICogMTAwMCkgLyAxMDAx Ow0KPiA+ICsNCj4gPiArCXJldCA9IGNsa19zZXRfcmF0ZShndGNsaywgY2xrcmF0ZSk7DQo+ID4g KwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjbGsg cmF0ZSA9ICVkXG4iLCByZXQpOw0KPiANCj4gSWYgdGhpcyBwdXRzIHRoZSBjb250cm9sbGVyIGlu IG5vbi1mdW5jdGlvbmFsIHN0YXRlLCBiZXR0ZXIgdG8gYmUgYW4gZXJyb3IsDQo+IGFuZCBzdG9w Lg0KPiANCg0KVGhlcmUgaXMgbm8gc3RvcC4gVGhlIGNvcmUgaGFzIHRvIGJlIGVuYWJsZWQgaW4g ZHJpdmVyIGFzIHRoZXJlIGlzIG5vIHdheSBmcm9tDQp1c2Vyc3BhY2UgdG8gY29udHJvbCB0aGUg U0RJIFJ4IGNvcmUuDQoNCj4gPiArDQo+ID4gKwljbGtyYXRlID0gY2xrX2dldF9yYXRlKGd0Y2xr KTsNCj4gDQo+IFNob3VsZG4ndCB0aGlzIHJhdGUgYmUgY2hlY2tlZCBhcyBzZXRfcmF0ZSgpIGRv ZXNuJ3QgZ3VhcmFudGVlIHRoZSByZXF1ZXN0ZWQNCj4gcmF0ZT8NCj4gDQoNClRoZSByZXF1ZXN0 ZWQgY2xvY2sgcmF0ZSBhbmQgc2V0IGNsb2NrIHJhdGUgbWF5IHZhcnkgYW5kIGRlcGVuZCBvbiBj bG9ja2luZyBoYXJkd2FyZSBjaGlwLg0KVGhlIGRlbHRhIG1heSB2YXJ5LiBTbyBubyBjaGVjayBo YXMgYmVlbiBwdXQuDQoNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgImNsa3JhdGUg PSAlbHUgaXNfZnJhYyA9ICVkXG4iLA0KPiA+ICsJCWNsa3JhdGUsIGlzX2ZyYWMpOw0KPiA+ICsN Cj4gPiArCXhzZGlyeF9mcmFtZXIoY29yZSwgc3RhdGUtPmZyYW1lcl9lbmFibGUpOw0KPiA+ICsJ eHNkaXJ4X3NldGVkaGVycmNudHRyaWdnZXIoY29yZSwgc3RhdGUtPmVkaG1hc2spOw0KPiA+ICsJ eHNkaXJ4X3NldHZpZGxvY2t3aW5kb3coY29yZSwgc3RhdGUtPnZpZGxvY2t3aW4pOw0KPiA+ICsJ eHNkaXJ4X3NldF9tb2RlZGV0ZWN0KGNvcmUsIHN0YXRlLT5zZWFyY2htYXNrKTsNCj4gPiArCXhz ZGlyeF9lbmFibGVpbnRyKGNvcmUsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsNCj4gPiArCXhzZGly eF9nbG9iYWxpbnRyKGNvcmUsIHRydWUpOw0KPiA+ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUp Ow0KPiA+ICsNCj4gPiArCXByZXZfaXNfZnJhYyA9IGlzX2ZyYWM7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiB4c2RpcnhfZ2V0X3N0cmVhbV9wcm9wZXJ0aWVzIC0gR2V0IFNESSBS eCBzdHJlYW0gcHJvcGVydGllcw0KPiA+ICsgKiBAc3RhdGU6IHBvaW50ZXIgdG8gZHJpdmVyIHN0 YXRlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyB0aGUgc3RyZWFtJ3Mg U1QzNTIgcGF5bG9hZCAoaWYgYXZhaWxhYmxlKSB0byBnZXQNCj4gPiArICogc3RyZWFtIHByb3Bl cnRpZXMgbGlrZSB3aWR0aCwgaGVpZ2h0LCBwaWN0dXJlIHR5cGUNCj4gKGludGVybGFjZWQvcHJv Z3Jlc3NpdmUpLA0KPiA+ICsgKiBldGMuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCBmb3Ig c3VjY2VzcyBlbHNlIGVycm9ycw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2RpcnhfZ2V0 X3N0cmVhbV9wcm9wZXJ0aWVzKHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnN0YXRlLT5jb3JlOw0KPiA+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2Ow0KPiA+ICsJdTMyIG1vZGUsIHBheWxvYWQg PSAwLCB2YWwsIGZhbWlseSwgdmFsaWQsIHRzY2FuOw0KPiA+ICsJdTggYnl0ZTEgPSAwLCBhY3Rp dmVfbHVtYSA9IDAsIHBpY190eXBlID0gMCwgZnJhbWVyYXRlID0gMDsNCj4gPiArCXU4IHNhbXBs aW5nID0gWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF80MjI7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9t YnVzX2ZyYW1lZm10ICpmb3JtYXQgPSAmc3RhdGUtPmZvcm1hdDsNCj4gPiArCXUzMiBicGMgPSBY U1QzNTJfQllURTRfQklUX0RFUFRIXzEwOw0KPiA+ICsNCj4gPiArCW1vZGUgPSB4c2Rpcnhzc19y ZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwltb2RlICY9IFhTRElS WF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiArDQo+ID4gKwl2YWxpZCA9IHhzZGly eHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX1ZBTElEX1JFRyk7DQo+ID4gKw0KPiA+ICsJaWYg KG1vZGUgPj0gWFNESVJYX01PREVfM0dfTUFTSyAmJiAhdmFsaWQpIHsNCj4gPiArCQlkZXZfZXJy KGRldiwgIk5vIHZhbGlkIFNUMzUyIHBheWxvYWQgcHJlc2VudCBldmVuIGZvciAzRw0KPiBtb2Rl IGFuZCBhYm92ZVxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfVFNfREVUX1NUQVRfUkVHKTsN Cj4gPiArCWlmICh2YWxpZCAmIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzFfTUFTSykgew0KPiA+ICsJ CXBheWxvYWQgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9TVDM1Ml9EUzFfUkVHKTsNCj4g PiArCQlieXRlMSA9IHJzaGlmdF9hbmRfbWFzayhwYXlsb2FkLCBYU1QzNTJfUEFZTE9BRF9CWVRF MSk7DQo+ID4gKwkJYWN0aXZlX2x1bWEgPSBtYXNrX2FuZF9yc2hpZnQocGF5bG9hZCwNCj4gPiAr DQo+IFhTVDM1Ml9CWVRFM19BQ1RfTFVNQV9DT1VOVCk7DQo+ID4gKwkJcGljX3R5cGUgPSBtYXNr X2FuZF9yc2hpZnQocGF5bG9hZCwNCj4gWFNUMzUyX0JZVEUyX1BJQ19UWVBFKTsNCj4gPiArCQlm cmFtZXJhdGUgPSByc2hpZnRfYW5kX21hc2socGF5bG9hZCwgWFNUMzUyX0JZVEUyX0ZQUyk7DQo+ ID4gKwkJdHNjYW4gPSBtYXNrX2FuZF9yc2hpZnQocGF5bG9hZCwgWFNUMzUyX0JZVEUyX1RTX1RZ UEUpOw0KPiA+ICsJCXNhbXBsaW5nID0gbWFza19hbmRfcnNoaWZ0KHBheWxvYWQsDQo+IFhTVDM1 Ml9CWVRFM19DT0xPUl9GT1JNQVQpOw0KPiA+ICsJCWJwYyA9IG1hc2tfYW5kX3JzaGlmdChwYXls b2FkLCBYU1QzNTJfQllURTRfQklUX0RFUFRIKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZGV2 X2RiZyhkZXYsICJObyBTVDM1MiBwYXlsb2FkIGF2YWlsYWJsZSA6IE1vZGUgPSAlZFxuIiwNCj4g bW9kZSk7DQo+ID4gKwkJZnJhbWVyYXRlID0gbWFza19hbmRfcnNoaWZ0KHZhbCwNCj4gWFNESVJY X1RTX0RFVF9TVEFUX1JBVEUpOw0KPiA+ICsJCXRzY2FuID0gbWFza19hbmRfcnNoaWZ0KHZhbCwg WFNESVJYX1RTX0RFVF9TVEFUX1NDQU4pOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICgoYnBj ID09IFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfMTAgJiYgY29yZS0+YnBjICE9IDEwKSB8fA0KPiA+ ICsJICAgIChicGMgPT0gWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF8xMiAmJiBjb3JlLT5icGMgIT0g MTIpKSB7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJCaXQgZGVwdGggbm90IHN1cHBvcnRlZC4gYnBj ID0gJWQgY29yZS0+YnBjID0NCj4gJWRcbiIsDQo+ID4gKwkJCWJwYywgY29yZS0+YnBjKTsNCj4g PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmYW1pbHkgPSBtYXNr X2FuZF9yc2hpZnQodmFsLCBYU0RJUlhfVFNfREVUX1NUQVRfRkFNSUxZKTsNCj4gPiArCXN0YXRl LT50c19pc19pbnRlcmxhY2VkID0gdHNjYW4gPyBmYWxzZSA6IHRydWU7DQo+ID4gKw0KPiA+ICsJ ZGV2X2RiZyhkZXYsICJ0c19pc19pbnRlcmxhY2VkID0gJWQsIGZhbWlseSA9ICVkXG4iLA0KPiA+ ICsJCXN0YXRlLT50c19pc19pbnRlcmxhY2VkLCBmYW1pbHkpOw0KPiA+ICsNCj4gPiArCXN3aXRj aCAobW9kZSkgew0KPiA+ICsJY2FzZSBYU0RJUlhfTU9ERV9IRF9NQVNLOg0KPiA+ICsJCWlmICgh dmFsaWQpIHsNCj4gPiArCQkJLyogTm8gcGF5bG9hZCBvYnRhaW5lZCAqLw0KPiA+ICsJCQlkZXZf ZGJnKGRldiwgImZyYW1lIHJhdGUgOiAlZCwgdHNjYW4gPSAlZFxuIiwNCj4gPiArCQkJCWZyYW1l cmF0ZSwgdHNjYW4pOw0KPiA+ICsJCQkvKg0KPiA+ICsJCQkgKiBOT1RFIDogQSBwcm9ncmVzc2l2 ZSBzZWdtZW50ZWQgZnJhbWUgcFNGIHdpbGwgYmUNCj4gPiArCQkJICogcmVwb3J0ZWQgaW5jb3Jy ZWN0bHkgYXMgSW50ZXJsYWNlZCBhcyB3ZSByZWx5IG9uIElQJ3MNCj4gPiArCQkJICogdHJhbnNw b3J0IHNjYW4gbG9ja2VkIGJpdC4NCj4gPiArCQkJICovDQo+ID4gKwkJCWRldl93YXJuKGRldiwg InBTRiB3aWxsIGJlIGluY29ycmVjdGx5IHJlcG9ydGVkIGFzDQo+IEludGVybGFjZWRcbiIpOw0K PiA+ICsNCj4gPiArCQkJc3dpdGNoIChmcmFtZXJhdGUpIHsNCj4gPiArCQkJY2FzZSBYU0RJUlhf VFNfREVUX1NUQVRfUkFURV8yM185OEhaOg0KPiA+ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RB VF9SQVRFXzI0SFo6DQo+ID4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVIWjoN Cj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yOV85N0haOg0KPiA+ICsJCQlj YXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMwSFo6DQo+ID4gKwkJCQlpZiAoZmFtaWx5ID09 IFhTRElSWF9TTVBURV9TVF8yOTYpIHsNCj4gDQo+IFRoaXMgc2VlbXMgbGlrZSBhIGxpdHRsZSB0 b28gbXVjaCBuZXN0ZWQgc3dpdGNoIC0gY2FzZSBhbmQgaWYgc3RhdGVtZW50cyBpbg0KPiBzaW5n bGUgZnVuY3Rpb24uIERvIHlvdSB0aGluayB0aGlzIGNhbiBiZSBjbGVhbmVkIHVwIHVzaW5nIHNv bWUgdGFibGUsDQo+IGV4IHVzaW5nIFhTRElSWF9NT0RFXyosIFhTRElSWF9UU19ERVRfU1RBVF9S QVRFXyosIGFkanVzdGVkDQo+IFhTVDM1Ml9CWVRFMV8qLCwsDQo+IGFzIGluZGV4ZXMgdG8gaXQ/ IE9yIHdpdGggc2VwYXJhdGUgZnVuY3Rpb25zIE9yIGlzIGl0IG92ZXJraWxsPyBJIGxldCB5b3UN Cj4gZGVjaWRlIHRob3VnaC4NCj4gDQoNCkN1cnJlbnRseSB3ZSBhcmUga2VlcGluZyB0aGUgc2Ft ZSBsb2dpYyBpbiB0aGUgYmFyZSBtZXRhbCBkcml2ZXIgYW5kIGluIExpbnV4IGRyaXZlci4NCkkg d2lsbCB0cnkgdG8gZG8gdGhpcyBsYXRlci4NCg0KPiA+ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAx MjgwOw0KPiA+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0gNzIwOw0KPiA+ICsJCQkJCWZvcm1hdC0+ ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwkJCQl9IGVsc2UgaWYgKGZhbWlseSA9PSBY U0RJUlhfU01QVEVfU1RfMjA0OF8yKQ0KPiB7DQo+ID4gKwkJCQkJZm9ybWF0LT53aWR0aCA9IDIw NDg7DQo+ID4gKwkJCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsJCQkJCWlmICh0c2Nh bikNCj4gPiArCQkJCQkJZm9ybWF0LT5maWVsZCA9DQo+IFY0TDJfRklFTERfTk9ORTsNCj4gPiAr CQkJCQllbHNlDQo+ID4gKwkJCQkJCWZvcm1hdC0+ZmllbGQgPQ0KPiA+ICsNCj4gCVY0TDJfRklF TERfQUxURVJOQVRFOw0KPiA+ICsJCQkJfSBlbHNlIHsNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRo ID0gMTkyMDsNCj4gPiArCQkJCQlmb3JtYXQtPmhlaWdodCA9IDEwODA7DQo+ID4gKwkJCQkJaWYg KHRzY2FuKQ0KPiA+ICsJCQkJCQlmb3JtYXQtPmZpZWxkID0NCj4gVjRMMl9GSUVMRF9OT05FOw0K PiA+ICsJCQkJCWVsc2UNCj4gPiArCQkJCQkJZm9ybWF0LT5maWVsZCA9DQo+ID4gKw0KPiAJVjRM Ml9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCQlicmVhazsNCj4gPiArCQkJ Y2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81MEhaOg0KPiA+ICsJCQljYXNlIFhTRElSWF9U U19ERVRfU1RBVF9SQVRFXzU5Xzk0SFo6DQo+ID4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFU X1JBVEVfNjBIWjoNCj4gPiArCQkJCWlmIChmYW1pbHkgPT0gWFNESVJYX1NNUFRFX1NUXzI3NCkg ew0KPiA+ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAxOTIwOw0KPiA+ICsJCQkJCWZvcm1hdC0+aGVp Z2h0ID0gMTA4MDsNCj4gPiArCQkJCX0gZWxzZSB7DQo+ID4gKwkJCQkJZm9ybWF0LT53aWR0aCA9 IDEyODA7DQo+ID4gKwkJCQkJZm9ybWF0LT5oZWlnaHQgPSA3MjA7DQo+ID4gKwkJCQl9DQo+ID4g KwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJCQkJYnJlYWs7DQo+ ID4gKwkJCWRlZmF1bHQ6DQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiArCQkJ CWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsNCj4gPiArCQkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJ RUxEX05PTkU7DQo+ID4gKwkJCX0NCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlkZXZfZGJnKGRl diwgIkdvdCB0aGUgcGF5bG9hZFxuIik7DQo+ID4gKwkJCXN3aXRjaCAoYnl0ZTEpIHsNCj4gPiAr CQkJY2FzZSBYU1QzNTJfQllURTFfU1QyOTJfMXg3MjBMXzFfNUc6DQo+ID4gKwkJCQkvKiBTTVBU RSBTVCAyOTItMSBmb3IgNzIwIGxpbmUgcGF5bG9hZHMgKi8NCj4gPiArCQkJCWZvcm1hdC0+d2lk dGggPSAxMjgwOw0KPiA+ICsJCQkJZm9ybWF0LT5oZWlnaHQgPSA3MjA7DQo+ID4gKwkJCQlicmVh azsNCj4gPiArCQkJY2FzZSBYU1QzNTJfQllURTFfU1QyOTJfMXgxMDgwTF8xXzVHOg0KPiA+ICsJ CQkJLyogU01QVEUgU1QgMjkyLTEgZm9yIDEwODAgbGluZSBwYXlsb2FkcyAqLw0KPiA+ICsJCQkJ Zm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsJCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ICsJ CQkJCWZvcm1hdC0+d2lkdGggPSAyMDQ4Ow0KPiA+ICsJCQkJZWxzZQ0KPiA+ICsJCQkJCWZvcm1h dC0+d2lkdGggPSAxOTIwOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCWRlZmF1bHQ6DQo+ID4g KwkJCQlkZXZfZGJnKGRldiwgIlVua25vd24gSEQgTW9kZSBTTVBURQ0KPiBzdGFuZGFyZFxuIik7 DQo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArCQli cmVhazsNCj4gPiArCWNhc2UgWFNESVJYX01PREVfU0RfTUFTSzoNCj4gPiArCQlmb3JtYXQtPmZp ZWxkID0gVjRMMl9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gKw0KPiA+ICsJCXN3aXRjaCAoZmFtaWx5 KSB7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTlRTQzoNCj4gPiArCQkJZm9ybWF0LT53aWR0aCA9IDcy MDsNCj4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSA0ODY7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJ CWNhc2UgWFNESVJYX1BBTDoNCj4gPiArCQkJZm9ybWF0LT53aWR0aCA9IDcyMDsNCj4gPiArCQkJ Zm9ybWF0LT5oZWlnaHQgPSA1NzY7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ ID4gKwkJCWRldl9kYmcoZGV2LCAiVW5rbm93biBTRCBNb2RlIFNNUFRFDQo+IHN0YW5kYXJkXG4i KTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBYU0RJUlhfTU9ERV8zR19NQVNLOg0KPiA+ICsJCXN3aXRjaCAoYnl0ZTEpIHsNCj4g PiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDQyNV8yMDA4Xzc1MExfM0dCOg0KPiA+ICsJCQkvKiBT ZWMgNC4xLjYuMSBTTVBURSA0MjUtMjAwOCAqLw0KPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NU MzcyXzJ4NzIwTF8zR0I6DQo+ID4gKwkJCS8qIFRhYmxlIDEzIFNNUFRFIDQyNS0yMDA4ICovDQo+ ID4gKwkJCWZvcm1hdC0+d2lkdGggPSAxMjgwOw0KPiA+ICsJCQlmb3JtYXQtPmhlaWdodCA9IDcy MDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1Q0MjVfMjAwOF8x MTI1TF8zR0E6DQo+ID4gKwkJCS8qIFNUMzUyIFRhYmxlIFNNUFRFIDQyNS0xICovDQo+ID4gKwkJ Y2FzZSBYU1QzNTJfQllURTFfU1QzNzJfRExfM0dCOg0KPiA+ICsJCQkvKiBUYWJsZSAxMyBTTVBU RSA0MjUtMjAwOCAqLw0KPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMzcyXzJ4MTA4MExfM0dC Og0KPiA+ICsJCQkvKiBUYWJsZSAxMyBTTVBURSA0MjUtMjAwOCAqLw0KPiA+ICsJCQlmb3JtYXQt PmhlaWdodCA9IDEwODA7DQo+ID4gKwkJCWlmIChhY3RpdmVfbHVtYSkNCj4gPiArCQkJCWZvcm1h dC0+d2lkdGggPSAyMDQ4Ow0KPiA+ICsJCQllbHNlDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0g MTkyMDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJZGV2X2RiZyhk ZXYsICJVbmtub3duIDNHIE1vZGUgU01QVEUNCj4gc3RhbmRhcmRcbiIpOw0KPiA+ICsJCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9N T0RFXzZHX01BU0s6DQo+ID4gKwkJc3dpdGNoIChieXRlMSkgew0KPiA+ICsJCWNhc2UgWFNUMzUy X0JZVEUxX1NUMjA4MV8xMF9ETF8yMTYwTF82RzoNCj4gPiArCQkJLyogRHVhbCBsaW5rIDZHICov DQo+ID4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwXzIxNjBMXzZHOg0KPiA+ICsJCQkv KiBUYWJsZSAzIFNNUFRFIFNUIDIwODEtMTAgKi8NCj4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAy MTYwOw0KPiA+ICsJCQlpZiAoYWN0aXZlX2x1bWEpDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0g NDA5NjsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDM4NDA7DQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjA4MV8xMF8yXzEwODBMXzZH Og0KPiA+ICsJCQlmb3JtYXQtPmhlaWdodCA9IDEwODA7DQo+ID4gKwkJCWlmIChhY3RpdmVfbHVt YSkNCj4gPiArCQkJCWZvcm1hdC0+d2lkdGggPSAyMDQ4Ow0KPiA+ICsJCQllbHNlDQo+ID4gKwkJ CQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZGVmYXVsdDoN Cj4gPiArCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIDZHIE1vZGUgU01QVEUNCj4gc3RhbmRhcmRc biIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwljYXNlIFhTRElSWF9NT0RFXzEyR0lfTUFTSzoNCj4gPiArCWNhc2UgWFNESVJYX01PREVf MTJHRl9NQVNLOg0KPiA+ICsJCXN3aXRjaCAoYnl0ZTEpIHsNCj4gPiArCQljYXNlIFhTVDM1Ml9C WVRFMV9TVDIwODJfMTBfMjE2MExfMTJHOg0KPiA+ICsJCQkvKiBTZWN0aW9uIDQuMy4xIFNNUFRF IFNUIDIwODItMTAgKi8NCj4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAyMTYwOw0KPiA+ICsJCQlp ZiAoYWN0aXZlX2x1bWEpDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gNDA5NjsNCj4gPiArCQkJ ZWxzZQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDM4NDA7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiVW5rbm93biAxMkcgTW9kZSBTTVBU RQ0KPiBzdGFuZGFyZFxuIik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4g PiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZGV2X2VycihkZXYsICJJbnZhbGlk IE1vZGVcbiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWlmICh2YWxpZCkgew0KPiA+ICsJCWlmIChwaWNfdHlwZSkNCj4gPiArCQkJZm9ybWF0LT5maWVs ZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCWZvcm1hdC0+ZmllbGQg PSBWNEwyX0ZJRUxEX0FMVEVSTkFURTsNCj4gPiArDQo+ID4gKwkJaWYgKGZvcm1hdC0+aGVpZ2h0 ID09IDEwODAgJiYgcGljX3R5cGUgJiYgIXRzY2FuKQ0KPiA+ICsJCQlmb3JtYXQtPmZpZWxkID0g VjRMMl9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gKw0KPiA+ICsJCS8qDQo+ID4gKwkJICogSW4gM0dC IERMIHBTRiBtb2RlIHRoZSB2aWRlbyBpcyBzaW1pbGFyIHRvIGludGVybGFjZWQuDQo+ID4gKwkJ ICogU28gdGhvdWdoIGl0IGlzIGEgcHJvZ3Jlc3NpdmUgdmlkZW8sIGl0cyB0cmFuc3BvcnQgaXMN Cj4gPiArCQkgKiBpbnRlcmxhY2VkIGFuZCBpcyBzZW50IGFzIHR3byB3aWR0aCB4IChoZWlnaHQv MikgYnVmZmVycy4NCj4gPiArCQkgKi8NCj4gPiArCQlpZiAoYnl0ZTEgPT0gWFNUMzUyX0JZVEUx X1NUMzcyX0RMXzNHQikgew0KPiA+ICsJCQlpZiAoc3RhdGUtPnRzX2lzX2ludGVybGFjZWQpDQo+ ID4gKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gKwkJCWVs c2UNCj4gPiArCQkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwkJfQ0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChmb3JtYXQtPmZpZWxkID09IFY0TDJfRklFTERfQUxU RVJOQVRFKQ0KPiA+ICsJCWZvcm1hdC0+aGVpZ2h0ID0gZm9ybWF0LT5oZWlnaHQgLyAyOw0KPiA+ ICsNCj4gPiArCXN3aXRjaCAoc2FtcGxpbmcpIHsNCj4gPiArCWNhc2UgWFNUMzUyX0JZVEUzX0NP TE9SX0ZPUk1BVF80MjI6DQo+ID4gKwkJaWYgKGNvcmUtPmJwYyA9PSAxMCkNCj4gPiArCQkJZm9y bWF0LT5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgyMDsNCj4gPiArCQllbHNlDQo+ID4g KwkJCWZvcm1hdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEyXzFYMjQ7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKwljYXNlIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfNDIwOg0KPiA+ICsJY2Fz ZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUX1lVVjQ0NDoNCj4gPiArCWNhc2UgWFNUMzUyX0JZ VEUzX0NPTE9SX0ZPUk1BVF9HQlI6DQo+ID4gKwkJZm9ybWF0LT5jb2RlID0gMDsNCj4gPiArCQlk ZXZfZGJnKGRldiwgIk5vIGNvcnJlc3BvbmRpbmcgbWVkaWEgYnVzIGZvcm1hdHNcbiIpOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlkZXZfZXJyKGRldiwgIlVuc3VwcG9y dGVkIGNvbG9yIGZvcm1hdCA6ICVkXG4iLCBzYW1wbGluZyk7DQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJeHNkaXJ4c3NfZ2V0X2ZyYW1lcmF0ZSgmc3RhdGUt PmZyYW1lX2ludGVydmFsLCBmcmFtZXJhdGUpOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoZGV2LCAi U3RyZWFtIHdpZHRoID0gJWQgaGVpZ2h0ID0gJWQgRmllbGQgPSAlZCBwYXlsb2FkID0NCj4gMHgl MDh4IHRzID0gMHglMDh4XG4iLA0KPiA+ICsJCWZvcm1hdC0+d2lkdGgsIGZvcm1hdC0+aGVpZ2h0 LCBmb3JtYXQtPmZpZWxkLCBwYXlsb2FkLCB2YWwpOw0KPiA+ICsJZGV2X2RiZyhkZXYsICJmcmFt ZSByYXRlIG51bWVyYXRvciA9ICVkIGRlbm9taW5hdG9yID0gJWRcbiIsDQo+ID4gKwkJc3RhdGUt PmZyYW1lX2ludGVydmFsLm51bWVyYXRvciwNCj4gPiArCQlzdGF0ZS0+ZnJhbWVfaW50ZXJ2YWwu ZGVub21pbmF0b3IpOw0KPiA+ICsJZGV2X2RiZyhkZXYsICJTdHJlYW0gY29kZSA9IDB4JXhcbiIs IGZvcm1hdC0+Y29kZSk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIHhzZGlyeHNzX2lycV9oYW5kbGVyIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIFNE SSBSeA0KPiA+ICsgKiBAaXJxOiBJUlEgbnVtYmVyDQo+ID4gKyAqIEBkZXZfaWQ6IFBvaW50ZXIg dG8gZGV2aWNlIHN0YXRlDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBTREkgUnggaW50ZXJydXB0cyBh cmUgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gY29ycmVzcG9uZGluZyBiaXQuDQo+ID4gKyAqDQo+ ID4gKyAqIFJldHVybjogSVJRX0hBTkRMRUQgYWZ0ZXIgaGFuZGxpbmcgaW50ZXJydXB0cw0KPiA+ ICsgKi8NCj4gPiArc3RhdGljIGlycXJldHVybl90IHhzZGlyeHNzX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRldl9pZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICpz dGF0ZSA9IChzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKilkZXZfaWQ7DQo+ID4gKwlzdHJ1Y3QgeHNk aXJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9IGNvcmUtPmRldjsNCj4gPiArCXUzMiBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJc3RhdHVzID0g eHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfSVNSX1JFRyk7DQo+ID4gKwl4c2Rpcnhzc193cml0 ZShjb3JlLCBYU0RJUlhfSVNSX1JFRywgc3RhdHVzKTsNCj4gPiArCWRldl9kYmcoZGV2LCAiaW50 ZXJydXB0IHN0YXR1cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsNCj4gDQo+IG1heWJlLA0KPiAJaWYg KCFzdGF0dXMpDQo+IAkJcmV0dXJuIElSUV9OT05FOw0KPiANCg0KQWdyZWUuIEkgd2lsbCBhZGQg dGhpcyBpbiBuZXh0IHZlcnNpb24uDQoNCj4gPiArDQo+ID4gKwlpZiAoc3RhdHVzICYgWFNESVJY X0lOVFJfVklETE9DS19NQVNLIHx8DQo+ID4gKwkgICAgc3RhdHVzICYgWFNESVJYX0lOVFJfVklE VU5MT0NLX01BU0spIHsNCj4gPiArCQl1MzIgdmFsMSwgdmFsMjsNCj4gPiArDQo+ID4gKwkJZGV2 X2RiZyhkZXYsICJ2aWRlbyBsb2NrL3VubG9jayBpbnRlcnJ1cHRcbiIpOw0KPiA+ICsNCj4gPiAr CQl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUsIGZhbHNlKTsNCj4gPiArCQlzdGF0ZS0+ c3RyZWFtaW5nID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJCXZhbDEgPSB4c2Rpcnhzc19yZWFkKGNv cmUsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwkJdmFsMiA9IHhzZGlyeHNzX3Jl YWQoY29yZSwgWFNESVJYX1RTX0RFVF9TVEFUX1JFRyk7DQo+ID4gKw0KPiA+ICsJCWlmICgodmFs MSAmIFhTRElSWF9NT0RFX0RFVF9TVEFUX01PREVfTE9DS19NQVNLKSAmJg0KPiA+ICsJCSAgICAo dmFsMiAmIFhTRElSWF9UU19ERVRfU1RBVF9MT0NLRURfTUFTSykpIHsNCj4gPiArCQkJdTMyIG1h c2sgPQ0KPiBYU0RJUlhfUlNUX0NUUkxfUlNUX0NSQ19FUlJDTlRfTUFTSyB8DQo+ID4gKw0KPiBY U0RJUlhfUlNUX0NUUkxfUlNUX0VESF9FUlJDTlRfTUFTSzsNCj4gPiArDQo+ID4gKwkJCWRldl9k YmcoZGV2LCAidmlkZW8gbG9jayBpbnRlcnJ1cHRcbiIpOw0KPiA+ICsNCj4gPiArCQkJeHNkaXJ4 c3Nfc2V0KGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsIG1hc2spOw0KPiA+ICsJCQl4c2Rpcnhz c19jbHIoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywgbWFzayk7DQo+ID4gKw0KPiA+ICsJCQl2 YWwxID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfU1QzNTJfVkFMSURfUkVHKTsNCj4gPiAr CQkJdmFsMiA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX0RTMV9SRUcpOw0KPiA+ ICsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICJ2YWxpZCBzdDM1MiBtYXNrID0gMHglMDh4XG4iLCB2 YWwxKTsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICJzdDM1MiBwYXlsb2FkID0gMHglMDh4XG4iLCB2 YWwyKTsNCj4gPiArDQo+ID4gKwkJCWlmICgheHNkaXJ4X2dldF9zdHJlYW1fcHJvcGVydGllcyhz dGF0ZSkpIHsNCj4gPiArCQkJCXN0YXRlLT52aWRsb2NrZWQgPSB0cnVlOw0KPiA+ICsJCQkJeHNk aXJ4c3Nfc2V0X2d0Y2xrKHN0YXRlKTsNCj4gPiArCQkJfSBlbHNlIHsNCj4gPiArCQkJCWRldl9l cnIoZGV2LCAiVW5hYmxlIHRvIGdldCBzdHJlYW0NCj4gcHJvcGVydGllcyFcbiIpOw0KPiA+ICsJ CQkJc3RhdGUtPnZpZGxvY2tlZCA9IGZhbHNlOw0KPiA+ICsJCQl9DQo+ID4gKwkJfSBlbHNlIHsN Cj4gPiArCQkJZGV2X2RiZyhkZXYsICJ2aWRlbyB1bmxvY2sgaW50ZXJydXB0XG4iKTsNCj4gPiAr CQkJc3RhdGUtPnZpZGxvY2tlZCA9IGZhbHNlOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJbWVt c2V0KCZzdGF0ZS0+ZXZlbnQsIDAsIHNpemVvZihzdGF0ZS0+ZXZlbnQpKTsNCj4gPiArCQlzdGF0 ZS0+ZXZlbnQudHlwZSA9IFY0TDJfRVZFTlRfU09VUkNFX0NIQU5HRTsNCj4gPiArCQlzdGF0ZS0+ ZXZlbnQudS5zcmNfY2hhbmdlLmNoYW5nZXMgPQ0KPiA+ICsJCQlWNEwyX0VWRU5UX1NSQ19DSF9S RVNPTFVUSU9OOw0KPiA+ICsJCXY0bDJfc3ViZGV2X25vdGlmeV9ldmVudCgmc3RhdGUtPnN1YmRl diwgJnN0YXRlLT5ldmVudCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHN0YXR1cyAmIFhT RElSWF9JTlRSX1VOREVSRkxPV19NQVNLKSB7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJWaWRlbyBp biB0byBBWEk0IFN0cmVhbSBjb3JlIHVuZGVyZmxvdw0KPiBpbnRlcnJ1cHRcbiIpOw0KPiA+ICsN Cj4gPiArCQltZW1zZXQoJnN0YXRlLT5ldmVudCwgMCwgc2l6ZW9mKHN0YXRlLT5ldmVudCkpOw0K PiA+ICsJCXN0YXRlLT5ldmVudC50eXBlID0gVjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfVU5ERVJG TE9XOw0KPiA+ICsJCXY0bDJfc3ViZGV2X25vdGlmeV9ldmVudCgmc3RhdGUtPnN1YmRldiwgJnN0 YXRlLT5ldmVudCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHN0YXR1cyAmIFhTRElSWF9J TlRSX09WRVJGTE9XX01BU0spIHsNCj4gPiArCQlkZXZfZGJnKGRldiwgIlZpZGVvIGluIHRvIEFY STQgU3RyZWFtIGNvcmUgb3ZlcmZsb3cNCj4gaW50ZXJydXB0XG4iKTsNCj4gPiArDQo+ID4gKwkJ bWVtc2V0KCZzdGF0ZS0+ZXZlbnQsIDAsIHNpemVvZihzdGF0ZS0+ZXZlbnQpKTsNCj4gPiArCQlz dGF0ZS0+ZXZlbnQudHlwZSA9IFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX09WRVJGTE9XOw0KPiA+ ICsJCXY0bDJfc3ViZGV2X25vdGlmeV9ldmVudCgmc3RhdGUtPnN1YmRldiwgJnN0YXRlLT5ldmVu dCk7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19zdWJzY3JpYmVfZXZlbnQgLSBTdWJzY3JpYmUgdG8g dmlkZW8gbG9jayBhbmQgdW5sb2NrIGV2ZW50DQo+ID4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNl DQo+ID4gKyAqIEBmaDogVjRMMiBGaWxlIEhhbmRsZQ0KPiA+ICsgKiBAc3ViOiBTdWJjcmliZSBl dmVudCBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVy cm9ycyBvdGhlcndpc2UNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3Nfc3Vic2Ny aWJlX2V2ZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkgICAgc3RydWN0IHY0 bDJfZmggKmZoLA0KPiA+ICsJCQkJICAgIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAq c3ViKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRl ICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0IHhzZGlyeHNz X2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3MtPmNvcmU7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChzdWIt PnR5cGUpIHsNCj4gPiArCWNhc2UgVjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfVU5ERVJGTE9XOg0K PiA+ICsJY2FzZSBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9PVkVSRkxPVzoNCj4gPiArCQlyZXQg PSB2NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCBYU0RJUlhfTUFYX0VWRU5UUywNCj4gTlVM TCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfRVZFTlRfU09VUkNFX0NIQU5HRToN Cj4gPiArCQlyZXQgPSB2NGwyX3NyY19jaGFuZ2VfZXZlbnRfc3Vic2NyaWJlKGZoLCBzdWIpOw0K PiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArCX0NCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2LCAiRXZlbnQgc3Vic2NyaWJlZCA6IDB4JTA4 eFxuIiwgc3ViLT50eXBlKTsNCj4gDQo+IEhhdmluZyB0aGlzIGluIHRoZSBiZWdpbm5pbmcgbWF5 IGhlbHAgY2F0Y2ggaW52YWxpZCBzdWJjcmlwdGlvbiB0eXBlIHRvbz8NCg0KQWdyZWVkLiAgSSB3 aWxsIG1vdmUgdGhpcyB0byBiZWdpbm5pbmcgb2YgZnVuY3Rpb24uDQoNCj4gDQo+ID4gKwlyZXR1 cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3NfdW5zdWJz Y3JpYmVfZXZlbnQgLSBVbnN1YnNjcmliZSBmcm9tIGFsbCBldmVudHMgcmVnaXN0ZXJlZA0KPiA+ ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmg6IFY0TDIgZmlsZSBoYW5kbGUN Cj4gPiArICogQHN1YjogcG9pbnRlciB0byBFdmVudCB1bnN1YnNjcmlwdGlvbiBzdHJ1Y3R1cmUN Cj4gPiArICoNCj4gPiArICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2 ZSBlcnJvciBjb2RlLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc191bnN1YnNj cmliZV9ldmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJICAgICAgc3RydWN0 IHY0bDJfZmggKmZoLA0KPiA+ICsJCQkJICAgICAgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0 aW9uICpzdWIpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3Mg PSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3Jl ID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2LCAiRXZl bnQgdW5zdWJzY3JpYmUgOiAweCUwOHhcbiIsIHN1Yi0+dHlwZSk7DQo+ID4gKwlyZXR1cm4gdjRs Ml9ldmVudF91bnN1YnNjcmliZShmaCwgc3ViKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIHhzZGlyeHNzX3NfY3RybCAtIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIFhpbGlueCBT REkgUnggVjRMMiBjb250cm9scw0KPiA+ICsgKiBAY3RybDogVjRMMiBjb250cm9sIHRvIGJlIHNl dA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBWNEwy IGNvbnRyb2xzIGZvciB0aGUgWGlsaW54IFNESSBSeA0KPiA+ICsgKiBTdWJzeXN0ZW0uDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpj dHJsKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19z dGF0ZSAqeHNkaXJ4c3MgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1 Y3QgeHNkaXJ4c3Nfc3RhdGUsDQo+ID4gKwkJCSAgICAgY3RybF9oYW5kbGVyKTsNCj4gPiArCXN0 cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2Ow0KPiA+ICsNCj4gPiArCWRldl9kYmcoZGV2LCAic2V0 IGN0cmwgaWQgPSAweCUwOHggdmFsID0gMHglMDh4XG4iLA0KPiA+ICsJCWN0cmwtPmlkLCBjdHJs LT52YWwpOw0KPiA+ICsNCj4gPiArCWlmICh4c2Rpcnhzcy0+c3RyZWFtaW5nKSB7DQo+ID4gKwkJ ZGV2X2VycihkZXYsICJDYW5ub3Qgc2V0IGNvbnRyb2xzIHdoaWxlIHN0cmVhbWluZ1xuIik7DQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJeHNkaXJ4X2NvcmVf ZGlzYWJsZShjb3JlKTsNCj4gPiArCXN3aXRjaCAoY3RybC0+aWQpIHsNCj4gPiArCWNhc2UgVjRM Ml9DSURfWElMSU5YX1NESVJYX0ZSQU1FUjoNCj4gPiArCQl4c2RpcnhfZnJhbWVyKGNvcmUsIGN0 cmwtPnZhbCk7DQo+ID4gKwkJeHNkaXJ4c3MtPmZyYW1lcl9lbmFibGUgPSBjdHJsLT52YWw7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9WSURMT0NLX1dJ TkRPVzoNCj4gPiArCQl4c2Rpcnhfc2V0dmlkbG9ja3dpbmRvdyhjb3JlLCBjdHJsLT52YWwpOw0K PiA+ICsJCXhzZGlyeHNzLT52aWRsb2Nrd2luID0gY3RybC0+dmFsOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVF9FTkFCTEU6DQo+ID4g KwkJeHNkaXJ4X3NldGVkaGVycmNudHRyaWdnZXIoY29yZSwgY3RybC0+dmFsKTsNCj4gPiArCQl4 c2Rpcnhzcy0+ZWRobWFzayA9IGN0cmwtPnZhbDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug VjRMMl9DSURfWElMSU5YX1NESVJYX1NFQVJDSF9NT0RFUzoNCj4gPiArCQlpZiAoY3RybC0+dmFs KSB7DQo+ID4gKwkJCWlmIChjb3JlLT5tb2RlID09IFhTRElSWFNTX1NESV9TVERfM0cpIHsNCj4g PiArCQkJCWRldl9kYmcoZGV2LCAiVXB0byAzRyBzdXBwb3J0ZWRcbiIpOw0KPiA+ICsJCQkJY3Ry bC0+dmFsICY9IH4oQklUKFhTRElSWF9NT0RFXzZHX09GRlNFVCkNCj4gfA0KPiA+ICsJCQkJCSAg ICAgICBCSVQoWFNESVJYX01PREVfMTJHSV9PRkZTRVQpDQo+IHwNCj4gPiArDQo+IEJJVChYU0RJ UlhfTU9ERV8xMkdGX09GRlNFVCkpOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlpZiAoY29y ZS0+bW9kZSA9PSBYU0RJUlhTU19TRElfU1REXzZHKSB7DQo+ID4gKwkJCQlkZXZfZGJnKGRldiwg IlVwdG8gNkcgc3VwcG9ydGVkXG4iKTsNCj4gPiArCQkJCWN0cmwtPnZhbCAmPQ0KPiB+KEJJVChY U0RJUlhfTU9ERV8xMkdJX09GRlNFVCkgfA0KPiA+ICsNCj4gQklUKFhTRElSWF9NT0RFXzEyR0Zf T0ZGU0VUKSk7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCXJldCA9IHhzZGlyeF9zZXRfbW9k ZWRldGVjdChjb3JlLCBjdHJsLT52YWwpOw0KPiA+ICsJCQlpZiAoIXJldCkNCj4gPiArCQkJCXhz ZGlyeHNzLT5zZWFyY2htYXNrID0gY3RybC0+dmFsOw0KPiA+ICsJCX0gZWxzZSB7DQo+IA0KPiBU aGlzIGNhbiBiZSBkb25lIGluIHRlIGJlZ2luaW5nLg0KPiANCj4gCWlmICghY3RybC0+dmFsKSB7 DQo+IAkJZGV2X2VycigpOw0KPiAJCXJldHVybiAtRUlOVkFMOw0KPiAJfQ0KPiANCj4gCWlmIChj b3JlLT5tb2RlIC4uLikNCj4gDQoNCkFncmVlIEkgd2lsbCBtb2RpZnkgdGhpcyBuZXh0IHRpbWUu DQoNCj4gPiArCQkJZGV2X2VycihkZXYsICJTZWxlY3QgYXQgbGVhc3Qgb25lIG1vZGUhXG4iKTsN Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ ZGVmYXVsdDoNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywN Cj4gPiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfU1NfRU5fTUFTSyk7DQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwl4c2RpcnhfY29yZV9lbmFibGUoY29yZSk7DQo+IA0K PiBJIHJlYWxpemVkIHRoYXQgdGhlIGNvcmUgaXMgZW5hYmxlZCBhbGwgdGhlIHRpbWUuIENhbiBp dCBiZSBlbmFibGVkIC8gZGlzYWJsZWQNCj4gcGVyIHN0cmVhbSBvbiAvIG9mZj8gT3IgaXMgaXQg dHJpY2t5Pw0KPiANCg0KWWVzIHRoZSBjb3JlIGlzIGVuYWJsZWQgYWxsIHRoZSB0aW1lLiBXZSBv bmx5IGVuYWJsZS9kaXNhYmxlIGJyaWRnZXMgaW4gdGhlIHNfc3RyZWFtKCkuDQpUaGlzIGlzIGRv bmUgc28gdGhhdCB0aGUgY29yZSBjYW4gZGV0ZWN0IHdoYXQgaXMgdGhlIGluY29taW5nIHN0cmVh bSBwcm9wZXJ0aWVzLg0KSWYgd2UgZG9u4oCZdCBoYXZlIHN0cmVhbSBwcm9wZXJ0aWVzLCB0aGUg dXNlciBzcGFjZSB3b24ndCBiZSBhYmxlIHRvIGNvcnJlY3RseSBhbGxvY2F0ZSAvDQpJbml0aWFs aXplIHRoZSBwaXBlbGluZS4NCg0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIHhzZGlyeHNzX2dfdm9sYXRpbGVfY3RybCAtIGdldCB0aGUgWGlsaW54 IFNESSBSeCBjb250cm9scw0KPiA+ICsgKiBAY3RybDogUG9pbnRlciB0byBWNEwyIGNvbnRyb2wN Cj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UN Cj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZ192b2xhdGlsZV9jdHJsKHN0cnVj dCB2NGwyX2N0cmwgKmN0cmwpDQo+ID4gK3sNCj4gPiArCXUzMiB2YWw7DQo+ID4gKwlzdHJ1Y3Qg eHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0NCj4gPiArCQljb250YWluZXJfb2YoY3RybC0+aGFu ZGxlciwNCj4gPiArCQkJICAgICBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUsIGN0cmxfaGFuZGxlcik7 DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsNCj4g PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvcmUtPmRldjsNCj4gPiArDQo+ID4gKwlzd2l0Y2gg KGN0cmwtPmlkKSB7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9NT0RFX0RFVEVD VDoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiArCQkJZGV2X2Vycihk ZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+IGxvY2tlZCFcbiIpOw0KPiA+ ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJdmFsID0geHNkaXJ4c3NfcmVh ZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ICsJCXZhbCAmPSBYU0RJUlhf TU9ERV9ERVRfU1RBVF9SWF9NT0RFX01BU0s7DQo+ID4gKw0KPiA+ICsJCXN3aXRjaCAodmFsKSB7 DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV9TRF9NQVNLOg0KPiA+ICsJCQljdHJsLT52YWwgPSBY U0RJUlhfTU9ERV9TRF9PRkZTRVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJY X01PREVfSERfTUFTSzoNCj4gPiArCQkJY3RybC0+dmFsID0gWFNESVJYX01PREVfSERfT0ZGU0VU Ow0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTRElSWF9NT0RFXzNHX01BU0s6DQo+ID4g KwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RFXzNHX09GRlNFVDsNCj4gPiArCQkJYnJlYWs7DQo+ ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV82R19NQVNLOg0KPiA+ICsJCQljdHJsLT52YWwgPSBYU0RJ UlhfTU9ERV82R19PRkZTRVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01P REVfMTJHSV9NQVNLOg0KPiA+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV8xMkdJX09GRlNF VDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdGX01BU0s6DQo+ ID4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUOw0KPiA+ICsJCQlicmVh azsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9T RElSWF9DUkM6DQo+ID4gKwkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhf Q1JDX0VSUkNOVF9SRUcpOw0KPiA+ICsJCXhzZGlyeHNzX3dyaXRlKGNvcmUsIFhTRElSWF9DUkNf RVJSQ05UX1JFRywgMHhGRkZGKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9DSURf WElMSU5YX1NESVJYX0VESF9FUlJDTlQ6DQo+ID4gKwkJdmFsID0geHNkaXJ4c3NfcmVhZChjb3Jl LCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9E RVRfU1RBVF9SWF9NT0RFX01BU0s7DQo+ID4gKwkJaWYgKHZhbCA9PSBYU0RJUlhfTU9ERV9TRF9N QVNLKSB7DQo+ID4gKwkJCWN0cmwtPnZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwNCj4gWFNESVJY X0VESF9FUlJDTlRfUkVHKTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlkZXZfZGJnKGRldiwg IiVkIC0gbm90IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlkKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhf U0RJUlhfRURIX1NUQVRVUzoNCj4gPiArCQl2YWwgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElS WF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwkJdmFsICY9IFhTRElSWF9NT0RFX0RFVF9TVEFU X1JYX01PREVfTUFTSzsNCj4gPiArCQlpZiAodmFsID09IFhTRElSWF9NT0RFX1NEX01BU0spIHsN Cj4gPiArCQkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLA0KPiBYU0RJUlhfRURIX1NU QVRfUkVHKTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlkZXZfZGJnKGRldiwgIiVkIC0gbm90 IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlkKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g KwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVFNf SVNfSU5URVJMQUNFRDoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiAr CQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+IGxvY2tl ZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJY3RybC0+ dmFsID0geHNkaXJ4c3MtPnRzX2lzX2ludGVybGFjZWQ7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlj YXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9BQ1RJVkVfU1RSRUFNUzoNCj4gPiArCQlpZiAoIXhz ZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFs dWVzIHdoZW4gdmlkZW8gbm90DQo+IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZB TDsNCj4gPiArCQl9DQo+ID4gKwkJdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9E RV9ERVRfU1RBVF9SRUcpOw0KPiA+ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1Rf U1RSRUFNX01BU0s7DQo+ID4gKwkJdmFsID4+PSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RS RUFNX09GRlNFVDsNCj4gPiArCQljdHJsLT52YWwgPSAxIDw8IHZhbDsNCj4gPiArCQlicmVhazsN Cj4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0lTXzNHQjoNCj4gPiArCQlpZiAoIXhz ZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFs dWVzIHdoZW4gdmlkZW8gbm90DQo+IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZB TDsNCj4gPiArCQl9DQo+ID4gKwkJdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9E RV9ERVRfU1RBVF9SRUcpOw0KPiA+ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9MVkxC XzNHX01BU0s7DQo+ID4gKwkJY3RybC0+dmFsID0gdmFsID8gdHJ1ZSA6IGZhbHNlOw0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlkZXZfZXJyKGRldiwgIkdldCBJbnZhbGlk IGNvbnRyb2wgaWQgMHglMHhcbiIsIGN0cmwtPmlkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiArCX0NCj4gPiArCWRldl9kYmcoZGV2LCAiR2V0IGN0cmwgaWQgPSAweCUwOHggdmFsID0g MHglMDh4XG4iLCBjdHJsLT5pZCwNCj4gPiArCQljdHJsLT52YWwpOw0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19sb2dfc3RhdHVzIC0g TG9ncyB0aGUgc3RhdHVzIG9mIHRoZSBTREkgUnggU3Vic3lzdGVtDQo+ID4gKyAqIEBzZDogUG9p bnRlciB0byBWNEwyIHN1YmRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBm dW5jdGlvbiBwcmludHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIFhpbGlueCBTREkgUnggU3Vic3lz dGVtDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW50IHhzZGlyeHNzX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkN Cj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGly eHNzc3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4 c3MtPmNvcmU7DQo+ID4gKwl1MzIgaTsNCj4gPiArDQo+ID4gKwl2NGwyX2luZm8oc2QsICIqKioq KiBTREkgUnggc3Vic3lzdGVtIHJlZyBkdW1wIHN0YXJ0ICoqKioqXG4iKTsNCj4gPiArCWZvciAo aSA9IDA7IGkgPCAweDI4OyBpKyspIHsNCj4gPiArCQl1MzIgZGF0YTsNCj4gPiArDQo+ID4gKwkJ ZGF0YSA9IHhzZGlyeHNzX3JlYWQoY29yZSwgaSAqIDQpOw0KPiA+ICsJCXY0bDJfaW5mbyhzZCwg Im9mZnNldCAweCUwOHggZGF0YSAweCUwOHhcbiIsDQo+ID4gKwkJCSAgaSAqIDQsIGRhdGEpOw0K PiA+ICsJfQ0KPiA+ICsJdjRsMl9pbmZvKHNkLCAiKioqKiogU0RJIFJ4IHN1YnN5c3RlbSByZWcg ZHVtcCBlbmQgKioqKipcbiIpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgKiB4c2Rpcnhzc19nX2ZyYW1lX2ludGVydmFsIC0gR2V0IHRoZSBmcmFtZSBp bnRlcnZhbA0KPiA+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmk6IFBvaW50 ZXIgdG8gVjRsMiBTdWIgZGV2aWNlIGZyYW1lIGludGVydmFsIHN0cnVjdHVyZQ0KPiA+ICsgKg0K PiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBmcmFtZSBpbnRlcnZhbC4N Cj4gPiArICogVGhlIGZyYW1lIHJhdGUgY2FuIGJlIGludGVncmFsIG9yIGZyYWN0aW9uYWwuDQo+ ID4gKyAqIEludGVncmFsIGZyYW1lIHJhdGUgZS5nLiBudW1lcmF0b3IgPSAxMDAwLCBkZW5vbWlu YXRvciA9IDI0MDAwID0+IDI0IGZwcw0KPiA+ICsgKiBGcmFjdGlvbmFsIGZyYW1lIHJhdGUgZS5n LiBudW1lcmF0b3IgPSAxMDAxLCBkZW5vbWluYXRvciA9IDI0MDAwID0+DQo+IDIzLjk3IGZwcw0K PiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3Rh dGljIGludCB4c2Rpcnhzc19nX2ZyYW1lX2ludGVydmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qs DQo+ID4gKwkJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbCAqZmkpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhz c3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNz LT5jb3JlOw0KPiA+ICsNCj4gPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgew0KPiA+ICsJ CWRldl9lcnIoY29yZS0+ZGV2LCAiVmlkZW8gbm90IGxvY2tlZCFcbiIpOw0KPiA+ICsJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZpLT5pbnRlcnZhbCA9IHhzZGlyeHNz LT5mcmFtZV9pbnRlcnZhbDsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgImZyYW1l IHJhdGUgbnVtZXJhdG9yID0gJWQgZGVub21pbmF0b3IgPQ0KPiAlZFxuIiwNCj4gPiArCQl4c2Rp cnhzcy0+ZnJhbWVfaW50ZXJ2YWwubnVtZXJhdG9yLA0KPiA+ICsJCXhzZGlyeHNzLT5mcmFtZV9p bnRlcnZhbC5kZW5vbWluYXRvcik7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIHhzZGlyeHNzX3Nfc3RyZWFtIC0gSXQgaXMgdXNlZCB0byBzdGFydC9z dG9wIHRoZSBzdHJlYW1pbmcuDQo+ID4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNlDQo+ID4gKyAq IEBlbmFibGU6IEZsYWcgKFRydWUgLyBGYWxzZSkNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5j dGlvbiBjb250cm9scyB0aGUgc3RhcnQgb3Igc3RvcCBvZiBzdHJlYW1pbmcgZm9yIHRoZQ0KPiA+ ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbS4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAw IG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQg eHNkaXJ4c3Nfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkNCj4g PiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNz c3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3Mt PmNvcmU7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3JlLT5kZXY7DQo+ID4gKw0KPiA+ ICsJaWYgKGVuYWJsZSkgew0KPiA+ICsJCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgew0KPiA+ ICsJCQlkZXZfZGJnKGRldiwgIlZpZGVvIGlzIG5vdCBsb2NrZWRcbiIpOw0KPiANCj4gZGV2X2Vy cigpPw0KPiANCg0KQWdyZWUgSSB3aWxsIG1vZGlmeSB0aGlzIGluIG5leHQgdmVyc2lvbi4NCg0K PiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJaWYgKHhzZGlyeHNzLT5z dHJlYW1pbmcpIHsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICJBbHJlYWR5IHN0cmVhbWluZ1xuIik7 DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gSXMgdGhpcyBhbiBlcnJvcj8gSSB0aGlu ayBpdCBjYW4ganVzdCByZXR1cm4gMCBpbnN0ZWFkLg0KPiANCg0KVHJ1ZS4gSSB3aWxsIHVwZGF0 ZSB0aGlzLiBJIGFtIG1vZGlmeWluZyB0aGlzIGFjY29yZGluZyB0byBMYXVyZW50J3Mgc3VnZ2Vz dGlvbnMuDQoNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXhzZGlyeF9zdHJlYW1mbG93X2NvbnRy b2woY29yZSwgdHJ1ZSk7DQo+ID4gKwkJeHNkaXJ4c3MtPnN0cmVhbWluZyA9IHRydWU7DQo+ID4g KwkJZGV2X2RiZyhkZXYsICJTdHJlYW1pbmcgc3RhcnRlZFxuIik7DQo+ID4gKwl9IGVsc2Ugew0K PiA+ICsJCWlmICgheHNkaXJ4c3MtPnN0cmVhbWluZykgew0KPiA+ICsJCQlkZXZfZGJnKGRldiwg IlN0b3BwZWQgc3RyZWFtaW5nIGFscmVhZHlcbiIpOw0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiAr CQl9DQo+ID4gKw0KPiA+ICsJCXhzZGlyeF9zdHJlYW1mbG93X2NvbnRyb2woY29yZSwgZmFsc2Up Ow0KPiA+ICsJCXhzZGlyeHNzLT5zdHJlYW1pbmcgPSBmYWxzZTsNCj4gPiArCQlkZXZfZGJnKGRl diwgIlN0cmVhbWluZyBzdG9wcGVkXG4iKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhzZGlyeHNzX2dfaW5wdXRfc3Rh dHVzIC0gSXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHZpZGVvIHNpZ25hbA0KPiA+ICsg KiBpcyBwcmVzZW50IC8gbG9ja2VkIG9udG8gb3Igbm90Lg0KPiA+ICsgKg0KPiA+ICsgKiBAc2Q6 IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAc3RhdHVzOiBzdGF0dXMgb2Ygc2lnbmFsIGxvY2tl ZA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2aWRl byBzaWduYWwgaXMgcHJlc2VudCBhbmQgbG9ja2VkIG9udG8NCj4gPiArICogYnkgdGhlIFNESSBS eCBjb3JlIG9yIG5vdCBiYXNlZCBvbiB2aWRsb2NrZWQgZmxhZy4NCj4gPiArICoNCj4gPiArICog UmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4 c3NfZ19pbnB1dF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpzdGF0dXMpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhz c3N0YXRlKHNkKTsNCj4gPiArDQo+ID4gKwlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpDQo+ID4g KwkJKnN0YXR1cyA9IFY0TDJfSU5fU1RfTk9fU1lOQyB8IFY0TDJfSU5fU1RfTk9fU0lHTkFMOw0K PiA+ICsJZWxzZQ0KPiA+ICsJCSpzdGF0dXMgPSAwOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqDQo+ ID4gK19feHNkaXJ4c3NfZ2V0X3BhZF9mb3JtYXQoc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2Rp cnhzcywNCj4gPiArCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ ICsJCQkgIHVuc2lnbmVkIGludCBwYWQsIHUzMiB3aGljaCkNCj4gPiArew0KPiA+ICsJc3dpdGNo ICh3aGljaCkgew0KPiA+ICsJY2FzZSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZOg0KPiA+ICsJCXJl dHVybiB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdCgmeHNkaXJ4c3MtPnN1YmRldiwgY2ZnLA0K PiBwYWQpOw0KPiA+ICsJY2FzZSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFOg0KPiA+ICsJCXJl dHVybiAmeHNkaXJ4c3MtPmZvcm1hdDsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIE5V TEw7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19p bml0X2NmZyAtIEluaXRpYWxpc2UgdGhlIHBhZCBmb3JtYXQgY29uZmlnIHRvIGRlZmF1bHQNCj4g PiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICog QGNmZzogUG9pbnRlciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4g PiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBh ZCBmb3JtYXQgd2l0aCB0aGUgZGVmYXVsdA0KPiA+ICsgKiB2YWx1ZXMuDQo+ID4gKyAqDQo+ID4g KyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGly eHNzX2luaXRfY2ZnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCSAgICAgc3RydWN0 IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZykNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGly eHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0 IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9ybWF0Ow0KPiA+ICsNCj4gPiArCWZvcm1hdCA9IHY0bDJf c3ViZGV2X2dldF90cnlfZm9ybWF0KHNkLCBjZmcsIDApOw0KPiA+ICsJKmZvcm1hdCA9IHhzZGly eHNzLT5kZWZhdWx0X2Zvcm1hdDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhzZGlyeHNzX2dldF9mb3JtYXQgLSBHZXQgdGhlIHBhZCBm b3JtYXQNCj4gPiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUN Cj4gPiArICogQGNmZzogUG9pbnRlciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1 Y3R1cmUNCj4gPiArICogQGZtdDogUG9pbnRlciB0byBwYWQgbGV2ZWwgbWVkaWEgYnVzIGZvcm1h dA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBwYWQg Zm9ybWF0IGluZm9ybWF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vz cw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19nZXRfZm9ybWF0KHN0cnVjdCB2 NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2Nv bmZpZyAqY2ZnLA0KPiA+ICsJCQkgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10 KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNk aXJ4c3NzdGF0ZShzZCk7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rp cnhzcy0+Y29yZTsNCj4gPiArDQo+ID4gKwlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4g PiArCQlkZXZfZXJyKGNvcmUtPmRldiwgIlZpZGVvIG5vdCBsb2NrZWQhXG4iKTsNCj4gPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmbXQtPmZvcm1hdCA9ICpfX3hz ZGlyeHNzX2dldF9wYWRfZm9ybWF0KHhzZGlyeHNzLCBjZmcsDQo+ID4gKwkJCQkJCSBmbXQtPnBh ZCwgZm10LT53aGljaCk7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJTdHJlYW0g d2lkdGggPSAlZCBoZWlnaHQgPSAlZCBGaWVsZCA9ICVkXG4iLA0KPiA+ICsJCWZtdC0+Zm9ybWF0 LndpZHRoLCBmbXQtPmZvcm1hdC5oZWlnaHQsIGZtdC0+Zm9ybWF0LmZpZWxkKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhzZGlyeHNz X3NldF9mb3JtYXQgLSBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0DQo+ID4gKyAq IEBzZDogUG9pbnRlciB0byBWNEwyIFN1YiBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqIEBjZmc6 IFBvaW50ZXIgdG8gc3ViIGRldmljZSBwYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ID4gKyAq IEBmbXQ6IFBvaW50ZXIgdG8gcGFkIGxldmVsIG1lZGlhIGJ1cyBmb3JtYXQNCj4gPiArICoNCj4g PiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcGFkIGZvcm1hdC4NCj4gPiAr ICogU2luY2UgdGhlIHBhZCBmb3JtYXQgaXMgZml4ZWQgaW4gaGFyZHdhcmUsIGl0IGNhbid0IGJl DQo+ID4gKyAqIG1vZGlmaWVkIG9uIHJ1biB0aW1lLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46 IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19zZXRfZm9y bWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9z dWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ICsJCQkgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2 X2Zvcm1hdCAqZm10KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpf X2Zvcm1hdDsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rp cnhzc3N0YXRlKHNkKTsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKHhzZGlyeHNzLT5jb3JlLmRldiwN Cj4gPiArCQkic2V0IHdpZHRoICVkIGhlaWdodCAlZCBjb2RlICVkIGZpZWxkICVkIGNvbG9yc3Bh Y2UgJWRcbiIsDQo+ID4gKwkJZm10LT5mb3JtYXQud2lkdGgsIGZtdC0+Zm9ybWF0LmhlaWdodCwN Cj4gPiArCQlmbXQtPmZvcm1hdC5jb2RlLCBmbXQtPmZvcm1hdC5maWVsZCwNCj4gPiArCQlmbXQt PmZvcm1hdC5jb2xvcnNwYWNlKTsNCj4gPiArDQo+ID4gKwlfX2Zvcm1hdCA9IF9feHNkaXJ4c3Nf Z2V0X3BhZF9mb3JtYXQoeHNkaXJ4c3MsIGNmZywNCj4gPiArCQkJCQkgICAgIGZtdC0+cGFkLCBm bXQtPndoaWNoKTsNCj4gPiArDQo+ID4gKwkvKiBDdXJyZW50bHkgcmVzZXQgdGhlIGNvZGUgdG8g b25lIGZpeGVkIGluIGhhcmR3YXJlICovDQo+ID4gKwkvKiBUT0RPIDogQWRkIGNoZWNrcyBmb3Ig d2lkdGggaGVpZ2h0ICovDQo+IA0KPiBBaCwgd2hhdCBibG9ja3MgdG8gaW1wbGVtZW50IHRoaXM/ IDotKQ0KPiANCg0KTm90aGluZyBub3cuIEkgd2lsbCBiZSB1cGRhdGluZyB0aGlzIGluIHRoZSBu ZXh0IHZlcnNpb24gZm9yIHdpZHRoIGFuZCBoZWlnaHQgdG9vLg0KDQo+ID4gKwlmbXQtPmZvcm1h dC5jb2RlID0gX19mb3JtYXQtPmNvZGU7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19lbnVtX21idXNfY29kZSAtIEhhbmRs ZSBwaXhlbCBmb3JtYXQgZW51bWVyYXRpb24NCj4gPiArICogQHNkOiBwb2ludGVyIHRvIHY0bDIg c3ViZGV2IHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2ZnOiBWNEwyIHN1YmRldiBwYWQgY29uZmlndXJh dGlvbg0KPiA+ICsgKiBAY29kZTogcG9pbnRlciB0byB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51 bSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAtRUlOVkFMIG9yIHplcm8gb24g c3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19lbnVtX21idXNfY29k ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2 X3BhZF9jb25maWcgKmNmZywNCj4gPiArCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2Nv ZGVfZW51bQ0KPiAqY29kZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4 c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsJdTMyIGluZGV4ID0gY29kZS0+ aW5kZXg7DQo+ID4gKwl1MzIgbWF4aW5kZXg7DQo+ID4gKw0KPiA+ICsJaWYgKHhzZGlyeHNzLT5j b3JlLmJwYyA9PSAxMCkNCj4gPiArCQltYXhpbmRleCA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfMTBi cGNfbWJ1c19mbXRzKTsNCj4gPiArCWVsc2UNCj4gPiArCQltYXhpbmRleCA9IEFSUkFZX1NJWkUo eHNkaXJ4c3NfMTJicGNfbWJ1c19mbXRzKTsNCj4gPiArDQo+ID4gKwlpZiAoY29kZS0+cGFkIHx8 IGluZGV4ID49IG1heGluZGV4KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiAr CWlmICh4c2Rpcnhzcy0+Y29yZS5icGMgPT0gMTApDQo+ID4gKwkJY29kZS0+Y29kZSA9IHhzZGly eHNzXzEwYnBjX21idXNfZm10c1tpbmRleF07DQo+ID4gKwllbHNlDQo+ID4gKwkJY29kZS0+Y29k ZSA9IHhzZGlyeHNzXzEyYnBjX21idXNfZm10c1tpbmRleF07DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19lbnVtX2R2X3Rp bWluZ3M6IEVudW1lcmF0ZSBhbGwgdGhlIHN1cHBvcnRlZCBEViB0aW1pbmdzDQo+ID4gKyAqIEBz ZDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUNCj4gPiArICogQHRpbWluZ3M6IERW IHRpbWluZ3Mgc3RydWN0dXJlIHRvIGJlIHJldHVybmVkLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1 cm46IC1FSU5WQUwgaW5jYXNlIG9mIGludmFsaWQgaW5kZXggYW5kIHBhZCBvciB6ZXJvIG9uIHN1 Y2Nlc3MNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZW51bV9kdl90aW1pbmdz KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkgICAgc3RydWN0IHY0bDJfZW51bV9k dl90aW1pbmdzICp0aW1pbmdzKQ0KPiA+ICt7DQo+ID4gKwlpZiAodGltaW5ncy0+aW5kZXggPj0g QVJSQVlfU0laRShmbXRfY2FwKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4g KwlpZiAodGltaW5ncy0+cGFkICE9IDApDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0K PiA+ICsJdGltaW5ncy0+dGltaW5ncyA9IGZtdF9jYXBbdGltaW5ncy0+aW5kZXhdOw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19xdWVy eV9kdl90aW1pbmdzOiBRdWVyeSBmb3IgdGhlIGN1cnJlbnQgRFYgdGltaW5ncw0KPiA+ICsgKiBA c2Q6IHBvaW50ZXIgdG8gdjRsMiBzdWJkZXYgc3RydWN0dXJlDQo+ID4gKyAqIEB0aW1pbmdzOiBE ViB0aW1pbmdzIHN0cnVjdHVyZSB0byBiZSByZXR1cm5lZC4NCj4gPiArICoNCj4gPiArICogUmV0 dXJuOiAtRU5PTENLIHdoZW4gdmlkZW8gaXMgbm90IGxvY2tlZCwgLUVSQU5HRSB3aGVuIGNvcnJl c3BvbmRpbmcNCj4gdGltaW5nDQo+ID4gKyAqIGVudHJ5IGlzIG5vdCBmb3VuZCBvciB6ZXJvIG9u IHN1Y2Nlc3MuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3F1ZXJ5X2R2X3Rp bWluZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCSAgICAgc3RydWN0IHY0bDJf ZHZfdGltaW5ncyAqdGltaW5ncykNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRl ICpzdGF0ZSA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ ID4gKw0KPiA+ICsJaWYgKCFzdGF0ZS0+dmlkbG9ja2VkKQ0KPiA+ICsJCXJldHVybiAtRU5PTENL Ow0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhzZGlyeHNzX2R2X3Rp bWluZ3MpOyBpKyspIHsNCj4gPiArCQlpZiAoc3RhdGUtPmZvcm1hdC53aWR0aCA9PSB4c2Rpcnhz c19kdl90aW1pbmdzW2ldLndpZHRoICYmDQo+ID4gKwkJICAgIHN0YXRlLT5mb3JtYXQuaGVpZ2h0 ID09IHhzZGlyeHNzX2R2X3RpbWluZ3NbaV0uaGVpZ2h0ICYmDQo+ID4gKwkJICAgIHN0YXRlLT5m cmFtZV9pbnRlcnZhbC5kZW5vbWluYXRvciA9PQ0KPiA+ICsJCSAgICAoeHNkaXJ4c3NfZHZfdGlt aW5nc1tpXS5mcHMgKiAxMDAwKSkgew0KPiA+ICsJCQkqdGltaW5ncyA9IHhzZGlyeHNzX2R2X3Rp bWluZ3NbaV0uZm9ybWF0Ow0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIC1FUkFOR0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+ID4gKyAqIE1lZGlhIE9wZXJhdGlvbnMNCj4gPiArICovDQo+ID4g Kw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHhzZGly eHNzX21lZGlhX29wcyA9IHsNCj4gPiArCS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlu a192YWxpZGF0ZQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X2N0cmxfb3BzIHhzZGlyeHNzX2N0cmxfb3BzID0gew0KPiA+ICsJLmdfdm9sYXRpbGVfY3RybCA9 IHhzZGlyeHNzX2dfdm9sYXRpbGVfY3RybCwNCj4gPiArCS5zX2N0cmwJPSB4c2Rpcnhzc19zX2N0 cmwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2Nv bmZpZyB4c2Rpcnhzc19lZGhfY3RybHNbXSA9IHsNCj4gPiArCXsNCj4gPiArCQkub3BzCT0gJnhz ZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhf RVJSQ05UX0VOQUJMRSwNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBFREggRXJyb3IgQ291bnQg RW5hYmxlIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0ssDQo+ID4gKwkJ Lm1pbgk9IDAsDQo+ID4gKwkJLm1heAk9IFhTRElSWF9FREhfQUxMRVJSX01BU0ssDQo+ID4gKwkJ LmRlZgk9IDAsDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywN Cj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVCwNCj4gPiArCQku bmFtZQk9ICJTREkgUnggOiBFREggRXJyb3IgQ291bnQiLA0KPiA+ICsJCS50eXBlCT0gVjRMMl9D VFJMX1RZUEVfSU5URUdFUiwNCj4gPiArCQkubWluCT0gMCwNCj4gPiArCQkubWF4CT0gMHhGRkZG LA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4gPiArCQkuZGVmCT0gMCwNCj4gPiArCQkuZmxhZ3MgID0g VjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJ PSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX1NUQVRVUywNCj4gPiArCQkubmFtZQk9ICJTREkg UnggOiBFREggU3RhdHVzIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIs DQo+ID4gKwkJLm1pbgk9IDAsDQo+ID4gKwkJLm1heAk9IDB4RkZGRkZGRkYsDQo+ID4gKwkJLnN0 ZXAJPSAxLA0KPiA+ICsJCS5kZWYJPSAwLA0KPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxB R19WT0xBVElMRSB8DQo+IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiArCX0NCj4gPiAr fTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyB4c2Rp cnhzc19jdHJsc1tdID0gew0KPiA+ICsJew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9v cHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0ZSQU1FUiwNCj4gPiArCQku bmFtZQk9ICJTREkgUnggOiBFbmFibGUgRnJhbWVyIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RS TF9UWVBFX0JPT0xFQU4sDQo+ID4gKwkJLm1pbgk9IGZhbHNlLA0KPiA+ICsJCS5tYXgJPSB0cnVl LA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4gPiArCQkuZGVmCT0gdHJ1ZSwNCj4gPiArCX0sIHsNCj4g PiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJ TElOWF9TRElSWF9WSURMT0NLX1dJTkRPVywNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBWaWRl byBMb2NrIFdpbmRvdyIsDQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0K PiA+ICsJCS5taW4JPSAwLA0KPiA+ICsJCS5tYXgJPSAweEZGRkZGRkZGLA0KPiA+ICsJCS5zdGVw CT0gMSwNCj4gPiArCQkuZGVmCT0gWFNESVJYX0RFRkFVTFRfVklERU9fTE9DS19XSU5ET1csDQo+ ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJ PSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfU0VBUkNIX01PREVTLA0KPiA+ICsJCS5uYW1lCT0gIlNE SSBSeCA6IE1vZGVzIHNlYXJjaCBNYXNrIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBF X0JJVE1BU0ssDQo+ID4gKwkJLm1pbgk9IDAsDQo+ID4gKwkJLm1heAk9IFhTRElSWF9ERVRFQ1Rf QUxMX01PREVTLA0KPiA+ICsJCS5kZWYJPSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUywNCj4gPiAr CX0sIHsNCj4gPiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0 TDJfQ0lEX1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVCwNCj4gPiArCQkubmFtZQk9ICJTREkgUngg OiBNb2RlIERldGVjdCBTdGF0dXMiLA0KPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5U RUdFUiwNCj4gPiArCQkubWluCT0gWFNESVJYX01PREVfU0RfT0ZGU0VULA0KPiA+ICsJCS5tYXgJ PSBYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ID4gKwkJLmZs YWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwNCj4gVjRMMl9DVFJMX0ZMQUdfUkVBRF9P TkxZLA0KPiA+ICsJfSwgew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4g KwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0NSQywNCj4gPiArCQkubmFtZQk9ICJTREkg UnggOiBDUkMgRXJyb3Igc3RhdHVzIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lO VEVHRVIsDQo+ID4gKwkJLm1pbgk9IDAsDQo+ID4gKwkJLm1heAk9IDB4RkZGRkZGRkYsDQo+ID4g KwkJLnN0ZXAJPSAxLA0KPiA+ICsJCS5kZWYJPSAwLA0KPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NU UkxfRkxBR19WT0xBVElMRSB8DQo+IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiArCX0s IHsNCj4gPiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJf Q0lEX1hJTElOWF9TRElSWF9UU19JU19JTlRFUkxBQ0VELA0KPiA+ICsJCS5uYW1lCT0gIlNESSBS eCA6IFRTIGlzIEludGVybGFjZWQiLA0KPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfQk9P TEVBTiwNCj4gPiArCQkubWluCT0gZmFsc2UsDQo+ID4gKwkJLm1heAk9IHRydWUsDQo+ID4gKwkJ LmRlZgk9IGZhbHNlLA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4gPiArCQkuZmxhZ3MgID0gVjRMMl9D VFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4gKwl9 LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwy X0NJRF9YSUxJTlhfU0RJUlhfQUNUSVZFX1NUUkVBTVMsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4 IDogQWN0aXZlIFN0cmVhbXMiLA0KPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdF UiwNCj4gPiArCQkubWluCT0gMSwNCj4gPiArCQkubWF4CT0gMTYsDQo+ID4gKwkJLmRlZgk9IDEs DQo+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19WT0xB VElMRSB8DQo+IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiArCX0sIHsNCj4gPiArCQku b3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9T RElSWF9JU18zR0IsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogSXMgM0dCIiwNCj4gPiArCQku dHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sDQo+ID4gKwkJLm1pbgk9IGZhbHNlLA0KPiA+ ICsJCS5tYXgJPSB0cnVlLA0KPiA+ICsJCS5kZWYJPSBmYWxzZSwNCj4gPiArCQkuc3RlcAk9IDEs DQo+ID4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwNCj4gVjRMMl9DVFJM X0ZMQUdfUkVBRF9PTkxZLA0KPiA+ICsJfQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB4c2Rpcnhzc19jb3JlX29wcyA9IHsNCj4g PiArCS5sb2dfc3RhdHVzID0geHNkaXJ4c3NfbG9nX3N0YXR1cywNCj4gPiArCS5zdWJzY3JpYmVf ZXZlbnQgPSB4c2Rpcnhzc19zdWJzY3JpYmVfZXZlbnQsDQo+ID4gKwkudW5zdWJzY3JpYmVfZXZl bnQgPSB4c2Rpcnhzc191bnN1YnNjcmliZV9ldmVudA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgeHNkaXJ4c3NfdmlkZW9fb3Bz ID0gew0KPiA+ICsJLmdfZnJhbWVfaW50ZXJ2YWwgPSB4c2Rpcnhzc19nX2ZyYW1lX2ludGVydmFs LA0KPiA+ICsJLnNfc3RyZWFtID0geHNkaXJ4c3Nfc19zdHJlYW0sDQo+ID4gKwkuZ19pbnB1dF9z dGF0dXMgPSB4c2Rpcnhzc19nX2lucHV0X3N0YXR1cywNCj4gPiArCS5xdWVyeV9kdl90aW1pbmdz ID0geHNkaXJ4c3NfcXVlcnlfZHZfdGltaW5ncywNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyB4c2Rpcnhzc19wYWRfb3BzID0gew0K PiA+ICsJLmluaXRfY2ZnID0geHNkaXJ4c3NfaW5pdF9jZmcsDQo+ID4gKwkuZ2V0X2ZtdCA9IHhz ZGlyeHNzX2dldF9mb3JtYXQsDQo+ID4gKwkuc2V0X2ZtdCA9IHhzZGlyeHNzX3NldF9mb3JtYXQs DQo+ID4gKwkuZW51bV9tYnVzX2NvZGUgPSB4c2Rpcnhzc19lbnVtX21idXNfY29kZSwNCj4gPiAr CS5lbnVtX2R2X3RpbWluZ3MgPSB4c2Rpcnhzc19lbnVtX2R2X3RpbWluZ3MsDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB4c2Rpcnhzc19v cHMgPSB7DQo+ID4gKwkuY29yZSA9ICZ4c2Rpcnhzc19jb3JlX29wcywNCj4gPiArCS52aWRlbyA9 ICZ4c2Rpcnhzc192aWRlb19vcHMsDQo+ID4gKwkucGFkID0gJnhzZGlyeHNzX3BhZF9vcHMNCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKyAqIFBsYXRm b3JtIERldmljZSBEcml2ZXINCj4gPiArICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHhzZGly eHNzX3BhcnNlX29mKHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHhzZGlyeHNzLT5jb3JlLmRldi0+b2Zfbm9k ZTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0K PiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2Ow0KPiA+ICsJc3RydWN0IGZ3bm9k ZV9oYW5kbGUgKmVwLCAqcmVwOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCWNvbnN0IGNoYXIgKnNk aV9zdGQ7DQo+ID4gKw0KPiA+ICsJY29yZS0+aW5jbHVkZV9lZGggPSBvZl9wcm9wZXJ0eV9yZWFk X2Jvb2wobm9kZSwgInhsbngsaW5jbHVkZS0NCj4gZWRoIik7DQo+ID4gKwlkZXZfZGJnKGRldiwg IkVESCBwcm9wZXJ0eSA9ICVzXG4iLA0KPiA+ICsJCWNvcmUtPmluY2x1ZGVfZWRoID8gIlByZXNl bnQiIDogIkFic2VudCIpOw0KPiA+ICsNCj4gPiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3Ry aW5nKG5vZGUsICJ4bG54LGxpbmUtcmF0ZSIsICZzZGlfc3RkKTsNCj4gPiArCWlmIChyZXQgPCAw KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJ4bG54LGxpbmUtcmF0ZSBwcm9wZXJ0eSBub3QgZm91 bmRcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFz dHJuY21wKHNkaV9zdGQsICIxMkdfU0RJXzhEUyIsIFhTRElSWF9NQVhfU1RSX0xFTkdUSCkpIHsN Cj4gPiArCQljb3JlLT5tb2RlID0gWFNESVJYU1NfU0RJX1NURF8xMkdfOERTOw0KPiA+ICsJfSBl bHNlIGlmICghc3RybmNtcChzZGlfc3RkLCAiNkdfU0RJIiwgWFNESVJYX01BWF9TVFJfTEVOR1RI KSkgew0KPiA+ICsJCWNvcmUtPm1vZGUgPSBYU0RJUlhTU19TRElfU1REXzZHOw0KPiA+ICsJfSBl bHNlIGlmICghc3RybmNtcChzZGlfc3RkLCAiM0dfU0RJIiwgWFNESVJYX01BWF9TVFJfTEVOR1RI KSkgew0KPiA+ICsJCWNvcmUtPm1vZGUgPSBYU0RJUlhTU19TRElfU1REXzNHOw0KPiA+ICsJfSBl bHNlIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgTGluZSBSYXRlXG4iKTsNCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCWRldl9kYmcoZGV2LCAiU0RJIFJ4IExp bmUgUmF0ZSA9ICVzLCBtb2RlID0gJWRcbiIsIHNkaV9zdGQsDQo+ID4gKwkJY29yZS0+bW9kZSk7 DQo+ID4gKw0KPiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInhsbngsYnBw IiwgJmNvcmUtPmJwYyk7DQo+IA0KPiBCdXQsIHRoZSBicHAgYW5kIGJwYyBhcmUgcXVpdGUgZGlm ZmVyZW50LiBTaG91bGRuJ3QgaXQgYmUgYnBjPw0KPiANCg0KWWVzIHRoaXMgaXMgYSBtaXN0YWtl LiBJIHdpbGwgcmVjdGlmeSB0aGlzIGluIG5leHQgdmVyc2lvbi4NCg0KDQo+ID4gKwlpZiAocmV0 IDwgMCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCB4bG54LGJwcFxuIik7 DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoY29yZS0+YnBj ICE9IDEwICYmIGNvcmUtPmJwYyAhPSAxMikgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiYml0cyBw ZXIgY29tcG9uZW50PSV1LiBDYW4gYmUgMTAgb3IgMTINCj4gb25seVxuIiwNCj4gPiArCQkJY29y ZS0+YnBjKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwll cCA9IGZ3bm9kZV9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfaWQoZGV2X2Z3bm9kZShkZXYpLCAwLCAw LA0KPiA+ICsNCj4gRldOT0RFX0dSQVBIX0VORFBPSU5UX05FWFQpOw0KPiA+ICsJaWYgKCFlcCkg ew0KPiA+ICsJCWRldl9lcnIoZGV2LCAibm8gc291cmNlIHBvcnQgZm91bmQiKTsNCj4gPiArCQly ZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWdvdG8gZHRfcGFyc2VfZG9uZTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXAgPSBmd25vZGVfZ3JhcGhfZ2V0X3JlbW90ZV9lbmRwb2ludChlcCk7DQo+ID4g KwlpZiAoIXJlcCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAibm8gcmVtb3RlIHNpbmsgZW5kcG9p bnQgZm91bmQiKTsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWZ3bm9kZV9oYW5kbGVfcHV0KHJlcCk7DQo+ID4gK2R0X3BhcnNlX2RvbmU6DQo+ID4gKwlmd25v ZGVfaGFuZGxlX3B1dChlcCk7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IHhzZGlyeHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2Ow0KPiA+ICsJc3RydWN0 IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzczsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpj b3JlOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArCXVu c2lnbmVkIGludCBudW1fY3RybHMsIG51bV9lZGhfY3RybHMgPSAwLCBpOw0KPiA+ICsNCj4gPiAr CXhzZGlyeHNzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqeHNkaXJ4c3MpLCBH RlBfS0VSTkVMKTsNCj4gPiArCWlmICgheHNkaXJ4c3MpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07 DQo+ID4gKw0KPiA+ICsJeHNkaXJ4c3MtPmNvcmUuZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCWNv cmUgPSAmeHNkaXJ4c3MtPmNvcmU7DQo+ID4gKwlkZXYgPSBjb3JlLT5kZXY7DQo+ID4gKw0KPiA+ ICsJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgKi8NCj4gPiArCWNvcmUtPmlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+IA0KPiBBcyBtZW50aW9uZWQsIHRoaXMgZG9lc24n dCBoYXZlIHRvIGJlIHN0b3JlZC4NCj4gDQoNClllcyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBu ZXh0IHZlcnNpb24uDQoNCj4gPiArCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2 LCBjb3JlLT5pcnEsIE5VTEwsDQo+ID4gKwkJCQkJeHNkaXJ4c3NfaXJxX2hhbmRsZXIsIElSUUZf T05FU0hPVCwNCj4gPiArCQkJCQlkZXZfbmFtZShkZXYpLCB4c2Rpcnhzcyk7DQo+ID4gKwlpZiAo cmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJFcnIgPSAlZCBJbnRlcnJ1cHQgaGFuZGxlciBy ZWcgZmFpbGVkIVxuIiwNCj4gPiArCQkJcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWNvcmUtPm51bV9jbGtzID0gQVJSQVlfU0laRSh4c2Rpcnhzc19jbGtz KTsNCj4gPiArCWNvcmUtPmNsa3MgPSBkZXZtX2tjYWxsb2MoZGV2LCBjb3JlLT5udW1fY2xrcywN Cj4gPiArCQkJCSAgc2l6ZW9mKCpjb3JlLT5jbGtzKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAo IWNvcmUtPmNsa3MpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJZm9yIChp ID0gMDsgaSA8IGNvcmUtPm51bV9jbGtzOyBpKyspDQo+ID4gKwkJY29yZS0+Y2xrc1tpXS5pZCA9 IHhzZGlyeHNzX2Nsa3NbaV07DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXQo ZGV2LCBjb3JlLT5udW1fY2xrcywgY29yZS0+Y2xrcyk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUo Y29yZS0+bnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHhzZGlyeHNzX3BhcnNlX29mKHhzZGlyeHNzKTsN Cj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCWdvdG8gY2xrX2VycjsNCj4gPiArDQo+ID4gKwlj b3JlLT5pb21lbSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsNCj4g PiArCWlmIChJU19FUlIoY29yZS0+aW9tZW0pKSB7DQo+ID4gKwkJcmV0ID0gUFRSX0VSUihjb3Jl LT5pb21lbSk7DQo+ID4gKwkJZ290byBjbGtfZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IFJlc2V0IHRoZSBjb3JlICovDQo+ID4gKwl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUs IGZhbHNlKTsNCj4gPiArCXhzZGlyeF9jb3JlX2Rpc2FibGUoY29yZSk7DQo+ID4gKwl4c2Rpcnhf Y2xlYXJpbnRyKGNvcmUsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsNCj4gPiArCXhzZGlyeF9kaXNh YmxlaW50cihjb3JlLCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7DQo+ID4gKwl4c2RpcnhfZW5hYmxl aW50cihjb3JlLCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7DQo+ID4gKwl4c2RpcnhfZ2xvYmFsaW50 cihjb3JlLCB0cnVlKTsNCj4gPiArCXhzZGlyeHNzX3dyaXRlKGNvcmUsIFhTRElSWF9DUkNfRVJS Q05UX1JFRywgMHhGRkZGKTsNCj4gPiArDQo+ID4gKwkvKiBJbml0aWFsaXplIFY0TDIgc3ViZGV2 aWNlIGFuZCBtZWRpYSBlbnRpdHkgKi8NCj4gPiArCXhzZGlyeHNzLT5wYWQuZmxhZ3MgPSBNRURJ QV9QQURfRkxfU09VUkNFOw0KPiA+ICsNCj4gPiArCS8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQg Zm9ybWF0ICovDQo+ID4gKwlpZiAoY29yZS0+YnBjID09IDEwKQ0KPiA+ICsJCXhzZGlyeHNzLT5k ZWZhdWx0X2Zvcm1hdC5jb2RlID0NCj4gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgyMDsNCj4gPiAr CWVsc2UNCj4gPiArCQl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuY29kZSA9DQo+IE1FRElBX0JV U19GTVRfVVlWWTEyXzFYMjQ7DQo+ID4gKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuZmllbGQg PSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQuY29sb3Jz cGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9ERUZBVUxUOw0KPiA+ICsJeHNkaXJ4c3MtPmRlZmF1bHRf Zm9ybWF0LndpZHRoID0gWFNESVJYX0RFRkFVTFRfV0lEVEg7DQo+ID4gKwl4c2Rpcnhzcy0+ZGVm YXVsdF9mb3JtYXQuaGVpZ2h0ID0gWFNESVJYX0RFRkFVTFRfSEVJR0hUOw0KPiA+ICsNCj4gPiAr CXhzZGlyeHNzLT5mb3JtYXQgPSB4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQ7DQo+ID4gKw0KPiA+ ICsJLyogSW5pdGlhbGl6ZSBWNEwyIHN1YmRldmljZSBhbmQgbWVkaWEgZW50aXR5ICovDQo+ID4g KwlzdWJkZXYgPSAmeHNkaXJ4c3MtPnN1YmRldjsNCj4gPiArCXY0bDJfc3ViZGV2X2luaXQoc3Vi ZGV2LCAmeHNkaXJ4c3Nfb3BzKTsNCj4gPiArDQo+ID4gKwlzdWJkZXYtPmRldiA9ICZwZGV2LT5k ZXY7DQo+ID4gKwlzdHJzY3B5KHN1YmRldi0+bmFtZSwgZGV2X25hbWUoZGV2KSwgc2l6ZW9mKHN1 YmRldi0+bmFtZSkpOw0KPiA+ICsNCj4gPiArCXN1YmRldi0+ZmxhZ3MgfD0gVjRMMl9TVUJERVZf RkxfSEFTX0VWRU5UUyB8DQo+IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOw0KPiANCj4gSSBn dWVzcyBpdCBkb2Vzbid0IG1hdHRlciwgYnV0IHRoaXMgY2FuIGJlIGFzc2lnbmVkIGRpcmVjdGx5 IHRvIGJlIGNsZWFyZXIsIG5vdA0KPiBPUmVkLg0KPiANCg0KSSB3aWxsIGZpeCB0aGlzIGluIG5l eHQgdmVyc2lvbi4NCg0KPiA+ICsNCj4gPiArCXN1YmRldi0+ZW50aXR5Lm9wcyA9ICZ4c2Rpcnhz c19tZWRpYV9vcHM7DQo+ID4gKw0KPiA+ICsJdjRsMl9zZXRfc3ViZGV2ZGF0YShzdWJkZXYsIHhz ZGlyeHNzKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBtZWRpYV9lbnRpdHlfcGFkc19pbml0KCZzdWJk ZXYtPmVudGl0eSwgMSwgJnhzZGlyeHNzLT5wYWQpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4g KwkJZ290byBlcnJvcjsNCj4gPiArDQo+ID4gKwkvKiBJbml0aWFsaXNlIGFuZCByZWdpc3RlciB0 aGUgY29udHJvbHMgKi8NCj4gPiArCW51bV9jdHJscyA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfY3Ry bHMpOw0KPiA+ICsNCj4gPiArCWlmIChjb3JlLT5pbmNsdWRlX2VkaCkNCj4gPiArCQludW1fZWRo X2N0cmxzID0gQVJSQVlfU0laRSh4c2Rpcnhzc19lZGhfY3RybHMpOw0KPiA+ICsNCj4gPiArCXY0 bDJfY3RybF9oYW5kbGVyX2luaXQoJnhzZGlyeHNzLT5jdHJsX2hhbmRsZXIsDQo+ID4gKwkJCSAg ICAgICAobnVtX2N0cmxzICsgbnVtX2VkaF9jdHJscykpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBudW1fY3RybHM7IGkrKykgew0KPiA+ICsJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7 DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcoZGV2LCAiJWQgJXMgY3RybCA9IDB4JXhcbiIsIGksIHhz ZGlyeHNzX2N0cmxzW2ldLm5hbWUsDQo+ID4gKwkJCXhzZGlyeHNzX2N0cmxzW2ldLmlkKTsNCj4g PiArDQo+ID4gKwkJY3RybCA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKCZ4c2Rpcnhzcy0+Y3RybF9o YW5kbGVyLA0KPiA+ICsJCQkJCSAgICAmeHNkaXJ4c3NfY3RybHNbaV0sIE5VTEwpOw0KPiA+ICsJ CWlmICghY3RybCkgew0KPiA+ICsJCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBhZGQgJXMgY3Ry bFxuIiwNCj4gPiArCQkJCXhzZGlyeHNzX2N0cmxzW2ldLm5hbWUpOw0KPiA+ICsJCQlnb3RvIGVy cm9yOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoY29yZS0+aW5jbHVkZV9l ZGgpIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VkaF9jdHJsczsgaSsrKSB7DQo+ID4g KwkJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7DQo+ID4gKw0KPiA+ICsJCQlkZXZfZGJnKGRldiwg IiVkICVzIGN0cmwgPSAweCV4XG4iLCBpLA0KPiA+ICsJCQkJeHNkaXJ4c3NfZWRoX2N0cmxzW2ld Lm5hbWUsDQo+ID4gKwkJCQl4c2Rpcnhzc19lZGhfY3RybHNbaV0uaWQpOw0KPiA+ICsNCj4gPiAr CQkJY3RybCA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLA0K PiA+ICsJCQkJCQkgICAgJnhzZGlyeHNzX2VkaF9jdHJsc1tpXSwNCj4gPiArCQkJCQkJICAgIE5V TEwpOw0KPiA+ICsJCQlpZiAoIWN0cmwpIHsNCj4gPiArCQkJCWRldl9kYmcoZGV2LCAiRmFpbGVk IHRvIGFkZCAlcyBjdHJsXG4iLA0KPiA+ICsJCQkJCXhzZGlyeHNzX2VkaF9jdHJsc1tpXS5uYW1l KTsNCj4gPiArCQkJCWdvdG8gZXJyb3I7DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaWYgKHhzZGlyeHNzLT5jdHJsX2hhbmRsZXIuZXJyb3IpIHsNCj4gPiArCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgY29udHJvbHNcbiIpOw0KPiA+ICsJCXJldCA9IHhz ZGlyeHNzLT5jdHJsX2hhbmRsZXIuZXJyb3I7DQo+ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlzdWJkZXYtPmN0cmxfaGFuZGxlciA9ICZ4c2Rpcnhzcy0+Y3RybF9oYW5k bGVyOw0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfY3RybF9oYW5kbGVyX3NldHVwKCZ4c2Rpcnhz cy0+Y3RybF9oYW5kbGVyKTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gc2V0IGNvbnRyb2xzXG4iKTsNCj4gPiArCQlnb3RvIGVycm9yOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHhzZGlyeHNzKTsN Cj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldihzdWJkZXYpOw0K PiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdp c3RlciBzdWJkZXZcbiIpOw0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJeHNkaXJ4c3MtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiANCj4gSXMgdGhpcyBuZWVkZWQ/DQo+ IA0KDQpJIHRoaW5rIGl0IGlzIGJldHRlciB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgdGhlc2Ug c3RhdGUgdmFyaWFibGVzLg0KDQo+ID4gKw0KPiA+ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUp Ow0KPiA+ICsNCj4gPiArCWRldl9pbmZvKGRldiwgInByb2JlIHN1Y2Nlc3NcbiIpOw0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICtlcnJvcjoNCj4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2Zy ZWUoJnhzZGlyeHNzLT5jdHJsX2hhbmRsZXIpOw0KPiA+ICsJbWVkaWFfZW50aXR5X2NsZWFudXAo JnN1YmRldi0+ZW50aXR5KTsNCj4gPiArCXhzZGlyeF9nbG9iYWxpbnRyKGNvcmUsIGZhbHNlKTsN Cj4gPiArCXhzZGlyeF9kaXNhYmxlaW50cihjb3JlLCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7DQo+ ID4gK2Nsa19lcnI6DQo+ID4gKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShjb3JlLT5udW1f Y2xrcywgY29yZS0+Y2xrcyk7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IHhzZGlyeHNzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9 ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gJnhz ZGlyeHNzLT5zdWJkZXY7DQo+ID4gKw0KPiA+ICsJdjRsMl9hc3luY191bnJlZ2lzdGVyX3N1YmRl dihzdWJkZXYpOw0KPiA+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmeHNkaXJ4c3MtPmN0cmxf aGFuZGxlcik7DQo+ID4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc3ViZGV2LT5lbnRpdHkpOw0K PiA+ICsNCj4gPiArCXhzZGlyeF9nbG9iYWxpbnRyKGNvcmUsIGZhbHNlKTsNCj4gPiArCXhzZGly eF9kaXNhYmxlaW50cihjb3JlLCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7DQo+ID4gKwl4c2Rpcnhf Y29yZV9kaXNhYmxlKGNvcmUpOw0KPiANCj4gSSBiZWxpZXZlIHRoZSBjb3JlIGhhcyB0byBiZSBk aXNhYmxlZCBmaXJzdC4NCj4gDQoNCkRvZXNuJ3QgbWF0dGVyIGJ1dCBvayBJIHdpbGwgcHV0IGl0 IGFib3ZlLg0KDQo+ID4gKwl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUsIGZhbHNlKTsN Cj4gDQo+IEJ1dCB0byBiZSBzYWZlciBzaWRlLCBtYXliZSBhbGwgdGhlc2UgY2FuIGJlIGRvbmUg Zmlyc3Q/IFNpbWlsYXIgZm9yIGVuYWJsZSwNCj4gc28gZW5hYmxpbmcgYWxsIGFmdGVyIHY0bC9t ZWRpYSByZWdpc3RyYXRpb25zPw0KPiANCg0KIEkgd2lsbCB0ZXN0IGFuZCB1cGRhdGUgaWYgd29y a2luZyBpbiBuZXh0IHZlcnNpb24uDQoNCj4gVGhhbmtzLA0KPiAtaHl1bg0KPiANCj4gPiArDQo+ ID4gKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShjb3JlLT5udW1fY2xrcywgY29yZS0+Y2xr cyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhzZGlyeHNzX29mX2lkX3RhYmxlW10gPSB7DQo+ID4g Kwl7IC5jb21wYXRpYmxlID0gInhsbngsdi1zbXB0ZS11aGRzZGktcngtc3MtMi4wIiB9LA0KPiA+ ICsJeyB9DQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhzZGlyeHNzX29m X2lkX3RhYmxlKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhz ZGlyeHNzX2RyaXZlciA9IHsNCj4gPiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5hbWUJCT0gInhp bGlueC1zZGlyeHNzIiwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUJPSB4c2Rpcnhzc19vZl9pZF90 YWJsZSwNCj4gPiArCX0sDQo+ID4gKwkucHJvYmUJCQk9IHhzZGlyeHNzX3Byb2JlLA0KPiA+ICsJ LnJlbW92ZQkJCT0geHNkaXJ4c3NfcmVtb3ZlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxl X3BsYXRmb3JtX2RyaXZlcih4c2Rpcnhzc19kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0FV VEhPUigiVmlzaGFsIFNhZ2FyIDx2c2FnYXJAeGlsaW54LmNvbT4iKTsNCj4gPiArTU9EVUxFX0RF U0NSSVBUSU9OKCJYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbSBEcml2ZXIiKTsNCj4gPiArTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgv eGlsaW54LXNkaXJ4c3MuaCBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtDQo+IHNkaXJ4c3Mu aA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42ZjJh MDkzOTY4ZDkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4 L3hpbGlueC1zZGlyeHNzLmgNCj4gPiBAQCAtMCwwICsxLDE3OSBAQA0KPiA+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqLw0KPiA+ ICsvKg0KPiA+ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbSBtb2RlLCBldmVudCwgY3VzdG9t IHRpbWluZ3MNCj4gDQo+IE5pdC4gJywnIGF0IHRoZSBlbmQuDQo+IA0KDQpUaGUgIiwiIGlzIG5v dCBuZWVkZWQgYXMgaXQgZm9sbG93cyB0byAiYW5kIi4NCg0KPiA+ICsgKiBhbmQgZmxhZyBkZWZp bml0aW9ucy4NCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE5IC0gMjAyMCBYaWxp bngsIEluYy4NCj4gPiArICoNCj4gPiArICogQ29udGFjdHM6IFZpc2hhbCBTYWdhciA8dmlzaGFs LnNhZ2FyQHhpbGlueC5jb20+DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfX1VBUElf WElMSU5YX1NESVJYU1NfSF9fDQo+ID4gKyNkZWZpbmUgX19VQVBJX1hJTElOWF9TRElSWFNTX0hf Xw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC92NGwyLWR2LXRpbWluZ3MuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5o Pg0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogRXZlbnRzDQo+ID4gKyAqDQo+ID4gKyAqIFY0TDJf RVZFTlRfWElMSU5YX1NESVJYX1VOREVSRkxPVzogVmlkZW8gaW4gdG8gQVhJNCBTdHJlYW0gY29y ZQ0KPiB1bmRlcmZsb3dlZA0KPiA+ICsgKiBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9PVkVSRkxP VzogVmlkZW8gaW4gdG8gQVhJNCBTdHJlYW0gY29yZQ0KPiBvdmVyZmxvd2VkDQo+ID4gKyAqLw0K PiA+ICsjZGVmaW5lIFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX0NMQVNTDQo+IChWNEwyX0VWRU5U X1BSSVZBVEVfU1RBUlQgfCAweDIwMCkNCj4gPiArI2RlZmluZSBWNEwyX0VWRU5UX1hJTElOWF9T RElSWF9VTkRFUkZMT1cNCj4gKFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX0NMQVNTIHwgMHgxKQ0K PiA+ICsjZGVmaW5lIFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX09WRVJGTE9XDQo+IChWNEwyX0VW RU5UX1hJTElOWF9TRElSWF9DTEFTUyB8IDB4MikNCj4gDQo+IFNpbmNlIHRoaXMgaXMgbWFueSBk ZWZpbml0aW9ucyBmb3IgYSBzaW5nbGUgc3ViZGV2LCBkbyB5b3UgdGhpbmsgc29tZSBvZiB0aGVz ZQ0KPiBjYW4gYmUgbWluaW1pemVkPyBGb3IgZXhhbXBsZSwgaWYgdGhlIGFjdGlvbiBmb3IgdW5k ZXJmbG93L292ZXJmbG93IGlzbid0DQo+IGRpZmZlcmVudCwgcmVzZXR0aW5nIHRoZSBkZXZpY2Us IHRoZW4gdGhlc2UgY2FuIGZvbGQgaW50byBvbmUgZXZlbnQuDQo+IA0KDQpJIHdpbGwgam9pbiB0 aGlzIG92ZXJmbG93L3VuZGVyZmxvdyBpbnRvIGEgc2luZ2xlIGV2ZW50Lg0KDQo+IA0KPiBDb3Vs ZCB5b3UgZG91YmxlLWNoZWNrIHNvbWUgYmVsb3cgdG9vPyBVbmxlc3MgZWFjaCBpcyBhc3NvY2lh dGVkIHdpdGgNCj4gZGlmZmVyZW50DQo+IGhhbmRsaW5nLCBpdCdkIGJlIGdvb2QgdG8gbWluaW1p emUgdGhlIHVzZXIgaW50ZXJmYWNlLCBleCBieSBtZXJnaW5nIG9yIGV2ZW4NCj4gcmVtb3Zpbmcu DQo+IA0KDQpUaGUgY29udHJvbHMgYXJlIGFkZGVkIHRvIGdpdmUgdXNlciB0aGUgZmxleGliaWxp dHkgdG8gZ2V0IGN1c3RvbSBpbmZvIGxpa2UgRURIIGVycm9yIGNvdW50LCBDUkMgZXJyb3JzLCBl dGMuDQpTbyBJIHdvdWxkIGxpa2UgdG8gZ28gYWhlYWQgd2l0aCB0aGVtLg0KDQo+IFRoYW5rcywN Cj4gLWh5dW4NCj4gDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGlzIGVudW0gaXMgdXNlZCB0 byBwcmVwYXJlIHRoZSBiaXRtYXNrIG9mIG1vZGVzIHRvIGJlIGRldGVjdGVkDQo+ID4gKyAqLw0K PiA+ICtlbnVtIHsNCj4gPiArCVhTRElSWF9NT0RFX1NEX09GRlNFVCA9IDAsDQo+ID4gKwlYU0RJ UlhfTU9ERV9IRF9PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV8zR19PRkZTRVQsDQo+ID4gKwlY U0RJUlhfTU9ERV82R19PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCwNCj4g PiArCVhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VULA0KPiA+ICsJWFNESVJYX01PREVfTlVNX1NVUFBP UlRFRCwNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX0RFVEVDVF9BTExfTU9E RVMNCj4gCShCSVQoWFNESVJYX01PREVfU0RfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNE SVJYX01PREVfSERfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfM0dfT0ZG U0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfNkdfT0ZGU0VUKSB8IFwNCj4gPiAr CQkJCQlCSVQoWFNESVJYX01PREVfMTJHSV9PRkZTRVQpIHwgXA0KPiA+ICsJCQkJCUJJVChYU0RJ UlhfTU9ERV8xMkdGX09GRlNFVCkpDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBFREggRXJyb3Ig VHlwZXMNCj4gPiArICogQU5DIC0gQW5jaWxsYXJ5IERhdGEgUGFja2V0IEVycm9ycw0KPiA+ICsg KiBGRiAtIEZ1bGwgRmllbGQgRXJyb3JzDQo+ID4gKyAqIEFQIC0gQWN0aXZlIFBvcnRpb24gRXJy b3JzDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNf RURIX0VSUgkJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX0VEQV9F UlIJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19JREhfRVJSCQlC SVQoMikNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNfSURBX0VSUgkJQklUKDMp DQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX1VFU19FUlIJCUJJVCg0KQ0KPiA+ ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0VESF9FUlIJCUJJVCg1KQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0VEQV9FUlIJCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIFhT RElSWF9FREhfRVJSQ05UX0ZGX0lESF9FUlIJCUJJVCg3KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9F REhfRVJSQ05UX0ZGX0lEQV9FUlIJCUJJVCg4KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJS Q05UX0ZGX1VFU19FUlIJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQ X0VESF9FUlIJCUJJVCgxMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9FREFf RVJSCQlCSVQoMTEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQVBfSURIX0VSUgkJ QklUKDEyKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0lEQV9FUlIJCUJJVCgx MykNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9VRVNfRVJSCQlCSVQoMTQpDQo+ ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfUEtUX0NIS1NVTV9FUlIJQklUKDE1KQ0KPiA+ ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0FMTEVSUl9NQVNLCQkweEZGRkYNCj4gPiArDQo+ ID4gKy8qIFhpbGlueCBEViB0aW1pbmdzIG5vdCBpbiBtYWlubGluZSB5ZXQgKi8NCj4gPiArI2Rl ZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI0IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwy X0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgw LCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1Nf UE9MLCBcDQo+ID4gKwkJNzQyNTAwMDAsIDUxMCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAsIDAs IFwNCj4gPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI1IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwy X0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgw LCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1Nf UE9MLCBcDQo+ID4gKwkJNzQyNTAwMDAsIDQwMCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAsIDAs IFwNCj4gPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDMwIHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwy X0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgw LCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1Nf UE9MLCBcDQo+ID4gKwkJNzQyNTAwMDAsIDY2LCAyMCwgNjYsIDQsIDUsIDM2LCAwLCAwLCAwLCBc DQo+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZp bmUgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9E Vl9CVF82NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwg MSwgXA0KPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BP TCwgXA0KPiA+ICsJCTc0MjUwMDAwLCAzMjksIDQ0LCAzMjksIDIsIDUsIDE1LCAzLCA1LCAxNSwg XA0KPiA+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVm aW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNTAgeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJf RFZfQlRfNjU2XzExMjAsIFwNCj4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAs IDEsIFwNCj4gPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19Q T0wsIFwNCj4gPiArCQk3NDI1MDAwMCwgMjc0LCA0NCwgMjc0LCAyLCA1LCAxNSwgMywgNSwgMTUs IFwNCj4gPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTYwIHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwy X0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgw LCAxLCBcDQo+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1Nf UE9MLCBcDQo+ID4gKwkJNzQyNTAwMDAsIDY2LCAyMCwgNjYsIDIsIDUsIDE1LCAzLCA1LCAxNSwg XA0KPiA+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVm aW5lIFhMTlhfVjRMMl9EVl9CVF8xOTIwWDEwODBQNDggeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJf RFZfQlRfNjU2XzExMjAsIFwNCj4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEwODAs IDAsIFwNCj4gPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19Q T0wsIFwNCj4gPiArCQkxNDg1MDAwMDAsIDYzOCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAsIDAs IFwNCj4gPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDQ4IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwy X0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgw LCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1Nf UE9MLCBcDQo+ID4gKwkJMTQ4NTAwMDAwLCA1MTAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAw LCBcDQo+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNk ZWZpbmUgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA1MCB7IFwNCj4gPiArCS50eXBlID0gVjRM Ml9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4 MCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9T X1BPTCwgXA0KPiA+ICsJCTE0ODUwMDAwMCwgNDAwLCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwg MCwgXA0KPiA+ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNjAgeyBcDQo+ID4gKwkudHlwZSA9IFY0 TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEw ODAsIDAsIFwNCj4gPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BP U19QT0wsIFwNCj4gPiArCQkxNDg1MDAwMDAsIDg4LCA0NCwgMjAsIDQsIDUsIDM2LCAwLCAwLCAw LCBcDQo+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNk ZWZpbmUgWExOWF9WNEwyX0RWX0JUXzM4NDBYMjE2MFA0OCB7IFwNCj4gPiArCS50eXBlID0gVjRM Ml9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMzg0MCwgMjE2 MCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9T X1BPTCwgXA0KPiA+ICsJCTU5NDAwMDAwMCwgMTI3NiwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAw LCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4g KyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzQwOTZYMjE2MFA0OCB7IFwNCj4gPiArCS50eXBlID0g VjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoNDA5Niwg MjE2MCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNf UE9TX1BPTCwgXA0KPiA+ICsJCTU5NDAwMDAwMCwgMTAyMCwgODgsIDI5NiwgOCwgMTAsIDcyLCAw LCAwLCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MEk0OCB7IFwNCj4gPiArCS50eXBl ID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMTky MCwgMTA4MCwgMSwgXA0KPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZ TkNfUE9TX1BPTCwgXA0KPiA+ICsJCTE0ODUwMDAwMCwgMzcxLCA4OCwgMzcxLCAyLCA1LCAxNSwg MywgNSwgMTUsIFwNCj4gPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsN Cj4gPiArI2VuZGlmIC8qIF9fVUFQSV9YSUxJTlhfU0RJUlhTU19IX18gKi8NCj4gPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWNvbnRyb2xzLmgNCj4gYi9pbmNs dWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMuaA0KPiA+IGluZGV4IGI2NDQxZmU3 MDVjNS4uZTlkZTY1ZTgyNjQyIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC94 aWxpbngtdjRsMi1jb250cm9scy5oDQo+ID4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlu eC12NGwyLWNvbnRyb2xzLmgNCj4gPiBAQCAtNzEsNCArNzEsNzEgQEANCj4gPiAgLyogTm9pc2Ug bGV2ZWwgKi8NCj4gPiAgI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfVFBHX05PSVNFX0dBSU4NCj4g CShWNEwyX0NJRF9YSUxJTlhfVFBHICsgMTcpDQo+ID4NCj4gPiArLyoNCj4gPiArICogWGlsaW54 IFNESSBSeCBTdWJzeXN0ZW0NCj4gPiArICovDQo+ID4gKw0KPiA+ICsvKiBUaGUgYmFzZSBmb3Ig dGhlIHNkaSByeCBkcml2ZXIgY29udHJvbHMuDQo+ID4gKyAqIFdlIHJlc2VydmUgMzIgY29udHJv bHMgZm9yIHRoaXMgZHJpdmVyLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgVjRMMl9DSURfWElMSU5Y X1NESVJYX0VESF8qIGNvbnRyb2xzIGFyZSBwcmVzZW50IG9ubHkgaWYNCj4gPiArICogRURIIGlz IGVuYWJsZWQuDQo+ID4gKyAqIFRoZSBjb250cm9scyB3aGljaCBjYW4gYmUgc2V0IHNob3VsZCBv bmx5IGJlIHNldCBiZWZvcmUgZW5hYmxpbmcNCj4gPiArICogc3RyZWFtaW5nLiBUaGUgY29udHJv bHMgd2hpY2ggY2FuIGJlIGdvdCBzaG91bGQgYmUgY2FsbGVkIHdoaWxlDQo+ID4gKyAqIHN0cmVh bWluZyB0byBnZXQgY29ycmVjdCB2YWx1ZXMuDQo+ID4gKyAqIFRoZSBWNEwyX0NJRF9YSUxJTlhf U0RJUlhfTU9ERV9ERVRFQ1QgY2FuIGJlIGNhbGxlZCB3aGVuIHF1ZXJ5DQo+IGR2IHRpbWluZw0K PiA+ICsgKiByZXR1cm5zIGEgdmFsaWQgdGltaW5nLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNk ZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYDQo+IAkoVjRMMl9DSURfWElMSU5YX0JBU0UgKyAw eDIwKQ0KPiA+ICsNCj4gPiArLyogRnJhbWVyIENvbnRyb2wgdG8gZW5hYmxlIG9yIGRpc2FibGUg dGhlIGZyYW1lciAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9GUkFNRVIN Cj4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyAxKQ0KPiA+ICsvKg0KPiA+ICsgKiBWaWRlbyBM b2NrIFdpbmRvdyBDb250cm9sIHRvIHNldCB0aGUgdmlkZW8gbG9jayB3aW5kb3cgdmFsdWUNCj4g PiArICogVGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIG1vZGUgYW5kIHRyYW5zcG9ydCBz dHJlYW0gbmVlZA0KPiA+ICsgKiB0byBiZSBsb2NrZWQgYmVmb3JlIGEgdmlkZW8gbG9jayBpbnRl cnJ1cHQgb2NjdXJzLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJ UlhfVklETE9DS19XSU5ET1cNCj4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyAyKQ0KPiA+ICsv KiBFREggRXJyb3IgTWFzayBDb250cm9sIHRvIGVuYWJsZSBFREggZXJyb3IgY291bnQgKi8NCj4g PiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVF9FTkFCTEUNCj4gCShW NEwyX0NJRF9YSUxJTlhfU0RJUlggKyAzKQ0KPiA+ICsvKg0KPiA+ICsgKiBNb2RlIHNlYXJjaCBD b250cm9sIHRvIHBhc3MgdGhlIGJpdCBtYXNrIG9mIG1vZGVzIHRvIGRldGVjdC4NCj4gPiArICoN Cj4gPiArICogYml0IDAgc2V0IHRvIGRldGVjdCBTRCBtb2RlLA0KPiA+ICsgKiBiaXQgMSBzZXQg dG8gZGV0ZWN0IEhEIG1vZGUsDQo+ID4gKyAqIGJpdCAyIHNldCB0byBkZXRlY3QgM0cgKDNHQSAm IDNHQikgbW9kZSwNCj4gPiArICogYml0IDMgc2V0IHRvIGRldGVjdCA2RyBtb2RlLA0KPiA+ICsg KiBiaXQgNCBzZXQgdG8gZGV0ZWN0IDEyRyBpbnRlZ2VyIGZyYW1lIHJhdGUgbW9kZSwNCj4gPiAr ICogYml0IDUgc2V0IHRvIGRldGVjdCAxMkcgZnJhY3Rpb25hbCBmcmFtZSByYXRlIG1vZGUsDQo+ ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9TRUFSQ0hfTU9ERVMN Cj4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyA0KQ0KPiA+ICsvKg0KPiA+ICsgKiBHZXQgRGV0 ZWN0ZWQgTW9kZSBjb250cm9sDQo+ID4gKyAqDQo+ID4gKyAqIENvbnRyb2wgVmFsdWUgLSBNb2Rl IGRldGVjdGVkDQo+ID4gKyAqICAgICAgICAwICAgICAgLSAgICAgU0QNCj4gPiArICogICAgICAg IDEgICAgICAtICAgICBIRA0KPiA+ICsgKiAgICAgICAgMiAgICAgIC0gICAgIDNHICgzR0EgJiAz R0IpDQo+ID4gKyAqICAgICAgICAzICAgICAgLSAgICAgNkcNCj4gPiArICogICAgICAgIDQgICAg ICAtICAgICAxMkcgaW50ZWdlciBmcmFtZSByYXRlDQo+ID4gKyAqICAgICAgICA1ICAgICAgLSAg ICAgMTJHIGZyYWN0aW9uYWwgZnJhbWUgcmF0ZQ0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBWNEwy X0NJRF9YSUxJTlhfU0RJUlhfTU9ERV9ERVRFQ1QNCj4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlgg KyA1KQ0KPiA+ICsvKiBHZXQgbnVtYmVyIG9mIENSQyBlcnJvcnMgc3RhdHVzIGNvbnRyb2wgKi8N Cj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQ1JDDQo+IAkoVjRMMl9DSURfWElM SU5YX1NESVJYICsgNikNCj4gPiArLyogR2V0IEVESCBlcnJvciBjb3VudCBjb250cm9sICovDQo+ ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlQNCj4gCShWNEwyX0NJ RF9YSUxJTlhfU0RJUlggKyA3KQ0KPiA+ICsvKiBHZXQgRURIIHN0YXR1cyBjb250cm9sICovDQo+ ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVMNCj4gCShWNEwyX0NJ RF9YSUxJTlhfU0RJUlggKyA4KQ0KPiA+ICsvKiBHZXQgVHJhbnNwb3J0IEludGVybGFjZWQgc3Rh dHVzIHdoZXRoZXIgaXQgaXMgaW50ZXJsYWNlZCBvciBub3QgKi8NCj4gPiArI2RlZmluZSBWNEwy X0NJRF9YSUxJTlhfU0RJUlhfVFNfSVNfSU5URVJMQUNFRA0KPiAJKFY0TDJfQ0lEX1hJTElOWF9T RElSWCArIDkpDQo+ID4gKy8qIEdldCBudW1iZXIgb2YgQWN0aXZlIFN0cmVhbXMgKi8NCj4gPiAr I2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQUNUSVZFX1NUUkVBTVMNCj4gCShWNEwyX0NJ RF9YSUxJTlhfU0RJUlggKyAxMCkNCj4gPiArLyoNCj4gPiArICogR2V0IGlmIHRoZSBkZXRlY3Rl ZCBtb2RlIGlzIDNHQi4NCj4gPiArICogQ2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2hlZCBiZXR3 ZWVuIDNHQSBhbmQgM0dCDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9T RElSWF9JU18zR0INCj4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyAxMSkNCj4gPiArDQo+ID4g ICNlbmRpZiAvKiBfX1VBUElfWElMSU5YX1Y0TDJfQ09OVFJPTFNfSF9fICovDQo+ID4gLS0NCj4g PiAyLjIxLjANCj4gPg0KPiA+DQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18NCj4gPiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdA0KPiA+IGxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZw0KPiA+IGh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbA0KPiA+DQoNClJlZ2Fy ZHMNClZpc2hhbCBTYWdhcg0KDQo=