From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 601FDC3A5A0 for ; Mon, 20 Apr 2020 18:06:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2B014206D6 for ; Mon, 20 Apr 2020 18:06:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="bhwsM7kU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727101AbgDTSGk (ORCPT ); Mon, 20 Apr 2020 14:06:40 -0400 Received: from mail-eopbgr700042.outbound.protection.outlook.com ([40.107.70.42]:22341 "EHLO NAM04-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726123AbgDTSGj (ORCPT ); Mon, 20 Apr 2020 14:06:39 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CO6XOiKOUDqeGLgJglgcFouih27rSrdSN+CPR2MjNzLPJ/oxfa5EEKg2Si1683E9rX3g1aGxLBLPz7zwB84GuSIf/mT+g/ascTE1dvJA8zE+FaNs1jxuFEAjrIy4hQO55duOrXTqbyvwMpf41xfUNKYexikOAUg6bvYyZiEX/R3FkQy+aiNPaHDl7M8tk04JnnHTTokez/JBwF7IT+7kzOalLblsH+EYhaYblVcvy68DzuX0ksjMd63KW+6yUfqSSVwNVwixcc4MqlxeVB5AoiAUqMteF2KwcyNfVWfwn28PcjEik8M5LBF9FCPQpwQNuSnSJcHvCtYUgddWo6h4Ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xGIuKAdi9ckEOb5xuaIO9+vWtcSj6wqjlpla/CmjflQ=; b=L11ihcYGdZ8FLvKrM0TFNpqdcULmvNWGD2d21UWH3Bi/Q6jdpbdSvoUIRA7lwDQph8l7NwZYRFplP3VyiY6oruX/al3i9Haqpy8u2AhQ7jFOzxWsoWxmehpog7Gl5ZhTt/vB70aa92/6tjN3/sQF+IG60Sfwr+ouU55JVm2siVRhcOMz4BP807MQCEHCj+69m9GC/upSFoMcRFfTifJdZYHppbpO5JYxzvyQQ4e+vb4GRF5A7/u7o7bLx7/+IijNFLVqFFvovKn6Pc6OVijinAguXnN+ZIHEhFtxXhWgRuOoBy6zVuDHmflGrY3EVr2roAJBfj8sqZiSX3alj9o1xQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=xilinx.com; dmarc=pass action=none header.from=xilinx.com; dkim=pass header.d=xilinx.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xGIuKAdi9ckEOb5xuaIO9+vWtcSj6wqjlpla/CmjflQ=; b=bhwsM7kUoP0sKDnyq8+JXo7qPE753eYbA3vC8kvq/7ACnbqaG8NrfQuBrKLyNdp1lm911gVkKICMsK6Rwra6LCc2XUFVff7AwOnDUsqrXmWPXMOhp8o1kAVUHnHbewiqmLHlcV3vV1L6TUbw3Zf9QIRnEKQIzQxMbjOa8PSaGeY= Received: from BY5PR02MB6867.namprd02.prod.outlook.com (2603:10b6:a03:21c::9) by BY5PR02MB6353.namprd02.prod.outlook.com (2603:10b6:a03:1fb::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.27; Mon, 20 Apr 2020 18:03:14 +0000 Received: from BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::3049:963a:2a0d:3bff]) by BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::3049:963a:2a0d:3bff%4]) with mapi id 15.20.2921.027; Mon, 20 Apr 2020 18:03:14 +0000 From: Vishal Sagar To: Laurent Pinchart CC: Hyun Kwon , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Luca Ceresoli , Jacopo Mondi , Hyun Kwon Subject: RE: [PATCH v11 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Topic: [PATCH v11 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Index: AQHWDqdoYfHJZJ7yyEOpsMzdPA1DraiAzAoAgAE/8uA= Date: Mon, 20 Apr 2020 18:03:14 +0000 Message-ID: References: <20200409194424.45555-1-vishal.sagar@xilinx.com> <20200409194424.45555-3-vishal.sagar@xilinx.com> <20200419180222.GB8117@pendragon.ideasonboard.com> In-Reply-To: <20200419180222.GB8117@pendragon.ideasonboard.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.130] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: a4debdd6-3e3a-4548-bb04-08d7e5551886 x-ms-traffictypediagnostic: BY5PR02MB6353:|BY5PR02MB6353: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:411; x-forefront-prvs: 03793408BA x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR02MB6867.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(10009020)(4636009)(346002)(376002)(39860400002)(366004)(396003)(136003)(7416002)(81156014)(478600001)(4326008)(107886003)(26005)(66446008)(86362001)(76116006)(52536014)(316002)(66556008)(64756008)(54906003)(66476007)(66946007)(8676002)(71200400001)(5660300002)(33656002)(7696005)(6506007)(30864003)(9686003)(6916009)(53546011)(2906002)(55016002)(8936002)(186003)(579004)(559001);DIR:OUT;SFP:1101; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ++fc/eTTOQJXzEO5Ff9J6x9M3dAkNLiFUaqQap1tNky7IiHJ3JACFER9dtNuMUHyFO/EZkgLX+T/I7UjaqasM9MilMf5TT3LBw1UMzwhmiwXg5mt7XOvJt+ySm+RST2D/T/sTuUz2dQyh863HuraZdB2p4jhWh9lN5VLy03Eh3cTHzDI6cLxOdc/BWHOKeFJw8f5nrDD0eNkhXMB3WCNTFZAwemJz2gq+KSaJD+QGSj3xCYAjW6gTCPRvtjjj4IJTJwIt3JQS0g1pO73fLCzX6PTkr23aBOwDY5nve70O3dS1Gk+eNQKOTUtmermeZ+kjZqqcvciOU7OTQJ9dlYc0N/yKOVl1bq1ODBkpdtos6Y147LmV8AUoe2EQrhuycaANIdclLtdFlx1PKSHdrHJ5FDZZEFnDMeXWM33bl6a+QzJZNqJLD/q1rj09KENbMh6 x-ms-exchange-antispam-messagedata: 36MqQz82GQfo8mJobdRBzZ6HDvDahB5n3rOCqI2o7u/Q/0OD5N33YLSX16X1OTB7+DSwD8vmvZEGgNGA2wBeOG3Wyzizt2+FdrqHeMWhs21Ndd0WXQkCjkEqM7NuGq4qJQSdFDzLRrQucGTYepbmmQ== 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: a4debdd6-3e3a-4548-bb04-08d7e5551886 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2020 18:03:14.0716 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /iWXIjFjnwMfVzY8xMCr8Jc8k+6g93c4s14MKKVcHHVYnX9a3hceqBYh5HMracVKRfa9tgJEKhSqo6o5/E5JCw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB6353 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTGF1cmVudCwNCg0KVGhhbmtzIGZvciByZXZpZXdpbmcgdGhlIHBhdGNoIGluIGRlcHRoLg0K DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExhdXJlbnQgUGluY2hhcnQg PGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4NCj4gU2VudDogU3VuZGF5LCBBcHJp bCAxOSwgMjAyMCAxMTozMiBQTQ0KPiBUbzogVmlzaGFsIFNhZ2FyIDx2c2FnYXJAeGlsaW54LmNv bT4NCj4gQ2M6IEh5dW4gS3dvbiA8aHl1bmtAeGlsaW54LmNvbT47IG1jaGVoYWJAa2VybmVsLm9y ZzsNCj4gcm9iaCtkdEBrZXJuZWwub3JnOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsgTWljaGFsIFNp bWVrDQo+IDxtaWNoYWxzQHhpbGlueC5jb20+OyBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc7 DQo+IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBoYW5zLnZlcmt1aWxAY2lzY28uY29tOyBs aW51eC1hcm0tDQo+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1rZXJuZWxAdmdl ci5rZXJuZWwub3JnOyBEaW5lc2ggS3VtYXINCj4gPGRpbmVzaGtAeGlsaW54LmNvbT47IFNhbmRp cCBLb3RoYXJpIDxzYW5kaXBrQHhpbGlueC5jb20+OyBMdWNhIENlcmVzb2xpDQo+IDxsdWNhQGx1 Y2FjZXJlc29saS5uZXQ+OyBKYWNvcG8gTW9uZGkgPGphY29wb0BqbW9uZGkub3JnPjsgSHl1biBL d29uDQo+IDxoeXVua0B4aWxpbnguY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMSAyLzJd IG1lZGlhOiB2NGw6IHhpbGlueDogQWRkIFhpbGlueCBNSVBJIENTSS0yIFJ4DQo+IFN1YnN5c3Rl bSBkcml2ZXINCj4gDQo+IEhpIFZpc2hhbCwNCj4gDQo+IFRoYW5rIHlvdSBmb3IgdGhlIHBhdGNo Lg0KPiANCj4gT24gRnJpLCBBcHIgMTAsIDIwMjAgYXQgMDE6MTQ6MjRBTSArMDUzMCwgVmlzaGFs IFNhZ2FyIHdyb3RlOg0KPiA+IFRoZSBYaWxpbnggTUlQSSBDU0ktMiBSeCBTdWJzeXN0ZW0gc29m dCBJUCBpcyB1c2VkIHRvIGNhcHR1cmUgaW1hZ2VzDQo+ID4gZnJvbSBNSVBJIENTSS0yIGNhbWVy YSBzZW5zb3JzIGFuZCBvdXRwdXQgQVhJNC1TdHJlYW0gdmlkZW8gZGF0YSByZWFkeQ0KPiA+IGZv ciBpbWFnZSBwcm9jZXNzaW5nLiBQbGVhc2UgcmVmZXIgdG8gUEcyMzIgZm9yIGRldGFpbHMuDQo+ ID4NCj4gPiBUaGUgQ1NJMiBSeCBjb250cm9sbGVyIGZpbHRlcnMgb3V0IGFsbCBwYWNrZXRzIGV4 Y2VwdCBmb3IgdGhlIHBhY2tldHMNCj4gPiB3aXRoIGRhdGEgdHlwZSBmaXhlZCBpbiBoYXJkd2Fy ZS4gUkFXOCBwYWNrZXRzIGFyZSBhbHdheXMgYWxsb3dlZCB0bw0KPiA+IHBhc3MgdGhyb3VnaC4N Cj4gPg0KPiA+IEl0IGlzIGFsc28gdXNlZCB0byBzZXR1cCBhbmQgaGFuZGxlIGludGVycnVwdHMg YW5kIGVuYWJsZSB0aGUgY29yZS4gSXQNCj4gPiBsb2dzIGFsbCB0aGUgZXZlbnRzIGluIHJlc3Bl Y3RpdmUgY291bnRlcnMgYmV0d2VlbiBzdHJlYW1pbmcgb24gYW5kIG9mZi4NCj4gPg0KPiA+IFRo ZSBkcml2ZXIgc3VwcG9ydHMgb25seSB0aGUgdmlkZW8gZm9ybWF0IGJyaWRnZSBlbmFibGVkIGNv bmZpZ3VyYXRpb24uDQo+ID4gU29tZSBkYXRhIHR5cGVzIGxpa2UgWVVWIDQyMiAxMGJwYywgUkFX MTYsIFJBVzIwIGFyZSBzdXBwb3J0ZWQgd2hlbg0KPiB0aGUNCj4gPiBDU0kgdjIuMCBmZWF0dXJl IGlzIGVuYWJsZWQgaW4gZGVzaWduLiBXaGVuIHRoZSBWQ1ggZmVhdHVyZSBpcyBlbmFibGVkLA0K PiA+IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIGNoYW5uZWxzIGJlY29tZXMgMTYgZnJv bSA0Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogVmlzaGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJA eGlsaW54LmNvbT4NCj4gPiBSZXZpZXdlZC1ieTogSHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54 LmNvbT4NCj4gPiAtLS0NCj4gPiB2MTENCj4gPiAtIEZpeGVkIGNoYW5nZXMgYXMgc3VnZ2VzdGVk IGJ5IFNha2FyaSBBaWx1cw0KPiA+IC0gUmVtb3ZlZCBWSURFT19YSUxJTlggZnJvbSBLQ29uZmln DQo+ID4gLSBNaW5vciBmb3JtYXR0aW5nDQo+ID4gLSBTdGFydCAvIFN0b3AgdXBzdHJlYW0gc3Vi LWRldmljZSBpbiB4Y3NpMnJ4c3Nfc3RhcnRfc3RyZWFtKCkNCj4gPiAgIGFuZCB4Y3NpMnJ4c3Nf c3RvcF9zdHJlYW0oKQ0KPiA+IC0gQWRkZWQgdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZV9kZWZh dWx0KCkgaW4gdjRsMl9zdWJkZXZfcGFkX29wcygpDQo+ID4gLSBVc2UgZndub2RlX2dyYXBoX2dl dF9lbmRwb2ludF9ieV9pZCgpIGluc3RlYWQgb2YgcGFyc2luZyBieSBzZWxmDQo+ID4gLSBTZXQg YnVzIHR5cGUgYXMgVjRMMl9NQlVTX0NTSTJfRFBIWSBpbiBzdHJ1Y3QgdjRsMl9md25vZGVfZW5k cG9pbnQNCj4gPiAtIFJlbW92ZSBudW1fY2xrcyBmcm9tIGNvcmUuIEluc3RlYWQgdXNlIEFSUkFZ X1NJWkUoKQ0KPiA+IC0gRml4ZWQgU1BEWCBoZWFkZXIgdG8gR1BMLTIuMA0KPiA+IC0gVXBkYXRl IGNvcHlyaWdodCB5ZWFyIHRvIDIwMjANCj4gPg0KPiA+IHYxMA0KPiA+IC0gUmVtb3ZlZCBhbGwg VjRMMiBjb250cm9scyBhbmQgZXZlbnRzIGJhc2VkIG9uIFNha2FyaSdzIGNvbW1lbnRzLg0KPiA+ IC0gTm93IHN0b3Bfc3RyZWFtKCkgYmVmb3JlIHRvZ2dsaW5nIHJzdF9ncGlvDQo+ID4gLSBVcGRh dGVkIGluaXRfbWJ1cygpIHRvIHRocm93IGVycm9yIG9uIGFycmF5IG91dCBvZiBib3VuZCBhY2Nl c3MNCj4gPiAtIE1ha2UgZXZlbnRzIGFuZCB2Y3hfZXZlbnRzIGFzIGNvdW50ZXJzIGluc3RlYWQg b2Ygc3RydWN0dXJlcw0KPiA+IC0gTWlub3IgZml4ZXMgaW4gc2V0X2Zvcm1hdCgpIGVudW1fbWJ1 c19jb2RlKCkgYXMgc3VnZ2VzdGVkIGJ5IFNha2FyaQ0KPiA+DQo+ID4gdjkNCj4gPiAtIE1vdmVk IGFsbCBjb250cm9scyBhbmQgZXZlbnRzIHRvIHhpbGlueC1jc2kycnhzcy5oDQo+ID4gLSBVcGRh dGVkIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIGNvbnRyb2xzIGFuZCBldmVudHMNCj4gPiAtIEdl dCBjb250cm9sIGJhc2UgYWRkcmVzcyBmcm9tIHY0bDItY29udHJvbHMuaCAoMHgxMGMwKQ0KPiA+ IC0gRml4IEtDb25maWcgZm9yIGRlcGVuZGVuY3kgb24gVklERU9fWElMSU5YDQo+ID4gLSBBZGRl ZCBlbnVtX21idXNfY29kZSgpIHN1cHBvcnQNCj4gPiAtIEFkZGVkIGRlZmF1bHQgZm9ybWF0IHRv IGJlIHJldHVybmVkIG9uIG9wZW4oKQ0KPiA+IC0gTWFyayB2YXJpYWJsZXMgYXJlIGNvbnN0DQo+ ID4gLSBSZW1vdmUgcmVmZXJlbmNlcyB0byBzaG9ydCBwYWNrZXQgaW4gY29tbWVudHMNCj4gPiAt IEFkZCBjaGVjayBmb3Igc3RyZWFtaW5nIGJlZm9yZSBzZXR0aW5nIGFjdGl2ZSBsYW5lcyBjb250 cm9sDQo+ID4gLSBzdHJsY3B5IC0+IHN0cnNjcHkNCj4gPiAtIEZpeCB4Y3NpMnJ4c3Nfc2V0X2Zv cm1hdCgpDQo+ID4NCj4gPiB2OA0KPiA+IC0gVXNlIGNsa19idWxrKiBBUElzDQo+ID4gLSBBZGQg Z3BpbyByZXNldCBmb3IgYXNzZXJ0aW5nIHZpZGVvX2FyZXNldG4gd2hlbiBzdHJlYW0gbGluZSBi dWZmZXIgb2NjdXJzDQo+ID4gLSBSZW1vdmVkIHNob3J0IHBhY2tldCByZWxhdGVkIGV2ZW50cyBh bmQgaXJxIGhhbmRsaW5nDQo+ID4gICAtIFY0TDJfRVZFTlRfWExOWENTSVJYX1NQS1QgYW5kIFY0 TDJfRVZFTlRfWExOWENTSVJYX1NQS1RfT1ZGDQo+IHJlbW92ZWQNCj4gPiAtIFJlbW92ZWQgZnJh bWUgY291bnRlciBjb250cm9sDQo+IFY0TDJfQ0lEX1hJTElOWF9NSVBJQ1NJU1NfRlJBTUVfQ09V TlRFUg0KPiA+ICAgYW5kIHhjc2kycnhzc19nX3ZvbGF0aWxlX2N0cmwoKQ0KPiA+IC0gTWlub3Ig Zm9ybWF0dGluZyBmaXhlcw0KPiA+DQo+ID4gdjcNCj4gPiAtIE5vIGNoYW5nZQ0KPiA+DQo+ID4g djYNCj4gPiAtIE5vIGNoYW5nZQ0KPiA+DQo+ID4gdjUNCj4gPiAtIFJlbW92ZWQgYmF5ZXIgYW5k IHVwZGF0ZWQgcmVsYXRlZCBwYXJ0cyBsaWtlIHNldCBkZWZhdWx0IGZvcm1hdCBiYXNlZA0KPiA+ ICAgb24gTHVjYSBDZXJzb2xpJ3MgY29tbWVudHMuDQo+ID4gLSBBZGRlZCBjb3JyZWN0IFlVVjQy MiAxMGJwYyBtZWRpYSBidXMgZm9ybWF0DQo+ID4NCj4gPiB2NA0KPiA+IC0gUmVtb3ZlZCBpcnEg bWVtYmVyIGZyb20gY29yZSBzdHJ1Y3R1cmUNCj4gPiAtIENvbnNvbGlkYXRlZCBJUCBjb25maWcg cHJpbnRzIGluIHhjc2kycnhzc19sb2dfaXBjb25maWcoKQ0KPiA+IC0gUmV0dXJuIC1FSU5WQUwg aW4gY2FzZSBvZiBpbnZhbGlkIGlvY3RsDQo+ID4gLSBDb2RlIGZvcm1hdHRpbmcNCj4gPiAtIEFk ZGVkIHJldmlld2VkIGJ5IEh5dW4gS3dvbg0KPiA+DQo+ID4gdjMNCj4gPiAtIEZpeGVkIGNvbW1l bnRzIGdpdmVuIGJ5IEh5dW4uDQo+ID4gLSBSZW1vdmVkIERQSFkgMjAwIE1IeiBjbG9jay4gVGhp cyB3aWxsIGJlIGNvbnRyb2xsZWQgYnkgRFBIWSBkcml2ZXINCj4gPiAtIE1pbm9yIGNvZGUgZm9y bWF0dGluZw0KPiA+IC0gZW5fY3NpX3YyMCBhbmQgdmZiIG1lbWJlcnMgcmVtb3ZlZCBmcm9tIHN0 cnVjdCBhbmQgbWFkZSBsb2NhbCB0byBkdA0KPiBwYXJzaW5nDQo+ID4gLSBsb2NrIGRlc2NyaXB0 aW9uIHVwZGF0ZWQNCj4gPiAtIGNoYW5nZWQgdG8gcmF0ZWxpbWl0ZWQgdHlwZSBmb3IgYWxsIGRl diBwcmludHMgaW4gaXJxIGhhbmRsZXINCj4gPiAtIFJlbW92ZWQgWVVWIDQyMiAxMGJwYyBtZWRp YSBmb3JtYXQNCj4gPg0KPiA+IHYyDQo+ID4gLSBGaXhlZCBjb21tZW50cyBnaXZlbiBieSBIeXVu IGFuZCBTYWthcmkuDQo+ID4gLSBNYWRlIGFsbCBiaXRtYXNrIHVzaW5nIEJJVCgpIGFuZCBHRU5N QVNLKCkNCj4gPiAtIFJlbW92ZWQgdW51c2VkIGRlZmluaXRpb25zDQo+ID4gLSBSZW1vdmVkIERQ SFkgYWNjZXNzLiBUaGlzIHdpbGwgYmUgZG9uZSBieSBzZXBhcmF0ZSBEUEhZIFBIWSBkcml2ZXIu DQo+ID4gLSBBZGRlZCBzdXBwb3J0IGZvciBDU0kgdjIuMCBmb3IgWVVWIDQyMiAxMGJwYywgUkFX MTYsIFJBVzIwIGFuZCBleHRyYQ0KPiA+ICAgdmlydHVhbCBjaGFubmVscw0KPiA+IC0gRml4ZWQg dGhlIHBvcnRzIGFzIHNpbmsgYW5kIHNvdXJjZQ0KPiA+IC0gTm93IHVzZSB0aGUgdjRsMmZ3bm9k ZSBBUEkgdG8gZ2V0IG51bWJlciBvZiBkYXRhLWxhbmVzDQo+ID4gLSBBZGRlZCBjbG9jayBmcmFt ZXdvcmsgc3VwcG9ydA0KPiA+IC0gUmVtb3ZlZCB0aGUgY2xvc2UoKSBmdW5jdGlvbg0KPiA+IC0g dXBkYXRlZCB0aGUgc2V0IGZvcm1hdCBmdW5jdGlvbg0KPiA+IC0gc3VwcG9ydCBvbmx5IFZGQiBl bmFibGVkIGNvbmZpZ3VyYXRpb24NCj4gPg0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hp bGlueC9LY29uZmlnICAgICAgICAgfCAgIDEwICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS94aWxpbngvTWFrZWZpbGUgICAgICAgIHwgICAgMSArDQo+ID4gIC4uLi9tZWRpYS9wbGF0Zm9y bS94aWxpbngveGlsaW54LWNzaTJyeHNzLmMgICB8IDEyMzQgKysrKysrKysrKysrKysrKysNCj4g PiAgMyBmaWxlcyBjaGFuZ2VkLCAxMjQ1IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1jc2kycnhzcy5jDQo+ ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZp Zw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiBpbmRleCBh Mjc3M2FkN2MxODUuLmNkMWEwZmRkZTRkZiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS94aWxpbngvS2NvbmZpZw0KPiA+IEBAIC0xMCw2ICsxMCwxNiBAQCBjb25maWcgVklERU9fWElM SU5YDQo+ID4NCj4gPiAgaWYgVklERU9fWElMSU5YDQo+ID4NCj4gPiArY29uZmlnIFZJREVPX1hJ TElOWF9DU0kyUlhTUw0KPiA+ICsJdHJpc3RhdGUgIlhpbGlueCBDU0kyIFJ4IFN1YnN5c3RlbSIN Cj4gPiArCWhlbHANCj4gPiArCSAgRHJpdmVyIGZvciBYaWxpbnggTUlQSSBDU0kyIFJ4IFN1YnN5 c3RlbS4gVGhpcyBpcyBhIFY0TCBzdWItZGV2aWNlDQo+IA0KPiBBcyBmb3IgdGhlIGJpbmRpbmdz LCBzL0NTSTIvQ1NJLTIvIGFuZCBzL0RQSFkvRC1QSFkvIHRocm91Z2ggdGhpcyBwYXRjaC4NCj4g DQoNCkFncmVlZC4gSSB3aWxsIHVwZGF0ZSBpbiBuZXh0IHBhdGNoIHZlcnNpb24uDQoNCj4gPiAr CSAgYmFzZWQgZHJpdmVyIHRoYXQgdGFrZXMgaW5wdXQgZnJvbSBDU0kyIFR4IHNvdXJjZSBhbmQg Y29udmVydHMNCj4gPiArCSAgaXQgaW50byBhbiBBWEk0LVN0cmVhbS4gVGhlIHN1YnN5c3RlbSBj b21wcmlzZXMgb2YgYSBDU0kyIFJ4DQo+ID4gKwkgIGNvbnRyb2xsZXIsIERQSFksIGFuIG9wdGlv bmFsIEkyQyBjb250cm9sbGVyIGFuZCBhIFZpZGVvIEZvcm1hdA0KPiANCj4gVGhlIEkyQyBjb250 cm9sbGVyIGhhcyBiZWVuIHJlbW92ZWQgaW4gdjQuMSwgaXQgc2hvdWxkIGJlIGRyb3BwZWQgZnJv bQ0KPiBoZXJlLg0KPiANCg0KWWVzLiBJIHdpbGwgdXBkYXRlIHRoaXMgaW4gbmV4dCB2ZXJzaW9u Lg0KDQo+ID4gKwkgIEJyaWRnZS4gVGhlIGRyaXZlciBpcyB1c2VkIHRvIHNldCB0aGUgbnVtYmVy IG9mIGFjdGl2ZSBsYW5lcyBhbmQNCj4gPiArCSAgZ2V0IHNob3J0IHBhY2tldCBkYXRhLg0KPiA+ ICsNCj4gPiAgY29uZmlnIFZJREVPX1hJTElOWF9UUEcNCj4gPiAgCXRyaXN0YXRlICJYaWxpbngg VmlkZW8gVGVzdCBQYXR0ZXJuIEdlbmVyYXRvciINCj4gPiAgCWRlcGVuZHMgb24gVklERU9fWElM SU5YDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2Vm aWxlDQo+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gPiBpbmRl eCA0Y2RjMGIxZWM3YTUuLjYxMTlhMzRmMzA0MyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0veGlsaW54L01ha2VmaWxlDQo+ID4gQEAgLTMsNSArMyw2IEBADQo+ID4gIHhpbGlueC12 aWRlby1vYmpzICs9IHhpbGlueC1kbWEubyB4aWxpbngtdmlwLm8geGlsaW54LXZpcHAubw0KPiA+ DQo+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlgpICs9IHhpbGlueC12aWRlby5vDQo+ID4g K29iai0kKENPTkZJR19WSURFT19YSUxJTlhfQ1NJMlJYU1MpICs9IHhpbGlueC1jc2kycnhzcy5v DQo+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlhfVFBHKSArPSB4aWxpbngtdHBnLm8NCj4g PiAgb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9WVEMpICs9IHhpbGlueC12dGMubw0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtY3NpMnJ4c3Mu Yw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1jc2kycnhzcy5jDQo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjA4MzQyMjc2 OGViZA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3hpbGlueC94aWxpbngtY3NpMnJ4c3MuYw0KPiA+IEBAIC0wLDAgKzEsMTIzNCBAQA0KPiA+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBEcml2 ZXIgZm9yIFhpbGlueCBNSVBJIENTSTIgUnggU3Vic3lzdGVtDQo+ID4gKyAqDQo+ID4gKyAqIENv cHlyaWdodCAoQykgMjAxNiAtIDIwMjAgWGlsaW54LCBJbmMuDQo+ID4gKyAqDQo+ID4gKyAqIENv bnRhY3RzOiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbnguY29tPg0KPiA+ICsgKg0K PiA+ICsgKi8NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv b2YuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC92NGwyLXN1YmRldi5o Pg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvbWVkaWEtZW50aXR5Lmg+DQo+ID4gKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWNvbW1vbi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0K PiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlh L3Y0bDItc3ViZGV2Lmg+DQo+ID4gKyNpbmNsdWRlICJ4aWxpbngtdmlwLmgiDQo+ID4gKw0KPiA+ ICsvKiBSZWdpc3RlciByZWdpc3RlciBtYXAgKi8NCj4gPiArI2RlZmluZSBYQ1NJX0NDUl9PRkZT RVQJCTB4MDANCj4gPiArI2RlZmluZSBYQ1NJX0NDUl9TT0ZUUkVTRVQJQklUKDEpDQo+ID4gKyNk ZWZpbmUgWENTSV9DQ1JfRU5BQkxFCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9Q Q1JfT0ZGU0VUCQkweDA0DQo+ID4gKyNkZWZpbmUgWENTSV9QQ1JfTUFYTEFORVNfTUFTSwlHRU5N QVNLKDQsIDMpDQo+ID4gKyNkZWZpbmUgWENTSV9QQ1JfQUNUTEFORVNfTUFTSwlHRU5NQVNLKDEs IDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfQ1NSX09GRlNFVAkJMHgxMA0KPiA+ICsjZGVm aW5lIFhDU0lfQ1NSX1BLVENOVAkJR0VOTUFTSygzMSwgMTYpDQo+ID4gKyNkZWZpbmUgWENTSV9D U1JfU1BGSUZPRlVMTAlCSVQoMykNCj4gPiArI2RlZmluZSBYQ1NJX0NTUl9TUEZJRk9ORQlCSVQo MikNCj4gPiArI2RlZmluZSBYQ1NJX0NTUl9TTEJGCQlCSVQoMSkNCj4gPiArI2RlZmluZSBYQ1NJ X0NTUl9SSVBDRAkJQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfR0lFUl9PRkZTRVQJ MHgyMA0KPiA+ICsjZGVmaW5lIFhDU0lfR0lFUl9HSUUJCUJJVCgwKQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBYQ1NJX0lTUl9PRkZTRVQJCTB4MjQNCj4gPiArI2RlZmluZSBYQ1NJX0lFUl9PRkZTRVQJ CTB4MjgNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfRlIJCUJJVCgzMSkNCj4gPiArI2Rl ZmluZSBYQ1NJX0lTUl9WQ1hGRQkJQklUKDMwKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1dDQwkJ QklUKDIyKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX0lMQwkJQklUKDIxKQ0KPiA+ICsjZGVmaW5l IFhDU0lfSVNSX1NQRklGT0YJQklUKDIwKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1NQRklGT05F CUJJVCgxOSkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9TTEJGCQlCSVQoMTgpDQo+ID4gKyNkZWZp bmUgWENTSV9JU1JfU1RPUAkJQklUKDE3KQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1NPVEVSUgkJ QklUKDEzKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1NPVFNZTkNFUlIJQklUKDEyKQ0KPiA+ICsj ZGVmaW5lIFhDU0lfSVNSX0VDQzJCRVJSCUJJVCgxMSkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9F Q0MxQkVSUglCSVQoMTApDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfQ1JDRVJSCQlCSVQoOSkNCj4g PiArI2RlZmluZSBYQ1NJX0lTUl9EQVRBSURFUlIJQklUKDgpDQo+ID4gKyNkZWZpbmUgWENTSV9J U1JfVkMzRlNZTkNFUlIJQklUKDcpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMzRkxWTEVSUglC SVQoNikNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9WQzJGU1lOQ0VSUglCSVQoNSkNCj4gPiArI2Rl ZmluZSBYQ1NJX0lTUl9WQzJGTFZMRVJSCUJJVCg0KQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1ZD MUZTWU5DRVJSCUJJVCgzKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1ZDMUZMVkxFUlIJQklUKDIp DQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMwRlNZTkNFUlIJQklUKDEpDQo+ID4gKyNkZWZpbmUg WENTSV9JU1JfVkMwRkxWTEVSUglCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9JTlRS X1BST1RfTUFTSwkoWENTSV9JU1JfVkMzRlNZTkNFUlIgfA0KPiAJWENTSV9JU1JfVkMzRkxWTEVS UiB8XA0KPiA+ICsJCQkJIFhDU0lfSVNSX1ZDMkZTWU5DRVJSIHwNCj4gWENTSV9JU1JfVkMyRkxW TEVSUiB8XA0KPiA+ICsJCQkJIFhDU0lfSVNSX1ZDMUZTWU5DRVJSIHwNCj4gWENTSV9JU1JfVkMx RkxWTEVSUiB8XA0KPiA+ICsJCQkJIFhDU0lfSVNSX1ZDMEZTWU5DRVJSIHwNCj4gCVhDU0lfSVNS X1ZDMEZMVkxFUlIgfFwNCj4gPiArCQkJCSBYQ1NJX0lTUl9WQ1hGRSkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgWENTSV9JTlRSX1BLVExWTF9NQVNLCShYQ1NJX0lTUl9FQ0MyQkVSUiB8DQo+IFhDU0lf SVNSX0VDQzFCRVJSIHxcDQo+ID4gKwkJCQkgWENTSV9JU1JfQ1JDRVJSIHwgWENTSV9JU1JfREFU QUlERVJSKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX0lOVFJfRFBIWV9NQVNLCShYQ1NJX0lT Ul9TT1RFUlIgfA0KPiBYQ1NJX0lTUl9TT1RTWU5DRVJSKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBY Q1NJX0lOVFJfU1BLVF9NQVNLCShYQ1NJX0lTUl9TUEZJRk9GIHwNCj4gWENTSV9JU1JfU1BGSUZP TkUpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfSU5UUl9FUlJfTUFTSwkoWENTSV9JU1JfV0ND IHwgWENTSV9JU1JfSUxDIHwNCj4gWENTSV9JU1JfU0xCRiB8XA0KPiA+ICsJCQkJIFhDU0lfSVNS X1NUT1ApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfSU5UUl9GUkFNRVJDVkRfTUFTSwkoWENT SV9JU1JfRlIpDQo+IA0KPiBUaGVzZSBtYWNyb3MgYXJlIG9ubHkgdXNlZCBpbiBYQ1NJX0lTUl9B TExJTlRSX01BU0ssIGRvIHdlIG5lZWQgdGhlbSA/DQo+IA0KDQpJIGtlcHQgdGhlbSBzbyB0aGF0 IGl0IGlzIGluIHN5bmMgd2l0aCB3aGF0IHdlIGhhZCBmb3IgYmFyZSBtZXRhbCBkcml2ZXIuDQpJ IHdpbGwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgY29kZSBpbiBuZXh0IHZlcnNpb24uDQoNCj4gPiAr DQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfQUxMSU5UUl9NQVNLCShYQ1NJX0lOVFJfUFJPVF9NQVNL IHwNCj4gWENTSV9JTlRSX1BLVExWTF9NQVNLIHxcDQo+ID4gKwkJCQkgWENTSV9JTlRSX0RQSFlf TUFTSyB8DQo+IFhDU0lfSU5UUl9TUEtUX01BU0sgfFwNCj4gPiArCQkJCSBYQ1NJX0lOVFJfRVJS X01BU0sgfA0KPiBYQ1NJX0lOVFJfRlJBTUVSQ1ZEX01BU0spDQo+ID4gKw0KPiA+ICsvKg0KPiA+ ICsgKiBSZW1vdmVkIFZDWEZFIG1hc2sgYXMgaXQgZG9lc24ndCBleGlzdCBpbiBJRVINCj4gPiAr ICogUmVtb3ZlZCBTVE9QIHN0YXRlIGlycSBhcyB0aGlzIHdpbGwga2VlcCBkcml2ZXIgaW4gaXJx IGhhbmRsZXIgb25seQ0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBYQ1NJX0lFUl9JTlRSX01BU0sJ KFhDU0lfSVNSX0FMTElOVFJfTUFTSyAmXA0KPiA+ICsJCQkJIH4oWENTSV9JU1JfU1RPUCB8IFhD U0lfSVNSX1ZDWEZFKSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9TUEtUUl9PRkZTRVQJMHgz MA0KPiA+ICsjZGVmaW5lIFhDU0lfU1BLVFJfREFUQQkJR0VOTUFTSygyMywgOCkNCj4gPiArI2Rl ZmluZSBYQ1NJX1NQS1RSX1ZDCQlHRU5NQVNLKDcsIDYpDQo+ID4gKyNkZWZpbmUgWENTSV9TUEtU Ul9EVAkJR0VOTUFTSyg1LCAwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX1ZDWFJfT0ZGU0VU CTB4MzQNCj4gPiArI2RlZmluZSBYQ1NJX1ZDWFJfVkNFUlIJCUdFTk1BU0soMjMsIDApDQo+ID4g KyNkZWZpbmUgWENTSV9WQ1hSX1ZDU1RBUlQJNA0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYUl9WQ0VO RAkJMTUNCj4gDQo+IFRob3NlIHR3byBtYWNyb3MgYXJlIG5vdCB1c2VkLCBtYXliZSB3ZSBjb3Vs ZCBkcm9wIHRoZW0gPw0KPiANCg0KSSB3aWxsIHJlbW92ZSB0aGVzZSB1bnVzZWQgbWFjcm9zIGlu IG5leHQgdmVyc2lvbi4NCg0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYUl9GU1lOQ0VSUglCSVQoMSkN Cj4gPiArI2RlZmluZSBYQ1NJX1ZDWFJfRkxWTEVSUglCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZp bmUgWENTSV9DTEtJTkZSX09GRlNFVAkweDNDDQo+ID4gKyNkZWZpbmUgWENTSV9DTEtJTkZSX1NU T1AJQklUKDEpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfRExYSU5GUl9PRkZTRVQJMHg0MA0K PiA+ICsjZGVmaW5lIFhDU0lfRExYSU5GUl9TVE9QCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFhDU0lf RExYSU5GUl9TT1RFUlIJQklUKDEpDQo+ID4gKyNkZWZpbmUgWENTSV9ETFhJTkZSX1NPVFNZTkNF UlIJQklUKDApDQo+ID4gKyNkZWZpbmUgWENTSV9NQVhETF9DT1VOVAkweDQNCj4gPiArDQo+ID4g KyNkZWZpbmUgWENTSV9WQ1hJTkYxUl9PRkZTRVQJCTB4NjANCj4gPiArI2RlZmluZSBYQ1NJX1ZD WElORjFSX0xJTkVDT1VOVAkJR0VOTUFTSygzMSwgMTYpDQo+ID4gKyNkZWZpbmUgWENTSV9WQ1hJ TkYxUl9MSU5FQ09VTlRfU0hJRlQJMTYNCj4gPiArI2RlZmluZSBYQ1NJX1ZDWElORjFSX0JZVEVD T1VOVAkJR0VOTUFTSygxNSwgMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9WQ1hJTkYyUl9P RkZTRVQJMHg2NA0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYSU5GMlJfRFQJR0VOTUFTSyg1LCAwKQ0K PiA+ICsjZGVmaW5lIFhDU0lfTUFYVkNYX0NPVU5UCTE2DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsg KiBUaGUgY29yZSB0YWtlcyBsZXNzIHRoYW4gMTAwIHZpZGVvIGNsb2NrIGN5Y2xlcyB0byByZXNl dC4NCj4gPiArICogU28gY2hvb3NpbmcgYSB0aW1lb3V0IHZhbHVlIGxhcmdlciB0aGFuIHRoaXMu DQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFhDU0lfVElNRU9VVF9WQUwJMTAwMCAvKiB1cyAqLw0K PiA+ICsNCj4gPiArLyoNCj4gPiArICogU2luayBwYWQgY29ubmVjdGVkIHRvIHNlbnNvciBzb3Vy Y2UgcGFkLg0KPiA+ICsgKiBTb3VyY2UgcGFkIGNvbm5lY3RlZCB0byBuZXh0IG1vZHVsZSBsaWtl IGRlbW9zYWljLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBYQ1NJX01FRElBX1BBRFMJCTINCj4g PiArI2RlZmluZSBYQ1NJX0RFRkFVTFRfV0lEVEgJMTkyMA0KPiA+ICsjZGVmaW5lIFhDU0lfREVG QVVMVF9IRUlHSFQJMTA4MA0KPiA+ICsNCj4gPiArLyogTWF4IG1lZGlhIGJ1cyBmb3JtYXRzIHN1 cHBvcnRlZCBmb3IgZW51bWVyYXRpb24gKi8NCj4gPiArI2RlZmluZSBYQ1NJX01BWF9NQlVTX0ZN VFMJMTYNCj4gDQo+IElzbid0IDggZW5vdWdoID8NCj4gDQoNClllcy4gOCBhcmUgZW5vdWdoLiBJ IHdpbGwgdXBkYXRlIHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ICsvKiBNYXgg c3RyaW5nIGxlbmd0aCBmb3IgQ1NJIERhdGEgdHlwZSBzdHJpbmcgKi8NCj4gPiArI2RlZmluZSBY Q1NJX1BYTEZNVF9TVFJMRU5fTUFYCTE2DQo+IA0KPiBUaGlzIGlzbid0IHVzZWQgZWl0aGVyLg0K PiANCg0KSSB3aWxsIHJlbW92ZSB0aGlzLg0KDQo+ID4gKw0KPiA+ICsvKiBNSVBJIENTSTIgRGF0 YSBUeXBlcyBmcm9tIHNwZWMgKi8NCj4gPiArI2RlZmluZSBYQ1NJX0RUX1lVVjQyMjhCCTB4MUUN Cj4gPiArI2RlZmluZSBYQ1NJX0RUX1lVVjQyMjEwQgkweDFGDQo+ID4gKyNkZWZpbmUgWENTSV9E VF9SR0I0NDQJCTB4MjANCj4gPiArI2RlZmluZSBYQ1NJX0RUX1JHQjU1NQkJMHgyMQ0KPiA+ICsj ZGVmaW5lIFhDU0lfRFRfUkdCNTY1CQkweDIyDQo+ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I2NjYJ CTB4MjMNCj4gPiArI2RlZmluZSBYQ1NJX0RUX1JHQjg4OAkJMHgyNA0KPiA+ICsjZGVmaW5lIFhD U0lfRFRfUkFXNgkJMHgyOA0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXNwkJMHgyOQ0KPiA+ICsj ZGVmaW5lIFhDU0lfRFRfUkFXOAkJMHgyQQ0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXMTAJCTB4 MkINCj4gPiArI2RlZmluZSBYQ1NJX0RUX1JBVzEyCQkweDJDDQo+ID4gKyNkZWZpbmUgWENTSV9E VF9SQVcxNAkJMHgyRA0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXMTYJCTB4MkUNCj4gPiArI2Rl ZmluZSBYQ1NJX0RUX1JBVzIwCQkweDJGDQo+IA0KPiBDb3VsZCB5b3UgcGxlYXNlIHVzZSBsb3dl ci1jYXNlIGZvciBoZXggY29uc3RhbnRzID8NCj4gDQoNCk9rLiBJIHdpbGwgZG8gc28gaW4gbmV4 dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYX1NUQVJUCQk0DQo+ID4g KyNkZWZpbmUgWENTSV9NQVhfVkMJCTQNCj4gPiArI2RlZmluZSBYQ1NJX01BWF9WQ1gJCTE2DQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfTkVYVFJFR19PRkZTRVQJNA0KPiA+ICsNCj4gPiArLyog VGhlcmUgYXJlIDIgZXZlbnRzIGZyYW1lIHN5bmMgYW5kIGZyYW1lIGxldmVsIGVycm9yIHBlciBW QyAqLw0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYX05VTV9FVkVOVFMJKChYQ1NJX01BWF9WQ1ggLSBY Q1NJX01BWF9WQykgKg0KPiAyKQ0KPiA+ICsNCj4gPiArLyogTWFjcm8gdG8gcmV0dXJuICJ0cnVl IiBvciAiZmFsc2UiIHN0cmluZyBpZiBiaXQgaXMgc2V0ICovDQo+ID4gKyNkZWZpbmUgWENTSV9H RVRfQklUU0VUX1NUUih2YWwsIG1hc2spCSh2YWwpICYgKG1hc2spID8gInRydWUiIDoNCj4gImZh bHNlIg0KPiANCj4gSSB3b3VsZCBpbmxpbmUgdGhpcyBpbiB4Y3NpMnJ4c3NfbG9nX3N0YXR1cygp IHdoZXJlIHRoZSBtYWNybyBpcyB1c2VkLg0KPiANCg0KSSBkaWRuJ3QgZ2V0IHRoaXMgZXhhY3Rs eS4gRG8geW91IHdhbnQgdGhpcyB0byBiZSBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gDQpzdGF0 aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhjc2lfZ2V0X2JpdHNldF9zdHIodTMyIHZhbCwgdTMyIG1h c2spIHsNCglyZXR1cm4gdmFsICYgbWFzayA/ICJ0cnVlIiA6ICJmYWxzZSI7DQp9DQoNCk9SDQoN CmRldl9pbmZvKGNvcmUtPmRldiwgIlNob3J0IFBhY2tldCBGSUZPIEZ1bGwgPSAlc1xuIiwNCglY Q1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfQ1NSX1NQRklGT0ZVTEwpKTsNCg0Kc2hvdWxk IGJlIHJlcGxhY2VkIHdpdGgNCg0KZGV2X2luZm8oY29yZS0+ZGV2LCAiU2hvcnQgUGFja2V0IEZJ Rk8gRnVsbCA9ICVzXG4iLA0KCWRhdGEgJiBYQ1NJX0NTUl9TUEZJRk9GVUxMOiAidHJ1ZSIsICJm YWxzZSIpOw0KPw0KDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhBRERfTUJVUyhzdGF0ZSwgbWJ1c19m bXQpDQo+IAlcDQo+ID4gKwlkbyB7CQkJCQkJCQlcDQo+ID4gKwkJaWYgKChzdGF0ZSktPm1idXNf Zm10c19jb3VudCA8IFhDU0lfTUFYX01CVVNfRk1UUykgew0KPiAJXA0KPiA+ICsJCQkoc3RhdGUp LT5tYnVzX2ZtdHNbKHN0YXRlKS0+bWJ1c19mbXRzX2NvdW50KytdID1cDQo+ID4gKwkJCQkobWJ1 c19mbXQpOwkJCQlcDQo+ID4gKwkJfSBlbHNlIHsJCQkJCQlcDQo+ID4gKwkJCWRldl9lcnIoKHN0 YXRlKS0+Y29yZS5kZXYsCQkJXA0KPiA+ICsJCQkJImFjY2Vzc2luZyBhcnJheSBvdXQgb2YgYm91 bmRzIVxuIik7CVwNCj4gPiArCQl9CQkJCQkJCVwNCj4gPiArCX0gd2hpbGUgKDApDQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogc3RydWN0IHhjc2kycnhzc19ldmVudCAtIEV2ZW50IGxvZyBzdHJ1 Y3R1cmUNCj4gPiArICogQG1hc2s6IEV2ZW50IG1hc2sNCj4gPiArICogQG5hbWU6IE5hbWUgb2Yg dGhlIGV2ZW50DQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgeGNzaTJyeHNzX2V2ZW50IHsNCj4gPiAr CXUzMiBtYXNrOw0KPiA+ICsJY29uc3QgY2hhciAqbmFtZTsNCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGNzaTJyeHNzX2V2ZW50IHhjc2kycnhzc19ldmVudHNbXSA9 IHsNCj4gPiArCXsgWENTSV9JU1JfRlIsICJGcmFtZSBSZWNlaXZlZCIgfSwNCj4gPiArCXsgWENT SV9JU1JfVkNYRkUsICJWQ1ggRnJhbWUgRXJyb3JzIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9XQ0Ms ICJXb3JkIENvdW50IEVycm9ycyIgfSwNCj4gPiArCXsgWENTSV9JU1JfSUxDLCAiSW52YWxpZCBM YW5lIENvdW50IEVycm9yIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9TUEZJRk9GLCAiU2hvcnQgUGFj a2V0IEZJRk8gT3ZlckZsb3cgRXJyb3IiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX1NQRklGT05FLCAi U2hvcnQgUGFja2V0IEZJRk8gTm90IEVtcHR5IiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9TTEJGLCAi U3RyZWFtbGluZSBCdWZmZXIgRnVsbCBFcnJvciIgfSwNCj4gPiArCXsgWENTSV9JU1JfU1RPUCwg IkxhbmUgU3RvcCBTdGF0ZSIgfSwNCj4gPiArCXsgWENTSV9JU1JfU09URVJSLCAiU09UIEVycm9y IiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9TT1RTWU5DRVJSLCAiU09UIFN5bmMgRXJyb3IiIH0sDQo+ ID4gKwl7IFhDU0lfSVNSX0VDQzJCRVJSLCAiMiBCaXQgRUNDIFVucmVjb3ZlcmFibGUgRXJyb3Ii IH0sDQo+ID4gKwl7IFhDU0lfSVNSX0VDQzFCRVJSLCAiMSBCaXQgRUNDIFJlY292ZXJhYmxlIEVy cm9yIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9DUkNFUlIsICJDUkMgRXJyb3IiIH0sDQo+ID4gKwl7 IFhDU0lfSVNSX0RBVEFJREVSUiwgIkRhdGEgSWQgRXJyb3IiIH0sDQo+ID4gKwl7IFhDU0lfSVNS X1ZDM0ZTWU5DRVJSLCAiVmlydHVhbCBDaGFubmVsIDMgRnJhbWUgU3luYyBFcnJvciIgfSwNCj4g PiArCXsgWENTSV9JU1JfVkMzRkxWTEVSUiwgIlZpcnR1YWwgQ2hhbm5lbCAzIEZyYW1lIExldmVs IEVycm9yIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9WQzJGU1lOQ0VSUiwgIlZpcnR1YWwgQ2hhbm5l bCAyIEZyYW1lIFN5bmMgRXJyb3IiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX1ZDMkZMVkxFUlIsICJW aXJ0dWFsIENoYW5uZWwgMiBGcmFtZSBMZXZlbCBFcnJvciIgfSwNCj4gPiArCXsgWENTSV9JU1Jf VkMxRlNZTkNFUlIsICJWaXJ0dWFsIENoYW5uZWwgMSBGcmFtZSBTeW5jIEVycm9yIiB9LA0KPiA+ ICsJeyBYQ1NJX0lTUl9WQzFGTFZMRVJSLCAiVmlydHVhbCBDaGFubmVsIDEgRnJhbWUgTGV2ZWwg RXJyb3IiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX1ZDMEZTWU5DRVJSLCAiVmlydHVhbCBDaGFubmVs IDAgRnJhbWUgU3luYyBFcnJvciIgfSwNCj4gPiArCXsgWENTSV9JU1JfVkMwRkxWTEVSUiwgIlZp cnR1YWwgQ2hhbm5lbCAwIEZyYW1lIExldmVsIEVycm9yIiB9DQo+ID4gK307DQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFhDU0lfTlVNX0VWRU5UUwkJQVJSQVlfU0laRSh4Y3NpMnJ4c3NfZXZlbnRzKQ0K PiA+ICsNCj4gPiArLyoNCj4gPiArICogc3RydWN0IHhjc2kycnhzc19jb3JlIC0gQ29yZSBjb25m aWd1cmF0aW9uIENTSTIgUnggU3Vic3lzdGVtIGRldmljZQ0KPiBzdHJ1Y3R1cmUNCj4gPiArICog QGRldjogUGxhdGZvcm0gc3RydWN0dXJlDQo+ID4gKyAqIEBpb21lbTogQmFzZSBhZGRyZXNzIG9m IHN1YnN5c3RlbQ0KPiA+ICsgKiBAZW5hYmxlX2FjdGl2ZV9sYW5lczogSWYgbnVtYmVyIG9mIGFj dGl2ZSBsYW5lcyBjYW4gYmUgbW9kaWZpZWQNCj4gPiArICogQG1heF9udW1fbGFuZXM6IE1heGlt dW0gbnVtYmVyIG9mIGxhbmVzIHByZXNlbnQNCj4gPiArICogQGRhdGF0eXBlOiBEYXRhIHR5cGUg ZmlsdGVyDQo+ID4gKyAqIEBldmVudHM6IGNvdW50ZXIgZm9yIGV2ZW50cw0KPiA+ICsgKiBAdmN4 X2V2ZW50czogY291bnRlciBmb3IgdmN4X2V2ZW50cw0KPiA+ICsgKiBAZW5fdmN4OiBJZiBtb3Jl IHRoYW4gNCBWQyBhcmUgZW5hYmxlZA0KPiA+ICsgKiBAY2xrczogYXJyYXkgb2YgY2xvY2tzDQo+ ID4gKyAqIEByc3RfZ3BpbzogcmVzZXQgdG8gdmlkZW9fYXJlc2V0bg0KPiA+ICsgKi8NCj4gPiAr c3RydWN0IHhjc2kycnhzc19jb3JlIHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiAr CXZvaWQgX19pb21lbSAqaW9tZW07DQo+ID4gKwlib29sIGVuYWJsZV9hY3RpdmVfbGFuZXM7DQo+ ID4gKwl1MzIgbWF4X251bV9sYW5lczsNCj4gPiArCXUzMiBkYXRhdHlwZTsNCj4gPiArCXUzMiBl dmVudHNbWENTSV9OVU1fRVZFTlRTXTsNCj4gPiArCXUzMiB2Y3hfZXZlbnRzW1hDU0lfVkNYX05V TV9FVkVOVFNdOw0KPiA+ICsJYm9vbCBlbl92Y3g7DQo+ID4gKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0 YSAqY2xrczsNCj4gPiArCXN0cnVjdCBncGlvX2Rlc2MgKnJzdF9ncGlvOw0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgLSBDU0kyIFJ4IFN1 YnN5c3RlbSBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqIEBjb3JlOiBDb3JlIHN0cnVjdHVyZSBm b3IgTUlQSSBDU0kyIFJ4IFN1YnN5c3RlbQ0KPiA+ICsgKiBAc3ViZGV2OiBUaGUgdjRsMiBzdWJk ZXYgc3RydWN0dXJlDQo+ID4gKyAqIEBmb3JtYXQ6IEFjdGl2ZSBWNEwyIGZvcm1hdHMgb24gZWFj aCBwYWQNCj4gPiArICogQGRlZmF1bHRfZm9ybWF0OiBEZWZhdWx0IFY0TDIgZm9ybWF0DQo+ID4g KyAqIEBsb2NrOiBtdXRleCBmb3IgYWNjZXNzaW5nIHRoaXMgc3RydWN0dXJlDQo+ID4gKyAqIEBw YWRzOiBtZWRpYSBwYWRzDQo+ID4gKyAqIEBtYnVzX2ZtdHM6IExpc3Qgb2YgbWVkaWEgYnVzIGZv cm1hdHMgZm9yIGVudW1fbWJ1c19jb2RlDQo+ID4gKyAqIEBtYnVzX2ZtdHNfY291bnQ6IE51bWJl ciBvZiBtZWRpYSBidXMgZm9ybWF0cw0KPiA+ICsgKiBAc3RyZWFtaW5nOiBGbGFnIGZvciBzdG9y aW5nIHN0cmVhbWluZyBzdGF0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIHN0cnVjdHVyZSBjb250 YWlucyB0aGUgZGV2aWNlIGRyaXZlciByZWxhdGVkIHBhcmFtZXRlcnMNCj4gPiArICovDQo+ID4g K3N0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgew0KPiA+ICsJc3RydWN0IHhjc2kycnhzc19jb3JlIGNv cmU7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJf bWJ1c19mcmFtZWZtdCBmb3JtYXQ7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IGRl ZmF1bHRfZm9ybWF0Ow0KPiA+ICsJLyogdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGlzIHN0 cnVjdCAqLw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7DQo+ID4gKwlzdHJ1Y3QgbWVkaWFfcGFk IHBhZHNbWENTSV9NRURJQV9QQURTXTsNCj4gPiArCXUzMiBtYnVzX2ZtdHNbWENTSV9NQVhfTUJV U19GTVRTXTsNCj4gPiArCXUzMiBtYnVzX2ZtdHNfY291bnQ7DQo+ID4gKwlib29sIHN0cmVhbWlu ZzsNCj4gPiArfTsNCj4gDQo+IElzIHRoZXJlIGEgbmVlZCB0byBoYXZlIHR3byBzZXBhcmF0ZSBk YXRhIHN0cnVjdHVyZXMsIGNhbid0IHRoZXkgYmUNCj4gbWVyZ2VkID8NCj4gDQoNClRoZXkgY2Fu IGJlIG1lcmdlZC4gVGhlIHJlYXNvbiB0byBrZWVwIHRoZW0gc2VwYXJhdGUgd2FzIHRvIGtlZXAg dGhlIElQIGNvcmUgcmVsYXRlZCBkaWZmZXJlbnQgZnJvbSBkcml2ZXIgc3RhdGUgdmFyaWFibGVz Lg0KDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19idWxrX2RhdGEgeGNzaTJy eHNzX2Nsa3NbXSA9IHsNCj4gPiArCXsgLmlkID0gImxpdGVfYWNsayIgfSwNCj4gPiArCXsgLmlk ID0gInZpZGVvX2FjbGsiIH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHN0 cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKg0KPiA+ICt0b194Y3NpMnJ4c3NzdGF0ZShzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnN1YmRldikNCj4gPiArew0KPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihzdWJk ZXYsIHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUsIHN1YmRldik7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qDQo+ID4gKyAqIFJlZ2lzdGVyIHJlbGF0ZWQgb3BlcmF0aW9ucw0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIGlubGluZSB1MzIgeGNzaTJyeHNzX3JlYWQoc3RydWN0IHhjc2kycnhzc19jb3JlICp4 Y3NpMnJ4c3MsIHUzMiBhZGRyKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gaW9yZWFkMzIoeGNzaTJy eHNzLT5pb21lbSArIGFkZHIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZv aWQgeGNzaTJyeHNzX3dyaXRlKHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqeGNzaTJyeHNzLCB1MzIN Cj4gYWRkciwNCj4gPiArCQkJCSAgIHUzMiB2YWx1ZSkNCj4gPiArew0KPiA+ICsJaW93cml0ZTMy KHZhbHVlLCB4Y3NpMnJ4c3MtPmlvbWVtICsgYWRkcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbmxpbmUgdm9pZCB4Y3NpMnJ4c3NfY2xyKHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqeGNz aTJyeHNzLCB1MzIgYWRkciwNCj4gPiArCQkJCSB1MzIgY2xyKQ0KPiA+ICt7DQo+ID4gKwl4Y3Np MnJ4c3Nfd3JpdGUoeGNzaTJyeHNzLCBhZGRyLA0KPiA+ICsJCQl4Y3NpMnJ4c3NfcmVhZCh4Y3Np MnJ4c3MsIGFkZHIpICYgfmNscik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUg dm9pZCB4Y3NpMnJ4c3Nfc2V0KHN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqeGNzaTJyeHNzLCB1MzIg YWRkciwNCj4gPiArCQkJCSB1MzIgc2V0KQ0KPiA+ICt7DQo+ID4gKwl4Y3NpMnJ4c3Nfd3JpdGUo eGNzaTJyeHNzLCBhZGRyLCB4Y3NpMnJ4c3NfcmVhZCh4Y3NpMnJ4c3MsIGFkZHIpIHwgc2V0KTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeGNzaTJyeHNzX2VuYWJsZShzdHJ1Y3Qg eGNzaTJyeHNzX2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArCXhjc2kycnhzc19zZXQoY29yZSwg WENTSV9DQ1JfT0ZGU0VULCBYQ1NJX0NDUl9FTkFCTEUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCB4Y3NpMnJ4c3NfZGlzYWJsZShzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUp DQo+ID4gK3sNCj4gPiArCXhjc2kycnhzc19jbHIoY29yZSwgWENTSV9DQ1JfT0ZGU0VULCBYQ1NJ X0NDUl9FTkFCTEUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3Nf aW50cl9lbmFibGUoc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKwl4 Y3NpMnJ4c3NfY2xyKGNvcmUsIFhDU0lfR0lFUl9PRkZTRVQsIFhDU0lfR0lFUl9HSUUpOw0KPiA+ ICsJeGNzaTJyeHNzX3dyaXRlKGNvcmUsIFhDU0lfSUVSX09GRlNFVCwgWENTSV9JRVJfSU5UUl9N QVNLKTsNCj4gPiArCXhjc2kycnhzc19zZXQoY29yZSwgWENTSV9HSUVSX09GRlNFVCwgWENTSV9H SUVSX0dJRSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhjc2kycnhzc19pbnRy X2Rpc2FibGUoc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKwl4Y3Np MnJ4c3NfY2xyKGNvcmUsIFhDU0lfSUVSX09GRlNFVCwgWENTSV9JRVJfSU5UUl9NQVNLKTsNCj4g PiArCXhjc2kycnhzc19jbHIoY29yZSwgWENTSV9HSUVSX09GRlNFVCwgWENTSV9HSUVSX0dJRSk7 DQo+ID4gK30NCj4gDQo+IEknZCBmaW5kIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUgaWYgd2UgaW5s aW5lZCB0aG9zZSBmb3VyIGZ1bmN0aW9ucyBpbg0KPiB0aGVpciBzaW5nbGUgY2FsbCBzaXRlLCB3 aXRoIGEgb25lLWxpbmUgY29tbWVudCBleHBsYWluaW5nIHdoYXQgaGFwcGVucw0KPiAoZS5nLiAv KiBFbmFibGUgaW50ZXJydXB0cyAqLyksIGJ1dCB0aGF0IG1heSBiZSBhIG1hdHRlciBvZiBwZXJz b25hbA0KPiB0YXN0ZS4NCj4gDQoNCklmIHRoYXQgaXMgcHJlZmVyYWJsZSBJIHdpbGwgZG8gaXQg dGhhdCB3YXkgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNz aTJyeHNzX3Jlc2V0IC0gRG9lcyBhIHNvZnQgcmVzZXQgb2YgdGhlIE1JUEkgQ1NJMiBSeCBTdWJz eXN0ZW0NCj4gPiArICogQGNvcmU6IENvcmUgWGlsaW54IENTSTIgUnggU3Vic3lzdGVtIHN0cnVj dHVyZSBwb2ludGVyDQo+ID4gKyAqDQo+ID4gKyAqIENvcmUgdGFrZXMgbGVzcyB0aGFuIDEwMCB2 aWRlbyBjbG9jayBjeWNsZXMgdG8gcmVzZXQuDQo+ID4gKyAqIFNvIGEgbGFyZ2VyIHRpbWVvdXQg dmFsdWUgaXMgY2hvc2VuIGZvciBtYXJnaW4uDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCAt IG9uIHN1Y2Nlc3MgT1IgLUVUSU1FIGlmIHJlc2V0IHRpbWVzIG91dA0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIGludCB4Y3NpMnJ4c3NfcmVzZXQoc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlKQ0K PiA+ICt7DQo+ID4gKwl1MzIgdGltZW91dCA9IFhDU0lfVElNRU9VVF9WQUw7DQo+ID4gKw0KPiA+ ICsJeGNzaTJyeHNzX3NldChjb3JlLCBYQ1NJX0NDUl9PRkZTRVQsIFhDU0lfQ0NSX1NPRlRSRVNF VCk7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKHhjc2kycnhzc19yZWFkKGNvcmUsIFhDU0lfQ1NSX09G RlNFVCkgJiBYQ1NJX0NTUl9SSVBDRCkgew0KPiA+ICsJCWlmICh0aW1lb3V0ID09IDApIHsNCj4g PiArCQkJZGV2X2Vycihjb3JlLT5kZXYsICJzb2Z0IHJlc2V0IHRpbWVkIG91dCFcbiIpOw0KPiA+ ICsJCQlyZXR1cm4gLUVUSU1FOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJdGltZW91dC0tOw0K PiA+ICsJCXVkZWxheSgxKTsNCj4gDQo+IEkgdW5kZXJzdGFuZCB0aGUgcmVzZXQgdGltZSBpcyBn dWFyYW50ZWVkIHRvIGJlIGxvd2VyIHRoYW4gMTAwIHZpZGVvDQo+IGNsb2NrIGN5Y2xlcywgYnV0 IHdoYXQgaXMgdGhlIHR5cGljYWwgdGltZSA/IEl0J3MgYSBiaXQgcG9pbnRsZXNzIHRvDQo+IGJ1 c3kgbG9vcCB3aXRoIGEgdmVyeSBzaG9ydCBkZWxheSBpZiBhIGxhcmdlciBkZWxheSBpcyB0eXBp Y2FsbHkgbmVlZGVkLg0KPiANCg0KV2l0aCBzYXkgYSB2aWRlbyBjbG9jayBvZiAxNDguNSBNSHog d2UgbmVlZCBhdCBtYXggNjc0IG5zLg0KV2UgYXJlIGFjdHVhbGx5IG92ZXJkb2luZyB0aGUgZGVs YXkgYSBiaXQgaGVyZS4NCkJ1dCBJIHRoaW5rIGl0IHNob3VsZG4ndCBtYXR0ZXIgYXMgbG9uZyBh cyB3ZSBhcmUgZG9pbmcgdGhpcyBiZWZvcmUgc3RhcnRpbmcgc3RyZWFtaW5nLg0KTGV0IG1lIGtu b3cgb3RoZXJ3aXNlIGFuZCBJIGNhbiBtYWtlIGl0IG5kZWxheSgxMDApLg0KDQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJeGNzaTJyeHNzX2Nscihjb3JlLCBYQ1NJX0NDUl9PRkZTRVQsIFhDU0lfQ0NS X1NPRlRSRVNFVCk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgeGNzaTJyeHNzX3Jlc2V0X2V2ZW50X2NvdW50ZXJzKHN0cnVjdCB4Y3NpMnJ4c3Nfc3Rh dGUgKnN0YXRlKQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArDQo+ID4gKwlm b3IgKGkgPSAwOyBpIDwgWENTSV9OVU1fRVZFTlRTOyBpKyspDQo+ID4gKwkJc3RhdGUtPmNvcmUu ZXZlbnRzW2ldID0gMDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWENTSV9WQ1hfTlVN X0VWRU5UUzsgaSsrKQ0KPiA+ICsJCXN0YXRlLT5jb3JlLnZjeF9ldmVudHNbaV0gPSAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKiBQcmludCBldmVudCBjb3VudGVycyAqLw0KPiA+ICtzdGF0aWMg dm9pZCB4Y3NpMnJ4c3NfbG9nX2NvdW50ZXJzKHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnN0YXRl KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNv cmU7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwg WENTSV9OVU1fRVZFTlRTOyBpKyspIHsNCj4gPiArCQlpZiAoY29yZS0+ZXZlbnRzW2ldID4gMCkg ew0KPiA+ICsJCQlkZXZfaW5mbyhjb3JlLT5kZXYsICIlcyBldmVudHM6ICVkXG4iLA0KPiA+ICsJ CQkJIHhjc2kycnhzc19ldmVudHNbaV0ubmFtZSwNCj4gPiArCQkJCSBjb3JlLT5ldmVudHNbaV0p Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoY29yZS0+ZW5fdmN4KSB7DQo+ ID4gKwkJZm9yIChpID0gMDsgaSA8IFhDU0lfVkNYX05VTV9FVkVOVFM7IGkrKykgew0KPiA+ICsJ CQlpZiAoY29yZS0+dmN4X2V2ZW50c1tpXSA+IDApIHsNCj4gPiArCQkJCWRldl9pbmZvKGNvcmUt PmRldiwNCj4gPiArCQkJCQkgIlZDICVkIEZyYW1lICVzIGVyciB2Y3ggZXZlbnRzOg0KPiAlZFxu IiwNCj4gPiArCQkJCQkgKGkgLyAyKSArIFhDU0lfVkNYX1NUQVJULA0KPiA+ICsJCQkJCSBpICYg MSA/ICJTeW5jIiA6ICJMZXZlbCIsDQo+ID4gKwkJCQkJIGNvcmUtPnZjeF9ldmVudHNbaV0pOw0K PiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCB4Y3NpMnJ4c3NfbG9nX2lwY29uZmlnKHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnN0YXRl KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNv cmU7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICIqKioqKiogWGlsaW54IE1JUEkg Q1NJMiBSeCBTUyBJUCBDb25maWcNCj4gKioqKioqXG4iKTsNCj4gPiArCWRldl9kYmcoY29yZS0+ ZGV2LCAidmN4IGlzICVzIiwgY29yZS0+ZW5fdmN4ID8gImVuYWJsZWQiIDoNCj4gImRpc2FibGVk Iik7DQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgIkVuYWJsZSBhY3RpdmUgbGFuZXMgcHJvcGVy dHkgaXMgJXNcbiIsDQo+ID4gKwkJY29yZS0+ZW5hYmxlX2FjdGl2ZV9sYW5lcyA/ICJwcmVzZW50 IiA6ICJhYnNlbnQiKTsNCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2LCAiTWF4IGxhbmVzID0gJWQi LCBjb3JlLT5tYXhfbnVtX2xhbmVzKTsNCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2LCAiUGl4ZWwg Zm9ybWF0IHNldCBhcyAweCV4XG4iLCBjb3JlLT5kYXRhdHlwZSk7DQo+ID4gKwlkZXZfZGJnKGNv cmUtPmRldiwNCj4gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KipcbiIpOw0KPiANCj4gSG93IGFib3V0IG1ha2luZyB0aGlzIG1vcmUgY29tcGFjdCA/DQo+IA0K PiAJZGV2X2RiZyhjb3JlLT5kZXYsICJ2Y3ggJXMsICV1IGRhdGEgbGFuZXMgKCVzKSwgZGF0YSB0 eXBlDQo+IDB4JTAyeFxuIiwNCj4gCQljb3JlLT5lbl92Y3ggPyAiZW5hYmxlZCIgOiAiZGlzYWJs ZWQiLA0KPiAJCWNvcmUtPm1heF9udW1fbGFuZXMsDQo+IAkJY29yZS0+ZW5hYmxlX2FjdGl2ZV9s YW5lcyA/ICJkeW5hbWljIiA6ICJzdGF0aWMiLA0KPiAJCWNvcmUtPmRhdGF0eXBlKTsNCj4gDQoN ClRoaXMgaXMgYmV0dGVyLiBJIHdpbGwgaW5jb3Jwb3JhdGUgaXQgaW4gbXkgbmV4dCB2ZXJzaW9u Lg0KDQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y3NpMnJ4c3NfbG9nX3N0YXR1 cyAtIExvZ3MgdGhlIHN0YXR1cyBvZiB0aGUgQ1NJLTIgUmVjZWl2ZXINCj4gPiArICogQHNkOiBQ b2ludGVyIHRvIFY0TDIgc3ViZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlz IGZ1bmN0aW9uIHByaW50cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgWGlsaW54IE1JUEkgQ1NJLTIN Cj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4gK3N0 YXRpYyBpbnQgeGNzaTJyeHNzX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4g PiArew0KPiA+ICsJc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzID0gdG9feGNzaTJy eHNzc3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlID0gJnhjc2ky cnhzcy0+Y29yZTsNCj4gPiArCXUzMiByZWcsIGRhdGE7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaSwg bWF4X3ZjOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4g Kw0KPiA+ICsJeGNzaTJyeHNzX2xvZ19pcGNvbmZpZyh4Y3NpMnJ4c3MpOw0KPiANCj4gRG8gd2Ug bmVlZCB0byBwcmludCB0aGlzIGhlcmUsIGFzIGl0J3MgcHJpbnRlZCBhdCBwcm9iZSB0aW1lIGFs cmVhZHkgYW5kDQo+IG9ubHkgY29udGFpbnMgc3RhdGljIGRhdGEgPyBJIHdvdWxkIGlubGluZSB4 Y3NpMnJ4c3NfbG9nX2lwY29uZmlnKCkgaW4NCj4geGNzaTJyeHNzX3BhcnNlX29mKCkuDQo+IA0K DQpPay4gSSB3aWxsIHJlbW92ZSBsb2dfaXBjb25maWcoKSBmcm9tIGhlcmUuDQoNCj4gPiArDQo+ ID4gKwl4Y3NpMnJ4c3NfbG9nX2NvdW50ZXJzKHhjc2kycnhzcyk7DQo+ID4gKw0KPiA+ICsJZGV2 X2luZm8oY29yZS0+ZGV2LCAiKioqKiogQ29yZSBTdGF0dXMgKioqKipcbiIpOw0KPiA+ICsJZGF0 YSA9IHhjc2kycnhzc19yZWFkKGNvcmUsIFhDU0lfQ1NSX09GRlNFVCk7DQo+ID4gKwlkZXZfaW5m byhjb3JlLT5kZXYsICJTaG9ydCBQYWNrZXQgRklGTyBGdWxsID0gJXNcbiIsDQo+ID4gKwkJIFhD U0lfR0VUX0JJVFNFVF9TVFIoZGF0YSwgWENTSV9DU1JfU1BGSUZPRlVMTCkpOw0KPiA+ICsJZGV2 X2luZm8oY29yZS0+ZGV2LCAiU2hvcnQgUGFja2V0IEZJRk8gTm90IEVtcHR5ID0gJXNcbiIsDQo+ ID4gKwkJIFhDU0lfR0VUX0JJVFNFVF9TVFIoZGF0YSwgWENTSV9DU1JfU1BGSUZPTkUpKTsNCj4g PiArCWRldl9pbmZvKGNvcmUtPmRldiwgIlN0cmVhbSBsaW5lIGJ1ZmZlciBmdWxsID0gJXNcbiIs DQo+ID4gKwkJIFhDU0lfR0VUX0JJVFNFVF9TVFIoZGF0YSwgWENTSV9DU1JfU0xCRikpOw0KPiA+ ICsJZGV2X2luZm8oY29yZS0+ZGV2LCAiU29mdCByZXNldC9Db3JlIGRpc2FibGUgaW4gcHJvZ3Jl c3MgPSAlc1xuIiwNCj4gPiArCQkgWENTSV9HRVRfQklUU0VUX1NUUihkYXRhLCBYQ1NJX0NTUl9S SVBDRCkpOw0KPiA+ICsNCj4gPiArCS8qIENsayAmIExhbmUgSW5mbyAgKi8NCj4gPiArCWRldl9p bmZvKGNvcmUtPmRldiwgIioqKioqKioqIENsb2NrIExhbmUgSW5mbyAqKioqKioqKipcbiIpOw0K PiA+ICsJZGF0YSA9IHhjc2kycnhzc19yZWFkKGNvcmUsIFhDU0lfQ0xLSU5GUl9PRkZTRVQpOw0K PiA+ICsJZGV2X2luZm8oY29yZS0+ZGV2LCAiQ2xvY2sgTGFuZSBpbiBTdG9wIFN0YXRlID0gJXNc biIsDQo+ID4gKwkJIFhDU0lfR0VUX0JJVFNFVF9TVFIoZGF0YSwgWENTSV9DTEtJTkZSX1NUT1Ap KTsNCj4gPiArDQo+ID4gKwlkZXZfaW5mbyhjb3JlLT5kZXYsICIqKioqKioqKiBEYXRhIExhbmUg SW5mbyAqKioqKioqKipcbiIpOw0KPiA+ICsJZGV2X2luZm8oY29yZS0+ZGV2LCAiTGFuZVx0U29U IEVycm9yXHRTb1QgU3luYyBFcnJvclx0U3RvcA0KPiBTdGF0ZVxuIik7DQo+ID4gKwlyZWcgPSBY Q1NJX0RMWElORlJfT0ZGU0VUOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IFhDU0lfTUFYRExfQ09V TlQ7IGkrKykgew0KPiA+ICsJCWRhdGEgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCByZWcpOw0KPiA+ ICsNCj4gPiArCQlkZXZfaW5mbyhjb3JlLT5kZXYsICIlZFx0JXNcdFx0JXNcdFx0JXNcbiIsIGks DQo+ID4gKwkJCSBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfRExYSU5GUl9TT1RFUlIp LA0KPiA+ICsJCQkgWENTSV9HRVRfQklUU0VUX1NUUihkYXRhLA0KPiBYQ1NJX0RMWElORlJfU09U U1lOQ0VSUiksDQo+ID4gKwkJCSBYQ1NJX0dFVF9CSVRTRVRfU1RSKGRhdGEsIFhDU0lfRExYSU5G Ul9TVE9QKSk7DQo+ID4gKw0KPiA+ICsJCXJlZyArPSBYQ1NJX05FWFRSRUdfT0ZGU0VUOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFZpcnR1YWwgQ2hhbm5lbCBJbWFnZSBJbmZvcm1hdGlvbiAq Lw0KPiA+ICsJZGV2X2luZm8oY29yZS0+ZGV2LCAiKioqKioqKioqKiBWaXJ0dWFsIENoYW5uZWwg SW5mbw0KPiAqKioqKioqKioqKipcbiIpOw0KPiA+ICsJZGV2X2luZm8oY29yZS0+ZGV2LCAiVkNc dExpbmUgQ291bnRcdEJ5dGUgQ291bnRcdERhdGEgVHlwZVxuIik7DQo+ID4gKwlpZiAoY29yZS0+ ZW5fdmN4KQ0KPiA+ICsJCW1heF92YyA9IFhDU0lfTUFYX1ZDWDsNCj4gPiArCWVsc2UNCj4gPiAr CQltYXhfdmMgPSBYQ1NJX01BWF9WQzsNCj4gPiArDQo+ID4gKwlyZWcgPSBYQ1NJX1ZDWElORjFS X09GRlNFVDsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBtYXhfdmM7IGkrKykgew0KPiA+ICsJCXUz MiBsaW5lX2NvdW50LCBieXRlX2NvdW50LCBkYXRhX3R5cGU7DQo+ID4gKw0KPiA+ICsJCS8qIEdl dCBsaW5lIGFuZCBieXRlIGNvdW50IGZyb20gVkNYSU5GUjEgUmVnaXN0ZXIgKi8NCj4gPiArCQlk YXRhID0geGNzaTJyeHNzX3JlYWQoY29yZSwgcmVnKTsNCj4gPiArCQlieXRlX2NvdW50ID0gZGF0 YSAmIFhDU0lfVkNYSU5GMVJfQllURUNPVU5UOw0KPiA+ICsJCWxpbmVfY291bnQgPSBkYXRhICYg WENTSV9WQ1hJTkYxUl9MSU5FQ09VTlQ7DQo+ID4gKwkJbGluZV9jb3VudCA+Pj0gWENTSV9WQ1hJ TkYxUl9MSU5FQ09VTlRfU0hJRlQ7DQo+ID4gKw0KPiA+ICsJCS8qIEdldCBkYXRhIHR5cGUgZnJv bSBWQ1hJTkZSMiBSZWdpc3RlciAqLw0KPiA+ICsJCXJlZyArPSBYQ1NJX05FWFRSRUdfT0ZGU0VU Ow0KPiA+ICsJCWRhdGEgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCByZWcpOw0KPiA+ICsJCWRhdGFf dHlwZSA9IGRhdGEgJiBYQ1NJX1ZDWElORjJSX0RUOw0KPiA+ICsNCj4gPiArCQlkZXZfaW5mbyhj b3JlLT5kZXYsICIlZFx0JWRcdFx0JWRcdFx0MHgleFxuIiwgaSwNCj4gbGluZV9jb3VudCwNCj4g PiArCQkJIGJ5dGVfY291bnQsIGRhdGFfdHlwZSk7DQo+ID4gKw0KPiA+ICsJCS8qIE1vdmUgdG8g bmV4dCBwYWlyIG9mIFZDIEluZm8gcmVnaXN0ZXJzICovDQo+ID4gKwkJcmVnICs9IFhDU0lfTkVY VFJFR19PRkZTRVQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4 c3MtPmxvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2ICp4Y3NpMnJ4c3NfZ2V0X3JlbW90ZV9zdWJkZXYoc3Ry dWN0DQo+IG1lZGlhX3BhZCAqbG9jYWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtZWRpYV9wYWQg KnJlbW90ZTsNCj4gPiArDQo+ID4gKwlyZW1vdGUgPSBtZWRpYV9lbnRpdHlfcmVtb3RlX3BhZChs b2NhbCk7DQo+ID4gKwlpZiAoIXJlbW90ZSB8fCAhaXNfbWVkaWFfZW50aXR5X3Y0bDJfc3ViZGV2 KHJlbW90ZS0+ZW50aXR5KSkNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KHJlbW90ZS0+ZW50aXR5KTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfc3RhcnRfc3RyZWFtKHN0cnVjdCB4Y3Np MnJ4c3Nfc3RhdGUgKnN0YXRlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX2NvcmUg KmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnJzdWJkZXY7 DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwl4Y3NpMnJ4c3NfZW5hYmxlKGNvcmUp Ow0KPiA+ICsNCj4gPiArCXJldCA9IHhjc2kycnhzc19yZXNldChjb3JlKTsNCj4gPiArCWlmIChy ZXQgPCAwKSB7DQo+ID4gKwkJc3RhdGUtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiA+ICsJCXJldHVy biByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJeGNzaTJyeHNzX2ludHJfZW5hYmxlKGNvcmUp Ow0KPiA+ICsJc3RhdGUtPnN0cmVhbWluZyA9IHRydWU7DQo+ID4gKw0KPiA+ICsJcnN1YmRldiA9 IHhjc2kycnhzc19nZXRfcmVtb3RlX3N1YmRldigmc3RhdGUtDQo+ID5wYWRzW1hWSVBfUEFEX1NJ TktdKTsNCj4gDQo+IEhvdyBhYm91dCBzdG9yaW5nIHRoZSByZW1vdGUgc3ViZGV2IHBvaW50ZXIg aW4gdGhlIHhjc2kycnhzc19zdGF0ZQ0KPiBzdHJ1Y3R1cmUsIGVpdGhlciBhdCBwcm9iZSB0aW1l LCBvciBhdCBzdHJlYW1vbiB0aW1lID8NCj4gDQoNCkFzIG1lbnRpb25lZCBpbiBteSByZXNwb25z ZSB0byBTYWthcmkgb3IgdjEwLCB0aGUgc2luayB0byBzb3VyY2UgY2FsbGluZyBvZiBzdHJlYW1v bigpIA0KYWxyZWFkeSBoYXBwZW5zIGluIHh2aXBfcGlwZWxpbmVfc3RhcnRfc3RvcCgpLg0KSSBj YW4gYWRkIHRoZSByZW1vdGUgc3ViZGV2IGluIHN0YXRlIHN0cnVjdHVyZSB3aGljaCBjYW4gYmUg cGFyc2VkIGFuZCBzdG9yZWQgZHVyaW5nIHN0cmVhbW9uKCkgYW5kIGRpcmVjdGx5IHVzZWQgaW4g c3RyZWFtb2ZmKCkuDQoNCg0KPiA+ICsJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChyc3ViZGV2LCB2 aWRlbywgc19zdHJlYW0sIDEpOw0KPiANCj4gSWYgdGhpcyBmYWlsZXMsIHlvdSBzaG91bGQgZGlz YWJsZWQgaW50ZXJydXB0cywgZGlzYWJsZSB0aGUgcmVjZWl2ZXIsDQo+IGFuZCBzZXQgc3RhdGUt PnN0cmVhbWluZyB0byBmYWxzZS4gSSB3b3VsZCBhY3R1YWxseSBzZXQgc3RhdGUtPnN0cmVhbWlu Zw0KPiA9IGVuYWJsZSBhdCB0aGUgZW5kIG9mIHhjc2kycnhzc19zX3N0cmVhbSgpIGluc3RlYWQg b2YgaGVyZSBhbmQgaW4NCj4geGNzaTJyeHNzX3N0b3Bfc3RyZWFtKCkuDQo+IA0KDQpPay4gSSB3 aWxsIGZpeCB0aGlzIGluIG5leHQgdmVyc2lvbi4NCg0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhjc2kycnhzc19zdG9wX3N0cmVhbShz dHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhjc2ky cnhzc19jb3JlICpjb3JlID0gJnN0YXRlLT5jb3JlOw0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2 ICpyc3ViZGV2Ow0KPiA+ICsNCj4gPiArCXJzdWJkZXYgPSB4Y3NpMnJ4c3NfZ2V0X3JlbW90ZV9z dWJkZXYoJnN0YXRlLQ0KPiA+cGFkc1tYVklQX1BBRF9TSU5LXSk7DQo+ID4gKwl2NGwyX3N1YmRl dl9jYWxsKHJzdWJkZXYsIHZpZGVvLCBzX3N0cmVhbSwgMCk7DQo+ID4gKw0KPiA+ICsJeGNzaTJy eHNzX2ludHJfZGlzYWJsZShjb3JlKTsNCj4gPiArCXhjc2kycnhzc19kaXNhYmxlKGNvcmUpOw0K PiA+ICsJc3RhdGUtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogeGNzaTJyeHNzX2lycV9oYW5kbGVyIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIENT SS0yDQo+ID4gKyAqIEBpcnE6IElSUSBudW1iZXINCj4gPiArICogQGRldl9pZDogUG9pbnRlciB0 byBkZXZpY2Ugc3RhdGUNCj4gPiArICoNCj4gPiArICogSW4gdGhlIGludGVycnVwdCBoYW5kbGVy LCBhIGxpc3Qgb2YgZXZlbnQgY291bnRlcnMgYXJlIHVwZGF0ZWQgZm9yDQo+ID4gKyAqIGNvcnJl c3BvbmRpbmcgaW50ZXJydXB0cy4gVGhpcyBpcyB1c2VmdWwgdG8gZ2V0IHN0YXR1cyAvIGRlYnVn Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IElSUV9IQU5ETEVEIGFmdGVyIGhhbmRsaW5nIGlu dGVycnVwdHMNCj4gPiArICogICAgICAgICBJUlFfTk9ORSBpcyBubyBpbnRlcnJ1cHRzDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgeGNzaTJyeHNzX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRldl9pZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhjc2kycnhzc19zdGF0ZSAq c3RhdGUgPSAoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqKWRldl9pZDsNCj4gPiArCXN0cnVjdCB4 Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiArCXUzMiBzdGF0dXM7DQo+ ID4gKw0KPiA+ICsJc3RhdHVzID0geGNzaTJyeHNzX3JlYWQoY29yZSwgWENTSV9JU1JfT0ZGU0VU KSAmDQo+IFhDU0lfSVNSX0FMTElOVFJfTUFTSzsNCj4gPiArCWRldl9kYmdfcmF0ZWxpbWl0ZWQo Y29yZS0+ZGV2LCAiaW50ZXJydXB0IHN0YXR1cyA9IDB4JTA4eFxuIiwNCj4gc3RhdHVzKTsNCj4g DQo+IEFzIHRoaXMgaXMgZXhwZWN0ZWQgdG8gb2NjdXIgZm9yIGV2ZXJ5IGZyYW1lLCBJIHdvdWxk IGRyb3AgdGhlIG1lc3NhZ2UsDQo+IGV2ZW4gaWYgcmF0ZS1saW1pdGVkLg0KPiANCg0KT2sgSSB3 aWxsIHJlbW92ZSB0aGlzLg0KDQo+ID4gKw0KPiA+ICsJaWYgKCFzdGF0dXMpDQo+ID4gKwkJcmV0 dXJuIElSUV9OT05FOw0KPiA+ICsNCj4gPiArCS8qIFJlY2VpdmVkIGEgc2hvcnQgcGFja2V0ICov DQo+ID4gKwlpZiAoc3RhdHVzICYgWENTSV9JU1JfU1BGSUZPTkUpIHsNCj4gPiArCQlkZXZfZGJn X3JhdGVsaW1pdGVkKGNvcmUtPmRldiwgIlNob3J0IHBhY2tldCA9IDB4JTA4eFxuIiwNCj4gPiAr CQkJCSAgICB4Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJX1NQS1RSX09GRlNFVCkpOw0KPiA+ICsJ fQ0KPiANCj4gU2FtZSBoZXJlLCB0aGlzIHdpbGwgb2NjdXIgYWxsIHRoZSB0aW1lLCBJJ2QgcmVt b3ZlIHRoaXMgbWVzc2FnZS4gWW91DQo+IG5lZWQgdG8gcmVhZCBYQ1NJX1NQS1RSX09GRlNFVCB0 aG91Z2gsIGFuZCB5b3Ugc2hvdWxkIGRvIHNvIGluIGEgbG9vcA0KPiB1bnRpbCB0aGUgWENTSV9D U1JfU1BGSUZPTkUgaW4gWENTSV9DU1JfT0ZGU0VUIGlzIGNsZWFyZWQgaW4gY2FzZQ0KPiBtdWx0 aXBsZSBzaG9ydCBwYWNrZXRzIGFyZSByZWNlaXZlZCBiZWZvcmUgdGhlIGludGVycnVwdCBoYW5k bGVyDQo+IGV4ZWN1dGVzLg0KPiANCj4gSSBhbHNvIHdvbmRlciBpZiBpdCB3b3VsZCBtYWtlIHNl bnNlIHRvIGV4dHJhY3QgdGhlIGZyYW1lIG51bWJlciBmcm9tDQo+IHRoZSBGUyBzaG9ydCBwYWNr ZXQsIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBzdWJkZXYgQVBJLiBJDQo+IHRo aW5rIGl0IHNob3VsZCBiZSByZXBvcnRlZCB0aHJvdWdoIGEgVjRMMl9FVkVOVF9GUkFNRV9TWU5D IGV2ZW50LiBUaGlzDQo+IGNhbiBiZSBpbXBsZW1lbnRlZCBsYXRlci4NCj4gDQoNClRoaXMgd2ls bCBub3Qgb2NjdXIgYWxsIHRoZSB0aW1lIGFzIHRoZXNlIGFyZSBnZW5lcmljIHNob3J0IHBhY2tl dHMgYW5kIG5vdCB0aGUgcmVndWxhciBzaG9ydCBwYWNrZXRzIGxpa2UgdGhhdCBmb3IgRnJhbWUg U3RhcnQsIEZyYW1lIGVuZCwgZXRjLg0KSSB3YXMgZWFybGllciBzZW5kaW5nIGFjcm9zcyB0aGUg Z2VuZXJpYyBwYWNrZXQgZGF0YSB0byB0aGUgdXNlcnNwYWNlIGFwcCB2aWEgdjRsMiBldmVudC4N CkJ1dCB0aGlzIGlkZWEgd2FzIG5vdCBhY2NlcHRlZC4gSGVuY2UgSSBhbSBwcmludGluZyB0aGUg Z2VuZXJpYyBzaG9ydCBwYWNrZXQgZGF0YSBoZXJlIGZvciBkZWJ1ZyBwdXJwb3NlIG9ubHkuDQoN Cj4gPiArDQo+ID4gKwkvKiBTaG9ydCBwYWNrZXQgRklGTyBvdmVyZmxvdyAqLw0KPiA+ICsJaWYg KHN0YXR1cyAmIFhDU0lfSVNSX1NQRklGT0YpDQo+ID4gKwkJZGV2X2RiZ19yYXRlbGltaXRlZChj b3JlLT5kZXYsICJTaG9ydCBwYWNrZXQgRklGTw0KPiBvdmVyZmxvd2VkXG4iKTsNCj4gPiArDQo+ ID4gKwkvKg0KPiA+ICsJICogU3RyZWFtIGxpbmUgYnVmZmVyIGZ1bGwNCj4gPiArCSAqIFRoaXMg bWVhbnMgdGhlcmUgaXMgYSBiYWNrcHJlc3N1cmUgZnJvbSBkb3duc3RyZWFtIElQDQo+ID4gKwkg Ki8NCj4gPiArCWlmIChzdGF0dXMgJiBYQ1NJX0lTUl9TTEJGKSB7DQo+ID4gKwkJZGV2X2FsZXJ0 X3JhdGVsaW1pdGVkKGNvcmUtPmRldiwgIlN0cmVhbSBMaW5lIEJ1ZmZlcg0KPiBGdWxsIVxuIik7 DQo+ID4gKwkJeGNzaTJyeHNzX3N0b3Bfc3RyZWFtKHN0YXRlKTsNCj4gPiArCQlpZiAoY29yZS0+ cnN0X2dwaW8pIHsNCj4gPiArCQkJZ3Bpb2Rfc2V0X3ZhbHVlKGNvcmUtPnJzdF9ncGlvLCAxKTsN Cj4gPiArCQkJLyogbWluaW11bSA0MCBkcGh5X2Nsa18yMDBNIGN5Y2xlcyAqLw0KPiA+ICsJCQlu ZGVsYXkoMjUwKTsNCj4gPiArCQkJZ3Bpb2Rfc2V0X3ZhbHVlKGNvcmUtPnJzdF9ncGlvLCAwKTsN Cj4gPiArCQl9DQo+IA0KPiBJIGRvbid0IHRoaW5rIHlvdSBzaG91bGQgc3RvcCB0aGUgY29yZSBo ZXJlLiB4Y3NpMnJ4c3Nfc3RvcF9zdHJlYW0oKQ0KPiBjYWxscyB0aGUgc291cmNlIC5zX3N0cmVh bSgwKSBvcGVyYXRpb24sIHdoaWNoIHVzdWFsbHkgaW52b2x2ZXMgSTJDDQo+IHdyaXRlcyB0aGF0 IHdpbGwgc2xlZXAuDQo+IA0KPiBZb3Ugc2hvdWxkIGluc3RlYWQgcmVwb3J0IGFuIGV2ZW50IHRv IHVzZXJzcGFjZSAoaXQgbG9va3MgbGlrZSB3ZSBoYXZlDQo+IG5vIGVycm9yIGV2ZW50IGRlZmlu ZWQgaW4gVjRMMiwgb25lIHNob3VsZCBiZSBhZGRlZCksIGFuZCByZWx5IG9uIHRoZQ0KPiBub3Jt YWwgc3RvcCBwcm9jZWR1cmUuDQo+IA0KDQpJIGFncmVlIGFib3V0IHRoZSBJMkMgdHJhbnNhY3Rp b25zIHBhcnQuIEkgd2lsbCBhZGQgbm9ybWFsIHN0b3Agc3RyZWFtaW5nIHBhcnQgaGVyZSB3L28g Y2FsbGluZyB0aGUgcmVtb3RlIHN1YmRldiBzdG9wIGZpcnN0Lg0KDQpJIGhhZCBwcm9wb3NlZCBW NEwyX0VWRU5UX1hMTlhDU0lSWF9TTEJGIGV2ZW50IGZvciB0aGlzIGluIGVhcmxpZXIgcGF0Y2hl cy4NCg0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEluY3JlbWVudCBldmVudCBjb3VudGVycyAq Lw0KPiA+ICsJaWYgKHN0YXR1cyAmIFhDU0lfSVNSX0FMTElOVFJfTUFTSykgew0KPiA+ICsJCXVu c2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgWENTSV9OVU1fRVZF TlRTOyBpKyspIHsNCj4gPiArCQkJaWYgKCEoc3RhdHVzICYgeGNzaTJyeHNzX2V2ZW50c1tpXS5t YXNrKSkNCj4gPiArCQkJCWNvbnRpbnVlOw0KPiA+ICsJCQljb3JlLT5ldmVudHNbaV0rKzsNCj4g PiArCQkJZGV2X2RiZ19yYXRlbGltaXRlZChjb3JlLT5kZXYsICIlczogJWRcbiIsDQo+IA0KPiBU aGUgY291bnRlciBpcyB1bnNpZ25lZCwgdGhpcyBzaG91bGQgYmUgJXUgaW5zdGVhZCBvZiAlZC4N Cg0KQWdyZWVkLiBJIHdpbGwgZml4IHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+IA0KPiA+ICsJ CQkJCSAgICB4Y3NpMnJ4c3NfZXZlbnRzW2ldLm5hbWUsDQo+ID4gKwkJCQkJICAgIGNvcmUtPmV2 ZW50c1tpXSk7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAoc3RhdHVzICYgWENTSV9JU1Jf VkNYRkUgJiYgY29yZS0+ZW5fdmN4KSB7DQo+ID4gKwkJCXUzMiB2Y3hzdGF0dXM7DQo+ID4gKw0K PiA+ICsJCQl2Y3hzdGF0dXMgPSB4Y3NpMnJ4c3NfcmVhZChjb3JlLCBYQ1NJX1ZDWFJfT0ZGU0VU KTsNCj4gPiArCQkJdmN4c3RhdHVzICY9IFhDU0lfVkNYUl9WQ0VSUjsNCj4gPiArCQkJZm9yIChp ID0gMDsgaSA8IFhDU0lfVkNYX05VTV9FVkVOVFM7IGkrKykgew0KPiA+ICsJCQkJaWYgKCEodmN4 c3RhdHVzICYgKDEgPDwgaSkpKQ0KPiA+ICsJCQkJCWNvbnRpbnVlOw0KPiA+ICsJCQkJY29yZS0+ dmN4X2V2ZW50c1tpXSsrOw0KPiA+ICsJCQl9DQo+ID4gKwkJCXhjc2kycnhzc193cml0ZShjb3Jl LCBYQ1NJX1ZDWFJfT0ZGU0VULCB2Y3hzdGF0dXMpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiAr DQo+ID4gKwl4Y3NpMnJ4c3Nfd3JpdGUoY29yZSwgWENTSV9JU1JfT0ZGU0VULCBzdGF0dXMpOw0K PiANCj4gVG8gbG93ZXIgdGhlIHByb2JhYmlsaXR5IG9mIGxvc2luZyBldmVudHMsIHNob3VsZG4n dCB5b3Ugd3JpdGUgdGhlDQo+IHJlZ2lzdGVyIHJpZ2h0IGFmdGVyIHJlYWRpbmcgaXQgYWJvdmUg PyBTYW1lIGZvciBYQ1NJX1ZDWFJfT0ZGU0VULg0KPiANCg0KUmlnaHQgSSB3aWxsIG1vdmUgdGhp cyB3cml0ZSB0byBqdXN0IGFmdGVyIHJlYWQuDQoNCj4gPiArCXJldHVybiBJUlFfSEFORExFRDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjc2kycnhzc19zX3N0cmVhbSAtIEl0 IGlzIHVzZWQgdG8gc3RhcnQvc3RvcCB0aGUgc3RyZWFtaW5nLg0KPiA+ICsgKiBAc2Q6IFY0TDIg U3ViIGRldmljZQ0KPiA+ICsgKiBAZW5hYmxlOiBGbGFnIChUcnVlIC8gRmFsc2UpDQo+ID4gKyAq DQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIHN0YXJ0IG9yIHN0b3Agb2Ygc3Ry ZWFtaW5nIGZvciB0aGUNCj4gPiArICogWGlsaW54IE1JUEkgQ1NJLTIgUnggU3Vic3lzdGVtLg0K PiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3JzIG90aGVyd2lzZQ0K PiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfc19zdHJlYW0oc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwgaW50IGVuYWJsZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhjc2kycnhzc19z dGF0ZSAqeGNzaTJyeHNzID0gdG9feGNzaTJyeHNzc3RhdGUoc2QpOw0KPiA+ICsJaW50IHJldCA9 IDA7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArDQo+ IA0KPiBZb3UgY291bGQgYWRkDQo+IA0KPiAJaWYgKGVuYWJsZSA9PSB4Y3NpMnJ4c3MtPnN0cmVh bWluZykNCj4gCQlnb3RvIGRvbmU7DQo+IA0KPiB3aXRoIGEgZG9uZSBsYWJlbCBqdXN0IGJlZm9y ZSBtdXRleF91bmxvY2soKSwgYW5kIHNpbXBsaWZ5IHRoZSBjb2RlDQo+IGJlbG93IGJ5IHJlbW92 aW5nIHRoZSB4Y3NpMnJ4c3MtPnN0cmVhbWluZyBjaGVja3MuDQo+IA0KDQpPayBJIHdpbGwgbWFr ZSB0aGlzIGNoYW5nZSBpbiBuZXh0IHZlcnNpb24uDQoNCj4gPiArCWlmIChlbmFibGUpIHsNCj4g PiArCQlpZiAoIXhjc2kycnhzcy0+c3RyZWFtaW5nKSB7DQo+ID4gKwkJCS8qIHJlc2V0IHRoZSBl dmVudCBjb3VudGVycyAqLw0KPiA+ICsJCQl4Y3NpMnJ4c3NfcmVzZXRfZXZlbnRfY291bnRlcnMo eGNzaTJyeHNzKTsNCj4gPiArCQkJcmV0ID0geGNzaTJyeHNzX3N0YXJ0X3N0cmVhbSh4Y3NpMnJ4 c3MpOw0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaWYgKHhjc2kycnhzcy0+c3Ry ZWFtaW5nKSB7DQo+ID4gKwkJCXN0cnVjdCBncGlvX2Rlc2MgKnJzdCA9IHhjc2kycnhzcy0+Y29y ZS5yc3RfZ3BpbzsNCj4gPiArDQo+ID4gKwkJCXhjc2kycnhzc19zdG9wX3N0cmVhbSh4Y3NpMnJ4 c3MpOw0KPiA+ICsJCQlpZiAocnN0KSB7DQo+ID4gKwkJCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAocnN0LCAxKTsNCj4gPiArCQkJCXVzbGVlcF9yYW5nZSgxLCAyKTsNCj4gPiArCQkJCWdwaW9k X3NldF92YWx1ZV9jYW5zbGVlcChyc3QsIDApOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArCXJl dHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9tYnVzX2Zy YW1lZm10ICoNCj4gPiArX194Y3NpMnJ4c3NfZ2V0X3BhZF9mb3JtYXQoc3RydWN0IHhjc2kycnhz c19zdGF0ZSAqeGNzaTJyeHNzLA0KPiA+ICsJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2Nv bmZpZyAqY2ZnLA0KPiA+ICsJCQkgICB1bnNpZ25lZCBpbnQgcGFkLCB1MzIgd2hpY2gpDQo+ID4g K3sNCj4gPiArCXN3aXRjaCAod2hpY2gpIHsNCj4gPiArCWNhc2UgVjRMMl9TVUJERVZfRk9STUFU X1RSWToNCj4gPiArCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoJnhjc2kycnhz cy0+c3ViZGV2LCBjZmcsDQo+IHBhZCk7DQo+ID4gKwljYXNlIFY0TDJfU1VCREVWX0ZPUk1BVF9B Q1RJVkU6DQo+ID4gKwkJcmV0dXJuICZ4Y3NpMnJ4c3MtPmZvcm1hdDsNCj4gPiArCWRlZmF1bHQ6 DQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiB4Y3NpMnJ4c3NfZ2V0X2Zvcm1hdCAtIEdldCB0aGUgcGFkIGZvcm1hdA0KPiA+ICsg KiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2Zn OiBQb2ludGVyIHRvIHN1YiBkZXZpY2UgcGFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQ0KPiA+ICsg KiBAZm10OiBQb2ludGVyIHRvIHBhZCBsZXZlbCBtZWRpYSBidXMgZm9ybWF0DQo+ID4gKyAqDQo+ ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHBhZCBmb3JtYXQgaW5mb3Jt YXRpb24uDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc19nZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsDQo+ID4gKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ICsJ CQkJc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg eGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3MgPSB0b194Y3NpMnJ4c3NzdGF0ZShzZCk7DQo+ID4g Kw0KPiA+ICsJbXV0ZXhfbG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArCWZtdC0+Zm9ybWF0 ID0gKl9feGNzaTJyeHNzX2dldF9wYWRfZm9ybWF0KHhjc2kycnhzcywgY2ZnLCBmbXQtPnBhZCwN Cj4gPiArCQkJCQkJICBmbXQtPndoaWNoKTsNCj4gPiArCW11dGV4X3VubG9jaygmeGNzaTJyeHNz LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIHhjc2kycnhzc19zZXRfZm9ybWF0IC0gVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUg cGFkIGZvcm1hdA0KPiA+ICsgKiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVj dHVyZQ0KPiA+ICsgKiBAY2ZnOiBQb2ludGVyIHRvIHN1YiBkZXZpY2UgcGFkIGluZm9ybWF0aW9u IHN0cnVjdHVyZQ0KPiA+ICsgKiBAZm10OiBQb2ludGVyIHRvIHBhZCBsZXZlbCBtZWRpYSBidXMg Zm9ybWF0DQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhl IHBhZCBmb3JtYXQuIFNpbmNlIHRoZSBwYWQgZm9ybWF0IGlzIGZpeGVkDQo+ID4gKyAqIGluIGhh cmR3YXJlLCBpdCBjYW4ndCBiZSBtb2RpZmllZCBvbiBydW4gdGltZS4gU28gd2hlbiBhIGZvcm1h dCBzZXQgaXMNCj4gPiArICogcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9uLCBhbGwgcGFyYW1ldGVy cyBleGNlcHQgdGhlIGZvcm1hdCB0eXBlIGlzDQo+IHNhdmVkDQo+ID4gKyAqIGZvciB0aGUgcGFk IGFuZCB0aGUgb3JpZ2luYWwgcGFkIGZvcm1hdCBpcyBzZW50IGJhY2sgdG8gdGhlIGFwcGxpY2F0 aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfc2V0X2Zvcm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LA0KPiA+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCj4gPiArCQkJ CXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhj c2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzID0gdG9feGNzaTJyeHNzc3RhdGUoc2QpOw0KPiA+ICsJ c3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlID0gJnhjc2kycnhzcy0+Y29yZTsNCj4gPiArCXN0 cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKl9fZm9ybWF0Ow0KPiA+ICsNCj4gPiArCS8qIG9ubHkg c2luayBwYWQgZm9ybWF0IGNhbiBiZSB1cGRhdGVkICovDQo+ID4gKwltdXRleF9sb2NrKCZ4Y3Np MnJ4c3MtPmxvY2spOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBPbmx5IHRoZSBmb3JtYXQt PmNvZGUgcGFyYW1ldGVyIG1hdHRlcnMgZm9yIENTSSBhcyB0aGUNCj4gPiArCSAqIENTSSBmb3Jt YXQgY2Fubm90IGJlIGNoYW5nZWQgYXQgcnVudGltZS4NCj4gPiArCSAqIEVuc3VyZSB0aGF0IGZv cm1hdCB0byBzZXQgaXMgY29waWVkIHRvIG92ZXIgdG8gQ1NJIHBhZCBmb3JtYXQNCj4gPiArCSAq Lw0KPiA+ICsJX19mb3JtYXQgPSBfX3hjc2kycnhzc19nZXRfcGFkX2Zvcm1hdCh4Y3NpMnJ4c3Ms IGNmZywNCj4gPiArCQkJCQkgICAgICBmbXQtPnBhZCwgZm10LT53aGljaCk7DQo+ID4gKw0KPiA+ ICsJaWYgKGZtdC0+cGFkID09IFhWSVBfUEFEX1NPVVJDRSkgew0KPiA+ICsJCWZtdC0+Zm9ybWF0 ID0gKl9fZm9ybWF0Ow0KPiA+ICsJCW11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4g PiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogUkFXOCBp cyBzdXBwb3J0ZWQgaW4gYWxsIGRhdGF0eXBlcy4gU28gaWYgcmVxdWVzdGVkIG1lZGlhIGJ1cw0K PiBmb3JtYXQNCj4gPiArCSAqIGlzIG9mIFJBVzggdHlwZSwgdGhlbiBhbGxvdyB0byBiZSBzZXQu IEluIGNhc2UgY29yZSBpcyBjb25maWd1cmVkIHRvDQo+ID4gKwkgKiBvdGhlciBSQVcsIFlVVjQy MiA4LzEwIG9yIFJHQjg4OCwgc2V0IGFwcHJvcHJpYXRlIG1lZGlhIGJ1cw0KPiBmb3JtYXQuDQo+ ID4gKwkgKi8NCj4gPiArCWlmICghKChmbXQtPmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRf U0JHR1I4XzFYOCB8fA0KPiA+ICsJICAgICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVT X0ZNVF9TR0JSRzhfMVg4IHx8DQo+ID4gKwkgICAgICAgZm10LT5mb3JtYXQuY29kZSA9PSBNRURJ QV9CVVNfRk1UX1NHUkJHOF8xWDggfHwNCj4gPiArCSAgICAgICBmbXQtPmZvcm1hdC5jb2RlID09 IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCkgfHwNCj4gPiArCSAgICAgIChjb3JlLT5kYXRhdHlw ZSA9PSBYQ1NJX0RUX1JBVzEwICYmDQo+ID4gKwkgICAgICAgKGZtdC0+Zm9ybWF0LmNvZGUgPT0g TUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTAgfHwNCj4gPiArCQlmbXQtPmZvcm1hdC5jb2RlID09 IE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwIHx8DQo+ID4gKwkJZm10LT5mb3JtYXQuY29kZSA9 PSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMCB8fA0KPiA+ICsJCWZtdC0+Zm9ybWF0LmNvZGUg PT0gTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTApKSB8fA0KPiA+ICsJICAgICAgKGNvcmUtPmRh dGF0eXBlID09IFhDU0lfRFRfUkFXMTIgJiYNCj4gPiArCSAgICAgICAoZm10LT5mb3JtYXQuY29k ZSA9PSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMiB8fA0KPiA+ICsJCWZtdC0+Zm9ybWF0LmNv ZGUgPT0gTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTIgfHwNCj4gPiArCQlmbXQtPmZvcm1hdC5j b2RlID09IE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyIHx8DQo+ID4gKwkJZm10LT5mb3JtYXQu Y29kZSA9PSBNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMikpIHx8DQo+ID4gKwkgICAgICAoY29y ZS0+ZGF0YXR5cGUgPT0gWENTSV9EVF9SQVcxNCAmJg0KPiA+ICsJICAgICAgIChmbXQtPmZvcm1h dC5jb2RlID09IE1FRElBX0JVU19GTVRfU0JHR1IxNF8xWDE0IHx8DQo+ID4gKwkJZm10LT5mb3Jt YXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NHQlJHMTRfMVgxNCB8fA0KPiA+ICsJCWZtdC0+Zm9y bWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TR1JCRzE0XzFYMTQgfHwNCj4gPiArCQlmbXQtPmZv cm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU1JHR0IxNF8xWDE0KSkgfHwNCj4gPiArCSAgICAg IChjb3JlLT5kYXRhdHlwZSA9PSBYQ1NJX0RUX1JBVzE2ICYmDQo+ID4gKwkgICAgICAgKGZtdC0+ Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TQkdHUjE2XzFYMTYgfHwNCj4gPiArCQlmbXQt PmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfU0dCUkcxNl8xWDE2IHx8DQo+ID4gKwkJZm10 LT5mb3JtYXQuY29kZSA9PSBNRURJQV9CVVNfRk1UX1NHUkJHMTZfMVgxNiB8fA0KPiA+ICsJCWZt dC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9TUkdHQjE2XzFYMTYpKSB8fA0KPiA+ICsJ ICAgICAgKGNvcmUtPmRhdGF0eXBlID09IFhDU0lfRFRfWVVWNDIyOEIgJiYNCj4gPiArCSAgICAg ICBmbXQtPmZvcm1hdC5jb2RlID09IE1FRElBX0JVU19GTVRfVVlWWThfMVgxNikgfHwNCj4gPiAr CSAgICAgIChjb3JlLT5kYXRhdHlwZSA9PSBYQ1NJX0RUX1lVVjQyMjEwQiAmJg0KPiA+ICsJICAg ICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgyMCkgfHwNCj4g PiArCSAgICAgIChjb3JlLT5kYXRhdHlwZSA9PSBYQ1NJX0RUX1JHQjg4OCAmJg0KPiA+ICsJICAg ICAgIGZtdC0+Zm9ybWF0LmNvZGUgPT0gTUVESUFfQlVTX0ZNVF9SQkc4ODhfMVgyNCkpKSB7DQo+ IA0KPiBJIHRoaW5rIHlvdSBzaG91bGQgY3JlYXRlIGEgc3RhdGljIGNvbnN0IHRhYmxlIG9mIGZv cm1hdCBpbmZvcm1hdGlvbiwNCj4gbWFwcGluZyBtZWRpYSBidXMgY29kZXMgdG8gQ1NJLTIgZGF0 YSB0eXBlcy4gSXQgY2FuIGJlIHVzZWZ1bCBoZXJlLCBpbg0KPiB4Y3NpMnJ4c3Nfc2V0X2RlZmF1 bHRfZm9ybWF0KCkgYW5kIGluIHhjc2kycnhzc19pbml0X21idXNfZm10cygpLg0KPiANCg0KT2su IEkgd2lsbCBjcmVhdGUgc3RhdGljIGNvbnN0IHRhYmxlIHdpdGggbWVkaWEgYnVzIGNvZGUgYW5k IGRhdGEgdHlwZSBtYXBwaW5nDQpBbmQgdXNlIGl0IGhlcmUsIHNldF9kZWZhdWx0X2Zvcm1hdCBh bmQgaW5pdF9tYnVzX2ZtdHMoKQ0KDQo+ID4gKwkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgcGFk IGZvcm1hdCBjb2RlICovDQo+ID4gKwkJZGV2X2RiZyhjb3JlLT5kZXYsICJVbnN1cHBvcnRlZCBt ZWRpYSBidXMgZm9ybWF0Iik7DQo+ID4gKwkJZm10LT5mb3JtYXQuY29kZSA9IF9fZm9ybWF0LT5j b2RlOw0KPiANCj4gWW91IHNob3VsZCB1c2UgdGhlIGRlZmF1bHQgaGVyZSBpbnN0ZWFkIG9mIHRo ZSBjdXJyZW50IGZvcm1hdC4NCj4gDQoNCkFncmVlLiANCg0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CSpfX2Zvcm1hdCA9IGZtdC0+Zm9ybWF0Ow0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ4Y3NpMnJ4c3Mt PmxvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKg0K PiA+ICsgKiB4Y3NpMnJ4c3NfZW51bV9tYnVzX2NvZGUgLSBIYW5kbGUgcGl4ZWwgZm9ybWF0IGVu dW1lcmF0aW9uDQo+ID4gKyAqIEBzZCA6IHBvaW50ZXIgdG8gdjRsMiBzdWJkZXYgc3RydWN0dXJl DQo+ID4gKyAqIEBjZmc6IFY0TDIgc3ViZGV2IHBhZCBjb25maWd1cmF0aW9uDQo+ID4gKyAqIEBj b2RlIDogcG9pbnRlciB0byB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSBzdHJ1Y3R1cmUNCj4g PiArICoNCj4gPiArICogUmV0dXJuOiAtRUlOVkFMIG9yIHplcm8gb24gc3VjY2Vzcw0KPiA+ICsg Ki8NCj4gPiAraW50IHhjc2kycnhzc19lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYg KnNkLA0KPiA+ICsJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ ID4gKwkJCSAgICAgc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICpzdGF0ZSA9IHRvX3hjc2kycnhzc3N0 YXRlKHNkKTsNCj4gPiArDQo+ID4gKwlpZiAoY29kZS0+aW5kZXggPj0gc3RhdGUtPm1idXNfZm10 c19jb3VudCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwljb2RlLT5jb2Rl ID0gc3RhdGUtPm1idXNfZm10c1tjb2RlLT5pbmRleF07DQo+IA0KPiBJbnN0ZWFkIG9mIHN0b3Jp bmcgbWJ1c19mbXRzIGFuZCBtYnVzX2ZtdHNfY291bnQgaW4gdGhlIHN0YXRlLCBob3cgYWJvdXQN Cj4gbW92aW5nIHRoZSBsb2dpYyBmcm9tIHhjc2kycnhzc19pbml0X21idXNfZm10cygpIHRvIGhl cmUgPw0KDQogSSB3aWxsIHVwZGF0ZSB0aGlzIGJhc2VkIG9uIHRoZSBzdGF0aWMgY29uc3QgbWFw cGluZyB0YWJsZS4NCg0KPiANCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIHhjc2kycnhzc19vcGVuIC0gQ2FsbGVkIG9uIHY0bDJfb3Blbigp DQo+ID4gKyAqIEBzZDogUG9pbnRlciB0byBWNEwyIHN1YiBkZXZpY2Ugc3RydWN0dXJlDQo+ID4g KyAqIEBmaDogUG9pbnRlciB0byBWNEwyIEZpbGUgaGFuZGxlDQo+ID4gKyAqDQo+ID4gKyAqIFRo aXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIHY0bDJfb3BlbigpLiBJdCBzZXRzIHRoZSBkZWZhdWx0 IGZvcm1hdA0KPiA+ICsgKiBmb3IgYm90aCBwYWRzLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46 IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3Nfb3Blbihz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9maCAq ZmgpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2kycnhzcyA9IHRv X3hjc2kycnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZv cm1hdDsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkg PCBYQ1NJX01FRElBX1BBRFM7IGkrKykgew0KPiA+ICsJCWZvcm1hdCA9IHY0bDJfc3ViZGV2X2dl dF90cnlfZm9ybWF0KHNkLCBmaC0+cGFkLCBpKTsNCj4gPiArCQkqZm9ybWF0ID0geGNzaTJyeHNz LT5kZWZhdWx0X2Zvcm1hdDsNCj4gPiArCX0NCj4gDQo+IEkgd291bGQgcmVjb21tZW5kIG1vdmlu ZyB0aGlzIGxvZ2ljIHRvIHRoZSAuaW5pdF9jZmcoKSBwYWQgb3BlcmF0aW9uLA0KPiBhbmQgcmVt b3ZpbmcgdGhlIC5vcGVuKCkgaW50ZXJuYWwgb3BlcmF0aW9uLg0KDQpPay4gSSB3aWxsIGRvIHRo YXQuDQoNCj4gDQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKyAqIE1lZGlhIE9wZXJhdGlvbnMNCj4gPiArICov DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25z IHhjc2kycnhzc19tZWRpYV9vcHMgPSB7DQo+ID4gKwkubGlua192YWxpZGF0ZSA9IHY0bDJfc3Vi ZGV2X2xpbmtfdmFsaWRhdGUNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgeGNzaTJyeHNzX2NvcmVfb3BzID0gew0KPiA+ICsJLmxv Z19zdGF0dXMgPSB4Y3NpMnJ4c3NfbG9nX3N0YXR1cywNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHhjc2kycnhzc192aWRlb19v cHMgPSB7DQo+ID4gKwkuc19zdHJlYW0gPSB4Y3NpMnJ4c3Nfc19zdHJlYW0NCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyB4Y3NpMnJ4 c3NfcGFkX29wcyA9IHsNCj4gPiArCS5nZXRfZm10ID0geGNzaTJyeHNzX2dldF9mb3JtYXQsDQo+ ID4gKwkuc2V0X2ZtdCA9IHhjc2kycnhzc19zZXRfZm9ybWF0LA0KPiA+ICsJLmVudW1fbWJ1c19j b2RlID0geGNzaTJyeHNzX2VudW1fbWJ1c19jb2RlLA0KPiA+ICsJLmxpbmtfdmFsaWRhdGUgPSB2 NGwyX3N1YmRldl9saW5rX3ZhbGlkYXRlX2RlZmF1bHQsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB4Y3NpMnJ4c3Nfb3BzID0gew0KPiA+ ICsJLmNvcmUgPSAmeGNzaTJyeHNzX2NvcmVfb3BzLA0KPiA+ICsJLnZpZGVvID0gJnhjc2kycnhz c192aWRlb19vcHMsDQo+ID4gKwkucGFkID0gJnhjc2kycnhzc19wYWRfb3BzDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2ludGVybmFsX29wcyB4 Y3NpMnJ4c3NfaW50ZXJuYWxfb3BzID0gew0KPiA+ICsJLm9wZW4gPSB4Y3NpMnJ4c3Nfb3BlbiwN Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhjc2kycnhzc19zZXRfZGVmYXVsdF9m b3JtYXQoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCB4Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiArDQo+ID4gKwltZW1z ZXQoJnN0YXRlLT5kZWZhdWx0X2Zvcm1hdCwgMCwgc2l6ZW9mKHN0YXRlLT5kZWZhdWx0X2Zvcm1h dCkpOw0KPiANCj4gc3RhdGUgaXMga3phbGxvYydlZCwgc28geW91IGNhbiBza2lwIHRoaXMuDQoN ClJpZ2h0LiBJIHdpbGwgcmVtb3ZlIHRoaXMgaW4gdGhlIG5leHQgdmVyc2lvbi4NCg0KPiANCj4g PiArDQo+ID4gKwlzd2l0Y2ggKGNvcmUtPmRhdGF0eXBlKSB7DQo+ID4gKwljYXNlIFhDU0lfRFRf WVVWNDIyOEI6DQo+ID4gKwkJc3RhdGUtPmRlZmF1bHRfZm9ybWF0LmNvZGUgPQ0KPiBNRURJQV9C VVNfRk1UX1VZVlk4XzFYMTY7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhDU0lfRFRfUkdC ODg4Og0KPiA+ICsJCXN0YXRlLT5kZWZhdWx0X2Zvcm1hdC5jb2RlID0NCj4gTUVESUFfQlVTX0ZN VF9SQkc4ODhfMVgyNDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWENTSV9EVF9ZVVY0MjIx MEI6DQo+ID4gKwkJc3RhdGUtPmRlZmF1bHRfZm9ybWF0LmNvZGUgPQ0KPiBNRURJQV9CVVNfRk1U X1VZVlkxMF8xWDIwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzEwOg0K PiA+ICsJCXN0YXRlLT5kZWZhdWx0X2Zvcm1hdC5jb2RlID0NCj4gTUVESUFfQlVTX0ZNVF9TUkdH QjEwXzFYMTA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhDU0lfRFRfUkFXMTI6DQo+ID4g KwkJc3RhdGUtPmRlZmF1bHRfZm9ybWF0LmNvZGUgPQ0KPiBNRURJQV9CVVNfRk1UX1NSR0dCMTJf MVgxMjsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWENTSV9EVF9SQVcxNDoNCj4gPiArCQlz dGF0ZS0+ZGVmYXVsdF9mb3JtYXQuY29kZSA9DQo+IE1FRElBX0JVU19GTVRfU1JHR0IxNF8xWDE0 Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzE2Og0KPiA+ICsJCXN0YXRl LT5kZWZhdWx0X2Zvcm1hdC5jb2RlID0NCj4gTUVESUFfQlVTX0ZNVF9TUkdHQjE2XzFYMTY7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhDU0lfRFRfUkFXODoNCj4gPiArCWNhc2UgWENTSV9E VF9SR0I0NDQ6DQo+ID4gKwljYXNlIFhDU0lfRFRfUkdCNTU1Og0KPiA+ICsJY2FzZSBYQ1NJX0RU X1JHQjU2NToNCj4gPiArCWNhc2UgWENTSV9EVF9SR0I2NjY6DQo+ID4gKwkJc3RhdGUtPmRlZmF1 bHRfZm9ybWF0LmNvZGUgPQ0KPiBNRURJQV9CVVNfRk1UX1NSR0dCOF8xWDg7DQo+IA0KPiBUaGlz IGlzIGNvcnJlY3QgZm9yIFhDU0lfRFRfUkFXOCBidXQgbm90IGZvciB0aGUgb3RoZXIgUkdCIGRh dGEgdHlwZXMuDQoNCkZvciB0aGUgb3RoZXIgUkdCIGRhdGEgdHlwZXMgdGhlcmUgaXMgbm8gc3Vw cG9ydGluZyBtZWRpYSBidXMgZm9ybWF0Lg0KSGVuY2UgdGhleSBhcmUgaW5pdGlhbGl6ZWQgdG8g ZGVmYXVsdCBmb3JtYXQgYXMgU1JHR0I4Lg0KDQo+IA0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXN0YXRlLT5kZWZhdWx0X2Zvcm1hdC5maWVsZCA9IFY0TDJfRklFTERfTk9O RTsNCj4gPiArCXN0YXRlLT5kZWZhdWx0X2Zvcm1hdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQ QUNFX1NSR0I7DQo+ID4gKwlzdGF0ZS0+ZGVmYXVsdF9mb3JtYXQud2lkdGggPSBYQ1NJX0RFRkFV TFRfV0lEVEg7DQo+ID4gKwlzdGF0ZS0+ZGVmYXVsdF9mb3JtYXQuaGVpZ2h0ID0gWENTSV9ERUZB VUxUX0hFSUdIVDsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgImRlZmF1bHQgbWVk aWFidXMgZm9ybWF0ID0gMHgleCIsDQo+ID4gKwkJc3RhdGUtPmRlZmF1bHRfZm9ybWF0LmNvZGUp Ow0KPiANCj4gSSdkIGRyb3AgdGhpcyBhcyB0aGVyZSdzIGFscmVhZHkgYSBkZWJ1ZyBtZXNzYWdl IHRoYXQgcHJpbnRzIHRoZSBkYXRhDQo+IHR5cGUuDQo+IA0KDQpPay4NCg0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3NfaW5pdF9tYnVzX2ZtdHMoc3RydWN0IHhjc2ky cnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAq Y29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiArDQo+ID4gKwlYQUREX01CVVMoc3RhdGUsIE1FRElB X0JVU19GTVRfU1JHR0I4XzFYOCk7DQo+ID4gKwlYQUREX01CVVMoc3RhdGUsIE1FRElBX0JVU19G TVRfU0JHR1I4XzFYOCk7DQo+ID4gKwlYQUREX01CVVMoc3RhdGUsIE1FRElBX0JVU19GTVRfU0dS Qkc4XzFYOCk7DQo+ID4gKwlYQUREX01CVVMoc3RhdGUsIE1FRElBX0JVU19GTVRfU0dCUkc4XzFY OCk7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChjb3JlLT5kYXRhdHlwZSkgew0KPiA+ICsJY2FzZSBY Q1NJX0RUX1JBVzEwOg0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TUkdH QjEwXzFYMTApOw0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TQkdHUjEw XzFYMTApOw0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFY MTApOw0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TR0JSRzEwXzFYMTAp Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzEyOg0KPiA+ICsJCVhBRERf TUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFYMTIpOw0KPiA+ICsJCVhBRERfTUJV UyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTIpOw0KPiA+ICsJCVhBRERfTUJVUyhz dGF0ZSwgTUVESUFfQlVTX0ZNVF9TR1JCRzEyXzFYMTIpOw0KPiA+ICsJCVhBRERfTUJVUyhzdGF0 ZSwgTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBYQ1NJX0RUX1JBVzE0Og0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9T UkdHQjE0XzFYMTQpOw0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TQkdH UjE0XzFYMTQpOw0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TR1JCRzE0 XzFYMTQpOw0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TR0JSRzE0XzFY MTQpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzE2Og0KPiA+ICsJCVhB RERfTUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TUkdHQjE2XzFYMTYpOw0KPiA+ICsJCVhBRERf TUJVUyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TQkdHUjE2XzFYMTYpOw0KPiA+ICsJCVhBRERfTUJV UyhzdGF0ZSwgTUVESUFfQlVTX0ZNVF9TR1JCRzE2XzFYMTYpOw0KPiA+ICsJCVhBRERfTUJVUyhz dGF0ZSwgTUVESUFfQlVTX0ZNVF9TR0JSRzE2XzFYMTYpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ Y2FzZSBYQ1NJX0RUX1lVVjQyMjhCOg0KPiA+ICsJCVhBRERfTUJVUyhzdGF0ZSwgTUVESUFfQlVT X0ZNVF9VWVZZOF8xWDE2KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWENTSV9EVF9SR0I4 ODg6DQo+ID4gKwkJWEFERF9NQlVTKHN0YXRlLCBNRURJQV9CVVNfRk1UX1JCRzg4OF8xWDI0KTsN Cj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWENTSV9EVF9ZVVY0MjIxMEI6DQo+ID4gKwkJWEFE RF9NQlVTKHN0YXRlLCBNRURJQV9CVVNfRk1UX1VZVlkxMF8xWDIwKTsNCj4gPiArCQlicmVhazsN Cj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJJbnZhbGlkIGRhdGEg dHlwZSFcbiIpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHhjc2ky cnhzc19wYXJzZV9vZihzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3MpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCB4Y3NpMnJ4c3NfY29yZSAqY29yZSA9ICZ4Y3NpMnJ4c3MtPmNvcmU7DQo+ ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSB4Y3NpMnJ4c3MtPmNvcmUuZGV2LT5vZl9u b2RlOw0KPiA+ICsJdW5zaWduZWQgaW50IG5wb3J0cywgaXJxOw0KPiA+ICsJYm9vbCBlbl9jc2lf djIwLCB2ZmI7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWVuX2NzaV92MjAgPSBvZl9w cm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInhsbngsZW4tY3NpLXYyLTAiKTsNCj4gPiArCWlmIChl bl9jc2lfdjIwKQ0KPiA+ICsJCWNvcmUtPmVuX3ZjeCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChu b2RlLCAieGxueCxlbi12Y3giKTsNCj4gPiArDQo+ID4gKwljb3JlLT5lbmFibGVfYWN0aXZlX2xh bmVzID0NCj4gPiArCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInhsbngsZW4tYWN0aXZl LWxhbmVzIik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwg InhsbngsY3NpLXB4bC1mb3JtYXQiLA0KPiA+ICsJCQkJICAgJmNvcmUtPmRhdGF0eXBlKTsNCj4g PiArCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJtaXNzaW5nIHhs bngsY3NpLXB4bC1mb3JtYXQgcHJvcGVydHlcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChjb3JlLT5kYXRhdHlwZSkgew0KPiA+ICsJY2FzZSBY Q1NJX0RUX1lVVjQyMjhCOg0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JHQjQ0NDoNCj4gPiArCWNhc2Ug WENTSV9EVF9SR0I1NTU6DQo+ID4gKwljYXNlIFhDU0lfRFRfUkdCNTY1Og0KPiA+ICsJY2FzZSBY Q1NJX0RUX1JHQjY2NjoNCj4gPiArCWNhc2UgWENTSV9EVF9SR0I4ODg6DQo+ID4gKwljYXNlIFhD U0lfRFRfUkFXNjoNCj4gPiArCWNhc2UgWENTSV9EVF9SQVc3Og0KPiA+ICsJY2FzZSBYQ1NJX0RU X1JBVzg6DQo+ID4gKwljYXNlIFhDU0lfRFRfUkFXMTA6DQo+ID4gKwljYXNlIFhDU0lfRFRfUkFX MTI6DQo+ID4gKwljYXNlIFhDU0lfRFRfUkFXMTQ6DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNl IFhDU0lfRFRfWVVWNDIyMTBCOg0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzE2Og0KPiA+ICsJY2Fz ZSBYQ1NJX0RUX1JBVzIwOg0KPiA+ICsJCWlmICghZW5fY3NpX3YyMCkgew0KPiA+ICsJCQlyZXQg PSAtRUlOVkFMOw0KPiA+ICsJCQlkZXZfZGJnKGNvcmUtPmRldiwgImVuYWJsZSBjc2kgdjIgZm9y IHRoaXMgcGl4ZWwNCj4gZm9ybWF0Iik7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ ZGVmYXVsdDoNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKHJldCA8 IDApIHsNCj4gPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgImludmFsaWQgY3NpLXB4bC1mb3JtYXQg cHJvcGVydHkhXG4iKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXZmYiA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAieGxueCx2ZmIiKTsNCj4gPiArCWlm ICghdmZiKSB7DQo+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJmYWlsZWQgYXMgVkZCIGlzIGRp c2FibGVkIVxuIik7DQo+IA0KPiBJJ2Qgd3JpdGUgdGhpcyAib3BlcmF0aW9uIHdpdGhvdXQgVkZC IGlzIG5vdCBzdXBwb3J0ZWRcbiIuIERvIHlvdSBwbGFuDQo+IHRvIGFkZCBzdXBwb3J0IGZvciB0 aGlzIGxhdGVyID8NCj4gDQoNCk9rIEkgd2lsbCB1cGRhdGUgdGhlIG1lc3NhZ2UgYWNjb3JkaW5n bHkuIA0KV2l0aG91dCBWRkIgdGhlIGRhdGEgb24gdGhlIGJ1cyB3b24ndCBtYXRjaCBtZWRpYSBi dXMgZm9ybWF0IGRlc2NyaXB0aW9uLg0KUmVmZXIgdG8gdGhlIFBHMjMyIGZvciBkZXRhaWxzIG9u IGhvdyBkYXRhIGlzIHNlbnQgb24gdGhlIGJ1cyB3aGVuIFZGQiBpcyBkaXNhYmxlZC4NCg0KPiA+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAobnBvcnRzID0g MDsgbnBvcnRzIDwgWENTSV9NRURJQV9QQURTOyBucG9ydHMrKykgew0KPiA+ICsJCXN0cnVjdCBm d25vZGVfaGFuZGxlICplcDsNCj4gPiArCQlzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgdmVw ID0gew0KPiA+ICsJCQkuYnVzX3R5cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZDQo+ID4gKwkJfTsN Cj4gPiArDQo+ID4gKwkJZXAgPSBmd25vZGVfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X2lkKGRldl9m d25vZGUoY29yZS0NCj4gPmRldiksDQo+ID4gKwkJCQkJCSAgICAgbnBvcnRzLCAwLA0KPiA+ICsN Cj4gRldOT0RFX0dSQVBIX0VORFBPSU5UX05FWFQpOw0KPiA+ICsJCWlmICghZXApDQo+ID4gKwkJ CWJyZWFrOw0KPiA+ICsJCS8qDQo+ID4gKwkJICogc2luY2UgZmlyc3QgcG9ydCBpcyBzaW5rIHBv cnQgYW5kIGl0IGNvbnRhaW5zDQo+ID4gKwkJICogYWxsIGluZm8gYWJvdXQgZGF0YS1sYW5lcyBh bmQgY2ZhLXBhdHRlcm4sDQo+ID4gKwkJICogZG9uJ3QgcGFyc2Ugc2Vjb25kIHBvcnQgYnV0IG9u bHkgY2hlY2sgaWYgZXhpc3RzDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKG5wb3J0cyA9PSBYVklQ X1BBRF9TT1VSQ0UpIHsNCj4gPiArCQkJZGV2X2RiZyhjb3JlLT5kZXYsICJubyBuZWVkIHRvIHBh cnNlIHNvdXJjZSBwb3J0Iik7DQo+ID4gKwkJCWZ3bm9kZV9oYW5kbGVfcHV0KGVwKTsNCj4gPiAr CQkJY29udGludWU7DQo+ID4gKwkJfQ0KPiANCj4gSG93IGFib3V0IHJlbW92aW5nIHRoZSBsb29w IGFuZCBvbmx5IGhhbmRsaW5nIHBvcnQgMCB0aGVuID8NCg0KSSB3aWxsIHJlbW92ZSB0aGUgbG9v cC4gDQoNCj4gDQo+ID4gKw0KPiA+ICsJCXJldCA9IHY0bDJfZndub2RlX2VuZHBvaW50X3BhcnNl KGVwLCAmdmVwKTsNCj4gDQo+IFlvdSBjYW4gYWRkDQo+IA0KPiAJCWZ3bm9kZV9oYW5kbGVfcHV0 KGVwKTsNCj4gDQo+IGhlcmUsDQo+IA0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJZGV2X2Vy cihjb3JlLT5kZXYsICJlcnJvciBwYXJzaW5nIHNpbmsgcG9ydCIpOw0KPiA+ICsJCQlmd25vZGVf aGFuZGxlX3B1dChlcCk7DQo+IA0KPiBhbmQgZHJvcCBpdCBmcm9tIHRoZXJlIGFuZCBmcm9tIHRo ZSBlbmQgb2YgdGhlIGxvb3AuDQo+IA0KDQpPayBnb3QgaXQuDQoNCj4gPiArCQkJcmV0dXJuIHJl dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcoY29yZS0+ZGV2LCAicG9ydCAlZCBi dXMgdHlwZSA9ICVkXG4iLCBucG9ydHMsDQo+ID4gKwkJCXZlcC5idXNfdHlwZSk7DQo+IA0KPiBB cyBidXNfdHlwZSBpcyBoYXJkY29kZWQgdG8gVjRMMl9NQlVTX0NTSTJfRFBIWSBhbmQgbnBvcnRz IGNhbiBhbHdheXMNCj4gYmUNCj4gMCBoZXJlLCBJIHRoaW5rIHlvdSBjYW4gZHJvcCB0aGlzIG1l c3NhZ2UuDQo+IA0KDQpBZ3JlZWQuIEkgd2lsbCByZW1vdmUgaXQgaW4gbmV4dCB2ZXJzaW9uLg0K DQo+ID4gKw0KPiA+ICsJCWlmICh2ZXAuYnVzX3R5cGUgPT0gVjRMMl9NQlVTX0NTSTJfRFBIWSkg ew0KPiANCj4gQ2FuIGJ1c190eXBlIGJlIGRpZmZlcmVudCB0aGFuIFY0TDJfTUJVU19DU0kyX0RQ SFkgaGVyZSwgYXMgeW91IHNldCBpdA0KPiB3aGVuIGluaXRpYWxpemluZyB2ZXAgYWJvdmUgPyBJ IHRoaW5rIHlvdSBjYW4gcmVtb3ZlIHRoZSBjb25kaXRpb24NCj4gY2hlY2ssIGFzIHdlbGwgYXMg dGhlIGZpcnN0IGRlYnVnIG1lc3NhZ2UgYmVsb3cuDQo+IA0KDQpPayBJIHdpbGwgY2hlY2sgYW5k IHJlbW92ZS4NCg0KPiA+ICsJCQlkZXZfZGJnKGNvcmUtPmRldiwgImJhc2UucG9ydCA9ICVkIGJh c2UuaWQgPSAlZFxuIiwNCj4gPiArCQkJCXZlcC5iYXNlLnBvcnQsIHZlcC5iYXNlLmlkKTsNCj4g PiArDQo+ID4gKwkJCWRldl9kYmcoY29yZS0+ZGV2LCAibWlwaSBudW1iZXIgbGFuZXMgPSAlZFxu IiwNCj4gPiArCQkJCXZlcC5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzKTsNCj4gPiArDQo+ ID4gKwkJCWNvcmUtPm1heF9udW1fbGFuZXMgPQ0KPiA+ICsJCQkJdmVwLmJ1cy5taXBpX2NzaTIu bnVtX2RhdGFfbGFuZXM7DQo+ID4gKwkJfQ0KPiA+ICsJCWZ3bm9kZV9oYW5kbGVfcHV0KGVwKTsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAobnBvcnRzICE9IFhDU0lfTUVESUFfUEFEUykgew0K PiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgcG9ydHMgJXVcbiIs IG5wb3J0cyk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+IA0KPiBJIHRoaW5r IHdlIGNhbiBkcm9wIHRoaXMgY2hlY2sgdG9vLg0KDQpPayBJIHdpbGwgZHJvcCB0aGlzLiANCg0K PiANCj4gPiArDQo+ID4gKwkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlciAqLw0KPiA+ICsJ aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7DQo+IA0KPiBUaGlzIHNob3VsZCBi ZSB0dXJuZWQgaW50byBwbGF0Zm9ybV9nZXRfaXJxKCkuDQoNCkFncmVlZC4gSSB3aWxsIHVwZGF0 ZSBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KDQoNCj4gDQo+ID4gKwlyZXQgPSBkZXZtX3JlcXVlc3Rf aXJxKGNvcmUtPmRldiwgaXJxLCB4Y3NpMnJ4c3NfaXJxX2hhbmRsZXIsDQo+ID4gKwkJCSAgICAg ICBJUlFGX1NIQVJFRCwgInhpbGlueC1jc2kycnhzcyIsIHhjc2kycnhzcyk7DQo+ID4gKwlpZiAo cmV0KSB7DQo+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJFcnIgPSAlZCBJbnRlcnJ1cHQgaGFu ZGxlciByZWcNCj4gZmFpbGVkIVxuIiwNCj4gPiArCQkJcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0 Ow0KPiA+ICsJfQ0KPiANCj4gQW5kIElSUSBoYW5kbGluZyBzaG91bGQgYmUgbW92ZWQgdG8geGNz aTJyeHNzX3Byb2JlKCkgYXMgaXQncyBub3QNCj4gcmVsYXRlZCB0byBPRiBwYXJzaW5nLg0KPiAN Cg0KRGl0dG8uDQoNCj4gPiArDQo+ID4gKwl4Y3NpMnJ4c3NfbG9nX2lwY29uZmlnKHhjc2kycnhz cyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgeGNzaTJyeHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2Ow0KPiA+ICsJc3RydWN0IHhjc2kycnhz c19zdGF0ZSAqeGNzaTJyeHNzOw0KPiA+ICsJc3RydWN0IHhjc2kycnhzc19jb3JlICpjb3JlOw0K PiA+ICsJc3RydWN0IHJlc291cmNlICpyZXM7DQo+ID4gKwlpbnQgbnVtX2Nsa3MgPSBBUlJBWV9T SVpFKHhjc2kycnhzc19jbGtzKTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJeGNzaTJy eHNzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqeGNzaTJyeHNzKSwNCj4gR0ZQ X0tFUk5FTCk7DQo+ID4gKwlpZiAoIXhjc2kycnhzcykNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsN Cj4gPiArDQo+ID4gKwljb3JlID0gJnhjc2kycnhzcy0+Y29yZTsNCj4gPiArCWNvcmUtPmRldiA9 ICZwZGV2LT5kZXY7DQo+ID4gKw0KPiA+ICsJY29yZS0+Y2xrcyA9IGRldm1fa21lbWR1cChjb3Jl LT5kZXYsIHhjc2kycnhzc19jbGtzLA0KPiA+ICsJCQkJICBzaXplb2YoeGNzaTJyeHNzX2Nsa3Mp LCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghY29yZS0+Y2xrcykNCj4gPiArCQlyZXR1cm4gLUVO T01FTTsNCj4gPiArDQo+ID4gKwkvKiBSZXNldCBHUElPICovDQo+ID4gKwljb3JlLT5yc3RfZ3Bp byA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGNvcmUtPmRldiwgInJlc2V0IiwNCj4gPiArCQkJ CQkJIEdQSU9EX09VVF9ISUdIKTsNCj4gPiArCWlmIChJU19FUlIoY29yZS0+cnN0X2dwaW8pKSB7 DQo+ID4gKwkJaWYgKFBUUl9FUlIoY29yZS0+cnN0X2dwaW8pICE9IC1FUFJPQkVfREVGRVIpDQo+ ID4gKwkJCWRldl9lcnIoY29yZS0+ZGV2LCAiVmlkZW8gUmVzZXQgR1BJTyBub3Qgc2V0dXAgaW4N Cj4gRFQiKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihjb3JlLT5yc3RfZ3Bpbyk7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJbXV0ZXhfaW5pdCgmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArDQo+ID4g KwlyZXQgPSB4Y3NpMnJ4c3NfcGFyc2Vfb2YoeGNzaTJyeHNzKTsNCj4gPiArCWlmIChyZXQgPCAw KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiArCWNvcmUtPmlvbWVtID0gZGV2 bV9pb3JlbWFwX3Jlc291cmNlKGNvcmUtPmRldiwgcmVzKTsNCj4gDQo+IFlvdSBjYW4gcmVwbGFj ZSB0aG9zZSB0d28gbGluZXMgd2l0aA0KPiANCj4gCWNvcmUtPmlvbWVtID0gZGV2bV9wbGF0Zm9y bV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOw0KPiANCg0KSSBkaWRuJ3Qga25vdyB0aGlzIGV4 aXN0ZWQuIFRoYW5rcyBJIHdpbGwgdXBkYXRlIHRoaXMuDQoNCj4gPiArCWlmIChJU19FUlIoY29y ZS0+aW9tZW0pKQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKGNvcmUtPmlvbWVtKTsNCj4gPiArDQo+ ID4gKwlyZXQgPSBjbGtfYnVsa19nZXQoY29yZS0+ZGV2LCBudW1fY2xrcywgY29yZS0+Y2xrcyk7 DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0g Y2xrX2J1bGtfcHJlcGFyZV9lbmFibGUobnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsJaWYg KHJldCkNCj4gPiArCQlnb3RvIGVycl9jbGtfcHV0Ow0KPiANCj4gU2hvdWxkbid0IGJlIGNsb2Nr IGVuYWJsZWQgd2hlbiBzdGFydGluZyB0aGUgc3RyZWFtLCBhbmQgZGlzYWJsZWQgd2hlbg0KPiBz dG9wcGluZyBpdCA/DQo+IA0KDQpBZ3JlZSBidXQgSSB3b3VsZCBsaWtlIHRvICBkbyBpdCB0aGlz IHdheSBmb3Igbm93LiBXZSBjYW4gcmV2aXNpdCB0aGUgY2xvY2tpbmcgbWVjaGFuaXNtIGluIGxh dGVyIHBhdGNoLg0KDQo+ID4gKw0KPiA+ICsJaWYgKGNvcmUtPnJzdF9ncGlvKSB7DQo+ID4gKwkJ Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGNvcmUtPnJzdF9ncGlvLCAxKTsNCj4gPiArCQkvKiBt aW5pbXVtIG9mIDQwIGRwaHlfY2xrXzIwME0gY3ljbGVzICovDQo+ID4gKwkJdXNsZWVwX3Jhbmdl KDEsIDIpOw0KPiA+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChjb3JlLT5yc3RfZ3Bpbywg MCk7DQo+ID4gKwl9DQo+IA0KPiBUaGlzIGlzIGRvbmUgaW4geGNzaTJyeHNzX3Nfc3RyZWFtKCkg dG9vLCBJIHdvdWxkIG1vdmUgdGhlIGxvZ2ljIHRvIGENCj4geGNzaTJyeHNzX2hhcmRfcmVzZXQo KSBmdW5jdGlvbi4NCj4gDQoNCk9rIEkgd2lsbCBjcmVhdGUgdGhlIG5ldyBmdW5jdGlvbi4NCg0K PiA+ICsNCj4gPiArCXhjc2kycnhzc19yZXNldChjb3JlKTsNCj4gDQo+IEFuZCByZW5hbWUgdGhp cyB4Y3NpMnJ4c3Nfc29mdF9yZXNldCgpOw0KPiANCg0KQWdyZWVkLiBJIHdpbGwgZG8gdGhpcyBp biB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ICsJLyogSW5pdGlhbGl6ZSBWNEwyIHN1 YmRldmljZSBhbmQgbWVkaWEgZW50aXR5ICovDQo+ID4gKwl4Y3NpMnJ4c3MtPnBhZHNbWFZJUF9Q QURfU0lOS10uZmxhZ3MgPSBNRURJQV9QQURfRkxfU0lOSzsNCj4gPiArCXhjc2kycnhzcy0+cGFk c1tYVklQX1BBRF9TT1VSQ0VdLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsNCj4gPiArDQo+ ID4gKwkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGZvcm1hdCAqLw0KPiA+ICsJeGNzaTJyeHNz X3NldF9kZWZhdWx0X2Zvcm1hdCh4Y3NpMnJ4c3MpOw0KPiA+ICsJeGNzaTJyeHNzLT5mb3JtYXQg PSB4Y3NpMnJ4c3MtPmRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsNCj4gPiArCS8qIEluaXRpYWxpemUg dGhlIG1idXMgZm9ybWF0cyBzdXBwb3J0ZWQgKi8NCj4gPiArCXhjc2kycnhzc19pbml0X21idXNf Zm10cyh4Y3NpMnJ4c3MpOw0KPiA+ICsNCj4gPiArCS8qIEluaXRpYWxpemUgVjRMMiBzdWJkZXZp Y2UgYW5kIG1lZGlhIGVudGl0eSAqLw0KPiA+ICsJc3ViZGV2ID0gJnhjc2kycnhzcy0+c3ViZGV2 Ow0KPiA+ICsJdjRsMl9zdWJkZXZfaW5pdChzdWJkZXYsICZ4Y3NpMnJ4c3Nfb3BzKTsNCj4gPiAr CXN1YmRldi0+ZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCXN1YmRldi0+aW50ZXJuYWxfb3BzID0g Jnhjc2kycnhzc19pbnRlcm5hbF9vcHM7DQo+ID4gKwlzdHJzY3B5KHN1YmRldi0+bmFtZSwgZGV2 X25hbWUoJnBkZXYtPmRldiksIHNpemVvZihzdWJkZXYtDQo+ID5uYW1lKSk7DQo+ID4gKwlzdWJk ZXYtPmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19FVkVOVFMgfA0KPiBWNEwyX1NVQkRFVl9G TF9IQVNfREVWTk9ERTsNCj4gPiArCXN1YmRldi0+ZW50aXR5Lm9wcyA9ICZ4Y3NpMnJ4c3NfbWVk aWFfb3BzOw0KPiA+ICsJdjRsMl9zZXRfc3ViZGV2ZGF0YShzdWJkZXYsIHhjc2kycnhzcyk7DQo+ ID4gKw0KPiA+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2LT5lbnRpdHks IFhDU0lfTUVESUFfUEFEUywNCj4gPiArCQkJCSAgICAgeGNzaTJyeHNzLT5wYWRzKTsNCj4gPiAr CWlmIChyZXQgPCAwKQ0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gKw0KPiA+ICsJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgeGNzaTJyeHNzKTsNCj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX2Fz eW5jX3JlZ2lzdGVyX3N1YmRldihzdWJkZXYpOw0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiAr CQlkZXZfZXJyKGNvcmUtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzdWJkZXZcbiIpOw0KPiA+ ICsJCWdvdG8gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8oY29yZS0+ZGV2 LCAiWGlsaW54IENTSTIgUnggU3Vic3lzdGVtIGRldmljZSBmb3VuZCFcbiIpOw0KPiANCj4gSSdk IGRyb3AgdGhlICIhIi4NCj4gDQoNCk5vdGVkIGZvciB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+ID4g Kw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK2Vycm9yOg0KPiA+ICsJbWVkaWFfZW50aXR5X2NsZWFu dXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gPiArCW11dGV4X2Rlc3Ryb3koJnhjc2kycnhzcy0+bG9j ayk7DQo+IA0KPiBUaGlzIHNob3VsZCBnbyBiZWxvdywganVzdCBiZWZvcmUgcmV0dXJuIHJldCwg YW5kIHlvdSBzaG91bGQgYWRkIGFub3RoZXINCj4gZXJyb3IgbGFiZWwgdGhlcmUgYXMgbXV0ZXhf ZGVzdHJveSgpIHNob3VsZCBiZSBjYWxsZWQgZm9yIGEgZmV3IGVycm9yDQo+IGNhc2VzIHRoYXQg Y3VycmVudGx5IHJldHVybiBkaXJlY3RseS4NCj4gDQpJIHdpbGwgY2hlY2sgYW5kIHVwZGF0ZSBp biB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShu dW1fY2xrcywgY29yZS0+Y2xrcyk7DQo+ID4gK2Vycl9jbGtfcHV0Og0KPiA+ICsJY2xrX2J1bGtf cHV0KG51bV9jbGtzLCBjb3JlLT5jbGtzKTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4 c3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nf Y29yZSAqY29yZSA9ICZ4Y3NpMnJ4c3MtPmNvcmU7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYg KnN1YmRldiA9ICZ4Y3NpMnJ4c3MtPnN1YmRldjsNCj4gPiArCWludCBudW1fY2xrcyA9IEFSUkFZ X1NJWkUoeGNzaTJyeHNzX2Nsa3MpOw0KPiA+ICsNCj4gPiArCXY0bDJfYXN5bmNfdW5yZWdpc3Rl cl9zdWJkZXYoc3ViZGV2KTsNCj4gPiArCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzdWJkZXYtPmVu dGl0eSk7DQo+ID4gKwltdXRleF9kZXN0cm95KCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ICsJY2xr X2J1bGtfZGlzYWJsZV91bnByZXBhcmUobnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsJY2xr X2J1bGtfcHV0KG51bV9jbGtzLCBjb3JlLT5jbGtzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeGNz aTJyeHNzX29mX2lkX3RhYmxlW10gPSB7DQo+ID4gKwl7IC5jb21wYXRpYmxlID0gInhsbngsbWlw aS1jc2kyLXJ4LXN1YnN5c3RlbS01LjAiLCB9LA0KPiA+ICsJeyB9DQo+ID4gK307DQo+ID4gK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhjc2kycnhzc19vZl9pZF90YWJsZSk7DQo+ID4gKw0KPiA+ ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4Y3NpMnJ4c3NfZHJpdmVyID0gew0KPiA+ ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZQkJPSAieGlsaW54LWNzaTJyeHNzIiwNCj4gPiAr CQkub2ZfbWF0Y2hfdGFibGUJPSB4Y3NpMnJ4c3Nfb2ZfaWRfdGFibGUsDQo+ID4gKwl9LA0KPiA+ ICsJLnByb2JlCQkJPSB4Y3NpMnJ4c3NfcHJvYmUsDQo+ID4gKwkucmVtb3ZlCQkJPSB4Y3NpMnJ4 c3NfcmVtb3ZlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4 Y3NpMnJ4c3NfZHJpdmVyKTsNCj4gPiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIlZpc2hhbCBTYWdh ciA8dnNhZ2FyQHhpbGlueC5jb20+Iik7DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54 IE1JUEkgQ1NJMiBSeCBTdWJzeXN0ZW0gRHJpdmVyIik7DQo+ID4gK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsNCj4gDQo+IC0tDQo+IFJlZ2FyZHMsDQo+IA0KPiBMYXVyZW50IFBpbmNoYXJ0DQoN ClJlZ2FyZHMNClZpc2hhbCBTYWdhcg0K