Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5574770imu; Tue, 29 Jan 2019 23:18:36 -0800 (PST) X-Google-Smtp-Source: ALg8bN4HEeEY4YbfW6fkxPjCgGelu29hRxeuWkbTtzelUPjp8KqyMyBUxEcTjGMdvPboeL8ucpzi X-Received: by 2002:a17:902:50e3:: with SMTP id c32mr29515363plj.318.1548832716837; Tue, 29 Jan 2019 23:18:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548832716; cv=none; d=google.com; s=arc-20160816; b=sB7cT4srlSxo3zV1+5s/IICcM+eFaquWQ2K/6o0ZnvvYFQsbxxXqz4cavn/TjGF3Hl XWmmM+RKANqw79vZqmGDbI9cG+FImvNnK1fx131X0+zbvsZkDB4T8vWKJo3z+Y9goAbV N5cEgcGjMHpOI4EPkFlLUWnjfwdl7k0wK9J5t7BtA6s0j4lHHeZEFekHcHy9HzDn8920 xAHvFHnTPLz3OLX3Gx7l6AUKKy5Y3L0UgsetwDthr8r+daw1AOn5Lb7jFvV0a+YUU+b1 u88wxJNq2yMDXgg0Fxjj0y7sakdvENOL1FeNzABkvneiKnonXqYbNdvKOasjT8d0fdWl r1QA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=yGlVpPq7f2yGM88Ug4vw8q5jA02EwOemcc1hGgPDos0=; b=mlqI4NCwcp2WZf8voXjErX7UKBnaNSQXSJgMjL6lgxYDkZUHGaQrXLoX9rU6rEGPgN swXKJYvzKSy50BPMR3QB/kMdTtyOPd11myYcjVw14GSMgyexNKrzKojhHrvAH0ymKW1h d0rXj8pmNjB577SSKv1T56fjpY9LLIBWx60IF2nr+30sYy7KZxgD6UnWh/MCpqoyd4GR NoyeLZMXMBM7YkhK4M6doMhoDL3V+BzknIhYVmqjfG1XSi+VFWSdwJzDe0zAwq9tqfug XiikvOaq+WHAcvydfv5hew+beZpLcOVPqMe2ODEuAEOo+U+vQ+gP4YrwTv4YrQ1vKTfq 14YA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=2A+cZX3s; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j191si710264pgd.31.2019.01.29.23.18.21; Tue, 29 Jan 2019 23:18:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=2A+cZX3s; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730102AbfA3HQe (ORCPT + 99 others); Wed, 30 Jan 2019 02:16:34 -0500 Received: from mail-eopbgr760041.outbound.protection.outlook.com ([40.107.76.41]:29312 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725850AbfA3HQd (ORCPT ); Wed, 30 Jan 2019 02:16:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yGlVpPq7f2yGM88Ug4vw8q5jA02EwOemcc1hGgPDos0=; b=2A+cZX3sXV2cPU5Dh6XlOv9ZgjjYIMVQJtM823TPlctrefizdGLkV7rdKqQRREd3dtQX42gBCV/aGDERH4qgHkNa7aBsODG/LCJe9iHON6KrN9UR7iI/6TbTeo5C9sArDEaz+IvKj1OFYMRvyp5r/j4L2fMqwkxIp7XxdvQViXY= Received: from CY4PR02MB2709.namprd02.prod.outlook.com (10.175.59.19) by CY4PR02MB2392.namprd02.prod.outlook.com (10.169.182.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1558.16; Wed, 30 Jan 2019 07:15:23 +0000 Received: from CY4PR02MB2709.namprd02.prod.outlook.com ([fe80::c41a:f0ef:3b4e:6903]) by CY4PR02MB2709.namprd02.prod.outlook.com ([fe80::c41a:f0ef:3b4e:6903%3]) with mapi id 15.20.1558.023; Wed, 30 Jan 2019 07:15:23 +0000 From: Vishal Sagar To: Hyun Kwon CC: Hyun Kwon , Vishal Sagar , "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" , "sakari.ailus@linux.intel.com" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari Subject: RE: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Topic: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Index: AQHUtNbaE7q7UWZKqkuSBkGfRY+9aKXA0C+AgAOd2wCAAJh+AIACTtQA Date: Wed, 30 Jan 2019 07:15:23 +0000 Message-ID: References: <1548438777-11203-1-git-send-email-vishal.sagar@xilinx.com> <1548438777-11203-3-git-send-email-vishal.sagar@xilinx.com> <20190126021457.GB2412@smtp.xilinx.com> <20190128183428.GA23150@smtp.xilinx.com> In-Reply-To: <20190128183428.GA23150@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: spf=none (sender IP is ) smtp.mailfrom=vsagar@xilinx.com; x-originating-ip: [149.199.50.133] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;CY4PR02MB2392;6:cE+AbxU3uwoq9fdHj2bOAakcT+UD5MvpdGXGoOs+k07x5qQxjHJUIB7D4HfctbSiOnyPPol/KHxVOBpiV7n9bbro8aWqfJqotByT25Xg4lpYwd6Qih0VjDyX5NqLCXG9mWRahemQGw8uP9ZR+kGx4/p13BV38bYOTOmi2sCRSwijvSEn/Cp4/deh7xIhRoZeC7vnL0BuvDk0jZa0xJmhlGPX9kmMLN4+UKzC8w0EIDx7gFBIEFeTe3n8dc0I4UFEQnNfAwwfTwCw9IFfZbQXqksFo3Mf6ufRtUjPFsMaq0DFu8asLeHGIGF+W5/ZA1njxgeWov4c7oAfhHBp44Xc6htOlr48iff6gMboFuOZmcCaI13QYV+HSnqi99MsGwdk7rhx9Xhfg2Di9rfXSzEVaovUmBnwyUZcWCxuZ/w2TiuQ7uhX0V2B99NYtvvMPi7HYZi95q/5paM8MAu9SAxpeA==;5:VuVh1PeXcjawhqrnASeEJ0G8XSzmmaFy35CBEwlOK9QESoPVe77eR9LboxEZaf5TKlshX6suP6pTBtA7MjaL9MppwvEhLdrGkUs5gBNr1FevclNrcdYQzWMXKntJJXZ1wPCihGAuf9l5T21+H4ZrpQWc70ixDli/TULBTu190P8S4PfKWI3HFJh1YAjC3BRG7W9UTGLClcqswCXTTacK9A==;7:UwAyfnoKKI/VO7NdZld3TZj8XiqzhSf5DEXKQK+LLErn89SUp2g8XkWiIF9nNoIZOhucvMxFxcjxrI2BBnzBC2cZvl5K94SnNnsXlwYmhqvlrW2OdplsmJcB1u9uIeHnVGHwpP34kmvkqeDFKTr9YA== x-ms-office365-filtering-correlation-id: 6e67f7a7-a703-4bb8-1e9a-08d68682b3c0 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020);SRVR:CY4PR02MB2392; x-ms-traffictypediagnostic: CY4PR02MB2392: x-microsoft-antispam-prvs: x-forefront-prvs: 0933E9FD8D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(39850400004)(136003)(366004)(376002)(346002)(54534003)(13464003)(189003)(199004)(51914003)(45074003)(8936002)(6506007)(53546011)(186003)(14454004)(71190400001)(25786009)(99286004)(26005)(102836004)(81156014)(93886005)(71200400001)(53936002)(6862004)(8676002)(476003)(30864003)(114624004)(4326008)(7696005)(76176011)(68736007)(486006)(81166006)(6116002)(3846002)(97736004)(33656002)(478600001)(7736002)(2906002)(6436002)(316002)(11346002)(54906003)(7416002)(66066001)(55016002)(53946003)(86362001)(106356001)(105586002)(107886003)(229853002)(6246003)(74316002)(9686003)(6636002)(305945005)(256004)(14444005)(446003)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR02MB2392;H:CY4PR02MB2709.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: YD2MAEcf8Uj3LDfjF0xUiisLgNu+bcbh+ohmtv15z5d3Nj/iB9HTOVy6SlQkoOVz56POhF6zcDM0rAwU2F0TpvZMN25Q6k7BTW4L4PsJ02GdVdLJC6dXlLBnuD67/O1DN4KfbKhyiWpPk8URG0NsoXiShg1o/wP5nd71wPaooqOjkBaEZ62r55FZO2Jn0WlarLsV6fMFpR0tfkl74aBH5ejn1s2SuYx6byRPTLoEOdxrKtfRSE5yngDhKv/kNGhStHiWPJzkQ9lAogRMvrcWvPA+irNnIX+dDzDkoU3d7FgQP3r/RPKH44yRdAcAD9tkCRwRDsQ3rV/E6o8PL6Qn/8y3O2Gk41eZNTEf+ru5AHK4Yi1HlCU2XJqjUmJMxCAS7WXRwpE3tz0juRxKTPiEbwBwg40ESO97gYun1mIP73A= 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: 6e67f7a7-a703-4bb8-1e9a-08d68682b3c0 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jan 2019 07:15:23.7835 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR02MB2392 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSHl1biwNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIeXVuIEt3 b24gW21haWx0bzpoeXVuLmt3b25AeGlsaW54LmNvbV0NCj4gU2VudDogVHVlc2RheSwgSmFudWFy eSAyOSwgMjAxOSAxMjowNSBBTQ0KPiBUbzogVmlzaGFsIFNhZ2FyIDx2c2FnYXJAeGlsaW54LmNv bT4NCj4gQ2M6IEh5dW4gS3dvbiA8aHl1bmtAeGlsaW54LmNvbT47IFZpc2hhbCBTYWdhciA8dmlz aGFsLnNhZ2FyQHhpbGlueC5jb20+Ow0KPiBsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5j b207IG1jaGVoYWJAa2VybmVsLm9yZzsNCj4gcm9iaCtkdEBrZXJuZWwub3JnOyBtYXJrLnJ1dGxh bmRAYXJtLmNvbTsgTWljaGFsIFNpbWVrDQo+IDxtaWNoYWxzQHhpbGlueC5jb20+OyBsaW51eC1t ZWRpYUB2Z2VyLmtlcm5lbC5vcmc7DQo+IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBzYWth cmkuYWlsdXNAbGludXguaW50ZWwuY29tOw0KPiBoYW5zLnZlcmt1aWxAY2lzY28uY29tOyBsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5r ZXJuZWwub3JnOyBEaW5lc2ggS3VtYXIgPGRpbmVzaGtAeGlsaW54LmNvbT47IFNhbmRpcCBLb3Ro YXJpDQo+IDxzYW5kaXBrQHhpbGlueC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMi8y XSBtZWRpYTogdjRsOiB4aWxpbng6IEFkZCBYaWxpbnggTUlQSSBDU0ktMiBSeA0KPiBTdWJzeXN0 ZW0gZHJpdmVyDQo+IA0KPiBIaSBWaXNoYWwsDQo+IA0KPiBPbiBNb24sIDIwMTktMDEtMjggYXQg MDM6MTY6NDkgLTA4MDAsIFZpc2hhbCBTYWdhciB3cm90ZToNCj4gPiBIaSBIeXVuLA0KPiA+DQo+ ID4gVGhhbmtzIGZvciB0aGUgcmV2aWV3Lg0KPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiA+ID4gRnJvbTogSHl1biBLd29uIFttYWlsdG86aHl1bi5rd29uQHhpbGlueC5j b21dDQo+ID4gPiBTZW50OiBTYXR1cmRheSwgSmFudWFyeSAyNiwgMjAxOSA3OjQ1IEFNDQo+ID4g PiBUbzogVmlzaGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4NCj4gPiA+IENjOiBI eXVuIEt3b24gPGh5dW5rQHhpbGlueC5jb20+OyBsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2Fy ZC5jb207DQo+ID4gPiBtY2hlaGFiQGtlcm5lbC5vcmc7IHJvYmgrZHRAa2VybmVsLm9yZzsgbWFy ay5ydXRsYW5kQGFybS5jb207DQo+IE1pY2hhbA0KPiA+ID4gU2ltZWsgPG1pY2hhbHNAeGlsaW54 LmNvbT47IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZzsNCj4gPiA+IGRldmljZXRyZWVAdmdl ci5rZXJuZWwub3JnOyBzYWthcmkuYWlsdXNAbGludXguaW50ZWwuY29tOw0KPiA+ID4gaGFucy52 ZXJrdWlsQGNpc2NvLmNvbTsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBs aW51eC0NCj4gPiA+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERpbmVzaCBLdW1hciA8ZGluZXNo a0B4aWxpbnguY29tPjsgU2FuZGlwDQo+IEtvdGhhcmkNCj4gPiA+IDxzYW5kaXBrQHhpbGlueC5j b20+DQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYyIDIvMl0gbWVkaWE6IHY0bDogeGlsaW54 OiBBZGQgWGlsaW54IE1JUEkgQ1NJLTIgUngNCj4gPiA+IFN1YnN5c3RlbSBkcml2ZXINCj4gPiA+ DQo+ID4gPiBIaSBWaXNoYWwsDQo+ID4gPg0KPiA+ID4gVGhhbmtzIGZvciB0aGUgcGF0Y2guDQo+ ID4gPg0KPiA+ID4gT24gRnJpLCAyMDE5LTAxLTI1IGF0IDA5OjUyOjU3IC0wODAwLCBWaXNoYWwg U2FnYXIgd3JvdGU6DQo+ID4gPiA+IFRoZSBYaWxpbnggTUlQSSBDU0ktMiBSeCBTdWJzeXN0ZW0g c29mdCBJUCBpcyB1c2VkIHRvIGNhcHR1cmUgaW1hZ2VzDQo+ID4gPiA+IGZyb20gTUlQSSBDU0kt MiBjYW1lcmEgc2Vuc29ycyBhbmQgb3V0cHV0IEFYSTQtU3RyZWFtIHZpZGVvIGRhdGEgcmVhZHkN Cj4gPiA+ID4gZm9yIGltYWdlIHByb2Nlc3NpbmcuIFBsZWFzZSByZWZlciB0byBQRzIzMiBmb3Ig ZGV0YWlscy4NCj4gPiA+ID4NCj4gPiA+ID4gVGhlIGRyaXZlciBpcyB1c2VkIHRvIHNldCB0aGUg bnVtYmVyIG9mIGFjdGl2ZSBsYW5lcywgaWYgZW5hYmxlZA0KPiA+ID4gPiBpbiBoYXJkd2FyZS4g VGhlIENTSTIgUnggY29udHJvbGxlciBmaWx0ZXJzIG91dCBhbGwgcGFja2V0cyBleGNlcHQgZm9y DQo+ID4gPiA+IHRoZSBwYWNrZXRzIHdpdGggZGF0YSB0eXBlIGZpeGVkIGluIGhhcmR3YXJlLiBS QVc4IHBhY2tldHMgYXJlIGFsd2F5cw0KPiA+ID4gPiBhbGxvd2VkIHRvIHBhc3MgdGhyb3VnaC4N Cj4gPiA+ID4NCj4gPiA+ID4gSXQgaXMgYWxzbyB1c2VkIHRvIHNldHVwIGFuZCBoYW5kbGUgaW50 ZXJydXB0cyBhbmQgZW5hYmxlIHRoZSBjb3JlLiBJdA0KPiA+ID4gPiBsb2dzIGFsbCB0aGUgZXZl bnRzIGluIHJlc3BlY3RpdmUgY291bnRlcnMgYmV0d2VlbiBzdHJlYW1pbmcgb24gYW5kIG9mZi4N Cj4gPiA+ID4gVGhlIGdlbmVyaWMgc2hvcnQgcGFja2V0cyByZWNlaXZlZCBhcmUgbm90aWZpZWQg dG8gYXBwbGljYXRpb24gdmlhDQo+ID4gPiA+IHY0bDJfZXZlbnRzLg0KPiA+ID4gPg0KPiA+ID4g PiBUaGUgZHJpdmVyIHN1cHBvcnRzIG9ubHkgdGhlIHZpZGVvIGZvcm1hdCBicmlkZ2UgZW5hYmxl ZCBjb25maWd1cmF0aW9uLg0KPiA+ID4gPiBTb21lIGRhdGEgdHlwZXMgbGlrZSBZVVYgNDIyIDEw YnBjLCBSQVcxNiwgUkFXMjAgYXJlIHN1cHBvcnRlZA0KPiB3aGVuDQo+ID4gPiB0aGUNCj4gPiA+ ID4gQ1NJIHYyLjAgZmVhdHVyZSBpcyBlbmFibGVkIGluIGRlc2lnbi4gV2hlbiB0aGUgVkNYIGZl YXR1cmUgaXMgZW5hYmxlZCwNCj4gPiA+ID4gdGhlIG1heGltdW0gbnVtYmVyIG9mIHZpcnR1YWwg Y2hhbm5lbHMgYmVjb21lcyAxNiBmcm9tIDQuDQo+ID4gPiA+DQo+ID4gPiA+IFNpZ25lZC1vZmYt Ynk6IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhpbGlueC5jb20+DQo+ID4gPiA+IC0tLQ0K PiA+ID4gPiB2Mg0KPiA+ID4gPiAtIEZpeGVkIGNvbW1lbnRzIGdpdmVuIGJ5IEh5dW4gYW5kIFNh a2FyaS4NCj4gPiA+ID4gLSBNYWRlIGFsbCBiaXRtYXNrIHVzaW5nIEJJVCgpIGFuZCBHRU5NQVNL KCkNCj4gPiA+ID4gLSBSZW1vdmVkIHVudXNlZCBkZWZpbml0aW9ucw0KPiA+ID4gPiAtIFJlbW92 ZWQgRFBIWSBhY2Nlc3MuIFRoaXMgd2lsbCBiZSBkb25lIGJ5IHNlcGFyYXRlIERQSFkgUEhZIGRy aXZlci4NCj4gPiA+ID4gLSBBZGRlZCBzdXBwb3J0IGZvciBDU0kgdjIuMCBmb3IgWVVWIDQyMiAx MGJwYywgUkFXMTYsIFJBVzIwIGFuZA0KPiBleHRyYQ0KPiA+ID4gPiAgIHZpcnR1YWwgY2hhbm5l bHMNCj4gPiA+ID4gLSBGaXhlZCB0aGUgcG9ydHMgYXMgc2luayBhbmQgc291cmNlDQo+ID4gPiA+ IC0gTm93IHVzZSB0aGUgdjRsMmZ3bm9kZSBBUEkgdG8gZ2V0IG51bWJlciBvZiBkYXRhLWxhbmVz DQo+ID4gPiA+IC0gQWRkZWQgY2xvY2sgZnJhbWV3b3JrIHN1cHBvcnQNCj4gPiA+ID4gLSBSZW1v dmVkIHRoZSBjbG9zZSgpIGZ1bmN0aW9uDQo+ID4gPiA+IC0gdXBkYXRlZCB0aGUgc2V0IGZvcm1h dCBmdW5jdGlvbg0KPiA+ID4gPiAtIHN1cHBvcnQgb25seSBWRkIgZW5hYmxlZCBjb25maWd1cmF0 aW9uDQo+ID4gPiA+DQo+ID4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29u ZmlnICAgICAgICAgICB8ICAgMTAgKw0KPiA+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94 aWxpbngvTWFrZWZpbGUgICAgICAgICAgfCAgICAxICsNCj4gPiA+ID4gIGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0veGlsaW54L3hpbGlueC1jc2kycnhzcy5jIHwgMTYwOQ0KPiA+ID4gKysrKysrKysr KysrKysrKysrKysrKysNCj4gPiA+ID4gIGluY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1j b250cm9scy5oICAgICAgIHwgICAxNCArDQo+ID4gPiA+ICBpbmNsdWRlL3VhcGkvbGludXgveGls aW54LXY0bDItZXZlbnRzLmggICAgICAgICB8ICAgMjggKw0KPiA+ID4gPiAgNSBmaWxlcyBjaGFu Z2VkLCAxNjYyIGluc2VydGlvbnMoKykNCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtY3NpMnJ4c3MuYw0KPiA+ID4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1ldmVudHMuaA0K PiA+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxp bngvS2NvbmZpZw0KPiA+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmln DQo+ID4gPiA+IGluZGV4IDc0ZWM4YWEuLjMwYjRhMjUgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiA+ID4gKysrIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZw0KPiA+ID4gPiBAQCAtMTAsNiArMTAsMTYg QEAgY29uZmlnIFZJREVPX1hJTElOWA0KPiA+ID4gPg0KPiA+ID4gPiAgaWYgVklERU9fWElMSU5Y DQo+ID4gPiA+DQo+ID4gPiA+ICtjb25maWcgVklERU9fWElMSU5YX0NTSTJSWFNTDQo+ID4gPiA+ ICsJdHJpc3RhdGUgIlhpbGlueCBDU0kyIFJ4IFN1YnN5c3RlbSINCj4gPiA+ID4gKwloZWxwDQo+ ID4gPiA+ICsJICBEcml2ZXIgZm9yIFhpbGlueCBNSVBJIENTSTIgUnggU3Vic3lzdGVtLiBUaGlz IGlzIGEgVjRMIHN1Yi1kZXZpY2UNCj4gPiA+ID4gKwkgIGJhc2VkIGRyaXZlciB0aGF0IHRha2Vz IGlucHV0IGZyb20gQ1NJMiBUeCBzb3VyY2UgYW5kIGNvbnZlcnRzDQo+ID4gPiA+ICsJICBpdCBp bnRvIGFuIEFYSTQtU3RyZWFtLiBUaGUgc3Vic3lzdGVtIGNvbXByaXNlcyBvZiBhIENTSTIgUngN Cj4gPiA+ID4gKwkgIGNvbnRyb2xsZXIsIERQSFksIGFuIG9wdGlvbmFsIEkyQyBjb250cm9sbGVy IGFuZCBhIFZpZGVvIEZvcm1hdA0KPiA+ID4gPiArCSAgQnJpZGdlLiBUaGUgZHJpdmVyIGlzIHVz ZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgYWN0aXZlIGxhbmVzIGFuZA0KPiA+ID4gPiArCSAgZ2V0 IHNob3J0IHBhY2tldCBkYXRhLg0KPiA+ID4gPiArDQo+ID4gPiA+ICBjb25maWcgVklERU9fWElM SU5YX1RQRw0KPiA+ID4gPiAgCXRyaXN0YXRlICJYaWxpbnggVmlkZW8gVGVzdCBQYXR0ZXJuIEdl bmVyYXRvciINCj4gPiA+ID4gIAlkZXBlbmRzIG9uIFZJREVPX1hJTElOWA0KPiA+ID4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gPiA+IGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gPiA+ID4gaW5kZXggNGNk YzBiMS4uNjExOWEzNCAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS94aWxpbngvTWFrZWZpbGUNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94 aWxpbngvTWFrZWZpbGUNCj4gPiA+ID4gQEAgLTMsNSArMyw2IEBADQo+ID4gPiA+ICB4aWxpbngt dmlkZW8tb2JqcyArPSB4aWxpbngtZG1hLm8geGlsaW54LXZpcC5vIHhpbGlueC12aXBwLm8NCj4g PiA+ID4NCj4gPiA+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlgpICs9IHhpbGlueC12aWRl by5vDQo+ID4gPiA+ICtvYmotJChDT05GSUdfVklERU9fWElMSU5YX0NTSTJSWFNTKSArPSB4aWxp bngtY3NpMnJ4c3Mubw0KPiA+ID4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9UUEcpICs9 IHhpbGlueC10cGcubw0KPiA+ID4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9WVEMpICs9 IHhpbGlueC12dGMubw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS94aWxpbngveGlsaW54LWNzaTJyeHNzLmMNCj4gPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS94aWxpbngveGlsaW54LWNzaTJyeHNzLmMNCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiA+ID4gaW5kZXggMDAwMDAwMC4uNWFjY2YwMQ0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1jc2kycnhz cy5jDQo+ID4gPiA+IEBAIC0wLDAgKzEsMTYwOSBAQA0KPiA+ID4gPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICogRHJpdmVyIGZv ciBYaWxpbnggTUlQSSBDU0kyIFJ4IFN1YnN5c3RlbQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAq IENvcHlyaWdodCAoQykgMjAxNiAtIDIwMTkgWGlsaW54LCBJbmMuDQo+ID4gPiA+ICsgKg0KPiA+ ID4gPiArICogQ29udGFjdHM6IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhpbGlueC5jb20+ DQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvY2xr Lmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiA+ID4gKyNpbmNsdWRl IDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4N Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxp bnV4L29mLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+DQo+ID4gPiA+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGlu dXgvdjRsMi1zdWJkZXYuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC94aWxpbngtdjRsMi1j b250cm9scy5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3hpbGlueC12NGwyLWV2ZW50cy5o Pg0KPiA+ID4gPiArI2luY2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPg0KPiA+ID4gPiArI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRs Mi1jdHJscy5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCj4gPiA+ ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPG1l ZGlhL3Y0bDItc3ViZGV2Lmg+DQo+ID4gPiA+ICsjaW5jbHVkZSAieGlsaW54LXZpcC5oIg0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKiBSZWdpc3RlciByZWdpc3RlciBtYXAgKi8NCj4gPiA+ID4gKyNk ZWZpbmUgWENTSV9DQ1JfT0ZGU0VUCQkweDAwDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfQ0NSX1NP RlRSRVNFVAlCSVQoMSkNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9DQ1JfRU5BQkxFCQlCSVQoMCkN Cj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX1BDUl9PRkZTRVQJCTB4MDQNCj4gPiA+ ID4gKyNkZWZpbmUgWENTSV9QQ1JfTUFYTEFORVNfTUFTSwlHRU5NQVNLKDQsIDMpDQo+ID4gPiA+ ICsjZGVmaW5lIFhDU0lfUENSX0FDVExBTkVTX01BU0sJR0VOTUFTSygxLCAwKQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfQ1NSX09GRlNFVAkJMHgxMA0KPiA+ID4gPiArI2RlZmlu ZSBYQ1NJX0NTUl9QS1RDTlQJCUdFTk1BU0soMzEsIDE2KQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJ X0NTUl9TUEZJRk9GVUxMCUJJVCgzKQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0NTUl9TUEZJRk9O RQlCSVQoMikNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9DU1JfU0xCRgkJQklUKDEpDQo+ID4gPiA+ ICsjZGVmaW5lIFhDU0lfQ1NSX1JJUENECQlCSVQoMCkNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2Rl ZmluZSBYQ1NJX0dJRVJfT0ZGU0VUCTB4MjANCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9HSUVSX0dJ RQkJQklUKDApDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9JU1JfT0ZGU0VUCQkw eDI0DQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfSUVSX09GRlNFVAkJMHgyOA0KPiA+ID4gPiArDQo+ ID4gPiA+ICsjZGVmaW5lIFhDU0lfSVNSX0ZSCQlCSVQoMzEpDQo+ID4gPiA+ICsjZGVmaW5lIFhD U0lfSVNSX1ZDWEZFCQlCSVQoMzApDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1dDQwkJQklU KDIyKQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0lTUl9JTEMJCUJJVCgyMSkNCj4gPiA+ID4gKyNk ZWZpbmUgWENTSV9JU1JfU1BGSUZPRglCSVQoMjApDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfSVNS X1NQRklGT05FCUJJVCgxOSkNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9JU1JfU0xCRgkJQklUKDE4 KQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0lTUl9TVE9QCQlCSVQoMTcpDQo+ID4gPiA+ICsjZGVm aW5lIFhDU0lfSVNSX1NPVEVSUgkJQklUKDEzKQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0lTUl9T T1RTWU5DRVJSCUJJVCgxMikNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9JU1JfRUNDMkJFUlIJQklU KDExKQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0lTUl9FQ0MxQkVSUglCSVQoMTApDQo+ID4gPiA+ ICsjZGVmaW5lIFhDU0lfSVNSX0NSQ0VSUgkJQklUKDkpDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lf SVNSX0RBVEFJREVSUglCSVQoOCkNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMzRlNZTkNF UlIJQklUKDcpDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1ZDM0ZMVkxFUlIJQklUKDYpDQo+ ID4gPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1ZDMkZTWU5DRVJSCUJJVCg1KQ0KPiA+ID4gPiArI2Rl ZmluZSBYQ1NJX0lTUl9WQzJGTFZMRVJSCUJJVCg0KQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0lT Ul9WQzFGU1lOQ0VSUglCSVQoMykNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMxRkxWTEVS UglCSVQoMikNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMwRlNZTkNFUlIJQklUKDEpDQo+ ID4gPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1ZDMEZMVkxFUlIJQklUKDApDQo+ID4gPiA+ICsNCj4g PiA+ID4gKyNkZWZpbmUgWENTSV9JTlRSX1BST1RfTUFTSwkoWENTSV9JU1JfVkMzRlNZTkNFUlIg fA0KPiA+ID4gCVhDU0lfSVNSX1ZDM0ZMVkxFUlIgfFwNCj4gPiA+ID4gKwkJCQkgWENTSV9JU1Jf VkMyRlNZTkNFUlIgfA0KPiA+ID4gWENTSV9JU1JfVkMyRkxWTEVSUiB8XA0KPiA+ID4gPiArCQkJ CSBYQ1NJX0lTUl9WQzFGU1lOQ0VSUiB8DQo+ID4gPiBYQ1NJX0lTUl9WQzFGTFZMRVJSIHxcDQo+ ID4gPiA+ICsJCQkJIFhDU0lfSVNSX1ZDMEZTWU5DRVJSIHwNCj4gPiA+IAlYQ1NJX0lTUl9WQzBG TFZMRVJSIHxcDQo+ID4gPiA+ICsJCQkJIFhDU0lfSVNSX1ZDWEZFKQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsjZGVmaW5lIFhDU0lfSU5UUl9QS1RMVkxfTUFTSwkoWENTSV9JU1JfRUNDMkJFUlIgfA0K PiA+ID4gWENTSV9JU1JfRUNDMUJFUlIgfFwNCj4gPiA+ID4gKwkJCQkgWENTSV9JU1JfQ1JDRVJS IHwgWENTSV9JU1JfREFUQUlERVJSKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lf SU5UUl9EUEhZX01BU0sJKFhDU0lfSVNSX1NPVEVSUiB8DQo+ID4gPiBYQ1NJX0lTUl9TT1RTWU5D RVJSKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfSU5UUl9TUEtUX01BU0sJKFhD U0lfSVNSX1NQRklGT0YgfA0KPiBYQ1NJX0lTUl9TUEZJRk9ORSkNCj4gPiA+ID4gKw0KPiA+ID4g PiArI2RlZmluZSBYQ1NJX0lOVFJfRVJSX01BU0sJKFhDU0lfSVNSX1dDQyB8IFhDU0lfSVNSX0lM QyB8DQo+ID4gPiBYQ1NJX0lTUl9TTEJGIHxcDQo+ID4gPiA+ICsJCQkJIFhDU0lfSVNSX1NUT1Ap DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9JTlRSX0ZSQU1FUkNWRF9NQVNLCShY Q1NJX0lTUl9GUikNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0lTUl9BTExJTlRS X01BU0sJKFhDU0lfSU5UUl9QUk9UX01BU0sgfA0KPiA+ID4gWENTSV9JTlRSX1BLVExWTF9NQVNL IHxcDQo+ID4gPiA+ICsJCQkJIFhDU0lfSU5UUl9EUEhZX01BU0sgfA0KPiA+ID4gWENTSV9JTlRS X1NQS1RfTUFTSyB8XA0KPiA+ID4gPiArCQkJCSBYQ1NJX0lOVFJfRVJSX01BU0sgfA0KPiA+ID4g WENTSV9JTlRSX0ZSQU1FUkNWRF9NQVNLKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKg0KPiA+ID4g PiArICogUmVtb3ZlZCBWQ1hGRSBtYXNrIGFzIGl0IGRvZXNuJ3QgZXhpc3QgaW4gSUVSDQo+ID4g PiA+ICsgKiBSZW1vdmVkIFNUT1Agc3RhdGUgaXJxIGFzIHRoaXMgd2lsbCBrZWVwIGRyaXZlciBp biBpcnEgaGFuZGxlciBvbmx5DQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9J RVJfSU5UUl9NQVNLCShYQ1NJX0lTUl9BTExJTlRSX01BU0sgJlwNCj4gPiA+ID4gKwkJCQkgfihY Q1NJX0lTUl9TVE9QIHwgWENTSV9JU1JfVkNYRkUpKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVm aW5lIFhDU0lfU1BLVFJfT0ZGU0VUCTB4MzANCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9TUEtUUl9E QVRBCQlHRU5NQVNLKDIzLCA4KQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX1NQS1RSX1ZDCQlHRU5N QVNLKDcsIDYpDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfU1BLVFJfRFQJCUdFTk1BU0soNSwgMCkN Cj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX1ZDWFJfT0ZGU0VUCTB4MzQNCj4gPiA+ ID4gKyNkZWZpbmUgWENTSV9WQ1hSX1ZDRVJSCQlHRU5NQVNLKDIzLCAwKQ0KPiA+ID4gPiArI2Rl ZmluZSBYQ1NJX1ZDWFJfVkNTVEFSVAk0DQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfVkNYUl9WQ0VO RAkJMTUNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9WQ1hSX0ZTWU5DRVJSCUJJVCgxKQ0KPiA+ID4g PiArI2RlZmluZSBYQ1NJX1ZDWFJfRkxWTEVSUglCSVQoMCkNCj4gPiA+ID4gKw0KPiA+ID4gPiAr I2RlZmluZSBYQ1NJX0NMS0lORlJfT0ZGU0VUCTB4M0MNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9D TEtJTkZSX1NUT1AJQklUKDEpDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9ETFhJ TkZSX09GRlNFVAkweDQwDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfRExYSU5GUl9TVE9QCUJJVCg1 KQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0RMWElORlJfU09URVJSCUJJVCgxKQ0KPiA+ID4gPiAr I2RlZmluZSBYQ1NJX0RMWElORlJfU09UU1lOQ0VSUglCSVQoMCkNCj4gPiA+ID4gKyNkZWZpbmUg WENTSV9NQVhETF9DT1VOVAkweDQNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX1ZD WElORjFSX09GRlNFVAkJMHg2MA0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX1ZDWElORjFSX0xJTkVD T1VOVAkJR0VOTUFTSygzMSwgMTYpDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfVkNYSU5GMVJfTElO RUNPVU5UX1NISUZUCTE2DQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfVkNYSU5GMVJfQllURUNPVU5U CQlHRU5NQVNLKDE1LCAwKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfVkNYSU5G MlJfT0ZGU0VUCTB4NjQNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9WQ1hJTkYyUl9EVAlHRU5NQVNL KDUsIDApDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfTUFYVkNYX0NPVU5UCTE2DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKy8qDQo+ID4gPiA+ICsgKiBUaGUgY29yZSB0YWtlcyBsZXNzIHRoYW4gMTAwIHZp ZGVvIGNsb2NrIGN5Y2xlcyB0byByZXNldC4NCj4gPiA+ID4gKyAqIFNvIGNob29zaW5nIGEgdGlt ZW91dCB2YWx1ZSBsYXJnZXIgdGhhbiB0aGlzLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICsjZGVm aW5lIFhDU0lfVElNRU9VVF9WQUwJMTAwMCAvKiB1cyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsv KiBNYXhpbXVtIHNob3J0IHBhY2tldCBldmVudHMgKi8NCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9N QVhfU1BLVF9FVkVOVAk2NA0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICogU2lu ayBwYWQgY29ubmVjdGVkIHRvIHNlbnNvciBzb3VyY2UgcGFkLg0KPiA+ID4gPiArICogU291cmNl IHBhZCBjb25uZWN0ZWQgdG8gbmV4dCBtb2R1bGUgbGlrZSBkZW1vc2FpYy4NCj4gPiA+ID4gKyAq Lw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX01FRElBX1BBRFMJCTINCj4gPiA+ID4gKyNkZWZpbmUg WENTSV9ERUZBVUxUX1dJRFRICTE5MjANCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9ERUZBVUxUX0hF SUdIVAkxMDgwDQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIE1heCBzdHJpbmcgbGVuZ3RoIGZvciBD U0kgRGF0YSB0eXBlIHN0cmluZyAqLw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX1BYTEZNVF9TVFJM RU5fTUFYCTE2DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFRoaXMgcmFuZ2UgaXMgdGhlIHRvbGVy YW5jZSBmb3IgRFBIWSBjbG9jayBvZiAyMDAgTUh6ICovDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lf RFBIWV9DTEtfTUlOCTE5NzAwMDAwMDAwMFVMDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfRFBIWV9D TEtfTUFYCTIwMzAwMDAwMDAwMFVMDQo+ID4gPg0KPiA+ID4gQ291bGQgeW91IHNoYXJlIHdoZXJl IHRoaXMgcmFuZ2UgY29tZXMgZnJvbT8gSXMgaXQgZGVmaW5lZCBzb21ld2hlcmUsDQo+ID4gPiBv ciBmcm9tIHRlc3Q/DQo+ID4gPg0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0RQSFlfQ0xLX1JFUQky MDAwMDAwMDAwMDBVTA0KPiA+ID4NCj4gPiA+IFRoZSBjaGFuZ2Vsb2cgbWVudGlvbnMgdGhlcmUn bGwgYmUgYSBzZXBhcmF0ZSBwaHkgZHJpdmVyLiBUaGVuIHdvdWxkbid0DQo+ID4gPiB0aGUgcGh5 IGRyaXZlciBoYXZlIHRvIHNldCBvd24gY2xvY2s/IElmIHRoZSBwaHkgZHJpdmVyIGJlY29tZXMg YSBjaGlsZA0KPiA+ID4gZHJpdmVyIG9mIHRoaXMgc3Vic3lzdGVtIGRyaXZlciwgdGhlbiBpdCdz IGZpbmUgdG8gZG8gaXQgaGVyZS4NCj4gPiA+DQo+ID4NCj4gPiBUaGlzIENTSTIgUnggY29udHJv bGxlciBpcyB0aWVkIHRvIFhpbGlueCBEUEhZIGNvbnRyb2xsZXIuDQo+ID4gSXQgd291bGQgYmUg Z29vZCB0byBoYXZlIGEgc2VwYXJhdGUgcGh5IGRyaXZlciBmb3IgWGlsaW54IERQSFkgd2hpY2gg Y29udHJvbHMNCj4gdGhpcyBjbG9jay4NCj4gPiBCdXQgdGlsbCB0aGVuLCB0aGUgRFBIWSAyMDBN aHogY2xvY2sgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgdGhpcyBkcml2ZXIuDQo+ID4NCj4gPiBJ cyB0aGlzIG9rPw0KPiA+DQo+IA0KPiBUaGUgZHQgYmluZGluZyBzaG91bGRuJ3QgY2hhbmdlLCBi ZWNhdXNlIG90aGVyd2lzZSBpdCBtZWFucyB0aGUgY3VycmVudA0KPiBkdCBiaW5kaW5nIGlzIGlu Y29ycmVjdC4NCj4gDQoNClRoaXMgd2lsbCBiZSByZW1vdmVkIGZyb20gaGVyZSBhcyBpdCBpcyBw YXJ0IG9mIERQSFkgZHJpdmVyLiANClRoZSBEUEhZIGRyaXZlciBiaW5kaW5nIHdpbGwgYmUgYWRk ZWQgdG8gQ1NJUnggZHQgbm9kZSBhcyBhIHJlcXVpcmVkIHByb3BlcnR5IGxhdGVyLiANCg0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKiBNSVBJIENTSTIgRGF0YSBUeXBlcyBmcm9tIHNwZWMgKi8NCj4g PiA+ID4gKyNkZWZpbmUgWENTSV9EVF9ZVVY0MjI4QgkweDFFDQo+ID4gPiA+ICsjZGVmaW5lIFhD U0lfRFRfWVVWNDIyMTBCCTB4MUYNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I0NDQJCTB4 MjANCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I1NTUJCTB4MjENCj4gPiA+ID4gKyNkZWZp bmUgWENTSV9EVF9SR0I1NjUJCTB4MjINCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I2NjYJ CTB4MjMNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I4ODgJCTB4MjQNCj4gPiA+ID4gKyNk ZWZpbmUgWENTSV9EVF9SQVc2CQkweDI4DQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXNwkJ MHgyOQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0RUX1JBVzgJCTB4MkENCj4gPiA+ID4gKyNkZWZp bmUgWENTSV9EVF9SQVcxMAkJMHgyQg0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0RUX1JBVzEyCQkw eDJDDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXMTQJCTB4MkQNCj4gPiA+ID4gKyNkZWZp bmUgWENTSV9EVF9SQVcxNgkJMHgyRQ0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX0RUX1JBVzIwCQkw eDJGDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9WQ1hfU1RBUlQJCTQNCj4gPiA+ ID4gKyNkZWZpbmUgWENTSV9NQVhfVkMJCTQNCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9NQVhfVkNY CQkxNg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfTkVYVFJFR19PRkZTRVQJNA0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKiBCYXllciBwYXR0ZXJuIGZvciBSQVcgZGF0YSAqLw0KPiA+ ID4gPiArI2RlZmluZSBYQ1NJX0JBWUVSX1JHR0IJCTANCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9C QVlFUl9CR0dSCQkxDQo+ID4gPiA+ICsjZGVmaW5lIFhDU0lfQkFZRVJfR0JSRwkJMg0KPiA+ID4g PiArI2RlZmluZSBYQ1NJX0JBWUVSX0dSQkcJCTMNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogVGhl cmUgYXJlIDIgZXZlbnRzIGZyYW1lIHN5bmMgYW5kIGZyYW1lIGxldmVsIGVycm9yIHBlciBWQyAq Lw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX1ZDWF9OVU1fRVZFTlRTCSgoWENTSV9NQVhfVkNYIC0N Cj4gWENTSV9NQVhfVkMpICogMikNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAq IE1hY3JvIHRvIHJldHVybiAidHJ1ZSIgb3IgImZhbHNlIiBzdHJpbmcgaWYgYml0IGlzIHNldA0K PiA+ID4gPiArICovDQo+ID4gPg0KPiA+ID4gU2luZ2xlIGxpbmUgY29tbWVudCB3b3VsZCBiZSBm aW5lLg0KPiA+DQo+ID4gQWdyZWUuIFdpbGwgdXBkYXRlIGl0IGluIG5leHQgdmVyc2lvbi4NCj4g Pg0KPiA+ID4NCj4gPiA+ID4gKyNkZWZpbmUgWENTSV9HRVRfQklUU0VUX1NUUih2YWwsIG1hc2sp CSh2YWwpICYgKG1hc2spID8gInRydWUiIDoNCj4gImZhbHNlIg0KPiA+ID4gPiArDQo+ID4gPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4Y3NpMnJ4c3Nfb2ZfaWRfdGFibGVb XSA9IHsNCj4gPiA+ID4gKwl7IC5jb21wYXRpYmxlID0gInhsbngsbWlwaS1jc2kyLXJ4LXN1YnN5 c3RlbS00LjAiLH0sDQo+ID4gPiA+ICsJeyB9DQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgeGNzaTJyeHNzX29mX2lkX3RhYmxlKTsNCj4gPiA+ID4gKw0KPiA+ ID4NCj4gPiA+IFRoaXMgaXMgYSBsaXR0bGUgdG9vIGZhciBmcm9tIHdoZXJlIHRoaXMgaXMgdXNl ZC4gOi0pIEknZCBtb3ZlIGl0DQo+ID4gPiB0byBjbG9zZXIuDQo+ID4NCj4gPiBPayB3aWxsIG1v dmUgaXQgaW4gbmV4dCByZXZpc2lvbi4NCj4gPg0KPiA+ID4NCj4gPiA+ID4gKy8qKg0KPiA+ID4g PiArICogc3RydWN0IHhjc2kycnhzc19ldmVudCAtIEV2ZW50IGxvZyBzdHJ1Y3R1cmUNCj4gPiA+ ID4gKyAqIEBtYXNrOiBFdmVudCBtYXNrDQo+ID4gPiA+ICsgKiBAbmFtZTogTmFtZSBvZiB0aGUg ZXZlbnQNCj4gPiA+ID4gKyAqIEBjb3VudGVyOiBDb3VudCBudW1iZXIgb2YgZXZlbnRzDQo+ID4g PiA+ICsgKi8NCj4gPiA+ID4gK3N0cnVjdCB4Y3NpMnJ4c3NfZXZlbnQgew0KPiA+ID4gPiArCXUz MiBtYXNrOw0KPiA+ID4gPiArCWNvbnN0IGNoYXIgKiBjb25zdCBuYW1lOw0KPiA+ID4NCj4gPiA+ IE5pdC4gZXh0cmEgc3BhY2UgYWZ0ZXIgJyonLg0KPiA+DQo+ID4gV2lsbCBmaXggaW4gbmV4dCB2 ZXJzaW9uLg0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCXVuc2lnbmVkIGludCBjb3VudGVyOw0KPiA+ ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAqIHN0cnVjdCB4Y3Np MnJ4c3NfY29yZSAtIENvcmUgY29uZmlndXJhdGlvbiBDU0kyIFJ4IFN1YnN5c3RlbSBkZXZpY2UN Cj4gPiA+IHN0cnVjdHVyZQ0KPiA+ID4gPiArICogQGRldjogUGxhdGZvcm0gc3RydWN0dXJlDQo+ ID4gPiA+ICsgKiBAaW9tZW06IEJhc2UgYWRkcmVzcyBvZiBzdWJzeXN0ZW0NCj4gPiA+ID4gKyAq IEBpcnE6IHJlcXVlc3RlZCBpcnEgbnVtYmVyDQo+ID4gPiA+ICsgKiBAZW5hYmxlX2FjdGl2ZV9s YW5lczogSWYgbnVtYmVyIG9mIGFjdGl2ZSBsYW5lcyBjYW4gYmUgbW9kaWZpZWQNCj4gPiA+ID4g KyAqIEBtYXhfbnVtX2xhbmVzOiBNYXhpbXVtIG51bWJlciBvZiBsYW5lcyBwcmVzZW50DQo+ID4g PiA+ICsgKiBAdmZiOiBWaWRlbyBGb3JtYXQgQnJpZGdlIGVuYWJsZWQgb3Igbm90DQo+ID4gPiA+ ICsgKiBAZGF0YXR5cGU6IERhdGEgdHlwZSBmaWx0ZXINCj4gPiA+ID4gKyAqIEBiYXllcjogYmF5 ZXIgcGF0dGVybg0KPiA+ID4gPiArICogQGV2ZW50czogU3RydWN0dXJlIHRvIG1haW50YWluIGV2 ZW50IGxvZ3MNCj4gPiA+ID4gKyAqIEB2Y3hfZXZlbnRzOiBTdHJ1Y3R1cmUgdG8gbWFpbnRhaW4g VkNYIGV2ZW50IGxvZ3MNCj4gPiA+ID4gKyAqIEBlbl92Y3g6IElmIG1vcmUgdGhhbiA0IFZDIGFy ZSBlbmFibGVkDQo+ID4gPiA+ICsgKiBAZW5fY3NpX3YyMDogSWYgQ1NJIHYyLjAgaXMgZW5hYmxl ZA0KPiA+ID4gPiArICogQGxpdGVfYWNsazogQVhJNC1MaXRlIGludGVyZmFjZSBjbG9jaw0KPiA+ ID4gPiArICogQHZpZGVvX2FjbGs6IFZpZGVvIGNsb2NrDQo+ID4gPiA+ICsgKiBAZHBoeV9jbGtf MjAwTTogMjAwTUh6IERQSFkgY2xvY2sNCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3RydWN0IHhj c2kycnhzc19jb3JlIHsNCj4gPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gPiA+ICsJ dm9pZCBfX2lvbWVtICppb21lbTsNCj4gPiA+ID4gKwlpbnQgaXJxOw0KPiA+ID4gPiArCWJvb2wg ZW5hYmxlX2FjdGl2ZV9sYW5lczsNCj4gPiA+ID4gKwl1MzIgbWF4X251bV9sYW5lczsNCj4gPiA+ ID4gKwlib29sIHZmYjsNCj4gPiA+ID4gKwl1MzIgZGF0YXR5cGU7DQo+ID4gPiA+ICsJdTMyIGJh eWVyOw0KPiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3NfZXZlbnQgKmV2ZW50czsNCj4gPiA+ID4g KwlzdHJ1Y3QgeGNzaTJyeHNzX2V2ZW50ICp2Y3hfZXZlbnRzOw0KPiA+ID4gPiArCWJvb2wgZW5f dmN4Ow0KPiA+ID4gPiArCWJvb2wgZW5fY3NpX3YyMDsNCj4gPiA+ID4gKwlzdHJ1Y3QgY2xrICps aXRlX2FjbGs7DQo+ID4gPiA+ICsJc3RydWN0IGNsayAqdmlkZW9fYWNsazsNCj4gPiA+ID4gKwlz dHJ1Y3QgY2xrICpkcGh5X2Nsa18yMDBNOw0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArLyoqDQo+ID4gPiA+ICsgKiBzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlIC0gQ1NJMiBSeCBTdWJz eXN0ZW0gZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ID4gPiArICogQGNvcmU6IENvcmUgc3RydWN0dXJl IGZvciBNSVBJIENTSTIgUnggU3Vic3lzdGVtDQo+ID4gPiA+ICsgKiBAc3ViZGV2OiBUaGUgdjRs MiBzdWJkZXYgc3RydWN0dXJlDQo+ID4gPiA+ICsgKiBAY3RybF9oYW5kbGVyOiBjb250cm9sIGhh bmRsZXINCj4gPiA+ID4gKyAqIEBmb3JtYXQ6IEFjdGl2ZSBWNEwyIGZvcm1hdHMgb24gZWFjaCBw YWQNCj4gPiA+ID4gKyAqIEBldmVudDogSG9sZHMgdGhlIHNob3J0IHBhY2tldCBldmVudA0KPiA+ ID4gPiArICogQGxvY2s6IG11dGV4IGZvciBzZXJpYWxpemluZyBvcGVyYXRpb25zDQo+ID4gPg0K PiA+ID4gSXQgbWF5IGJlIGp1c3QgbWUsIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGF0IGl0IHdhbnRz IHRvIHNlcmlhbGl6ZS4NCj4gPiA+IFRoZSBjb21tZW50IGJldHRlciBkZXNjcmliZSB3aGF0IHJl c291cmNlIGl0IHByb3RlY3RzLg0KPiA+DQo+ID4gT2sgd2lsbCBtZW50aW9uIHRoYXQgaW4gdGhl IG5leHQgcmV2aXNpb24uDQo+ID4gPg0KPiA+ID4gPiArICogQHBhZHM6IG1lZGlhIHBhZHMNCj4g PiA+ID4gKyAqIEBzdHJlYW1pbmc6IEZsYWcgZm9yIHN0b3Jpbmcgc3RyZWFtaW5nIHN0YXRlDQo+ ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGRldmlj ZSBkcml2ZXIgcmVsYXRlZCBwYXJhbWV0ZXJzDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0cnVj dCB4Y3NpMnJ4c3Nfc3RhdGUgew0KPiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3NfY29yZSBjb3Jl Ow0KPiA+ID4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7DQo+ID4gPiA+ICsJc3RydWN0 IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsNCj4gPiA+ID4gKwlzdHJ1Y3QgdjRsMl9t YnVzX2ZyYW1lZm10IGZvcm1hdDsNCj4gPiA+ID4gKwlzdHJ1Y3QgdjRsMl9ldmVudCBldmVudDsN Cj4gPiA+ID4gKwkvKiB1c2VkIHRvIHNlcmlhbGl6ZSB2NGwyIG9wZXJhdGlvbnMgKi8NCj4gPiA+ ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4gPiA+ID4gKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZHNb WENTSV9NRURJQV9QQURTXTsNCj4gPiA+ID4gKwlib29sIHN0cmVhbWluZzsNCj4gPiA+ID4gK307 DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgeGNzaTJyeHNzX2V2ZW50IHhjc2ky cnhzc19ldmVudHNbXSA9IHsNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX0ZSLCAiRnJhbWUgUmVjZWl2 ZWQiLCAwIH0sDQo+ID4gPiA+ICsJeyBYQ1NJX0lTUl9WQ1hGRSwgIlZDWCBGcmFtZSBFcnJvcnMi LCAwIH0sDQo+ID4gPiA+ICsJeyBYQ1NJX0lTUl9XQ0MsICJXb3JkIENvdW50IEVycm9ycyIsIDAg fSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX0lMQywgIkludmFsaWQgTGFuZSBDb3VudCBFcnJvciIs IDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX1NQRklGT0YsICJTaG9ydCBQYWNrZXQgRklGTyBP dmVyRmxvdyBFcnJvciIsIDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX1NQRklGT05FLCAiU2hv cnQgUGFja2V0IEZJRk8gTm90IEVtcHR5IiwgMCB9LA0KPiA+ID4gPiArCXsgWENTSV9JU1JfU0xC RiwgIlN0cmVhbWxpbmUgQnVmZmVyIEZ1bGwgRXJyb3IiLCAwIH0sDQo+ID4gPiA+ICsJeyBYQ1NJ X0lTUl9TVE9QLCAiTGFuZSBTdG9wIFN0YXRlIiwgMCB9LA0KPiA+ID4gPiArCXsgWENTSV9JU1Jf U09URVJSLCAiU09UIEVycm9yIiwgMCB9LA0KPiA+ID4gPiArCXsgWENTSV9JU1JfU09UU1lOQ0VS UiwgIlNPVCBTeW5jIEVycm9yIiwgMCB9LA0KPiA+ID4gPiArCXsgWENTSV9JU1JfRUNDMkJFUlIs ICIyIEJpdCBFQ0MgVW5yZWNvdmVyYWJsZSBFcnJvciIsIDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lf SVNSX0VDQzFCRVJSLCAiMSBCaXQgRUNDIFJlY292ZXJhYmxlIEVycm9yIiwgMCB9LA0KPiA+ID4g PiArCXsgWENTSV9JU1JfQ1JDRVJSLCAiQ1JDIEVycm9yIiwgMCB9LA0KPiA+ID4gPiArCXsgWENT SV9JU1JfREFUQUlERVJSLCAiRGF0YSBJZCBFcnJvciIsIDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lf SVNSX1ZDM0ZTWU5DRVJSLCAiVmlydHVhbCBDaGFubmVsIDMgRnJhbWUgU3luYyBFcnJvciIsIDAg fSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX1ZDM0ZMVkxFUlIsICJWaXJ0dWFsIENoYW5uZWwgMyBG cmFtZSBMZXZlbCBFcnJvciIsIDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX1ZDMkZTWU5DRVJS LCAiVmlydHVhbCBDaGFubmVsIDIgRnJhbWUgU3luYyBFcnJvciIsIDAgfSwNCj4gPiA+ID4gKwl7 IFhDU0lfSVNSX1ZDMkZMVkxFUlIsICJWaXJ0dWFsIENoYW5uZWwgMiBGcmFtZSBMZXZlbCBFcnJv ciIsIDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX1ZDMUZTWU5DRVJSLCAiVmlydHVhbCBDaGFu bmVsIDEgRnJhbWUgU3luYyBFcnJvciIsIDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX1ZDMUZM VkxFUlIsICJWaXJ0dWFsIENoYW5uZWwgMSBGcmFtZSBMZXZlbCBFcnJvciIsIDAgfSwNCj4gPiA+ ID4gKwl7IFhDU0lfSVNSX1ZDMEZTWU5DRVJSLCAiVmlydHVhbCBDaGFubmVsIDAgRnJhbWUgU3lu YyBFcnJvciIsIDAgfSwNCj4gPiA+ID4gKwl7IFhDU0lfSVNSX1ZDMEZMVkxFUlIsICJWaXJ0dWFs IENoYW5uZWwgMCBGcmFtZSBMZXZlbCBFcnJvciIsIDAgfQ0KPiA+ID4gPiArfTsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArI2RlZmluZSBYQ1NJX05VTV9FVkVOVFMJCUFSUkFZX1NJWkUoeGNzaTJyeHNz X2V2ZW50cykNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgeGNzaTJy eHNzX3N0YXRlICoNCj4gPiA+ID4gK3RvX3hjc2kycnhzc3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRl diAqc3ViZGV2KQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXJldHVybiBjb250YWluZXJfb2Yoc3Vi ZGV2LCBzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlLCBzdWJkZXYpOw0KPiA+ID4gPiArfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICogUmVnaXN0ZXIgcmVsYXRlZCBvcGVyYXRpb25z DQo+ID4gPiA+ICsgKi8NCj4gPiA+DQo+ID4gPiBUaGUgeGlsaW54LXZpcCBoYXMgc2FtZSBJTyBm dW5jdGlvbnMsIGJ1dCB1cCB0byB5b3UuDQo+ID4gPg0KPiA+ID4gPiArc3RhdGljIGlubGluZSB1 MzIgeGNzaTJyeHNzX3JlYWQoc3RydWN0IHhjc2kycnhzc19jb3JlICp4Y3NpMnJ4c3MsIHUzMg0K PiBhZGRyKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXJldHVybiBpb3JlYWQzMih4Y3NpMnJ4c3Mt PmlvbWVtICsgYWRkcik7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBp bmxpbmUgdm9pZCB4Y3NpMnJ4c3Nfd3JpdGUoc3RydWN0IHhjc2kycnhzc19jb3JlICp4Y3NpMnJ4 c3MsIHUzMg0KPiBhZGRyLA0KPiA+ID4gPiArCQkJCSAgIHUzMiB2YWx1ZSkNCj4gPiA+ID4gK3sN Cj4gPiA+ID4gKwlpb3dyaXRlMzIodmFsdWUsIHhjc2kycnhzcy0+aW9tZW0gKyBhZGRyKTsNCj4g PiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGlubGluZSB2b2lkIHhjc2kycnhz c19jbHIoc3RydWN0IHhjc2kycnhzc19jb3JlICp4Y3NpMnJ4c3MsIHUzMiBhZGRyLA0KPiA+ID4g PiArCQkJCSB1MzIgY2xyKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXhjc2kycnhzc193cml0ZSh4 Y3NpMnJ4c3MsIGFkZHIsDQo+ID4gPiA+ICsJCQl4Y3NpMnJ4c3NfcmVhZCh4Y3NpMnJ4c3MsIGFk ZHIpICYgfmNscik7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBpbmxp bmUgdm9pZCB4Y3NpMnJ4c3Nfc2V0KHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqeGNzaTJyeHNzLCB1 MzIgYWRkciwNCj4gPiA+ID4gKwkJCQkgdTMyIHNldCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwl4 Y3NpMnJ4c3Nfd3JpdGUoeGNzaTJyeHNzLCBhZGRyLA0KPiA+ID4gPiArCQkJeGNzaTJyeHNzX3Jl YWQoeGNzaTJyeHNzLCBhZGRyKSB8IHNldCk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKy8qKg0KPiA+ID4gPiArICogeGNzaTJyeHNzX2Nscl9hbmRfc2V0IC0gQ2xlYXIgYW5kIHNl dCB0aGUgcmVnaXN0ZXIgd2l0aCBhIGJpdG1hc2sNCj4gPiA+ID4gKyAqIEB4Y3NpMnJ4c3M6IFhp bGlueCBNSVBJIENTSTIgUnggU3Vic3lzdGVtIHN1YmRldiBjb3JlIHN0cnVjdA0KPiA+ID4gPiAr ICogQGFkZHI6IGFkZHJlc3Mgb2YgcmVnaXN0ZXINCj4gPiA+ID4gKyAqIEBjbHI6IGJpdG1hc2sg dG8gYmUgY2xlYXJlZA0KPiA+ID4gPiArICogQHNldDogYml0bWFzayB0byBiZSBzZXQNCj4gPiA+ ID4gKyAqDQo+ID4gPiA+ICsgKiBDbGVhciBhIGJpdChzKSBvZiBtYXNrIEBjbHIgaW4gdGhlIHJl Z2lzdGVyIGF0IGFkZHJlc3MgQGFkZHIsIHRoZW4gc2V0DQo+ID4gPiA+ICsgKiBhIGJpdChzKSBv ZiBtYXNrIEBzZXQgaW4gdGhlIHJlZ2lzdGVyIGFmdGVyLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3NfY2xyX2FuZF9zZXQoc3RydWN0IHhjc2kycnhzc19jb3Jl ICp4Y3NpMnJ4c3MsDQo+ID4gPiA+ICsJCQkJICB1MzIgYWRkciwgdTMyIGNsciwgdTMyIHNldCkN Cj4gPiA+ID4gK3sNCj4gPiA+ID4gKwl1MzIgcmVnOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmVn ID0geGNzaTJyeHNzX3JlYWQoeGNzaTJyeHNzLCBhZGRyKTsNCj4gPiA+ID4gKwlyZWcgJj0gfmNs cjsNCj4gPiA+ID4gKwlyZWcgfD0gc2V0Ow0KPiA+ID4gPiArCXhjc2kycnhzc193cml0ZSh4Y3Np MnJ4c3MsIGFkZHIsIHJlZyk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRp YyB2b2lkIHhjc2kycnhzc19lbmFibGUoc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlKQ0KPiA+ ID4gPiArew0KPiA+ID4gPiArCXhjc2kycnhzc19zZXQoY29yZSwgWENTSV9DQ1JfT0ZGU0VULCBY Q1NJX0NDUl9FTkFCTEUpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMg dm9pZCB4Y3NpMnJ4c3NfZGlzYWJsZShzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUpDQo+ID4g PiA+ICt7DQo+ID4gPiA+ICsJeGNzaTJyeHNzX2Nscihjb3JlLCBYQ1NJX0NDUl9PRkZTRVQsIFhD U0lfQ0NSX0VOQUJMRSk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2 b2lkIHhjc2kycnhzc19pbnRyX2VuYWJsZShzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUpDQo+ ID4gPiA+ICt7DQo+ID4gPiA+ICsJeGNzaTJyeHNzX2Nscihjb3JlLCBYQ1NJX0dJRVJfT0ZGU0VU LCBYQ1NJX0dJRVJfR0lFKTsNCj4gPiA+ID4gKwl4Y3NpMnJ4c3Nfd3JpdGUoY29yZSwgWENTSV9J RVJfT0ZGU0VULCBYQ1NJX0lFUl9JTlRSX01BU0spOw0KPiA+ID4gPiArCXhjc2kycnhzc19zZXQo Y29yZSwgWENTSV9HSUVSX09GRlNFVCwgWENTSV9HSUVSX0dJRSk7DQo+ID4gPiA+ICt9DQo+ID4g PiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2b2lkIHhjc2kycnhzc19pbnRyX2Rpc2FibGUoc3RydWN0 IHhjc2kycnhzc19jb3JlICpjb3JlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXhjc2kycnhzc19j bHIoY29yZSwgWENTSV9JRVJfT0ZGU0VULCBYQ1NJX0lFUl9JTlRSX01BU0spOw0KPiA+ID4gPiAr CXhjc2kycnhzc19jbHIoY29yZSwgWENTSV9HSUVSX09GRlNFVCwgWENTSV9HSUVSX0dJRSk7DQo+ ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogeGNzaTJyeHNz X3Jlc2V0IC0gRG9lcyBhIHNvZnQgcmVzZXQgb2YgdGhlIE1JUEkgQ1NJMiBSeCBTdWJzeXN0ZW0N Cj4gPiA+ID4gKyAqIEBjb3JlOiBDb3JlIFhpbGlueCBDU0kyIFJ4IFN1YnN5c3RlbSBzdHJ1Y3R1 cmUgcG9pbnRlcg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIENvcmUgdGFrZXMgbGVzcyB0aGFu IDEwMCB2aWRlbyBjbG9jayBjeWNsZXMgdG8gcmVzZXQuDQo+ID4gPiA+ICsgKiBTbyBhIGxhcmdl ciB0aW1lb3V0IHZhbHVlIGlzIGNob3NlbiBmb3IgbWFyZ2luLg0KPiA+ID4gPiArICoNCj4gPiA+ ID4gKyAqIFJldHVybjogMCAtIG9uIHN1Y2Nlc3MgT1IgLUVUSU1FIGlmIHJlc2V0IHRpbWVzIG91 dA0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc19yZXNldChzdHJ1 Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJdTMyIHRpbWVv dXQgPSBYQ1NJX1RJTUVPVVRfVkFMOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJeGNzaTJyeHNzX3Nl dChjb3JlLCBYQ1NJX0NDUl9PRkZTRVQsIFhDU0lfQ0NSX1NPRlRSRVNFVCk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwl3aGlsZSAoeGNzaTJyeHNzX3JlYWQoY29yZSwgWENTSV9DU1JfT0ZGU0VUKSAm IFhDU0lfQ1NSX1JJUENEKSB7DQo+ID4gPiA+ICsJCWlmICh0aW1lb3V0ID09IDApIHsNCj4gPiA+ ID4gKwkJCWRldl9lcnIoY29yZS0+ZGV2LCAic29mdCByZXNldCB0aW1lZCBvdXQhXG4iKTsNCj4g PiA+ID4gKwkJCXJldHVybiAtRVRJTUU7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKw0KPiA+ID4g PiArCQl0aW1lb3V0LS07DQo+ID4gPiA+ICsJCXVkZWxheSgxKTsNCj4gPiA+ID4gKwl9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwl4Y3NpMnJ4c3NfY2xyKGNvcmUsIFhDU0lfQ0NSX09GRlNFVCwgWENT SV9DQ1JfU09GVFJFU0VUKTsNCj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gK30NCj4gPiA+ ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiB4Y3NpMnJ4c3NfaXJxX2hhbmRsZXIgLSBJ bnRlcnJ1cHQgaGFuZGxlciBmb3IgQ1NJLTINCj4gPiA+ID4gKyAqIEBpcnE6IElSUSBudW1iZXIN Cj4gPiA+ID4gKyAqIEBkZXZfaWQ6IFBvaW50ZXIgdG8gZGV2aWNlIHN0YXRlDQo+ID4gPiA+ICsg Kg0KPiA+ID4gPiArICogSW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBhIGxpc3Qgb2YgZXZlbnQg Y291bnRlcnMgYXJlIHVwZGF0ZWQgZm9yDQo+ID4gPiA+ICsgKiBjb3JyZXNwb25kaW5nIGludGVy cnVwdHMuIFRoaXMgaXMgdXNlZnVsIHRvIGdldCBzdGF0dXMgLyBkZWJ1Zy4NCj4gPiA+ID4gKyAq IElmIHRoZSBzaG9ydCBwYWNrZXQgRklGTyBub3QgZW1wdHkgb3Igb3ZlcmZsb3cgaW50ZXJydXB0 IGlzIHJlY2VpdmVkDQo+ID4gPiA+ICsgKiBjYXB0dXJlIHRoZSBzaG9ydCBwYWNrZXQgYW5kIG5v dGlmeSBvZiBldmVudCBvY2N1cnJlbmNlDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogUmV0dXJu OiBJUlFfSEFORExFRCBhZnRlciBoYW5kbGluZyBpbnRlcnJ1cHRzDQo+ID4gPiA+ICsgKiAgICAg ICAgIElSUV9OT05FIGlzIG5vIGludGVycnVwdHMNCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3Rh dGljIGlycXJldHVybl90IHhjc2kycnhzc19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZf aWQpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqc3RhdGUg PSAoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqKWRldl9pZDsNCj4gPiA+ID4gKwlzdHJ1Y3QgeGNz aTJyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ID4gPiA+ICsJdTMyIHN0YXR1czsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCXN0YXR1cyA9IHhjc2kycnhzc19yZWFkKGNvcmUsIFhDU0lf SVNSX09GRlNFVCkgJg0KPiA+ID4gWENTSV9JU1JfQUxMSU5UUl9NQVNLOw0KPiA+ID4gPiArCWRl dl9kYmcoY29yZS0+ZGV2LCAiaW50ZXJydXB0IHN0YXR1cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsN Cj4gPiA+DQo+ID4gPiBTaG91bGRuJ3QgdGhpcyBiZSByYXRlLWxpbWl0ZWQ/IEkgbGV0IHlvdSBk ZWNpZGUuDQo+ID4NCj4gPiBSaWdodC4gSSB3aWxsIGFkZCB0aGF0IHRvIGFsbCBtZXNzYWdlcyBp biB0aGUgSVJRIGhhbmRsZXIuDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAo IXN0YXR1cykNCj4gPiA+ID4gKwkJcmV0dXJuIElSUV9OT05FOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJLyogUmVjZWl2ZWQgYSBzaG9ydCBwYWNrZXQgKi8NCj4gPiA+ID4gKwlpZiAoc3RhdHVzICYg WENTSV9JU1JfU1BGSUZPTkUpIHsNCj4gPiA+ID4gKwkJbWVtc2V0KCZzdGF0ZS0+ZXZlbnQsIDAs IHNpemVvZihzdGF0ZS0+ZXZlbnQpKTsNCj4gPiA+ID4gKwkJc3RhdGUtPmV2ZW50LnR5cGUgPSBW NEwyX0VWRU5UX1hMTlhDU0lSWF9TUEtUOw0KPiA+ID4gPiArCQkqKCh1MzIgKikoJnN0YXRlLT5l dmVudC51LmRhdGEpKSA9DQo+ID4gPiA+ICsJCQl4Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJX1NQ S1RSX09GRlNFVCk7DQo+ID4gPiA+ICsJCXY0bDJfc3ViZGV2X25vdGlmeV9ldmVudCgmc3RhdGUt PnN1YmRldiwgJnN0YXRlLT5ldmVudCk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJLyogU2hvcnQgcGFja2V0IEZJRk8gb3ZlcmZsb3cgKi8NCj4gPiA+ID4gKwlpZiAoc3RhdHVz ICYgWENTSV9JU1JfU1BGSUZPRikgew0KPiA+ID4gPiArCQlkZXZfYWxlcnQoY29yZS0+ZGV2LCAi U2hvcnQgcGFja2V0IEZJRk8gb3ZlcmZsb3dlZFxuIik7DQo+ID4gPiA+ICsJCW1lbXNldCgmc3Rh dGUtPmV2ZW50LCAwLCBzaXplb2Yoc3RhdGUtPmV2ZW50KSk7DQo+ID4gPiA+ICsJCXN0YXRlLT5l dmVudC50eXBlID0gVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU1BLVF9PVkY7DQo+ID4gPiA+ICsJCXY0 bDJfc3ViZGV2X25vdGlmeV9ldmVudCgmc3RhdGUtPnN1YmRldiwgJnN0YXRlLT5ldmVudCk7DQo+ ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyoNCj4gPiA+ID4gKwkgKiBTdHJlYW0g bGluZSBidWZmZXIgZnVsbA0KPiA+ID4gPiArCSAqIFRoaXMgbWVhbnMgdGhlcmUgaXMgYSBiYWNr cHJlc3N1cmUgZnJvbSBkb3duc3RyZWFtIElQDQo+ID4gPiA+ICsJICovDQo+ID4gPiA+ICsJaWYg KHN0YXR1cyAmIFhDU0lfSVNSX1NMQkYpIHsNCj4gPiA+ID4gKwkJZGV2X2FsZXJ0KGNvcmUtPmRl diwgIlN0cmVhbSBMaW5lIEJ1ZmZlciBGdWxsIVxuIik7DQo+ID4gPiA+ICsJCW1lbXNldCgmc3Rh dGUtPmV2ZW50LCAwLCBzaXplb2Yoc3RhdGUtPmV2ZW50KSk7DQo+ID4gPiA+ICsJCXN0YXRlLT5l dmVudC50eXBlID0gVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU0xCRjsNCj4gPiA+ID4gKwkJdjRsMl9z dWJkZXZfbm90aWZ5X2V2ZW50KCZzdGF0ZS0+c3ViZGV2LCAmc3RhdGUtPmV2ZW50KTsNCj4gPiA+ ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBJbmNyZW1lbnQgZXZlbnQgY291bnRlcnMg Ki8NCj4gPiA+ID4gKwlpZiAoc3RhdHVzICYgWENTSV9JU1JfQUxMSU5UUl9NQVNLKSB7DQo+ID4g PiA+ICsJCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWZvciAoaSA9IDA7 IGkgPCBYQ1NJX05VTV9FVkVOVFM7IGkrKykgew0KPiA+ID4gPiArCQkJaWYgKCEoc3RhdHVzICYg Y29yZS0+ZXZlbnRzW2ldLm1hc2spKQ0KPiA+ID4gPiArCQkJCWNvbnRpbnVlOw0KPiA+ID4gPiAr CQkJY29yZS0+ZXZlbnRzW2ldLmNvdW50ZXIrKzsNCj4gPiA+ID4gKwkJCWRldl9kYmcoY29yZS0+ ZGV2LCAiJXM6ICVkXG4iLCBjb3JlLT5ldmVudHNbaV0ubmFtZSwNCj4gPiA+ID4gKwkJCQljb3Jl LT5ldmVudHNbaV0uY291bnRlcik7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiAr CQlpZiAoc3RhdHVzICYgWENTSV9JU1JfVkNYRkUgJiYgY29yZS0+ZW5fdmN4KSB7DQo+ID4gPiA+ ICsJCQl1MzIgdmN4c3RhdHVzOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCQl2Y3hzdGF0dXMgPSB4 Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJX1ZDWFJfT0ZGU0VUKTsNCj4gPiA+ID4gKwkJCXZjeHN0 YXR1cyAmPSBYQ1NJX1ZDWFJfVkNFUlI7DQo+ID4gPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgWENT SV9WQ1hfTlVNX0VWRU5UUzsgaSsrKSB7DQo+ID4gPiA+ICsJCQkJaWYgKCEodmN4c3RhdHVzICYg Y29yZS0+dmN4X2V2ZW50c1tpXS5tYXNrKSkNCj4gPiA+ID4gKwkJCQkJY29udGludWU7DQo+ID4g PiA+ICsJCQkJY29yZS0+dmN4X2V2ZW50c1tpXS5jb3VudGVyKys7DQo+ID4gPiA+ICsJCQl9DQo+ ID4gPiA+ICsJCQl4Y3NpMnJ4c3Nfd3JpdGUoY29yZSwgWENTSV9WQ1hSX09GRlNFVCwgdmN4c3Rh dHVzKTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCXhj c2kycnhzc193cml0ZShjb3JlLCBYQ1NJX0lTUl9PRkZTRVQsIHN0YXR1cyk7DQo+ID4gPiA+ICsJ cmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0 aWMgdm9pZCB4Y3NpMnJ4c3NfcmVzZXRfZXZlbnRfY291bnRlcnMoc3RydWN0IHhjc2kycnhzc19z dGF0ZSAqc3RhdGUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJaW50IGk7DQo+ID4gPg0KPiA+ID4g Tml0LiB1bnNpZ25lZC4NCj4gPiA+DQo+ID4NCj4gPiBPay4NCj4gPg0KPiA+ID4gPiArDQo+ID4g PiA+ICsJZm9yIChpID0gMDsgaSA8IFhDU0lfTlVNX0VWRU5UUzsgaSsrKQ0KPiA+ID4gPiArCQlz dGF0ZS0+Y29yZS5ldmVudHNbaV0uY291bnRlciA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlp ZiAoc3RhdGUtPmNvcmUuZW5fdmN4KQ0KPiA+ID4NCj4gPiA+IEkgZG9uJ3Qga25vdyB3aGF0J3Mg cmVjb21tZW5lZCBzdHlsZSwgYnV0IGZvciBtdWx0aWxpbmUgc3RhdGVtZW50LA0KPiA+ID4gcHV0 dGluZyBicmFjZXMgc2VlbXMgYmV0dGVyIGZvciByZWFkYWJpbGl0eS4gVXAgdG8geW91Lg0KPiA+ ID4NCj4gPg0KPiA+IEkgZGlkbid0IGdldCBhbnkgY2hlY2twYXRjaCB3YXJuaW5ncyBmb3IgdGhp cyBzbyBrZXB0IGl0IGxpa2UgdGhpcy4NCj4gPiBPayBJIHdpbGwgYWRkIHRoZSBicmFjZXMuDQo+ ID4NCj4gPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IFhDU0lfVkNYX05VTV9FVkVOVFM7IGkrKykN Cj4gPiA+ID4gKwkJCXN0YXRlLT5jb3JlLnZjeF9ldmVudHNbaV0uY291bnRlciA9IDA7DQo+ID4g PiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFByaW50IGV2ZW50IGNvdW50ZXJzICovDQo+ ID4gPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3NfbG9nX2NvdW50ZXJzKHN0cnVjdCB4Y3NpMnJ4 c3Nfc3RhdGUgKnN0YXRlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nf Y29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiA+ID4gKwlpbnQgaTsNCj4gPiA+ID4gKw0K PiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBYQ1NJX05VTV9FVkVOVFM7IGkrKykgew0KPiA+ID4g PiArCQlpZiAoY29yZS0+ZXZlbnRzW2ldLmNvdW50ZXIgPiAwKQ0KPiA+ID4gPiArCQkJZGV2X2lu Zm8oY29yZS0+ZGV2LCAiJXMgZXZlbnRzOiAlZFxuIiwNCj4gPiA+ID4gKwkJCQkgY29yZS0+ZXZl bnRzW2ldLm5hbWUsDQo+ID4gPiA+ICsJCQkJIGNvcmUtPmV2ZW50c1tpXS5jb3VudGVyKTsNCj4g PiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoY29yZS0+ZW5fdmN4KQ0KPiA+ID4g PiArCQlmb3IgKGkgPSAwOyBpIDwgWENTSV9WQ1hfTlVNX0VWRU5UUzsgaSsrKSB7DQo+ID4gPiA+ ICsJCQlpZiAoY29yZS0+dmN4X2V2ZW50c1tpXS5jb3VudGVyID4gMCkNCj4gPiA+ID4gKwkJCQlk ZXZfaW5mbyhjb3JlLT5kZXYsDQo+ID4gPiA+ICsJCQkJCSAiVkMgJWQgRnJhbWUgJXMgZXJyIHZj eCBldmVudHM6ICVkXG4iLA0KPiA+ID4gPiArCQkJCQkgKGkgLyAyKSArIFhDU0lfVkNYX1NUQVJU LA0KPiA+ID4gPiArCQkJCQkgaSAmIDEgPyAiU3luYyIgOiAiTGV2ZWwiLA0KPiA+ID4gPiArCQkJ CQkgY29yZS0+dmN4X2V2ZW50c1tpXS5jb3VudGVyKTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiAr fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIHhjc2kycnhzc19sb2dfc3Rh dHVzIC0gTG9ncyB0aGUgc3RhdHVzIG9mIHRoZSBDU0ktMiBSZWNlaXZlcg0KPiA+ID4gPiArICog QHNkOiBQb2ludGVyIHRvIFY0TDIgc3ViZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ID4gPiArICoNCj4g PiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gcHJpbnRzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBYaWxp bnggTUlQSSBDU0ktMg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFJldHVybjogMCBvbiBzdWNj ZXNzDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX2xvZ19zdGF0 dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3Qg eGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3MgPSB0b194Y3NpMnJ4c3NzdGF0ZShzZCk7DQo+ID4g PiA+ICsJc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlID0gJnhjc2kycnhzcy0+Y29yZTsNCj4g PiA+ID4gKwl1bnNpZ25lZCBpbnQgcmVnLCBkYXRhLCBpLCBtYXhfdmM7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwltdXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4NCj4gPiA+IFRoaXMg bG9jayBzZWVtcyB0byBwcm90ZWN0IGFjY2VzcyB0byB4Y3NpMnJ4c3MuIElmIHNvLCBjb3VsZCB5 b3UgcGxlYXNlDQo+ID4gPiBjbGFyaWZ5IGluIHRoZSBsb2NrIGRlc2NyaXB0aW9uPw0KPiA+DQo+ ID4gWWVzIHdpbGwgdXBkYXRlIHRoZSBuYW1lIGluIHRoZSBuZXh0IHZlcnNpb24uDQo+ID4gPg0K PiA+ID4gPiArDQo+ID4gPiA+ICsJeGNzaTJyeHNzX2xvZ19jb3VudGVycyh4Y3NpMnJ4c3MpOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsJZGV2X2luZm8oY29yZS0+ZGV2LCAiKioqKiogQ29yZSBTdGF0 dXMgKioqKipcbiIpOw0KPiA+ID4gPiArCWRhdGEgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJ X0NTUl9PRkZTRVQpOw0KPiA+ID4gPiArCWRldl9pbmZvKGNvcmUtPmRldiwgIlNob3J0IFBhY2tl dCBGSUZPIEZ1bGwgPSAlc1xuIiwNCj4gPiA+ID4gKwkJIFhDU0lfR0VUX0JJVFNFVF9TVFIoZGF0 YSwgWENTSV9DU1JfU1BGSUZPRlVMTCkpOw0KPiA+ID4gPiArCWRldl9pbmZvKGNvcmUtPmRldiwg IlNob3J0IFBhY2tldCBGSUZPIE5vdCBFbXB0eSA9ICVzXG4iLA0KPiA+ID4gPiArCQkgWENTSV9H RVRfQklUU0VUX1NUUihkYXRhLCBYQ1NJX0NTUl9TUEZJRk9ORSkpOw0KPiA+ID4gPiArCWRldl9p bmZvKGNvcmUtPmRldiwgIlN0cmVhbSBsaW5lIGJ1ZmZlciBmdWxsID0gJXNcbiIsDQo+ID4gPiA+ ICsJCSBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfQ1NSX1NMQkYpKTsNCj4gPiA+ID4g KwlkZXZfaW5mbyhjb3JlLT5kZXYsICJTb2Z0IHJlc2V0L0NvcmUgZGlzYWJsZSBpbiBwcm9ncmVz cyA9ICVzXG4iLA0KPiA+ID4gPiArCQkgWENTSV9HRVRfQklUU0VUX1NUUihkYXRhLCBYQ1NJX0NT Ul9SSVBDRCkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogQ2xrICYgTGFuZSBJbmZvICAqLw0K PiA+ID4gPiArCWRldl9pbmZvKGNvcmUtPmRldiwgIioqKioqKioqIENsb2NrIExhbmUgSW5mbyAq KioqKioqKipcbiIpOw0KPiA+ID4gPiArCWRhdGEgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJ X0NMS0lORlJfT0ZGU0VUKTsNCj4gPiA+ID4gKwlkZXZfaW5mbyhjb3JlLT5kZXYsICJDbG9jayBM YW5lIGluIFN0b3AgU3RhdGUgPSAlc1xuIiwNCj4gPiA+ID4gKwkJIFhDU0lfR0VUX0JJVFNFVF9T VFIoZGF0YSwgWENTSV9DTEtJTkZSX1NUT1ApKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWRldl9p bmZvKGNvcmUtPmRldiwgIioqKioqKioqIERhdGEgTGFuZSBJbmZvICoqKioqKioqKlxuIik7DQo+ ID4gPiA+ICsJZGV2X2luZm8oY29yZS0+ZGV2LCAiTGFuZVx0U29UIEVycm9yXHRTb1QgU3luYyBF cnJvclx0U3RvcCBTdGF0ZVxuIik7DQo+ID4gPiA+ICsJcmVnID0gWENTSV9ETFhJTkZSX09GRlNF VDsNCj4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWENTSV9NQVhETF9DT1VOVDsgaSsrKSB7DQo+ ID4gPiA+ICsJCWRhdGEgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCByZWcpOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsJCWRldl9pbmZvKGNvcmUtPmRldiwgIiVkXHQlc1x0XHQlc1x0XHQlc1xuIiwgaSwN Cj4gPiA+ID4gKwkJCSBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfRExYSU5GUl9TT1RF UlIpLA0KPiA+ID4gPiArCQkJIFhDU0lfR0VUX0JJVFNFVF9TVFIoZGF0YSwNCj4gPiA+IFhDU0lf RExYSU5GUl9TT1RTWU5DRVJSKSwNCj4gPiA+ID4gKwkJCSBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRh dGEsIFhDU0lfRExYSU5GUl9TVE9QKSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmVnICs9IFhD U0lfTkVYVFJFR19PRkZTRVQ7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyog VmlydHVhbCBDaGFubmVsIEltYWdlIEluZm9ybWF0aW9uICovDQo+ID4gPiA+ICsJZGV2X2luZm8o Y29yZS0+ZGV2LCAiKioqKioqKioqKiBWaXJ0dWFsIENoYW5uZWwgSW5mbw0KPiA+ID4gKioqKioq KioqKioqXG4iKTsNCj4gPiA+ID4gKwlkZXZfaW5mbyhjb3JlLT5kZXYsICJWQ1x0TGluZSBDb3Vu dFx0Qnl0ZSBDb3VudFx0RGF0YSBUeXBlXG4iKTsNCj4gPiA+ID4gKwlpZiAoY29yZS0+ZW5fdmN4 KQ0KPiA+ID4gPiArCQltYXhfdmMgPSBYQ1NJX01BWF9WQ1g7DQo+ID4gPiA+ICsJZWxzZQ0KPiA+ ID4gPiArCQltYXhfdmMgPSBYQ1NJX01BWF9WQzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJlZyA9 IFhDU0lfVkNYSU5GMVJfT0ZGU0VUOw0KPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBtYXhfdmM7 IGkrKykgew0KPiA+ID4gPiArCQl1MzIgbGluZV9jb3VudCwgYnl0ZV9jb3VudCwgZGF0YV90eXBl Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCS8qIEdldCBsaW5lIGFuZCBieXRlIGNvdW50IGZyb20g VkNYSU5GUjEgUmVnaXN0ZXIgKi8NCj4gPiA+ID4gKwkJZGF0YSA9IHhjc2kycnhzc19yZWFkKGNv cmUsIHJlZyk7DQo+ID4gPiA+ICsJCWJ5dGVfY291bnQgPSBkYXRhICYgWENTSV9WQ1hJTkYxUl9C WVRFQ09VTlQ7DQo+ID4gPiA+ICsJCWxpbmVfY291bnQgPSBkYXRhICYgWENTSV9WQ1hJTkYxUl9M SU5FQ09VTlQ7DQo+ID4gPiA+ICsJCWxpbmVfY291bnQgPj49IFhDU0lfVkNYSU5GMVJfTElORUNP VU5UX1NISUZUOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCS8qIEdldCBkYXRhIHR5cGUgZnJvbSBW Q1hJTkZSMiBSZWdpc3RlciAqLw0KPiA+ID4gPiArCQlyZWcgKz0gWENTSV9ORVhUUkVHX09GRlNF VDsNCj4gPiA+ID4gKwkJZGF0YSA9IHhjc2kycnhzc19yZWFkKGNvcmUsIHJlZyk7DQo+ID4gPiA+ ICsJCWRhdGFfdHlwZSA9IGRhdGEgJiBYQ1NJX1ZDWElORjJSX0RUOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJCWRldl9pbmZvKGNvcmUtPmRldiwgIiVkXHQlZFx0XHQlZFx0XHQweCV4XG4iLCBpLCBs aW5lX2NvdW50LA0KPiA+ID4gPiArCQkJIGJ5dGVfY291bnQsIGRhdGFfdHlwZSk7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwkJLyogTW92ZSB0byBuZXh0IHBhaXIgb2YgVkMgSW5mbyByZWdpc3RlcnMg Ki8NCj4gPiA+ID4gKwkJcmVnICs9IFhDU0lfTkVYVFJFR19PRkZTRVQ7DQo+ID4gPiA+ICsJfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKy8qDQo+ID4gPiA+ICsgKiB4Y3NpMnJ4c3Nfc3Vic2NyaWJlX2V2ZW50IC0gU3Vic2NyaWJl IHRvIHRoZSBjdXN0b20gc2hvcnQgcGFja2V0DQo+ID4gPiA+ICsgKiByZWNlaXZlIGV2ZW50Lg0K PiA+ID4gPiArICogQHNkOiBWNEwyIFN1YiBkZXZpY2UNCj4gPiA+ID4gKyAqIEBmaDogVjRMMiBG aWxlIEhhbmRsZQ0KPiA+ID4gPiArICogQHN1YjogU3ViY3JpYmUgZXZlbnQgc3RydWN0dXJlDQo+ ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBldmVudHMgdG8g YmUgc3Vic2NyaWJlZC4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBGaXJzdCBpcyB0byByZWdp c3RlciBmb3IgcmVjZWl2aW5nIGEgZ2VuZXJpYyBzaG9ydCBwYWNrZXQuDQo+ID4gPiA+ICsgKiBU aGUgZ2VuZXJpYyBzaG9ydCBwYWNrZXRzIHJlY2VpdmVkIGFyZSBxdWV1ZWQgdXAgaW4gYSBGSUZP Lg0KPiA+ID4gPiArICogT24gcmVjZXB0aW9uIG9mIGEgZ2VuZXJpYyBzaG9ydCBwYWNrZXQsIGFu IGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkDQo+ID4gPiA+ICsgKiB3aXRoIHRoZSBzaG9ydCBwYWNr ZXQgY29udGVudHMgY29waWVkIHRvIGl0cyBkYXRhIGFyZWEuDQo+ID4gPiA+ICsgKiBBcHBsaWNh dGlvbiBzdWJzY3JpYmVkIHRvIHRoaXMgZXZlbnQgd2lsbCBwb2xsIGZvciBQT0xMUFJJLg0KPiA+ ID4gPiArICogT24gZ2V0dGluZyB0aGUgZXZlbnQsIHRoZSBhcHAgZGVxdWV1ZXMgdGhlIGV2ZW50 IHRvIGdldCB0aGUgc2hvcnQNCj4gcGFja2V0DQo+ID4gPiA+ICsgKiBkYXRhLg0KPiA+ID4gPiAr ICoNCj4gPiA+ID4gKyAqIFNlY29uZCBpcyB0byByZWdpc3RlciBmb3IgU2hvcnQgcGFja2V0IEZJ Rk8gb3ZlcmZsb3cNCj4gPiA+ID4gKyAqIEluIGNhc2UgdGhlIHJhdGUgb2YgcmVjZWl2aW5nIHNo b3J0IHBhY2tldHMgaXMgaGlnaCBhbmQNCj4gPiA+ID4gKyAqIHRoZSBzaG9ydCBwYWNrZXQgRklG TyBvdmVyZmxvd3MsIHRoaXMgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuDQo+ID4gPiA+ICsgKg0K PiA+ID4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gPiA+ ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfc3Vic2NyaWJlX2V2ZW50KHN0 cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gPiA+ICsJCQkJICAgICBzdHJ1Y3QgdjRsMl9maCAq ZmgsDQo+ID4gPiA+ICsJCQkJICAgICBzdHJ1Y3QgdjRsMl9ldmVudF9zdWJzY3JpcHRpb24gKnN1 YikNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4 c3MgPSB0b194Y3NpMnJ4c3NzdGF0ZShzZCk7DQo+ID4gPiA+ICsJaW50IHJldDsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArCW11dGV4X2xvY2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwlzd2l0Y2ggKHN1Yi0+dHlwZSkgew0KPiA+ID4gPiArCWNhc2UgVjRMMl9FVkVOVF9Y TE5YQ1NJUlhfU1BLVDoNCj4gPiA+ID4gKwljYXNlIFY0TDJfRVZFTlRfWExOWENTSVJYX1NQS1Rf T1ZGOg0KPiA+ID4gPiArCWNhc2UgVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU0xCRjoNCj4gPiA+ID4g KwkJcmV0ID0gdjRsMl9ldmVudF9zdWJzY3JpYmUoZmgsIHN1YiwgWENTSV9NQVhfU1BLVF9FVkVO VCwNCj4gPiA+IE5VTEwpOw0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwlkZWZhdWx0Og0K PiA+ID4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4g PiArCW11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr CXJldHVybiByZXQ7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4g PiArICogeGNzaTJyeHNzX3Vuc3Vic2NyaWJlX2V2ZW50IC0gVW5zdWJzY3JpYmUgZnJvbSBhbGwg ZXZlbnRzIHJlZ2lzdGVyZWQNCj4gPiA+ID4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNlDQo+ID4g PiA+ICsgKiBAZmg6IFY0TDIgZmlsZSBoYW5kbGUNCj4gPiA+ID4gKyAqIEBzdWI6IHBvaW50ZXIg dG8gRXZlbnQgdW5zdWJzY3JpcHRpb24gc3RydWN0dXJlDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiAr ICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLg0K PiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc191bnN1YnNjcmliZV9l dmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ID4gPiArCQkJCSAgICAgICBzdHJ1Y3Qg djRsMl9maCAqZmgsDQo+ID4gPiA+ICsJCQkJICAgICAgIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNj cmlwdGlvbiAqc3ViKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nfc3Rh dGUgKnhjc2kycnhzcyA9IHRvX3hjc2kycnhzc3N0YXRlKHNkKTsNCj4gPiA+ID4gKwlpbnQgcmV0 Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJbXV0ZXhfbG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4g PiA+ID4gKwlyZXQgPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlKGZoLCBzdWIpOw0KPiA+ID4gPiAr CW11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJl dHVybiByZXQ7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiAr ICogeGNzaTJyeHNzX3NfY3RybCAtIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIFhpbGlueCBNSVBJ IENTSS0yIFY0TDIgY29udHJvbHMNCj4gPiA+ID4gKyAqIEBjdHJsOiBWNEwyIGNvbnRyb2wgdG8g YmUgc2V0DQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv IHNldCB0aGUgVjRMMiBjb250cm9scyBmb3IgdGhlIFhpbGlueCBNSVBJDQo+ID4gPiA+ICsgKiBD U0ktMiBSeCBTdWJzeXN0ZW0uIEl0IGlzIHVzZWQgdG8gc2V0IHRoZSBhY3RpdmUgbGFuZXMgaW4g dGhlIHN5c3RlbS4NCj4gPiA+ID4gKyAqIFRoZSBldmVudCBjb3VudGVycyBjYW4gYmUgcmVzZXQu DQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBv dGhlcndpc2UNCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfc19j dHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0 IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzID0NCj4gPiA+ID4gKwkJY29udGFpbmVyX29mKGN0 cmwtPmhhbmRsZXIsIHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUsDQo+ID4gPiA+ICsJCQkgICAgIGN0 cmxfaGFuZGxlcik7DQo+ID4gPiA+ICsJc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlID0gJnhj c2kycnhzcy0+Y29yZTsNCj4gPiA+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiA+ID4gKwl1MzIgYWN0 aXZlX2xhbmVzID0gMTsNCj4gPiA+DQo+ID4gPiBOaXQuIFRoaXMgY2FuIG1vdmUgaW50byBpZiBz dGF0ZW1lbnQgYmVsb3csIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGl0Lg0KPiA+ID4NCj4gPiBZZXMu IFdpbGwgZG8gaXQgaW4gbmV4dCB2ZXJzaW9uLg0KPiA+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlt dXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc3dpdGNo IChjdHJsLT5pZCkgew0KPiA+ID4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX01JUElDU0lTU19B Q1RfTEFORVM6DQo+ID4gPiA+ICsJCS8qDQo+ID4gPiA+ICsJCSAqIFRoaXMgd2lsbCBiZSBjYWxs ZWQgb25seSB3aGVuICJFbmFibGUgQWN0aXZlIExhbmVzIiBwYXJhbWV0ZXINCj4gPiA+ID4gKwkJ ICogaXMgc2V0IGluIGRlc2lnbg0KPiA+ID4gPiArCQkgKi8NCj4gPiA+ID4gKwkJaWYgKGNvcmUt PmVuYWJsZV9hY3RpdmVfbGFuZXMpIHsNCj4gPiA+ID4gKwkJCXhjc2kycnhzc19jbHJfYW5kX3Nl dChjb3JlLCBYQ1NJX1BDUl9PRkZTRVQsDQo+ID4gPiA+ICsJCQkJCSAgICAgIFhDU0lfUENSX0FD VExBTkVTX01BU0ssDQo+ID4gPiA+ICsJCQkJCSAgICAgIGN0cmwtPnZhbCAtIDEpOw0KPiA+ID4g PiArCQkJLyoNCj4gPiA+ID4gKwkJCSAqIFRoaXMgZGVsYXkgaXMgdG8gYWxsb3cgdGhlIHZhbHVl IHRvIHJlZmxlY3QgYXMgd3JpdGUNCj4gPiA+ID4gKwkJCSAqIGFuZCByZWFkIHBhdGhzIGFyZSBk aWZmZXJlbnQuDQo+ID4gPiA+ICsJCQkgKi8NCj4gPiA+ID4gKwkJCXVkZWxheSgxKTsNCj4gPiA+ DQo+ID4gPiBJbnRlcmVzdGluZyB0aGlzIGlzIHJlcXVpcmVkLg0KPiA+DQo+ID4gWWVzIEkgaGF2 ZSBtZW50aW9uZWQgdGhlIHJlYXNvbiBpbiB0aGUgY29tbWVudHMgYmFzZWQgb24gUEcyMzIuDQo+ ID4NCj4gPiA+DQo+ID4gPiA+ICsJCQlhY3RpdmVfbGFuZXMgPSB4Y3NpMnJ4c3NfcmVhZChjb3Jl LCBYQ1NJX1BDUl9PRkZTRVQpOw0KPiA+ID4gPiArCQkJYWN0aXZlX2xhbmVzICY9IFhDU0lfUENS X0FDVExBTkVTX01BU0s7DQo+ID4gPiA+ICsJCQlhY3RpdmVfbGFuZXMrKzsNCj4gPiA+ID4gKwkJ CWlmIChhY3RpdmVfbGFuZXMgIT0gY3RybC0+dmFsKQ0KPiA+ID4gPiArCQkJCWRldl9pbmZvKGNv cmUtPmRldiwgIlJ4Qnl0ZUNsa0hTIGFic2VudFxuIik7DQo+ID4gPiA+ICsJCQlkZXZfZGJnKGNv cmUtPmRldiwgImFjdGl2ZSBsYW5lcyA9ICVkXG4iLCBjdHJsLT52YWwpOw0KPiA+ID4gPiArCQl9 IGVsc2Ugew0KPiA+ID4gPiArCQkJcmV0ID0gLUVJTlZBTDsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4g PiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1NfUkVT RVRfQ09VTlRFUlM6DQo+ID4gPiA+ICsJCXhjc2kycnhzc19yZXNldF9ldmVudF9jb3VudGVycyh4 Y3NpMnJ4c3MpOw0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwlkZWZhdWx0Og0KPiA+ID4g PiArCQlicmVhazsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwltdXRleF91bmxv Y2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gcmV0Ow0K PiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIHhjc2kycnhz c19nX3ZvbGF0aWxlX2N0cmwgLSBnZXQgdGhlIFhpbGlueCBNSVBJIENTSS0yIFJ4IGNvbnRyb2xz DQo+ID4gPiA+ICsgKiBAY3RybDogUG9pbnRlciB0byBWNEwyIGNvbnRyb2wNCj4gPiA+ID4gKyAq DQo+ID4gPiA+ICsgKiBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzIHJl Y2VpdmVkIGJ5IHRoZSBYaWxpbngNCj4gPiA+ID4gKyAqIE1JUEkgQ1NJLTIgUnguDQo+ID4gPiA+ ICsgKg0KPiA+ID4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UN Cj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3NfZ192b2xhdGlsZV9j dHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0 IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzID0NCj4gPiA+ID4gKwkJY29udGFpbmVyX29mKGN0 cmwtPmhhbmRsZXIsIHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUsDQo+ID4gPiA+ICsJCQkgICAgIGN0 cmxfaGFuZGxlcik7DQo+ID4gPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KwltdXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc3dp dGNoIChjdHJsLT5pZCkgew0KPiA+ID4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX01JUElDU0lT U19GUkFNRV9DT1VOVEVSOg0KPiA+ID4gPiArCQljdHJsLT52YWwgPSB4Y3NpMnJ4c3MtPmNvcmUu ZXZlbnRzWzBdLmNvdW50ZXI7DQo+ID4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gPiArCWRlZmF1bHQ6 DQo+ID4gPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsJbXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJcmV0dXJuIHJldDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGlu dCB4Y3NpMnJ4c3Nfc3RhcnRfc3RyZWFtKHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnN0YXRlKQ0K PiA+ID4gPiArew0KPiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZzdGF0 ZS0+Y29yZTsNCj4gPiA+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXhj c2kycnhzc19lbmFibGUoY29yZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXQgPSB4Y3NpMnJ4 c3NfcmVzZXQoY29yZSk7DQo+ID4gPg0KPiA+ID4gQXMgdGhlIHNvZnQgcmVzZXQgaXMgZG9uZSBh ZnRlciBlbmFibGluZywgSSBndWVzcyBzb2Z0IHJlc2V0IGRvZXNuJ3QNCj4gPiA+IHJlc2V0IHRo b3NlIGNvbnRyb2xzIGFuZCByZWdpc3RlcnMgd2hpY2ggYXJlIHNldCBwcmlvciB0byBpdC4NCj4g PiA+DQo+ID4NCj4gPiBDb3JyZWN0LiBBcyBtZW50aW9uZWQgaW4gUEcgMjMyIHBhZ2UgMjEgc29m dCByZXNldCBiaXQgZGVzY3JpcHRpb24sDQo+ID4gIkFsbCByZWdpc3RlcnMgcmVzZXQgdG8gdGhl aXIgZGVmYXVsdCB2YWx1ZSAoZXhjZXB0IGZvciB0aGlzIGJpdCwgQ29yZSBFbmFibGUgYW5kDQo+ IEFjdGl2ZSBsYW5lcyBjb25maWd1cmF0aW9uKS4NCj4gPiBJbiBhZGRpdGlvbiB0byByZXNldHRp bmcgcmVnaXN0ZXJzIHdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIDE6DQo+ID4g4oCiIFNodXQgZG93 biBwb3J0IGlzIG5vdCBhc3NlcnRlZCBvbiB0aGUgUFBJIGxhbmVzDQo+ID4g4oCiIEludGVybmFs IEZJRk9zIChQUEksIFBhY2tldCwgR2VuZXJpYyBTaG9ydCBQYWNrZXQpIGFyZSBmbHVzaGVkDQo+ ID4g4oCiIENvbnRyb2wgRmluaXRlIFN0YXRlIE1hY2hpbmUgKEZTTSkgc3RvcHMgcHJvY2Vzc2lu ZyBjdXJyZW50IHBhY2tldC4gQW55DQo+IHBhcnRpYWxseSB3cml0dGVuIHBhY2tldCB0bw0KPiA+ IG1lbW9yeSBpcyBtYXJrZWQgYXMgZXJyb3JlZC4gVGhpcyBwYWNrZXQsIHdoZW4gbWFkZSBhdmFp bGFibGUgdGhyb3VnaCB0aGUNCj4gQVhJNC1TdHJlYW0gaW50ZXJmYWNlLA0KPiA+IHJlcG9ydHMg dGhlIGVycm9yIG9uIFRVU0VSWzFdLiINCj4gPg0KPiANCj4gVGhhbmtzIGZvciBzaGFyaW5nIGRl dGFpbHMuIFdvdWxkbid0IGl0IGJlIGJldHRlciB0byByZXNldCBpbiBkaXNhYmxlIHRoZW4/DQoN ClJlc2V0dGluZyBpbiBzdGFydCBvciBzdG9wIGlzIGZpbmUuIA0KSSB3aWxsIGxvb2sgYXQgb3Ro ZXIgZHJpdmVycyB0byBmb2xsb3cgdGhlIG5vcm0uIA0KDQpSZWdhcmRzDQpWaXNoYWwgU2FnYXIN Cg0KPiANCj4gVGhhbmtzLA0KPiAtaHl1bg0KPiANCj4gDQo+ID4NCj4gPiA+ID4gKwlpZiAocmV0 IDwgMCkgew0KPiA+ID4gPiArCQlzdGF0ZS0+c3RyZWFtaW5nID0gZmFsc2U7DQo+ID4gPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJeGNzaTJyeHNz X2ludHJfZW5hYmxlKGNvcmUpOw0KPiA+ID4gPiArCXN0YXRlLT5zdHJlYW1pbmcgPSB0cnVlOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIHJldDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0K PiA+ID4gPiArc3RhdGljIHZvaWQgeGNzaTJyeHNzX3N0b3Bfc3RyZWFtKHN0cnVjdCB4Y3NpMnJ4 c3Nfc3RhdGUgKnN0YXRlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nf Y29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXhjc2kycnhz c19pbnRyX2Rpc2FibGUoY29yZSk7DQo+ID4gPiA+ICsJeGNzaTJyeHNzX2Rpc2FibGUoY29yZSk7 DQo+ID4gPiA+ICsJc3RhdGUtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiA+ID4gPiArfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIHhjc2kycnhzc19zX3N0cmVhbSAtIEl0IGlz IHVzZWQgdG8gc3RhcnQvc3RvcCB0aGUgc3RyZWFtaW5nLg0KPiA+ID4gPiArICogQHNkOiBWNEwy IFN1YiBkZXZpY2UNCj4gPiA+ID4gKyAqIEBlbmFibGU6IEZsYWcgKFRydWUgLyBGYWxzZSkNCj4g PiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvbnRyb2xzIHRoZSBzdGFydCBv ciBzdG9wIG9mIHN0cmVhbWluZyBmb3IgdGhlDQo+ID4gPiA+ICsgKiBYaWxpbnggTUlQSSBDU0kt MiBSeCBTdWJzeXN0ZW0uDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogUmV0dXJuOiAwIG9uIHN1 Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIGlu dCB4Y3NpMnJ4c3Nfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkN Cj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3Mg PSB0b194Y3NpMnJ4c3NzdGF0ZShzZCk7DQo+ID4gPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwltdXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsJaWYgKGVuYWJsZSkgew0KPiA+ID4gPiArCQlpZiAoIXhjc2kycnhzcy0+c3RyZWFt aW5nKSB7DQo+ID4gPiA+ICsJCQkvKiByZXNldCB0aGUgZXZlbnQgY291bnRlcnMgKi8NCj4gPiA+ ID4gKwkJCXhjc2kycnhzc19yZXNldF9ldmVudF9jb3VudGVycyh4Y3NpMnJ4c3MpOw0KPiA+ID4N Cj4gPiA+IElzIHRoaXMgcmVxdWlyZWQgaGVyZT8gb3IgY2FuIGl0IGJlIGRvbmUgZXhwbGljaXRs eSBieSB0aGUgYXBwbGljYXRpb24NCj4gPiA+IHNlcGFyYXRlbHk/DQo+ID4gPg0KPiA+DQo+ID4g WWVzIHRoaXMgY2FuIGJlIGRvbmUgc2VwYXJhdGVseSBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcg dGhlIHJlc2V0IGNvdW50ZXJzDQo+IHY0bDIgY29tbWFuZC4NCj4gPiBSZWFzb24gdG8ga2VlcCBp dCBoZXJlIGlzIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgZXJyb3JzIGhhcHBlbmluZyBiZXR3ZWVu DQo+IGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYSBzdHJlYW0uDQo+ID4NCj4gPiA+ID4gKwkJCXJl dCA9IHhjc2kycnhzc19zdGFydF9zdHJlYW0oeGNzaTJyeHNzKTsNCj4gPiA+ID4gKwkJfQ0KPiA+ ID4gPiArCX0gZWxzZSB7DQo+ID4gPiA+ICsJCWlmICh4Y3NpMnJ4c3MtPnN0cmVhbWluZykNCj4g PiA+ID4gKwkJCXhjc2kycnhzc19zdG9wX3N0cmVhbSh4Y3NpMnJ4c3MpOw0KPiA+ID4gPiArCX0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArCW11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4g PiA+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0 aWMgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqDQo+ID4gPiA+ICtfX3hjc2kycnhzc19nZXRf cGFkX2Zvcm1hdChzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3MsDQo+ID4gPiA+ICsJ CQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ID4gPiArCQkJICAg dW5zaWduZWQgaW50IHBhZCwgdTMyIHdoaWNoKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN3aXRj aCAod2hpY2gpIHsNCj4gPiA+ID4gKwljYXNlIFY0TDJfU1VCREVWX0ZPUk1BVF9UUlk6DQo+ID4g PiA+ICsJCXJldHVybiB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdCgmeGNzaTJyeHNzLT5zdWJk ZXYsIGNmZywNCj4gPiA+ID4gKwkJCQkJCSAgcGFkKTsNCj4gPiA+ID4gKwljYXNlIFY0TDJfU1VC REVWX0ZPUk1BVF9BQ1RJVkU6DQo+ID4gPiA+ICsJCXJldHVybiAmeGNzaTJyeHNzLT5mb3JtYXQ7 DQo+ID4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gPiA+ICsJ fQ0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIHhjc2ky cnhzc19nZXRfZm9ybWF0IC0gR2V0IHRoZSBwYWQgZm9ybWF0DQo+ID4gPiA+ICsgKiBAc2Q6IFBv aW50ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ID4gPiArICogQGNmZzogUG9p bnRlciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gPiA+ID4gKyAq IEBmbXQ6IFBvaW50ZXIgdG8gcGFkIGxldmVsIG1lZGlhIGJ1cyBmb3JtYXQNCj4gPiA+ID4gKyAq DQo+ID4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBwYWQgZm9ybWF0 IGluZm9ybWF0aW9uLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFJldHVybjogMCBvbiBzdWNj ZXNzDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX2dldF9mb3Jt YXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiA+ID4gKwkJCQlzdHJ1Y3QgdjRsMl9zdWJk ZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ID4gPiArCQkJCXN0cnVjdCB2NGwyX3N1YmRldl9mb3Jt YXQgKmZtdCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4 Y3NpMnJ4c3MgPSB0b194Y3NpMnJ4c3NzdGF0ZShzZCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlt dXRleF9sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4gPiArCWZtdC0+Zm9ybWF0ID0gKl9f eGNzaTJyeHNzX2dldF9wYWRfZm9ybWF0KHhjc2kycnhzcywgY2ZnLCBmbXQtPnBhZCwNCj4gPiA+ ID4gKwkJCQkJCSAgZm10LT53aGljaCk7DQo+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4 c3MtPmxvY2spOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogeGNzaTJyeHNzX3NldF9mb3JtYXQg LSBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0DQo+ID4gPiA+ICsgKiBAc2Q6IFBv aW50ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ID4gPiArICogQGNmZzogUG9p bnRlciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gPiA+ID4gKyAq IEBmbXQ6IFBvaW50ZXIgdG8gcGFkIGxldmVsIG1lZGlhIGJ1cyBmb3JtYXQNCj4gPiA+ID4gKyAq DQo+ID4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0 LiBTaW5jZSB0aGUgcGFkIGZvcm1hdCBpcw0KPiBmaXhlZA0KPiA+ID4gPiArICogaW4gaGFyZHdh cmUsIGl0IGNhbid0IGJlIG1vZGlmaWVkIG9uIHJ1biB0aW1lLiBTbyB3aGVuIGEgZm9ybWF0IHNl dCBpcw0KPiA+ID4gPiArICogcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9uLCBhbGwgcGFyYW1ldGVy cyBleGNlcHQgdGhlIGZvcm1hdCB0eXBlIGlzDQo+IHNhdmVkDQo+ID4gPiA+ICsgKiBmb3IgdGhl IHBhZCBhbmQgdGhlIG9yaWdpbmFsIHBhZCBmb3JtYXQgaXMgc2VudCBiYWNrIHRvIHRoZSBhcHBs aWNhdGlvbi4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0K PiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc19zZXRfZm9ybWF0KHN0 cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gPiA+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3Bh ZF9jb25maWcgKmNmZywNCj4gPiA+ID4gKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpm bXQpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJy eHNzID0gdG9feGNzaTJyeHNzc3RhdGUoc2QpOw0KPiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nf Y29yZSAqY29yZSA9ICZ4Y3NpMnJ4c3MtPmNvcmU7DQo+ID4gPiA+ICsJc3RydWN0IHY0bDJfbWJ1 c19mcmFtZWZtdCAqX19mb3JtYXQ7DQo+ID4gPiA+ICsJdTMyIGNvZGU7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwkvKiBvbmx5IHNpbmsgcGFkIGZvcm1hdCBjYW4gYmUgdXBkYXRlZCAqLw0KPiA+ID4g PiArCW11dGV4X2xvY2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkv Kg0KPiA+ID4gPiArCSAqIE9ubHkgdGhlIGZvcm1hdC0+Y29kZSBwYXJhbWV0ZXIgbWF0dGVycyBm b3IgQ1NJIGFzIHRoZQ0KPiA+ID4gPiArCSAqIENTSSBmb3JtYXQgY2Fubm90IGJlIGNoYW5nZWQg YXQgcnVudGltZS4NCj4gPiA+ID4gKwkgKiBFbnN1cmUgdGhhdCBmb3JtYXQgdG8gc2V0IGlzIGNv cGllZCB0byBvdmVyIHRvIENTSSBwYWQgZm9ybWF0DQo+ID4gPiA+ICsJICovDQo+ID4gPiA+ICsJ X19mb3JtYXQgPSBfX3hjc2kycnhzc19nZXRfcGFkX2Zvcm1hdCh4Y3NpMnJ4c3MsIGNmZywNCj4g PiA+ID4gKwkJCQkJICAgICAgZm10LT5wYWQsIGZtdC0+d2hpY2gpOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJLyogU2F2ZSB0aGUgcGFkIGZvcm1hdCBjb2RlICovDQo+ID4gPiA+ICsJY29kZSA9IF9f Zm9ybWF0LT5jb2RlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyoNCj4gPiA+ID4gKwkgKiBSQVc4 IGlzIHN1cHBvcnRlZCBpbiBhbGwgZGF0YXR5cGVzLiBTbyBpZiByZXF1ZXN0ZWQgbWVkaWEgYnVz IGZvcm1hdA0KPiA+ID4gPiArCSAqIGlzIG9mIFJBVzggdHlwZSwgdGhlbiBhbGxvdyB0byBiZSBz ZXQuIEluIGNhc2UgY29yZSBpcyBjb25maWd1cmVkIHRvDQo+ID4gPiA+ICsJICogb3RoZXIgUkFX LCBZVVY0MjIgOC8xMCBvciBSR0I4ODgsIHNldCBhcHByb3ByaWF0ZSBtZWRpYSBidXMNCj4gPiA+ IGZvcm1hdC4NCj4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gKwlpZiAoKGZtdC0+Zm9ybWF0LmNvZGUg PT0gTUVESUFfQlVTX0ZNVF9TQkdHUjhfMVg4IHx8DQo+ID4gPiA+ICsJICAgICBmbXQtPmZvcm1h dC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCB8fA0KPiA+ID4gPiArCSAgICAgZm10 LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDggfHwNCj4gPiA+ID4gKwkg ICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjhfMVg4KSB8fA0KPiA+ ID4gPiArCSAgICAoY29yZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SQVcxMCAmJg0KPiA+ID4gPiAr CSAgICAgKGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTAgfHwN Cj4gPiA+ID4gKwkgICAgICBmbXQtPmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcx MF8xWDEwIHx8DQo+ID4gPiA+ICsJICAgICAgZm10LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNf Rk1UX1NHUkJHMTBfMVgxMCB8fA0KPiA+ID4gPiArCSAgICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0g TUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTApKSB8fA0KPiA+ID4gPiArCSAgICAoY29yZS0+ZGF0 YXR5cGUgPT0gWENTSV9EVF9SQVcxMiAmJg0KPiA+ID4gPiArCSAgICAgKGZtdC0+Zm9ybWF0LmNv ZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTIgfHwNCj4gPiA+ID4gKwkgICAgICBmbXQt PmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyIHx8DQo+ID4gPiA+ICsJ ICAgICAgZm10LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHMTJfMVgxMiB8fA0K PiA+ID4gPiArCSAgICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjEy XzFYMTIpKSB8fA0KPiA+ID4gPiArCSAgICAoY29yZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SQVcx NCAmJg0KPiA+ID4gPiArCSAgICAgKGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9T QkdHUjE0XzFYMTQgfHwNCj4gPiA+ID4gKwkgICAgICBmbXQtPmZvcm1hdC5jb2RlID09IE1FRElB X0JVU19GTVRfU0dCUkcxNF8xWDE0IHx8DQo+ID4gPiA+ICsJICAgICAgZm10LT5mb3JtYXQuY29k ZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHMTRfMVgxNCB8fA0KPiA+ID4gPiArCSAgICAgIGZtdC0+ Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjE0XzFYMTQpKSB8fA0KPiA+ID4gPiAr CSAgICAoY29yZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SQVcxNiAmJg0KPiA+ID4gPiArCSAgICAg KGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdHUjE2XzFYMTYgfHwNCj4gPiA+ ID4gKwkgICAgICBmbXQtPmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcxNl8xWDE2 IHx8DQo+ID4gPiA+ICsJICAgICAgZm10LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NH UkJHMTZfMVgxNiB8fA0KPiA+ID4gPiArCSAgICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFf QlVTX0ZNVF9TUkdHQjE2XzFYMTYpKSB8fA0KPiA+ID4gPiArCSAgICAoY29yZS0+ZGF0YXR5cGUg PT0gWENTSV9EVF9ZVVY0MjI4QiAmJg0KPiA+ID4gPiArCSAgICAgZm10LT5mb3JtYXQuY29kZSA9 PSBNRURJQV9CVVNfRk1UX1VZVlk4XzFYMTYpIHx8DQo+ID4gPiA+ICsJICAgIChjb3JlLT5kYXRh dHlwZSA9PSBYQ1NJX0RUX1lVVjQyMjEwQiAmJg0KPiA+ID4gPiArCSAgICAgZm10LT5mb3JtYXQu Y29kZSA9PSBNRURJQV9CVVNfRk1UX1VZVlk4XzFYMTYpIHx8DQo+ID4gPg0KPiA+ID4gTm90IHN1 cmUgaWYgc2luZ2xlIGJ1cyBmb3JtYXQgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIDQyMiA4QiBhbmQg NDIyIDEwQi4NCj4gPg0KPiA+IFlvdSBhcmUgcmlnaHQuIEkgbWlzc2VkIGl0LiBJIHdpbGwgcmVt b3ZlIGl0IGluIG5leHQgdmVyc2lvbi4NCj4gPg0KPiA+ID4NCj4gPiA+ID4gKwkgICAgKGNvcmUt PmRhdGF0eXBlID09IFhDU0lfRFRfUkdCODg4ICYmDQo+ID4gPiA+ICsJICAgICBmbXQtPmZvcm1h dC5jb2RlID09IE1FRElBX0JVU19GTVRfUkJHODg4XzFYMjQpKSB7DQo+ID4gPiA+ICsJCS8qIENv cHkgb3ZlciB0aGUgZm9ybWF0IHRvIGJlIHNldCAqLw0KPiA+ID4gPiArCQkqX19mb3JtYXQgPSBm bXQtPmZvcm1hdDsNCj4gPiA+ID4gKwl9IGVsc2Ugew0KPiA+ID4gPiArCQkvKiBSZXN0b3JlIHRo ZSBvcmlnaW5hbCBwYWQgZm9ybWF0IGNvZGUgKi8NCj4gPiA+ID4gKwkJZm10LT5mb3JtYXQuY29k ZSA9IGNvZGU7DQo+ID4gPiA+ICsJCV9fZm9ybWF0LT5jb2RlID0gY29kZTsNCj4gPiA+ID4gKwkJ X19mb3JtYXQtPndpZHRoID0gZm10LT5mb3JtYXQud2lkdGg7DQo+ID4gPiA+ICsJCV9fZm9ybWF0 LT5oZWlnaHQgPSBmbXQtPmZvcm1hdC5oZWlnaHQ7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ ID4gPiArICogeGNzaTJyeHNzX29wZW4gLSBDYWxsZWQgb24gdjRsMl9vcGVuKCkNCj4gPiA+ID4g KyAqIEBzZDogUG9pbnRlciB0byBWNEwyIHN1YiBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gPiA+ICsg KiBAZmg6IFBvaW50ZXIgdG8gVjRMMiBGaWxlIGhhbmRsZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4g KyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIHY0bDJfb3BlbigpLiBJdCBzZXRzIHRoZSBk ZWZhdWx0IGZvcm1hdA0KPiA+ID4gPiArICogZm9yIGJvdGggcGFkcy4NCj4gPiA+ID4gKyAqDQo+ ID4gPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtz dGF0aWMgaW50IHhjc2kycnhzc19vcGVuKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gPiA+ ICsJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJ c3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzID0gdG9feGNzaTJyeHNzc3RhdGUoc2Qp Ow0KPiA+ID4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsNCj4gPiA+ID4g Kwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBY Q1NJX01FRElBX1BBRFM7IGkrKykgew0KPiA+ID4gPiArCQlmb3JtYXQgPSB2NGwyX3N1YmRldl9n ZXRfdHJ5X2Zvcm1hdChzZCwgZmgtPnBhZCwgaSk7DQo+ID4gPiA+ICsJCSpmb3JtYXQgPSB4Y3Np MnJ4c3MtPmZvcm1hdDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4g MDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gPiA+ID4gKyAqIE1lZGlhIE9wZXJhdGlvbnMNCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiAr DQo+ID4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHhj c2kycnhzc19tZWRpYV9vcHMgPSB7DQo+ID4gPiA+ICsJLmxpbmtfdmFsaWRhdGUgPSB2NGwyX3N1 YmRldl9saW5rX3ZhbGlkYXRlDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgeGNzaTJyeHNzX2N0cmxfb3BzID0gew0KPiA+ ID4gPiArCS5nX3ZvbGF0aWxlX2N0cmwgPSB4Y3NpMnJ4c3NfZ192b2xhdGlsZV9jdHJsLA0KPiA+ ID4gPiArCS5zX2N0cmwJPSB4Y3NpMnJ4c3Nfc19jdHJsDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiAr DQo+ID4gPiA+ICtzdGF0aWMgc3RydWN0IHY0bDJfY3RybF9jb25maWcgeGNzaTJyeHNzX2N0cmxz W10gPSB7DQo+ID4gPiA+ICsJew0KPiA+ID4gPiArCQkub3BzCT0gJnhjc2kycnhzc19jdHJsX29w cywNCj4gPiA+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX01JUElDU0lTU19BQ1RfTEFORVMs DQo+ID4gPiA+ICsJCS5uYW1lCT0gIkFjdGl2ZSBMYW5lcyIsDQo+ID4gPiA+ICsJCS50eXBlCT0g VjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4gPiA+ID4gKwkJLm1pbgk9IDEsDQo+ID4gPiA+ICsJ CS5tYXgJPSA0LA0KPiA+ID4gPiArCQkuc3RlcAk9IDEsDQo+ID4gPiA+ICsJCS5kZWYJPSAxLA0K PiA+ID4gPiArCX0sIHsNCj4gPiA+ID4gKwkJLm9wcwk9ICZ4Y3NpMnJ4c3NfY3RybF9vcHMsDQo+ ID4gPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1NfRlJBTUVfQ09VTlRFUiwN Cj4gPiA+ID4gKwkJLm5hbWUJPSAiRnJhbWVzIFJlY2VpdmVkIENvdW50ZXIiLA0KPiA+ID4gPiAr CQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+ID4gPiA+ICsJCS5taW4JPSAwLA0K PiA+ID4gPiArCQkubWF4CT0gMHhGRkZGRkZGRiwNCj4gPiA+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ ID4gPiArCQkuZGVmCT0gMCwNCj4gPiA+ID4gKwkJLmZsYWdzCT0gVjRMMl9DVFJMX0ZMQUdfVk9M QVRJTEUgfA0KPiA+ID4gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPiA+ID4gPiArCX0sIHsN Cj4gPiA+ID4gKwkJLm9wcwk9ICZ4Y3NpMnJ4c3NfY3RybF9vcHMsDQo+ID4gPiA+ICsJCS5pZAk9 IFY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1NfUkVTRVRfQ09VTlRFUlMsDQo+ID4gPiA+ICsJCS5u YW1lCT0gIlJlc2V0IENvdW50ZXJzIiwNCj4gPiA+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQ RV9CVVRUT04sDQo+ID4gPiA+ICsJCS5taW4JPSAwLA0KPiA+ID4gPiArCQkubWF4CT0gMSwNCj4g PiA+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ID4gPiArCQkuZGVmCT0gMCwNCj4gPiA+ID4gKwkJLmZs YWdzCT0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSwNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICt9 Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2Nv cmVfb3BzIHhjc2kycnhzc19jb3JlX29wcyA9IHsNCj4gPiA+ID4gKwkubG9nX3N0YXR1cyA9IHhj c2kycnhzc19sb2dfc3RhdHVzLA0KPiA+ID4gPiArCS5zdWJzY3JpYmVfZXZlbnQgPSB4Y3NpMnJ4 c3Nfc3Vic2NyaWJlX2V2ZW50LA0KPiA+ID4gPiArCS51bnN1YnNjcmliZV9ldmVudCA9IHhjc2ky cnhzc191bnN1YnNjcmliZV9ldmVudA0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr c3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgeGNzaTJyeHNzX3ZpZGVvX29wcyA9 IHsNCj4gPiA+ID4gKwkuc19zdHJlYW0gPSB4Y3NpMnJ4c3Nfc19zdHJlYW0NCj4gPiA+ID4gK307 DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyB4 Y3NpMnJ4c3NfcGFkX29wcyA9IHsNCj4gPiA+ID4gKwkuZ2V0X2ZtdCA9IHhjc2kycnhzc19nZXRf Zm9ybWF0LA0KPiA+ID4gPiArCS5zZXRfZm10ID0geGNzaTJyeHNzX3NldF9mb3JtYXQsDQo+ID4g PiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29w cyB4Y3NpMnJ4c3Nfb3BzID0gew0KPiA+ID4gPiArCS5jb3JlID0gJnhjc2kycnhzc19jb3JlX29w cywNCj4gPiA+ID4gKwkudmlkZW8gPSAmeGNzaTJyeHNzX3ZpZGVvX29wcywNCj4gPiA+ID4gKwku cGFkID0gJnhjc2kycnhzc19wYWRfb3BzDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2ludGVybmFsX29wcyB4Y3NpMnJ4c3Nf aW50ZXJuYWxfb3BzID0gew0KPiA+ID4gPiArCS5vcGVuID0geGNzaTJyeHNzX29wZW4sDQo+ID4g PiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3Nfc2V0X2Rl ZmF1bHRfZm9ybWF0KHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnN0YXRlKQ0KPiA+ID4gPiArew0K PiA+ID4gPiArCXN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArCW1lbXNldCgmc3RhdGUtPmZvcm1hdCwgMCwgc2l6ZW9mKHN0YXRl LT5mb3JtYXQpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXN3aXRjaCAoY29yZS0+ZGF0YXR5cGUp IHsNCj4gPiA+ID4gKwljYXNlIFhDU0lfRFRfWVVWNDIyOEI6DQo+ID4gPiA+ICsJY2FzZSBYQ1NJ X0RUX1lVVjQyMjEwQjoNCj4gPiA+DQo+ID4gPiBBcyBtZW50aW9uZWQgYmVmb3JlLCBkb2VzIHRo aXMgYmVsb25nIGhlcmU/IEl0IGxvb2tzIGxpa2UgMTBiaXQgZm9ybWF0LA0KPiA+ID4gYnV0IGlz IGNsYXNzaWZpZWQgYXMgOGJpdCBidXMgZm9ybWF0Lg0KPiA+ID4NCj4gPg0KPiA+IEkgd2lsbCBy ZW1vdmUgdGhpcyAxMGJpdCBmb3JtYXQuIFhpbGlueCBZVVY0MjIgMTBicGMgb24gQVhJNCBTdHJl YW0gaXNuJ3QNCj4gcmVwcmVzZW50ZWQgYnkgYW55IG9mIHRoZSBNRURJQV9CVVNfRk1UXyouDQo+ ID4NCj4gPiA+ID4gKwkJc3RhdGUtPmZvcm1hdC5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZOF8x WDE2Ow0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIFhDU0lfRFRfUkdCODg4Og0K PiA+ID4gPiArCQlzdGF0ZS0+Zm9ybWF0LmNvZGUgPSBNRURJQV9CVVNfRk1UX1JCRzg4OF8xWDI0 Ow0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIFhDU0lfRFRfUkFXMTA6DQo+ID4g PiA+ICsJCXN3aXRjaCAoY29yZS0+YmF5ZXIpIHsNCj4gPiA+ID4gKwkJY2FzZSBYQ1NJX0JBWUVS X0JHR1I6DQo+ID4gPiA+ICsJCQlzdGF0ZS0+Zm9ybWF0LmNvZGUgPQ0KPiA+ID4gTUVESUFfQlVT X0ZNVF9TQkdHUjEwXzFYMTA7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBY Q1NJX0JBWUVSX0dSQkc6DQo+ID4gPiA+ICsJCQlzdGF0ZS0+Zm9ybWF0LmNvZGUgPQ0KPiA+ID4g TUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFYMTA7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4g KwkJY2FzZSBYQ1NJX0JBWUVSX0dCUkc6DQo+ID4gPiA+ICsJCQlzdGF0ZS0+Zm9ybWF0LmNvZGUg PQ0KPiA+ID4gTUVESUFfQlVTX0ZNVF9TR0JSRzEwXzFYMTA7DQo+ID4gPiA+ICsJCQlicmVhazsN Cj4gPiA+ID4gKwkJY2FzZSBYQ1NJX0JBWUVSX1JHR0I6DQo+ID4gPiA+ICsJCWRlZmF1bHQ6DQo+ ID4gPiA+ICsJCQlzdGF0ZS0+Zm9ybWF0LmNvZGUgPQ0KPiA+ID4gTUVESUFfQlVTX0ZNVF9TUkdH QjEwXzFYMTA7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiA+ICsJY2Fz ZSBYQ1NJX0RUX1JBVzEyOg0KPiA+ID4gPiArCQlzd2l0Y2ggKGNvcmUtPmJheWVyKSB7DQo+ID4g PiA+ICsJCWNhc2UgWENTSV9CQVlFUl9CR0dSOg0KPiA+ID4gPiArCQkJc3RhdGUtPmZvcm1hdC5j b2RlID0NCj4gPiA+IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyOw0KPiA+ID4gPiArCQkJYnJl YWs7DQo+ID4gPiA+ICsJCWNhc2UgWENTSV9CQVlFUl9HUkJHOg0KPiA+ID4gPiArCQkJc3RhdGUt PmZvcm1hdC5jb2RlID0NCj4gPiA+IE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyOw0KPiA+ID4g PiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgWENTSV9CQVlFUl9HQlJHOg0KPiA+ID4gPiAr CQkJc3RhdGUtPmZvcm1hdC5jb2RlID0NCj4gPiA+IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEy Ow0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgWENTSV9CQVlFUl9SR0dCOg0K PiA+ID4gPiArCQlkZWZhdWx0Og0KPiA+ID4gPiArCQkJc3RhdGUtPmZvcm1hdC5jb2RlID0NCj4g PiA+IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsJ CWJyZWFrOw0KPiA+ID4gPiArCWNhc2UgWENTSV9EVF9SQVcxNDoNCj4gPiA+ID4gKwkJc3dpdGNo IChjb3JlLT5iYXllcikgew0KPiA+ID4gPiArCQljYXNlIFhDU0lfQkFZRVJfQkdHUjoNCj4gPiA+ ID4gKwkJCXN0YXRlLT5mb3JtYXQuY29kZSA9DQo+ID4gPiBNRURJQV9CVVNfRk1UX1NCR0dSMTRf MVgxNDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIFhDU0lfQkFZRVJfR1JC RzoNCj4gPiA+ID4gKwkJCXN0YXRlLT5mb3JtYXQuY29kZSA9DQo+ID4gPiBNRURJQV9CVVNfRk1U X1NHUkJHMTRfMVgxNDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIFhDU0lf QkFZRVJfR0JSRzoNCj4gPiA+ID4gKwkJCXN0YXRlLT5mb3JtYXQuY29kZSA9DQo+ID4gPiBNRURJ QV9CVVNfRk1UX1NHQlJHMTRfMVgxNDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQlj YXNlIFhDU0lfQkFZRVJfUkdHQjoNCj4gPiA+ID4gKwkJZGVmYXVsdDoNCj4gPiA+ID4gKwkJCXN0 YXRlLT5mb3JtYXQuY29kZSA9DQo+ID4gPiBNRURJQV9CVVNfRk1UX1NSR0dCMTRfMVgxNDsNCj4g PiA+ID4gKwkJfQ0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIFhDU0lfRFRfUkFX MTY6DQo+ID4gPiA+ICsJCXN3aXRjaCAoY29yZS0+YmF5ZXIpIHsNCj4gPiA+ID4gKwkJY2FzZSBY Q1NJX0JBWUVSX0JHR1I6DQo+ID4gPiA+ICsJCQlzdGF0ZS0+Zm9ybWF0LmNvZGUgPQ0KPiA+ID4g TUVESUFfQlVTX0ZNVF9TQkdHUjE2XzFYMTY7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4g KwkJY2FzZSBYQ1NJX0JBWUVSX0dSQkc6DQo+ID4gPiA+ICsJCQlzdGF0ZS0+Zm9ybWF0LmNvZGUg PQ0KPiA+ID4gTUVESUFfQlVTX0ZNVF9TR1JCRzE2XzFYMTY7DQo+ID4gPiA+ICsJCQlicmVhazsN Cj4gPiA+ID4gKwkJY2FzZSBYQ1NJX0JBWUVSX0dCUkc6DQo+ID4gPiA+ICsJCQlzdGF0ZS0+Zm9y bWF0LmNvZGUgPQ0KPiA+ID4gTUVESUFfQlVTX0ZNVF9TR0JSRzE2XzFYMTY7DQo+ID4gPiA+ICsJ CQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBYQ1NJX0JBWUVSX1JHR0I6DQo+ID4gPiA+ICsJCWRl ZmF1bHQ6DQo+ID4gPiA+ICsJCQlzdGF0ZS0+Zm9ybWF0LmNvZGUgPQ0KPiA+ID4gTUVESUFfQlVT X0ZNVF9TUkdHQjE2XzFYMTY7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwkJYnJlYWs7DQo+ID4g PiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzg6DQo+ID4gPiA+ICsJY2FzZSBYQ1NJX0RUX1JHQjQ0NDoN Cj4gPiA+ID4gKwljYXNlIFhDU0lfRFRfUkdCNTU1Og0KPiA+ID4gPiArCWNhc2UgWENTSV9EVF9S R0I1NjU6DQo+ID4gPiA+ICsJY2FzZSBYQ1NJX0RUX1JHQjY2NjoNCj4gPiA+ID4gKwkJc3dpdGNo IChjb3JlLT5iYXllcikgew0KPiA+ID4gPiArCQljYXNlIFhDU0lfQkFZRVJfQkdHUjoNCj4gPiA+ ID4gKwkJCXN0YXRlLT5mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYODsNCj4g PiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIFhDU0lfQkFZRVJfR1JCRzoNCj4gPiA+ ID4gKwkJCXN0YXRlLT5mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfU0dSQkc4XzFYODsNCj4g PiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIFhDU0lfQkFZRVJfR0JSRzoNCj4gPiA+ ID4gKwkJCXN0YXRlLT5mb3JtYXQuY29kZSA9IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYODsNCj4g PiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIFhDU0lfQkFZRVJfUkdHQjoNCj4gPiA+ ID4gKwkJZGVmYXVsdDoNCj4gPiA+ID4gKwkJCXN0YXRlLT5mb3JtYXQuY29kZSA9IE1FRElBX0JV U19GTVRfU1JHR0I4XzFYODsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlzdGF0ZS0+Zm9ybWF0LmZpZWxkID0gVjRMMl9G SUVMRF9OT05FOw0KPiA+ID4gPiArCXN0YXRlLT5mb3JtYXQuY29sb3JzcGFjZSA9IFY0TDJfQ09M T1JTUEFDRV9TUkdCOw0KPiA+ID4gPiArCXN0YXRlLT5mb3JtYXQud2lkdGggPSBYQ1NJX0RFRkFV TFRfV0lEVEg7DQo+ID4gPiA+ICsJc3RhdGUtPmZvcm1hdC5oZWlnaHQgPSBYQ1NJX0RFRkFVTFRf SEVJR0hUOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJkZWZhdWx0 IG1lZGlhYnVzIGZvcm1hdCA9IDB4JXgiLA0KPiA+ID4gPiArCQlzdGF0ZS0+Zm9ybWF0LmNvZGUp Ow0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc19j bGtfZ2V0KHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqY29yZSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4g KwlpbnQgcmV0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJY29yZS0+bGl0ZV9hY2xrID0gZGV2bV9j bGtfZ2V0KGNvcmUtPmRldiwgImxpdGVfYWNsayIpOw0KPiA+ID4gPiArCWlmIChJU19FUlIoY29y ZS0+bGl0ZV9hY2xrKSkgew0KPiA+ID4gPiArCQlyZXQgPSBQVFJfRVJSKGNvcmUtPmxpdGVfYWNs ayk7DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBsaXRlX2Fj bGsgKCVkKVxuIiwNCj4gPiA+ID4gKwkJCXJldCk7DQo+ID4gPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJY29yZS0+dmlkZW9fYWNsayA9IGRldm1f Y2xrX2dldChjb3JlLT5kZXYsICJ2aWRlb19hY2xrIik7DQo+ID4gPiA+ICsJaWYgKElTX0VSUihj b3JlLT52aWRlb19hY2xrKSkgew0KPiA+ID4gPiArCQlyZXQgPSBQVFJfRVJSKGNvcmUtPnZpZGVv X2FjbGspOw0KPiA+ID4gPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgImZhaWxlZCB0byBnZXQgdmlk ZW9fYWNsayAoJWQpXG4iLA0KPiA+ID4gPiArCQkJcmV0KTsNCj4gPiA+ID4gKwkJcmV0dXJuIHJl dDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwljb3JlLT5kcGh5X2Nsa18yMDBN ID0gZGV2bV9jbGtfZ2V0KGNvcmUtPmRldiwgImRwaHlfY2xrXzIwME0iKTsNCj4gPiA+ID4gKwlp ZiAoSVNfRVJSKGNvcmUtPmRwaHlfY2xrXzIwME0pKSB7DQo+ID4gPiA+ICsJCXJldCA9IFBUUl9F UlIoY29yZS0+ZHBoeV9jbGtfMjAwTSk7DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAi ZmFpbGVkIHRvIGdldCBkcGh5X2Nsa18yMDBNICglZClcbiIsDQo+ID4gPiA+ICsJCQlyZXQpOw0K PiA+ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiAr CWRldl9kYmcoY29yZS0+ZGV2LCAiR290IGFsbCBjbG9ja3MhXG4iKTsNCj4gPiA+DQo+ID4gPiBU aGlzIGRlYnVnIHByaW50IGRvZXNuJ3QgYWRkIGFueSwgYnV0IGl0J3MgZmluZSBpZiB5b3Ugd2Fu dCB0byBrZWVwLg0KPiA+DQo+ID4gSSB3aWxsIHJlbW92ZSBpbiBuZXh0IHZlcnNpb24uIEl0IGlz IG1vcmUgb2YgdHJhY2UgcHJpbnQgdGhhbiBkZWJ1Zy4NCj4gPg0KPiA+ID4NCj4gPiA+ID4gKwly ZXR1cm4gMDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCB4Y3Np MnJ4c3NfY2xrX2VuYWJsZShzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUpDQo+ID4gPiA+ICt7 DQo+ID4gPiA+ICsJdW5zaWduZWQgbG9uZyByYXRlOw0KPiA+ID4gPiArCWludCByZXQ7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY29yZS0+bGl0ZV9hY2xr KTsNCj4gPiA+ID4gKwlpZiAocmV0KSB7DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAi ZmFpbGVkIGVuYWJsaW5nIGxpdGVfYWNsayAoJWQpXG4iLA0KPiA+ID4gPiArCQkJcmV0KTsNCj4g PiA+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY29yZS0+dmlkZW9fYWNsayk7DQo+ID4gPiA+ICsJaWYg KHJldCkgew0KPiA+ID4gPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgImZhaWxlZCBlbmFibGluZyB2 aWRlb19hY2xrICglZClcbiIsDQo+ID4gPiA+ICsJCQlyZXQpOw0KPiA+ID4gPiArCQlnb3RvIGVy cl92aWRjbGs7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGNvcmUtPmRwaHlfY2xrXzIwME0pOw0KPiA+ID4gPiArCWlmIChyZXQpIHsN Cj4gPiA+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJmYWlsZWQgZW5hYmxpbmcgZHBoeSBjbGsg KCVkKVxuIiwNCj4gPiA+ID4gKwkJCXJldCk7DQo+ID4gPiA+ICsJCWdvdG8gZXJyX2RwaHljbGs7 DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0ID0gY2xrX3NldF9yYXRlKGNv cmUtPmRwaHlfY2xrXzIwME0sIFhDU0lfRFBIWV9DTEtfUkVRKTsNCj4gPiA+ID4gKwlpZiAocmV0 KSB7DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiZmFpbGVkIHRvIHNldCBkcGh5IGNs ayByYXRlICglZClcbiIsDQo+ID4gPiA+ICsJCQlyZXQpOw0KPiA+ID4gPiArCQlnb3RvIGVycl9y YXRlX3NldDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyYXRlID0gY2xrX2dl dF9yYXRlKGNvcmUtPmRwaHlfY2xrXzIwME0pOw0KPiA+ID4gPiArCWlmIChyYXRlIDwgWENTSV9E UEhZX0NMS19NSU4gJiYgcmF0ZSA+IFhDU0lfRFBIWV9DTEtfTUFYKSB7DQo+ID4gPg0KPiA+ID4g UGxlYXNlIGNvbmZpcm0gb24gdGhpcyByYW5nZS4gRnJvbSBpdHMgbmFtZSBhbmQgc28gb24sIGl0 IGxvb2tzIGxpa2UNCj4gPiA+IGl0IHNob3VsZCBiZSAyMDBNSHouDQo+ID4NCj4gPiBUaGlzIGlz IHJhbmdlIGlzIGNvbmZpcm1lZCBmcm9tIHRoZSBSVEwgc291cmNlIGNvZGUuIFRoZSBjbG9jayBz aG91bGQgYmUgYXMNCj4gY2xvc2UgdG8gMjAwTUh6IHBvc3NpYmxlIHdpdGhpbiBnaXZlbiBkZXZp YXRpb24uDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiRXJyIERQ SFkgQ2xvY2sgPSAlbHVcbiIsDQo+ID4gPiA+ICsJCQlyYXRlKTsNCj4gPiA+ID4gKwkJcmV0ID0g LUVJTlZBTDsNCj4gPiA+ID4gKwkJZ290byBlcnJfcmF0ZV9zZXQ7DQo+ID4gPiA+ICsJfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJhbGwgY2xvY2tzIGVuYWJsZWQh XG4iKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldHVybiByZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gK2Vycl9yYXRlX3NldDoNCj4gPiA+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY29yZS0+ ZHBoeV9jbGtfMjAwTSk7DQo+ID4gPiA+ICtlcnJfZHBoeWNsazoNCj4gPiA+ID4gKwljbGtfZGlz YWJsZV91bnByZXBhcmUoY29yZS0+dmlkZW9fYWNsayk7DQo+ID4gPiA+ICtlcnJfdmlkY2xrOg0K PiA+ID4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShjb3JlLT5saXRlX2FjbGspOw0KPiA+ID4g PiArCXJldHVybiByZXQ7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2 b2lkIHhjc2kycnhzc19jbGtfZGlzYWJsZShzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUpDQo+ ID4gPiA+ICt7DQo+ID4gPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNvcmUtPmRwaHlfY2xr XzIwME0pOw0KPiA+ID4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShjb3JlLT52aWRlb19hY2xr KTsNCj4gPiA+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY29yZS0+bGl0ZV9hY2xrKTsNCj4g PiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3NfcGFyc2Vf b2Yoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzKQ0KPiA+ID4gPiArew0KPiA+ID4g PiArCXN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZ4Y3NpMnJ4c3MtPmNvcmU7DQo+ID4g PiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0geGNzaTJyeHNzLT5jb3JlLmRldi0+b2Zf bm9kZTsNCj4gPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRzID0gTlVMTDsNCj4gPiA+ ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnQgPSBOVUxMOw0KPiA+ID4gPiArCXVuc2lnbmVk IGludCBucG9ydHM7DQo+ID4gPiA+ICsJaW50IHJldDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWNv cmUtPmVuX2NzaV92MjAgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInhsbngsZW4tY3Np LXYyLTAiKTsNCj4gPiA+DQo+ID4gPiBDYW4ndCB0aGlzIGJlIGEgbG9jYWwgdmFyaWFibGU/DQo+ ID4gSW4gaXRzIGN1cnJlbnQgdXNhZ2UsIHllcy4gSSB3aWxsIG1vZGlmeSB0aGlzIGFuZCByZXNl bmQgaW4gbmV4dCB2ZXJzaW9uLg0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCWlmIChjb3JlLT5lbl9j c2lfdjIwKSB7DQo+ID4gPiA+ICsJCWNvcmUtPmVuX3ZjeCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9v bChub2RlLCAieGxueCxlbi12Y3giKTsNCj4gPiA+ID4gKwkJZGV2X2RiZyhjb3JlLT5kZXYsICJ2 Y3ggJXMiLCBjb3JlLT5lbl92Y3ggPyAiZW5hYmxlZCIgOg0KPiA+ID4gPiArCQkJImRpc2FibGVk Iik7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYs ICJlbl9jc2lfdjIwICVzIiwgY29yZS0+ZW5fY3NpX3YyMCA/ICJlbmFibGVkIiA6DQo+ID4gPiA+ ICsJCSJkaXNhYmxlZCIpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJY29yZS0+ZW5hYmxlX2FjdGl2 ZV9sYW5lcyA9DQo+ID4gPiA+ICsJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAieGxueCxl bi1hY3RpdmUtbGFuZXMiKTsNCj4gPiA+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgIkVuYWJsZSBh Y3RpdmUgbGFuZXMgcHJvcGVydHkgPSAlc1xuIiwNCj4gPiA+ID4gKwkJY29yZS0+ZW5hYmxlX2Fj dGl2ZV9sYW5lcyA/ICJQcmVzZW50IiA6ICJBYnNlbnQiKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ4bG54LGNzaS1weGwtZm9ybWF0IiwN Cj4gPiA+ID4gKwkJCQkgICAmY29yZS0+ZGF0YXR5cGUpOw0KPiA+ID4gPiArCWlmIChyZXQgPCAw KSB7DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAibWlzc2luZyB4bG54LGNzaS1weGwt Zm9ybWF0IHByb3BlcnR5XG4iKTsNCj4gPiA+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiA+ID4gKwl9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXQgPSAwOw0KPiA+ID4NCj4gPiA+IEkgdGhpbmsgdGhp cyBsaW5lIGlzIG5vdCBuZWVkZWQuDQo+ID4NCj4gPiBPay4gSSB3aWxsIHJlbW92ZSBpdCBpbiBu ZXh0IHZlcnNpb24uDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsJc3dpdGNoIChjb3JlLT5kYXRhdHlw ZSkgew0KPiA+ID4gPiArCWNhc2UgWENTSV9EVF9ZVVY0MjI4QjoNCj4gPiA+ID4gKwljYXNlIFhD U0lfRFRfUkdCNDQ0Og0KPiA+ID4gPiArCWNhc2UgWENTSV9EVF9SR0I1NTU6DQo+ID4gPiA+ICsJ Y2FzZSBYQ1NJX0RUX1JHQjU2NToNCj4gPiA+ID4gKwljYXNlIFhDU0lfRFRfUkdCNjY2Og0KPiA+ ID4gPiArCWNhc2UgWENTSV9EVF9SR0I4ODg6DQo+ID4gPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzY6 DQo+ID4gPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzc6DQo+ID4gPiA+ICsJY2FzZSBYQ1NJX0RUX1JB Vzg6DQo+ID4gPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzEwOg0KPiA+ID4gPiArCWNhc2UgWENTSV9E VF9SQVcxMjoNCj4gPiA+ID4gKwljYXNlIFhDU0lfRFRfUkFXMTQ6DQo+ID4gPiA+ICsJCWJyZWFr Ow0KPiA+ID4gPiArCWNhc2UgWENTSV9EVF9ZVVY0MjIxMEI6DQo+ID4gPiA+ICsJY2FzZSBYQ1NJ X0RUX1JBVzE2Og0KPiA+ID4gPiArCWNhc2UgWENTSV9EVF9SQVcyMDoNCj4gPiA+ID4gKwkJaWYg KCFjb3JlLT5lbl9jc2lfdjIwKSB7DQo+ID4gPiA+ICsJCQlyZXQgPSAtRUlOVkFMOw0KPiA+ID4g PiArCQkJZGV2X2RiZyhjb3JlLT5kZXYsICJlbmFibGUgY3NpIHYyIGZvciB0aGlzIHBpeGVsDQo+ ID4gPiBmb3JtYXQiKTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4g KwlkZWZhdWx0Og0KPiA+ID4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ID4gPiArCX0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ ZGV2LCAiaW52YWxpZCBjc2ktcHhsLWZvcm1hdCBwcm9wZXJ0eSFcbiIpOw0KPiA+ID4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCWRldl9kYmcoY29y ZS0+ZGV2LCAicGl4ZWwgZm9ybWF0IHNldCBhcyAweCV4XG4iLCBjb3JlLT5kYXRhdHlwZSk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwljb3JlLT52ZmIgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9k ZSwgInhsbngsdmZiIik7DQo+ID4gPg0KPiA+ID4gQ2FuJ3QgdGhpcyBiZSBhIGxvY2FsIHZhcmlh YmxlIGFzIHdlbGw/DQo+ID4NCj4gPiBUcnVlLiBJIHdpbGwgdXBkYXRlIGl0IGluIG5leHQgdmVy c2lvbi4NCj4gPg0KPiA+ID4NCj4gPiA+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgIlZpZGVvIEZv cm1hdCBCcmlkZ2UgcHJvcGVydHkgPSAlc1xuIiwNCj4gPiA+ID4gKwkJY29yZS0+dmZiID8gIlBy ZXNlbnQiIDogIkFic2VudCIpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKCFjb3JlLT52ZmIp IHsNCj4gPiA+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJmYWlsZWQgYXMgVkZCIGlzIGRpc2Fi bGVkIVxuIik7DQo+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiArCX0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArCXBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobm9kZSwgInBvcnRz Iik7DQo+ID4gPiA+ICsJaWYgKCFwb3J0cykNCj4gPiA+ID4gKwkJcG9ydHMgPSBub2RlOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJbnBvcnRzID0gMDsNCj4gPiA+ID4gKwlmb3JfZWFjaF9jaGlsZF9v Zl9ub2RlKHBvcnRzLCBwb3J0KSB7DQo+ID4gPiA+ICsJCWNvbnN0IGNoYXIgKnBhdHRlcm4gPSAi bW9ubyI7DQo+ID4gPiA+ICsJCWludCBsZW4gPSBzdHJsZW4ocGF0dGVybik7DQo+ID4gPiA+ICsJ CXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kcG9pbnQ7DQo+ID4gPiA+ICsJCXN0cnVjdCB2NGwyX2Z3 bm9kZV9lbmRwb2ludCB2NGxlbmRwb2ludDsNCj4gPiA+ID4gKwkJaW50IHJldDsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArCQlpZiAoIXBvcnQtPm5hbWUgfHwgb2Zfbm9kZV9jbXAocG9ydC0+bmFtZSwg InBvcnQiKSkNCj4gPiA+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWVu ZHBvaW50ID0gb2ZfZ2V0X25leHRfY2hpbGQocG9ydCwgTlVMTCk7DQo+ID4gPiA+ICsJCWlmICgh ZW5kcG9pbnQpIHsNCj4gPiA+ID4gKwkJCWRldl9lcnIoY29yZS0+ZGV2LCAiTm8gcG9ydCBhdFxu Iik7DQo+ID4gPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsJCS8qDQo+ID4gPiA+ICsJCSAqIHNpbmNlIGZpcnN0IHBvcnQgaXMgc2luayBw b3J0IGFuZCBpdCBjb250YWlucw0KPiA+ID4gPiArCQkgKiBhbGwgaW5mbyBhYm91dCBkYXRhLWxh bmVzIGFuZCBjZmEtcGF0dGVybiwNCj4gPiA+ID4gKwkJICogZG9uJ3QgcGFyc2Ugc2Vjb25kIHBv cnQgYnV0IG9ubHkgY2hlY2sgaWYgZXhpc3RzDQo+ID4gPiA+ICsJCSAqLw0KPiA+ID4gPiArCQlp ZiAobnBvcnRzID09IFhWSVBfUEFEX1NPVVJDRSkgew0KPiA+ID4gPiArCQkJZGV2X2RiZyhjb3Jl LT5kZXYsICJubyBuZWVkIHRvIHBhcnNlIHNvdXJjZSBwb3J0Iik7DQo+ID4gPiA+ICsJCQlucG9y dHMrKzsNCj4gPiA+ID4gKwkJCW9mX25vZGVfcHV0KGVuZHBvaW50KTsNCj4gPiA+ID4gKwkJCWNv bnRpbnVlOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJY29yZS0+YmF5ZXIg PSBYQ1NJX0JBWUVSX1JHR0I7DQo+ID4gPiA+ICsJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3Ry aW5nKHBvcnQsICJ4bG54LGNmYS1wYXR0ZXJuIiwNCj4gPiA+ID4gKwkJCQkJICAgICAgJnBhdHRl cm4pOw0KPiA+ID4gPiArCQlpZiAocmV0ID09IDApIHsNCj4gPiA+DQo+ID4gPiBOaXQuICFyZXQu DQo+ID4gPg0KPiA+DQo+ID4gV2lsbCB1cGRhdGUgaW4gbmV4dCB2ZXJzaW9uLg0KPiA+DQo+ID4N Cj4gPiA+ID4gKwkJCWlmICghc3RybmNtcCgiZ3JiZyIsIHBhdHRlcm4sIGxlbikpIHsNCj4gPiA+ ID4gKwkJCQljb3JlLT5iYXllciA9IFhDU0lfQkFZRVJfR1JCRzsNCj4gPiA+ID4gKwkJCX0gZWxz ZSBpZiAoIXN0cm5jbXAoImJnZ3IiLCBwYXR0ZXJuLCBsZW4pKSB7DQo+ID4gPiA+ICsJCQkJY29y ZS0+YmF5ZXIgPSBYQ1NJX0JBWUVSX0JHR1I7DQo+ID4gPiA+ICsJCQl9IGVsc2UgaWYgKCFzdHJu Y21wKCJyZ2diIiwgcGF0dGVybiwgbGVuKSkgew0KPiA+ID4gPiArCQkJCWNvcmUtPmJheWVyID0g WENTSV9CQVlFUl9SR0dCOw0KPiA+ID4gPiArCQkJfSBlbHNlIGlmICghc3RybmNtcCgiZ2JyZyIs IHBhdHRlcm4sIGxlbikpIHsNCj4gPiA+ID4gKwkJCQljb3JlLT5iYXllciA9IFhDU0lfQkFZRVJf R0JSRzsNCj4gPiA+ID4gKwkJCX0gZWxzZSB7DQo+ID4gPiA+ICsJCQkJZGV2X2Vycihjb3JlLT5k ZXYsICJpbmNvcnJlY3QgY2ZhIHN0cmluZ1xuIik7DQo+ID4gPiA+ICsJCQkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gPiA+ICsJCQl9DQo+ID4gPiA+ICsJCX0gZWxzZSBpZiAocmV0ICE9IC1FSU5WQUwp IHsNCj4gPiA+DQo+ID4gPiBXaGF0IGFib3V0IGZvciBvdGhlciBlcnJvcnM/DQo+ID4NCj4gPiBU aGVyZSBhcmUgb25seSAzIHR5cGVzIG9mIGVycm9ycy4gLUVJTlZBTCBtZWFucyB0aGF0IHByb3Bl cnR5IGRvZXNuJ3QgZXhpc3QuDQo+ID4gVGhpcyBpcyBvayB4bG54LGNmYS1wYXR0ZXJuIGlzIG5v dCBhIHJlcXVpcmVkIHByb3BlcnR5Lg0KPiA+IEluIGNhc2UgaXQgZXhpc3RzLCB0aGVuIHRoZSB2 YWx1ZSByZWFkIHNob3VsZCBiZSBvbmUgb2YgdGhvc2Ugc3RyaW5ncyBtZW50aW9uZWQNCj4gYWJv dmUuDQo+ID4gT3RoZXJ3aXNlIHJldCB2YWwgZWl0aGVyIG1lYW5zIHRoYXQgdGhlcmUgd2FzIE5V TEwgc3RyaW5nIHZhbHVlIGZvciB0aGUNCj4gcHJvcGVydHkgb3INCj4gPiBUaGUgc3RyaW5nIHdh cyBub3QgYSBwcm9wZXIgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBib3RoIG9mIHdoaWNoIG1lYW4g YQ0KPiBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgc2V0IG9uIGNvcmUtPmJheWVyLg0KPiA+DQo+ID4g Pg0KPiA+ID4gPiArCQkJZGV2X2Vycihjb3JlLT5kZXYsICJpbnZhbGlkIGNmYSBwYXR0ZXJuIVxu Iik7DQo+ID4gPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsJCWRl dl9kYmcoY29yZS0+ZGV2LCAiYmF5ZXIgcGF0dGVybiA9ICVkXG4iLCBjb3JlLT5iYXllcik7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmV0ID0NCj4gPiA+IHY0bDJfZndub2RlX2VuZHBvaW50X3Bh cnNlKG9mX2Z3bm9kZV9oYW5kbGUoZW5kcG9pbnQpLA0KPiA+ID4gPiArCQkJCQkJICZ2NGxlbmRw b2ludCk7DQo+ID4gPiA+ICsJCW9mX25vZGVfcHV0KGVuZHBvaW50KTsNCj4gPiA+ID4gKwkJaWYg KHJldCkNCj4gPiA+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJZGV2 X2RiZyhjb3JlLT5kZXYsICIlcyA6IHBvcnQgJWQgYnVzIHR5cGUgPSAlZFxuIiwNCj4gPiA+ID4g KwkJCV9fZnVuY19fLCBucG9ydHMsIHY0bGVuZHBvaW50LmJ1c190eXBlKTsNCj4gPiA+ID4gKw0K PiA+ID4gPiArCQlpZiAodjRsZW5kcG9pbnQuYnVzX3R5cGUgPT0gVjRMMl9NQlVTX0NTSTJfRFBI WSkgew0KPiA+ID4gPiArCQkJZGV2X2RiZyhjb3JlLT5kZXYsICIlcyA6IGJhc2UucG9ydCA9ICVk IGJhc2UuaWQgPQ0KPiA+ID4gJWRcbiIsDQo+ID4gPiA+ICsJCQkJX19mdW5jX18sIHY0bGVuZHBv aW50LmJhc2UucG9ydCwNCj4gPiA+ID4gKwkJCQl2NGxlbmRwb2ludC5iYXNlLmlkKTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArCQkJZGV2X2RiZyhjb3JlLT5kZXYsICIlcyA6IG1pcGkgbnVtYmVyIGxh bmVzID0gJWRcbiIsDQo+ID4gPiA+ICsJCQkJX19mdW5jX18sDQo+ID4gPiA+ICsJCQkJdjRsZW5k cG9pbnQuYnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lcyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KwkJCWNvcmUtPm1heF9udW1fbGFuZXMgPQ0KPiA+ID4gPiArCQkJCXY0bGVuZHBvaW50LmJ1cy5t aXBpX2NzaTIubnVtX2RhdGFfbGFuZXM7DQo+ID4gPiA+ICsJCX0gZWxzZSB7DQo+ID4gPiA+ICsJ CQlkZXZfZGJnKGNvcmUtPmRldiwgIiVzIDogTm90IGEgQ1NJMiBidXNcbiIsIF9fZnVuY19fKTsN Cj4gPiA+DQo+ID4gPiBOb3Qgc3VyZSBpZiB0aGlzIGFkZHMgYW55IGluZm8uDQo+ID4NCj4gPiBO b3QgcmVhbGx5IHJlcXVpcmVkLiBJIHdpbGwgY29udmVydCB0aGlzIHRvIGEgY29tbWVudCBpbiBu ZXh0IHJldmlzaW9uLg0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwkJLyogQ291bnQgdGhlIG51bWJlciBvZiBwb3J0cy4gKi8NCj4gPiA+ID4gKwkJbnBvcnRz Kys7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYs ICJtYXggbGFuZXMgPSAlZCIsIGNvcmUtPm1heF9udW1fbGFuZXMpOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJaWYgKG5wb3J0cyAhPSBYQ1NJX01FRElBX1BBRFMpIHsNCj4gPiA+ID4gKwkJZGV2X2Vy cihjb3JlLT5kZXYsICJpbnZhbGlkIG51bWJlciBvZiBwb3J0cyAldVxuIiwgbnBvcnRzKTsNCj4g PiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgKi8NCj4gPiA+ID4gKwljb3JlLT5pcnEg PSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsNCj4gPiA+ID4gKwlyZXQgPSBkZXZtX3Jl cXVlc3RfaXJxKGNvcmUtPmRldiwgY29yZS0+aXJxLCB4Y3NpMnJ4c3NfaXJxX2hhbmRsZXIsDQo+ ID4gPiA+ICsJCQkgICAgICAgSVJRRl9TSEFSRUQsICJ4aWxpbngtY3NpMnJ4c3MiLCB4Y3NpMnJ4 c3MpOw0KPiA+ID4gPiArCWlmIChyZXQpIHsNCj4gPiA+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYs ICJFcnIgPSAlZCBJbnRlcnJ1cHQgaGFuZGxlciByZWcgZmFpbGVkIVxuIiwNCj4gPiA+ID4gKwkJ CXJldCk7DQo+ID4gPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRp YyBpbnQgeGNzaTJyeHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4g PiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXY7DQo+ID4gPiA+ICsJ c3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzOw0KPiA+ID4gPiArCXN0cnVjdCB4Y3Np MnJ4c3NfY29yZSAqY29yZTsNCj4gPiA+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCj4gPiA+ ID4gKwlpbnQgcmV0LCBudW1fY3RybHMsIGk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwl4Y3NpMnJ4 c3MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp4Y3NpMnJ4c3MpLCBHRlBfS0VS TkVMKTsNCj4gPiA+ID4gKwlpZiAoIXhjc2kycnhzcykNCj4gPiA+ID4gKwkJcmV0dXJuIC1FTk9N RU07DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwljb3JlID0gJnhjc2kycnhzcy0+Y29yZTsNCj4gPiA+ ID4gKwljb3JlLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJbXV0ZXhf aW5pdCgmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldCA9IHhjc2ky cnhzc19wYXJzZV9vZih4Y3NpMnJ4c3MpOw0KPiA+ID4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ID4g PiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiA+ID4gKwljb3JlLT5pb21l bSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShjb3JlLT5kZXYsIHJlcyk7DQo+ID4gPiA+ICsJaWYg KElTX0VSUihjb3JlLT5pb21lbSkpDQo+ID4gPiA+ICsJCXJldHVybiBQVFJfRVJSKGNvcmUtPmlv bWVtKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldCA9IHhjc2kycnhzc19jbGtfZ2V0KGNvcmUp Ow0KPiA+ID4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4g PiArDQo+ID4gPiA+ICsJcmV0ID0geGNzaTJyeHNzX2Nsa19lbmFibGUoY29yZSk7DQo+ID4gPiA+ ICsJaWYgKHJldCA8IDApDQo+ID4gPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwl4Y3NpMnJ4c3NfcmVzZXQoY29yZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwljb3JlLT5l dmVudHMgPSAoc3RydWN0IHhjc2kycnhzc19ldmVudCAqKSZ4Y3NpMnJ4c3NfZXZlbnRzOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJaWYgKGNvcmUtPmVuX3ZjeCkgew0KPiA+ID4gPiArCQl1MzIgYWxs b2Nfc2l6ZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVj dCB4Y3NpMnJ4c3NfZXZlbnQpICoNCj4gPiA+ID4gKwkJCSAgICAgWENTSV9WQ1hfTlVNX0VWRU5U UzsNCj4gPiA+ID4gKwkJY29yZS0+dmN4X2V2ZW50cyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2 LCBhbGxvY19zaXplLA0KPiA+ID4gPiArCQkJCQkJR0ZQX0tFUk5FTCk7DQo+ID4gPiA+ICsJCWlm ICghY29yZS0+dmN4X2V2ZW50cykgew0KPiA+ID4gPiArCQkJbXV0ZXhfZGVzdHJveSgmeGNzaTJy eHNzLT5sb2NrKTsNCj4gPiA+ID4gKwkJCXJldCA9IC1FTk9NRU07DQo+ID4gPiA+ICsJCQlnb3Rv IGFsbF9jbGtfZXJyOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJZm9yIChp ID0gMDsgaSA8IFhDU0lfVkNYX05VTV9FVkVOVFM7IGkrKykNCj4gPiA+ID4gKwkJCWNvcmUtPnZj eF9ldmVudHNbaV0ubWFzayA9IDEgPDwgaTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwkvKiBJbml0aWFsaXplIFY0TDIgc3ViZGV2aWNlIGFuZCBtZWRpYSBlbnRpdHkgKi8NCj4g PiA+ID4gKwl4Y3NpMnJ4c3MtPnBhZHNbWFZJUF9QQURfU0lOS10uZmxhZ3MgPSBNRURJQV9QQURf RkxfU0lOSzsNCj4gPiA+ID4gKwl4Y3NpMnJ4c3MtPnBhZHNbWFZJUF9QQURfU09VUkNFXS5mbGFn cyA9IE1FRElBX1BBRF9GTF9TT1VSQ0U7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBJbml0aWFs aXplIHRoZSBkZWZhdWx0IGZvcm1hdCAqLw0KPiA+ID4gPiArCXhjc2kycnhzc19zZXRfZGVmYXVs dF9mb3JtYXQoeGNzaTJyeHNzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIEluaXRpYWxpemUg VjRMMiBzdWJkZXZpY2UgYW5kIG1lZGlhIGVudGl0eSAqLw0KPiA+ID4gPiArCXN1YmRldiA9ICZ4 Y3NpMnJ4c3MtPnN1YmRldjsNCj4gPiA+ID4gKwl2NGwyX3N1YmRldl9pbml0KHN1YmRldiwgJnhj c2kycnhzc19vcHMpOw0KPiA+ID4gPiArCXN1YmRldi0+ZGV2ID0gJnBkZXYtPmRldjsNCj4gPiA+ ID4gKwlzdWJkZXYtPmludGVybmFsX29wcyA9ICZ4Y3NpMnJ4c3NfaW50ZXJuYWxfb3BzOw0KPiA+ ID4gPiArCXN0cmxjcHkoc3ViZGV2LT5uYW1lLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgc2l6ZW9m KHN1YmRldi0+bmFtZSkpOw0KPiA+ID4gPiArCXN1YmRldi0+ZmxhZ3MgfD0gVjRMMl9TVUJERVZf RkxfSEFTX0VWRU5UUyB8DQo+ID4gPiBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsNCj4gPiA+ ID4gKwlzdWJkZXYtPmVudGl0eS5vcHMgPSAmeGNzaTJyeHNzX21lZGlhX29wczsNCj4gPiA+ID4g Kwl2NGwyX3NldF9zdWJkZXZkYXRhKHN1YmRldiwgeGNzaTJyeHNzKTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJnN1YmRldi0+ZW50aXR5LCBYQ1NJ X01FRElBX1BBRFMsDQo+ID4gPiA+ICsJCQkJICAgICB4Y3NpMnJ4c3MtPnBhZHMpOw0KPiA+ID4g PiArCWlmIChyZXQgPCAwKQ0KPiA+ID4gPiArCQlnb3RvIGVycm9yOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJLyoNCj4gPiA+ID4gKwkgKiBJbiBjYXNlIHRoZSBFbmFibGUgQWN0aXZlIExhbmVzIGNv bmZpZyBwYXJhbWV0ZXIgaXMgbm90IHNldCwNCj4gPiA+ID4gKwkgKiBkeW5hbWljIGxhbmUgcmVj b25maWd1cmF0aW9uIGlzIG5vdCBhbGxvd2VkLg0KPiA+ID4gPiArCSAqIFNvIFY0TDJfQ0lEX1hJ TElOWF9NSVBJQ1NJU1NfQUNUX0xBTkVTIGN0cmwgd2lsbCBub3QgYmUNCj4gPiA+IHJlZ2lzdGVy ZWQuDQo+ID4gPiA+ICsJICogQWNjb3JkaW5nbHkgYWxsb2NhdGUgdGhlIG51bWJlciBvZiBjb250 cm9scw0KPiA+ID4gPiArCSAqLw0KPiA+ID4gPiArCW51bV9jdHJscyA9IEFSUkFZX1NJWkUoeGNz aTJyeHNzX2N0cmxzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmICghY29yZS0+ZW5hYmxlX2Fj dGl2ZV9sYW5lcykNCj4gPiA+ID4gKwkJbnVtX2N0cmxzLS07DQo+ID4gPiA+ICsNCj4gPiA+ID4g KwlkZXZfZGJnKGNvcmUtPmRldiwgIiMgb2YgY3RybHMgPSAlZFxuIiwgbnVtX2N0cmxzKTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnhjc2kycnhzcy0+Y3Ry bF9oYW5kbGVyLCBudW1fY3RybHMpOw0KPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHhjc2kycnhzc19jdHJscyk7IGkrKykgew0KPiA+ID4gPiArCQlzdHJ1Y3QgdjRsMl9jdHJs ICpjdHJsOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWlmICh4Y3NpMnJ4c3NfY3RybHNbaV0uaWQg PT0NCj4gPiA+ID4gKwkJCVY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1NfQUNUX0xBTkVTKSB7DQo+ ID4gPiA+ICsJCQlpZiAoIWNvcmUtPmVuYWJsZV9hY3RpdmVfbGFuZXMpIHsNCj4gPiA+ID4gKwkJ CQkvKiBEb24ndCByZWdpc3RlciBjb250cm9sICovDQo+ID4gPiA+ICsJCQkJZGV2X2RiZyhjb3Jl LT5kZXYsDQo+ID4gPiA+ICsJCQkJCSJTa2lwIGFjdGl2ZSBsYW5lIGNvbnRyb2xcbiIpOw0KPiA+ ID4gPiArCQkJCWNvbnRpbnVlOw0KPiA+ID4NCj4gPiA+IFRoaXMgYWN0aXZlIGxhbmUgY29udHJv bCBpcyBub3QgZXZlbiByZWdpc3RlcmVkLCBzbyB0aGUgY29udHJvbCBoYW5kbGVyDQo+ID4gPiBk b2Vzbid0IGV2ZW4gaGF2ZSB0byBjaGVjayB0aGlzIGZsYWcuIEJ1dCBJIGd1ZXNzIGl0IGRvZXNu J3QgaHVydCB0bw0KPiA+ID4ga2VlcCB0aGUgY2hlY2sgaW4gdGhlIGhhbmRsZXIsIHNvIEkgbGV0 IHlvdSBkZWNpZGUuDQo+ID4gPg0KPiA+DQo+ID4gSXQgd2Fzbid0IHRoZXJlIGluIHRoZSBmaXJz dCBwYXRjaCB2ZXJzaW9uLiBCdXQgYmFzZWQgb24gc3VnZ2VzdGlvbiBhZGRlZCB0aGlzLCBJDQo+ IHRoaW5rIGl0IHdvdWxkIGJlIGdvb2QgdG8ga2VlcCB0aGUgY2hlY2suDQo+ID4NCj4gPiA+ID4g KwkJCX0NCj4gPiA+ID4gKwkJCXhjc2kycnhzc19jdHJsc1tpXS5tYXggPSBjb3JlLT5tYXhfbnVt X2xhbmVzOw0KPiA+ID4gPiArCQkJeGNzaTJyeHNzX2N0cmxzW2ldLmRlZiA9IGNvcmUtPm1heF9u dW1fbGFuZXM7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlkZXZfZGJnKGNv cmUtPmRldiwgIiVkIGN0cmwgPSAweCV4XG4iLCBpLA0KPiA+ID4gPiArCQkJeGNzaTJyeHNzX2N0 cmxzW2ldLmlkKTsNCj4gPiA+ID4gKwkJY3RybCA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKCZ4Y3Np MnJ4c3MtPmN0cmxfaGFuZGxlciwNCj4gPiA+ID4gKwkJCQkJICAgICZ4Y3NpMnJ4c3NfY3RybHNb aV0sIE5VTEwpOw0KPiA+ID4gPiArCQlpZiAoIWN0cmwpIHsNCj4gPiA+ID4gKwkJCWRldl9lcnIo Y29yZS0+ZGV2LCAiRmFpbGVkIGZvciAlcyBjdHJsXG4iLA0KPiA+ID4gPiArCQkJCXhjc2kycnhz c19jdHJsc1tpXS5uYW1lKTsNCj4gPiA+ID4gKwkJCWdvdG8gZXJyb3I7DQo+ID4gPiA+ICsJCX0N Cj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgIiMg djRsMiBjdHJscyByZWdpc3RlcmVkID0gJWRcbiIsIGkgLSAxKTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCWlmICh4Y3NpMnJ4c3MtPmN0cmxfaGFuZGxlci5lcnJvcikgew0KPiA+ID4gPiArCQlkZXZf ZXJyKGNvcmUtPmRldiwgImZhaWxlZCB0byBhZGQgY29udHJvbHNcbiIpOw0KPiA+ID4gPiArCQly ZXQgPSB4Y3NpMnJ4c3MtPmN0cmxfaGFuZGxlci5lcnJvcjsNCj4gPiA+ID4gKwkJZ290byBlcnJv cjsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlzdWJkZXYtPmN0cmxfaGFuZGxl ciA9ICZ4Y3NpMnJ4c3MtPmN0cmxfaGFuZGxlcjsNCj4gPiA+ID4gKwlyZXQgPSB2NGwyX2N0cmxf aGFuZGxlcl9zZXR1cCgmeGNzaTJyeHNzLT5jdHJsX2hhbmRsZXIpOw0KPiA+ID4gPiArCWlmIChy ZXQgPCAwKSB7DQo+ID4gPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiZmFpbGVkIHRvIHNldCBj b250cm9sc1xuIik7DQo+ID4gPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gPiA+ICsJfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgeGNzaTJyeHNzKTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArCXJldCA9IHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3ViZGV2KHN1YmRl dik7DQo+ID4gPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiA+ID4gKwkJZGV2X2Vycihjb3JlLT5k ZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2XG4iKTsNCj4gPiA+ID4gKwkJZ290byBlcnJv cjsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlkZXZfaW5mbyhjb3JlLT5kZXYs ICJYaWxpbnggQ1NJMiBSeCBTdWJzeXN0ZW0gZGV2aWNlIGZvdW5kIVxuIik7DQo+ID4gPiA+ICsJ cmV0dXJuIDA7DQo+ID4gPg0KPiA+ID4gSnVzdCBhIG5pdC4gSSdkIGFkZCBlbiBlbXB0eSBsaW5l Lg0KPiA+DQo+ID4gT2suIFdpbGwgYWRkIGVtcHR5IGxpbmUgaGVyZS4NCj4gPg0KPiA+ID4NCj4g PiA+ID4gK2Vycm9yOg0KPiA+ID4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnhjc2kycnhz cy0+Y3RybF9oYW5kbGVyKTsNCj4gPiA+ID4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc3ViZGV2 LT5lbnRpdHkpOw0KPiA+ID4gPiArCW11dGV4X2Rlc3Ryb3koJnhjc2kycnhzcy0+bG9jayk7DQo+ ID4gPiA+ICthbGxfY2xrX2VycjoNCj4gPiA+ID4gKwl4Y3NpMnJ4c3NfY2xrX2Rpc2FibGUoY29y ZSk7DQo+ID4gPiA+ICsJcmV0dXJuIHJldDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4g PiArc3RhdGljIGludCB4Y3NpMnJ4c3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJy eHNzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gPiA+ICsJc3RydWN0IHhjc2ky cnhzc19jb3JlICpjb3JlID0gJnhjc2kycnhzcy0+Y29yZTsNCj4gPiA+ID4gKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnN1YmRldiA9ICZ4Y3NpMnJ4c3MtPnN1YmRldjsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsNCj4gPiA+ID4gKwl2NGwy X2N0cmxfaGFuZGxlcl9mcmVlKCZ4Y3NpMnJ4c3MtPmN0cmxfaGFuZGxlcik7DQo+ID4gPiA+ICsJ bWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gPiA+ID4gKwltdXRleF9k ZXN0cm95KCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ID4gPiArCXhjc2kycnhzc19jbGtfZGlzYWJs ZShjb3JlKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldHVybiAwOw0KPiA+ID4gPiArfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4Y3NpMnJ4c3Nf ZHJpdmVyID0gew0KPiA+ID4gPiArCS5kcml2ZXIgPSB7DQo+ID4gPiA+ICsJCS5uYW1lCQk9ICJ4 aWxpbngtY3NpMnJ4c3MiLA0KPiA+ID4gPiArCQkub2ZfbWF0Y2hfdGFibGUJPSB4Y3NpMnJ4c3Nf b2ZfaWRfdGFibGUsDQo+ID4gPiA+ICsJfSwNCj4gPiA+ID4gKwkucHJvYmUJCQk9IHhjc2kycnhz c19wcm9iZSwNCj4gPiA+ID4gKwkucmVtb3ZlCQkJPSB4Y3NpMnJ4c3NfcmVtb3ZlLA0KPiA+ID4g PiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4Y3NpMnJ4 c3NfZHJpdmVyKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArTU9EVUxFX0FVVEhPUigiVmlzaGFsIFNh Z2FyIDx2c2FnYXJAeGlsaW54LmNvbT4iKTsNCj4gPiA+ID4gK01PRFVMRV9ERVNDUklQVElPTigi WGlsaW54IE1JUEkgQ1NJMiBSeCBTdWJzeXN0ZW0gRHJpdmVyIik7DQo+ID4gPiA+ICtNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGlu dXgveGlsaW54LXY0bDItY29udHJvbHMuaA0KPiA+ID4gYi9pbmNsdWRlL3VhcGkvbGludXgveGls aW54LXY0bDItY29udHJvbHMuaA0KPiA+ID4gPiBpbmRleCBiNjQ0MWZlLi40Y2EzYjQ0IDEwMDY0 NA0KPiA+ID4gPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMu aA0KPiA+ID4gPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMu aA0KPiA+ID4gPiBAQCAtNzEsNCArNzEsMTggQEANCj4gPiA+ID4gIC8qIE5vaXNlIGxldmVsICov DQo+ID4gPiA+ICAjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9UUEdfTk9JU0VfR0FJTg0KPiA+ID4g CShWNEwyX0NJRF9YSUxJTlhfVFBHICsgMTcpDQo+ID4gPiA+DQo+ID4gPiA+ICsvKg0KPiA+ID4g PiArICogWGlsaW54IE1JUEkgQ1NJMiBSeCBTdWJzeXN0ZW0NCj4gPiA+ID4gKyAqLw0KPiA+ID4g PiArDQo+ID4gPiA+ICsvKiBCYXNlIElEICovDQo+ID4gPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJ TElOWF9NSVBJQ1NJU1MJCShWNEwyX0NJRF9VU0VSX0JBU0UgKw0KPiA+ID4gMHhjMDgwKQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKiBBY3RpdmUgTGFuZXMgKi8NCj4gPiA+ID4gKyNkZWZpbmUgVjRM Ml9DSURfWElMSU5YX01JUElDU0lTU19BQ1RfTEFORVMNCj4gPiA+IAkoVjRMMl9DSURfWElMSU5Y X01JUElDU0lTUyArIDEpDQo+ID4gPiA+ICsvKiBGcmFtZXMgcmVjZWl2ZWQgc2luY2Ugc3RyZWFt aW5nIGlzIHNldCAqLw0KPiA+ID4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfTUlQSUNTSVNT X0ZSQU1FX0NPVU5URVINCj4gPiA+IAkoVjRMMl9DSURfWElMSU5YX01JUElDU0lTUyArIDIpDQo+ ID4gPiA+ICsvKiBSZXNldCBhbGwgZXZlbnQgY291bnRlcnMgKi8NCj4gPiA+ID4gKyNkZWZpbmUg VjRMMl9DSURfWElMSU5YX01JUElDU0lTU19SRVNFVF9DT1VOVEVSUw0KPiA+ID4gKFY0TDJfQ0lE X1hJTElOWF9NSVBJQ1NJU1MgKyAzKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICAjZW5kaWYgLyogX19V QVBJX1hJTElOWF9WNEwyX0NPTlRST0xTX0hfXyAqLw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWV2ZW50cy5oDQo+IGIvaW5jbHVkZS91YXBpL2xp bnV4L3hpbGlueC0NCj4gPiA+IHY0bDItZXZlbnRzLmgNCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMC4uMmZlZjBiNQ0KPiA+ID4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1ldmVudHMu aA0KPiA+ID4gPiBAQCAtMCwwICsxLDI4IEBADQo+ID4gPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAqIFhpbGlueCBWNEwy IEV2ZW50cw0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBYaWxp bngsIEluYy4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBDb250YWN0czogVmlzaGFsIFNhZ2Fy IDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKi8NCj4g PiA+ID4gKw0KPiA+ID4gPiArI2lmbmRlZiBfX1VBUElfWElMSU5YX1Y0TDJfRVZFTlRTX0hfXw0K PiA+ID4gPiArI2RlZmluZSBfX1VBUElfWElMSU5YX1Y0TDJfRVZFTlRTX0hfXw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKy8qDQo+ID4gPiA+ICsgKiBFdmVudHMNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBWNEwy X0VWRU5UX1hMTlhDU0lSWF9TUEtUOiBTaG9ydCBwYWNrZXQgcmVjZWl2ZWQNCj4gPiA+ID4gKyAq IFY0TDJfRVZFTlRfWExOWENTSVJYX1NQS1RfT1ZGOiBTaG9ydCBwYWNrZXQgRklGTyBvdmVyZmxv dw0KPiA+ID4gPiArICogVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU0xCRjogU3RyZWFtIGxpbmUgYnVm ZmVyIGZ1bGwNCj4gPiA+ID4gKyAqLw0KPiA+ID4NCj4gPiA+IFdvdWxkIGJlIGJldHRlciB0byBj b21tZW50IGlubGluZS4gQnV0IHVwIHRvIHlvdS4NCj4gPg0KPiA+IE9rLiBXaWxsIGRvIGl0IGlu IG5leHQgdmVyc2lvbg0KPiA+DQo+ID4gUmVnYXJkcw0KPiA+IFZpc2hhbCBTYWdhcg0KPiA+DQo+ ID4gPg0KPiA+ID4gVGhhbmtzLA0KPiA+ID4gLWh5dW4NCj4gPiA+DQo+ID4gPiA+ICsjZGVmaW5l IFY0TDJfRVZFTlRfWExOWENTSVJYX0NMQVNTDQo+IAkoVjRMMl9FVkVOVF9QUklWQVRFX1NUQVJU IHwNCj4gPiA+IDB4MTAwKQ0KPiA+ID4gPiArI2RlZmluZSBWNEwyX0VWRU5UX1hMTlhDU0lSWF9T UEtUCShWNEwyX0VWRU5UX1hMTlhDU0lSWF9DTEFTUw0KPiA+ID4gfCAweDEpDQo+ID4gPiA+ICsj ZGVmaW5lIFY0TDJfRVZFTlRfWExOWENTSVJYX1NQS1RfT1ZGDQo+ID4gPiAJKFY0TDJfRVZFTlRf WExOWENTSVJYX0NMQVNTIHwgMHgyKQ0KPiA+ID4gPiArI2RlZmluZSBWNEwyX0VWRU5UX1hMTlhD U0lSWF9TTEJGCShWNEwyX0VWRU5UX1hMTlhDU0lSWF9DTEFTUw0KPiA+ID4gfCAweDMpDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyNlbmRpZiAvKiBfX1VBUElfWElMSU5YX1Y0TDJfRVZFTlRTX0hfXyAq Lw0KPiA+ID4gPiAtLQ0KPiA+ID4gPiAyLjcuNA0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+DQo=