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 6A9FAC433E1 for ; Mon, 1 Jun 2020 14:44:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1714A207D5 for ; Mon, 1 Jun 2020 14:44:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="GkhCcs/W" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728134AbgFAOoO (ORCPT ); Mon, 1 Jun 2020 10:44:14 -0400 Received: from mail-mw2nam10on2055.outbound.protection.outlook.com ([40.107.94.55]:57246 "EHLO NAM10-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726289AbgFAOoJ (ORCPT ); Mon, 1 Jun 2020 10:44:09 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B/87c6Ms5Ed+3Z1jlViJyQkj5Ek7noxqRgSGFy1Uttcp3bhe4oL8MxVUnV1EJYQteWO0Jaecb0/gEljqx0WysmKycXBXenWNM0Kcn3rp5RkPxkRxidgWkGBovn0WM+4pG35/WoEZMEyIbm5dxSK4EpJlc/+L9QfD4n7/bq8hO46Nyulpczymi07DGnTqVI/bAQlYbHl9Fr74vOinkBjY4u/xbyaRdy/wKJG61XxcYd4K3MSJvhy5jrLQ7KriJs/w4AIpftRKy7OfzpSqMKJ1Ib3cIswnyXt/lKvM5QDQHyZWlHkpqBBaxcH6hoPe6DOO6DBeeGxrikIpCG0LNZSgOg== 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=kr3cwjbvlbmcx9WhQF2c4hWG1R/KuiGaNGy0v2IgFb4=; b=bxGdkma2jB1hFYELanR6bb1TB/Ka7X3cRILSQ2jrvKomhTCpNt1xUsH52aHnNCnzFr4Y9Qld2HOuzxJuGUWNKwA1rnQhHBNJkiRenflhuF/cin9z3mY49OOPN5AOHJBjTkcMG8kI2+7Fct+PbRyHq3PFC9XFsxJicj9UGX3lVzt0MJoda8+uBBndY7L8uVGvO9Bbtr/rW7csO/1u9zgy4RoPeFu0M1ZOrFS4T2K6ek9g0Js9eZ/DYRlGfpAIUsHleJJg/htMomDNJlzmP3UTR/a9nwcf0t9AFOA9mWvE5fbg35VnhLR/+6tdsRtLHn5i4DOLll1GTyFj/VkWFBFkXQ== 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=kr3cwjbvlbmcx9WhQF2c4hWG1R/KuiGaNGy0v2IgFb4=; b=GkhCcs/Wo3bX0Lw5N9R1YkYzDIujxhA8EN6HtkhRYHAbnzzScxpP4eJlIIlwNhf/8Uj7zFXCDqCFqRjYmLGLHQq/nu2q1QNGKJDVVtONJBXTv/aYvRqBD9uArbYsset9ruJl/wHmGTkztCtM0kLce/wAprwpgthP2doHxtrLnqw= Received: from DM6PR02MB6876.namprd02.prod.outlook.com (2603:10b6:5:22c::11) by DM6PR02MB5145.namprd02.prod.outlook.com (2603:10b6:5:42::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.19; Mon, 1 Jun 2020 14:41:31 +0000 Received: from DM6PR02MB6876.namprd02.prod.outlook.com ([fe80::ad68:d392:e519:f671]) by DM6PR02MB6876.namprd02.prod.outlook.com ([fe80::ad68:d392:e519:f671%9]) with mapi id 15.20.3045.024; Mon, 1 Jun 2020 14:41:31 +0000 From: Vishal Sagar To: Hans Verkuil , Hyun Kwon , "laurent.pinchart@ideasonboard.com" , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Joe Perches Subject: RE: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Topic: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Index: AQHWHjEiqUZz1pXhF0WpN20jJIL4b6ia3GKAgCjSvKA= Date: Mon, 1 Jun 2020 14:41:31 +0000 Message-ID: References: <20200429141705.18755-1-vishal.sagar@xilinx.com> <20200429141705.18755-3-vishal.sagar@xilinx.com> <368b7efb-3faf-bb71-2bd0-826f2ab031e6@xs4all.nl> In-Reply-To: <368b7efb-3faf-bb71-2bd0-826f2ab031e6@xs4all.nl> 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: xs4all.nl; dkim=none (message not signed) header.d=none;xs4all.nl; dmarc=none action=none header.from=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: f0e11a19-1ad7-4a3c-379f-08d80639dfe1 x-ms-traffictypediagnostic: DM6PR02MB5145: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0421BF7135 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cq0SCtEQFUu0xK1xZmaaQq/mfMjnU75sqc16BsGLM0YPlO0dAOoOylROz2Jl/3K73JP0lp6SVGcOQx0RqTfSdPAkgCylKxOICZE11kSdUIgUFtBIQKLeeMAHGU5S8sTiuzxGUq0bKB8YekTVIORTYj6baStkG8K+aRGvL5Fh1vdN/yIkE0MeRLdbXHQ6wo7qtmWO6Lhspy5MzpaDyrJKjY3h2hgH/edzmGCEVJ/4R58mJSrEQbs7dxbIDpoAR31LtePbxsf9g6eMccWSPlvgjo6R69t3Cr0sPDQ9bT4dxMLkMnV+yFKlPst9Q0IDPW12cx6mbPbHX8QlUgZ6P+U6x6VNbo9cj10AJwfpyHUUfeg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR02MB6876.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(396003)(39860400002)(136003)(366004)(376002)(346002)(55016002)(33656002)(7696005)(30864003)(8936002)(86362001)(110136005)(9686003)(5660300002)(66946007)(52536014)(66556008)(478600001)(66476007)(66446008)(186003)(64756008)(2906002)(76116006)(53546011)(6506007)(19627235002)(26005)(71200400001)(83380400001)(316002)(7416002)(8676002)(921003)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: YC2c2UaaRrGiRyiDhJuQCjHV3263nn4hwbCY8TMhRBGLBNJzL9RZ/RXZI6JK85sMCzMy2fiUfk5TauOCetF+/IVWWanusZtroygbhauq96AnFwuihGlqWPV2xJWWD7VEBP3d6F+R0PfDqkYMFV9hHVsI+xJO3+5YBjs+nBq6L19/n308369fRtaRObunFUEcditljjHd7vg0gQhhAZsiCOLYGvay8sGSc4dgEB2yAPzimwiMrkKJ7R4Sg+FssKHcMXD89DAvOvuyMYMXiP3w09UoCx+4ho7FvL9hulhOMTLbtBtC9oduNboBBz+agWgOMjEmt3Yv5IwgtO3nHdEaWjTVH/9R2OP/FSrse+XC1nn2zbgYxjzm/0z1oP4kdBS9P6tYmHxHZEU0q4JRvbYzmH58B4sJQFpMG+pkO2SqiLeJoIAFiSRiZyJF9QJWch6T5xrJAOYxXQUPSdmvl04mJ4jHhLIFiyfQoluTcH3lNIl/dLfhlEEYSMK8+0Yfgeso 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: f0e11a19-1ad7-4a3c-379f-08d80639dfe1 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jun 2020 14:41:31.0263 (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: 12yeJgMbPLmS9zPsG1lmH+dqSaELJF/HqhUiQ/TH6rzi98XLrGDJcZ8kT3lbiW3W7YrrvjTQmPqhKeYJSaT2VQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB5145 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFucywNCg0KVGhhbmtzIGZvciByZXZpZXdpbmchDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gRnJvbTogSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+DQo+IFNl bnQ6IFdlZG5lc2RheSwgTWF5IDYsIDIwMjAgMzoyNSBQTQ0KPiBUbzogVmlzaGFsIFNhZ2FyIDx2 c2FnYXJAeGlsaW54LmNvbT47IEh5dW4gS3dvbiA8aHl1bmtAeGlsaW54LmNvbT47DQo+IGxhdXJl bnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbTsgbWNoZWhhYkBrZXJuZWwub3JnOw0KPiByb2Jo K2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0bGFuZEBhcm0uY29tOyBNaWNoYWwgU2ltZWsNCj4gPG1p Y2hhbHNAeGlsaW54LmNvbT47IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZzsNCj4gZGV2aWNl dHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGhhbnMudmVya3VpbEBjaXNjby5jb207IGxpbnV4LWFybS0N Cj4ga2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5v cmc7IERpbmVzaCBLdW1hcg0KPiA8ZGluZXNoa0B4aWxpbnguY29tPjsgU2FuZGlwIEtvdGhhcmkg PHNhbmRpcGtAeGlsaW54LmNvbT47IEpvZSBQZXJjaGVzDQo+IDxqb2VAcGVyY2hlcy5jb20+DQo+ IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMi8yXSBtZWRpYTogdjRsOiB4aWxpbng6IEFkZCBYaWxp bnggVUhELVNESSBSeCBTdWJzeXN0ZW0NCj4gZHJpdmVyDQo+IA0KPiBIaSBWaXNoYWwsDQo+IA0K PiBUaGFuayB5b3UgZm9yIHRoaXMgcGF0Y2guDQo+IA0KPiBJIGhhdmUgc29tZSBjb21tZW50cyBi ZWxvdzoNCj4gDQo+IE9uIDI5LzA0LzIwMjAgMTY6MTcsIFZpc2hhbCBTYWdhciB3cm90ZToNCj4g PiBUaGUgWGlsaW54IFVIRC1TREkgUnggc3Vic3lzdGVtIHNvZnQgSVAgaXMgdXNlZCB0byBjYXB0 dXJlIG5hdGl2ZSBTREkNCj4gPiBzdHJlYW1zIGZyb20gU0RJIHNvdXJjZXMgbGlrZSBTREkgYnJv YWRjYXN0IGVxdWlwbWVudCBsaWtlIGNhbWVyYXMgYW5kDQo+ID4gbWl4ZXJzLiBUaGlzIGJsb2Nr IG91dHB1dHMgZWl0aGVyIG5hdGl2ZSBTREksIG5hdGl2ZSB2aWRlbyBvcg0KPiA+IEFYSTQtU3Ry ZWFtIGNvbXBsaWFudCBkYXRhIHN0cmVhbSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBQbGVhc2Ug cmVmZXINCj4gPiB0byBQRzI5MCBmb3IgZGV0YWlscy4NCj4gPg0KPiA+IFRoZSBkcml2ZXIgaXMg dXNlZCB0byBjb25maWd1cmUgdGhlIElQIHRvIGFkZCBmcmFtZXIsIHNlYXJjaCBmb3INCj4gPiBz cGVjaWZpYyBtb2RlcywgZ2V0IHRoZSBkZXRlY3RlZCBtb2RlLCBzdHJlYW0gcGFyYW1ldGVycywg ZXJyb3JzLCBldGMuDQo+ID4gSXQgYWxzbyBnZW5lcmF0ZXMgZXZlbnRzIGZvciB2aWRlbyBsb2Nr L3VubG9jaywgYnJpZGdlIG92ZXIvdW5kZXIgZmxvdy4NCj4gPg0KPiA+IFRoZSBkcml2ZXIgc3Vw cG9ydHMgMTAvMTIgYnBjIFlVViA0MjIgbWVkaWEgYnVzIGZvcm1hdCBjdXJyZW50bHkuIEl0IGFs c28NCj4gPiBkZWNvZGVzIHRoZSBzdHJlYW0gcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgU1QzNTIg cGFja2V0IGVtYmVkZGVkIGluIHRoZQ0KPiA+IHN0cmVhbS4gSW4gY2FzZSB0aGUgU1QzNTIgcGFj a2V0IGlzbid0IHByZXNlbnQgaW4gdGhlIHN0cmVhbSwgdGhlIGNvcmUncw0KPiA+IGRldGVjdGVk IHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gc2V0IHN0cmVhbSBwcm9wZXJ0aWVzLg0KPiA+DQo+ID4g VGhlIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgb25seSB0aGUgQVhJNC1TdHJlYW0gSVAgY29u ZmlndXJhdGlvbi4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBTYWdhciA8dmlzaGFs LnNhZ2FyQHhpbGlueC5jb20+DQo+ID4gLS0tDQo+ID4gdjINCj4gPiAtIEFkZGVkIERWIHRpbWlu ZyBzdXBwb3J0IGJhc2VkIG9uIEhhbnMgVmVya3VpbMWbIGZlZWRiYWNrDQo+ID4gLSBNb3JlIGRv Y3VtZW50YXRpb24gdG8gY3VzdG9tIHY0bCBjb250cm9scyBhbmQgZXZlbnRzDQo+ID4gLSBGaXhl ZCBIeXVuxZsgY29tbWVudHMNCj4gPiAtIEFkZGVkIG1hY3JvIGZvciBtYXNraW5nIGFuZCBzaGlm dGluZyBhcyBwZXIgSm9lIFBlcmNoZXMgY29tbWVudHMNCj4gPiAtIFVwZGF0ZWQgdG8gbGF0ZXN0 IGFzIHBlciBYaWxpbnggZ2l0aHViIHJlcG8gZHJpdmVyIGxpa2UNCj4gPiAgIGFkZGluZyBuZXcg RFYgdGltaW5ncyBub3QgaW4gbWFpbmxpbmUgeWV0IHVwdGlsbCAwMy8yMS8yMA0KPiA+DQo+ID4g IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcgICAgICAgICB8ICAgMTEgKw0K PiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZSAgICAgICAgfCAgICAx ICsNCj4gPiAgLi4uL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5jICAgIHwg MjE2MiArKysrKysrKysrKysrKysrKw0KPiA+ICBpbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXNk aXJ4c3MuaCAgICAgICAgICAgfCAgMTc5ICsrDQo+ID4gIGluY2x1ZGUvdWFwaS9saW51eC94aWxp bngtdjRsMi1jb250cm9scy5oICAgICB8ICAgNjcgKw0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDI0 MjAgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNzLmgNCj4gPg0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+IGIvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZw0KPiA+IGluZGV4IDAxYzk2ZmI2NjQxNC4uNzcwOTEz MThhOWM5IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tj b25maWcNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ ID4gQEAgLTEyLDYgKzEyLDE3IEBAIGNvbmZpZyBWSURFT19YSUxJTlgNCj4gPg0KPiA+ICBpZiBW SURFT19YSUxJTlgNCj4gPg0KPiA+ICtjb25maWcgVklERU9fWElMSU5YX1NESVJYU1MNCj4gPiAr CXRyaXN0YXRlICJYaWxpbnggVUhEIFNESSBSeCBTdWJzeXN0ZW0iDQo+ID4gKwloZWxwDQo+ID4g KwkgIERyaXZlciBmb3IgWGlsaW54IFVIRC1TREkgUnggU3Vic3lzdGVtLiBUaGlzIGlzIGEgVjRM IHN1Yi1kZXZpY2UNCj4gPiArCSAgYmFzZWQgZHJpdmVyIHRoYXQgdGFrZXMgaW5wdXQgZnJvbSBh IFNESSBzb3VyY2UgbGlrZSBTREkgY2FtZXJhIGFuZA0KPiA+ICsJICBjb252ZXJ0cyBpdCBpbnRv IGFuIEFYSTQtU3RyZWFtLiBUaGUgc3Vic3lzdGVtIGNvbXByaXNlcyBvZiBhIFNNUFRFDQo+ID4g KwkgIFVIRC1TREkgUnggY29yZSwgYSBTREkgUnggdG8gTmF0aXZlIFZpZGVvIGJyaWRnZSBhbmQg YSBWaWRlbyBJbiB0bw0KPiA+ICsJICBBWEk0LVN0cmVhbSBicmlkZ2UuIFRoZSBkcml2ZXIgaXMg dXNlZCB0byBzZXQgZGlmZmVyZW50IHN0cmVhbQ0KPiA+ICsJICBkZXRlY3Rpb24gbW9kZXMgYW5k IGlkZW50aWZ5IHN0cmVhbSBwcm9wZXJ0aWVzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZQ0KPiA+ICsJ ICBkb3duc3RyZWFtLg0KPiA+ICsNCj4gPiAgY29uZmlnIFZJREVPX1hJTElOWF9UUEcNCj4gPiAg CXRyaXN0YXRlICJYaWxpbnggVmlkZW8gVGVzdCBQYXR0ZXJuIEdlbmVyYXRvciINCj4gPiAgCWRl cGVuZHMgb24gVklERU9fWElMSU5YDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0veGlsaW54L01ha2VmaWxlDQo+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngv TWFrZWZpbGUNCj4gPiBpbmRleCA0Y2RjMGIxZWM3YTUuLjZjMzc1ZjAzZjU4NyAxMDA2NDQNCj4g PiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZQ0KPiA+ICsrKyBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlDQo+ID4gQEAgLTIsNiArMiw3 IEBADQo+ID4NCj4gPiAgeGlsaW54LXZpZGVvLW9ianMgKz0geGlsaW54LWRtYS5vIHhpbGlueC12 aXAubyB4aWxpbngtdmlwcC5vDQo+ID4NCj4gPiArb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9T RElSWFNTKSArPSB4aWxpbngtc2Rpcnhzcy5vDQo+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJ TlgpICs9IHhpbGlueC12aWRlby5vDQo+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlhfVFBH KSArPSB4aWxpbngtdHBnLm8NCj4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9WVEMpICs9 IHhpbGlueC12dGMubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hp bGlueC94aWxpbngtc2Rpcnhzcy5jDQo+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngv eGlsaW54LXNkaXJ4c3MuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMDAwMDAwLi5jNTM2ZWEzYWFhMGQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYw0KPiA+IEBAIC0wLDAg KzEsMjE2MiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ ICsvKg0KPiA+ICsgKiBEcml2ZXIgZm9yIFhpbGlueCBTREkgUnggU3Vic3lzdGVtDQo+ID4gKyAq DQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMjAgWGlsaW54LCBJbmMuDQo+ID4gKyAq DQo+ID4gKyAqIENvbnRhY3RzOiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbnguY29t Pg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9t ZWRpYS94aWxpbngtdmlwLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZp Y2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvaW8uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvb2ZfaXJxLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvc3BpbmxvY2tfdHlwZXMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC92NGwyLWR2LXRpbWluZ3MuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L3Y0bDItc3ViZGV2Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC94aWxpbngtc2Rpcnhzcy5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgveGlsaW54LXY0bDItY29udHJvbHMuaD4NCj4gPiArI2lu Y2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1j b21tb24uaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCj4gPiArI2luY2x1 ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2Rl Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPg0KPiA+ICsjaW5jbHVkZSAi eGlsaW54LXZpcC5oIg0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogU0RJIFJ4IHJlZ2lzdGVyIG1h cCwgYml0bWFzayBhbmQgb2Zmc2V0cw0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBYU0RJUlhfUlNU X0NUUkxfUkVHCQkweDAwDQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX1JFRwkJMHgwNA0K PiA+ICsjZGVmaW5lIFhTRElSWF9HTEJMX0lFUl9SRUcJCTB4MEMNCj4gPiArI2RlZmluZSBYU0RJ UlhfSVNSX1JFRwkJCTB4MTANCj4gPiArI2RlZmluZSBYU0RJUlhfSUVSX1JFRwkJCTB4MTQNCj4g PiArI2RlZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfUkVHCQkweDE4DQo+ID4gKyNkZWZpbmUgWFNE SVJYX1NUMzUyX0RTMV9SRUcJCTB4MUMNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFMzX1JF RwkJMHgyMA0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzVfUkVHCQkweDI0DQo+ID4gKyNk ZWZpbmUgWFNESVJYX1NUMzUyX0RTN19SRUcJCTB4MjgNCj4gPiArI2RlZmluZSBYU0RJUlhfU1Qz NTJfRFM5X1JFRwkJMHgyQw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzExX1JFRwkJMHgz MA0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzEzX1JFRwkJMHgzNA0KPiA+ICsjZGVmaW5l IFhTRElSWF9TVDM1Ml9EUzE1X1JFRwkJMHgzOA0KPiA+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9O X1JFRwkJMHgzQw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TU19DT05GSUdfUkVHCQkweDQwDQo+ID4g KyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfUkVHCTB4NDQNCj4gPiArI2RlZmluZSBYU0RJ UlhfVFNfREVUX1NUQVRfUkVHCQkweDQ4DQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX1JF RwkJMHg0Qw0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0VOX1JFRwkweDUwDQo+ID4g KyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfUkVHCQkweDU0DQo+ID4gKyNkZWZpbmUgWFNESVJY X0NSQ19FUlJDTlRfUkVHCQkweDU4DQo+ID4gKyNkZWZpbmUgWFNESVJYX1ZJRF9MT0NLX1dJTkRP V19SRUcJMHg1Qw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TQl9SWF9TVFNfUkVHCQkweDYwDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNLCQkJQklUKDApDQo+ID4g KyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1NSU1RfTUFTSwkJCUJJVCgxKQ0KPiA+ICsjZGVmaW5l IFhTRElSWF9SU1RfQ1RSTF9SU1RfQ1JDX0VSUkNOVF9NQVNLCQlCSVQoMikNCj4gPiArI2RlZmlu ZSBYU0RJUlhfUlNUX0NUUkxfUlNUX0VESF9FUlJDTlRfTUFTSwkJQklUKDMpDQo+ID4gKyNkZWZp bmUgWFNESVJYX1JTVF9DVFJMX1NESVJYX0JSSURHRV9FTkJfTUFTSwkJQklUKDgpDQo+ID4gKyNk ZWZpbmUgWFNESVJYX1JTVF9DVFJMX1ZJRElOX0FYSTRTX01PRF9FTkJfTUFTSwlCSVQoOSkNCj4g PiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfQlJJREdFX0NIX0ZNVF9PRkZTRVQJCTEwDQo+ID4g KyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX0JSSURHRV9DSF9GTVRfTUFTSwkJR0VOTUFTSygxMiwN Cj4gMTApDQo+ID4gKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX0JSSURHRV9DSF9GTVRfWVVWNDQ0 CQkxDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9GUk1fRU5fTUFTSwkJQklU KDQpDQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfREVUX0VOX01BU0sJQklUKDUp DQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfSERfRU5fTUFTSwkJQklUKDgpDQo+ ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfU0RfRU5fTUFTSwkJQklUKDkpDQo+ID4g KyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfM0dfRU5fTUFTSwkJQklUKDEwKQ0KPiA+ICsj ZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFXzZHX0VOX01BU0sJCUJJVCgxMSkNCj4gPiArI2Rl ZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV8xMkdJX0VOX01BU0sJQklUKDEyKQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0ZfRU5fTUFTSwlCSVQoMTMpDQo+ID4gKyNkZWZp bmUgWFNESVJYX01ETF9DVFJMX01PREVfQVVUT19ERVRfTUFTSwlHRU5NQVNLKDEzLA0KPiA4KQ0K PiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfT0ZGU0VUCTE2 DQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX0ZPUkNFRF9NT0RFX01BU0sJR0VOTUFTSygx OCwgMTYpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9HTEJMX0lOVFJfRU5fTUFTSwlCSVQo MCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJfVklETE9DS19NQVNLCUJJVCgwKQ0K PiA+ICsjZGVmaW5lIFhTRElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLCUJJVCgxKQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9JTlRSX09WRVJGTE9XX01BU0sJQklUKDkpDQo+ID4gKyNkZWZpbmUgWFNESVJY X0lOVFJfVU5ERVJGTE9XX01BU0sJQklUKDEwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhf SU5UUl9BTExfTUFTSwkoWFNESVJYX0lOVFJfVklETE9DS19NQVNLIHxcDQo+ID4gKwkJCQlYU0RJ UlhfSU5UUl9WSURVTkxPQ0tfTUFTSyB8XA0KPiA+ICsJCQkJWFNESVJYX0lOVFJfT1ZFUkZMT1df TUFTSyB8XA0KPiA+ICsJCQkJWFNESVJYX0lOVFJfVU5ERVJGTE9XX01BU0spDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzFfTUFTSwlCSVQoMCkNCj4gPiArI2RlZmlu ZSBYU0RJUlhfU1QzNTJfVkFMSURfRFMzX01BU0sJQklUKDEpDQo+ID4gKyNkZWZpbmUgWFNESVJY X1NUMzUyX1ZBTElEX0RTNV9NQVNLCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9W QUxJRF9EUzdfTUFTSwlCSVQoMykNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFM5 X01BU0sJQklUKDQpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMTFfTUFTSwlC SVQoNSkNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFMxM19NQVNLCUJJVCg2KQ0K PiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzE1X01BU0sJQklUKDcpDQo+ID4gKw0K PiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSwlHRU5NQVNLKDIs IDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfTU9ERV9MT0NLX01BU0sJQklU KDMpDQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfQUNUX1NUUkVBTV9NQVNLCUdF Tk1BU0soNiwNCj4gNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RS RUFNX09GRlNFVAk0DQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfTFZMQl8zR19N QVNLCUJJVCg3KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfTE9DS0VE X01BU0sJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9TQ0FOX01BU0sJ CUJJVCgxKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9TQ0FOX09GRlNFVAkJKDEp DQo+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX0ZBTUlMWV9NQVNLCQlHRU5NQVNLKDcs DQo+IDQpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX0ZBTUlMWV9PRkZTRVQJKDQp DQo+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfTUFTSwkJR0VOTUFTSygxMSwg OCkNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV9PRkZTRVQJCSg4KQ0KPiA+ ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV9OT05FCQkweDANCj4gPiAr I2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yM185OEhaCQkweDINCj4gPiArI2RlZmlu ZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yNEhaCQkweDMNCj4gPiArI2RlZmluZSBYU0RJUlhf VFNfREVUX1NUQVRfUkFURV80N185NUhaCQkweDQNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVU X1NUQVRfUkFURV8yNUhaCQkweDUNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFU RV8yOV85N0haCQkweDYNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8zMEha CQkweDcNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV80OEhaCQkweDgNCj4g PiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81MEhaCQkweDkNCj4gPiArI2RlZmlu ZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81OV85NEhaCQkweEENCj4gPiArI2RlZmluZSBYU0RJ UlhfVFNfREVUX1NUQVRfUkFURV82MEhaCQkweEINCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJY X0VESF9TVEFUX0VESF9BUF9NQVNLCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RB VF9FREhfRkZfTUFTSwlCSVQoMSkNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRfRURIX0FO Q19NQVNLCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9BUF9GTEFHX01BU0sJ R0VOTUFTSyg4LCA0KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9GRl9GTEFHX01BU0sJ R0VOTUFTSygxMywgOSkNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRfQU5DX0ZMQUdfTUFT SwlHRU5NQVNLKDE4LCAxNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRfUEtUX0ZMQUdf TUFTSwlHRU5NQVNLKDIyLCAxOSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJD TlRfQ09VTlRfTUFTSwlHRU5NQVNLKDE1LCAwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhf Q1JDX0VSUkNOVF9DT1VOVF9NQVNLCUdFTk1BU0soMzEsIDE2KQ0KPiA+ICsjZGVmaW5lIFhTRElS WF9DUkNfRVJSQ05UX0RTX0NSQ19NQVNLCUdFTk1BU0soMTUsIDApDQo+ID4gKw0KPiA+ICsjZGVm aW5lIFhTRElSWF9WRVJTSU9OX1JFVl9NQVNLCQlHRU5NQVNLKDcsIDApDQo+ID4gKyNkZWZpbmUg WFNESVJYX1ZFUlNJT05fUEFUQ0hJRF9NQVNLCUdFTk1BU0soMTEsIDgpDQo+ID4gKyNkZWZpbmUg WFNESVJYX1ZFUlNJT05fVkVSX1JFVl9NQVNLCUdFTk1BU0soMTUsIDEyKQ0KPiA+ICsjZGVmaW5l IFhTRElSWF9WRVJTSU9OX1ZFUl9NSU5fTUFTSwlHRU5NQVNLKDIzLCAxNikNCj4gPiArI2RlZmlu ZSBYU0RJUlhfVkVSU0lPTl9WRVJfTUFKX01BU0sJR0VOTUFTSygzMSwgMjQpDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFhTRElSWF9TU19DT05GSUdfRURIX0lOQ0xVREVEX01BU0sJCUJJVCgxKQ0KPiA+ ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfU1RBVF9TQl9SWF9UREFUQV9DSEFOR0VfRE9ORV9NQVNL CUJJVCgwKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0NIQU5HRV9GQUlM X01BU0sJQklUKDEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUQVRfU0JfUlhfVERBVEFfR1RfUkVT RVRET05FX01BU0sJQklUKDIpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUQVRfU0JfUlhfVERBVEFf R1RfQklUUkFURV9NQVNLCQlCSVQoMykNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX0RFRkFV TFRfV0lEVEgJKDE5MjApDQo+ID4gKyNkZWZpbmUgWFNESVJYX0RFRkFVTFRfSEVJR0hUCSgxMDgw KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfTUFYX1NUUl9MRU5HVEgJMTYNCj4gPiArDQo+ ID4gKyNkZWZpbmUgWFNESVJYU1NfU0RJX1NURF8zRwkJMA0KPiA+ICsjZGVmaW5lIFhTRElSWFNT X1NESV9TVERfNkcJCTENCj4gPiArI2RlZmluZSBYU0RJUlhTU19TRElfU1REXzEyR184RFMJMg0K PiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfREVGQVVMVF9WSURFT19MT0NLX1dJTkRPVwkweDMw MDANCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfSERfTUFTSwkweDANCj4gPiArI2Rl ZmluZSBYU0RJUlhfTU9ERV9TRF9NQVNLCTB4MQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFXzNH X01BU0sJMHgyDQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfNkdfTUFTSwkweDQNCj4gPiArI2Rl ZmluZSBYU0RJUlhfTU9ERV8xMkdJX01BU0sJMHg1DQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVf MTJHRl9NQVNLCTB4Ng0KPiA+ICsNCj4gPiArLyogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHBl ciBmaWxlIGhhbmRsZS4gKi8NCj4gPiArI2RlZmluZSBYU0RJUlhfTUFYX0VWRU5UUwkoMTI4KQ0K PiA+ICsNCj4gPiArLyogU1QzNTIgcmVsYXRlZCBtYWNyb3MgKi8NCj4gPiArI2RlZmluZSBYU1Qz NTJfUEFZTE9BRF9CWVRFMV9NQVNLCTB4RkYNCj4gPiArI2RlZmluZSBYU1QzNTJfUEFZTE9BRF9C WVRFMV9PRkZTRVQJMA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9QQVlMT0FEX0JZVEUyX09GRlNFVAk4 DQo+ID4gKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllURTNfT0ZGU0VUCTE2DQo+ID4gKyNkZWZp bmUgWFNUMzUyX1BBWUxPQURfQllURTRfT0ZGU0VUCTI0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhT VDM1Ml9CWVRFMV9TVDI5Ml8xeDcyMExfMV81RwkJMHg4NA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9C WVRFMV9TVDI5Ml8xeDEwODBMXzFfNUcJCTB4ODUNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTFf U1Q0MjVfMjAwOF83NTBMXzNHQgkweDg4DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUNDI1 XzIwMDhfMTEyNUxfM0dBCTB4ODkNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QzNzJfRExf M0dCCQkweDhBDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMzcyXzJ4NzIwTF8zR0IJCTB4 OEINCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QzNzJfMngxMDgwTF8zR0IJCTB4OEMNCj4g PiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwXzIxNjBMXzZHCQkweEMwDQo+ID4gKyNk ZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjA4MV8xMF8yXzEwODBMXzZHCTB4QzENCj4gPiArI2RlZmlu ZSBYU1QzNTJfQllURTFfU1QyMDgxXzEwX0RMXzIxNjBMXzZHCTB4QzINCj4gPiArI2RlZmluZSBY U1QzNTJfQllURTFfU1QyMDgyXzEwXzIxNjBMXzEyRwkweENFDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFhTVDM1Ml9CWVRFMl9UU19UWVBFX01BU0sJCUJJVCgxNSkNCj4gPiArI2RlZmluZSBYU1QzNTJf QllURTJfVFNfVFlQRV9PRkZTRVQJCTE1DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX1BJQ19U WVBFX01BU0sJCUJJVCgxNCkNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfUElDX1RZUEVfT0ZG U0VUCQkxNA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9UU19QSUNfVFlQRV9JTlRFUkxBQ0VE CTANCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfVFNfUElDX1RZUEVfUFJPR1JFU1NJVkUJMQ0K PiA+ICsNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTX01BU0sJCQkweEYNCj4gPiArI2Rl ZmluZSBYU1QzNTJfQllURTJfRlBTX09GRlNFVAkJCTgNCj4gPiArI2RlZmluZSBYU1QzNTJfQllU RTJfRlBTXzI0RgkJCTB4Mg0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMjQJCQkweDMN Cj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzQ4RgkJCTB4NA0KPiA+ICsjZGVmaW5lIFhT VDM1Ml9CWVRFMl9GUFNfMjUJCQkweDUNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzMw RgkJCTB4Ng0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMzAJCQkweDcNCj4gPiArI2Rl ZmluZSBYU1QzNTJfQllURTJfRlBTXzQ4CQkJMHg4DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUy X0ZQU181MAkJCTB4OQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfNjBGCQkJMHhBDQo+ ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU182MAkJCTB4Qg0KPiA+ICsvKiBUYWJsZSA0IFNU IDIwODEtMTA6MjAxNSAqLw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfOTYJCQkweEMN Cj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzEwMAkJCTB4RA0KPiA+ICsjZGVmaW5lIFhT VDM1Ml9CWVRFMl9GUFNfMTIwCQkJMHhFDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18x MjBGCQkJMHhGDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFM19BQ1RfTFVNQV9DT1VO VF9NQVNLCUJJVCgyMikNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTNfQUNUX0xVTUFfQ09VTlRf T0ZGU0VUCTIyDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRf TUFTSwkJR0VOTUFTSygxOSwNCj4gMTYpDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUzX0NPTE9S X0ZPUk1BVF9PRkZTRVQJMTYNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFU XzQyMgkJMHgwDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF9ZVVY0NDQJ MHgxDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF80MjAJCTB4Mw0KPiA+ ICsjZGVmaW5lIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfR0JSCQkweDINCj4gPiArDQo+ID4g KyNkZWZpbmUgWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF9NQVNLCQlHRU5NQVNLKDI1LCAyNCkNCj4g PiArI2RlZmluZSBYU1QzNTJfQllURTRfQklUX0RFUFRIX09GRlNFVAkJMjQNCj4gPiArI2RlZmlu ZSBYU1QzNTJfQllURTRfQklUX0RFUFRIXzEwCQkweDENCj4gPiArI2RlZmluZSBYU1QzNTJfQllU RTRfQklUX0RFUFRIXzEyCQkweDINCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0xLX0lOVAkJMTQ4NTAw MDAwVUwNCj4gPiArDQo+ID4gKyNkZWZpbmUgcnNoaWZ0X2FuZF9tYXNrKHZhbCwgdHlwZSkgXA0K PiA+ICsJCSgoKHZhbCkgPj4gdHlwZSMjX09GRlNFVCkgJiB0eXBlIyNfTUFTSykNCj4gPiArDQo+ ID4gKyNkZWZpbmUgbWFza19hbmRfcnNoaWZ0KHZhbCwgdHlwZSkgXA0KPiA+ICsJCSgoKHZhbCkg JiB0eXBlIyNfTUFTSykgPj4gdHlwZSMjX09GRlNFVCkNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg KiBlbnVtIHNkaV9mYW1pbHlfZW5jIC0gU0RJIFRyYW5zcG9ydCBWaWRlbyBGb3JtYXQgRGV0ZWN0 ZWQgd2l0aCBBY3RpdmUNCj4gUGl4ZWxzDQo+ID4gKyAqIEBYU0RJUlhfU01QVEVfU1RfMjc0OiBT TVBURSBTVCAyNzQgZGV0ZWN0ZWQgd2l0aCBBUCAxOTIweDEwODANCj4gPiArICogQFhTRElSWF9T TVBURV9TVF8yOTY6IFNNUFRFIFNUIDI5NiBkZXRlY3RlZCB3aXRoIEFQIDEyODB4NzIwDQo+ID4g KyAqIEBYU0RJUlhfU01QVEVfU1RfMjA0OF8yOiBTTVBURSBTVCAyMDQ4LTIgZGV0ZWN0ZWQgd2l0 aCBBUA0KPiAyMDQ4eDEwODANCj4gPiArICogQFhTRElSWF9TTVBURV9TVF8yOTU6IFNNUFRFIFNU IDI5NSBkZXRlY3RlZCB3aXRoIEFQIDE5MjB4MTA4MA0KPiA+ICsgKiBAWFNESVJYX05UU0M6IE5U U0MgZW5jb2RpbmcgZGV0ZWN0ZWQgd2l0aCBBUCA3MjB4NDg2DQo+ID4gKyAqIEBYU0RJUlhfUEFM OiBQQUwgZW5jb2RpbmcgZGV0ZWN0ZWQgd2l0aCBBUCA3MjB4NTc2DQo+ID4gKyAqIEBYU0RJUlhf VFNfVU5LTk9XTjogVW5rbm93biBTTVBURSBUcmFuc3BvcnQgZmFtaWx5IHR5cGUNCj4gPiArICov DQo+ID4gK2VudW0gc2RpX2ZhbWlseV9lbmMgew0KPiA+ICsJWFNESVJYX1NNUFRFX1NUXzI3NAk9 IDAsDQo+ID4gKwlYU0RJUlhfU01QVEVfU1RfMjk2CT0gMSwNCj4gPiArCVhTRElSWF9TTVBURV9T VF8yMDQ4XzIJPSAyLA0KPiA+ICsJWFNESVJYX1NNUFRFX1NUXzI5NQk9IDMsDQo+ID4gKwlYU0RJ UlhfTlRTQwkJPSA4LA0KPiA+ICsJWFNESVJYX1BBTAkJPSA5LA0KPiA+ICsJWFNESVJYX1RTX1VO S05PV04JPSAxNQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCB4c2Rp cnhzc19jb3JlIC0gQ29yZSBjb25maWd1cmF0aW9uIFNESSBSeCBTdWJzeXN0ZW0gZGV2aWNlDQo+ IHN0cnVjdHVyZQ0KPiA+ICsgKiBAZGV2OiBQbGF0Zm9ybSBzdHJ1Y3R1cmUNCj4gPiArICogQGlv bWVtOiBCYXNlIGFkZHJlc3Mgb2Ygc3Vic3lzdGVtDQo+ID4gKyAqIEBpcnE6IHJlcXVlc3RlZCBp cnEgbnVtYmVyDQo+ID4gKyAqIEBpbmNsdWRlX2VkaDogRURIIHByb2Nlc3NvciBwcmVzZW5jZQ0K PiA+ICsgKiBAbW9kZTogM0cvNkcvMTJHIG1vZGUNCj4gPiArICogQGNsa3M6IGFycmF5IG9mIGNs b2Nrcw0KPiA+ICsgKiBAbnVtX2Nsa3M6IG51bWJlciBvZiBjbG9ja3MNCj4gPiArICogQGJwYzog Qml0cyBwZXIgY29tcG9uZW50LCBjYW4gYmUgMTAgb3IgMTINCj4gPiArICovDQo+ID4gK3N0cnVj dCB4c2Rpcnhzc19jb3JlIHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArCXZvaWQg X19pb21lbSAqaW9tZW07DQo+ID4gKwlpbnQgaXJxOw0KPiA+ICsJYm9vbCBpbmNsdWRlX2VkaDsN Cj4gPiArCWludCBtb2RlOw0KPiA+ICsJc3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7DQo+ID4g KwlpbnQgbnVtX2Nsa3M7DQo+ID4gKwl1MzIgYnBjOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAtIFNESSBSeCBTdWJzeXN0ZW0gZGV2aWNl IHN0cnVjdHVyZQ0KPiA+ICsgKiBAY29yZTogQ29yZSBzdHJ1Y3R1cmUgZm9yIE1JUEkgU0RJIFJ4 IFN1YnN5c3RlbQ0KPiA+ICsgKiBAc3ViZGV2OiBUaGUgdjRsMiBzdWJkZXYgc3RydWN0dXJlDQo+ ID4gKyAqIEBjdHJsX2hhbmRsZXI6IGNvbnRyb2wgaGFuZGxlcg0KPiA+ICsgKiBAZXZlbnQ6IEhv bGRzIHRoZSB2aWRlbyB1bmxvY2sgZXZlbnQNCj4gPiArICogQGZvcm1hdDogQWN0aXZlIFY0TDIg Zm9ybWF0IG9uIHNvdXJjZSBwYWQNCj4gPiArICogQGRlZmF1bHRfZm9ybWF0OiBkZWZhdWx0IFY0 TDIgbWVkaWEgYnVzIGZvcm1hdA0KPiA+ICsgKiBAZnJhbWVfaW50ZXJ2YWw6IENhcHR1cmVzIHRo ZSBmcmFtZSByYXRlDQo+ID4gKyAqIEBwYWQ6IHNvdXJjZSBtZWRpYSBwYWQNCj4gPiArICogQHZp ZGxvY2t3aW46IFZpZGVvIGxvY2sgd2luZG93IHZhbHVlIHNldCBieSBjb250cm9sDQo+ID4gKyAq IEBlZGhtYXNrOiBFREggbWFzayBzZXQgYnkgY29udHJvbA0KPiA+ICsgKiBAc2VhcmNobWFzazog U2VhcmNoIG1hc2sgc2V0IGJ5IGNvbnRyb2wNCj4gPiArICogQHN0cmVhbWluZzogRmxhZyBmb3Ig c3RvcmluZyBzdHJlYW1pbmcgc3RhdGUNCj4gPiArICogQHZpZGxvY2tlZDogRmxhZyBpbmRpY2F0 aW5nIFNESSBSeCBoYXMgbG9ja2VkIG9udG8gdmlkZW8gc3RyZWFtDQo+ID4gKyAqIEB0c19pc19p bnRlcmxhY2VkOiBGbGFnIGluZGljYXRpbmcgVHJhbnNwb3J0IFN0cmVhbSBpcyBpbnRlcmxhY2Vk Lg0KPiA+ICsgKiBAZnJhbWVyX2VuYWJsZTogRmxhZyBmb3IgZnJhbWVyIGVuYWJsZWQgb3Igbm90 IHNldCBieSBjb250cm9sDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5z IHRoZSBkZXZpY2UgZHJpdmVyIHJlbGF0ZWQgcGFyYW1ldGVycw0KPiA+ICsgKi8NCj4gPiArc3Ry dWN0IHhzZGlyeHNzX3N0YXRlIHsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlIGNvcmU7DQo+ ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfY3RybF9o YW5kbGVyIGN0cmxfaGFuZGxlcjsNCj4gPiArCXN0cnVjdCB2NGwyX2V2ZW50IGV2ZW50Ow0KPiA+ ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmb3JtYXQ7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9t YnVzX2ZyYW1lZm10IGRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsJc3RydWN0IHY0bDJfZnJhY3QgZnJh bWVfaW50ZXJ2YWw7DQo+ID4gKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsNCj4gPiArCXUzMiB2aWRs b2Nrd2luOw0KPiA+ICsJdTMyIGVkaG1hc2s7DQo+ID4gKwl1MTYgc2VhcmNobWFzazsNCj4gPiAr CWJvb2wgc3RyZWFtaW5nOw0KPiA+ICsJYm9vbCB2aWRsb2NrZWQ7DQo+ID4gKwlib29sIHRzX2lz X2ludGVybGFjZWQ7DQo+ID4gKwlib29sIGZyYW1lcl9lbmFibGU7DQo+ID4gK307DQo+ID4gKw0K PiA+ICsvKiBMaXN0IG9mIGNsb2NrcyByZXF1aXJlZCBieSBVSEQtU0RJIFJ4IHN1YnN5c3RlbSAq Lw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHhzZGlyeHNzX2Nsa3NbXSA9IHsNCj4g PiArCSJzX2F4aV9hY2xrIiwgInNkaV9yeF9jbGsiLCAidmlkZW9fb3V0X2NsayIsDQo+ID4gK307 DQo+ID4gKw0KPiA+ICsvKiBUT0RPIC0gQWRkIFlVViA0NDQvNDIwIGFuZCBSQkcgMTAvMTIgYnBj IG1idXMgZm9ybWF0cyBoZXJlICovDQo+ID4gK3N0YXRpYyBjb25zdCB1MzIgeHNkaXJ4c3NfMTBi cGNfbWJ1c19mbXRzW10gPSB7DQo+ID4gKwlNRURJQV9CVVNfRk1UX1VZVlkxMF8xWDIwLA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHUzMiB4c2Rpcnhzc18xMmJwY19tYnVzX2Zt dHNbXSA9IHsNCj4gPiArCU1FRElBX0JVU19GTVRfVVlWWTEyXzFYMjQsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZHZfdGltaW5ncyBmbXRfY2FwW10gPSB7 DQo+ID4gKwlWNEwyX0RWX0JUX1NESV83MjBYNDg3STYwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFf NzIwWDU3Nkk1MCwNCj4gPiArCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDI0LA0KPiA+ICsJVjRM Ml9EVl9CVF9DRUFfMTI4MFg3MjBQMjUsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xMjgwWDcyMFAz MCwNCj4gPiArCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDUwLA0KPiA+ICsJVjRMMl9EVl9CVF9D RUFfMTI4MFg3MjBQNjAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQMjQsDQo+ID4g KwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQMzAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIw WDEwODBJNTAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBJNjAsDQo+ID4gKwlWNEwy X0RWX0JUX0NFQV8xOTIwWDEwODBQNTAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQ NjAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMjQsDQo+ID4gKwlWNEwyX0RWX0JU X0NFQV8zODQwWDIxNjBQMzAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNTAsDQo+ ID4gKwlWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNjAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV80 MDk2WDIxNjBQMjQsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMjUsDQo+ID4gKwlW NEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIx NjBQNTAsDQo+ID4gKwlWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQNjAsDQo+ID4gKw0KPiA+ICsJ WExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAyNCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4 WDEwODBQMjUsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDMwLA0KPiA+ICsJWExO WF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEw ODBJNTAsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTYwLA0KPiA+ICsJWExOWF9W NEwyX0RWX0JUXzIwNDhYMTA4MFA0OCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQ NTAsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDYwLA0KPiA+ICsJWExOWF9WNEwy X0RWX0JUXzE5MjBYMTA4MFA0OCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8xOTIwWDEwODBJNDgs DQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMzg0MFgyMTYwUDQ4LA0KPiA+ICsJWExOWF9WNEwyX0RW X0JUXzQwOTZYMjE2MFA0OCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCB4c2Rpcnhzc19k dl9tYXAgew0KPiA+ICsJdTMyIHdpZHRoOw0KPiA+ICsJdTMyIGhlaWdodDsNCj4gPiArCXUzMiBm cHM7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIGZvcm1hdDsNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHNkaXJ4c3NfZHZfbWFwIHhzZGlyeHNzX2R2X3Rp bWluZ3NbXSA9IHsNCj4gPiArCS8qIFNEIC0gNzIweDQ4N2k2MCAqLw0KPiA+ICsJeyA3MjAsIDI0 MywgMzAsIFY0TDJfRFZfQlRfU0RJXzcyMFg0ODdJNjAgfSwNCj4gPiArCS8qIFNEIC0gNzIweDU3 Nmk1MCAqLw0KPiA+ICsJeyA3MjAsIDI4OCwgMjUsIFY0TDJfRFZfQlRfQ0VBXzcyMFg1NzZJNTAg fSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwMjMuOTggKi8NCj4gPiArCS8qIEhEIC0gMTI4MHg3 MjBwMjQgKi8NCj4gPiArCXsgMTI4MCwgNzIwLCAyNCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQ MjQgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwMjUgKi8NCj4gPiArCXsgMTI4MCwgNzIwLCAy NSwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQMjUgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBw MjkuOTcgKi8NCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwMzAgKi8NCj4gPiArCXsgMTI4MCwgNzIw LCAzMCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQMzAgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3 MjBwNTAgKi8NCj4gPiArCXsgMTI4MCwgNzIwLCA1MCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQ NTAgfSwNCj4gPiArCS8qIEhEIC0gMTI4MHg3MjBwNTkuOTQgKi8NCj4gPiArCS8qIEhEIC0gMTI4 MHg3MjBwNjAgKi8NCj4gPiArCXsgMTI4MCwgNzIwLCA2MCwgVjRMMl9EVl9CVF9DRUFfMTI4MFg3 MjBQNjAgfSwNCj4gPiArCS8qIEhEIC0gMTkyMHgxMDgwcDIzLjk4ICovDQo+ID4gKwkvKiBIRCAt IDE5MjB4MTA4MHAyNCAqLw0KPiA+ICsJeyAxOTIwLCAxMDgwLCAyNCwgVjRMMl9EVl9CVF9DRUFf MTkyMFgxMDgwUDI0IH0sDQo+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MHAyNSAqLw0KPiA+ICsJeyAx OTIwLCAxMDgwLCAyNSwgVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDI1IH0sDQo+ID4gKwkvKiBI RCAtIDE5MjB4MTA4MHAyOS45NyAqLw0KPiA+ICsJLyogSEQgLSAxOTIweDEwODBwMzAgKi8NCj4g PiArCXsgMTkyMCwgMTA4MCwgMzAsIFY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MFAzMCB9LA0KPiA+ ICsNCj4gPiArCS8qIEhEIC0gMjA0OHgxMDgwcDIzLjk4ICovDQo+ID4gKwkvKiBIRCAtIDIwNDh4 MTA4MHAyNCAqLw0KPiA+ICsJeyAyMDQ4LCAxMDgwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhY MTA4MFAyNCB9LA0KPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBwMjUgKi8NCj4gPiArCXsgMjA0OCwg MTA4MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjUgfSwNCj4gPiArCS8qIEhEIC0g MjA0OHgxMDgwcDI5Ljk3ICovDQo+ID4gKwkvKiBIRCAtIDIwNDh4MTA4MHAzMCAqLw0KPiA+ICsJ eyAyMDQ4LCAxMDgwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAzMCB9LA0KPiA+ICsJ LyogSEQgLSAxOTIweDEwODBpNDcuOTUgKi8NCj4gPiArCS8qIEhEIC0gMTkyMHgxMDgwaTQ4ICov DQo+ID4gKwl7IDE5MjAsIDU0MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8xOTIwWDEwODBJNDggfSwN Cj4gPiArDQo+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MGk1MCAqLw0KPiA+ICsJeyAxOTIwLCA1NDAs IDI1LCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBJNTAgfSwNCj4gPiArCS8qIEhEIC0gMTkyMHgx MDgwaTU5Ljk0ICovDQo+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MGk2MCAqLw0KPiA+ICsJeyAxOTIw LCA1NDAsIDMwLCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBJNjAgfSwNCj4gPiArDQo+ID4gKwkv KiBIRCAtIDIwNDh4MTA4MGk0Ny45NSAqLw0KPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBpNDggKi8N Cj4gPiArCXsgMjA0OCwgNTQwLCAyNCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk0OCB9LA0K PiA+ICsJLyogSEQgLSAyMDQ4eDEwODBpNTAgKi8NCj4gPiArCXsgMjA0OCwgNTQwLCAyNSwgWExO WF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk1MCB9LA0KPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBpNTku OTQgKi8NCj4gPiArCS8qIEhEIC0gMjA0OHgxMDgwaTYwICovDQo+ID4gKwl7IDIwNDgsIDU0MCwg MzAsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNjAgfSwNCj4gPiArCS8qIDNHIC0gMTkyMHgx MDgwcDQ3Ljk1ICovDQo+ID4gKwkvKiAzRyAtIDE5MjB4MTA4MHA0OCAqLw0KPiA+ICsJeyAxOTIw LCAxMDgwLCA0OCwgWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MFA0OCB9LA0KPiA+ICsNCj4gPiAr CS8qIDNHIC0gMTkyMHgxMDgwcDUwIDE0OC41ICovDQo+ID4gKwl7IDE5MjAsIDEwODAsIDUwLCBW NEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQNTAgfSwNCj4gPiArCS8qIDNHIC0gMTkyMHgxMDgwcDU5 Ljk0IDE0OC41LzEuMDAxICovDQo+ID4gKwkvKiAzRyAtIDE5MjB4MTA4MHA2MCAxNDguNSAqLw0K PiA+ICsJeyAxOTIwLCAxMDgwLCA2MCwgVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDYwIH0sDQo+ ID4gKw0KPiA+ICsJLyogM0cgLSAyMDQ4eDEwODBwNDcuOTUgKi8NCj4gPiArCS8qIDNHIC0gMjA0 OHgxMDgwcDQ4ICovDQo+ID4gKwl7IDIwNDgsIDEwODAsIDQ4LCBYTE5YX1Y0TDJfRFZfQlRfMjA0 OFgxMDgwUDQ4IH0sDQo+ID4gKwkvKiAzRyAtIDIwNDh4MTA4MHA1MCAqLw0KPiA+ICsJeyAyMDQ4 LCAxMDgwLCA1MCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA1MCB9LA0KPiA+ICsJLyogM0cg LSAyMDQ4eDEwODBwNTkuOTQgKi8NCj4gPiArCS8qIDNHIC0gMjA0OHgxMDgwcDYwICovDQo+ID4g Kwl7IDIwNDgsIDEwODAsIDYwLCBYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDYwIH0sDQo+ID4g Kw0KPiA+ICsJLyogNkcgLSAzODQwWDIxNjBwMjMuOTggKi8NCj4gPiArCS8qIDZHIC0gMzg0MFgy MTYwcDI0ICovDQo+ID4gKwl7IDM4NDAsIDIxNjAsIDI0LCBWNEwyX0RWX0JUX0NFQV8zODQwWDIx NjBQMjQgfSwNCj4gPiArCS8qIDZHIC0gMzg0MFgyMTYwcDI1ICovDQo+ID4gKwl7IDM4NDAsIDIx NjAsIDI1LCBWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQMjUgfSwNCj4gPiArCS8qIDZHIC0gMzg0 MFgyMTYwcDI5Ljk3ICovDQo+ID4gKwkvKiA2RyAtIDM4NDBYMjE2MHAzMCAqLw0KPiA+ICsJeyAz ODQwLCAyMTYwLCAzMCwgVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDMwIH0sDQo+ID4gKwkvKiA2 RyAtIDQwOTZYMjE2MHAyMy45OCAqLw0KPiA+ICsJLyogNkcgLSA0MDk2WDIxNjBwMjQgKi8NCj4g PiArCXsgNDA5NiwgMjE2MCwgMjQsIFY0TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFAyNCB9LA0KPiA+ ICsJLyogNkcgLSA0MDk2WDIxNjBwMjUgKi8NCj4gPiArCXsgNDA5NiwgMjE2MCwgMjUsIFY0TDJf RFZfQlRfQ0VBXzQwOTZYMjE2MFAyNSB9LA0KPiA+ICsJLyogNkcgLSA0MDk2WDIxNjBwMjkuOTcg Ki8NCj4gPiArCS8qIDZHIC0gNDA5NlgyMTYwcDMwICovDQo+ID4gKwl7IDQwOTYsIDIxNjAsIDMw LCBWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMzAgfSwNCj4gPiArCS8qIDEyRyAtIDM4NDBYMjE2 MHA0Ny45NSAqLw0KPiA+ICsJLyogMTJHIC0gMzg0MFgyMTYwcDQ4ICovDQo+ID4gKwl7IDM4NDAs IDIxNjAsIDQ4LCBYTE5YX1Y0TDJfRFZfQlRfMzg0MFgyMTYwUDQ4IH0sDQo+ID4gKw0KPiA+ICsJ LyogMTJHIC0gMzg0MFgyMTYwcDUwICovDQo+ID4gKwl7IDM4NDAsIDIxNjAsIDUwLCBWNEwyX0RW X0JUX0NFQV8zODQwWDIxNjBQNTAgfSwNCj4gPiArCS8qIDEyRyAtIDM4NDBYMjE2MHA1OS45NCAq Lw0KPiA+ICsJLyogMTJHIC0gMzg0MFgyMTYwcDYwICovDQo+ID4gKwl7IDM4NDAsIDIxNjAsIDYw LCBWNEwyX0RWX0JUX0NFQV8zODQwWDIxNjBQNjAgfSwNCj4gPiArDQo+ID4gKwkvKiAxMkcgLSA0 MDk2WDIxNjBwNDcuOTUgKi8NCj4gPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA0OCAqLw0KPiA+ICsJ eyAzODQwLCAyMTYwLCA0OCwgWExOWF9WNEwyX0RWX0JUXzQwOTZYMjE2MFA0OCB9LA0KPiA+ICsN Cj4gPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA1MCAqLw0KPiA+ICsJeyA0MDk2LCAyMTYwLCA1MCwg VjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDUwIH0sDQo+ID4gKwkvKiAxMkcgLSA0MDk2WDIxNjBw NTkuOTQgKi8NCj4gPiArCS8qIDEyRyAtIDQwOTZYMjE2MHA2MCAqLw0KPiA+ICsJeyA0MDk2LCAy MTYwLCA2MCwgVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDYwIH0sDQo+ID4gK307DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqDQo+ID4gK3RvX3hzZGly eHNzc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYpDQo+ID4gK3sNCj4gPiArCXJldHVy biBjb250YWluZXJfb2Yoc3ViZGV2LCBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUsIHN1YmRldik7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFJlZ2lzdGVyIHJlbGF0ZWQgb3BlcmF0aW9u cw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlubGluZSB1MzIgeHNkaXJ4c3NfcmVhZChzdHJ1Y3Qg eHNkaXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUzMiBhZGRyKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4g aW9yZWFkMzIoeHNkaXJ4c3MtPmlvbWVtICsgYWRkcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbmxpbmUgdm9pZCB4c2Rpcnhzc193cml0ZShzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqeHNk aXJ4c3MsIHUzMiBhZGRyLA0KPiA+ICsJCQkJICB1MzIgdmFsdWUpDQo+ID4gK3sNCj4gPiArCWlv d3JpdGUzMih2YWx1ZSwgeHNkaXJ4c3MtPmlvbWVtICsgYWRkcik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB4c2Rpcnhzc19jbHIoc3RydWN0IHhzZGlyeHNzX2NvcmUg KnhzZGlyeHNzLCB1MzIgYWRkciwNCj4gPiArCQkJCXUzMiBjbHIpDQo+ID4gK3sNCj4gPiArCXhz ZGlyeHNzX3dyaXRlKHhzZGlyeHNzLCBhZGRyLCB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLCBhZGRy KSAmIH5jbHIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4 c3Nfc2V0KHN0cnVjdCB4c2Rpcnhzc19jb3JlICp4c2RpcnhzcywgdTMyIGFkZHIsDQo+ID4gKwkJ CQl1MzIgc2V0KQ0KPiA+ICt7DQo+ID4gKwl4c2Rpcnhzc193cml0ZSh4c2RpcnhzcywgYWRkciwg eHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywgYWRkcikgfCBzZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X2NvcmVfZGlzYWJsZShzdHJ1Y3QgeHNkaXJ4c3Nf Y29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsJeHNkaXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9SU1Rf Q1RSTF9SRUcsDQo+IFhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNLKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeF9jb3JlX2VuYWJsZShzdHJ1Y3QgeHNkaXJ4 c3NfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsJeHNkaXJ4c3Nfc2V0KGNvcmUsIFhTRElSWF9S U1RfQ1RSTF9SRUcsDQo+IFhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNLKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCB4c2Rpcnhfc2V0X21vZGVkZXRlY3Qoc3RydWN0IHhzZGlyeHNz X2NvcmUgKmNvcmUsIHUxNiBtYXNrKQ0KPiA+ICt7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2Ow0KPiA+ICsNCj4gPiArCW1hc2sgJj0gWFNESVJY X0RFVEVDVF9BTExfTU9ERVM7DQo+ID4gKwlpZiAoIW1hc2spIHsNCj4gPiArCQlkZXZfZXJyKGRl diwgIkludmFsaWQgYml0IG1hc2sgPSAweCUwOHhcbiIsIG1hc2spOw0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRldl9kYmcoZGV2LCAibWFzayA9IDB4JXhc biIsIG1hc2spOw0KPiA+ICsNCj4gPiArCXZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJY X01ETF9DVFJMX1JFRyk7DQo+ID4gKwl2YWwgJj0gflhTRElSWF9NRExfQ1RSTF9NT0RFX0RFVF9F Tl9NQVNLOw0KPiA+ICsJdmFsICY9IH5YU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRPX0RFVF9NQVNL Ow0KPiA+ICsJdmFsICY9IH5YU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfTUFTSzsNCj4gPiAr DQo+ID4gKwlpZiAoaHdlaWdodDE2KG1hc2spID4gMSkgew0KPiA+ICsJCS8qIE11bHRpIG1vZGUg ZGV0ZWN0aW9uIGFzIG1vcmUgdGhhbiAxIGJpdCBzZXQgaW4gbWFzayAqLw0KPiA+ICsJCWRldl9k YmcoZGV2LCAiRGV0ZWN0IG11bHRpcGxlIG1vZGVzXG4iKTsNCj4gPiArDQo+ID4gKwkJaWYgKG1h c2sgJiBCSVQoWFNESVJYX01PREVfU0RfT0ZGU0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElSWF9N RExfQ1RSTF9NT0RFX1NEX0VOX01BU0s7DQo+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01P REVfSERfT0ZGU0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFX0hEX0VO X01BU0s7DQo+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJYX01PREVfM0dfT0ZGU0VUKSkNCj4g PiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzNHX0VOX01BU0s7DQo+ID4gKwkJaWYg KG1hc2sgJiBCSVQoWFNESVJYX01PREVfNkdfT0ZGU0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElS WF9NRExfQ1RSTF9NT0RFXzZHX0VOX01BU0s7DQo+ID4gKwkJaWYgKG1hc2sgJiBCSVQoWFNESVJY X01PREVfMTJHSV9PRkZTRVQpKQ0KPiA+ICsJCQl2YWwgfD0gWFNESVJYX01ETF9DVFJMX01PREVf MTJHSV9FTl9NQVNLOw0KPiA+ICsJCWlmIChtYXNrICYgQklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZG U0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0ZfRU5fTUFTSzsN Cj4gPiArDQo+ID4gKwkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFX0RFVF9FTl9NQVNLOw0K PiA+ICsJfSBlbHNlIHsNCj4gPiArCQkvKiBGaXhlZCBNb2RlICovDQo+ID4gKwkJdTMyIGZvcmNl ZF9tb2RlX21hc2s7DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcoZGV2LCAiRGV0ZWN0IGZpeGVkIG1v ZGVcbiIpOw0KPiA+ICsNCj4gPiArCQkvKiBGaW5kIG9mZnNldCBvZiBmaXJzdCBiaXQgc2V0ICov DQo+ID4gKwkJc3dpdGNoIChfX2ZmcyhtYXNrKSkgew0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVf U0RfT0ZGU0VUOg0KPiA+ICsJCQlmb3JjZWRfbW9kZV9tYXNrID0gWFNESVJYX01PREVfU0RfTUFT SzsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV9IRF9PRkZTRVQ6DQo+ ID4gKwkJCWZvcmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV9IRF9NQVNLOw0KPiA+ICsJCQli cmVhazsNCj4gPiArCQljYXNlIFhTRElSWF9NT0RFXzNHX09GRlNFVDoNCj4gPiArCQkJZm9yY2Vk X21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzNHX01BU0s7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJ CWNhc2UgWFNESVJYX01PREVfNkdfT0ZGU0VUOg0KPiA+ICsJCQlmb3JjZWRfbW9kZV9tYXNrID0g WFNESVJYX01PREVfNkdfTUFTSzsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhf TU9ERV8xMkdJX09GRlNFVDoNCj4gPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RF XzEyR0lfTUFTSzsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdG X09GRlNFVDoNCj4gPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFXzEyR0ZfTUFT SzsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJZm9yY2VkX21vZGVf bWFzayA9IDA7DQo+ID4gKwkJfQ0KPiA+ICsJCWRldl9kYmcoZGV2LCAiRm9yY2VkIE1vZGUgTWFz ayA6IDB4JXhcbiIsDQo+ID4gKwkJCWZvcmNlZF9tb2RlX21hc2spOw0KPiA+ICsJCXZhbCB8PSBm b3JjZWRfbW9kZV9tYXNrIDw8DQo+IFhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9PRkZTRVQ7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhkZXYsICJNb2RlcyB0byBiZSBkZXRlY3Rl ZCA6IHNkaSBjdHJsIHJlZyA9IDB4JTA4eFxuIiwNCj4gPiArCQl2YWwpOw0KPiA+ICsJeHNkaXJ4 c3Nfd3JpdGUoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRywgdmFsKTsNCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeHNkaXJ4X2ZyYW1lcihz dHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbCBmbGFnKQ0KPiA+ICt7DQo+ID4gKwlpZiAo ZmxhZykNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRywNCj4g PiArCQkJICAgICBYU0RJUlhfTURMX0NUUkxfRlJNX0VOX01BU0spOw0KPiA+ICsJZWxzZQ0KPiA+ ICsJCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfTURMX0NUUkxfUkVHLA0KPiA+ICsJCQkgICAg IFhTRElSWF9NRExfQ1RSTF9GUk1fRU5fTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHhzZGlyeF9zZXRlZGhlcnJjbnR0cmlnZ2VyKHN0cnVjdCB4c2Rpcnhzc19jb3JlICpj b3JlLCB1MzINCj4gZW5hYmxlKQ0KPiA+ICt7DQo+ID4gKwl1MzIgdmFsID0geHNkaXJ4c3NfcmVh ZChjb3JlLCBYU0RJUlhfRURIX0VSUkNOVF9FTl9SRUcpOw0KPiA+ICsNCj4gPiArCXZhbCA9IGVu YWJsZSAmIFhTRElSWF9FREhfQUxMRVJSX01BU0s7DQo+ID4gKw0KPiA+ICsJeHNkaXJ4c3Nfd3Jp dGUoY29yZSwgWFNESVJYX0VESF9FUlJDTlRfRU5fUkVHLCB2YWwpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X3NldHZpZGxvY2t3aW5kb3coc3RydWN0IHhz ZGlyeHNzX2NvcmUgKmNvcmUsIHUzMg0KPiB2YWwpDQo+ID4gK3sNCj4gPiArCS8qDQo+ID4gKwkg KiBUaGUgdmlkZW8gbG9jayB3aW5kb3cgaXMgdGhlIGFtb3VudCBvZiB0aW1lIGZvciB3aGljaCB0 aGUNCj4gPiArCSAqIHRoZSBtb2RlIGFuZCB0cmFuc3BvcnQgc3RyZWFtIHNob3VsZCBiZSBsb2Nr ZWQgdG8gZ2V0IHRoZQ0KPiA+ICsJICogdmlkZW8gbG9jayBpbnRlcnJ1cHQuDQo+ID4gKwkgKi8N Cj4gPiArCXhzZGlyeHNzX3dyaXRlKGNvcmUsIFhTRElSWF9WSURfTE9DS19XSU5ET1dfUkVHLCB2 YWwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X2Rpc2Fi bGVpbnRyKHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCB1MzIgbWFzaykNCj4gPiArew0KPiA+ ICsJeHNkaXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9JRVJfUkVHLCBtYXNrKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeF9lbmFibGVpbnRyKHN0cnVjdCB4c2Rp cnhzc19jb3JlICpjb3JlLCB1MzIgbWFzaykNCj4gPiArew0KPiA+ICsJeHNkaXJ4c3Nfc2V0KGNv cmUsIFhTRElSWF9JRVJfUkVHLCBtYXNrKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgeHNkaXJ4X2dsb2JhbGludHIoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIGJvb2wgZmxh ZykNCj4gPiArew0KPiA+ICsJaWYgKGZsYWcpDQo+ID4gKwkJeHNkaXJ4c3Nfc2V0KGNvcmUsIFhT RElSWF9HTEJMX0lFUl9SRUcsDQo+ID4gKwkJCSAgICAgWFNESVJYX0dMQkxfSU5UUl9FTl9NQVNL KTsNCj4gPiArCWVsc2UNCj4gPiArCQl4c2Rpcnhzc19jbHIoY29yZSwgWFNESVJYX0dMQkxfSUVS X1JFRywNCj4gPiArCQkJICAgICBYU0RJUlhfR0xCTF9JTlRSX0VOX01BU0spOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X2NsZWFyaW50cihzdHJ1Y3QgeHNk aXJ4c3NfY29yZSAqY29yZSwgdTMyIG1hc2spDQo+ID4gK3sNCj4gPiArCXhzZGlyeHNzX3NldChj b3JlLCBYU0RJUlhfSVNSX1JFRywgbWFzayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIHhzZGlyeF92aWRfYnJpZGdlX2NvbnRyb2woc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUs DQo+ID4gKwkJCQkgICAgICBib29sIGVuYWJsZSkNCj4gPiArew0KPiA+ICsJdTMyIG1hc2sgPSBY U0RJUlhfUlNUX0NUUkxfU0RJUlhfQlJJREdFX0VOQl9NQVNLOw0KPiA+ICsNCj4gPiArCS8qDQo+ ID4gKwkgKiBUT0RPIC0gRW5hYmxlIFlVVjQ0NC9SQkcgZm9ybWF0IGluIHRoZSBicmlkZ2UgYmFz ZWQNCj4gPiArCSAqIG9uIEJZVEUzIGNvbG9yIGZvcm1hdC4NCj4gPiArCSAqIFhTRElSWF9SU1Rf Q1RSTF9CUklER0VfQ0hfRk1UX1lVVjQ0NA0KPiA+ICsJICovDQo+ID4gKwlpZiAoZW5hYmxlKQ0K PiA+ICsJCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVHLCBtYXNrKTsNCj4g PiArCWVsc2UNCj4gPiArCQl4c2Rpcnhzc19jbHIoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywg bWFzayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhzZGlyeF9heGlzNF9icmlk Z2VfY29udHJvbChzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwNCj4gPiArCQkJCQlib29sIGVu YWJsZSkNCj4gPiArew0KPiA+ICsJaWYgKGVuYWJsZSkNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29y ZSwgWFNESVJYX1JTVF9DVFJMX1JFRywNCj4gPiArDQo+IFhTRElSWF9SU1RfQ1RSTF9WSURJTl9B WEk0U19NT0RfRU5CX01BU0spOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXhzZGlyeHNzX2Nscihjb3Jl LCBYU0RJUlhfUlNUX0NUUkxfUkVHLA0KPiA+ICsNCj4gWFNESVJYX1JTVF9DVFJMX1ZJRElOX0FY STRTX01PRF9FTkJfTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhzZGly eF9zdHJlYW1mbG93X2NvbnRyb2woc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIGJvb2wNCj4g ZW5hYmxlKQ0KPiA+ICt7DQo+ID4gKwkvKiBUaGUgc2RpIHRvIG5hdGl2ZSBicmlkZ2UgaXMgZm9s bG93ZWQgYnkgbmF0aXZlIHRvIGF4aXM0IGJyaWRnZSAqLw0KPiA+ICsJaWYgKGVuYWJsZSkgew0K PiA+ICsJCXhzZGlyeF9heGlzNF9icmlkZ2VfY29udHJvbChjb3JlLCBlbmFibGUpOw0KPiA+ICsJ CXhzZGlyeF92aWRfYnJpZGdlX2NvbnRyb2woY29yZSwgZW5hYmxlKTsNCj4gPiArCX0gZWxzZSB7 DQo+ID4gKwkJeHNkaXJ4X3ZpZF9icmlkZ2VfY29udHJvbChjb3JlLCBlbmFibGUpOw0KPiA+ICsJ CXhzZGlyeF9heGlzNF9icmlkZ2VfY29udHJvbChjb3JlLCBlbmFibGUpOw0KPiA+ICsJfQ0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rpcnhzc19nZXRfZnJhbWVyYXRlKHN0cnVj dCB2NGwyX2ZyYWN0ICpmcmFtZV9pbnRlcnZhbCwNCj4gPiArCQkJCSAgIHUzMiBmcmFtZXJhdGUp DQo+ID4gK3sNCj4gPiArCXN3aXRjaCAoZnJhbWVyYXRlKSB7DQo+ID4gKwljYXNlIFhTRElSWF9U U19ERVRfU1RBVF9SQVRFXzIzXzk4SFo6DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRv ciA9IDEwMDE7DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gMjQwMDA7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFo6DQo+ ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDA7DQo+ID4gKwkJZnJhbWVfaW50 ZXJ2YWwtPmRlbm9taW5hdG9yID0gMjQwMDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhT RElSWF9UU19ERVRfU1RBVF9SQVRFXzI1SFo6DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVy YXRvciA9IDEwMDA7DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gMjUwMDA7 DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI5Xzk3 SFo6DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDE7DQo+ID4gKwkJZnJh bWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gMzAwMDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlj YXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMwSFo6DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwt Pm51bWVyYXRvciA9IDEwMDA7DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0g MzAwMDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRF XzQ3Xzk1SFo6DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDE7DQo+ID4g KwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gNDgwMDA7DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzQ4SFo6DQo+ID4gKwkJZnJhbWVfaW50 ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDA7DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5h dG9yID0gNDgwMDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RB VF9SQVRFXzUwSFo6DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDA7DQo+ ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gNTAwMDA7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzU5Xzk0SFo6DQo+ID4gKwkJZnJh bWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEwMDE7DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRl bm9taW5hdG9yID0gNjAwMDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9UU19E RVRfU1RBVF9SQVRFXzYwSFo6DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDEw MDA7DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwtPmRlbm9taW5hdG9yID0gNjAwMDA7DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5udW1lcmF0b3Ig PSAxOw0KPiA+ICsJCWZyYW1lX2ludGVydmFsLT5kZW5vbWluYXRvciA9IDE7DQo+ID4gKwl9DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhzZGlyeHNzX3NldF9ndGNsayhzdHJ1Y3Qg eHNkaXJ4c3Nfc3RhdGUgKnN0YXRlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgY2xrICpndGNsazsN Cj4gPiArCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZTsNCj4gPiArCWludCByZXQsIGlzX2ZyYWM7DQo+ ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZzdGF0ZS0+Y29yZTsNCj4gPiArCXUz MiBtb2RlOw0KPiA+ICsJc3RhdGljIGludCBwcmV2X2lzX2ZyYWMgPSAtMTsNCj4gPiArDQo+ID4g Kwltb2RlID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0K PiA+ICsJbW9kZSAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SWF9NT0RFX01BU0s7DQo+ID4gKw0K PiA+ICsJLyoNCj4gPiArCSAqIFRPRE86IEZvciBub3csIGRvbid0IGNoYW5nZSB0aGUgY2xvY2sg cmF0ZSBmb3IgYW55IG1vZGUgZXhjZXB0DQo+IDEyRy4NCj4gPiArCSAqIEluIGZ1dHVyZSwgY29u ZmlndXJlIGd0IGNsb2NrIGZvciBhbGwgbW9kZXMgYW5kIGVuYWJsZSBjbG9jayBvbmx5DQo+ID4g KwkgKiB3aGVuIG5lZWRlZCAoc3RyZWFtIG9uL29mZikuDQo+ID4gKwkgKi8NCj4gPiArCWlmICht b2RlICE9IFhTRElSWF9NT0RFXzEyR0lfTUFTSyAmJiBtb2RlICE9DQo+IFhTRElSWF9NT0RFXzEy R0ZfTUFTSykNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaXNfZnJhYyA9IHN0YXRlLT5m cmFtZV9pbnRlcnZhbC5udW1lcmF0b3IgPT0gMTAwMSA/IDEgOiAwOw0KPiA+ICsNCj4gPiArCWlm IChwcmV2X2lzX2ZyYWMgPT0gaXNfZnJhYykNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJ eHNkaXJ4X2NvcmVfZGlzYWJsZShjb3JlKTsNCj4gPiArCXhzZGlyeF9nbG9iYWxpbnRyKGNvcmUs IGZhbHNlKTsNCj4gPiArCXhzZGlyeF9kaXNhYmxlaW50cihjb3JlLCBYU0RJUlhfSU5UUl9BTExf TUFTSyk7DQo+ID4gKw0KPiA+ICsJLyogZ2V0IHNkaV9yeF9jbGsgKi8NCj4gPiArCWd0Y2xrID0g Y29yZS0+Y2xrc1sxXS5jbGs7DQo+ID4gKwljbGtyYXRlID0gY2xrX2dldF9yYXRlKGd0Y2xrKTsN Cj4gPiArCWlzX2ZyYWMgPSBzdGF0ZS0+ZnJhbWVfaW50ZXJ2YWwubnVtZXJhdG9yID09IDEwMDEg PyAxIDogMDsNCj4gPiArDQo+ID4gKwkvKiBjYWxjdWFsdGUgY2xrcmF0ZSAqLw0KPiA+ICsJaWYg KCFpc19mcmFjKQ0KPiA+ICsJCWNsa3JhdGUgPSBDTEtfSU5UOw0KPiA+ICsJZWxzZQ0KPiA+ICsJ CWNsa3JhdGUgPSAoQ0xLX0lOVCAqIDEwMDApIC8gMTAwMTsNCj4gPiArDQo+ID4gKwlyZXQgPSBj bGtfc2V0X3JhdGUoZ3RjbGssIGNsa3JhdGUpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlkZXZf ZXJyKGNvcmUtPmRldiwgImZhaWxlZCB0byBzZXQgY2xrIHJhdGUgPSAlZFxuIiwgcmV0KTsNCj4g PiArDQo+ID4gKwljbGtyYXRlID0gY2xrX2dldF9yYXRlKGd0Y2xrKTsNCj4gPiArDQo+ID4gKwlk ZXZfZGJnKGNvcmUtPmRldiwgImNsa3JhdGUgPSAlbHUgaXNfZnJhYyA9ICVkXG4iLA0KPiA+ICsJ CWNsa3JhdGUsIGlzX2ZyYWMpOw0KPiA+ICsNCj4gPiArCXhzZGlyeF9mcmFtZXIoY29yZSwgc3Rh dGUtPmZyYW1lcl9lbmFibGUpOw0KPiA+ICsJeHNkaXJ4X3NldGVkaGVycmNudHRyaWdnZXIoY29y ZSwgc3RhdGUtPmVkaG1hc2spOw0KPiA+ICsJeHNkaXJ4X3NldHZpZGxvY2t3aW5kb3coY29yZSwg c3RhdGUtPnZpZGxvY2t3aW4pOw0KPiA+ICsJeHNkaXJ4X3NldF9tb2RlZGV0ZWN0KGNvcmUsIHN0 YXRlLT5zZWFyY2htYXNrKTsNCj4gPiArCXhzZGlyeF9lbmFibGVpbnRyKGNvcmUsIFhTRElSWF9J TlRSX0FMTF9NQVNLKTsNCj4gPiArCXhzZGlyeF9nbG9iYWxpbnRyKGNvcmUsIHRydWUpOw0KPiA+ ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUpOw0KPiA+ICsNCj4gPiArCXByZXZfaXNfZnJhYyA9 IGlzX2ZyYWM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2RpcnhfZ2V0X3N0 cmVhbV9wcm9wZXJ0aWVzIC0gR2V0IFNESSBSeCBzdHJlYW0gcHJvcGVydGllcw0KPiA+ICsgKiBA c3RhdGU6IHBvaW50ZXIgdG8gZHJpdmVyIHN0YXRlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVu Y3Rpb24gZGVjb2RlcyB0aGUgc3RyZWFtJ3MgU1QzNTIgcGF5bG9hZCAoaWYgYXZhaWxhYmxlKSB0 byBnZXQNCj4gPiArICogc3RyZWFtIHByb3BlcnRpZXMgbGlrZSB3aWR0aCwgaGVpZ2h0LCBwaWN0 dXJlIHR5cGUNCj4gKGludGVybGFjZWQvcHJvZ3Jlc3NpdmUpLA0KPiA+ICsgKiBldGMuDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjogMCBmb3Igc3VjY2VzcyBlbHNlIGVycm9ycw0KPiA+ICsgKi8N Cj4gPiArc3RhdGljIGludCB4c2RpcnhfZ2V0X3N0cmVhbV9wcm9wZXJ0aWVzKHN0cnVjdCB4c2Rp cnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpj b3JlID0gJnN0YXRlLT5jb3JlOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2 Ow0KPiA+ICsJdTMyIG1vZGUsIHBheWxvYWQgPSAwLCB2YWwsIGZhbWlseSwgdmFsaWQsIHRzY2Fu Ow0KPiA+ICsJdTggYnl0ZTEgPSAwLCBhY3RpdmVfbHVtYSA9IDAsIHBpY190eXBlID0gMCwgZnJh bWVyYXRlID0gMDsNCj4gPiArCXU4IHNhbXBsaW5nID0gWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1B VF80MjI7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQgPSAmc3RhdGUt PmZvcm1hdDsNCj4gPiArCXUzMiBicGMgPSBYU1QzNTJfQllURTRfQklUX0RFUFRIXzEwOw0KPiA+ ICsNCj4gPiArCW1vZGUgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFU X1JFRyk7DQo+ID4gKwltb2RlICY9IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsN Cj4gPiArDQo+ID4gKwl2YWxpZCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX1ZB TElEX1JFRyk7DQo+ID4gKw0KPiA+ICsJaWYgKG1vZGUgPj0gWFNESVJYX01PREVfM0dfTUFTSyAm JiAhdmFsaWQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIk5vIHZhbGlkIFNUMzUyIHBheWxvYWQg cHJlc2VudCBldmVuIGZvciAzRw0KPiBtb2RlIGFuZCBhYm92ZVxuIik7DQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdmFsID0geHNkaXJ4c3NfcmVhZChjb3Jl LCBYU0RJUlhfVFNfREVUX1NUQVRfUkVHKTsNCj4gPiArCWlmICh2YWxpZCAmIFhTRElSWF9TVDM1 Ml9WQUxJRF9EUzFfTUFTSykgew0KPiA+ICsJCXBheWxvYWQgPSB4c2Rpcnhzc19yZWFkKGNvcmUs IFhTRElSWF9TVDM1Ml9EUzFfUkVHKTsNCj4gPiArCQlieXRlMSA9IHJzaGlmdF9hbmRfbWFzayhw YXlsb2FkLCBYU1QzNTJfUEFZTE9BRF9CWVRFMSk7DQo+ID4gKwkJYWN0aXZlX2x1bWEgPSBtYXNr X2FuZF9yc2hpZnQocGF5bG9hZCwNCj4gPiArDQo+IFhTVDM1Ml9CWVRFM19BQ1RfTFVNQV9DT1VO VCk7DQo+ID4gKwkJcGljX3R5cGUgPSBtYXNrX2FuZF9yc2hpZnQocGF5bG9hZCwNCj4gWFNUMzUy X0JZVEUyX1BJQ19UWVBFKTsNCj4gPiArCQlmcmFtZXJhdGUgPSByc2hpZnRfYW5kX21hc2socGF5 bG9hZCwgWFNUMzUyX0JZVEUyX0ZQUyk7DQo+ID4gKwkJdHNjYW4gPSBtYXNrX2FuZF9yc2hpZnQo cGF5bG9hZCwgWFNUMzUyX0JZVEUyX1RTX1RZUEUpOw0KPiA+ICsJCXNhbXBsaW5nID0gbWFza19h bmRfcnNoaWZ0KHBheWxvYWQsDQo+IFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVQpOw0KPiA+ICsJ CWJwYyA9IG1hc2tfYW5kX3JzaGlmdChwYXlsb2FkLCBYU1QzNTJfQllURTRfQklUX0RFUFRIKTsN Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJObyBTVDM1MiBwYXlsb2FkIGF2 YWlsYWJsZSA6IE1vZGUgPSAlZFxuIiwNCj4gbW9kZSk7DQo+ID4gKwkJZnJhbWVyYXRlID0gbWFz a19hbmRfcnNoaWZ0KHZhbCwNCj4gWFNESVJYX1RTX0RFVF9TVEFUX1JBVEUpOw0KPiA+ICsJCXRz Y2FuID0gbWFza19hbmRfcnNoaWZ0KHZhbCwgWFNESVJYX1RTX0RFVF9TVEFUX1NDQU4pOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmICgoYnBjID09IFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfMTAg JiYgY29yZS0+YnBjICE9IDEwKSB8fA0KPiA+ICsJICAgIChicGMgPT0gWFNUMzUyX0JZVEU0X0JJ VF9ERVBUSF8xMiAmJiBjb3JlLT5icGMgIT0gMTIpKSB7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJC aXQgZGVwdGggbm90IHN1cHBvcnRlZC4gYnBjID0gJWQgY29yZS0+YnBjID0NCj4gJWRcbiIsDQo+ ID4gKwkJCWJwYywgY29yZS0+YnBjKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlmYW1pbHkgPSBtYXNrX2FuZF9yc2hpZnQodmFsLCBYU0RJUlhfVFNfREVU X1NUQVRfRkFNSUxZKTsNCj4gPiArCXN0YXRlLT50c19pc19pbnRlcmxhY2VkID0gdHNjYW4gPyBm YWxzZSA6IHRydWU7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhkZXYsICJ0c19pc19pbnRlcmxhY2Vk ID0gJWQsIGZhbWlseSA9ICVkXG4iLA0KPiA+ICsJCXN0YXRlLT50c19pc19pbnRlcmxhY2VkLCBm YW1pbHkpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAobW9kZSkgew0KPiA+ICsJY2FzZSBYU0RJUlhf TU9ERV9IRF9NQVNLOg0KPiA+ICsJCWlmICghdmFsaWQpIHsNCj4gPiArCQkJLyogTm8gcGF5bG9h ZCBvYnRhaW5lZCAqLw0KPiA+ICsJCQlkZXZfZGJnKGRldiwgImZyYW1lIHJhdGUgOiAlZCwgdHNj YW4gPSAlZFxuIiwNCj4gPiArCQkJCWZyYW1lcmF0ZSwgdHNjYW4pOw0KPiA+ICsJCQkvKg0KPiA+ ICsJCQkgKiBOT1RFIDogQSBwcm9ncmVzc2l2ZSBzZWdtZW50ZWQgZnJhbWUgcFNGIHdpbGwgYmUN Cj4gPiArCQkJICogcmVwb3J0ZWQgaW5jb3JyZWN0bHkgYXMgSW50ZXJsYWNlZCBhcyB3ZSByZWx5 IG9uIElQJ3MNCj4gPiArCQkJICogdHJhbnNwb3J0IHNjYW4gbG9ja2VkIGJpdC4NCj4gPiArCQkJ ICovDQo+ID4gKwkJCWRldl93YXJuKGRldiwgInBTRiB3aWxsIGJlIGluY29ycmVjdGx5IHJlcG9y dGVkIGFzDQo+IEludGVybGFjZWRcbiIpOw0KPiA+ICsNCj4gPiArCQkJc3dpdGNoIChmcmFtZXJh dGUpIHsNCj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yM185OEhaOg0KPiA+ ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFo6DQo+ID4gKwkJCWNhc2UgWFNE SVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVIWjoNCj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NU QVRfUkFURV8yOV85N0haOg0KPiA+ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMw SFo6DQo+ID4gKwkJCQlpZiAoZmFtaWx5ID09IFhTRElSWF9TTVBURV9TVF8yOTYpIHsNCj4gPiAr CQkJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJCQlmb3JtYXQtPmhlaWdodCA9IDcy MDsNCj4gPiArCQkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJCQkJ fSBlbHNlIGlmIChmYW1pbHkgPT0gWFNESVJYX1NNUFRFX1NUXzIwNDhfMikNCj4gew0KPiA+ICsJ CQkJCWZvcm1hdC0+d2lkdGggPSAyMDQ4Ow0KPiA+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0gMTA4 MDsNCj4gPiArCQkJCQlpZiAodHNjYW4pDQo+ID4gKwkJCQkJCWZvcm1hdC0+ZmllbGQgPQ0KPiBW NEwyX0ZJRUxEX05PTkU7DQo+ID4gKwkJCQkJZWxzZQ0KPiA+ICsJCQkJCQlmb3JtYXQtPmZpZWxk ID0NCj4gPiArDQo+IAlWNEwyX0ZJRUxEX0FMVEVSTkFURTsNCj4gPiArCQkJCX0gZWxzZSB7DQo+ ID4gKwkJCQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7DQo+ID4gKwkJCQkJZm9ybWF0LT5oZWlnaHQg PSAxMDgwOw0KPiA+ICsJCQkJCWlmICh0c2NhbikNCj4gPiArCQkJCQkJZm9ybWF0LT5maWVsZCA9 DQo+IFY0TDJfRklFTERfTk9ORTsNCj4gPiArCQkJCQllbHNlDQo+ID4gKwkJCQkJCWZvcm1hdC0+ ZmllbGQgPQ0KPiA+ICsNCj4gCVY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsJCQkJfQ0KPiA+ ICsJCQkJYnJlYWs7DQo+ID4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTBIWjoN Cj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81OV85NEhaOg0KPiA+ICsJCQlj YXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzYwSFo6DQo+ID4gKwkJCQlpZiAoZmFtaWx5ID09 IFhTRElSWF9TTVBURV9TVF8yNzQpIHsNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsN Cj4gPiArCQkJCQlmb3JtYXQtPmhlaWdodCA9IDEwODA7DQo+ID4gKwkJCQl9IGVsc2Ugew0KPiA+ ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAxMjgwOw0KPiA+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0g NzIwOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9O RTsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQlkZWZhdWx0Og0KPiA+ICsJCQkJZm9ybWF0LT53 aWR0aCA9IDE5MjA7DQo+ID4gKwkJCQlmb3JtYXQtPmhlaWdodCA9IDEwODA7DQo+ID4gKwkJCQlm b3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJCQl9DQo+ID4gKwkJfSBlbHNl IHsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICJHb3QgdGhlIHBheWxvYWRcbiIpOw0KPiA+ICsJCQlz d2l0Y2ggKGJ5dGUxKSB7DQo+ID4gKwkJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjkyXzF4NzIwTF8x XzVHOg0KPiA+ICsJCQkJLyogU01QVEUgU1QgMjkyLTEgZm9yIDcyMCBsaW5lIHBheWxvYWRzICov DQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJCWZvcm1hdC0+aGVpZ2h0 ID0gNzIwOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjky XzF4MTA4MExfMV81RzoNCj4gPiArCQkJCS8qIFNNUFRFIFNUIDI5Mi0xIGZvciAxMDgwIGxpbmUg cGF5bG9hZHMgKi8NCj4gPiArCQkJCWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsNCj4gPiArCQkJCWlm IChhY3RpdmVfbHVtYSkNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsNCj4gPiArCQkJ CWVsc2UNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiArCQkJCWJyZWFrOw0K PiA+ICsJCQlkZWZhdWx0Og0KPiA+ICsJCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIEhEIE1vZGUg U01QVEUNCj4gc3RhbmRhcmRcbiIpOw0KPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJ CX0NCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9NT0RFX1NEX01B U0s6DQo+ID4gKwkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsN Cj4gPiArCQlzd2l0Y2ggKGZhbWlseSkgew0KPiA+ICsJCWNhc2UgWFNESVJYX05UU0M6DQo+ID4g KwkJCWZvcm1hdC0+d2lkdGggPSA3MjA7DQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gNDg2Ow0K PiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTRElSWF9QQUw6DQo+ID4gKwkJCWZvcm1hdC0+ d2lkdGggPSA3MjA7DQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gNTc2Ow0KPiA+ICsJCQlicmVh azsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlkZXZfZGJnKGRldiwgIlVua25vd24gU0QgTW9k ZSBTTVBURSBzdGFuZGFyZFxuIik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0N Cj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNESVJYX01PREVfM0dfTUFTSzoNCj4gPiArCQlz d2l0Y2ggKGJ5dGUxKSB7DQo+ID4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1Q0MjVfMjAwOF83NTBM XzNHQjoNCj4gPiArCQkJLyogU2VjIDQuMS42LjEgU01QVEUgNDI1LTIwMDggKi8NCj4gPiArCQlj YXNlIFhTVDM1Ml9CWVRFMV9TVDM3Ml8yeDcyMExfM0dCOg0KPiA+ICsJCQkvKiBUYWJsZSAxMyBT TVBURSA0MjUtMjAwOCAqLw0KPiA+ICsJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJ Zm9ybWF0LT5oZWlnaHQgPSA3MjA7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNUMzUy X0JZVEUxX1NUNDI1XzIwMDhfMTEyNUxfM0dBOg0KPiA+ICsJCQkvKiBTVDM1MiBUYWJsZSBTTVBU RSA0MjUtMSAqLw0KPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMzcyX0RMXzNHQjoNCj4gPiAr CQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDggKi8NCj4gPiArCQljYXNlIFhTVDM1Ml9CWVRF MV9TVDM3Ml8yeDEwODBMXzNHQjoNCj4gPiArCQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDgg Ki8NCj4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsJCQlpZiAoYWN0aXZlX2x1 bWEpDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJ CQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6 DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiVW5rbm93biAzRyBNb2RlIFNNUFRFIHN0YW5kYXJkXG4i KTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBYU0RJUlhfTU9ERV82R19NQVNLOg0KPiA+ICsJCXN3aXRjaCAoYnl0ZTEpIHsNCj4g PiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIwODFfMTBfRExfMjE2MExfNkc6DQo+ID4gKwkJCS8q IER1YWwgbGluayA2RyAqLw0KPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjA4MV8xMF8yMTYw TF82RzoNCj4gPiArCQkJLyogVGFibGUgMyBTTVBURSBTVCAyMDgxLTEwICovDQo+ID4gKwkJCWZv cm1hdC0+aGVpZ2h0ID0gMjE2MDsNCj4gPiArCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ICsJCQkJ Zm9ybWF0LT53aWR0aCA9IDQwOTY7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCWZvcm1hdC0+d2lk dGggPSAzODQwOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIw ODFfMTBfMl8xMDgwTF82RzoNCj4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsJ CQlpZiAoYWN0aXZlX2x1bWEpDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsNCj4gPiAr CQkJZWxzZQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7DQo+ID4gKwkJCWJyZWFrOw0K PiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiVW5rbm93biA2RyBNb2RlIFNN UFRFIHN0YW5kYXJkXG4iKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhfTU9ERV8xMkdJX01BU0s6DQo+ID4gKwljYXNl IFhTRElSWF9NT0RFXzEyR0ZfTUFTSzoNCj4gPiArCQlzd2l0Y2ggKGJ5dGUxKSB7DQo+ID4gKwkJ Y2FzZSBYU1QzNTJfQllURTFfU1QyMDgyXzEwXzIxNjBMXzEyRzoNCj4gPiArCQkJLyogU2VjdGlv biA0LjMuMSBTTVBURSBTVCAyMDgyLTEwICovDQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gMjE2 MDsNCj4gPiArCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDQw OTY7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCWZvcm1hdC0+d2lkdGggPSAzODQwOw0KPiA+ICsJ CQlicmVhazsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlkZXZfZGJnKGRldiwgIlVua25vd24g MTJHIE1vZGUgU01QVEUNCj4gc3RhbmRhcmRcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWRldl9lcnIo ZGV2LCAiSW52YWxpZCBNb2RlXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpZiAodmFsaWQpIHsNCj4gPiArCQlpZiAocGljX3R5cGUpDQo+ID4gKwkJ CWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlm b3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gKw0KPiA+ICsJCWlmIChm b3JtYXQtPmhlaWdodCA9PSAxMDgwICYmIHBpY190eXBlICYmICF0c2NhbikNCj4gPiArCQkJZm9y bWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsNCj4gPiArCQkvKg0KPiA+ ICsJCSAqIEluIDNHQiBETCBwU0YgbW9kZSB0aGUgdmlkZW8gaXMgc2ltaWxhciB0byBpbnRlcmxh Y2VkLg0KPiA+ICsJCSAqIFNvIHRob3VnaCBpdCBpcyBhIHByb2dyZXNzaXZlIHZpZGVvLCBpdHMg dHJhbnNwb3J0IGlzDQo+ID4gKwkJICogaW50ZXJsYWNlZCBhbmQgaXMgc2VudCBhcyB0d28gd2lk dGggeCAoaGVpZ2h0LzIpIGJ1ZmZlcnMuDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKGJ5dGUxID09 IFhTVDM1Ml9CWVRFMV9TVDM3Ml9ETF8zR0IpIHsNCj4gPiArCQkJaWYgKHN0YXRlLT50c19pc19p bnRlcmxhY2VkKQ0KPiA+ICsJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRF Ow0KPiA+ICsJCQllbHNlDQo+ID4gKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05F Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZm9ybWF0LT5maWVsZCA9PSBW NEwyX0ZJRUxEX0FMVEVSTkFURSkNCj4gPiArCQlmb3JtYXQtPmhlaWdodCA9IGZvcm1hdC0+aGVp Z2h0IC8gMjsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHNhbXBsaW5nKSB7DQo+ID4gKwljYXNlIFhT VDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfNDIyOg0KPiA+ICsJCWlmIChjb3JlLT5icGMgPT0gMTAp DQo+ID4gKwkJCWZvcm1hdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEwXzFYMjA7DQo+ID4g KwkJZWxzZQ0KPiA+ICsJCQlmb3JtYXQtPmNvZGUgPSBNRURJQV9CVVNfRk1UX1VZVlkxMl8xWDI0 Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQy MDoNCj4gPiArCWNhc2UgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF9ZVVY0NDQ6DQo+ID4gKwlj YXNlIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfR0JSOg0KPiA+ICsJCWZvcm1hdC0+Y29kZSA9 IDA7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJObyBjb3JyZXNwb25kaW5nIG1lZGlhIGJ1cyBmb3Jt YXRzXG4iKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZGV2X2Vycihk ZXYsICJVbnN1cHBvcnRlZCBjb2xvciBmb3JtYXQgOiAlZFxuIiwgc2FtcGxpbmcpOw0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXhzZGlyeHNzX2dldF9mcmFt ZXJhdGUoJnN0YXRlLT5mcmFtZV9pbnRlcnZhbCwgZnJhbWVyYXRlKTsNCj4gPiArDQo+ID4gKwlk ZXZfZGJnKGRldiwgIlN0cmVhbSB3aWR0aCA9ICVkIGhlaWdodCA9ICVkIEZpZWxkID0gJWQgcGF5 bG9hZCA9DQo+IDB4JTA4eCB0cyA9IDB4JTA4eFxuIiwNCj4gPiArCQlmb3JtYXQtPndpZHRoLCBm b3JtYXQtPmhlaWdodCwgZm9ybWF0LT5maWVsZCwgcGF5bG9hZCwgdmFsKTsNCj4gPiArCWRldl9k YmcoZGV2LCAiZnJhbWUgcmF0ZSBudW1lcmF0b3IgPSAlZCBkZW5vbWluYXRvciA9ICVkXG4iLA0K PiA+ICsJCXN0YXRlLT5mcmFtZV9pbnRlcnZhbC5udW1lcmF0b3IsDQo+ID4gKwkJc3RhdGUtPmZy YW1lX2ludGVydmFsLmRlbm9taW5hdG9yKTsNCj4gPiArCWRldl9kYmcoZGV2LCAiU3RyZWFtIGNv ZGUgPSAweCV4XG4iLCBmb3JtYXQtPmNvZGUpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19pcnFfaGFuZGxlciAtIEludGVycnVwdCBo YW5kbGVyIGZvciBTREkgUngNCj4gPiArICogQGlycTogSVJRIG51bWJlcg0KPiA+ICsgKiBAZGV2 X2lkOiBQb2ludGVyIHRvIGRldmljZSBzdGF0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgU0RJIFJ4 IGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGNvcnJlc3BvbmRpbmcgYml0 Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IElSUV9IQU5ETEVEIGFmdGVyIGhhbmRsaW5nIGlu dGVycnVwdHMNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCB4c2Rpcnhzc19pcnFf aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rp cnhzc19zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHhzZGlyeHNzX3N0YXRlICopZGV2X2lkOw0KPiA+ ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ID4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjb3JlLT5kZXY7DQo+ID4gKwl1MzIgc3RhdHVzOw0KPiA+ICsNCj4g PiArCXN0YXR1cyA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX0lTUl9SRUcpOw0KPiA+ICsJ eHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX0lTUl9SRUcsIHN0YXR1cyk7DQo+ID4gKwlkZXZf ZGJnKGRldiwgImludGVycnVwdCBzdGF0dXMgPSAweCUwOHhcbiIsIHN0YXR1cyk7DQo+ID4gKw0K PiA+ICsJaWYgKHN0YXR1cyAmIFhTRElSWF9JTlRSX1ZJRExPQ0tfTUFTSyB8fA0KPiA+ICsJICAg IHN0YXR1cyAmIFhTRElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLKSB7DQo+ID4gKwkJdTMyIHZhbDEs IHZhbDI7DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcoZGV2LCAidmlkZW8gbG9jay91bmxvY2sgaW50 ZXJydXB0XG4iKTsNCj4gPiArDQo+ID4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3Jl LCBmYWxzZSk7DQo+ID4gKwkJc3RhdGUtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiA+ICsNCj4gPiAr CQl2YWwxID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0K PiA+ICsJCXZhbDIgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9UU19ERVRfU1RBVF9SRUcp Ow0KPiA+ICsNCj4gPiArCQlpZiAoKHZhbDEgJiBYU0RJUlhfTU9ERV9ERVRfU1RBVF9NT0RFX0xP Q0tfTUFTSykgJiYNCj4gPiArCQkgICAgKHZhbDIgJiBYU0RJUlhfVFNfREVUX1NUQVRfTE9DS0VE X01BU0spKSB7DQo+ID4gKwkJCXUzMiBtYXNrID0NCj4gWFNESVJYX1JTVF9DVFJMX1JTVF9DUkNf RVJSQ05UX01BU0sgfA0KPiA+ICsNCj4gWFNESVJYX1JTVF9DVFJMX1JTVF9FREhfRVJSQ05UX01B U0s7DQo+ID4gKw0KPiA+ICsJCQlkZXZfZGJnKGRldiwgInZpZGVvIGxvY2sgaW50ZXJydXB0XG4i KTsNCj4gPiArDQo+ID4gKwkJCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVH LCBtYXNrKTsNCj4gPiArCQkJeHNkaXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcs IG1hc2spOw0KPiA+ICsNCj4gPiArCQkJdmFsMSA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJY X1NUMzUyX1ZBTElEX1JFRyk7DQo+ID4gKwkJCXZhbDIgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhT RElSWF9TVDM1Ml9EUzFfUkVHKTsNCj4gPiArDQo+ID4gKwkJCWRldl9kYmcoZGV2LCAidmFsaWQg c3QzNTIgbWFzayA9IDB4JTA4eFxuIiwgdmFsMSk7DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAic3Qz NTIgcGF5bG9hZCA9IDB4JTA4eFxuIiwgdmFsMik7DQo+ID4gKw0KPiA+ICsJCQlpZiAoIXhzZGly eF9nZXRfc3RyZWFtX3Byb3BlcnRpZXMoc3RhdGUpKSB7DQo+ID4gKwkJCQlzdGF0ZS0+dmlkbG9j a2VkID0gdHJ1ZTsNCj4gPiArCQkJCXhzZGlyeHNzX3NldF9ndGNsayhzdGF0ZSk7DQo+ID4gKwkJ CX0gZWxzZSB7DQo+ID4gKwkJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgc3RyZWFtDQo+ IHByb3BlcnRpZXMhXG4iKTsNCj4gPiArCQkJCXN0YXRlLT52aWRsb2NrZWQgPSBmYWxzZTsNCj4g PiArCQkJfQ0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAidmlkZW8gdW5s b2NrIGludGVycnVwdFxuIik7DQo+ID4gKwkJCXN0YXRlLT52aWRsb2NrZWQgPSBmYWxzZTsNCj4g PiArCQl9DQo+ID4gKw0KPiA+ICsJCW1lbXNldCgmc3RhdGUtPmV2ZW50LCAwLCBzaXplb2Yoc3Rh dGUtPmV2ZW50KSk7DQo+ID4gKwkJc3RhdGUtPmV2ZW50LnR5cGUgPSBWNEwyX0VWRU5UX1NPVVJD RV9DSEFOR0U7DQo+ID4gKwkJc3RhdGUtPmV2ZW50LnUuc3JjX2NoYW5nZS5jaGFuZ2VzID0NCj4g PiArCQkJVjRMMl9FVkVOVF9TUkNfQ0hfUkVTT0xVVElPTjsNCj4gPiArCQl2NGwyX3N1YmRldl9u b3RpZnlfZXZlbnQoJnN0YXRlLT5zdWJkZXYsICZzdGF0ZS0+ZXZlbnQpOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWlmIChzdGF0dXMgJiBYU0RJUlhfSU5UUl9VTkRFUkZMT1dfTUFTSykgew0KPiA+ ICsJCWRldl9kYmcoZGV2LCAiVmlkZW8gaW4gdG8gQVhJNCBTdHJlYW0gY29yZSB1bmRlcmZsb3cN Cj4gaW50ZXJydXB0XG4iKTsNCj4gPiArDQo+ID4gKwkJbWVtc2V0KCZzdGF0ZS0+ZXZlbnQsIDAs IHNpemVvZihzdGF0ZS0+ZXZlbnQpKTsNCj4gPiArCQlzdGF0ZS0+ZXZlbnQudHlwZSA9IFY0TDJf RVZFTlRfWElMSU5YX1NESVJYX1VOREVSRkxPVzsNCj4gPiArCQl2NGwyX3N1YmRldl9ub3RpZnlf ZXZlbnQoJnN0YXRlLT5zdWJkZXYsICZzdGF0ZS0+ZXZlbnQpOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmIChzdGF0dXMgJiBYU0RJUlhfSU5UUl9PVkVSRkxPV19NQVNLKSB7DQo+ID4gKwkJZGV2 X2RiZyhkZXYsICJWaWRlbyBpbiB0byBBWEk0IFN0cmVhbSBjb3JlIG92ZXJmbG93DQo+IGludGVy cnVwdFxuIik7DQo+ID4gKw0KPiA+ICsJCW1lbXNldCgmc3RhdGUtPmV2ZW50LCAwLCBzaXplb2Yo c3RhdGUtPmV2ZW50KSk7DQo+ID4gKwkJc3RhdGUtPmV2ZW50LnR5cGUgPSBWNEwyX0VWRU5UX1hJ TElOWF9TRElSWF9PVkVSRkxPVzsNCj4gPiArCQl2NGwyX3N1YmRldl9ub3RpZnlfZXZlbnQoJnN0 YXRlLT5zdWJkZXYsICZzdGF0ZS0+ZXZlbnQpOw0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuIElSUV9I QU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3Nfc3Vic2Ny aWJlX2V2ZW50IC0gU3Vic2NyaWJlIHRvIHZpZGVvIGxvY2sgYW5kIHVubG9jayBldmVudA0KPiA+ ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmg6IFY0TDIgRmlsZSBIYW5kbGUN Cj4gPiArICogQHN1YjogU3ViY3JpYmUgZXZlbnQgc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAq IFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgaW50IHhzZGlyeHNzX3N1YnNjcmliZV9ldmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LA0KPiA+ICsJCQkJICAgIHN0cnVjdCB2NGwyX2ZoICpmaCwNCj4gPiArCQkJCSAgICBzdHJ1Y3Qg djRsMl9ldmVudF9zdWJzY3JpcHRpb24gKnN1YikNCj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4g PiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNk KTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0K PiA+ICsNCj4gPiArCXN3aXRjaCAoc3ViLT50eXBlKSB7DQo+ID4gKwljYXNlIFY0TDJfRVZFTlRf WElMSU5YX1NESVJYX1VOREVSRkxPVzoNCj4gPiArCWNhc2UgVjRMMl9FVkVOVF9YSUxJTlhfU0RJ UlhfT1ZFUkZMT1c6DQo+ID4gKwkJcmV0ID0gdjRsMl9ldmVudF9zdWJzY3JpYmUoZmgsIHN1Yiwg WFNESVJYX01BWF9FVkVOVFMsDQo+IE5VTEwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBW NEwyX0VWRU5UX1NPVVJDRV9DSEFOR0U6DQo+ID4gKwkJcmV0ID0gdjRsMl9zcmNfY2hhbmdlX2V2 ZW50X3N1YnNjcmliZShmaCwgc3ViKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBUaGlzIHNob3VsZCBjYWxsIHY0bDJfY3RybF9z dWJzY3JpYmVfZXZlbnQgaW5zdGVhZCwgb3RoZXJ3aXNlIGNvbnRyb2wgZXZlbnRzDQo+IHdvdWxk bid0IGJlIHN1cHBvcnRlZC4NCj4gDQoNCk9rIEkgd2lsbCBhZGQgdjRsMl9jdHJsX3N1YnNjcmli ZV9ldmVudCgpIGhlcmUuIA0KDQo+ID4gKwl9DQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgIkV2 ZW50IHN1YnNjcmliZWQgOiAweCUwOHhcbiIsIHN1Yi0+dHlwZSk7DQo+ID4gKwlyZXR1cm4gcmV0 Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3NfdW5zdWJzY3JpYmVf ZXZlbnQgLSBVbnN1YnNjcmliZSBmcm9tIGFsbCBldmVudHMgcmVnaXN0ZXJlZA0KPiA+ICsgKiBA c2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmg6IFY0TDIgZmlsZSBoYW5kbGUNCj4gPiAr ICogQHN1YjogcG9pbnRlciB0byBFdmVudCB1bnN1YnNjcmlwdGlvbiBzdHJ1Y3R1cmUNCj4gPiAr ICoNCj4gPiArICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBlcnJv ciBjb2RlLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc191bnN1YnNjcmliZV9l dmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJICAgICAgc3RydWN0IHY0bDJf ZmggKmZoLA0KPiA+ICsJCQkJICAgICAgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uICpz dWIpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194 c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhz ZGlyeHNzLT5jb3JlOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2LCAiRXZlbnQgdW5z dWJzY3JpYmUgOiAweCUwOHhcbiIsIHN1Yi0+dHlwZSk7DQo+ID4gKwlyZXR1cm4gdjRsMl9ldmVu dF91bnN1YnNjcmliZShmaCwgc3ViKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHhzZGlyeHNzX3NfY3RybCAtIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIFhpbGlueCBTREkgUngg VjRMMiBjb250cm9scw0KPiA+ICsgKiBAY3RybDogVjRMMiBjb250cm9sIHRvIGJlIHNldA0KPiA+ ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBWNEwyIGNvbnRy b2xzIGZvciB0aGUgWGlsaW54IFNESSBSeA0KPiA+ICsgKiBTdWJzeXN0ZW0uDQo+ID4gKyAqDQo+ ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQ0K PiA+ICt7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAq eHNkaXJ4c3MgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgeHNk aXJ4c3Nfc3RhdGUsDQo+ID4gKwkJCSAgICAgY3RybF9oYW5kbGVyKTsNCj4gPiArCXN0cnVjdCB4 c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gY29yZS0+ZGV2Ow0KPiA+ICsNCj4gPiArCWRldl9kYmcoZGV2LCAic2V0IGN0cmwg aWQgPSAweCUwOHggdmFsID0gMHglMDh4XG4iLA0KPiA+ICsJCWN0cmwtPmlkLCBjdHJsLT52YWwp Ow0KPiA+ICsNCj4gPiArCWlmICh4c2Rpcnhzcy0+c3RyZWFtaW5nKSB7DQo+ID4gKwkJZGV2X2Vy cihkZXYsICJDYW5ub3Qgc2V0IGNvbnRyb2xzIHdoaWxlIHN0cmVhbWluZ1xuIik7DQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJeHNkaXJ4X2NvcmVfZGlzYWJs ZShjb3JlKTsNCj4gPiArCXN3aXRjaCAoY3RybC0+aWQpIHsNCj4gPiArCWNhc2UgVjRMMl9DSURf WElMSU5YX1NESVJYX0ZSQU1FUjoNCj4gPiArCQl4c2RpcnhfZnJhbWVyKGNvcmUsIGN0cmwtPnZh bCk7DQo+ID4gKwkJeHNkaXJ4c3MtPmZyYW1lcl9lbmFibGUgPSBjdHJsLT52YWw7DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9WSURMT0NLX1dJTkRPVzoN Cj4gPiArCQl4c2Rpcnhfc2V0dmlkbG9ja3dpbmRvdyhjb3JlLCBjdHJsLT52YWwpOw0KPiA+ICsJ CXhzZGlyeHNzLT52aWRsb2Nrd2luID0gY3RybC0+dmFsOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ Y2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVF9FTkFCTEU6DQo+ID4gKwkJeHNk aXJ4X3NldGVkaGVycmNudHRyaWdnZXIoY29yZSwgY3RybC0+dmFsKTsNCj4gPiArCQl4c2Rpcnhz cy0+ZWRobWFzayA9IGN0cmwtPnZhbDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9D SURfWElMSU5YX1NESVJYX1NFQVJDSF9NT0RFUzoNCj4gPiArCQlpZiAoY3RybC0+dmFsKSB7DQo+ ID4gKwkJCWlmIChjb3JlLT5tb2RlID09IFhTRElSWFNTX1NESV9TVERfM0cpIHsNCj4gPiArCQkJ CWRldl9kYmcoZGV2LCAiVXB0byAzRyBzdXBwb3J0ZWRcbiIpOw0KPiA+ICsJCQkJY3RybC0+dmFs ICY9IH4oQklUKFhTRElSWF9NT0RFXzZHX09GRlNFVCkNCj4gfA0KPiA+ICsJCQkJCSAgICAgICBC SVQoWFNESVJYX01PREVfMTJHSV9PRkZTRVQpDQo+IHwNCj4gPiArDQo+IEJJVChYU0RJUlhfTU9E RV8xMkdGX09GRlNFVCkpOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlpZiAoY29yZS0+bW9k ZSA9PSBYU0RJUlhTU19TRElfU1REXzZHKSB7DQo+ID4gKwkJCQlkZXZfZGJnKGRldiwgIlVwdG8g Nkcgc3VwcG9ydGVkXG4iKTsNCj4gPiArCQkJCWN0cmwtPnZhbCAmPQ0KPiB+KEJJVChYU0RJUlhf TU9ERV8xMkdJX09GRlNFVCkgfA0KPiA+ICsNCj4gQklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VU KSk7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCXJldCA9IHhzZGlyeF9zZXRfbW9kZWRldGVj dChjb3JlLCBjdHJsLT52YWwpOw0KPiA+ICsJCQlpZiAoIXJldCkNCj4gPiArCQkJCXhzZGlyeHNz LT5zZWFyY2htYXNrID0gY3RybC0+dmFsOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWRldl9l cnIoZGV2LCAiU2VsZWN0IGF0IGxlYXN0IG9uZSBtb2RlIVxuIik7DQo+ID4gKwkJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJ eHNkaXJ4c3Nfc2V0KGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsDQo+ID4gKwkJCSAgICAgWFNE SVJYX1JTVF9DVFJMX1NTX0VOX01BU0spOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJ fQ0KPiA+ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUpOw0KPiA+ICsJcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhzZGlyeHNzX2dfdm9sYXRpbGVfY3RybCAt IGdldCB0aGUgWGlsaW54IFNESSBSeCBjb250cm9scw0KPiA+ICsgKiBAY3RybDogUG9pbnRlciB0 byBWNEwyIGNvbnRyb2wNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVy cm9ycyBvdGhlcndpc2UNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZ192b2xh dGlsZV9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+ID4gK3sNCj4gPiArCXUzMiB2YWw7 DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0NCj4gPiArCQljb250YWlu ZXJfb2YoY3RybC0+aGFuZGxlciwNCj4gPiArCQkJICAgICBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUs IGN0cmxfaGFuZGxlcik7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rp cnhzcy0+Y29yZTsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvcmUtPmRldjsNCj4gPiAr DQo+ID4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9T RElSWF9NT0RFX0RFVEVDVDoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4g PiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+IGxv Y2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJdmFs ID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ICsJ CXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SWF9NT0RFX01BU0s7DQo+ID4gKw0KPiA+ICsJ CXN3aXRjaCAodmFsKSB7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV9TRF9NQVNLOg0KPiA+ICsJ CQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV9TRF9PRkZTRVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsJCWNhc2UgWFNESVJYX01PREVfSERfTUFTSzoNCj4gPiArCQkJY3RybC0+dmFsID0gWFNESVJY X01PREVfSERfT0ZGU0VUOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTRElSWF9NT0RF XzNHX01BU0s6DQo+ID4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RFXzNHX09GRlNFVDsNCj4g PiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV82R19NQVNLOg0KPiA+ICsJCQlj dHJsLT52YWwgPSBYU0RJUlhfTU9ERV82R19PRkZTRVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJ CWNhc2UgWFNESVJYX01PREVfMTJHSV9NQVNLOg0KPiA+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhf TU9ERV8xMkdJX09GRlNFVDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9E RV8xMkdGX01BU0s6DQo+ID4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VU Ow0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0 TDJfQ0lEX1hJTElOWF9TRElSWF9DUkM6DQo+ID4gKwkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVh ZChjb3JlLCBYU0RJUlhfQ1JDX0VSUkNOVF9SRUcpOw0KPiA+ICsJCXhzZGlyeHNzX3dyaXRlKGNv cmUsIFhTRElSWF9DUkNfRVJSQ05UX1JFRywgMHhGRkZGKTsNCj4gPiArCQlicmVhazsNCj4gPiAr CWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlQ6DQo+ID4gKwkJdmFsID0geHNk aXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ICsJCXZhbCAm PSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SWF9NT0RFX01BU0s7DQo+ID4gKwkJaWYgKHZhbCA9PSBY U0RJUlhfTU9ERV9TRF9NQVNLKSB7DQo+ID4gKwkJCWN0cmwtPnZhbCA9IHhzZGlyeHNzX3JlYWQo Y29yZSwNCj4gWFNESVJYX0VESF9FUlJDTlRfUkVHKTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJ CQlkZXZfZGJnKGRldiwgIiVkIC0gbm90IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlkKTsNCj4gPiAr CQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBW NEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX1NUQVRVUzoNCj4gPiArCQl2YWwgPSB4c2Rpcnhzc19y ZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwkJdmFsICY9IFhTRElS WF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiArCQlpZiAodmFsID09IFhTRElSWF9N T0RFX1NEX01BU0spIHsNCj4gPiArCQkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLA0K PiBYU0RJUlhfRURIX1NUQVRfUkVHKTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlkZXZfZGJn KGRldiwgIiVkIC0gbm90IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlkKTsNCj4gPiArCQkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9Y SUxJTlhfU0RJUlhfVFNfSVNfSU5URVJMQUNFRDoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRs b2NrZWQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlk ZW8gbm90DQo+IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9 DQo+ID4gKwkJY3RybC0+dmFsID0geHNkaXJ4c3MtPnRzX2lzX2ludGVybGFjZWQ7DQo+IA0KPiBU aGlzIGNvbnRyb2wgbWFrZXMgbm8gc2Vuc2U6IHRoZSB2NGwyX2R2X3RpbWluZ3Mgc3RydWN0IHdp bGwgYWxyZWFkeSB0ZWxsIHlvdQ0KPiBpZiBpdCBpcyBhbiBpbnRlcmxhY2VkIGZvcm1hdCBvciBu b3QuIFNhbWUgZm9yIHY0bDJfbWJ1c19mcmFtZWZtdC4NCj4gDQoNClRoZSBTREkgaGFzIGEgY29u Y2VwdCBvZiBzdXBwb3J0aW5nIHByb2dyZXNzaXZlLCBpbnRlcmxhY2VkIChib3RoIGFzIHdlIGtu b3cgbm9ybWFsbHkpIGFuZCBhIHByb2dyZXNzaXZlIHNlZ21lbnRlZCBmcmFtZXMocHNmKS4NClRo ZSBwcm9ncmVzc2l2ZSBzZWdtZW50ZWQgZnJhbWVzIGhhdmUgdGhlaXIgdmlkZW8gY29udGVudCBp biBwcm9ncmVzc2l2ZSBmb3JtYXQgYnV0IHRoZSB0cmFuc3BvcnQgc3RyZWFtIGlzIGludGVybGFj ZWQuDQpUaGlzIGlzIGRpc3Rpbmd1aXNoZWQgdXNpbmcgdGhlIGJpdCA2IGFuZCA3IG9mIEJ5dGUg MiBpbiB0aGUgNCBieXRlIFNUMzUyIHBheWxvYWQuDQpSZWZlciB0byBzZWMgNS4zIGluIFNNUFRF IFNUIDM1MjoyMDEwLg0KDQpUaGlzIGNvbnRyb2wgY2FuIGJlIHVzZWQgYnkgdGhlIGFwcGxpY2F0 aW9uIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBpbnRlcmxhY2VkIGFuZCBwcm9ncmVzc2l2ZSBzZWdt ZW50ZWQgZnJhbWVzLg0KDQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElO WF9TRElSWF9BQ1RJVkVfU1RSRUFNUzoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQp IHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90 DQo+IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4g KwkJdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0K PiA+ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RSRUFNX01BU0s7DQo+ID4g KwkJdmFsID4+PSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RSRUFNX09GRlNFVDsNCj4gPiAr CQljdHJsLT52YWwgPSAxIDw8IHZhbDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9D SURfWElMSU5YX1NESVJYX0lTXzNHQjoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQp IHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90 DQo+IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4g KwkJdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0K PiA+ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9MVkxCXzNHX01BU0s7DQo+ID4gKwkJ Y3RybC0+dmFsID0gdmFsID8gdHJ1ZSA6IGZhbHNlOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVm YXVsdDoNCj4gPiArCQlkZXZfZXJyKGRldiwgIkdldCBJbnZhbGlkIGNvbnRyb2wgaWQgMHglMHhc biIsIGN0cmwtPmlkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCWRl dl9kYmcoZGV2LCAiR2V0IGN0cmwgaWQgPSAweCUwOHggdmFsID0gMHglMDh4XG4iLCBjdHJsLT5p ZCwNCj4gPiArCQljdHJsLT52YWwpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19sb2dfc3RhdHVzIC0gTG9ncyB0aGUgc3RhdHVzIG9m IHRoZSBTREkgUnggU3Vic3lzdGVtDQo+ID4gKyAqIEBzZDogUG9pbnRlciB0byBWNEwyIHN1YmRl dmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBwcmludHMgdGhl IGN1cnJlbnQgc3RhdHVzIG9mIFhpbGlueCBTREkgUnggU3Vic3lzdGVtDQo+ID4gKyAqDQo+ID4g KyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGly eHNzX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3MtPmNvcmU7DQo+ID4gKwl1 MzIgaTsNCj4gPiArDQo+ID4gKwl2NGwyX2luZm8oc2QsICIqKioqKiBTREkgUnggc3Vic3lzdGVt IHJlZyBkdW1wIHN0YXJ0ICoqKioqXG4iKTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCAweDI4OyBp KyspIHsNCj4gPiArCQl1MzIgZGF0YTsNCj4gPiArDQo+ID4gKwkJZGF0YSA9IHhzZGlyeHNzX3Jl YWQoY29yZSwgaSAqIDQpOw0KPiA+ICsJCXY0bDJfaW5mbyhzZCwgIm9mZnNldCAweCUwOHggZGF0 YSAweCUwOHhcbiIsDQo+ID4gKwkJCSAgaSAqIDQsIGRhdGEpOw0KPiA+ICsJfQ0KPiA+ICsJdjRs Ml9pbmZvKHNkLCAiKioqKiogU0RJIFJ4IHN1YnN5c3RlbSByZWcgZHVtcCBlbmQgKioqKipcbiIp Ow0KPiA+ICsJcmV0dXJuIDA7DQo+IA0KPiBJIHN1Z2dlc3QgY2FsbGluZyB2NGwyX2N0cmxfc3Vi ZGV2X2xvZ19zdGF0dXMoKSBhcyB3ZWxsIHRvIGxvZyBhbGwgY29udHJvbHMuDQo+IA0KDQpPay4g SSB3aWxsIGFkZCB0aGlzIGluIHRoZSBuZXh0IHZlcnNpb24uIA0KDQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19nX2ZyYW1lX2ludGVydmFsIC0gR2V0IHRoZSBmcmFt ZSBpbnRlcnZhbA0KPiA+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmk6IFBv aW50ZXIgdG8gVjRsMiBTdWIgZGV2aWNlIGZyYW1lIGludGVydmFsIHN0cnVjdHVyZQ0KPiA+ICsg Kg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBmcmFtZSBpbnRlcnZh bC4NCj4gPiArICogVGhlIGZyYW1lIHJhdGUgY2FuIGJlIGludGVncmFsIG9yIGZyYWN0aW9uYWwu DQo+ID4gKyAqIEludGVncmFsIGZyYW1lIHJhdGUgZS5nLiBudW1lcmF0b3IgPSAxMDAwLCBkZW5v bWluYXRvciA9IDI0MDAwID0+IDI0DQo+IGZwcw0KPiA+ICsgKiBGcmFjdGlvbmFsIGZyYW1lIHJh dGUgZS5nLiBudW1lcmF0b3IgPSAxMDAxLCBkZW5vbWluYXRvciA9IDI0MDAwID0+DQo+IDIzLjk3 IGZwcw0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCB4c2Rpcnhzc19nX2ZyYW1lX2ludGVydmFsKHN0cnVjdCB2NGwyX3N1YmRl diAqc2QsDQo+ID4gKwkJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbCAq ZmkpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194 c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhz ZGlyeHNzLT5jb3JlOw0KPiA+ICsNCj4gPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgew0K PiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiVmlkZW8gbm90IGxvY2tlZCFcbiIpOw0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZpLT5pbnRlcnZhbCA9IHhz ZGlyeHNzLT5mcmFtZV9pbnRlcnZhbDsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwg ImZyYW1lIHJhdGUgbnVtZXJhdG9yID0gJWQgZGVub21pbmF0b3IgPSAlZFxuIiwNCj4gPiArCQl4 c2Rpcnhzcy0+ZnJhbWVfaW50ZXJ2YWwubnVtZXJhdG9yLA0KPiA+ICsJCXhzZGlyeHNzLT5mcmFt ZV9pbnRlcnZhbC5kZW5vbWluYXRvcik7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIHhzZGlyeHNzX3Nfc3RyZWFtIC0gSXQgaXMgdXNlZCB0byBzdGFy dC9zdG9wIHRoZSBzdHJlYW1pbmcuDQo+ID4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNlDQo+ID4g KyAqIEBlbmFibGU6IEZsYWcgKFRydWUgLyBGYWxzZSkNCj4gPiArICoNCj4gPiArICogVGhpcyBm dW5jdGlvbiBjb250cm9scyB0aGUgc3RhcnQgb3Igc3RvcCBvZiBzdHJlYW1pbmcgZm9yIHRoZQ0K PiA+ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbS4NCj4gPiArICoNCj4gPiArICogUmV0dXJu OiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gPiArICovDQo+ID4gK3N0YXRpYyBp bnQgeHNkaXJ4c3Nfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkN Cj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGly eHNzc3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4 c3MtPmNvcmU7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3JlLT5kZXY7DQo+ID4gKw0K PiA+ICsJaWYgKGVuYWJsZSkgew0KPiA+ICsJCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgew0K PiA+ICsJCQlkZXZfZGJnKGRldiwgIlZpZGVvIGlzIG5vdCBsb2NrZWRcbiIpOw0KPiA+ICsJCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJaWYgKHhzZGlyeHNzLT5zdHJlYW1pbmcp IHsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICJBbHJlYWR5IHN0cmVhbWluZ1xuIik7DQo+ID4gKwkJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJeHNkaXJ4X3N0cmVhbWZs b3dfY29udHJvbChjb3JlLCB0cnVlKTsNCj4gPiArCQl4c2Rpcnhzcy0+c3RyZWFtaW5nID0gdHJ1 ZTsNCj4gPiArCQlkZXZfZGJnKGRldiwgIlN0cmVhbWluZyBzdGFydGVkXG4iKTsNCj4gPiArCX0g ZWxzZSB7DQo+ID4gKwkJaWYgKCF4c2Rpcnhzcy0+c3RyZWFtaW5nKSB7DQo+ID4gKwkJCWRldl9k YmcoZGV2LCAiU3RvcHBlZCBzdHJlYW1pbmcgYWxyZWFkeVxuIik7DQo+ID4gKwkJCXJldHVybiAw Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3Jl LCBmYWxzZSk7DQo+ID4gKwkJeHNkaXJ4c3MtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiA+ICsJCWRl dl9kYmcoZGV2LCAiU3RyZWFtaW5nIHN0b3BwZWRcbiIpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3NfZ19p bnB1dF9zdGF0dXMgLSBJdCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgdmlkZW8gc2lnbmFs DQo+ID4gKyAqIGlzIHByZXNlbnQgLyBsb2NrZWQgb250byBvciBub3QuDQo+ID4gKyAqDQo+ID4g KyAqIEBzZDogVjRMMiBTdWIgZGV2aWNlDQo+ID4gKyAqIEBzdGF0dXM6IHN0YXR1cyBvZiBzaWdu YWwgbG9ja2VkDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYg dGhlIHZpZGVvIHNpZ25hbCBpcyBwcmVzZW50IGFuZCBsb2NrZWQgb250bw0KPiA+ICsgKiBieSB0 aGUgU0RJIFJ4IGNvcmUgb3Igbm90IGJhc2VkIG9uIHZpZGxvY2tlZCBmbGFnLg0KPiA+ICsgKg0K PiA+ICsgKiBSZXR1cm46IHplcm8gb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlu dCB4c2Rpcnhzc19nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0 YXR1cykNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRv X3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsNCj4gPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tl ZCkNCj4gPiArCQkqc3RhdHVzID0gVjRMMl9JTl9TVF9OT19TWU5DIHwgVjRMMl9JTl9TVF9OT19T SUdOQUw7DQo+ID4gKwllbHNlDQo+ID4gKwkJKnN0YXR1cyA9IDA7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10ICoNCj4gPiArX194c2Rpcnhzc19nZXRfcGFkX2Zvcm1hdChzdHJ1Y3QgeHNkaXJ4c3Nfc3Rh dGUgKnhzZGlyeHNzLA0KPiA+ICsJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpj ZmcsDQo+ID4gKwkJCSAgdW5zaWduZWQgaW50IHBhZCwgdTMyIHdoaWNoKQ0KPiA+ICt7DQo+ID4g Kwlzd2l0Y2ggKHdoaWNoKSB7DQo+ID4gKwljYXNlIFY0TDJfU1VCREVWX0ZPUk1BVF9UUlk6DQo+ ID4gKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KCZ4c2Rpcnhzcy0+c3ViZGV2 LCBjZmcsDQo+IHBhZCk7DQo+ID4gKwljYXNlIFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkU6DQo+ ID4gKwkJcmV0dXJuICZ4c2Rpcnhzcy0+Zm9ybWF0Ow0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQly ZXR1cm4gTlVMTDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhz ZGlyeHNzX2luaXRfY2ZnIC0gSW5pdGlhbGlzZSB0aGUgcGFkIGZvcm1hdCBjb25maWcgdG8gZGVm YXVsdA0KPiA+ICsgKiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQ0K PiA+ICsgKiBAY2ZnOiBQb2ludGVyIHRvIHN1YiBkZXZpY2UgcGFkIGluZm9ybWF0aW9uIHN0cnVj dHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6 ZSB0aGUgcGFkIGZvcm1hdCB3aXRoIHRoZSBkZWZhdWx0DQo+ID4gKyAqIHZhbHVlcy4NCj4gPiAr ICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4gK3N0YXRpYyBp bnQgeHNkaXJ4c3NfaW5pdF9jZmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJICAg ICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4g KwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQ7DQo+ID4gKw0KPiA+ICsJZm9ybWF0 ID0gdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoc2QsIGNmZywgMCk7DQo+ID4gKwkqZm9ybWF0 ID0geHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3NfZ2V0X2Zvcm1hdCAtIEdldCB0 aGUgcGFkIGZvcm1hdA0KPiA+ICsgKiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0 cnVjdHVyZQ0KPiA+ICsgKiBAY2ZnOiBQb2ludGVyIHRvIHN1YiBkZXZpY2UgcGFkIGluZm9ybWF0 aW9uIHN0cnVjdHVyZQ0KPiA+ICsgKiBAZm10OiBQb2ludGVyIHRvIHBhZCBsZXZlbCBtZWRpYSBi dXMgZm9ybWF0DQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQg dGhlIHBhZCBmb3JtYXQgaW5mb3JtYXRpb24uDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCBv biBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX2dldF9mb3JtYXQo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRl dl9wYWRfY29uZmlnICpjZmcsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9y bWF0ICpmbXQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3Mg PSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3Jl ID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsNCj4gPiArCWlmICgheHNkaXJ4c3MtPnZpZGxvY2tl ZCkgew0KPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiVmlkZW8gbm90IGxvY2tlZCFcbiIpOw0K PiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZtdC0+Zm9ybWF0 ID0gKl9feHNkaXJ4c3NfZ2V0X3BhZF9mb3JtYXQoeHNkaXJ4c3MsIGNmZywNCj4gPiArCQkJCQkJ IGZtdC0+cGFkLCBmbXQtPndoaWNoKTsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwg IlN0cmVhbSB3aWR0aCA9ICVkIGhlaWdodCA9ICVkIEZpZWxkID0gJWRcbiIsDQo+ID4gKwkJZm10 LT5mb3JtYXQud2lkdGgsIGZtdC0+Zm9ybWF0LmhlaWdodCwgZm10LT5mb3JtYXQuZmllbGQpOw0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICog eHNkaXJ4c3Nfc2V0X2Zvcm1hdCAtIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIHBhZCBmb3JtYXQN Cj4gPiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiAr ICogQGNmZzogUG9pbnRlciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUN Cj4gPiArICogQGZtdDogUG9pbnRlciB0byBwYWQgbGV2ZWwgbWVkaWEgYnVzIGZvcm1hdA0KPiA+ ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0 Lg0KPiA+ICsgKiBTaW5jZSB0aGUgcGFkIGZvcm1hdCBpcyBmaXhlZCBpbiBoYXJkd2FyZSwgaXQg Y2FuJ3QgYmUNCj4gPiArICogbW9kaWZpZWQgb24gcnVuIHRpbWUuDQo+ID4gKyAqDQo+ID4gKyAq IFJldHVybjogMCBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNz X3NldF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJICAgICAgIHN0cnVj dCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgdjRs Ml9zdWJkZXZfZm9ybWF0ICpmbXQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJh bWVmbXQgKl9fZm9ybWF0Ow0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9 IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoeHNkaXJ4c3MtPmNv cmUuZGV2LA0KPiA+ICsJCSJzZXQgd2lkdGggJWQgaGVpZ2h0ICVkIGNvZGUgJWQgZmllbGQgJWQg Y29sb3JzcGFjZSAlZFxuIiwNCj4gPiArCQlmbXQtPmZvcm1hdC53aWR0aCwgZm10LT5mb3JtYXQu aGVpZ2h0LA0KPiA+ICsJCWZtdC0+Zm9ybWF0LmNvZGUsIGZtdC0+Zm9ybWF0LmZpZWxkLA0KPiA+ ICsJCWZtdC0+Zm9ybWF0LmNvbG9yc3BhY2UpOw0KPiA+ICsNCj4gPiArCV9fZm9ybWF0ID0gX194 c2Rpcnhzc19nZXRfcGFkX2Zvcm1hdCh4c2RpcnhzcywgY2ZnLA0KPiA+ICsJCQkJCSAgICAgZm10 LT5wYWQsIGZtdC0+d2hpY2gpOw0KPiA+ICsNCj4gPiArCS8qIEN1cnJlbnRseSByZXNldCB0aGUg Y29kZSB0byBvbmUgZml4ZWQgaW4gaGFyZHdhcmUgKi8NCj4gPiArCS8qIFRPRE8gOiBBZGQgY2hl Y2tzIGZvciB3aWR0aCBoZWlnaHQgKi8NCj4gPiArCWZtdC0+Zm9ybWF0LmNvZGUgPSBfX2Zvcm1h dC0+Y29kZTsNCj4gDQo+IEl0IHNob3VsZCBmaWxsIGluIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGJh c2VkIG9uIHRoZSBjdXJyZW50IERWIHRpbWluZ3MuDQo+IERpdHRvIGZvciB0aGUgZmllbGQgKEkg YXNzdW1lIHRoYXQncyBmaXhlZCBhcyB3ZWxsIGJhc2VkIG9uIHdoZXRoZXIgdGhpcw0KPiBpcyBp bnRlcmxhY2VkIG9yIG5vdCkuIEknbSBub3Qgc3VyZSBob3cgY29sb3JzcGFjZSBpbmZvcm1hdGlv biBpcyBoYW5kbGVkDQo+IGZvciBTREkuDQo+IA0KDQpZZXMuIEkgd2lsbCB1cGRhdGUgdGhpcyBs b2dpYyB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIGZpZWxkIGJhc2VkIG9uIGN1cnJl bnQgRFYgdGltaW5ncy4NClBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGlzIGluIHRoZSBuZXh0IHZl cnNpb24uDQpUaGUgY3VycmVudCBJUCBzdXBwb3J0cyBCVDcwOSBjb2xvcmltZXRyeS4NClRoZSBj b2xvcmltZXRyeSBpbmZvcm1hdGlvbiBvZiBpbmNvbWluZyBzdHJlYW0gaXMgcHJlc2VudCBpbiB0 aGUgU1QgMzUyIHBheWxvYWQgQnl0ZSAzIChiaXQgNSBhbmQgYml0IDQpIGFzIHBlciBTTVBURSBT VCAyMDgxLTEwOjIwMTguDQpCNTo0ID0gMCAtPiBCVCA3MDkgYXMgcGVyIFNNUFRFIFNUIDI3NCAN Cg0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogeHNkaXJ4c3NfZW51bV9tYnVzX2NvZGUgLSBIYW5kbGUgcGl4ZWwgZm9ybWF0IGVudW1lcmF0 aW9uDQo+ID4gKyAqIEBzZDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUNCj4gPiAr ICogQGNmZzogVjRMMiBzdWJkZXYgcGFkIGNvbmZpZ3VyYXRpb24NCj4gPiArICogQGNvZGU6IHBv aW50ZXIgdG8gdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gc3RydWN0dXJlDQo+ID4gKyAqDQo+ ID4gKyAqIFJldHVybjogLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4g K3N0YXRpYyBpbnQgeHNkaXJ4c3NfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCwNCj4gPiArCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ID4g KwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0NCj4gKmNvZGUpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0 YXRlKHNkKTsNCj4gPiArCXUzMiBpbmRleCA9IGNvZGUtPmluZGV4Ow0KPiA+ICsJdTMyIG1heGlu ZGV4Ow0KPiA+ICsNCj4gPiArCWlmICh4c2Rpcnhzcy0+Y29yZS5icGMgPT0gMTApDQo+ID4gKwkJ bWF4aW5kZXggPSBBUlJBWV9TSVpFKHhzZGlyeHNzXzEwYnBjX21idXNfZm10cyk7DQo+ID4gKwll bHNlDQo+ID4gKwkJbWF4aW5kZXggPSBBUlJBWV9TSVpFKHhzZGlyeHNzXzEyYnBjX21idXNfZm10 cyk7DQo+ID4gKw0KPiA+ICsJaWYgKGNvZGUtPnBhZCB8fCBpbmRleCA+PSBtYXhpbmRleCkNCj4g PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlpZiAoeHNkaXJ4c3MtPmNvcmUuYnBj ID09IDEwKQ0KPiA+ICsJCWNvZGUtPmNvZGUgPSB4c2Rpcnhzc18xMGJwY19tYnVzX2ZtdHNbaW5k ZXhdOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCWNvZGUtPmNvZGUgPSB4c2Rpcnhzc18xMmJwY19tYnVz X2ZtdHNbaW5kZXhdOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogeHNkaXJ4c3NfZW51bV9kdl90aW1pbmdzOiBFbnVtZXJhdGUgYWxsIHRo ZSBzdXBwb3J0ZWQgRFYgdGltaW5ncw0KPiA+ICsgKiBAc2Q6IHBvaW50ZXIgdG8gdjRsMiBzdWJk ZXYgc3RydWN0dXJlDQo+ID4gKyAqIEB0aW1pbmdzOiBEViB0aW1pbmdzIHN0cnVjdHVyZSB0byBi ZSByZXR1cm5lZC4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAtRUlOVkFMIGluY2FzZSBvZiBp bnZhbGlkIGluZGV4IGFuZCBwYWQgb3IgemVybyBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgaW50IHhzZGlyeHNzX2VudW1fZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LA0KPiA+ICsJCQkJICAgIHN0cnVjdCB2NGwyX2VudW1fZHZfdGltaW5ncyAqdGltaW5ncykNCj4g PiArew0KPiA+ICsJaWYgKHRpbWluZ3MtPmluZGV4ID49IEFSUkFZX1NJWkUoZm10X2NhcCkpDQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKHRpbWluZ3MtPnBhZCAhPSAw KQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCXRpbWluZ3MtPnRpbWluZ3Mg PSBmbXRfY2FwW3RpbWluZ3MtPmluZGV4XTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3NfcXVlcnlfZHZfdGltaW5nczogUXVlcnkgZm9y IHRoZSBjdXJyZW50IERWIHRpbWluZ3MNCj4gPiArICogQHNkOiBwb2ludGVyIHRvIHY0bDIgc3Vi ZGV2IHN0cnVjdHVyZQ0KPiA+ICsgKiBAdGltaW5nczogRFYgdGltaW5ncyBzdHJ1Y3R1cmUgdG8g YmUgcmV0dXJuZWQuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogLUVOT0xDSyB3aGVuIHZpZGVv IGlzIG5vdCBsb2NrZWQsIC1FUkFOR0Ugd2hlbiBjb3JyZXNwb25kaW5nDQo+IHRpbWluZw0KPiA+ ICsgKiBlbnRyeSBpcyBub3QgZm91bmQgb3IgemVybyBvbiBzdWNjZXNzLg0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCB4c2Rpcnhzc19xdWVyeV9kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRl diAqc2QsDQo+ID4gKwkJCQkgICAgIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUgPSB0b194c2Rpcnhzc3N0 YXRlKHNkKTsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCWlmICghc3RhdGUt PnZpZGxvY2tlZCkNCj4gPiArCQlyZXR1cm4gLUVOT0xDSzsNCj4gPiArDQo+ID4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRSh4c2Rpcnhzc19kdl90aW1pbmdzKTsgaSsrKSB7DQo+ID4gKwkJ aWYgKHN0YXRlLT5mb3JtYXQud2lkdGggPT0geHNkaXJ4c3NfZHZfdGltaW5nc1tpXS53aWR0aCAm Jg0KPiA+ICsJCSAgICBzdGF0ZS0+Zm9ybWF0LmhlaWdodCA9PSB4c2Rpcnhzc19kdl90aW1pbmdz W2ldLmhlaWdodCAmJg0KPiA+ICsJCSAgICBzdGF0ZS0+ZnJhbWVfaW50ZXJ2YWwuZGVub21pbmF0 b3IgPT0NCj4gPiArCQkgICAgKHhzZGlyeHNzX2R2X3RpbWluZ3NbaV0uZnBzICogMTAwMCkpIHsN Cj4gPiArCQkJKnRpbWluZ3MgPSB4c2Rpcnhzc19kdl90aW1pbmdzW2ldLmZvcm1hdDsNCj4gPiAr CQkJcmV0dXJuIDA7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAtRVJB TkdFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsg KiBNZWRpYSBPcGVyYXRpb25zDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyB4c2Rpcnhzc19tZWRpYV9vcHMgPSB7DQo+ID4g KwkubGlua192YWxpZGF0ZSA9IHY0bDJfc3ViZGV2X2xpbmtfdmFsaWRhdGUNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyB4c2Rpcnhzc19jdHJs X29wcyA9IHsNCj4gPiArCS5nX3ZvbGF0aWxlX2N0cmwgPSB4c2Rpcnhzc19nX3ZvbGF0aWxlX2N0 cmwsDQo+ID4gKwkuc19jdHJsCT0geHNkaXJ4c3Nfc19jdHJsDQo+ID4gK307DQo+ID4gKw0KPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgeHNkaXJ4c3NfZWRoX2N0cmxz W10gPSB7DQo+ID4gKwl7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiAr CQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVF9FTkFCTEUsDQo+ID4gKwkJ Lm5hbWUJPSAiU0RJIFJ4IDogRURIIEVycm9yIENvdW50IEVuYWJsZSIsDQo+ID4gKwkJLnR5cGUJ PSBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLLA0KPiA+ICsJCS5taW4JPSAwLA0KPiA+ICsJCS5tYXgJ PSBYU0RJUlhfRURIX0FMTEVSUl9NQVNLLA0KPiA+ICsJCS5kZWYJPSAwLA0KPiA+ICsJfSwgew0K PiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURf WElMSU5YX1NESVJYX0VESF9FUlJDTlQsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogRURIIEVy cm9yIENvdW50IiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+ID4g KwkJLm1pbgk9IDAsDQo+ID4gKwkJLm1heAk9IDB4RkZGRiwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ ID4gKwkJLmRlZgk9IDAsDQo+ID4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxF IHwNCj4gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPiA+ICsJfSwgew0KPiA+ICsJCS5vcHMJ PSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJY X0VESF9TVEFUVVMsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogRURIIFN0YXR1cyIsDQo+ID4g KwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPiA+ICsJCS5taW4JPSAwLA0KPiA+ ICsJCS5tYXgJPSAweEZGRkZGRkZGLA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4gPiArCQkuZGVmCT0g MCwNCj4gPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiBWNEwyX0NU UkxfRkxBR19SRUFEX09OTFksDQo+ID4gKwl9DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgeHNkaXJ4c3NfY3RybHNbXSA9IHsNCj4gPiAr CXsNCj4gPiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJf Q0lEX1hJTElOWF9TRElSWF9GUkFNRVIsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogRW5hYmxl IEZyYW1lciIsDQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLA0KPiA+ICsJ CS5taW4JPSBmYWxzZSwNCj4gPiArCQkubWF4CT0gdHJ1ZSwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ ID4gKwkJLmRlZgk9IHRydWUsDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19j dHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVklETE9DS19XSU5E T1csDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogVmlkZW8gTG9jayBXaW5kb3ciLA0KPiA+ICsJ CS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4gPiArCQkubWluCT0gMCwNCj4gPiAr CQkubWF4CT0gMHhGRkZGRkZGRiwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ID4gKwkJLmRlZgk9IFhT RElSWF9ERUZBVUxUX1ZJREVPX0xPQ0tfV0lORE9XLA0KPiA+ICsJfSwgew0KPiA+ICsJCS5vcHMJ PSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJY X1NFQVJDSF9NT0RFUywNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBNb2RlcyBzZWFyY2ggTWFz ayIsDQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLLA0KPiA+ICsJCS5taW4J PSAwLA0KPiA+ICsJCS5tYXgJPSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUywNCj4gPiArCQkuZGVm CT0gWFNESVJYX0RFVEVDVF9BTExfTU9ERVMsDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4 c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfTU9E RV9ERVRFQ1QsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogTW9kZSBEZXRlY3QgU3RhdHVzIiwN Cj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+ID4gKwkJLm1pbgk9IFhT RElSWF9NT0RFX1NEX09GRlNFVCwNCj4gPiArCQkubWF4CT0gWFNESVJYX01PREVfMTJHRl9PRkZT RVQsDQo+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19W T0xBVElMRSB8DQo+IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiArCX0sIHsNCj4gPiAr CQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElO WF9TRElSWF9DUkMsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogQ1JDIEVycm9yIHN0YXR1cyIs DQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPiA+ICsJCS5taW4JPSAw LA0KPiA+ICsJCS5tYXgJPSAweEZGRkZGRkZGLA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4gPiArCQku ZGVmCT0gMCwNCj4gPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiBW NEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rp cnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVFNfSVNf SU5URVJMQUNFRCwNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBUUyBpcyBJbnRlcmxhY2VkIiwN Cj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sDQo+ID4gKwkJLm1pbgk9IGZh bHNlLA0KPiA+ICsJCS5tYXgJPSB0cnVlLA0KPiA+ICsJCS5kZWYJPSBmYWxzZSwNCj4gPiArCQku c3RlcAk9IDEsDQo+ID4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwNCj4g VjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPiA+ICsJfSwgew0KPiA+ICsJCS5vcHMJPSAmeHNk aXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0FDVElW RV9TVFJFQU1TLA0KPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IEFjdGl2ZSBTdHJlYW1zIiwNCj4g PiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+ID4gKwkJLm1pbgk9IDEsDQo+ ID4gKwkJLm1heAk9IDE2LA0KPiA+ICsJCS5kZWYJPSAxLA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4g PiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0KPiBWNEwyX0NUUkxfRkxB R19SRUFEX09OTFksDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29w cywNCj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfSVNfM0dCLA0KPiA+ICsJCS5u YW1lCT0gIlNESSBSeCA6IElzIDNHQiIsDQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9C T09MRUFOLA0KPiA+ICsJCS5taW4JPSBmYWxzZSwNCj4gPiArCQkubWF4CT0gdHJ1ZSwNCj4gPiAr CQkuZGVmCT0gZmFsc2UsDQo+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ICsJCS5mbGFncyAgPSBWNEwy X0NUUkxfRkxBR19WT0xBVElMRSB8DQo+IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiAr CX0NCj4gDQo+IEFsbCB0aGVzZSBjb250cm9scyBuZWVkIHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhl IGhlYWRlci4gU29tZSBvZiB0aGVzZSBjb250cm9scw0KPiBtYXkgdHVybiBvdXQgdG8gYmUgY29u dHJvbHMgdGhhdCBjYW4gYmUgc3RhbmRhcmRpemVkIGZvciBTREkgcmVjZWl2ZXJzLCBvdGhlcnMN Cj4gbWlnaHQgYmUgbW9yZSB2ZW5kb3Igb3IgZHJpdmVyIHNwZWNpZmljLg0KPiANCg0KSSBoYXZl IGRvY3VtZW50ZWQgdGhlc2UgaW4gdGhlIGhlYWRlci4gQnV0IGl0IHNlZW1zIGluc3VmZmljaWVu dC4gTGV0IG1lIGFkZCBtb3JlIGluZm8gaW4gaXQuDQpNb3N0IG9mIHRoaXMgaXMgSVAgc3BlY2lm aWMuIFByb2JhYmx5IE1vZGUgZGV0ZWN0ZWQgYW5kIEFjdGl2ZSBzdHJlYW1zIGNhbiBiZSBzdGFu ZGFyZGl6ZWQuDQoNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs Ml9zdWJkZXZfY29yZV9vcHMgeHNkaXJ4c3NfY29yZV9vcHMgPSB7DQo+ID4gKwkubG9nX3N0YXR1 cyA9IHhzZGlyeHNzX2xvZ19zdGF0dXMsDQo+ID4gKwkuc3Vic2NyaWJlX2V2ZW50ID0geHNkaXJ4 c3Nfc3Vic2NyaWJlX2V2ZW50LA0KPiA+ICsJLnVuc3Vic2NyaWJlX2V2ZW50ID0geHNkaXJ4c3Nf dW5zdWJzY3JpYmVfZXZlbnQNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHhzZGlyeHNzX3ZpZGVvX29wcyA9IHsNCj4gPiArCS5n X2ZyYW1lX2ludGVydmFsID0geHNkaXJ4c3NfZ19mcmFtZV9pbnRlcnZhbCwNCj4gPiArCS5zX3N0 cmVhbSA9IHhzZGlyeHNzX3Nfc3RyZWFtLA0KPiA+ICsJLmdfaW5wdXRfc3RhdHVzID0geHNkaXJ4 c3NfZ19pbnB1dF9zdGF0dXMsDQo+ID4gKwkucXVlcnlfZHZfdGltaW5ncyA9IHhzZGlyeHNzX3F1 ZXJ5X2R2X3RpbWluZ3MsDQo+IA0KPiBUaGlzIGlzIG1pc3NpbmcgZy9zX2R2X3RpbWluZ3MuIFlv dSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQNCj4gdGltaW5ncyBpbiB0aGUgZHJp dmVyIHN0YXRlOiB0eXBpY2FsbHkgdXNlcnNwYWNlIHdpbGwgcXVlcnkgdGltaW5ncyBhbmQNCj4g aWYgdGhhdCByZXR1cm5zIHZhbGlkIHRpbWluZ3MgaXQgd2lsbCBzZXQgdGhlbSAoc19kdl90aW1p bmdzKS4gV2l0aA0KPiBnX2R2X3RpbWluZ3MgdGhlIGxhc3Qgc2V0IHRpbWluZ3MgYXJlIHJldHVy bmVkLg0KPiANCg0KVGhhbmtzIGZvciBzaGFyaW5nIHRoaXMgaW5mb3JtYXRpb24uIEkgZGlkbid0 IGdldCB0aGUgc2VxdWVuY2UgZnJvbSB0aGUgY3VycmVudCBkb2N1bWVudGF0aW9uLg0KTGV0IG1l IGtub3cgaWYgdGhlcmUgaXMgYSBzdGFuZGFyZCBhcHBsaWNhdGlvbiB0aGF0IEkgbWF5IHJlZmVy IHRvIGZvciB0aGlzLg0KDQo+IElmIHRoZSB0aW1pbmdzIGNoYW5nZSB0aGVuIHRoZSBkcml2ZXIg c3RvcHMgc3RyZWFtaW5nIGFuZCByZXBvcnRzIHRoZQ0KPiBTT1VSQ0VfQ0hBTkdFIGV2ZW50LCBh dCB3aGljaCBwb2ludCB1c2Vyc3BhY2Ugd2lsbCBxdWVyeSB0aGUgbmV3IHRpbWluZ3MuDQo+DQoN ClRoZSBTT1VSQ0VfQ0hBTkdFIGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIG9ubHkgYWZ0ZXIgc3Rv cHBpbmcgdGhlIHN0cmVhbWluZyB0byB0aGUgZG93bnN0cmVhbSBieQ0KZGlzYWJsaW5nIHRoZSBi cmlkZ2VzLiBUaGUgY29yZSB3aWxsIGFsd2F5cyBiZSBlbmFibGVkIHRvIGRldGVjdCBhbnkgb3Ro ZXIgaW5jb21pbmcgc3RyZWFtLiANCk9uY2UgYSBuZXcgaW5jb21pbmcgc3RyZWFtIGlzIGRldGVj dGVkIGZvciB2aWRlb19sb2NrX3dpbmRvdyBhbW91bnQgb2YgdGltZSwgIGEgdmlkZW8gbG9jayBp bnRlcnJ1cHQgb2NjdXJzLg0KIA0KPiBUaGUgcmVwb3J0ZWQgbWVkaWFidXMgZm9ybWF0IHJlc29s dXRpb24gb25seSBjaGFuZ2VzIHdoZW4gc19kdl90aW1pbmdzDQo+IGlzIGNhbGxlZDogaXQncyB1 cGRhdGVkIHdpdGggdGhlIG5ldyB3aWR0aC9oZWlnaHQgaW5mby4NCj4gDQoNCkkgd2lsbCBjcmVh dGUgYW5vdGhlciB2NGwyX21idXNfZnJhbWVmbXQgbWVtYmVyIGluIHRoZSBzdGF0ZSBzdHJ1Y3R1 cmUgd2hpY2ggd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGRldGVjdGVkIGZvcm1hdHMgaW4gdGhl IHNfZHZfdGltaW5ncy4NClRoZW4gYXBwbGljYXRpb24gbWF5IGNhbGwgZ2V0L3NldF9mbXQoKS4g DQoNCj4gSW4gb3RoZXIgd29yZHM6IHRoZSB0aW1pbmdzIHJlcG9ydGVkIGJ5IGdfZHZfdGltaW5n cyBhcmUgY29udHJvbGxlZCBieQ0KPiB1c2Vyc3BhY2UsIHRoZSB0aW1pbmdzIHJlcG9ydGVkIGJ5 IHF1ZXJ5X2R2X3RpbWluZ3MgcmVmbGVjdCB0aGUgYWN0dWFsDQo+IHRpbWluZ3MgcmVjZWl2ZWQg b24gdGhlIFNESSBidXMuDQo+IA0KDQpUaGFua3MgZm9yIHRoaXMgZGV0YWlsZWQgZXhwbGFuYXRp b24uIPCfmIogDQoNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs Ml9zdWJkZXZfcGFkX29wcyB4c2Rpcnhzc19wYWRfb3BzID0gew0KPiA+ICsJLmluaXRfY2ZnID0g eHNkaXJ4c3NfaW5pdF9jZmcsDQo+ID4gKwkuZ2V0X2ZtdCA9IHhzZGlyeHNzX2dldF9mb3JtYXQs DQo+ID4gKwkuc2V0X2ZtdCA9IHhzZGlyeHNzX3NldF9mb3JtYXQsDQo+ID4gKwkuZW51bV9tYnVz X2NvZGUgPSB4c2Rpcnhzc19lbnVtX21idXNfY29kZSwNCj4gPiArCS5lbnVtX2R2X3RpbWluZ3Mg PSB4c2Rpcnhzc19lbnVtX2R2X3RpbWluZ3MsDQo+IA0KPiBUaGlzIGlzIG1pc3NpbmcgZHZfdGlt aW5nc19jYXAuDQo+IA0KDQpJIHdpbGwgYWRkIHRoaXMgaW4gdGhlIG5leHQgdmVyc2lvbi4NCg0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMg eHNkaXJ4c3Nfb3BzID0gew0KPiA+ICsJLmNvcmUgPSAmeHNkaXJ4c3NfY29yZV9vcHMsDQo+ID4g KwkudmlkZW8gPSAmeHNkaXJ4c3NfdmlkZW9fb3BzLA0KPiA+ICsJLnBhZCA9ICZ4c2Rpcnhzc19w YWRfb3BzDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ ICsgKiBQbGF0Zm9ybSBEZXZpY2UgRHJpdmVyDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArc3RhdGlj IGludCB4c2Rpcnhzc19wYXJzZV9vZihzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSB4c2Rpcnhzcy0+Y29yZS5k ZXYtPm9mX25vZGU7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhz cy0+Y29yZTsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvcmUtPmRldjsNCj4gPiArCXN0 cnVjdCBmd25vZGVfaGFuZGxlICplcCwgKnJlcDsNCj4gPiArCWludCByZXQ7DQo+ID4gKwljb25z dCBjaGFyICpzZGlfc3RkOw0KPiA+ICsNCj4gPiArCWNvcmUtPmluY2x1ZGVfZWRoID0gb2ZfcHJv cGVydHlfcmVhZF9ib29sKG5vZGUsICJ4bG54LGluY2x1ZGUtZWRoIik7DQo+ID4gKwlkZXZfZGJn KGRldiwgIkVESCBwcm9wZXJ0eSA9ICVzXG4iLA0KPiA+ICsJCWNvcmUtPmluY2x1ZGVfZWRoID8g IlByZXNlbnQiIDogIkFic2VudCIpOw0KPiA+ICsNCj4gPiArCXJldCA9IG9mX3Byb3BlcnR5X3Jl YWRfc3RyaW5nKG5vZGUsICJ4bG54LGxpbmUtcmF0ZSIsICZzZGlfc3RkKTsNCj4gPiArCWlmIChy ZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJ4bG54LGxpbmUtcmF0ZSBwcm9wZXJ0eSBu b3QgZm91bmRcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ aWYgKCFzdHJuY21wKHNkaV9zdGQsICIxMkdfU0RJXzhEUyIsIFhTRElSWF9NQVhfU1RSX0xFTkdU SCkpIHsNCj4gPiArCQljb3JlLT5tb2RlID0gWFNESVJYU1NfU0RJX1NURF8xMkdfOERTOw0KPiA+ ICsJfSBlbHNlIGlmICghc3RybmNtcChzZGlfc3RkLCAiNkdfU0RJIiwgWFNESVJYX01BWF9TVFJf TEVOR1RIKSkgew0KPiA+ICsJCWNvcmUtPm1vZGUgPSBYU0RJUlhTU19TRElfU1REXzZHOw0KPiA+ ICsJfSBlbHNlIGlmICghc3RybmNtcChzZGlfc3RkLCAiM0dfU0RJIiwgWFNESVJYX01BWF9TVFJf TEVOR1RIKSkgew0KPiA+ICsJCWNvcmUtPm1vZGUgPSBYU0RJUlhTU19TRElfU1REXzNHOw0KPiA+ ICsJfSBlbHNlIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgTGluZSBSYXRlXG4iKTsN Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCWRldl9kYmcoZGV2LCAiU0RJ IFJ4IExpbmUgUmF0ZSA9ICVzLCBtb2RlID0gJWRcbiIsIHNkaV9zdGQsDQo+ID4gKwkJY29yZS0+ bW9kZSk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInhs bngsYnBwIiwgJmNvcmUtPmJwYyk7DQo+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ICsJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCB4bG54LGJwcFxuIik7DQo+ID4gKwkJcmV0dXJuIHJldDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoY29yZS0+YnBjICE9IDEwICYmIGNvcmUtPmJwYyAh PSAxMikgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiYml0cyBwZXIgY29tcG9uZW50PSV1LiBDYW4g YmUgMTAgb3IgMTIgb25seVxuIiwNCj4gPiArCQkJY29yZS0+YnBjKTsNCj4gPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwllcCA9IGZ3bm9kZV9ncmFwaF9nZXRfZW5k cG9pbnRfYnlfaWQoZGV2X2Z3bm9kZShkZXYpLCAwLCAwLA0KPiA+ICsNCj4gRldOT0RFX0dSQVBI X0VORFBPSU5UX05FWFQpOw0KPiA+ICsJaWYgKCFlcCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAi bm8gc291cmNlIHBvcnQgZm91bmQiKTsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWdv dG8gZHRfcGFyc2VfZG9uZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXAgPSBmd25vZGVfZ3Jh cGhfZ2V0X3JlbW90ZV9lbmRwb2ludChlcCk7DQo+ID4gKwlpZiAoIXJlcCkgew0KPiA+ICsJCWRl dl9lcnIoZGV2LCAibm8gcmVtb3RlIHNpbmsgZW5kcG9pbnQgZm91bmQiKTsNCj4gPiArCQlyZXQg PSAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZ3bm9kZV9oYW5kbGVfcHV0KHJlcCk7 DQo+ID4gK2R0X3BhcnNlX2RvbmU6DQo+ID4gKwlmd25vZGVfaGFuZGxlX3B1dChlcCk7DQo+ID4g KwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB2 NGwyX3N1YmRldiAqc3ViZGV2Ow0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2Rpcnhz czsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlOw0KPiA+ICsJc3RydWN0IGRldmlj ZSAqZGV2Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArCXVuc2lnbmVkIGludCBudW1fY3RybHMsIG51 bV9lZGhfY3RybHMgPSAwLCBpOw0KPiA+ICsNCj4gPiArCXhzZGlyeHNzID0gZGV2bV9remFsbG9j KCZwZGV2LT5kZXYsIHNpemVvZigqeHNkaXJ4c3MpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICgh eHNkaXJ4c3MpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJeHNkaXJ4c3Mt PmNvcmUuZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCWNvcmUgPSAmeHNkaXJ4c3MtPmNvcmU7DQo+ ID4gKwlkZXYgPSBjb3JlLT5kZXY7DQo+ID4gKw0KPiA+ICsJLyogUmVnaXN0ZXIgaW50ZXJydXB0 IGhhbmRsZXIgKi8NCj4gPiArCWNvcmUtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7 DQo+ID4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgY29yZS0+aXJxLCBO VUxMLA0KPiA+ICsJCQkJCXhzZGlyeHNzX2lycV9oYW5kbGVyLCBJUlFGX09ORVNIT1QsDQo+ID4g KwkJCQkJZGV2X25hbWUoZGV2KSwgeHNkaXJ4c3MpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJ CWRldl9lcnIoZGV2LCAiRXJyID0gJWQgSW50ZXJydXB0IGhhbmRsZXIgcmVnIGZhaWxlZCFcbiIs DQo+ID4gKwkJCXJldCk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwljb3JlLT5udW1fY2xrcyA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfY2xrcyk7DQo+ID4gKwljb3Jl LT5jbGtzID0gZGV2bV9rY2FsbG9jKGRldiwgY29yZS0+bnVtX2Nsa3MsDQo+ID4gKwkJCQkgIHNp emVvZigqY29yZS0+Y2xrcyksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFjb3JlLT5jbGtzKQ0K PiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBjb3Jl LT5udW1fY2xrczsgaSsrKQ0KPiA+ICsJCWNvcmUtPmNsa3NbaV0uaWQgPSB4c2Rpcnhzc19jbGtz W2ldOw0KPiA+ICsNCj4gPiArCXJldCA9IGRldm1fY2xrX2J1bGtfZ2V0KGRldiwgY29yZS0+bnVt X2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ICsNCj4gPiArCXJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKGNvcmUtPm51bV9jbGtz LCBjb3JlLT5jbGtzKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiAr DQo+ID4gKwlyZXQgPSB4c2Rpcnhzc19wYXJzZV9vZih4c2Rpcnhzcyk7DQo+ID4gKwlpZiAocmV0 IDwgMCkNCj4gPiArCQlnb3RvIGNsa19lcnI7DQo+ID4gKw0KPiA+ICsJY29yZS0+aW9tZW0gPSBk ZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7DQo+ID4gKwlpZiAoSVNfRVJS KGNvcmUtPmlvbWVtKSkgew0KPiA+ICsJCXJldCA9IFBUUl9FUlIoY29yZS0+aW9tZW0pOw0KPiA+ ICsJCWdvdG8gY2xrX2VycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBSZXNldCB0aGUgY29y ZSAqLw0KPiA+ICsJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3JlLCBmYWxzZSk7DQo+ID4g Kwl4c2RpcnhfY29yZV9kaXNhYmxlKGNvcmUpOw0KPiA+ICsJeHNkaXJ4X2NsZWFyaW50cihjb3Jl LCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7DQo+ID4gKwl4c2RpcnhfZGlzYWJsZWludHIoY29yZSwg WFNESVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ICsJeHNkaXJ4X2VuYWJsZWludHIoY29yZSwgWFNE SVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ICsJeHNkaXJ4X2dsb2JhbGludHIoY29yZSwgdHJ1ZSk7 DQo+ID4gKwl4c2Rpcnhzc193cml0ZShjb3JlLCBYU0RJUlhfQ1JDX0VSUkNOVF9SRUcsIDB4RkZG Rik7DQo+ID4gKw0KPiA+ICsJLyogSW5pdGlhbGl6ZSBWNEwyIHN1YmRldmljZSBhbmQgbWVkaWEg ZW50aXR5ICovDQo+ID4gKwl4c2Rpcnhzcy0+cGFkLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJD RTsNCj4gPiArDQo+ID4gKwkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGZvcm1hdCAqLw0KPiA+ ICsJaWYgKGNvcmUtPmJwYyA9PSAxMCkNCj4gPiArCQl4c2Rpcnhzcy0+ZGVmYXVsdF9mb3JtYXQu Y29kZSA9DQo+IE1FRElBX0JVU19GTVRfVVlWWTEwXzFYMjA7DQo+ID4gKwllbHNlDQo+ID4gKwkJ eHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmNvZGUgPQ0KPiBNRURJQV9CVVNfRk1UX1VZVlkxMl8x WDI0Ow0KPiA+ICsJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmZpZWxkID0gVjRMMl9GSUVMRF9O T05FOw0KPiA+ICsJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmNvbG9yc3BhY2UgPSBWNEwyX0NP TE9SU1BBQ0VfREVGQVVMVDsNCj4gDQo+IFRoaXMgc2hvdWxkbid0IGJlIERFRkFVTFQuIENhbiB5 b3UgZXhwbGFpbiBhIGJpdCBob3cgY29sb3JzcGFjZSAob3INCj4gY29sb3JpbWV0cnkNCj4gaW4g Z2VuZXJhbCkgaXMgZGV0ZXJtaW5lZCBmb3IgU0RJPw0KPiANCg0KVGhhdCBpcyBjb3JyZWN0LiBB cyBtZW50aW9uZWQgZWFybGllciB0aGUgY29sb3JzcGFjZSBpbiBTREkgaXMgZGV0ZXJtaW5lZCBi eSBiaXQgNSBhbmQgNCBvZiBieXRlIDMgb2YgdGhlIDQgYnl0ZSBTVCAzNTIgcGF5bG9hZCBhcyBw ZXIgU01QVEUgMjA4MS0xMDoyMDE4DQoNCj4gPiArCXhzZGlyeHNzLT5kZWZhdWx0X2Zvcm1hdC53 aWR0aCA9IFhTRElSWF9ERUZBVUxUX1dJRFRIOw0KPiA+ICsJeHNkaXJ4c3MtPmRlZmF1bHRfZm9y bWF0LmhlaWdodCA9IFhTRElSWF9ERUZBVUxUX0hFSUdIVDsNCj4gPiArDQo+ID4gKwl4c2Rpcnhz cy0+Zm9ybWF0ID0geHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsNCj4gPiArCS8qIElu aXRpYWxpemUgVjRMMiBzdWJkZXZpY2UgYW5kIG1lZGlhIGVudGl0eSAqLw0KPiA+ICsJc3ViZGV2 ID0gJnhzZGlyeHNzLT5zdWJkZXY7DQo+ID4gKwl2NGwyX3N1YmRldl9pbml0KHN1YmRldiwgJnhz ZGlyeHNzX29wcyk7DQo+ID4gKw0KPiA+ICsJc3ViZGV2LT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ ICsJc3Ryc2NweShzdWJkZXYtPm5hbWUsIGRldl9uYW1lKGRldiksIHNpemVvZihzdWJkZXYtPm5h bWUpKTsNCj4gPiArDQo+ID4gKwlzdWJkZXYtPmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19F VkVOVFMgfA0KPiBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsNCj4gPiArDQo+ID4gKwlzdWJk ZXYtPmVudGl0eS5vcHMgPSAmeHNkaXJ4c3NfbWVkaWFfb3BzOw0KPiA+ICsNCj4gPiArCXY0bDJf c2V0X3N1YmRldmRhdGEoc3ViZGV2LCB4c2Rpcnhzcyk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWVk aWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2LT5lbnRpdHksIDEsICZ4c2Rpcnhzcy0+cGFkKTsN Cj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gKw0KPiA+ICsJLyog SW5pdGlhbGlzZSBhbmQgcmVnaXN0ZXIgdGhlIGNvbnRyb2xzICovDQo+ID4gKwludW1fY3RybHMg PSBBUlJBWV9TSVpFKHhzZGlyeHNzX2N0cmxzKTsNCj4gPiArDQo+ID4gKwlpZiAoY29yZS0+aW5j bHVkZV9lZGgpDQo+ID4gKwkJbnVtX2VkaF9jdHJscyA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfZWRo X2N0cmxzKTsNCj4gPiArDQo+ID4gKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZ4c2Rpcnhzcy0+ Y3RybF9oYW5kbGVyLA0KPiA+ICsJCQkgICAgICAgKG51bV9jdHJscyArIG51bV9lZGhfY3RybHMp KTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2N0cmxzOyBpKyspIHsNCj4gPiAr CQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOw0KPiA+ICsNCj4gPiArCQlkZXZfZGJnKGRldiwgIiVk ICVzIGN0cmwgPSAweCV4XG4iLCBpLCB4c2Rpcnhzc19jdHJsc1tpXS5uYW1lLA0KPiA+ICsJCQl4 c2Rpcnhzc19jdHJsc1tpXS5pZCk7DQo+ID4gKw0KPiA+ICsJCWN0cmwgPSB2NGwyX2N0cmxfbmV3 X2N1c3RvbSgmeHNkaXJ4c3MtPmN0cmxfaGFuZGxlciwNCj4gPiArCQkJCQkgICAgJnhzZGlyeHNz X2N0cmxzW2ldLCBOVUxMKTsNCj4gPiArCQlpZiAoIWN0cmwpIHsNCj4gPiArCQkJZGV2X2RiZyhk ZXYsICJGYWlsZWQgdG8gYWRkICVzIGN0cmxcbiIsDQo+ID4gKwkJCQl4c2Rpcnhzc19jdHJsc1tp XS5uYW1lKTsNCj4gPiArCQkJZ290byBlcnJvcjsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJaWYgKGNvcmUtPmluY2x1ZGVfZWRoKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IG51 bV9lZGhfY3RybHM7IGkrKykgew0KPiA+ICsJCQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOw0KPiA+ ICsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICIlZCAlcyBjdHJsID0gMHgleFxuIiwgaSwNCj4gPiAr CQkJCXhzZGlyeHNzX2VkaF9jdHJsc1tpXS5uYW1lLA0KPiA+ICsJCQkJeHNkaXJ4c3NfZWRoX2N0 cmxzW2ldLmlkKTsNCj4gPiArDQo+ID4gKwkJCWN0cmwgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbSgm eHNkaXJ4c3MtPmN0cmxfaGFuZGxlciwNCj4gPiArCQkJCQkJICAgICZ4c2Rpcnhzc19lZGhfY3Ry bHNbaV0sDQo+ID4gKwkJCQkJCSAgICBOVUxMKTsNCj4gPiArCQkJaWYgKCFjdHJsKSB7DQo+ID4g KwkJCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBhZGQgJXMgY3RybFxuIiwNCj4gPiArCQkJCQl4 c2Rpcnhzc19lZGhfY3RybHNbaV0ubmFtZSk7DQo+ID4gKwkJCQlnb3RvIGVycm9yOw0KPiA+ICsJ CQl9DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICh4c2Rpcnhzcy0+Y3RybF9o YW5kbGVyLmVycm9yKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGNvbnRy b2xzXG4iKTsNCj4gPiArCQlyZXQgPSB4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLmVycm9yOw0KPiA+ ICsJCWdvdG8gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3ViZGV2LT5jdHJsX2hhbmRs ZXIgPSAmeHNkaXJ4c3MtPmN0cmxfaGFuZGxlcjsNCj4gPiArDQo+ID4gKwlyZXQgPSB2NGwyX2N0 cmxfaGFuZGxlcl9zZXR1cCgmeHNkaXJ4c3MtPmN0cmxfaGFuZGxlcik7DQo+ID4gKwlpZiAocmV0 IDwgMCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCBjb250cm9sc1xuIik7 DQo+ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCB4c2Rpcnhzcyk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9hc3luY19y ZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2XG4iKTsNCj4gPiArCQlnb3RvIGVy cm9yOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXhzZGlyeHNzLT5zdHJlYW1pbmcgPSBmYWxzZTsN Cj4gPiArDQo+ID4gKwl4c2RpcnhfY29yZV9lbmFibGUoY29yZSk7DQo+ID4gKw0KPiA+ICsJZGV2 X2luZm8oZGV2LCAicHJvYmUgc3VjY2Vzc1xuIik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK2Vycm9yOg0KPiA+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmeHNkaXJ4c3MtPmN0cmxf aGFuZGxlcik7DQo+ID4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc3ViZGV2LT5lbnRpdHkpOw0K PiA+ICsJeHNkaXJ4X2dsb2JhbGludHIoY29yZSwgZmFsc2UpOw0KPiA+ICsJeHNkaXJ4X2Rpc2Fi bGVpbnRyKGNvcmUsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsNCj4gPiArY2xrX2VycjoNCj4gPiAr CWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKGNvcmUtPm51bV9jbGtzLCBjb3JlLT5jbGtzKTsN Cj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4 c3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0K PiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSAmeHNkaXJ4c3MtPnN1YmRldjsNCj4g PiArDQo+ID4gKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KHN1YmRldik7DQo+ID4gKwl2 NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyKTsNCj4gPiArCW1l ZGlhX2VudGl0eV9jbGVhbnVwKCZzdWJkZXYtPmVudGl0eSk7DQo+ID4gKw0KPiA+ICsJeHNkaXJ4 X2dsb2JhbGludHIoY29yZSwgZmFsc2UpOw0KPiA+ICsJeHNkaXJ4X2Rpc2FibGVpbnRyKGNvcmUs IFhTRElSWF9JTlRSX0FMTF9NQVNLKTsNCj4gPiArCXhzZGlyeF9jb3JlX2Rpc2FibGUoY29yZSk7 DQo+ID4gKwl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUsIGZhbHNlKTsNCj4gPiArDQo+ ID4gKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShjb3JlLT5udW1fY2xrcywgY29yZS0+Y2xr cyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhzZGlyeHNzX29mX2lkX3RhYmxlW10gPSB7DQo+ID4g Kwl7IC5jb21wYXRpYmxlID0gInhsbngsdi1zbXB0ZS11aGRzZGktcngtc3MtMi4wIiB9LA0KPiA+ ICsJeyB9DQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhzZGlyeHNzX29m X2lkX3RhYmxlKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhz ZGlyeHNzX2RyaXZlciA9IHsNCj4gPiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5hbWUJCT0gInhp bGlueC1zZGlyeHNzIiwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUJPSB4c2Rpcnhzc19vZl9pZF90 YWJsZSwNCj4gPiArCX0sDQo+ID4gKwkucHJvYmUJCQk9IHhzZGlyeHNzX3Byb2JlLA0KPiA+ICsJ LnJlbW92ZQkJCT0geHNkaXJ4c3NfcmVtb3ZlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxl X3BsYXRmb3JtX2RyaXZlcih4c2Rpcnhzc19kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0FV VEhPUigiVmlzaGFsIFNhZ2FyIDx2c2FnYXJAeGlsaW54LmNvbT4iKTsNCj4gPiArTU9EVUxFX0RF U0NSSVBUSU9OKCJYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbSBEcml2ZXIiKTsNCj4gPiArTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgv eGlsaW54LXNkaXJ4c3MuaCBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtDQo+IHNkaXJ4c3Mu aA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42ZjJh MDkzOTY4ZDkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4 L3hpbGlueC1zZGlyeHNzLmgNCj4gPiBAQCAtMCwwICsxLDE3OSBAQA0KPiA+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqLw0KPiA+ ICsvKg0KPiA+ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbSBtb2RlLCBldmVudCwgY3VzdG9t IHRpbWluZ3MNCj4gPiArICogYW5kIGZsYWcgZGVmaW5pdGlvbnMuDQo+ID4gKyAqDQo+ID4gKyAq IENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAgWGlsaW54LCBJbmMuDQo+ID4gKyAqDQo+ID4gKyAq IENvbnRhY3RzOiBWaXNoYWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbnguY29tPg0KPiA+ICsg Ki8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX19VQVBJX1hJTElOWF9TRElSWFNTX0hfXw0KPiA+ICsj ZGVmaW5lIF9fVUFQSV9YSUxJTlhfU0RJUlhTU19IX18NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxs aW51eC90eXBlcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdjRsMi1kdi10aW1pbmdzLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAq IEV2ZW50cw0KPiA+ICsgKg0KPiA+ICsgKiBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9VTkRFUkZM T1c6IFZpZGVvIGluIHRvIEFYSTQgU3RyZWFtIGNvcmUNCj4gdW5kZXJmbG93ZWQNCj4gPiArICog VjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfT1ZFUkZMT1c6IFZpZGVvIGluIHRvIEFYSTQgU3RyZWFt IGNvcmUNCj4gb3ZlcmZsb3dlZA0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBWNEwyX0VWRU5UX1hJ TElOWF9TRElSWF9DTEFTUw0KPiAoVjRMMl9FVkVOVF9QUklWQVRFX1NUQVJUIHwgMHgyMDApDQo+ ID4gKyNkZWZpbmUgVjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfVU5ERVJGTE9XDQo+IChWNEwyX0VW RU5UX1hJTElOWF9TRElSWF9DTEFTUyB8IDB4MSkNCj4gPiArI2RlZmluZSBWNEwyX0VWRU5UX1hJ TElOWF9TRElSWF9PVkVSRkxPVw0KPiAoVjRMMl9FVkVOVF9YSUxJTlhfU0RJUlhfQ0xBU1MgfCAw eDIpDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGlzIGVudW0gaXMgdXNlZCB0byBwcmVwYXJl IHRoZSBiaXRtYXNrIG9mIG1vZGVzIHRvIGJlIGRldGVjdGVkDQo+ID4gKyAqLw0KPiA+ICtlbnVt IHsNCj4gPiArCVhTRElSWF9NT0RFX1NEX09GRlNFVCA9IDAsDQo+ID4gKwlYU0RJUlhfTU9ERV9I RF9PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV8zR19PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9E RV82R19PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCwNCj4gPiArCVhTRElS WF9NT0RFXzEyR0ZfT0ZGU0VULA0KPiA+ICsJWFNESVJYX01PREVfTlVNX1NVUFBPUlRFRCwNCj4g PiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX0RFVEVDVF9BTExfTU9ERVMNCj4gCShC SVQoWFNESVJYX01PREVfU0RfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVf SERfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfM0dfT0ZGU0VUKSB8IFwN Cj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfNkdfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQo WFNESVJYX01PREVfMTJHSV9PRkZTRVQpIHwgXA0KPiA+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV8x MkdGX09GRlNFVCkpDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBFREggRXJyb3IgVHlwZXMNCj4g PiArICogQU5DIC0gQW5jaWxsYXJ5IERhdGEgUGFja2V0IEVycm9ycw0KPiA+ICsgKiBGRiAtIEZ1 bGwgRmllbGQgRXJyb3JzDQo+ID4gKyAqIEFQIC0gQWN0aXZlIFBvcnRpb24gRXJyb3JzDQo+ID4g KyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNfRURIX0VSUgkJ QklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX0VEQV9FUlIJCUJJVCgx KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19JREhfRVJSCQlCSVQoMikNCj4g PiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNfSURBX0VSUgkJQklUKDMpDQo+ID4gKyNk ZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX1VFU19FUlIJCUJJVCg0KQ0KPiA+ICsjZGVmaW5l IFhTRElSWF9FREhfRVJSQ05UX0ZGX0VESF9FUlIJCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFhTRElS WF9FREhfRVJSQ05UX0ZGX0VEQV9FUlIJCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhf RVJSQ05UX0ZGX0lESF9FUlIJCUJJVCg3KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05U X0ZGX0lEQV9FUlIJCUJJVCg4KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX1VF U19FUlIJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0VESF9FUlIJ CUJJVCgxMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9FREFfRVJSCQlCSVQo MTEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQVBfSURIX0VSUgkJQklUKDEyKQ0K PiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0lEQV9FUlIJCUJJVCgxMykNCj4gPiAr I2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9VRVNfRVJSCQlCSVQoMTQpDQo+ID4gKyNkZWZp bmUgWFNESVJYX0VESF9FUlJDTlRfUEtUX0NIS1NVTV9FUlIJQklUKDE1KQ0KPiA+ICsNCj4gPiAr I2RlZmluZSBYU0RJUlhfRURIX0FMTEVSUl9NQVNLCQkweEZGRkYNCj4gPiArDQo+ID4gKy8qIFhp bGlueCBEViB0aW1pbmdzIG5vdCBpbiBtYWlubGluZSB5ZXQgKi8NCj4gPiArI2RlZmluZSBYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI0IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1 Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcDQo+ ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ ID4gKwkJNzQyNTAwMDAsIDUxMCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAsIDAsIFwNCj4gPiAr CQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI1IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1 Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcDQo+ ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ ID4gKwkJNzQyNTAwMDAsIDQwMCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAsIDAsIFwNCj4gPiAr CQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDMwIHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1 Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcDQo+ ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ ID4gKwkJNzQyNTAwMDAsIDY2LCAyMCwgNjYsIDQsIDUsIDM2LCAwLCAwLCAwLCBcDQo+ID4gKwkJ VjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgWExOWF9W NEwyX0RWX0JUXzIwNDhYMTA4MEk0OCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZf MTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMSwgXA0KPiA+ ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ ICsJCTc0MjUwMDAwLCAzMjksIDQ0LCAzMjksIDIsIDUsIDE1LCAzLCA1LCAxNSwgXA0KPiA+ICsJ CVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhMTlhf VjRMMl9EVl9CVF8yMDQ4WDEwODBJNTAgeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2 XzExMjAsIFwNCj4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDEsIFwNCj4g PiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4g PiArCQk3NDI1MDAwMCwgMjc0LCA0NCwgMjc0LCAyLCA1LCAxNSwgMywgNSwgMTUsIFwNCj4gPiAr CQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTYwIHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1 Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAxLCBcDQo+ ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ ID4gKwkJNzQyNTAwMDAsIDY2LCAyMCwgNjYsIDIsIDUsIDE1LCAzLCA1LCAxNSwgXA0KPiA+ICsJ CVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhMTlhf VjRMMl9EVl9CVF8xOTIwWDEwODBQNDggeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2 XzExMjAsIFwNCj4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEwODAsIDAsIFwNCj4g PiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4g PiArCQkxNDg1MDAwMDAsIDYzOCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAsIDAsIFwNCj4gPiAr CQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDQ4IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1 Nl8xMTIwLCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcDQo+ ID4gKwkJVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ ID4gKwkJMTQ4NTAwMDAwLCA1MTAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBcDQo+ID4g KwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgWExO WF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA1MCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82 NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMCwgXA0K PiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0K PiA+ICsJCTE0ODUwMDAwMCwgNDAwLCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgXA0KPiA+ ICsJCVY0TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhM TlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNjAgeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRf NjU2XzExMjAsIFwNCj4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwN Cj4gPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwN Cj4gPiArCQkxNDg1MDAwMDAsIDg4LCA0NCwgMjAsIDQsIDUsIDM2LCAwLCAwLCAwLCBcDQo+ID4g KwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgWExO WF9WNEwyX0RWX0JUXzM4NDBYMjE2MFA0OCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82 NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMzg0MCwgMjE2MCwgMCwgXA0K PiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0K PiA+ICsJCTU5NDAwMDAwMCwgMTI3NiwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAwLCAwLCBcDQo+ ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUg WExOWF9WNEwyX0RWX0JUXzQwOTZYMjE2MFA0OCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9C VF82NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoNDA5NiwgMjE2MCwgMCwg XA0KPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwg XA0KPiA+ICsJCTU5NDAwMDAwMCwgMTAyMCwgODgsIDI5NiwgOCwgMTAsIDcyLCAwLCAwLCAwLCBc DQo+ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZp bmUgWExOWF9WNEwyX0RWX0JUXzE5MjBYMTA4MEk0OCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9E Vl9CVF82NTZfMTEyMCwgXA0KPiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMTkyMCwgMTA4MCwg MSwgXA0KPiA+ICsJCVY0TDJfRFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BP TCwgXA0KPiA+ICsJCTE0ODUwMDAwMCwgMzcxLCA4OCwgMzcxLCAyLCA1LCAxNSwgMywgNSwgMTUs IFwNCj4gPiArCQlWNEwyX0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiANCj4gV2h5IG5vdCBh ZGQgdGhlc2UgdG8gdjRsMi1kdi10aW1pbmdzLmg/IEkgZG8gbmVlZCB0byBrbm93IG9uIHdoaWNo IHN0YW5kYXJkDQo+IHRoZXkgYXJlIGJhc2VkLg0KPiANCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBf X1VBUElfWElMSU5YX1NESVJYU1NfSF9fICovDQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9saW51eC94aWxpbngtdjRsMi1jb250cm9scy5oDQo+IGIvaW5jbHVkZS91YXBpL2xpbnV4L3hp bGlueC12NGwyLWNvbnRyb2xzLmgNCj4gPiBpbmRleCBiNjQ0MWZlNzA1YzUuLmU5ZGU2NWU4MjY0 MiAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJv bHMuaA0KPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1jb250cm9scy5o DQo+IA0KPiBXaHkgaXMgdGhpcyBpbiBhIHNlcGFyYXRlIGhlYWRlcj8gSXQgc2VlbXMgdG8gbWUg dGhhdCBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvDQo+IGhhdmUNCj4gYSBzaW5nbGUgcHVibGljIGhl YWRlciBmb3IgdGhpcyBkcml2ZXIuDQo+IA0KPiA+IEBAIC03MSw0ICs3MSw3MSBAQA0KPiA+ICAv KiBOb2lzZSBsZXZlbCAqLw0KPiA+ICAjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9UUEdfTk9JU0Vf R0FJTg0KPiAJKFY0TDJfQ0lEX1hJTElOWF9UUEcgKyAxNykNCj4gPg0KPiA+ICsvKg0KPiA+ICsg KiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbQ0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKy8qIFRoZSBi YXNlIGZvciB0aGUgc2RpIHJ4IGRyaXZlciBjb250cm9scy4NCj4gPiArICogV2UgcmVzZXJ2ZSAz MiBjb250cm9scyBmb3IgdGhpcyBkcml2ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBWNEwyX0NJ RF9YSUxJTlhfU0RJUlhfRURIXyogY29udHJvbHMgYXJlIHByZXNlbnQgb25seSBpZg0KPiA+ICsg KiBFREggaXMgZW5hYmxlZC4NCj4gPiArICogVGhlIGNvbnRyb2xzIHdoaWNoIGNhbiBiZSBzZXQg c2hvdWxkIG9ubHkgYmUgc2V0IGJlZm9yZSBlbmFibGluZw0KPiA+ICsgKiBzdHJlYW1pbmcuIFRo ZSBjb250cm9scyB3aGljaCBjYW4gYmUgZ290IHNob3VsZCBiZSBjYWxsZWQgd2hpbGUNCj4gPiAr ICogc3RyZWFtaW5nIHRvIGdldCBjb3JyZWN0IHZhbHVlcy4NCj4gPiArICogVGhlIFY0TDJfQ0lE X1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVCBjYW4gYmUgY2FsbGVkIHdoZW4gcXVlcnkNCj4gZHYg dGltaW5nDQo+ID4gKyAqIHJldHVybnMgYSB2YWxpZCB0aW1pbmcuDQo+ID4gKyAqLw0KPiA+ICsN Cj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlgNCj4gCShWNEwyX0NJRF9YSUxJTlhf QkFTRSArIDB4MjApDQo+ID4gKw0KPiA+ICsvKiBGcmFtZXIgQ29udHJvbCB0byBlbmFibGUgb3Ig ZGlzYWJsZSB0aGUgZnJhbWVyICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJY X0ZSQU1FUg0KPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDEpDQo+ID4gKy8qDQo+ID4gKyAq IFZpZGVvIExvY2sgV2luZG93IENvbnRyb2wgdG8gc2V0IHRoZSB2aWRlbyBsb2NrIHdpbmRvdyB2 YWx1ZQ0KPiA+ICsgKiBUaGlzIGlzIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgbW9kZSBhbmQgdHJh bnNwb3J0IHN0cmVhbSBuZWVkDQo+ID4gKyAqIHRvIGJlIGxvY2tlZCBiZWZvcmUgYSB2aWRlbyBs b2NrIGludGVycnVwdCBvY2N1cnMuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJ TElOWF9TRElSWF9WSURMT0NLX1dJTkRPVw0KPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDIp DQo+ID4gKy8qIEVESCBFcnJvciBNYXNrIENvbnRyb2wgdG8gZW5hYmxlIEVESCBlcnJvciBjb3Vu dCAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJSQ05UX0VOQUJM RQ0KPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDMpDQo+ID4gKy8qDQo+ID4gKyAqIE1vZGUg c2VhcmNoIENvbnRyb2wgdG8gcGFzcyB0aGUgYml0IG1hc2sgb2YgbW9kZXMgdG8gZGV0ZWN0Lg0K PiA+ICsgKg0KPiA+ICsgKiBiaXQgMCBzZXQgdG8gZGV0ZWN0IFNEIG1vZGUsDQo+ID4gKyAqIGJp dCAxIHNldCB0byBkZXRlY3QgSEQgbW9kZSwNCj4gPiArICogYml0IDIgc2V0IHRvIGRldGVjdCAz RyAoM0dBICYgM0dCKSBtb2RlLA0KPiA+ICsgKiBiaXQgMyBzZXQgdG8gZGV0ZWN0IDZHIG1vZGUs DQo+ID4gKyAqIGJpdCA0IHNldCB0byBkZXRlY3QgMTJHIGludGVnZXIgZnJhbWUgcmF0ZSBtb2Rl LA0KPiA+ICsgKiBiaXQgNSBzZXQgdG8gZGV0ZWN0IDEyRyBmcmFjdGlvbmFsIGZyYW1lIHJhdGUg bW9kZSwNCj4gPiArICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX1NFQVJD SF9NT0RFUw0KPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDQpDQo+ID4gKy8qDQo+ID4gKyAq IEdldCBEZXRlY3RlZCBNb2RlIGNvbnRyb2wNCj4gPiArICoNCj4gPiArICogQ29udHJvbCBWYWx1 ZSAtIE1vZGUgZGV0ZWN0ZWQNCj4gPiArICogICAgICAgIDAgICAgICAtICAgICBTRA0KPiA+ICsg KiAgICAgICAgMSAgICAgIC0gICAgIEhEDQo+ID4gKyAqICAgICAgICAyICAgICAgLSAgICAgM0cg KDNHQSAmIDNHQikNCj4gPiArICogICAgICAgIDMgICAgICAtICAgICA2Rw0KPiA+ICsgKiAgICAg ICAgNCAgICAgIC0gICAgIDEyRyBpbnRlZ2VyIGZyYW1lIHJhdGUNCj4gPiArICogICAgICAgIDUg ICAgICAtICAgICAxMkcgZnJhY3Rpb25hbCBmcmFtZSByYXRlDQo+ID4gKyAqLw0KPiA+ICsjZGVm aW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVA0KPiAJKFY0TDJfQ0lEX1hJTElO WF9TRElSWCArIDUpDQo+ID4gKy8qIEdldCBudW1iZXIgb2YgQ1JDIGVycm9ycyBzdGF0dXMgY29u dHJvbCAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9DUkMNCj4gCShWNEwy X0NJRF9YSUxJTlhfU0RJUlggKyA2KQ0KPiA+ICsvKiBHZXQgRURIIGVycm9yIGNvdW50IGNvbnRy b2wgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVA0KPiAJ KFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDcpDQo+ID4gKy8qIEdldCBFREggc3RhdHVzIGNvbnRy b2wgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX1NUQVRVUw0KPiAJ KFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDgpDQo+ID4gKy8qIEdldCBUcmFuc3BvcnQgSW50ZXJs YWNlZCBzdGF0dXMgd2hldGhlciBpdCBpcyBpbnRlcmxhY2VkIG9yIG5vdCAqLw0KPiA+ICsjZGVm aW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9UU19JU19JTlRFUkxBQ0VEDQo+IAkoVjRMMl9DSURf WElMSU5YX1NESVJYICsgOSkNCj4gPiArLyogR2V0IG51bWJlciBvZiBBY3RpdmUgU3RyZWFtcyAq Lw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9BQ1RJVkVfU1RSRUFNUw0KPiAJ KFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDEwKQ0KPiA+ICsvKg0KPiA+ICsgKiBHZXQgaWYgdGhl IGRldGVjdGVkIG1vZGUgaXMgM0dCLg0KPiA+ICsgKiBDYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlz aGVkIGJldHdlZW4gM0dBIGFuZCAzR0INCj4gPiArICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURf WElMSU5YX1NESVJYX0lTXzNHQg0KPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElSWCArIDExKQ0KPiA+ ICsNCj4gPiAgI2VuZGlmIC8qIF9fVUFQSV9YSUxJTlhfVjRMMl9DT05UUk9MU19IX18gKi8NCj4g Pg0KPiANCj4gUmVnYXJkcywNCj4gDQo+IAlIYW5zDQo=