Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp179784imm; Tue, 16 Oct 2018 20:55:03 -0700 (PDT) X-Google-Smtp-Source: ACcGV62A7Vf6ad0V7sljoP/lHghA9GrQBIoEpe1xsyY9qIRnnxItYNAMoQhNPPKDuJTZnkC+eRPl X-Received: by 2002:a62:9f11:: with SMTP id g17-v6mr24722527pfe.144.1539748503772; Tue, 16 Oct 2018 20:55:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539748503; cv=none; d=google.com; s=arc-20160816; b=WO5Cm/O+xKbZzp3ixKHrbZ62PBMrM4BvnUGVtm8USM/dY0Y1E0UVJIlONgYSwnBmj4 4XsO4zwB7oxZk4QPuqsweXOJhiFSvNErJurWZaJzwTbkIf160MuhIgrxjkz8nAJfzNhC nEPP6pUg1uQH3DuXMdEA55yx28Yl3GX14hA6IEnyQAdFQ6o8PzvRlC5fPr+FSIoYipro jfqLkuAqBotfCTl2Md1ksMQ/B9lgYgxEk0f3CAi7YIskUpUzjjqDNpMjGZoOVbokAerj sOOEIVLwgvLwSn8s1Oe52DinxacNnvvtcaEfllVC7qvbUV3vKQ4fU5vWi+WNTc2nJ4xn zc+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=Cz0GgcVegku+4Bo6IquaYpX/BByID9za0cxwSDdkA0k=; b=G6xKUs0TVpUT+khE+zziyFRMtjVG+2eoA552E4R0SEShm7dKEPF8o5N7dVjxrxmkBF IInKenxIqDYtuTH9PXbnx8mhwBdXJha9qJCjG8id9Mf/Hcs1IHmjIUcXLs4/SsZPeGvt eV7/2YGmpkFrLbLFXArk/z95ILG6oXlsHd+N1hL1Jn7M1szxNzsgz8Gle6AhbDBwtdgV ywm0qxCGZ7XwSqFWnRlzZOVHn8KaF1kVDvTF8qDQvGhdSpcoloGOV8LTPM81fU258lgU Tg/Crj28mAd3M6w6mNdH2I1a21sb+5EKfXnfbtLg+Tqyn/g+VrUlH3Aokih582tRqgf7 Zi+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b="n4/LZHiA"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w186-v6si16672999pgd.471.2018.10.16.20.54.47; Tue, 16 Oct 2018 20:55:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b="n4/LZHiA"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727396AbeJQLqd (ORCPT + 99 others); Wed, 17 Oct 2018 07:46:33 -0400 Received: from mail-eopbgr50054.outbound.protection.outlook.com ([40.107.5.54]:62785 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727111AbeJQLqd (ORCPT ); Wed, 17 Oct 2018 07:46:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Cz0GgcVegku+4Bo6IquaYpX/BByID9za0cxwSDdkA0k=; b=n4/LZHiA/FkyFBce/EOwEq4KOv7VkMLTUg4f+deTCou4hirV6NwbrheG81wyQwa6dejxOPloWAPWG314RSsWAMUgd2N5a0MJiEJQEedhB1ulf/H1VHCCDFp6Opo2+agQb7ldufT7vATil2J1yfgrf+kEchOowJoFAZqQCbZJyv4= Received: from AM2PR04MB1027.eurprd04.prod.outlook.com (10.162.36.13) by AM2PR04MB0627.eurprd04.prod.outlook.com (10.160.32.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.23; Wed, 17 Oct 2018 03:50:04 +0000 Received: from AM2PR04MB1027.eurprd04.prod.outlook.com ([fe80::f144:31db:9579:552b]) by AM2PR04MB1027.eurprd04.prod.outlook.com ([fe80::f144:31db:9579:552b%6]) with mapi id 15.20.1250.020; Wed, 17 Oct 2018 03:50:04 +0000 From: Yogesh Narayan Gaur To: Cyrille Pitchen , Tudor Ambarus , "marek.vasut@gmail.com" , "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "boris.brezillon@bootlin.com" , "richard@nod.at" CC: "linux-kernel@vger.kernel.org" , "nicolas.ferre@microchip.com" , "cyrille.pitchen@microchip.com" , "linux-mtd@lists.infradead.org" , "linux-arm-kernel@lists.infradead.org" , "Cristian.Birsan@microchip.com" , Varun Sethi Subject: RE: [PATCH v3 1/2] mtd: spi-nor: add support to non-uniform SFDP SPI NOR flash memories Thread-Topic: [PATCH v3 1/2] mtd: spi-nor: add support to non-uniform SFDP SPI NOR flash memories Thread-Index: AQHUSeYwGQ074lVuqESxUXlBIHGe8qUh1lUwgABb2gCAABY6gIAAnHVQgAAfbzA= Date: Wed, 17 Oct 2018 03:50:04 +0000 Message-ID: References: <20180911154007.17195-1-tudor.ambarus@microchip.com> <20180911154007.17195-2-tudor.ambarus@microchip.com> <31a8f6a9-1459-443a-6ef8-2b2c17769ae4@microchip.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=yogeshnarayan.gaur@nxp.com; x-originating-ip: [112.196.150.22] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;AM2PR04MB0627;6:QBGS2MQ1bXr/pFmXN+Iv2LRyuiQVPbluBiIkkN5roq8CodpLVnHiT1pNUp7bx97dzvt/8cFs7vsIyKYOyd0EDCrssloWATvWtfQwFQaUlL+uUfnOa0JdoSi6exm4fIAvCoTII2uziBnZOiGOR0jH7l3JpFTI0svAJuVrqy4HkZZrAFN3ojBOdVzjpPgrumFYzxvd35/lBgbzSlRWVyzGcK1uRNxO1Q8pMEt3yQ/L7KckADcl+cG8RfAQ03/g0m8PvOo5O6HXSAtDB3N32og1uILcW4OajUfwmcAtHKBLDDp7L4nS9IQsBlsUswRSl64hRtZjAb28lNQ7oiE1dGBIFB/YdcZk4AiSQVRuy7kHsul/FIze06wjFBx5WaKljR2ZYOT1xpeokvfSRKqpvcqWpTGXx6tj6qQWsrMRm7lxuXi0BCUgUZDL7pVvadircnRRBgvWNBc56e+m6PLNXjKDjQ==;5:XbHQG6KGq0SH4e+NPzqTvTB7hP/EaH2NSmpZY4djvEkQofpuzOiwuDINKjylT21FaW8Z3b+bN0L3FH3qEikiss7ZR2MnoMUdMDGV5UuRgKSUApuWfEu2wzaPQTczFwqlnn1glST5siBN+Z3TCiRiLVhdpRr4OTnk+p6cHmmQkcI=;7:lZyh8bW+bggZ+vTYEMWUsoQ0G1QFTYBvk7h18joKp+hIrysmKSJPDSyFFn5HqfChuEBcRqd2dBlL/uttXpCjFP1TPUgVwC4pqhgIfs1bLKIDS1b45kR9KB7K8Lg0tNfBHmMAGWi/TiiX71EYofBVjiBR/ovffs8qn5oSYYgy9buGNtaR3//kTkiXdx6FUWUhHoQU3YWEPTkd2/h6PW37nZlbZWdNfYVAePUXBlz49vJXh9OpwhguFzgfNeMLPWex x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 7e34a83a-2d14-434e-c445-08d633e39f69 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM2PR04MB0627; x-ms-traffictypediagnostic: AM2PR04MB0627: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(85827821059158)(9452136761055)(258649278758335)(45079756050767)(189930954265078)(258095267146985)(131327999870524)(17755550239193)(185117386973197); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3231355)(944501410)(4982022)(52105095)(3002001)(6055026)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991088);SRVR:AM2PR04MB0627;BCL:0;PCL:0;RULEID:;SRVR:AM2PR04MB0627; x-forefront-prvs: 08286A0BE2 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(366004)(376002)(136003)(39860400002)(346002)(189003)(199004)(13464003)(7736002)(81156014)(33656002)(7416002)(74316002)(229853002)(2906002)(966005)(39060400002)(68736007)(6306002)(9686003)(53946003)(25786009)(6436002)(16200700003)(6116002)(305945005)(14454004)(186003)(55016002)(6246003)(53936002)(3846002)(4326008)(316002)(71200400001)(4744004)(5660300001)(7696005)(66574009)(99286004)(26005)(45080400002)(102836004)(256004)(14444005)(5250100002)(476003)(2501003)(106356001)(97736004)(105586002)(446003)(93886005)(486006)(76176011)(11346002)(54906003)(8676002)(71190400001)(478600001)(53546011)(66066001)(8936002)(110136005)(575784001)(6506007)(2201001)(81166006)(217873002)(86362001)(2900100001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM2PR04MB0627;H:AM2PR04MB1027.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: VNeJLnm3W6bCaOVESa5VbljStDrtmnYF/enpz7xrILiF52sxrRsNyL3+6yCE+OGw1vmh+C/lmSpXhqWezI0qv8X0ZY6fi6U+ZtwvVQs8l+nqZ2S9Vzbip1nGIrTbAowR4ohOFuRrCX2ARqXfTvPhq9lg9xN55olCa/SdrQVzFXv617CEKfMiA6cbc933plq3SZTvkHgc1kj89ftZ43cQp6PeXEX7QuKGrB5c+Mgsp7UXfNxQTajQ61OCff11tRm1OtG6ouQWx+UeL967Uwq2MNwoVTcJDcHB/FNvPHURc8OK/5SgAq5FwhBdm1HR2FIQpqVmwTc4NtNWLIN15tRre4yyX+wjJLVJNcDt11z4Mhw= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e34a83a-2d14-434e-c445-08d633e39f69 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Oct 2018 03:50:04.2603 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR04MB0627 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgVHVkb3IsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWW9nZXNo IE5hcmF5YW4gR2F1cg0KPiBTZW50OiBXZWRuZXNkYXksIE9jdG9iZXIgMTcsIDIwMTggNzozOCBB TQ0KPiBUbzogJ0N5cmlsbGUgUGl0Y2hlbicgPGN5cmlsbGUucGl0Y2hlbkB3ZWRldjR1LmZyPjsg VHVkb3IgQW1iYXJ1cw0KPiA8dHVkb3IuYW1iYXJ1c0BtaWNyb2NoaXAuY29tPjsgbWFyZWsudmFz dXRAZ21haWwuY29tOw0KPiBkd213MkBpbmZyYWRlYWQub3JnOyBjb21wdXRlcnNmb3JwZWFjZUBn bWFpbC5jb207DQo+IGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbTsgcmljaGFyZEBub2QuYXQN Cj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IG5pY29sYXMuZmVycmVAbWljcm9j aGlwLmNvbTsNCj4gY3lyaWxsZS5waXRjaGVuQG1pY3JvY2hpcC5jb207IGxpbnV4LW10ZEBsaXN0 cy5pbmZyYWRlYWQub3JnOyBsaW51eC1hcm0tDQo+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn OyBDcmlzdGlhbi5CaXJzYW5AbWljcm9jaGlwLmNvbQ0KPiBTdWJqZWN0OiBSRTogW1BBVENIIHYz IDEvMl0gbXRkOiBzcGktbm9yOiBhZGQgc3VwcG9ydCB0byBub24tdW5pZm9ybSBTRkRQIFNQSQ0K PiBOT1IgZmxhc2ggbWVtb3JpZXMNCj4gDQo+IEhpIFR1ZG9yLA0KPiANCj4gPiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IEN5cmlsbGUgUGl0Y2hlbiBbbWFpbHRvOmN5cmls bGUucGl0Y2hlbkB3ZWRldjR1LmZyXQ0KPiA+IFNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTYsIDIw MTggMTA6MDQgUE0NCj4gPiBUbzogVHVkb3IgQW1iYXJ1cyA8dHVkb3IuYW1iYXJ1c0BtaWNyb2No aXAuY29tPjsgWW9nZXNoIE5hcmF5YW4gR2F1cg0KPiA+IDx5b2dlc2huYXJheWFuLmdhdXJAbnhw LmNvbT47IG1hcmVrLnZhc3V0QGdtYWlsLmNvbTsNCj4gPiBkd213MkBpbmZyYWRlYWQub3JnOyBj b21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb207DQo+ID4gYm9yaXMuYnJlemlsbG9uQGJvb3RsaW4u Y29tOyByaWNoYXJkQG5vZC5hdA0KPiA+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3Jn OyBuaWNvbGFzLmZlcnJlQG1pY3JvY2hpcC5jb207DQo+ID4gY3lyaWxsZS5waXRjaGVuQG1pY3Jv Y2hpcC5jb207IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiA+IGxpbnV4LWFybS0g a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IENyaXN0aWFuLkJpcnNhbkBtaWNyb2NoaXAuY29t DQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2MyAxLzJdIG10ZDogc3BpLW5vcjogYWRkIHN1cHBv cnQgdG8gbm9uLXVuaWZvcm0NCj4gPiBTRkRQIFNQSSBOT1IgZmxhc2ggbWVtb3JpZXMNCj4gPg0K PiA+IEhpIFR1ZG9yLA0KPiA+DQo+ID4gTGUgMTYvMTAvMjAxOCDDoCAxNzoxNCwgVHVkb3IgQW1i YXJ1cyBhIMOpY3JpdMKgOg0KPiA+ID4gSGksIFlvZ2VzaCwNCj4gPiA+DQo+ID4gPiBPbiAxMC8x Ni8yMDE4IDEyOjUxIFBNLCBZb2dlc2ggTmFyYXlhbiBHYXVyIHdyb3RlOg0KPiA+ID4+IEhpIFR1 ZG9yLA0KPiA+ID4+DQo+ID4gPj4gVGhpcyBwYXRjaCBpcyBicmVha2luZyB0aGUgMS00LTQgUmVh ZCBwcm90b2NvbCBmb3IgdGhlIHNwYW5zaW9uDQo+ID4gPj4gZmxhc2gNCj4gPiAiczI1Zmw1MTJz Ii4NCj4gPiA+Pg0KPiA+ID4+IFdpdGhvdXQgdGhpcyBwYXRjaCByZWFkIHJlcXVlc3QgY29tbWFu ZCBmb3IgUXVhZCBtb2RlLCA0LWJ5dGUNCj4gPiA+PiBlbmFibGUsIGlzDQo+ID4gY29taW5nIGFz IDB4RUMgaS5lLiBTUElOT1JfT1BfUkVBRF8xXzRfNF80Qi4NCj4gPiA+PiBCdXQgYWZ0ZXIgYXBw bHlpbmcgdGhpcyBwYXRjaCwgcmVhZCByZXF1ZXN0IGNvbW1hbmQgZm9yIFF1YWQgbW9kZQ0KPiA+ ID4+IGlzDQo+ID4gY29taW5nIGFzIDB4NkMgaS5lLiBTUElOT1JfT1BfUkVBRF8xXzFfNF80Qi4N Cj4gPiA+Pg0KPiA+ID4+IFRoaXMgZmxhc2ggYWxzbyBzdXBwb3J0cyBub24tdW5pZm9ybSBlcmFz ZS4NCj4gPiA+PiBDYW4geW91IHBsZWFzZSBjaGVjayBhbmQgcHJvdmlkZSBzb21lIHN1Z2dlc3Rp b24/DQo+ID4gPg0KPiA+ID4gSSBkb24ndCBoYXZlIHRoaXMgbWVtb3J5IHRvIHRlc3QgaXQsIGJ1 dCBJJ2xsIHRyeSB0byBoZWxwLg0KPiA+ID4NCj4gPiA+IERvZXMgczI1Zmw1MTJzIHN1cHBvcnQg bm9uLXVuaWZvcm0gZXJhc2U/IEknbSBsb29raW5nIGluDQo+ID4gPiBkYXRhc2hlZXRbMV0gYXQg SkVERUMgQkZQVCB0YWJsZSwgZHdvcmRzIDggYW5kIDksIHBhZ2UgMTMyLzE0NiBhbmQNCj4gPiA+ IGl0IGxvb2tzIGxpa2UgaXQgc3VwcG9ydHMganVzdCAyNTZLQiB1bmlmb3JtIGVyYXNlLg0KPiA+ ID4NCj4gPg0KPiBBY3R1YWxseSB0aGVyZSBpcyBubyBlbnRyeSBvZiBzMjVmczUxMnMgaW4gY3Vy cmVudCBzcGktbm9yLmMgZmlsZS4NCj4gRm9yIG15IGNvbm5lY3RlZCBmbGFzaCBwYXJ0LCBqZWRl YyBJRCByZWFkIHBvaW50cyB0byBzMjVmbDUxMnMuIEkgaGF2ZSBhc2tlZCBteQ0KPiBib2FyZCB0 ZWFtIHRvIGNvbmZpcm0gdGhlIG5hbWUgb2YgZXhhY3QgY29ubmVjdGVkIGZsYXNoIHBhcnQuDQoN CkN5cHJlc3MgY29ubmVjdGVkIGZsYXNoIHBhcnQgb24gbXkgdGFyZ2V0IGlzIFMyNUZTNTEyU0FH QkhWMjEwLg0KDQotLQ0KUmVnYXJkcw0KWW9nZXNoIEdhdXINCg0KPiBXaGVuIEkgY2hlY2sgdGhl IGRhdGEgc2hlZXQgb2YgczI1ZnM1MTJzLCBpdCBhbHNvIHBvaW50cyB0byB0aGUgc2FtZSBKZWRl YyBJRA0KPiBpbmZvcm1hdGlvbi4NCj4gICAgICAgeyAiczI1Zmw1MTJzIiwgIElORk8oMHgwMTAy MjAsIDB4NGQwMCwgMjU2ICogMTAyNCwgMjU2LCAuLi4ufQ0KPiANCj4gQnV0IGFzIHN0YXRlZCBl YXJsaWVyLCBpZiBJIHNraXAgcmVhZGluZyBTRkRQIG9yIHJlYWQgdXNpbmcgMS0xLTEgcHJvdG9j b2wgdGhlbiByZWFkDQo+IGFyZSBhbHdheXMgY29ycmVjdC4NCj4gRm9yIDEtNC00IHByb3RvY29s IHJlYWQgYXJlIHdyb25nIGFuZCBvbiBmdXJ0aGVyIGRlYnVnZ2luZyBmb3VuZCB0aGF0IFJlYWQN Cj4gY29kZSBvZiAweDZDIGlzIGJlaW5nIHNlbmQgYXMgb3Bjb2RlIGluc3RlYWQgb2YgMHhFQy4N Cj4gDQo+IElmIEkgcmV2ZXJ0IHRoaXMgcGF0Y2gsIHJlYWRzIGFyZSB3b3JraW5nIGZpbmUuDQo+ IA0KPiAtLQ0KPiBSZWdhcmRzDQo+IFlvZ2VzaCBHYXVyDQo+IA0KPiA+IHMyNWZTNTEycyBzdXBw b3J0cyBib3RoIHVuaWZvcm0gYW5kIG5vbiB1bmlmb3JtIGVyYXNlIG9wdGlvbnMgYnV0DQo+ID4g czI1Zkw1MTJzIGlzIGFsd2F5cyB1bmlmb3JtLiBMIGlzIGFuIG9sZCBtZW1vcnkgcGFydCwgUyBp cyBuZXdlci4NCj4gPg0KPiA+IEFsc28sIHRoZSA4dGggYW5kIDl0aCBXT1JEcyBvZiB0aGUgQmFz aWMgRmxhc2ggUGFyYW1ldGVyIFRhYmxlIGFsb25lDQo+ID4gY2FuJ3QgdGVsbCB5b3Ugd2hldGhl ciBvciBub3QgdGhlIG1lbW9yeSBwYXJ0IGNhbiBiZSBub24gdW5pZm9ybS4NCj4gPiBJZiB0aGUg bWVtb3J5IGNhbiBiZSBub24gdW5pZm9ybSB0aGVuIHRoZSBzZWN0b3IgZXJhc2UgbWFwIHRhYmxl IGlzDQo+ID4gbWFuZGF0b3J5LCBoZW5jZSB3aGVuIHRoZSB0YWJsZSBpcyBtaXNzaW5nIHlvdSBr bm93IHRoYXQgeW91ciBtZW1vcnkNCj4gPiBwYXJ0IGlzIGFsd2F5cyB1bmlmb3JtLg0KPiA+DQo+ ID4gQmVzdCByZWdhcmRzLA0KPiA+DQo+ID4gQ3lyaWxsZQ0KPiA+DQo+ID4gPiBUaGFua3MsDQo+ ID4gPiB0YQ0KPiA+ID4NCj4gPiA+IFsxXQ0KPiA+ID4NCj4gaHR0cHM6Ly9lbWVhMDEuc2FmZWxp bmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGd3d3Lg0KPiA+ID4N Cj4gPg0KPiBjeXByZXNzLmNvbSUyRmZpbGUlMkYxNzc5NzElMkZkb3dubG9hZCZhbXA7ZGF0YT0w MiU3QzAxJTdDeW9nZXNobg0KPiA+IGFyYXlhDQo+ID4gPg0KPiA+DQo+IG4uZ2F1ciU0MG54cC5j b20lN0M3NmU3ZTE1NTVmNGE0Y2RhMzc4MDA4ZDYzMzg1NDgwYiU3QzY4NmVhMWQzYmMyDQo+ID4g YjRjNmYNCj4gPiA+DQo+ID4NCj4gYTkyY2Q5OWM1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NzUzMDQ0 ODc2MTk5MTU1JmFtcDtzZGF0YT1jaW9DOThFSA0KPiA+IE9HbEZiZw0KPiA+ID4gWFBob0lJSjcy SzNKck5VbnpBMXBZaFNCOWpEd2clM0QmYW1wO3Jlc2VydmVkPTANCj4gPiA+DQo+ID4gPj4NCj4g PiA+PiAtLQ0KPiA+ID4+IFJlZ2FyZHMNCj4gPiA+PiBZb2dlc2ggR2F1cg0KPiA+ID4+DQo+ID4g Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPj4+IEZyb206IGxpbnV4LW10ZCBb bWFpbHRvOmxpbnV4LW10ZC1ib3VuY2VzQGxpc3RzLmluZnJhZGVhZC5vcmddIE9uDQo+ID4gPj4+ IEJlaGFsZiBPZiBUdWRvciBBbWJhcnVzDQo+ID4gPj4+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJl ciAxMSwgMjAxOCA5OjEwIFBNDQo+ID4gPj4+IFRvOiBtYXJlay52YXN1dEBnbWFpbC5jb207IGR3 bXcyQGluZnJhZGVhZC5vcmc7DQo+ID4gPj4+IGNvbXB1dGVyc2ZvcnBlYWNlQGdtYWlsLmNvbTsg Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tOw0KPiA+ID4+PiByaWNoYXJkQG5vZC5hdA0KPiA+ ID4+PiBDYzogVHVkb3IgQW1iYXJ1cyA8dHVkb3IuYW1iYXJ1c0BtaWNyb2NoaXAuY29tPjsgbGlu dXgtDQo+ID4gPj4+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IG5pY29sYXMuZmVycmVAbWljcm9j aGlwLmNvbTsNCj4gPiA+Pj4gY3lyaWxsZS5waXRjaGVuQG1pY3JvY2hpcC5jb207IGxpbnV4LW10 ZEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiA+ID4+PiBsaW51eC1hcm0tIGtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnOw0KPiA+ID4+PiBDcmlzdGlhbi5CaXJzYW5AbWljcm9jaGlwLmNvbQ0KPiA+ ID4+PiBTdWJqZWN0OiBbUEFUQ0ggdjMgMS8yXSBtdGQ6IHNwaS1ub3I6IGFkZCBzdXBwb3J0IHRv IG5vbi11bmlmb3JtDQo+ID4gPj4+IFNGRFAgU1BJIE5PUiBmbGFzaCBtZW1vcmllcw0KPiA+ID4+ Pg0KPiA+ID4+PiBCYXNlZCBvbiBDeXJpbGxlIFBpdGNoZW4ncyBwYXRjaA0KPiA+ID4+PiBodHRw czovL2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNB JTJGJTINCj4gPiA+Pj4gRmwNCj4gPiA+Pj4ga21sLm9yDQo+ID4gPj4+DQo+ID4NCj4gZyUyRmxr bWwlMkYyMDE3JTJGMyUyRjIyJTJGOTM1JmFtcDtkYXRhPTAyJTdDMDElN0N5b2dlc2huYXJheWFu Lg0KPiA+ID4+Pg0KPiA+DQo+IGdhdXIlNDBueHAuY29tJTdDM2M3ODJlNTJiN2ZkNGE4YjlhZjAw OGQ2MTdmZDUxNTQlN0M2ODZlYTFkM2JjMmI0DQo+ID4gPj4+DQo+ID4gYzZmYTkyY2Q5OWM1YzMw MTYzNSU3QzAlN0MwJTdDNjM2NzIyNzc0MTA4NzE4NzgyJmFtcDtzZGF0YT1zenljJQ0KPiA+ID4+ Pg0KPiA+IDJGVHVtRzZlWUFtQmQwb1czSUw3djF5TGg5RTFTQVpxTCUyQkNXY3pPQSUzRCZhbXA7 cmVzZXJ2ZWQ9MC4NCj4gPiA+Pj4NCj4gPiA+Pj4gVGhpcyBwYXRjaCBpcyBhIHRyYW5zaXRpb25h bCBwYXRjaCBpbiBpbnRyb2R1Y2luZyAgdGhlIHN1cHBvcnQgb2YNCj4gPiA+Pj4gU0ZEUCBTUEkg bWVtb3JpZXMgd2l0aCBub24tdW5pZm9ybSBlcmFzZSBzaXplcyBsaWtlIFNwYW5zaW9uIHMyNWZz NTEycy4NCj4gPiA+Pj4gTm9uLXVuaWZvcm0gZXJhc2UgbWFwcyB3aWxsIGJlIHVzZWQgbGF0ZXIg d2hlbiBpbml0aWFsaXplZCBiYXNlZA0KPiA+ID4+PiBvbiB0aGUgU0ZEUCBkYXRhLg0KPiA+ID4+ Pg0KPiA+ID4+PiBJbnRyb2R1Y2UgdGhlIG1lbW9yeSBlcmFzZSBtYXAgd2hpY2ggc3BsaXRzIHRo ZSBtZW1vcnkgYXJyYXkgaW50bw0KPiA+ID4+PiBvbmUgb3IgbWFueSBlcmFzZSByZWdpb25zLiBF YWNoIGVyYXNlIHJlZ2lvbiBzdXBwb3J0cyB1cCB0byA0DQo+ID4gPj4+IGVyYXNlIHR5cGVzLCBh cyBkZWZpbmVkIGJ5IHRoZSBKRURFQyBKRVNEMjE2QiAoU0ZEUCkgc3BlY2lmaWNhdGlvbi4NCj4g PiA+Pj4NCj4gPiA+Pj4gVG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSwgdGhlIGVyYXNlIG1hcCBv ZiB1bmlmb3JtIFNQSSBOT1IgZmxhc2gNCj4gPiA+Pj4gbWVtb3JpZXMgaXMgaW5pdGlhbGl6ZWQg c28gaXQgY29udGFpbnMgb25seSBvbmUgZXJhc2UgcmVnaW9uIGFuZA0KPiA+ID4+PiB0aGlzIGVy YXNlIHJlZ2lvbiBzdXBwb3J0cyBvbmx5IG9uZSBlcmFzZSBjb21tYW5kLiBIZW5jZSBhIHNpbmds ZQ0KPiA+ID4+PiBzaXplIGlzIHVzZWQgdG8gZXJhc2UgYW55IHNlY3Rvci9ibG9jayBvZiB0aGUg bWVtb3J5Lg0KPiA+ID4+Pg0KPiA+ID4+PiBCZXNpZGVzLCBzaW5jZSB0aGUgYWxnb3JpdGhtIHVz ZWQgdG8gZXJhc2Ugc2VjdG9ycyBvbiBub24tdW5pZm9ybQ0KPiA+ID4+PiBTUEkgTk9SIGZsYXNo IG1lbW9yaWVzIGlzIHF1aXRlIGV4cGVuc2l2ZSwgd2hlbiBwb3NzaWJsZSwgdGhlDQo+ID4gPj4+ IGVyYXNlIG1hcCBpcyB0dW5lZCB0byBjb21lIGJhY2sgdG8gdGhlIHVuaWZvcm0gY2FzZS4NCj4g PiA+Pj4NCj4gPiA+Pj4gVGhlICdlcmFzZSB3aXRoIHRoZSBiZXN0IGNvbW1hbmQsIG1vdmUgZm9y d2FyZCBhbmQgcmVwZWF0Jw0KPiA+ID4+PiBhcHByb2FjaCB3YXMgc3VnZ2VzdGVkIGJ5IENyaXN0 aWFuIEJpcnNhbiBpbiBhIGJyYWluc3Rvcm0gc2Vzc2lvbiwgc286DQo+ID4gPj4+DQo+ID4gPj4+ IFN1Z2dlc3RlZC1ieTogQ3Jpc3RpYW4gQmlyc2FuIDxjcmlzdGlhbi5iaXJzYW5AbWljcm9jaGlw LmNvbT4NCj4gPiA+Pj4gU2lnbmVkLW9mZi1ieTogVHVkb3IgQW1iYXJ1cyA8dHVkb3IuYW1iYXJ1 c0BtaWNyb2NoaXAuY29tPg0KPiA+ID4+PiAtLS0NCj4gPiA+Pj4gIGRyaXZlcnMvbXRkL3NwaS1u b3Ivc3BpLW5vci5jIHwgNTk0DQo+ID4gPj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLQ0KPiA+ID4+PiAgaW5jbHVkZS9saW51eC9tdGQvc3BpLW5vci5oICAgfCAx MDcgKysrKysrKysNCj4gPiA+Pj4gIDIgZmlsZXMgY2hhbmdlZCwgNjU5IGluc2VydGlvbnMoKyks IDQyIGRlbGV0aW9ucygtKQ0KPiA+ID4+Pg0KPiA+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t dGQvc3BpLW5vci9zcGktbm9yLmMNCj4gPiA+Pj4gYi9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1u b3IuYyBpbmRleA0KPiA+ID4+PiBkYzg3NTdlLi40Njg3MzQ1IDEwMDY0NA0KPiA+ID4+PiAtLS0g YS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYw0KPiA+ID4+PiArKysgYi9kcml2ZXJzL210 ZC9zcGktbm9yL3NwaS1ub3IuYw0KPiA+ID4+PiBAQCAtMTgsNiArMTgsNyBAQA0KPiA+ID4+PiAg I2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPg0KPiA+ID4+PiAgI2luY2x1ZGUgPGxpbnV4L3NpemVz Lmg+DQo+ID4gPj4+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ID4+PiArI2luY2x1ZGUg PGxpbnV4L3NvcnQuaD4NCj4gPiA+Pj4NCj4gPiA+Pj4gICNpbmNsdWRlIDxsaW51eC9tdGQvbXRk Lmg+DQo+ID4gPj4+ICAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiA+Pj4gQEAg LTI2MSw2ICsyNjIsMTggQEAgc3RhdGljIHZvaWQgc3BpX25vcl9zZXRfNGJ5dGVfb3Bjb2Rlcyhz dHJ1Y3QNCj4gPiA+Pj4gc3BpX25vciAqbm9yLA0KPiA+ID4+PiAgCW5vci0+cmVhZF9vcGNvZGUg PSBzcGlfbm9yX2NvbnZlcnRfM3RvNF9yZWFkKG5vci0+cmVhZF9vcGNvZGUpOw0KPiA+ID4+PiAg CW5vci0+cHJvZ3JhbV9vcGNvZGUgPSBzcGlfbm9yX2NvbnZlcnRfM3RvNF9wcm9ncmFtKG5vci0N Cj4gPiA+Pj4+IHByb2dyYW1fb3Bjb2RlKTsNCj4gPiA+Pj4gIAlub3ItPmVyYXNlX29wY29kZSA9 DQo+ID4gPj4+IHNwaV9ub3JfY29udmVydF8zdG80X2VyYXNlKG5vci0+ZXJhc2Vfb3Bjb2RlKTsN Cj4gPiA+Pj4gKw0KPiA+ID4+PiArCWlmICghc3BpX25vcl9oYXNfdW5pZm9ybV9lcmFzZShub3Ip KSB7DQo+ID4gPj4+ICsJCXN0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAqbWFwID0gJm5vci0+ZXJh c2VfbWFwOw0KPiA+ID4+PiArCQlzdHJ1Y3Qgc3BpX25vcl9lcmFzZV90eXBlICplcmFzZTsNCj4g PiA+Pj4gKwkJaW50IGk7DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKwkJZm9yIChpID0gMDsgaSA8IFNO T1JfRVJBU0VfVFlQRV9NQVg7IGkrKykgew0KPiA+ID4+PiArCQkJZXJhc2UgPSAmbWFwLT5lcmFz ZV90eXBlW2ldOw0KPiA+ID4+PiArCQkJZXJhc2UtPm9wY29kZSA9DQo+ID4gPj4+ICsJCQkJc3Bp X25vcl9jb252ZXJ0XzN0bzRfZXJhc2UoZXJhc2UtPm9wY29kZSk7DQo+ID4gPj4+ICsJCX0NCj4g PiA+Pj4gKwl9DQo+ID4gPj4+ICB9DQo+ID4gPj4+DQo+ID4gPj4+ICAvKiBFbmFibGUvZGlzYWJs ZSA0LWJ5dGUgYWRkcmVzc2luZyBtb2RlLiAqLyBAQCAtNDk5LDYgKzUxMiwyNzUNCj4gPiA+Pj4g QEAgc3RhdGljIGludCBzcGlfbm9yX2VyYXNlX3NlY3RvcihzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1 MzIgYWRkcikNCj4gPiA+Pj4gfQ0KPiA+ID4+Pg0KPiA+ID4+PiAgLyoNCj4gPiA+Pj4gKyAqIHNw aV9ub3JfZGl2X2J5X2VyYXNlX3NpemUoKSAtIGNhbGN1bGF0ZSByZW1haW5kZXIgYW5kIHVwZGF0 ZQ0KPiA+ID4+PiArIG5ldw0KPiA+IGRpdmlkZW5kDQo+ID4gPj4+ICsgKiBAZXJhc2U6CXBvaW50 ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSBTUEkgTk9SIGVyYXNlDQo+IHR5cGUN Cj4gPiA+Pj4gKyAqIEBkaXZpZGVuZDoJZGl2aWRlbmQgdmFsdWUNCj4gPiA+Pj4gKyAqIEByZW1h aW5kZXI6CXBvaW50ZXIgdG8gdTMyIHJlbWFpbmRlciAod2lsbCBiZSB1cGRhdGVkKQ0KPiA+ID4+ PiArICoNCj4gPiA+Pj4gKyAqIFJldHVybnMgdHdvIHZhbHVlczogcmVtYWluZGVyIGFuZCB0aGUg bmV3IGRpdmlkZW5kICAqLyBzdGF0aWMNCj4gPiA+Pj4gK3U2NCBzcGlfbm9yX2Rpdl9ieV9lcmFz ZV9zaXplKGNvbnN0IHN0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUgKmVyYXNlLA0KPiA+ID4+PiAr CQkJCSAgICAgdTY0IGRpdmlkZW5kLCB1MzIgKnJlbWFpbmRlcikgew0KPiA+ID4+PiArCS8qIEpF REVDIEpFU0QyMTZCIFN0YW5kYXJkIGltcG9zZXMgZXJhc2Ugc2l6ZXMgdG8gYmUgcG93ZXIgb2Yg Mi4gKi8NCj4gPiA+Pj4gKwkqcmVtYWluZGVyID0gKHUzMilkaXZpZGVuZCAmIGVyYXNlLT5zaXpl X21hc2s7DQo+ID4gPj4+ICsJcmV0dXJuIGRpdmlkZW5kID4+IGVyYXNlLT5zaXplX3NoaWZ0OyB9 DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKy8qDQo+ID4gPj4+ICsgKiBzcGlfbm9yX2ZpbmRfYmVzdF9l cmFzZV90eXBlKCkgLSBmaW5kIHRoZSBiZXN0IGVyYXNlIHR5cGUgZm9yDQo+ID4gPj4+ICt0aGUg Z2l2ZW4NCj4gPiA+Pj4gKyAqIG9mZnNldCBpbiB0aGUgc2VyaWFsIGZsYXNoIG1lbW9yeSBhbmQg dGhlIG51bWJlciBvZiBieXRlcyB0byBlcmFzZS4NCj4gPiA+Pj4gK1RoZQ0KPiA+ID4+PiArICog cmVnaW9uIGluIHdoaWNoIHRoZSBhZGRyZXNzIGZpdHMgaXMgZXhwZWN0ZWQgdG8gYmUgcHJvdmlk ZWQuDQo+ID4gPj4+ICsgKiBAbWFwOgl0aGUgZXJhc2UgbWFwIG9mIHRoZSBTUEkgTk9SDQo+ID4g Pj4+ICsgKiBAcmVnaW9uOglwb2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEg U1BJIE5PUiBlcmFzZQ0KPiA+IHJlZ2lvbg0KPiA+ID4+PiArICogQGFkZHI6CW9mZnNldCBpbiB0 aGUgc2VyaWFsIGZsYXNoIG1lbW9yeQ0KPiA+ID4+PiArICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVz IHRvIGVyYXNlDQo+ID4gPj4+ICsgKg0KPiA+ID4+PiArICogUmV0dXJucyBhIHBvaW50ZXIgdG8g dGhlIGJlc3QgZml0dGVkIGVyYXNlIHR5cGUsIE5VTEwgb3RoZXJ3aXNlLg0KPiA+ID4+PiArICov DQo+ID4gPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqDQo+ID4g Pj4+ICtzcGlfbm9yX2ZpbmRfYmVzdF9lcmFzZV90eXBlKGNvbnN0IHN0cnVjdCBzcGlfbm9yX2Vy YXNlX21hcCAqbWFwLA0KPiA+ID4+PiArCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3BpX25vcl9lcmFz ZV9yZWdpb24gKnJlZ2lvbiwNCj4gPiA+Pj4gKwkJCSAgICAgdTY0IGFkZHIsIHUzMiBsZW4pDQo+ ID4gPj4+ICt7DQo+ID4gPj4+ICsJY29uc3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqZXJh c2U7DQo+ID4gPj4+ICsJdTMyIHJlbTsNCj4gPiA+Pj4gKwlpbnQgaTsNCj4gPiA+Pj4gKwl1OCBl cmFzZV9tYXNrID0gcmVnaW9uLT5vZmZzZXQgJiBTTk9SX0VSQVNFX1RZUEVfTUFTSzsNCj4gPiA+ Pj4gKw0KPiA+ID4+PiArCS8qDQo+ID4gPj4+ICsJICogRXJhc2UgdHlwZXMgYXJlIG9yZGVyZWQg Ynkgc2l6ZSwgd2l0aCB0aGUgYmlnZ2VzdCBlcmFzZSB0eXBlIGF0DQo+ID4gPj4+ICsJICogaW5k ZXggMC4NCj4gPiA+Pj4gKwkgKi8NCj4gPiA+Pj4gKwlmb3IgKGkgPSBTTk9SX0VSQVNFX1RZUEVf TUFYIC0gMTsgaSA+PSAwOyBpLS0pIHsNCj4gPiA+Pj4gKwkJLyogRG9lcyB0aGUgZXJhc2UgcmVn aW9uIHN1cHBvcnQgdGhlIHRlc3RlZCBlcmFzZSB0eXBlPyAqLw0KPiA+ID4+PiArCQlpZiAoIShl cmFzZV9tYXNrICYgQklUKGkpKSkNCj4gPiA+Pj4gKwkJCWNvbnRpbnVlOw0KPiA+ID4+PiArDQo+ ID4gPj4+ICsJCWVyYXNlID0gJm1hcC0+ZXJhc2VfdHlwZVtpXTsNCj4gPiA+Pj4gKw0KPiA+ID4+ PiArCQkvKiBEb24ndCBlcmFzZSBtb3JlIHRoYW4gd2hhdCB0aGUgdXNlciBoYXMgYXNrZWQgZm9y LiAqLw0KPiA+ID4+PiArCQlpZiAoZXJhc2UtPnNpemUgPiBsZW4pDQo+ID4gPj4+ICsJCQljb250 aW51ZTsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArCQkvKiBBbGlnbm1lbnQgaXMgbm90IG1hbmRhdG9y eSBmb3Igb3ZlcmxhaWQgcmVnaW9ucyAqLw0KPiA+ID4+PiArCQlpZiAocmVnaW9uLT5vZmZzZXQg JiBTTk9SX09WRVJMQUlEX1JFR0lPTikNCj4gPiA+Pj4gKwkJCXJldHVybiBlcmFzZTsNCj4gPiA+ Pj4gKw0KPiA+ID4+PiArCQlzcGlfbm9yX2Rpdl9ieV9lcmFzZV9zaXplKGVyYXNlLCBhZGRyLCAm cmVtKTsNCj4gPiA+Pj4gKwkJaWYgKHJlbSkNCj4gPiA+Pj4gKwkJCWNvbnRpbnVlOw0KPiA+ID4+ PiArCQllbHNlDQo+ID4gPj4+ICsJCQlyZXR1cm4gZXJhc2U7DQo+ID4gPj4+ICsJfQ0KPiA+ID4+ PiArDQo+ID4gPj4+ICsJcmV0dXJuIE5VTEw7DQo+ID4gPj4+ICt9DQo+ID4gPj4+ICsNCj4gPiA+ Pj4gKy8qDQo+ID4gPj4+ICsgKiBzcGlfbm9yX3JlZ2lvbl9uZXh0KCkgLSBnZXQgdGhlIG5leHQg c3BpIG5vciByZWdpb24NCj4gPiA+Pj4gKyAqIEByZWdpb246CXBvaW50ZXIgdG8gYSBzdHJ1Y3R1 cmUgdGhhdCBkZXNjcmliZXMgYSBTUEkgTk9SIGVyYXNlDQo+ID4gcmVnaW9uDQo+ID4gPj4+ICsg Kg0KPiA+ID4+PiArICogUmV0dXJucyB0aGUgbmV4dCBzcGkgbm9yIHJlZ2lvbiBvciBOVUxMIGlm IGxhc3QgcmVnaW9uLg0KPiA+ID4+PiArICovDQo+ID4gPj4+ICtzdGF0aWMgc3RydWN0IHNwaV9u b3JfZXJhc2VfcmVnaW9uICogc3BpX25vcl9yZWdpb25fbmV4dChzdHJ1Y3QNCj4gPiA+Pj4gK3Nw aV9ub3JfZXJhc2VfcmVnaW9uICpyZWdpb24pIHsNCj4gPiA+Pj4gKwlpZiAoc3BpX25vcl9yZWdp b25faXNfbGFzdChyZWdpb24pKQ0KPiA+ID4+PiArCQlyZXR1cm4gTlVMTDsNCj4gPiA+Pj4gKwly ZWdpb24rKzsNCj4gPiA+Pj4gKwlyZXR1cm4gcmVnaW9uOw0KPiA+ID4+PiArfQ0KPiA+ID4+PiAr DQo+ID4gPj4+ICsvKg0KPiA+ID4+PiArICogc3BpX25vcl9maW5kX2VyYXNlX3JlZ2lvbigpIC0g ZmluZCB0aGUgcmVnaW9uIG9mIHRoZSBzZXJpYWwNCj4gPiA+Pj4gK2ZsYXNoIG1lbW9yeSBpbg0K PiA+ID4+PiArICogd2hpY2ggdGhlIG9mZnNldCBmaXRzDQo+ID4gPj4+ICsgKiBAbWFwOgl0aGUg ZXJhc2UgbWFwIG9mIHRoZSBTUEkgTk9SDQo+ID4gPj4+ICsgKiBAYWRkcjoJb2Zmc2V0IGluIHRo ZSBzZXJpYWwgZmxhc2ggbWVtb3J5DQo+ID4gPj4+ICsgKg0KPiA+ID4+PiArICogUmV0dXJucyBw b2ludGVyIHRvIHRoZSBzcGlfbm9yX2VyYXNlX3JlZ2lvbiBzdHJ1Y3QsDQo+ID4gPj4+ICtFUlJf UFRSKC1lcnJubykNCj4gPiA+Pj4gKyAqIG90aGVyd2lzZS4NCj4gPiA+Pj4gKyAqLw0KPiA+ID4+ PiArc3RhdGljIHN0cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lvbiAqDQo+ID4gPj4+ICtzcGlfbm9y X2ZpbmRfZXJhc2VfcmVnaW9uKGNvbnN0IHN0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAqbWFwLA0K PiA+ID4+PiArdTY0DQo+ID4gPj4+ICthZGRyKSB7DQo+ID4gPj4+ICsJc3RydWN0IHNwaV9ub3Jf ZXJhc2VfcmVnaW9uICpyZWdpb24gPSBtYXAtPnJlZ2lvbnM7DQo+ID4gPj4+ICsJdTY0IHJlZ2lv bl9zdGFydCA9IHJlZ2lvbi0+b2Zmc2V0ICYgflNOT1JfRVJBU0VfRkxBR1NfTUFTSzsNCj4gPiA+ Pj4gKwl1NjQgcmVnaW9uX2VuZCA9IHJlZ2lvbl9zdGFydCArIHJlZ2lvbi0+c2l6ZTsNCj4gPiA+ Pj4gKw0KPiA+ID4+PiArCXdoaWxlIChhZGRyIDwgcmVnaW9uX3N0YXJ0IHx8IGFkZHIgPj0gcmVn aW9uX2VuZCkgew0KPiA+ID4+PiArCQlyZWdpb24gPSBzcGlfbm9yX3JlZ2lvbl9uZXh0KHJlZ2lv bik7DQo+ID4gPj4+ICsJCWlmICghcmVnaW9uKQ0KPiA+ID4+PiArCQkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKwkJcmVnaW9uX3N0YXJ0ID0gcmVnaW9uLT5v ZmZzZXQgJiB+U05PUl9FUkFTRV9GTEFHU19NQVNLOw0KPiA+ID4+PiArCQlyZWdpb25fZW5kID0g cmVnaW9uX3N0YXJ0ICsgcmVnaW9uLT5zaXplOw0KPiA+ID4+PiArCX0NCj4gPiA+Pj4gKw0KPiA+ ID4+PiArCXJldHVybiByZWdpb247DQo+ID4gPj4+ICt9DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKy8q DQo+ID4gPj4+ICsgKiBzcGlfbm9yX2luaXRfZXJhc2VfY21kKCkgLSBpbml0aWFsaXplIGFuIGVy YXNlIGNvbW1hbmQNCj4gPiA+Pj4gKyAqIEByZWdpb246CXBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUg dGhhdCBkZXNjcmliZXMgYSBTUEkgTk9SIGVyYXNlDQo+ID4gcmVnaW9uDQo+ID4gPj4+ICsgKiBA ZXJhc2U6CXBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSBTUEkgTk9SIGVy YXNlDQo+IHR5cGUNCj4gPiA+Pj4gKyAqDQo+ID4gPj4+ICsgKiBSZXR1cm5zIHRoZSBwb2ludGVy IHRvIHRoZSBhbGxvY2F0ZWQgZXJhc2UgY29tbWFuZCwNCj4gPiA+Pj4gK0VSUl9QVFIoLWVycm5v KQ0KPiA+ID4+PiArICogb3RoZXJ3aXNlLg0KPiA+ID4+PiArICovDQo+ID4gPj4+ICtzdGF0aWMg c3RydWN0IHNwaV9ub3JfZXJhc2VfY29tbWFuZCAqDQo+ID4gPj4+ICtzcGlfbm9yX2luaXRfZXJh c2VfY21kKGNvbnN0IHN0cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lvbiAqcmVnaW9uLA0KPiA+ID4+ PiArCQkgICAgICAgY29uc3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqZXJhc2UpIHsNCj4g PiA+Pj4gKwlzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9jb21tYW5kICpjbWQ7DQo+ID4gPj4+ICsNCj4g PiA+Pj4gKwljbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7DQo+ID4gPj4+ ICsJaWYgKCFjbWQpDQo+ID4gPj4+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ID4+ PiArDQo+ID4gPj4+ICsJSU5JVF9MSVNUX0hFQUQoJmNtZC0+bGlzdCk7DQo+ID4gPj4+ICsJY21k LT5vcGNvZGUgPSBlcmFzZS0+b3Bjb2RlOw0KPiA+ID4+PiArCWNtZC0+Y291bnQgPSAxOw0KPiA+ ID4+PiArDQo+ID4gPj4+ICsJaWYgKHJlZ2lvbi0+b2Zmc2V0ICYgU05PUl9PVkVSTEFJRF9SRUdJ T04pDQo+ID4gPj4+ICsJCWNtZC0+c2l6ZSA9IHJlZ2lvbi0+c2l6ZTsNCj4gPiA+Pj4gKwllbHNl DQo+ID4gPj4+ICsJCWNtZC0+c2l6ZSA9IGVyYXNlLT5zaXplOw0KPiA+ID4+PiArDQo+ID4gPj4+ ICsJcmV0dXJuIGNtZDsNCj4gPiA+Pj4gK30NCj4gPiA+Pj4gKw0KPiA+ID4+PiArLyoNCj4gPiA+ Pj4gKyAqIHNwaV9ub3JfZGVzdHJveV9lcmFzZV9jbWRfbGlzdCgpIC0gZGVzdHJveSBlcmFzZSBj b21tYW5kIGxpc3QNCj4gPiA+Pj4gKyAqIEBlcmFzZV9saXN0OglsaXN0IG9mIGVyYXNlIGNvbW1h bmRzDQo+ID4gPj4+ICsgKi8NCj4gPiA+Pj4gK3N0YXRpYyB2b2lkIHNwaV9ub3JfZGVzdHJveV9l cmFzZV9jbWRfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkDQo+ID4gPj4+ICsqZXJhc2VfbGlzdCkgew0K PiA+ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX2NvbW1hbmQgKmNtZCwgKm5leHQ7DQo+ID4g Pj4+ICsNCj4gPiA+Pj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCBuZXh0LCBlcmFz ZV9saXN0LCBsaXN0KSB7DQo+ID4gPj4+ICsJCWxpc3RfZGVsKCZjbWQtPmxpc3QpOw0KPiA+ID4+ PiArCQlrZnJlZShjbWQpOw0KPiA+ID4+PiArCX0NCj4gPiA+Pj4gK30NCj4gPiA+Pj4gKw0KPiA+ ID4+PiArLyoNCj4gPiA+Pj4gKyAqIHNwaV9ub3JfaW5pdF9lcmFzZV9jbWRfbGlzdCgpIC0gaW5p dGlhbGl6ZSBlcmFzZSBjb21tYW5kIGxpc3QNCj4gPiA+Pj4gKyAqIEBub3I6CXBvaW50ZXIgdG8g YSAnc3RydWN0IHNwaV9ub3InDQo+ID4gPj4+ICsgKiBAZXJhc2VfbGlzdDoJbGlzdCBvZiBlcmFz ZSBjb21tYW5kcyB0byBiZSBleGVjdXRlZCBvbmNlIHdlDQo+ID4gdmFsaWRhdGUgdGhhdA0KPiA+ ID4+PiB0aGUNCj4gPiA+Pj4gKyAqCQllcmFzZSBjYW4gYmUgcGVyZm9ybWVkDQo+ID4gPj4+ICsg KiBAYWRkcjoJb2Zmc2V0IGluIHRoZSBzZXJpYWwgZmxhc2ggbWVtb3J5DQo+ID4gPj4+ICsgKiBA bGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gZXJhc2UNCj4gPiA+Pj4gKyAqDQo+ID4gPj4+ICsgKiBC dWlsZHMgdGhlIGxpc3Qgb2YgYmVzdCBmaXR0ZWQgZXJhc2UgY29tbWFuZHMgYW5kIHZlcmlmaWVz IGlmDQo+ID4gPj4+ICt0aGUgZXJhc2UgY2FuDQo+ID4gPj4+ICsgKiBiZSBwZXJmb3JtZWQuDQo+ ID4gPj4+ICsgKg0KPiA+ID4+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhl cndpc2UuDQo+ID4gPj4+ICsgKi8NCj4gPiA+Pj4gK3N0YXRpYyBpbnQgc3BpX25vcl9pbml0X2Vy YXNlX2NtZF9saXN0KHN0cnVjdCBzcGlfbm9yICpub3IsDQo+ID4gPj4+ICsJCQkJICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgKmVyYXNlX2xpc3QsDQo+ID4gPj4+ICsJCQkJICAgICAgIHU2NCBhZGRy LCB1MzIgbGVuKQ0KPiA+ID4+PiArew0KPiA+ID4+PiArCWNvbnN0IHN0cnVjdCBzcGlfbm9yX2Vy YXNlX21hcCAqbWFwID0gJm5vci0+ZXJhc2VfbWFwOw0KPiA+ID4+PiArCWNvbnN0IHN0cnVjdCBz cGlfbm9yX2VyYXNlX3R5cGUgKmVyYXNlLCAqcHJldl9lcmFzZSA9IE5VTEw7DQo+ID4gPj4+ICsJ c3RydWN0IHNwaV9ub3JfZXJhc2VfcmVnaW9uICpyZWdpb247DQo+ID4gPj4+ICsJc3RydWN0IHNw aV9ub3JfZXJhc2VfY29tbWFuZCAqY21kID0gTlVMTDsNCj4gPiA+Pj4gKwl1NjQgcmVnaW9uX2Vu ZDsNCj4gPiA+Pj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArCXJl Z2lvbiA9IHNwaV9ub3JfZmluZF9lcmFzZV9yZWdpb24obWFwLCBhZGRyKTsNCj4gPiA+Pj4gKwlp ZiAoSVNfRVJSKHJlZ2lvbikpDQo+ID4gPj4+ICsJCXJldHVybiBQVFJfRVJSKHJlZ2lvbik7DQo+ ID4gPj4+ICsNCj4gPiA+Pj4gKwlyZWdpb25fZW5kID0gc3BpX25vcl9yZWdpb25fZW5kKHJlZ2lv bik7DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKwl3aGlsZSAobGVuKSB7DQo+ID4gPj4+ICsJCWVyYXNl ID0gc3BpX25vcl9maW5kX2Jlc3RfZXJhc2VfdHlwZShtYXAsIHJlZ2lvbiwgYWRkciwgbGVuKTsN Cj4gPiA+Pj4gKwkJaWYgKCFlcmFzZSkNCj4gPiA+Pj4gKwkJCWdvdG8gZGVzdHJveV9lcmFzZV9j bWRfbGlzdDsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArCQlpZiAocHJldl9lcmFzZSAhPSBlcmFzZSB8 fA0KPiA+ID4+PiArCQkgICAgcmVnaW9uLT5vZmZzZXQgJiBTTk9SX09WRVJMQUlEX1JFR0lPTikg ew0KPiA+ID4+PiArCQkJY21kID0gc3BpX25vcl9pbml0X2VyYXNlX2NtZChyZWdpb24sIGVyYXNl KTsNCj4gPiA+Pj4gKwkJCWlmIChJU19FUlIoY21kKSkgew0KPiA+ID4+PiArCQkJCXJldCA9IFBU Ul9FUlIoY21kKTsNCj4gPiA+Pj4gKwkJCQlnb3RvIGRlc3Ryb3lfZXJhc2VfY21kX2xpc3Q7DQo+ ID4gPj4+ICsJCQl9DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKwkJCWxpc3RfYWRkX3RhaWwoJmNtZC0+ bGlzdCwgZXJhc2VfbGlzdCk7DQo+ID4gPj4+ICsJCX0gZWxzZSB7DQo+ID4gPj4+ICsJCQljbWQt PmNvdW50Kys7DQo+ID4gPj4+ICsJCX0NCj4gPiA+Pj4gKw0KPiA+ID4+PiArCQlhZGRyICs9IGNt ZC0+c2l6ZTsNCj4gPiA+Pj4gKwkJbGVuIC09IGNtZC0+c2l6ZTsNCj4gPiA+Pj4gKw0KPiA+ID4+ PiArCQlpZiAobGVuICYmIGFkZHIgPj0gcmVnaW9uX2VuZCkgew0KPiA+ID4+PiArCQkJcmVnaW9u ID0gc3BpX25vcl9yZWdpb25fbmV4dChyZWdpb24pOw0KPiA+ID4+PiArCQkJaWYgKCFyZWdpb24p DQo+ID4gPj4+ICsJCQkJZ290byBkZXN0cm95X2VyYXNlX2NtZF9saXN0Ow0KPiA+ID4+PiArCQkJ cmVnaW9uX2VuZCA9IHNwaV9ub3JfcmVnaW9uX2VuZChyZWdpb24pOw0KPiA+ID4+PiArCQl9DQo+ ID4gPj4+ICsNCj4gPiA+Pj4gKwkJcHJldl9lcmFzZSA9IGVyYXNlOw0KPiA+ID4+PiArCX0NCj4g PiA+Pj4gKw0KPiA+ID4+PiArCXJldHVybiAwOw0KPiA+ID4+PiArDQo+ID4gPj4+ICtkZXN0cm95 X2VyYXNlX2NtZF9saXN0Og0KPiA+ID4+PiArCXNwaV9ub3JfZGVzdHJveV9lcmFzZV9jbWRfbGlz dChlcmFzZV9saXN0KTsNCj4gPiA+Pj4gKwlyZXR1cm4gcmV0Ow0KPiA+ID4+PiArfQ0KPiA+ID4+ PiArDQo+ID4gPj4+ICsvKg0KPiA+ID4+PiArICogc3BpX25vcl9lcmFzZV9tdWx0aV9zZWN0b3Jz KCkgLSBwZXJmb3JtIGEgbm9uLXVuaWZvcm0gZXJhc2UNCj4gPiA+Pj4gKyAqIEBub3I6CXBvaW50 ZXIgdG8gYSAnc3RydWN0IHNwaV9ub3InDQo+ID4gPj4+ICsgKiBAYWRkcjoJb2Zmc2V0IGluIHRo ZSBzZXJpYWwgZmxhc2ggbWVtb3J5DQo+ID4gPj4+ICsgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMg dG8gZXJhc2UNCj4gPiA+Pj4gKyAqDQo+ID4gPj4+ICsgKiBCdWlsZCBhIGxpc3Qgb2YgYmVzdCBm aXR0ZWQgZXJhc2UgY29tbWFuZHMgYW5kIGV4ZWN1dGUgaXQgb25jZQ0KPiA+ID4+PiArd2UNCj4g PiA+Pj4gKyAqIHZhbGlkYXRlIHRoYXQgdGhlIGVyYXNlIGNhbiBiZSBwZXJmb3JtZWQuDQo+ID4g Pj4+ICsgKg0KPiA+ID4+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndp c2UuDQo+ID4gPj4+ICsgKi8NCj4gPiA+Pj4gK3N0YXRpYyBpbnQgc3BpX25vcl9lcmFzZV9tdWx0 aV9zZWN0b3JzKHN0cnVjdCBzcGlfbm9yICpub3IsIHU2NA0KPiA+ID4+PiArYWRkciwNCj4gPiA+ Pj4gK3UzMiBsZW4pIHsNCj4gPiA+Pj4gKwlMSVNUX0hFQUQoZXJhc2VfbGlzdCk7DQo+ID4gPj4+ ICsJc3RydWN0IHNwaV9ub3JfZXJhc2VfY29tbWFuZCAqY21kLCAqbmV4dDsNCj4gPiA+Pj4gKwlp bnQgcmV0Ow0KPiA+ID4+PiArDQo+ID4gPj4+ICsJcmV0ID0gc3BpX25vcl9pbml0X2VyYXNlX2Nt ZF9saXN0KG5vciwgJmVyYXNlX2xpc3QsIGFkZHIsIGxlbik7DQo+ID4gPj4+ICsJaWYgKHJldCkN Cj4gPiA+Pj4gKwkJcmV0dXJuIHJldDsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShjbWQsIG5leHQsICZlcmFzZV9saXN0LCBsaXN0KSB7DQo+ID4gPj4+ICsJ CW5vci0+ZXJhc2Vfb3Bjb2RlID0gY21kLT5vcGNvZGU7DQo+ID4gPj4+ICsJCXdoaWxlIChjbWQt PmNvdW50KSB7DQo+ID4gPj4+ICsJCQl3cml0ZV9lbmFibGUobm9yKTsNCj4gPiA+Pj4gKw0KPiA+ ID4+PiArCQkJcmV0ID0gc3BpX25vcl9lcmFzZV9zZWN0b3Iobm9yLCBhZGRyKTsNCj4gPiA+Pj4g KwkJCWlmIChyZXQpDQo+ID4gPj4+ICsJCQkJZ290byBkZXN0cm95X2VyYXNlX2NtZF9saXN0Ow0K PiA+ID4+PiArDQo+ID4gPj4+ICsJCQlhZGRyICs9IGNtZC0+c2l6ZTsNCj4gPiA+Pj4gKwkJCWNt ZC0+Y291bnQtLTsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArCQkJcmV0ID0gc3BpX25vcl93YWl0X3Rp bGxfcmVhZHkobm9yKTsNCj4gPiA+Pj4gKwkJCWlmIChyZXQpDQo+ID4gPj4+ICsJCQkJZ290byBk ZXN0cm95X2VyYXNlX2NtZF9saXN0Ow0KPiA+ID4+PiArCQl9DQo+ID4gPj4+ICsJCWxpc3RfZGVs KCZjbWQtPmxpc3QpOw0KPiA+ID4+PiArCQlrZnJlZShjbWQpOw0KPiA+ID4+PiArCX0NCj4gPiA+ Pj4gKw0KPiA+ID4+PiArCXJldHVybiAwOw0KPiA+ID4+PiArDQo+ID4gPj4+ICtkZXN0cm95X2Vy YXNlX2NtZF9saXN0Og0KPiA+ID4+PiArCXNwaV9ub3JfZGVzdHJveV9lcmFzZV9jbWRfbGlzdCgm ZXJhc2VfbGlzdCk7DQo+ID4gPj4+ICsJcmV0dXJuIHJldDsNCj4gPiA+Pj4gK30NCj4gPiA+Pj4g Kw0KPiA+ID4+PiArLyoNCj4gPiA+Pj4gICAqIEVyYXNlIGFuIGFkZHJlc3MgcmFuZ2Ugb24gdGhl IG5vciBjaGlwLiAgVGhlIGFkZHJlc3MgcmFuZ2UgbWF5IGV4dGVuZA0KPiA+ID4+PiAgICogb25l IG9yIG1vcmUgZXJhc2Ugc2VjdG9ycy4gIFJldHVybiBhbiBlcnJvciBpcyB0aGVyZSBpcyBhIHBy b2JsZW0NCj4gZXJhc2luZy4NCj4gPiA+Pj4gICAqLw0KPiA+ID4+PiBAQCAtNTEyLDkgKzc5NCwx MSBAQCBzdGF0aWMgaW50IHNwaV9ub3JfZXJhc2Uoc3RydWN0IG10ZF9pbmZvDQo+ID4gPj4+ICpt dGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikNCj4gPiA+Pj4gIAlkZXZfZGJnKG5vci0+ZGV2 LCAiYXQgMHglbGx4LCBsZW4gJWxsZFxuIiwgKGxvbmcgbG9uZylpbnN0ci0+YWRkciwNCj4gPiA+ Pj4gIAkJCShsb25nIGxvbmcpaW5zdHItPmxlbik7DQo+ID4gPj4+DQo+ID4gPj4+IC0JZGl2X3U2 NF9yZW0oaW5zdHItPmxlbiwgbXRkLT5lcmFzZXNpemUsICZyZW0pOw0KPiA+ID4+PiAtCWlmIChy ZW0pDQo+ID4gPj4+IC0JCXJldHVybiAtRUlOVkFMOw0KPiA+ID4+PiArCWlmIChzcGlfbm9yX2hh c191bmlmb3JtX2VyYXNlKG5vcikpIHsNCj4gPiA+Pj4gKwkJZGl2X3U2NF9yZW0oaW5zdHItPmxl biwgbXRkLT5lcmFzZXNpemUsICZyZW0pOw0KPiA+ID4+PiArCQlpZiAocmVtKQ0KPiA+ID4+PiAr CQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPj4+ICsJfQ0KPiA+ID4+Pg0KPiA+ID4+PiAgCWFkZHIg PSBpbnN0ci0+YWRkcjsNCj4gPiA+Pj4gIAlsZW4gPSBpbnN0ci0+bGVuOw0KPiA+ID4+PiBAQCAt NTUzLDcgKzgzNyw3IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9lcmFzZShzdHJ1Y3QgbXRkX2luZm8g Km10ZCwNCj4gPiA+Pj4gc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQ0KPiA+ID4+PiAgCSAqLw0K PiA+ID4+Pg0KPiA+ID4+PiAgCS8qICJzZWN0b3IiLWF0LWEtdGltZSBlcmFzZSAqLw0KPiA+ID4+ PiAtCX0gZWxzZSB7DQo+ID4gPj4+ICsJfSBlbHNlIGlmIChzcGlfbm9yX2hhc191bmlmb3JtX2Vy YXNlKG5vcikpIHsNCj4gPiA+Pj4gIAkJd2hpbGUgKGxlbikgew0KPiA+ID4+PiAgCQkJd3JpdGVf ZW5hYmxlKG5vcik7DQo+ID4gPj4+DQo+ID4gPj4+IEBAIC01NjgsNiArODUyLDEyIEBAIHN0YXRp YyBpbnQgc3BpX25vcl9lcmFzZShzdHJ1Y3QgbXRkX2luZm8NCj4gPiA+Pj4gKm10ZCwgc3RydWN0 IGVyYXNlX2luZm8gKmluc3RyKQ0KPiA+ID4+PiAgCQkJaWYgKHJldCkNCj4gPiA+Pj4gIAkJCQln b3RvIGVyYXNlX2VycjsNCj4gPiA+Pj4gIAkJfQ0KPiA+ID4+PiArDQo+ID4gPj4+ICsJLyogZXJh c2UgbXVsdGlwbGUgc2VjdG9ycyAqLw0KPiA+ID4+PiArCX0gZWxzZSB7DQo+ID4gPj4+ICsJCXJl dCA9IHNwaV9ub3JfZXJhc2VfbXVsdGlfc2VjdG9ycyhub3IsIGFkZHIsIGxlbik7DQo+ID4gPj4+ ICsJCWlmIChyZXQpDQo+ID4gPj4+ICsJCQlnb3RvIGVyYXNlX2VycjsNCj4gPiA+Pj4gIAl9DQo+ ID4gPj4+DQo+ID4gPj4+ICAJd3JpdGVfZGlzYWJsZShub3IpOw0KPiA+ID4+PiBAQCAtMjE5MCw2 ICsyNDgwLDExMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmZHBfYmZwdF9lcmFzZQ0KPiA+ID4+ PiBzZmRwX2JmcHRfZXJhc2VzW10gPSB7DQo+ID4gPj4+DQo+ID4gPj4+ICBzdGF0aWMgaW50IHNw aV9ub3JfaHdjYXBzX3JlYWQyY21kKHUzMiBod2NhcHMpOw0KPiA+ID4+Pg0KPiA+ID4+PiArLyoN Cj4gPiA+Pj4gKyAqIHNwaV9ub3Jfc2V0X2VyYXNlX3R5cGUoKSAtIHNldCBhIFNQSSBOT1IgZXJh c2UgdHlwZQ0KPiA+ID4+PiArICogQGVyYXNlOglwb2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQg ZGVzY3JpYmVzIGEgU1BJIE5PUiBlcmFzZQ0KPiB0eXBlDQo+ID4gPj4+ICsgKiBAc2l6ZToJdGhl IHNpemUgb2YgdGhlIHNlY3Rvci9ibG9jayBlcmFzZWQgYnkgdGhlIGVyYXNlIHR5cGUNCj4gPiA+ Pj4gKyAqIEBvcGNvZGU6CXRoZSBTUEkgY29tbWFuZCBvcCBjb2RlIHRvIGVyYXNlIHRoZSBzZWN0 b3IvYmxvY2sNCj4gPiA+Pj4gKyAqLw0KPiA+ID4+PiArc3RhdGljIHZvaWQgc3BpX25vcl9zZXRf ZXJhc2VfdHlwZShzdHJ1Y3Qgc3BpX25vcl9lcmFzZV90eXBlICplcmFzZSwNCj4gPiA+Pj4gKwkJ CQkgICB1MzIgc2l6ZSwgdTggb3Bjb2RlKQ0KPiA+ID4+PiArew0KPiA+ID4+PiArCWVyYXNlLT5z aXplID0gc2l6ZTsNCj4gPiA+Pj4gKwllcmFzZS0+b3Bjb2RlID0gb3Bjb2RlOw0KPiA+ID4+PiAr CS8qIEpFREVDIEpFU0QyMTZCIFN0YW5kYXJkIGltcG9zZXMgZXJhc2Ugc2l6ZXMgdG8gYmUgcG93 ZXIgb2YgMi4gKi8NCj4gPiA+Pj4gKwllcmFzZS0+c2l6ZV9zaGlmdCA9IGZmcyhlcmFzZS0+c2l6 ZSkgLSAxOw0KPiA+ID4+PiArCWVyYXNlLT5zaXplX21hc2sgPSAoMSA8PCBlcmFzZS0+c2l6ZV9z aGlmdCkgLSAxOyB9DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKy8qDQo+ID4gPj4+ICsgKiBzcGlfbm9y X3NldF9lcmFzZV9zZXR0aW5nc19mcm9tX2JmcHQoKSAtIHNldCBlcmFzZSB0eXBlDQo+ID4gPj4+ ICtzZXR0aW5ncyBmcm9tDQo+ID4gQkZQVA0KPiA+ID4+PiArICogQGVyYXNlOglwb2ludGVyIHRv IGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgU1BJIE5PUiBlcmFzZQ0KPiB0eXBlDQo+ID4g Pj4+ICsgKiBAc2l6ZToJdGhlIHNpemUgb2YgdGhlIHNlY3Rvci9ibG9jayBlcmFzZWQgYnkgdGhl IGVyYXNlIHR5cGUNCj4gPiA+Pj4gKyAqIEBvcGNvZGU6CXRoZSBTUEkgY29tbWFuZCBvcCBjb2Rl IHRvIGVyYXNlIHRoZSBzZWN0b3IvYmxvY2sNCj4gPiA+Pj4gKyAqIEBpOgkJZXJhc2UgdHlwZSBp bmRleCBhcyBzb3J0ZWQgaW4gdGhlIEJhc2ljIEZsYXNoIFBhcmFtZXRlcg0KPiA+IFRhYmxlDQo+ ID4gPj4+ICsgKg0KPiA+ID4+PiArICogVGhlIHN1cHBvcnRlZCBFcmFzZSBUeXBlcyB3aWxsIGJl IHNvcnRlZCBhdCBpbml0IGluIGFzY2VuZGluZw0KPiA+ID4+PiArb3JkZXIsIHdpdGgNCj4gPiA+ Pj4gKyAqIHRoZSBzbWFsbGVzdCBFcmFzZSBUeXBlIHNpemUgYmVpbmcgdGhlIGZpcnN0IG1lbWJl ciBpbiB0aGUNCj4gPiA+Pj4gK2VyYXNlX3R5cGUgYXJyYXkNCj4gPiA+Pj4gKyAqIG9mIHRoZSBz cGlfbm9yX2VyYXNlX21hcCBzdHJ1Y3R1cmUuIFNhdmUgdGhlIEVyYXNlIFR5cGUgaW5kZXgNCj4g PiA+Pj4gK2FzIHNvcnRlZCBpbg0KPiA+ID4+PiArICogdGhlIEJhc2ljIEZsYXNoIFBhcmFtZXRl ciBUYWJsZSBzaW5jZSBpdCB3aWxsIGJlIHVzZWQgbGF0ZXIgb24NCj4gPiA+Pj4gK3RvDQo+ID4g Pj4+ICsgKiBzeW5jaHJvbml6ZSB3aXRoIHRoZSBzdXBwb3J0ZWQgRXJhc2UgVHlwZXMgZGVmaW5l ZCBpbiBTRkRQDQo+ID4gPj4+ICtvcHRpb25hbA0KPiA+IHRhYmxlcy4NCj4gPiA+Pj4gKyAqLw0K PiA+ID4+PiArc3RhdGljIHZvaWQNCj4gPiA+Pj4gK3NwaV9ub3Jfc2V0X2VyYXNlX3NldHRpbmdz X2Zyb21fYmZwdChzdHJ1Y3Qgc3BpX25vcl9lcmFzZV90eXBlICplcmFzZSwNCj4gPiA+Pj4gKwkJ CQkgICAgIHUzMiBzaXplLCB1OCBvcGNvZGUsIHU4IGkpIHsNCj4gPiA+Pj4gKwllcmFzZS0+aWR4 ID0gaTsNCj4gPiA+Pj4gKwlzcGlfbm9yX3NldF9lcmFzZV90eXBlKGVyYXNlLCBzaXplLCBvcGNv ZGUpOyB9DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKy8qIHNwaV9ub3JfbWFwX2NtcF9lcmFzZV90eXBl KCkgLSBjb21wYXJlIHRoZSBtYXAncyBlcmFzZSB0eXBlcyBieQ0KPiBzaXplDQo+ID4gPj4+ICsg KiBAbDoJbWVtYmVyIGluIHRoZSBsZWZ0IGhhbGYgb2YgdGhlIG1hcCdzIGVyYXNlX3R5cGUgYXJy YXkNCj4gPiA+Pj4gKyAqIEByOgltZW1iZXIgaW4gdGhlIHJpZ2h0IGhhbGYgb2YgdGhlIG1hcCdz IGVyYXNlX3R5cGUgYXJyYXkNCj4gPiA+Pj4gKyAqDQo+ID4gPj4+ICsgKiBDb21wYXJpc29uIGZ1 bmN0aW9uIHVzZWQgaW4gdGhlIHNvcnQoKSBjYWxsIHRvIHNvcnQgaW4NCj4gPiA+Pj4gK2FzY2Vu ZGluZyBvcmRlciB0aGUNCj4gPiA+Pj4gKyAqIG1hcCdzIGVyYXNlIHR5cGVzLCB0aGUgc21hbGxl c3QgZXJhc2UgdHlwZSBzaXplIGJlaW5nIHRoZQ0KPiA+ID4+PiArZmlyc3QgbWVtYmVyIGluIHRo ZQ0KPiA+ID4+PiArICogc29ydGVkIGVyYXNlX3R5cGUgYXJyYXkuDQo+ID4gPj4+ICsgKi8NCj4g PiA+Pj4gK3N0YXRpYyBpbnQgc3BpX25vcl9tYXBfY21wX2VyYXNlX3R5cGUoY29uc3Qgdm9pZCAq bCwgY29uc3Qgdm9pZCAqcikgew0KPiA+ID4+PiArCWNvbnN0IHN0cnVjdCBzcGlfbm9yX2VyYXNl X3R5cGUgKmxlZnQgPSBsLCAqcmlnaHQgPSByOw0KPiA+ID4+PiArDQo+ID4gPj4+ICsJcmV0dXJu IGxlZnQtPnNpemUgLSByaWdodC0+c2l6ZTsgfQ0KPiA+ID4+PiArDQo+ID4gPj4+ICsvKg0KPiA+ ID4+PiArICogc3BpX25vcl9yZWdpb25zX3NvcnRfZXJhc2VfdHlwZXMoKSAtIHNvcnQgZXJhc2Ug dHlwZXMgaW4gZWFjaCByZWdpb24NCj4gPiA+Pj4gKyAqIEBtYXA6CXRoZSBlcmFzZSBtYXAgb2Yg dGhlIFNQSSBOT1INCj4gPiA+Pj4gKyAqDQo+ID4gPj4+ICsgKiBGdW5jdGlvbiBhc3N1bWVzIHRo YXQgdGhlIGVyYXNlIHR5cGVzIGRlZmluZWQgaW4gdGhlIGVyYXNlIG1hcA0KPiA+ID4+PiArYXJl IGFscmVhZHkNCj4gPiA+Pj4gKyAqIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIsIHdpdGggdGhl IHNtYWxsZXN0IGVyYXNlIHR5cGUgc2l6ZQ0KPiA+ID4+PiArYmVpbmcgdGhlIGZpcnN0DQo+ID4g Pj4+ICsgKiBtZW1iZXIgaW4gdGhlIGVyYXNlX3R5cGUgYXJyYXkuIEl0IHJlcGxpY2F0ZXMgdGhl IHNvcnQgZG9uZQ0KPiA+ID4+PiArZm9yIHRoZSBtYXAncw0KPiA+ID4+PiArICogZXJhc2UgdHlw ZXMuIEVhY2ggcmVnaW9uJ3MgZXJhc2UgYml0bWFzayB3aWxsIGluZGljYXRlIHdoaWNoDQo+ID4g Pj4+ICtlcmFzZSB0eXBlcyBhcmUNCj4gPiA+Pj4gKyAqIHN1cHBvcnRlZCBmcm9tIHRoZSBzb3J0 ZWQgZXJhc2UgdHlwZXMgZGVmaW5lZCBpbiB0aGUgZXJhc2UgbWFwLg0KPiA+ID4+PiArICogU29y dCB0aGUgYWxsIHJlZ2lvbidzIGVyYXNlIHR5cGUgYXQgaW5pdCBpbiBvcmRlciB0byBzcGVlZCB1 cA0KPiA+ID4+PiArdGhlIHByb2Nlc3Mgb2YNCj4gPiA+Pj4gKyAqIGZpbmRpbmcgdGhlIGJlc3Qg ZXJhc2UgY29tbWFuZCBhdCBydW50aW1lLg0KPiA+ID4+PiArICovDQo+ID4gPj4+ICtzdGF0aWMg dm9pZCBzcGlfbm9yX3JlZ2lvbnNfc29ydF9lcmFzZV90eXBlcyhzdHJ1Y3QNCj4gPiA+Pj4gK3Nw aV9ub3JfZXJhc2VfbWFwDQo+ID4gPj4+ICsqbWFwKSB7DQo+ID4gPj4+ICsJc3RydWN0IHNwaV9u b3JfZXJhc2VfcmVnaW9uICpyZWdpb24gPSBtYXAtPnJlZ2lvbnM7DQo+ID4gPj4+ICsJc3RydWN0 IHNwaV9ub3JfZXJhc2VfdHlwZSAqZXJhc2VfdHlwZSA9IG1hcC0+ZXJhc2VfdHlwZTsNCj4gPiA+ Pj4gKwlpbnQgaTsNCj4gPiA+Pj4gKwl1OCByZWdpb25fZXJhc2VfbWFzaywgc29ydGVkX2VyYXNl X21hc2s7DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKwl3aGlsZSAocmVnaW9uKSB7DQo+ID4gPj4+ICsJ CXJlZ2lvbl9lcmFzZV9tYXNrID0gcmVnaW9uLT5vZmZzZXQgJg0KPiA+ID4+PiBTTk9SX0VSQVNF X1RZUEVfTUFTSzsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArCQkvKiBSZXBsaWNhdGUgdGhlIHNvcnQg ZG9uZSBmb3IgdGhlIG1hcCdzIGVyYXNlIHR5cGVzLiAqLw0KPiA+ID4+PiArCQlzb3J0ZWRfZXJh c2VfbWFzayA9IDA7DQo+ID4gPj4+ICsJCWZvciAoaSA9IDA7IGkgPCBTTk9SX0VSQVNFX1RZUEVf TUFYOyBpKyspDQo+ID4gPj4+ICsJCQlpZiAoZXJhc2VfdHlwZVtpXS5zaXplICYmDQo+ID4gPj4+ ICsJCQkgICAgcmVnaW9uX2VyYXNlX21hc2sgJiBCSVQoZXJhc2VfdHlwZVtpXS5pZHgpKQ0KPiA+ ID4+PiArCQkJCXNvcnRlZF9lcmFzZV9tYXNrIHw9IEJJVChpKTsNCj4gPiA+Pj4gKw0KPiA+ID4+ PiArCQkvKiBPdmVyd3JpdGUgZXJhc2UgbWFzay4gKi8NCj4gPiA+Pj4gKwkJcmVnaW9uLT5vZmZz ZXQgPSAocmVnaW9uLT5vZmZzZXQgJiB+U05PUl9FUkFTRV9UWVBFX01BU0spDQo+ID4gPj4+IHwN Cj4gPiA+Pj4gKwkJCQkgc29ydGVkX2VyYXNlX21hc2s7DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKwkJ cmVnaW9uID0gc3BpX25vcl9yZWdpb25fbmV4dChyZWdpb24pOw0KPiA+ID4+PiArCX0NCj4gPiA+ Pj4gK30NCj4gPiA+Pj4gKw0KPiA+ID4+PiArLyoNCj4gPiA+Pj4gKyAqc3BpX25vcl9pbml0X3Vu aWZvcm1fZXJhc2VfbWFwKCkgLSBJbml0aWFsaXplIHVuaWZvcm0gZXJhc2UgbWFwDQo+ID4gPj4+ ICsgKiBAbWFwOgkJdGhlIGVyYXNlIG1hcCBvZiB0aGUgU1BJIE5PUg0KPiA+ID4+PiArICogQGVy YXNlX21hc2s6CQliaXRtYXNrIGVuY29kaW5nIGVyYXNlIHR5cGVzIHRoYXQgY2FuIGVyYXNlDQo+ ID4gPj4+IHRoZSBlbnRpcmUNCj4gPiA+Pj4gKyAqCQkJZmxhc2ggbWVtb3J5DQo+ID4gPj4+ICsg KiBAZmxhc2hfc2l6ZToJCXRoZSBzcGkgbm9yIGZsYXNoIG1lbW9yeSBzaXplDQo+ID4gPj4+ICsg Ki8NCj4gPiA+Pj4gK3N0YXRpYyB2b2lkIHNwaV9ub3JfaW5pdF91bmlmb3JtX2VyYXNlX21hcChz dHJ1Y3QNCj4gPiA+Pj4gK3NwaV9ub3JfZXJhc2VfbWFwDQo+ID4gKm1hcCwNCj4gPiA+Pj4gKwkJ CQkJICAgdTggZXJhc2VfbWFzaywgdTY0IGZsYXNoX3NpemUpIHsNCj4gPiA+Pj4gKwkvKiBPZmZz ZXQgMCB3aXRoIGVyYXNlX21hc2sgYW5kIFNOT1JfTEFTVF9SRUdJT04gYml0IHNldCAqLw0KPiA+ ID4+PiArCW1hcC0+dW5pZm9ybV9yZWdpb24ub2Zmc2V0ID0gKGVyYXNlX21hc2sgJg0KPiA+ID4+ PiBTTk9SX0VSQVNFX1RZUEVfTUFTSykgfA0KPiA+ID4+PiArCQkJCSAgICAgU05PUl9MQVNUX1JF R0lPTjsNCj4gPiA+Pj4gKwltYXAtPnVuaWZvcm1fcmVnaW9uLnNpemUgPSBmbGFzaF9zaXplOw0K PiA+ID4+PiArCW1hcC0+cmVnaW9ucyA9ICZtYXAtPnVuaWZvcm1fcmVnaW9uOw0KPiA+ID4+PiAr CW1hcC0+dW5pZm9ybV9lcmFzZV90eXBlID0gZXJhc2VfbWFzazsgfQ0KPiA+ID4+PiArDQo+ID4g Pj4+ICAvKioNCj4gPiA+Pj4gICAqIHNwaV9ub3JfcGFyc2VfYmZwdCgpIC0gcmVhZCBhbmQgcGFy c2UgdGhlIEJhc2ljIEZsYXNoIFBhcmFtZXRlciBUYWJsZS4NCj4gPiA+Pj4gICAqIEBub3I6CQlw b2ludGVyIHRvIGEgJ3N0cnVjdCBzcGlfbm9yJw0KPiA+ID4+PiBAQCAtMjIyNCwxMiArMjYyMSwx NCBAQCBzdGF0aWMgaW50IHNwaV9ub3JfcGFyc2VfYmZwdChzdHJ1Y3QNCj4gPiA+Pj4gc3BpX25v cg0KPiA+ICpub3IsDQo+ID4gPj4+ICAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2ZkcF9wYXJhbWV0 ZXJfaGVhZGVyICpiZnB0X2hlYWRlciwNCj4gPiA+Pj4gIAkJCSAgICAgIHN0cnVjdCBzcGlfbm9y X2ZsYXNoX3BhcmFtZXRlciAqcGFyYW1zKSAgew0KPiA+ID4+PiAtCXN0cnVjdCBtdGRfaW5mbyAq bXRkID0gJm5vci0+bXRkOw0KPiA+ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAqbWFw ID0gJm5vci0+ZXJhc2VfbWFwOw0KPiA+ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUg KmVyYXNlX3R5cGUgPSBtYXAtPmVyYXNlX3R5cGU7DQo+ID4gPj4+ICAJc3RydWN0IHNmZHBfYmZw dCBiZnB0Ow0KPiA+ID4+PiAgCXNpemVfdCBsZW47DQo+ID4gPj4+ICAJaW50IGksIGNtZCwgZXJy Ow0KPiA+ID4+PiAgCXUzMiBhZGRyOw0KPiA+ID4+PiAgCXUxNiBoYWxmOw0KPiA+ID4+PiArCXU4 IGVyYXNlX21hc2s7DQo+ID4gPj4+DQo+ID4gPj4+ICAJLyogSkVTRDIxNiBCYXNpYyBGbGFzaCBQ YXJhbWV0ZXIgVGFibGUgbGVuZ3RoIGlzIGF0IGxlYXN0IDkgRFdPUkRzLiAqLw0KPiA+ID4+PiAg CWlmIChiZnB0X2hlYWRlci0+bGVuZ3RoIDwgQkZQVF9EV09SRF9NQVhfSkVTRDIxNikgQEAgLTIy OTgsNw0KPiA+ID4+PiArMjY5NywxMiBAQCBzdGF0aWMgaW50IHNwaV9ub3JfcGFyc2VfYmZwdChz dHJ1Y3Qgc3BpX25vciAqbm9yLA0KPiA+ID4+PiAgCQlzcGlfbm9yX3NldF9yZWFkX3NldHRpbmdz X2Zyb21fYmZwdChyZWFkLCBoYWxmLCByZC0+cHJvdG8pOw0KPiA+ID4+PiAgCX0NCj4gPiA+Pj4N Cj4gPiA+Pj4gLQkvKiBTZWN0b3IgRXJhc2Ugc2V0dGluZ3MuICovDQo+ID4gPj4+ICsJLyoNCj4g PiA+Pj4gKwkgKiBTZWN0b3IgRXJhc2Ugc2V0dGluZ3MuIFJlaW5pdGlhbGl6ZSB0aGUgdW5pZm9y bSBlcmFzZSBtYXAgdXNpbmcgdGhlDQo+ID4gPj4+ICsJICogRXJhc2UgVHlwZXMgZGVmaW5lZCBp biB0aGUgYmZwdCB0YWJsZS4NCj4gPiA+Pj4gKwkgKi8NCj4gPiA+Pj4gKwllcmFzZV9tYXNrID0g MDsNCj4gPiA+Pj4gKwltZW1zZXQoJm5vci0+ZXJhc2VfbWFwLCAwLCBzaXplb2Yobm9yLT5lcmFz ZV9tYXApKTsNCj4gPiA+Pj4gIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZmRwX2JmcHRf ZXJhc2VzKTsgaSsrKSB7DQo+ID4gPj4+ICAJCWNvbnN0IHN0cnVjdCBzZmRwX2JmcHRfZXJhc2Ug KmVyID0gJnNmZHBfYmZwdF9lcmFzZXNbaV07DQo+ID4gPj4+ICAJCXUzMiBlcmFzZXNpemU7DQo+ ID4gPj4+IEBAIC0yMzEzLDE4ICsyNzE3LDI1IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9wYXJzZV9i ZnB0KHN0cnVjdA0KPiA+ID4+PiBzcGlfbm9yICpub3IsDQo+ID4gPj4+DQo+ID4gPj4+ICAJCWVy YXNlc2l6ZSA9IDFVIDw8IGVyYXNlc2l6ZTsNCj4gPiA+Pj4gIAkJb3Bjb2RlID0gKGhhbGYgPj4g OCkgJiAweGZmOw0KPiA+ID4+PiAtI2lmZGVmIENPTkZJR19NVERfU1BJX05PUl9VU0VfNEtfU0VD VE9SUw0KPiA+ID4+PiAtCQlpZiAoZXJhc2VzaXplID09IFNaXzRLKSB7DQo+ID4gPj4+IC0JCQlu b3ItPmVyYXNlX29wY29kZSA9IG9wY29kZTsNCj4gPiA+Pj4gLQkJCW10ZC0+ZXJhc2VzaXplID0g ZXJhc2VzaXplOw0KPiA+ID4+PiAtCQkJYnJlYWs7DQo+ID4gPj4+IC0JCX0NCj4gPiA+Pj4gLSNl bmRpZg0KPiA+ID4+PiAtCQlpZiAoIW10ZC0+ZXJhc2VzaXplIHx8IG10ZC0+ZXJhc2VzaXplIDwg ZXJhc2VzaXplKSB7DQo+ID4gPj4+IC0JCQlub3ItPmVyYXNlX29wY29kZSA9IG9wY29kZTsNCj4g PiA+Pj4gLQkJCW10ZC0+ZXJhc2VzaXplID0gZXJhc2VzaXplOw0KPiA+ID4+PiAtCQl9DQo+ID4g Pj4+ICsJCWVyYXNlX21hc2sgfD0gQklUKGkpOw0KPiA+ID4+PiArCQlzcGlfbm9yX3NldF9lcmFz ZV9zZXR0aW5nc19mcm9tX2JmcHQoJmVyYXNlX3R5cGVbaV0sDQo+ID4gPj4+IGVyYXNlc2l6ZSwN Cj4gPiA+Pj4gKwkJCQkJCSAgICAgb3Bjb2RlLCBpKTsNCj4gPiA+Pj4gIAl9DQo+ID4gPj4+ICsJ c3BpX25vcl9pbml0X3VuaWZvcm1fZXJhc2VfbWFwKG1hcCwgZXJhc2VfbWFzaywgcGFyYW1zLT5z aXplKTsNCj4gPiA+Pj4gKwkvKg0KPiA+ID4+PiArCSAqIFNvcnQgYWxsIHRoZSBtYXAncyBFcmFz ZSBUeXBlcyBpbiBhc2NlbmRpbmcgb3JkZXIgd2l0aCB0aGUgc21hbGxlc3QNCj4gPiA+Pj4gKwkg KiBlcmFzZSBzaXplIGJlaW5nIHRoZSBmaXJzdCBtZW1iZXIgaW4gdGhlIGVyYXNlX3R5cGUgYXJy YXkuDQo+ID4gPj4+ICsJICovDQo+ID4gPj4+ICsJc29ydChlcmFzZV90eXBlLCBTTk9SX0VSQVNF X1RZUEVfTUFYLCBzaXplb2YoZXJhc2VfdHlwZVswXSksDQo+ID4gPj4+ICsJICAgICBzcGlfbm9y X21hcF9jbXBfZXJhc2VfdHlwZSwgTlVMTCk7DQo+ID4gPj4+ICsJLyoNCj4gPiA+Pj4gKwkgKiBT b3J0IHRoZSBlcmFzZSB0eXBlcyBpbiB0aGUgdW5pZm9ybSByZWdpb24gaW4gb3JkZXIgdG8gdXBk YXRlIHRoZQ0KPiA+ID4+PiArCSAqIHVuaWZvcm1fZXJhc2VfdHlwZSBiaXRtYXNrLiBUaGUgYml0 bWFzayB3aWxsIGJlIHVzZWQgbGF0ZXIgb24gd2hlbg0KPiA+ID4+PiArCSAqIHNlbGVjdGluZyB0 aGUgdW5pZm9ybSBlcmFzZS4NCj4gPiA+Pj4gKwkgKi8NCj4gPiA+Pj4gKwlzcGlfbm9yX3JlZ2lv bnNfc29ydF9lcmFzZV90eXBlcyhtYXApOw0KPiA+ID4+PiArCW1hcC0+dW5pZm9ybV9lcmFzZV90 eXBlID0gbWFwLT51bmlmb3JtX3JlZ2lvbi5vZmZzZXQgJg0KPiA+ID4+PiArCQkJCSAgU05PUl9F UkFTRV9UWVBFX01BU0s7DQo+ID4gPj4+DQo+ID4gPj4+ICAJLyogU3RvcCBoZXJlIGlmIG5vdCBK RVNEMjE2IHJldiBBIG9yIGxhdGVyLiAqLw0KPiA+ID4+PiAgCWlmIChiZnB0X2hlYWRlci0+bGVu Z3RoIDwgQkZQVF9EV09SRF9NQVgpIEBAIC0yNDgwLDYgKzI4OTEsOQ0KPiA+IEBADQo+ID4gPj4+ IHN0YXRpYyBpbnQgc3BpX25vcl9pbml0X3BhcmFtcyhzdHJ1Y3Qgc3BpX25vciAqbm9yLA0KPiA+ ID4+PiAgCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmbGFzaF9pbmZvICppbmZvLA0KPiA+ID4+PiAg CQkJICAgICAgIHN0cnVjdCBzcGlfbm9yX2ZsYXNoX3BhcmFtZXRlciAqcGFyYW1zKSAgew0KPiA+ ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAqbWFwID0gJm5vci0+ZXJhc2VfbWFwOw0K PiA+ID4+PiArCXU4IGksIGVyYXNlX21hc2s7DQo+ID4gPj4+ICsNCj4gPiA+Pj4gIAkvKiBTZXQg bGVnYWN5IGZsYXNoIHBhcmFtZXRlcnMgYXMgZGVmYXVsdC4gKi8NCj4gPiA+Pj4gIAltZW1zZXQo cGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOw0KPiA+ID4+Pg0KPiA+ID4+PiBAQCAtMjUxOSw2 ICsyOTMzLDI4IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9pbml0X3BhcmFtcyhzdHJ1Y3QNCj4gPiA+ Pj4gc3BpX25vcg0KPiA+ICpub3IsDQo+ID4gPj4+ICAJc3BpX25vcl9zZXRfcHBfc2V0dGluZ3Mo JnBhcmFtcy0+cGFnZV9wcm9ncmFtc1tTTk9SX0NNRF9QUF0sDQo+ID4gPj4+ICAJCQkJU1BJTk9S X09QX1BQLCBTTk9SX1BST1RPXzFfMV8xKTsNCj4gPiA+Pj4NCj4gPiA+Pj4gKwkvKg0KPiA+ID4+ PiArCSAqIFNlY3RvciBFcmFzZSBzZXR0aW5ncy4gU29ydCBFcmFzZSBUeXBlcyBpbiBhc2NlbmRp bmcgb3JkZXIsIHdpdGggdGhlDQo+ID4gPj4+ICsJICogc21hbGxlc3QgZXJhc2Ugc2l6ZSBzdGFy dGluZyBhdCBCSVQoMCkuDQo+ID4gPj4+ICsJICovDQo+ID4gPj4+ICsJZXJhc2VfbWFzayA9IDA7 DQo+ID4gPj4+ICsJaSA9IDA7DQo+ID4gPj4+ICsJaWYgKGluZm8tPmZsYWdzICYgU0VDVF80S19Q TUMpIHsNCj4gPiA+Pj4gKwkJZXJhc2VfbWFzayB8PSBCSVQoaSk7DQo+ID4gPj4+ICsJCXNwaV9u b3Jfc2V0X2VyYXNlX3R5cGUoJm1hcC0+ZXJhc2VfdHlwZVtpXSwgNDA5NnUsDQo+ID4gPj4+ICsJ CQkJICAgICAgIFNQSU5PUl9PUF9CRV80S19QTUMpOw0KPiA+ID4+PiArCQlpKys7DQo+ID4gPj4+ ICsJfSBlbHNlIGlmIChpbmZvLT5mbGFncyAmIFNFQ1RfNEspIHsNCj4gPiA+Pj4gKwkJZXJhc2Vf bWFzayB8PSBCSVQoaSk7DQo+ID4gPj4+ICsJCXNwaV9ub3Jfc2V0X2VyYXNlX3R5cGUoJm1hcC0+ ZXJhc2VfdHlwZVtpXSwgNDA5NnUsDQo+ID4gPj4+ICsJCQkJICAgICAgIFNQSU5PUl9PUF9CRV80 Syk7DQo+ID4gPj4+ICsJCWkrKzsNCj4gPiA+Pj4gKwl9DQo+ID4gPj4+ICsJZXJhc2VfbWFzayB8 PSBCSVQoaSk7DQo+ID4gPj4+ICsJc3BpX25vcl9zZXRfZXJhc2VfdHlwZSgmbWFwLT5lcmFzZV90 eXBlW2ldLCBpbmZvLT5zZWN0b3Jfc2l6ZSwNCj4gPiA+Pj4gKwkJCSAgICAgICBTUElOT1JfT1Bf U0UpOw0KPiA+ID4+PiArCXNwaV9ub3JfaW5pdF91bmlmb3JtX2VyYXNlX21hcChtYXAsIGVyYXNl X21hc2ssIHBhcmFtcy0+c2l6ZSk7DQo+ID4gPj4+ICsNCj4gPiA+Pj4gIAkvKiBTZWxlY3QgdGhl IHByb2NlZHVyZSB0byBzZXQgdGhlIFF1YWQgRW5hYmxlIGJpdC4gKi8NCj4gPiA+Pj4gIAlpZiAo cGFyYW1zLT5od2NhcHMubWFzayAmIChTTk9SX0hXQ0FQU19SRUFEX1FVQUQgfA0KPiA+ID4+PiAg CQkJCSAgIFNOT1JfSFdDQVBTX1BQX1FVQUQpKSB7DQo+ID4gPj4+IEBAIC0yNTQ2LDIwICsyOTgy LDIwIEBAIHN0YXRpYyBpbnQgc3BpX25vcl9pbml0X3BhcmFtcyhzdHJ1Y3QNCj4gPiA+Pj4gc3Bp X25vcg0KPiA+ICpub3IsDQo+ID4gPj4+ICAJCQlwYXJhbXMtPnF1YWRfZW5hYmxlID0gaW5mby0+ cXVhZF9lbmFibGU7DQo+ID4gPj4+ICAJfQ0KPiA+ID4+Pg0KPiA+ID4+PiAtCS8qIE92ZXJyaWRl IHRoZSBwYXJhbWV0ZXJzIHdpdGggZGF0YSByZWFkIGZyb20gU0ZEUCB0YWJsZXMuICovDQo+ID4g Pj4+IC0Jbm9yLT5hZGRyX3dpZHRoID0gMDsNCj4gPiA+Pj4gLQlub3ItPm10ZC5lcmFzZXNpemUg PSAwOw0KPiA+ID4+PiAgCWlmICgoaW5mby0+ZmxhZ3MgJiAoU1BJX05PUl9EVUFMX1JFQUQgfCBT UElfTk9SX1FVQURfUkVBRCkpICYmDQo+ID4gPj4+ICAJICAgICEoaW5mby0+ZmxhZ3MgJiBTUElf Tk9SX1NLSVBfU0ZEUCkpIHsNCj4gPiA+Pj4gIAkJc3RydWN0IHNwaV9ub3JfZmxhc2hfcGFyYW1l dGVyIHNmZHBfcGFyYW1zOw0KPiA+ID4+PiArCQlzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9tYXAgcHJl dl9tYXA7DQo+ID4gPj4+DQo+ID4gPj4+ICAJCW1lbWNweSgmc2ZkcF9wYXJhbXMsIHBhcmFtcywg c2l6ZW9mKHNmZHBfcGFyYW1zKSk7DQo+ID4gPj4+IC0JCWlmIChzcGlfbm9yX3BhcnNlX3NmZHAo bm9yLCAmc2ZkcF9wYXJhbXMpKSB7DQo+ID4gPj4+IC0JCQlub3ItPmFkZHJfd2lkdGggPSAwOw0K PiA+ID4+PiAtCQkJbm9yLT5tdGQuZXJhc2VzaXplID0gMDsNCj4gPiA+Pj4gLQkJfSBlbHNlIHsN Cj4gPiA+Pj4gKwkJbWVtY3B5KCZwcmV2X21hcCwgJm5vci0+ZXJhc2VfbWFwLCBzaXplb2YocHJl dl9tYXApKTsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArCQlpZiAoc3BpX25vcl9wYXJzZV9zZmRwKG5v ciwgJnNmZHBfcGFyYW1zKSkNCj4gPiA+Pj4gKwkJCS8qIHJlc3RvcmUgcHJldmlvdXMgZXJhc2Ug bWFwICovDQo+ID4gPj4+ICsJCQltZW1jcHkoJm5vci0+ZXJhc2VfbWFwLCAmcHJldl9tYXAsDQo+ ID4gPj4+ICsJCQkgICAgICAgc2l6ZW9mKG5vci0+ZXJhc2VfbWFwKSk7DQo+ID4gPj4+ICsJCWVs c2UNCj4gPiA+Pj4gIAkJCW1lbWNweShwYXJhbXMsICZzZmRwX3BhcmFtcywgc2l6ZW9mKCpwYXJh bXMpKTsNCj4gPiA+Pj4gLQkJfQ0KPiA+ID4+PiAgCX0NCj4gPiA+Pj4NCj4gPiA+Pj4gIAlyZXR1 cm4gMDsNCj4gPiA+Pj4gQEAgLTI2NjgsMjkgKzMxMDQsMTAzIEBAIHN0YXRpYyBpbnQgc3BpX25v cl9zZWxlY3RfcHAoc3RydWN0DQo+ID4gPj4+IHNwaV9ub3INCj4gPiAqbm9yLA0KPiA+ID4+PiAg CXJldHVybiAwOw0KPiA+ID4+PiAgfQ0KPiA+ID4+Pg0KPiA+ID4+PiAtc3RhdGljIGludCBzcGlf bm9yX3NlbGVjdF9lcmFzZShzdHJ1Y3Qgc3BpX25vciAqbm9yLA0KPiA+ID4+PiAtCQkJCWNvbnN0 IHN0cnVjdCBmbGFzaF9pbmZvICppbmZvKQ0KPiA+ID4+PiArLyoNCj4gPiA+Pj4gKyAqIHNwaV9u b3Jfc2VsZWN0X3VuaWZvcm1fZXJhc2UoKSAtIHNlbGVjdCBvcHRpbXVtIHVuaWZvcm0gZXJhc2Ug dHlwZQ0KPiA+ID4+PiArICogQG1hcDoJCXRoZSBlcmFzZSBtYXAgb2YgdGhlIFNQSSBOT1INCj4g PiA+Pj4gKyAqIEB3YW50ZWRfc2l6ZToJdGhlIGVyYXNlIHR5cGUgc2l6ZSB0byBzZWFyY2ggZm9y LiBDb250YWlucyB0aGUNCj4gdmFsdWUgb2YNCj4gPiA+Pj4gKyAqCQkJaW5mby0+c2VjdG9yX3Np emUgb3Igb2YgdGhlICJzbWFsbCBzZWN0b3IiIHNpemUgaW4NCj4gY2FzZQ0KPiA+ID4+PiArICoJ CQlDT05GSUdfTVREX1NQSV9OT1JfVVNFXzRLX1NFQ1RPUlMgaXMNCj4gZGVmaW5lZC4NCj4gPiA+ Pj4gKyAqDQo+ID4gPj4+ICsgKiBPbmNlIHRoZSBvcHRpbXVtIHVuaWZvcm0gc2VjdG9yIGVyYXNl IGNvbW1hbmQgaXMgZm91bmQsDQo+ID4gPj4+ICtkaXNhYmxlIGFsbCB0aGUNCj4gPiA+Pj4gKyAq IG90aGVyLg0KPiA+ID4+PiArICoNCj4gPiA+Pj4gKyAqIFJldHVybjogcG9pbnRlciB0byBlcmFz ZSB0eXBlIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLg0KPiA+ID4+PiArICovDQo+ID4gPj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqDQo+ID4gPj4+ICtzcGlf bm9yX3NlbGVjdF91bmlmb3JtX2VyYXNlKHN0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAqbWFwLA0K PiA+ID4+PiArCQkJICAgICBjb25zdCB1MzIgd2FudGVkX3NpemUpDQo+ID4gPj4+ICB7DQo+ID4g Pj4+IC0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSAmbm9yLT5tdGQ7DQo+ID4gPj4+ICsJY29uc3Qg c3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqdGVzdGVkX2VyYXNlLCAqZXJhc2UgPSBOVUxMOw0K PiA+ID4+PiArCWludCBpOw0KPiA+ID4+PiArCXU4IHVuaWZvcm1fZXJhc2VfdHlwZSA9IG1hcC0+ dW5pZm9ybV9lcmFzZV90eXBlOw0KPiA+ID4+Pg0KPiA+ID4+PiAtCS8qIERvIG5vdGhpbmcgaWYg YWxyZWFkeSBjb25maWd1cmVkIGZyb20gU0ZEUC4gKi8NCj4gPiA+Pj4gLQlpZiAobXRkLT5lcmFz ZXNpemUpDQo+ID4gPj4+IC0JCXJldHVybiAwOw0KPiA+ID4+PiArCWZvciAoaSA9IFNOT1JfRVJB U0VfVFlQRV9NQVggLSAxOyBpID49IDA7IGktLSkgew0KPiA+ID4+PiArCQlpZiAoISh1bmlmb3Jt X2VyYXNlX3R5cGUgJiBCSVQoaSkpKQ0KPiA+ID4+PiArCQkJY29udGludWU7DQo+ID4gPj4+ICsN Cj4gPiA+Pj4gKwkJdGVzdGVkX2VyYXNlID0gJm1hcC0+ZXJhc2VfdHlwZVtpXTsNCj4gPiA+Pj4g Kw0KPiA+ID4+PiArCQkvKg0KPiA+ID4+PiArCQkgKiBJZiB0aGUgY3VycmVudCBlcmFzZSBzaXpl IGlzIHRoZSBvbmUsIHN0b3AgaGVyZToNCj4gPiA+Pj4gKwkJICogd2UgaGF2ZSBmb3VuZCB0aGUg cmlnaHQgdW5pZm9ybSBTZWN0b3IgRXJhc2UgY29tbWFuZC4NCj4gPiA+Pj4gKwkJICovDQo+ID4g Pj4+ICsJCWlmICh0ZXN0ZWRfZXJhc2UtPnNpemUgPT0gd2FudGVkX3NpemUpIHsNCj4gPiA+Pj4g KwkJCWVyYXNlID0gdGVzdGVkX2VyYXNlOw0KPiA+ID4+PiArCQkJYnJlYWs7DQo+ID4gPj4+ICsJ CX0NCj4gPiA+Pj4NCj4gPiA+Pj4gKwkJLyoNCj4gPiA+Pj4gKwkJICogT3RoZXJ3aXNlLCB0aGUg Y3VycmVudCBlcmFzZSBzaXplIGlzIHN0aWxsIGEgdmFsaWQgY2FuZGl0YXRlLg0KPiA+ID4+PiAr CQkgKiBTZWxlY3QgdGhlIGJpZ2dlc3QgdmFsaWQgY2FuZGlkYXRlLg0KPiA+ID4+PiArCQkgKi8N Cj4gPiA+Pj4gKwkJaWYgKCFlcmFzZSAmJiB0ZXN0ZWRfZXJhc2UtPnNpemUpDQo+ID4gPj4+ICsJ CQllcmFzZSA9IHRlc3RlZF9lcmFzZTsNCj4gPiA+Pj4gKwkJCS8qIGtlZXAgaXRlcmF0aW5nIHRv IGZpbmQgdGhlIHdhbnRlZF9zaXplICovDQo+ID4gPj4+ICsJfQ0KPiA+ID4+PiArDQo+ID4gPj4+ ICsJaWYgKCFlcmFzZSkNCj4gPiA+Pj4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gPj4+ICsNCj4gPiA+ Pj4gKwkvKiBEaXNhYmxlIGFsbCBvdGhlciBTZWN0b3IgRXJhc2UgY29tbWFuZHMuICovDQo+ID4g Pj4+ICsJbWFwLT51bmlmb3JtX2VyYXNlX3R5cGUgJj0gflNOT1JfRVJBU0VfVFlQRV9NQVNLOw0K PiA+ID4+PiArCW1hcC0+dW5pZm9ybV9lcmFzZV90eXBlIHw9IEJJVChlcmFzZSAtIG1hcC0+ZXJh c2VfdHlwZSk7DQo+ID4gPj4+ICsJcmV0dXJuIGVyYXNlOw0KPiA+ID4+PiArfQ0KPiA+ID4+PiAr DQo+ID4gPj4+ICtzdGF0aWMgaW50IHNwaV9ub3Jfc2VsZWN0X2VyYXNlKHN0cnVjdCBzcGlfbm9y ICpub3IsIHUzMiB3YW50ZWRfc2l6ZSkgew0KPiA+ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNl X21hcCAqbWFwID0gJm5vci0+ZXJhc2VfbWFwOw0KPiA+ID4+PiArCWNvbnN0IHN0cnVjdCBzcGlf bm9yX2VyYXNlX3R5cGUgKmVyYXNlID0gTlVMTDsNCj4gPiA+Pj4gKwlzdHJ1Y3QgbXRkX2luZm8g Km10ZCA9ICZub3ItPm10ZDsNCj4gPiA+Pj4gKwlpbnQgaTsNCj4gPiA+Pj4gKw0KPiA+ID4+PiAr CS8qDQo+ID4gPj4+ICsJICogVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGhhbmRsaW5nIFNl Y3RvciBFcmFzZSBjb21tYW5kcw0KPiA+ID4+PiBhc3N1bWVkDQo+ID4gPj4+ICsJICogdGhhdCB0 aGUgU1BJIGZsYXNoIG1lbW9yeSBoYXMgYW4gdW5pZm9ybSBsYXlvdXQgdGhlbiB1c2VkIG9ubHkg b25lDQo+ID4gPj4+ICsJICogb2YgdGhlIHN1cHBvcnRlZCBlcmFzZSBzaXplcyBmb3IgYWxsIFNl Y3RvciBFcmFzZSBjb21tYW5kcy4NCj4gPiA+Pj4gKwkgKiBTbyB0byBiZSBiYWNrd2FyZCBjb21w YXRpYmxlLCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGFsc28gdHJpZXMgdG8NCj4gPiA+Pj4gKwkg KiBtYW5hZ2UgdGhlIFNQSSBmbGFzaCBtZW1vcnkgYXMgdW5pZm9ybSB3aXRoIGEgc2luZ2xlIGVy YXNlIHNlY3Rvcg0KPiA+ID4+PiArCSAqIHNpemUsIHdoZW4gcG9zc2libGUuDQo+ID4gPj4+ICsJ ICovDQo+ID4gPj4+ICAjaWZkZWYgQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTDQo+ ID4gPj4+ICAJLyogcHJlZmVyICJzbWFsbCBzZWN0b3IiIGVyYXNlIGlmIHBvc3NpYmxlICovDQo+ ID4gPj4+IC0JaWYgKGluZm8tPmZsYWdzICYgU0VDVF80Sykgew0KPiA+ID4+PiAtCQlub3ItPmVy YXNlX29wY29kZSA9IFNQSU5PUl9PUF9CRV80SzsNCj4gPiA+Pj4gLQkJbXRkLT5lcmFzZXNpemUg PSA0MDk2Ow0KPiA+ID4+PiAtCX0gZWxzZSBpZiAoaW5mby0+ZmxhZ3MgJiBTRUNUXzRLX1BNQykg ew0KPiA+ID4+PiAtCQlub3ItPmVyYXNlX29wY29kZSA9IFNQSU5PUl9PUF9CRV80S19QTUM7DQo+ ID4gPj4+IC0JCW10ZC0+ZXJhc2VzaXplID0gNDA5NjsNCj4gPiA+Pj4gLQl9IGVsc2UNCj4gPiA+ Pj4gKwl3YW50ZWRfc2l6ZSA9IDQwOTZ1Ow0KPiA+ID4+PiAgI2VuZGlmDQo+ID4gPj4+IC0Jew0K PiA+ID4+PiAtCQlub3ItPmVyYXNlX29wY29kZSA9IFNQSU5PUl9PUF9TRTsNCj4gPiA+Pj4gLQkJ bXRkLT5lcmFzZXNpemUgPSBpbmZvLT5zZWN0b3Jfc2l6ZTsNCj4gPiA+Pj4gKw0KPiA+ID4+PiAr CWlmIChzcGlfbm9yX2hhc191bmlmb3JtX2VyYXNlKG5vcikpIHsNCj4gPiA+Pj4gKwkJZXJhc2Ug PSBzcGlfbm9yX3NlbGVjdF91bmlmb3JtX2VyYXNlKG1hcCwgd2FudGVkX3NpemUpOw0KPiA+ID4+ PiArCQlpZiAoIWVyYXNlKQ0KPiA+ID4+PiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPj4+ICsJ CW5vci0+ZXJhc2Vfb3Bjb2RlID0gZXJhc2UtPm9wY29kZTsNCj4gPiA+Pj4gKwkJbXRkLT5lcmFz ZXNpemUgPSBlcmFzZS0+c2l6ZTsNCj4gPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ID4gPj4+ICAJfQ0K PiA+ID4+PiArDQo+ID4gPj4+ICsJLyoNCj4gPiA+Pj4gKwkgKiBGb3Igbm9uLXVuaWZvcm0gU1BJ IGZsYXNoIG1lbW9yeSwgc2V0IG10ZC0+ZXJhc2VzaXplIHRvIHRoZQ0KPiA+ID4+PiArCSAqIG1h eGltdW0gZXJhc2Ugc2VjdG9yIHNpemUuIE5vIG5lZWQgdG8gc2V0IG5vci0+ZXJhc2Vfb3Bjb2Rl Lg0KPiA+ID4+PiArCSAqLw0KPiA+ID4+PiArCWZvciAoaSA9IFNOT1JfRVJBU0VfVFlQRV9NQVgg LSAxOyBpID49IDA7IGktLSkgew0KPiA+ID4+PiArCQlpZiAobWFwLT5lcmFzZV90eXBlW2ldLnNp emUpIHsNCj4gPiA+Pj4gKwkJCWVyYXNlID0gJm1hcC0+ZXJhc2VfdHlwZVtpXTsNCj4gPiA+Pj4g KwkJCWJyZWFrOw0KPiA+ID4+PiArCQl9DQo+ID4gPj4+ICsJfQ0KPiA+ID4+PiArDQo+ID4gPj4+ ICsJaWYgKCFlcmFzZSkNCj4gPiA+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPj4+ICsNCj4g PiA+Pj4gKwltdGQtPmVyYXNlc2l6ZSA9IGVyYXNlLT5zaXplOw0KPiA+ID4+PiAgCXJldHVybiAw Ow0KPiA+ID4+PiAgfQ0KPiA+ID4+Pg0KPiA+ID4+PiBAQCAtMjczNyw3ICszMjQ3LDcgQEAgc3Rh dGljIGludCBzcGlfbm9yX3NldHVwKHN0cnVjdCBzcGlfbm9yDQo+ID4gPj4+ICpub3IsIGNvbnN0 IHN0cnVjdCBmbGFzaF9pbmZvICppbmZvLA0KPiA+ID4+PiAgCX0NCj4gPiA+Pj4NCj4gPiA+Pj4g IAkvKiBTZWxlY3QgdGhlIFNlY3RvciBFcmFzZSBjb21tYW5kLiAqLw0KPiA+ID4+PiAtCWVyciA9 IHNwaV9ub3Jfc2VsZWN0X2VyYXNlKG5vciwgaW5mbyk7DQo+ID4gPj4+ICsJZXJyID0gc3BpX25v cl9zZWxlY3RfZXJhc2Uobm9yLCBpbmZvLT5zZWN0b3Jfc2l6ZSk7DQo+ID4gPj4+ICAJaWYgKGVy cikgew0KPiA+ID4+PiAgCQlkZXZfZXJyKG5vci0+ZGV2LA0KPiA+ID4+PiAgCQkJImNhbid0IHNl bGVjdCBlcmFzZSBzZXR0aW5ncyBzdXBwb3J0ZWQgYnkgYm90aCB0aGUgU1BJDQo+ID4gPj4+IGNv bnRyb2xsZXIgYW5kIG1lbW9yeS5cbiIpOyBkaWZmIC0tZ2l0DQo+ID4gPj4+IGEvaW5jbHVkZS9s aW51eC9tdGQvc3BpLW5vci5oIGIvaW5jbHVkZS9saW51eC9tdGQvc3BpLW5vci5oIGluZGV4DQo+ ID4gPj4+IDA5YTEwZmQuLmE4NzNhMGIgMTAwNjQ0DQo+ID4gPj4+IC0tLSBhL2luY2x1ZGUvbGlu dXgvbXRkL3NwaS1ub3IuaA0KPiA+ID4+PiArKysgYi9pbmNsdWRlL2xpbnV4L210ZC9zcGktbm9y LmgNCj4gPiA+Pj4gQEAgLTI0MCw2ICsyNDAsOTQgQEAgZW51bSBzcGlfbm9yX29wdGlvbl9mbGFn cyB7ICB9Ow0KPiA+ID4+Pg0KPiA+ID4+PiAgLyoqDQo+ID4gPj4+ICsgKiBzdHJ1Y3Qgc3BpX25v cl9lcmFzZV90eXBlIC0gU3RydWN0dXJlIHRvIGRlc2NyaWJlIGEgU1BJIE5PUiBlcmFzZSB0eXBl DQo+ID4gPj4+ICsgKiBAc2l6ZToJCXRoZSBzaXplIG9mIHRoZSBzZWN0b3IvYmxvY2sgZXJhc2Vk IGJ5IHRoZSBlcmFzZSB0eXBlLg0KPiA+ID4+PiArICoJCQlKRURFQyBKRVNEMjE2QiBpbXBvc2Vz IGVyYXNlIHNpemVzIHRvIGJlIGENCj4gcG93ZXIgb2YgMi4NCj4gPiA+Pj4gKyAqIEBzaXplX3No aWZ0OgkJQHNpemUgaXMgYSBwb3dlciBvZiAyLCB0aGUgc2hpZnQgaXMgc3RvcmVkIGluDQo+ID4g Pj4+ICsgKgkJCUBzaXplX3NoaWZ0Lg0KPiA+ID4+PiArICogQHNpemVfbWFzazoJCXRoZSBzaXpl IG1hc2sgYmFzZWQgb24gQHNpemVfc2hpZnQuDQo+ID4gPj4+ICsgKiBAb3Bjb2RlOgkJdGhlIFNQ SSBjb21tYW5kIG9wIGNvZGUgdG8gZXJhc2UgdGhlDQo+ID4gc2VjdG9yL2Jsb2NrLg0KPiA+ID4+ PiArICogQGlkeDoJCUVyYXNlIFR5cGUgaW5kZXggYXMgc29ydGVkIGluIHRoZSBCYXNpYyBGbGFz aCBQYXJhbWV0ZXINCj4gPiA+Pj4gKyAqCQkJVGFibGUuIEl0IHdpbGwgYmUgdXNlZCB0byBzeW5j aHJvbml6ZSB0aGUNCj4gc3VwcG9ydGVkDQo+ID4gPj4+ICsgKgkJCUVyYXNlIFR5cGVzIHdpdGgg dGhlIG9uZXMgaWRlbnRpZmllZCBpbiB0aGUgU0ZEUA0KPiA+ID4+PiArICoJCQlvcHRpb25hbCB0 YWJsZXMuDQo+ID4gPj4+ICsgKi8NCj4gPiA+Pj4gK3N0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUg ew0KPiA+ID4+PiArCXUzMglzaXplOw0KPiA+ID4+PiArCXUzMglzaXplX3NoaWZ0Ow0KPiA+ID4+ PiArCXUzMglzaXplX21hc2s7DQo+ID4gPj4+ICsJdTgJb3Bjb2RlOw0KPiA+ID4+PiArCXU4CWlk eDsNCj4gPiA+Pj4gK307DQo+ID4gPj4+ICsNCj4gPiA+Pj4gKy8qKg0KPiA+ID4+PiArICogc3Ry dWN0IHNwaV9ub3JfZXJhc2VfY29tbWFuZCAtIFVzZWQgZm9yIG5vbi11bmlmb3JtIGVyYXNlcw0K PiA+ID4+PiArICogVGhlIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgbGlzdCBvZiBl cmFzZSBjb21tYW5kcyB0bw0KPiA+ID4+PiArYmUgZXhlY3V0ZWQNCj4gPiA+Pj4gKyAqIG9uY2Ug d2UgdmFsaWRhdGUgdGhhdCB0aGUgZXJhc2UgY2FuIGJlIHBlcmZvcm1lZC4gVGhlIGVsZW1lbnRz DQo+ID4gPj4+ICtpbiB0aGUgbGlzdA0KPiA+ID4+PiArICogYXJlIHJ1bi1sZW5ndGggZW5jb2Rl ZC4NCj4gPiA+Pj4gKyAqIEBsaXN0OgkJZm9yIGluY2x1c2lvbiBpbnRvIHRoZSBsaXN0IG9mIGVy YXNlIGNvbW1hbmRzLg0KPiA+ID4+PiArICogQGNvdW50OgkJaG93IG1hbnkgdGltZXMgdGhlIHNh bWUgZXJhc2UgY29tbWFuZA0KPiA+IHNob3VsZCBiZQ0KPiA+ID4+PiArICoJCQljb25zZWN1dGl2 ZWx5IHVzZWQuDQo+ID4gPj4+ICsgKiBAc2l6ZToJCXRoZSBzaXplIG9mIHRoZSBzZWN0b3IvYmxv Y2sgZXJhc2VkIGJ5IHRoZSBjb21tYW5kLg0KPiA+ID4+PiArICogQG9wY29kZToJCXRoZSBTUEkg Y29tbWFuZCBvcCBjb2RlIHRvIGVyYXNlIHRoZQ0KPiA+IHNlY3Rvci9ibG9jay4NCj4gPiA+Pj4g KyAqLw0KPiA+ID4+PiArc3RydWN0IHNwaV9ub3JfZXJhc2VfY29tbWFuZCB7DQo+ID4gPj4+ICsJ c3RydWN0IGxpc3RfaGVhZAlsaXN0Ow0KPiA+ID4+PiArCXUzMgkJCWNvdW50Ow0KPiA+ID4+PiAr CXUzMgkJCXNpemU7DQo+ID4gPj4+ICsJdTgJCQlvcGNvZGU7DQo+ID4gPj4+ICt9Ow0KPiA+ID4+ PiArDQo+ID4gPj4+ICsvKioNCj4gPiA+Pj4gKyAqIHN0cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lv biAtIFN0cnVjdHVyZSB0byBkZXNjcmliZSBhIFNQSSBOT1INCj4gPiA+Pj4gK2VyYXNlDQo+ID4g cmVnaW9uDQo+ID4gPj4+ICsgKiBAb2Zmc2V0OgkJdGhlIG9mZnNldCBpbiB0aGUgZGF0YSBhcnJh eSBvZiBlcmFzZSByZWdpb24NCj4gPiBzdGFydC4NCj4gPiA+Pj4gKyAqCQkJTFNCIGJpdHMgYXJl IHVzZWQgYXMgYSBiaXRtYXNrIGVuY29kaW5nIGZsYWdzIHRvDQo+ID4gPj4+ICsgKgkJCWRldGVy bWluZSBpZiB0aGlzIHJlZ2lvbiBpcyBvdmVybGFpZCwgaWYgdGhpcyByZWdpb24NCj4gaXMNCj4g PiA+Pj4gKyAqCQkJdGhlIGxhc3QgaW4gdGhlIFNQSSBOT1IgZmxhc2ggbWVtb3J5IGFuZCB0bw0K PiBpbmRpY2F0ZQ0KPiA+ID4+PiArICoJCQlhbGwgdGhlIHN1cHBvcnRlZCBlcmFzZSBjb21tYW5k cyBpbnNpZGUgdGhpcw0KPiByZWdpb24uDQo+ID4gPj4+ICsgKgkJCVRoZSBlcmFzZSB0eXBlcyBh cmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlcg0KPiB3aXRoIHRoZQ0KPiA+ID4+PiArICoJCQlz bWFsbGVzdCBFcmFzZSBUeXBlIHNpemUgYmVpbmcgYXQgQklUKDApLg0KPiA+ID4+PiArICogQHNp emU6CQl0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzLg0KPiA+ID4+PiArICovDQo+ID4g Pj4+ICtzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9yZWdpb24gew0KPiA+ID4+PiArCXU2NAkJb2Zmc2V0 Ow0KPiA+ID4+PiArCXU2NAkJc2l6ZTsNCj4gPiA+Pj4gK307DQo+ID4gPj4+ICsNCj4gPiA+Pj4g KyNkZWZpbmUgU05PUl9FUkFTRV9UWVBFX01BWAk0DQo+ID4gPj4+ICsjZGVmaW5lIFNOT1JfRVJB U0VfVFlQRV9NQVNLDQo+ID4gPj4+IAlHRU5NQVNLX1VMTChTTk9SX0VSQVNFX1RZUEVfTUFYIC0g MSwgMCkNCj4gPiA+Pj4gKw0KPiA+ID4+PiArI2RlZmluZSBTTk9SX0xBU1RfUkVHSU9OCUJJVCg0 KQ0KPiA+ID4+PiArI2RlZmluZSBTTk9SX09WRVJMQUlEX1JFR0lPTglCSVQoNSkNCj4gPiA+Pj4g Kw0KPiA+ID4+PiArI2RlZmluZSBTTk9SX0VSQVNFX0ZMQUdTX01BWAk2DQo+ID4gPj4+ICsjZGVm aW5lIFNOT1JfRVJBU0VfRkxBR1NfTUFTSw0KPiA+ID4+PiAJR0VOTUFTS19VTEwoU05PUl9FUkFT RV9GTEFHU19NQVggLSAxLCAwKQ0KPiA+ID4+PiArDQo+ID4gPj4+ICsvKioNCj4gPiA+Pj4gKyAq IHN0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAtIFN0cnVjdHVyZSB0byBkZXNjcmliZSB0aGUgU1BJ IE5PUiBlcmFzZQ0KPiBtYXANCj4gPiA+Pj4gKyAqIEByZWdpb25zOgkJYXJyYXkgb2YgZXJhc2Ug cmVnaW9ucy4gVGhlIHJlZ2lvbnMgYXJlDQo+ID4gY29uc2VjdXRpdmUgaW4NCj4gPiA+Pj4gKyAq CQkJYWRkcmVzcyBzcGFjZS4gV2Fsa2luZyB0aHJvdWdoIHRoZSByZWdpb25zIGlzDQo+IGRvbmUN Cj4gPiA+Pj4gKyAqCQkJaW5jcmVtZW50YWxseS4NCj4gPiA+Pj4gKyAqIEB1bmlmb3JtX3JlZ2lv bjoJYSBwcmUtYWxsb2NhdGVkIGVyYXNlIHJlZ2lvbiBmb3IgU1BJIE5PUiB3aXRoIGENCj4gPiB1 bmlmb3JtDQo+ID4gPj4+ICsgKgkJCXNlY3RvciBzaXplIChsZWdhY3kgaW1wbGVtZW50YXRpb24p Lg0KPiA+ID4+PiArICogQGVyYXNlX3R5cGU6CQlhbiBhcnJheSBvZiBlcmFzZSB0eXBlcyBzaGFy ZWQgYnkgYWxsIHRoZSByZWdpb25zLg0KPiA+ID4+PiArICoJCQlUaGUgZXJhc2UgdHlwZXMgYXJl IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIsDQo+IHdpdGggdGhlDQo+ID4gPj4+ICsgKgkJCXNt YWxsZXN0IEVyYXNlIFR5cGUgc2l6ZSBiZWluZyB0aGUgZmlyc3QgbWVtYmVyDQo+IGluIHRoZQ0K PiA+ID4+PiArICoJCQllcmFzZV90eXBlIGFycmF5Lg0KPiA+ID4+PiArICogQHVuaWZvcm1fZXJh c2VfdHlwZToJYml0bWFzayBlbmNvZGluZyBlcmFzZSB0eXBlcyB0aGF0IGNhbg0KPiBlcmFzZQ0K PiA+ID4+PiB0aGUNCj4gPiA+Pj4gKyAqCQkJZW50aXJlIG1lbW9yeS4gVGhpcyBtZW1iZXIgaXMg Y29tcGxldGVkIGF0DQo+IGluaXQgYnkNCj4gPiA+Pj4gKyAqCQkJdW5pZm9ybSBhbmQgbm9uLXVu aWZvcm0gU1BJIE5PUiBmbGFzaA0KPiBtZW1vcmllcyBpZg0KPiA+ID4+PiB0aGV5DQo+ID4gPj4+ ICsgKgkJCXN1cHBvcnQgYXQgbGVhc3Qgb25lIGVyYXNlIHR5cGUgdGhhdCBjYW4gZXJhc2UNCj4g dGhlDQo+ID4gPj4+ICsgKgkJCWVudGlyZSBtZW1vcnkuDQo+ID4gPj4+ICsgKi8NCj4gPiA+Pj4g K3N0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCB7DQo+ID4gPj4+ICsJc3RydWN0IHNwaV9ub3JfZXJh c2VfcmVnaW9uCSpyZWdpb25zOw0KPiA+ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lv bgl1bmlmb3JtX3JlZ2lvbjsNCj4gPiA+Pj4gKwlzdHJ1Y3Qgc3BpX25vcl9lcmFzZV90eXBlCWVy YXNlX3R5cGVbU05PUl9FUkFTRV9UWVBFX01BWF07DQo+ID4gPj4+ICsJdTgJCQkJdW5pZm9ybV9l cmFzZV90eXBlOw0KPiA+ID4+PiArfTsNCj4gPiA+Pj4gKw0KPiA+ID4+PiArLyoqDQo+ID4gPj4+ ICAgKiBzdHJ1Y3QgZmxhc2hfaW5mbyAtIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgYSBzdHJ1Y3R1 cmUgdXNlZCBpbnRlcm5hbGx5IGJ5DQo+ID4gPj4+ICAgKgkJICAgICAgIHNwaV9ub3Jfc2Nhbigp DQo+ID4gPj4+ICAgKi8NCj4gPiA+Pj4gQEAgLTI2Myw2ICszNTEsNyBAQCBzdHJ1Y3QgZmxhc2hf aW5mbzsNCj4gPiA+Pj4gICAqIEB3cml0ZV9wcm90bzoJdGhlIFNQSSBwcm90b2NvbCBmb3Igd3Jp dGUgb3BlcmF0aW9ucw0KPiA+ID4+PiAgICogQHJlZ19wcm90bwkJdGhlIFNQSSBwcm90b2NvbCBm b3IgcmVhZF9yZWcvd3JpdGVfcmVnL2VyYXNlDQo+ID4gPj4+IG9wZXJhdGlvbnMNCj4gPiA+Pj4g ICAqIEBjbWRfYnVmOgkJdXNlZCBieSB0aGUgd3JpdGVfcmVnDQo+ID4gPj4+ICsgKiBAZXJhc2Vf bWFwOgkJdGhlIGVyYXNlIG1hcCBvZiB0aGUgU1BJIE5PUg0KPiA+ID4+PiAgICogQHByZXBhcmU6 CQlbT1BUSU9OQUxdIGRvIHNvbWUgcHJlcGFyYXRpb25zIGZvciB0aGUNCj4gPiA+Pj4gICAqCQkJ cmVhZC93cml0ZS9lcmFzZS9sb2NrL3VubG9jayBvcGVyYXRpb25zDQo+ID4gPj4+ICAgKiBAdW5w cmVwYXJlOgkJW09QVElPTkFMXSBkbyBzb21lIHBvc3Qgd29yayBhZnRlciB0aGUNCj4gPiA+Pj4g QEAgLTI5OCw2ICszODcsNyBAQCBzdHJ1Y3Qgc3BpX25vciB7DQo+ID4gPj4+ICAJYm9vbAkJCXNz dF93cml0ZV9zZWNvbmQ7DQo+ID4gPj4+ICAJdTMyCQkJZmxhZ3M7DQo+ID4gPj4+ICAJdTgJCQlj bWRfYnVmW1NQSV9OT1JfTUFYX0NNRF9TSVpFXTsNCj4gPiA+Pj4gKwlzdHJ1Y3Qgc3BpX25vcl9l cmFzZV9tYXAJZXJhc2VfbWFwOw0KPiA+ID4+Pg0KPiA+ID4+PiAgCWludCAoKnByZXBhcmUpKHN0 cnVjdCBzcGlfbm9yICpub3IsIGVudW0gc3BpX25vcl9vcHMgb3BzKTsNCj4gPiA+Pj4gIAl2b2lk ICgqdW5wcmVwYXJlKShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBlbnVtIHNwaV9ub3Jfb3BzIG9wcyk7 IEBADQo+ID4gPj4+IC0NCj4gPiA+Pj4gMzE4LDYgKzQwOCwyMyBAQCBzdHJ1Y3Qgc3BpX25vciB7 DQo+ID4gPj4+ICAJdm9pZCAqcHJpdjsNCj4gPiA+Pj4gIH07DQo+ID4gPj4+DQo+ID4gPj4+ICtz dGF0aWMgdTY0IF9fbWF5YmVfdW51c2VkDQo+ID4gPj4+ICtzcGlfbm9yX3JlZ2lvbl9pc19sYXN0 KGNvbnN0IHN0cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lvbiAqcmVnaW9uKSB7DQo+ID4gPj4+ICsJ cmV0dXJuIHJlZ2lvbi0+b2Zmc2V0ICYgU05PUl9MQVNUX1JFR0lPTjsgfQ0KPiA+ID4+PiArDQo+ ID4gPj4+ICtzdGF0aWMgdTY0IF9fbWF5YmVfdW51c2VkDQo+ID4gPj4+ICtzcGlfbm9yX3JlZ2lv bl9lbmQoY29uc3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfcmVnaW9uICpyZWdpb24pIHsNCj4gPiA+ Pj4gKwlyZXR1cm4gKHJlZ2lvbi0+b2Zmc2V0ICYgflNOT1JfRVJBU0VfRkxBR1NfTUFTSykgKyBy ZWdpb24tPnNpemU7DQo+ID4gPj4+ICt9DQo+ID4gPj4+ICsNCj4gPiA+Pj4gK3N0YXRpYyBib29s IF9fbWF5YmVfdW51c2VkIHNwaV9ub3JfaGFzX3VuaWZvcm1fZXJhc2UoY29uc3Qgc3RydWN0DQo+ ID4gPj4+ICtzcGlfbm9yICpub3IpIHsNCj4gPiA+Pj4gKwlyZXR1cm4gISFub3ItPmVyYXNlX21h cC51bmlmb3JtX2VyYXNlX3R5cGU7DQo+ID4gPj4+ICt9DQo+ID4gPj4+ICsNCj4gPiA+Pj4gIHN0 YXRpYyBpbmxpbmUgdm9pZCBzcGlfbm9yX3NldF9mbGFzaF9ub2RlKHN0cnVjdCBzcGlfbm9yICpu b3IsDQo+ID4gPj4+ICAJCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpucCkNCj4gPiA+Pj4gIHsN Cj4gPiA+Pj4gLS0NCj4gPiA+Pj4gMi45LjQNCj4gPiA+Pj4NCj4gPiA+Pj4NCj4gPiA+Pj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4g Pj4+IExpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdA0KPiA+ID4+PiBodHRwczovL2Vt ZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkYN Cj4gPiA+Pj4gbGkNCj4gPiA+Pj4gc3RzLmluZnINCj4gPiA+Pj4gYWRlYWQub3JnJTJGbWFpbG1h biUyRmxpc3RpbmZvJTJGbGludXgtDQo+ID4gPj4+DQo+ID4NCj4gbXRkJTJGJmFtcDtkYXRhPTAy JTdDMDElN0N5b2dlc2huYXJheWFuLmdhdXIlNDBueHAuY29tJTdDM2M3ODJlNQ0KPiA+ID4+Pg0K PiA+IDJiN2ZkNGE4YjlhZjAwOGQ2MTdmZDUxNTQlN0M2ODZlYTFkM2JjMmI0YzZmYTkyY2Q5OWM1 YzMwMTYzNSU3QzAlDQo+ID4gPj4+DQo+ID4gN0MwJTdDNjM2NzIyNzc0MTA4NzE4NzgyJmFtcDtz ZGF0YT1jU3BIVURNaTBMRFYlMkZ4QVlqNmk2cGlTaTNnbiUNCj4gPiA+Pj4gMkJER0FNV0tvT3gz JTJGNSUyQnNVJTNEJmFtcDtyZXNlcnZlZD0wDQo+ID4gPj4NCj4gPiA+DQo+ID4gPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiA+IExp bnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdA0KPiA+ID4gaHR0cHM6Ly9lbWVhMDEuc2Fm ZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGbGkNCj4gPiA+ IHN0DQo+ID4gPiBzLmluZnJhZGVhZC5vcmclMkZtYWlsbWFuJTJGbGlzdGluZm8lMkZsaW51eC0N Cj4gPiBtdGQlMkYmYW1wO2RhdGE9MDIlN0MwMSU3DQo+ID4gPg0KPiA+IEN5b2dlc2huYXJheWFu LmdhdXIlNDBueHAuY29tJTdDNzZlN2UxNTU1ZjRhNGNkYTM3ODAwOGQ2MzM4NTQ4MGIlDQo+ID4g N0M2ODYNCj4gPiA+DQo+ID4NCj4gZWExZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUlN0MwJTdD MCU3QzYzNjc1MzA0NDg3NjE5OTE1NSZhbXA7cw0KPiA+IGRhdGE9MA0KPiA+ID4NCj4gPg0KPiB2 ZEVjT05IbHVmWVFXJTJCRDdLNmxWYVBCeVhNdURINVlBeXglMkZFJTJGQzNlbm8lM0QmYW1wO3Jl c2Vydg0KPiA+IGVkPTANCj4gPiA+DQo=