Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp112006imm; Tue, 16 Oct 2018 19:10:08 -0700 (PDT) X-Google-Smtp-Source: ACcGV63Uhv0ILmvWL2gwz53iJViAvZUcMUG9HSWUUihtnRLVSFGEGj94/25xHNKBf3VhqRbaZN8U X-Received: by 2002:a63:ac02:: with SMTP id v2-v6mr22637071pge.414.1539742208835; Tue, 16 Oct 2018 19:10:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539742208; cv=none; d=google.com; s=arc-20160816; b=nCpHwfqT8FRdN/g0HR7HqBGT1KUehDPbNJ39ZNBMA/Vk9hc0OfKPZXSJTi7pJff1BQ /ksCFCCIpDSChPUmFZvY3pEA19LQ96Hkcmc5d7Cl19rcaWihak5KAgA042/yJ8VNoLFB a5EwkEz+e+nRdu420GcuO4Ry2LN6iXy9naJxwqfedkItCEptdYG2K60KL2g5EDSYv2ip ZqCjN6HAfc5sNj9p7jPN/AJl4c3RwqtB1AbTwu90zrISl3tM9n26nzqL5yHII1zoVChD SjlVjtF825bns9iy9JNqZNQ0NqVVN9HSPnN7QStc0brTFI5rd4Dflf4tdSqtUmEdlvvz toJg== 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=q3zU+bK1Xu+M6gSORiehYVS280tEtel0ho90EB4QjTM=; b=uTAFSEYQttkni3jhUoYn74Wt7B+ADszHIzlSKAQH++rsjHNiKvtCYENPf07dKvVcQn NhzVCWvJpqNrXuV1OPcvEtTEeOXxsBe9NuRgTgiY7xutaIpYMfCozPat0V1tONQFtnKv Qtvo2LPV7nm2vy5R2J9ogi8oQQpk8pPiAfYyqvUuwH7AYG0NazXJPN/2yEEKx9LYfq/0 bi7sWgIexVxbzseuAz8lvufKmOx9PlAHXu+z11TJCd+/gWJjKtRv89VM3Beymwan99kW yXDxOMZQa0k1tfG7zFArxqZLA1zyFjcTGACj2NoKe/Z+n/PdNDfFgYgR823S1P11qZhB ZuOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=PL9uMAQb; 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 101-v6si17170831ple.326.2018.10.16.19.09.53; Tue, 16 Oct 2018 19:10:08 -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=PL9uMAQb; 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 S1727409AbeJQKBQ (ORCPT + 99 others); Wed, 17 Oct 2018 06:01:16 -0400 Received: from mail-eopbgr60061.outbound.protection.outlook.com ([40.107.6.61]:46944 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727099AbeJQKBP (ORCPT ); Wed, 17 Oct 2018 06:01:15 -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=q3zU+bK1Xu+M6gSORiehYVS280tEtel0ho90EB4QjTM=; b=PL9uMAQbkWx5y1yMQXEDq8xS2wpBl2CG4ScrNjDIUohMxOFh0kyTnqDGxr9UmjlDwjsbQNqLS7Tc89FfkQscNC2Z85pLZXw4aPicaEoAB2WHonAxtTWwnJja4MqV/nRdnGbNzP8zLOu9sx/MCyRLXNu6i2eB4ohRS1MCj+Se1wo= Received: from VI1PR04MB1038.eurprd04.prod.outlook.com (10.161.109.144) by VI1PR04MB0944.eurprd04.prod.outlook.com (10.161.107.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.26; Wed, 17 Oct 2018 02:07:44 +0000 Received: from VI1PR04MB1038.eurprd04.prod.outlook.com ([fe80::d887:3c96:479a:4123]) by VI1PR04MB1038.eurprd04.prod.outlook.com ([fe80::d887:3c96:479a:4123%3]) with mapi id 15.20.1228.027; Wed, 17 Oct 2018 02:07:43 +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" 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: AQHUSeYwGQ074lVuqESxUXlBIHGe8qUh1lUwgABb2gCAABY6gIAAnHVQ Date: Wed, 17 Oct 2018 02:07:43 +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;VI1PR04MB0944;6:fjhULidHDcKQCgkTF8smEwX3JfT8G6ZMwy1EKah1AU8u1GFytznQU3NcaP3ZzhPTmcK41TaAnltZef2jiqMsL4rdDXr/sjlEVUzCSHfQsKOBe0oq+uzK9A0UvwgMknfbC7b4b5nvvgls8bRsOyn3wgWJqd59q9gVlFGsRxNKQK2emva4Teed5aWHlihxvQCuZiPRLeuZURv5Drw6pMA6hmbYUkANp/x1QYz7ASYVTTrZYI7AaCrzsQJ5vJBWlA0WE8R0tU2sVmy52VS1B4LoRedRQSqpulO3n4CFzqs3CCktnw4uO3/J43Sb4x57I03/zRAePuF7MC3g4jYI33m6pIVzqJkvAVRZRSlYcmMQHS7moNsvv5AQdwn6R7ClNeeSjVHYM+mFxorCPBXKhAq3WVIgP5Akp+pY2tJlt6YfQ8oBs/daIFiet04IRR17IGuI3R3Q0etJneOvWEKcG7exmA==;5:wIukvtUjb5fudVgmPpKy4NeQHJ5hkPq6pSVuBIzXQ0MXoOmUEZknQrE4TLhQQWDoABg7yGJT7j7WJvhm96CP4K9u5bFWPggOl0xkir0Gw9tNev9IkqvBX4DRMKmiNB5vnPXPEqwNJ9BkFJjJ2qLYe7cw+HGRErMk+uvro8QCQY4=;7:Ear/oIuWKdMNv8gMWfoY5m4/HMF30GovX41rb4V1dsb8T0ImlKjggM/fXJiysUy0mKI8DFxfch87Q4p2o4VeKNwa8zzmXF6rl7NXG8GjQu4x4VH0rKsr7RY/J5c9GXyG8Jq8kLrWwdzeUbmFi7/yhs7d95ld5oXQ7ntD1NgvykAJ2PtEKBFMi8nATdiCqnazp+HVp8M65BRaF1igW8ekcR2/fVgrYAPVMljmXrfHMt32O8T4r/JgtaRRzhP3stnB x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 3b73a2e2-2de6-485d-becb-08d633d55364 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:VI1PR04MB0944; x-ms-traffictypediagnostic: VI1PR04MB0944: 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)(8121501046)(5005006)(3002001)(3231355)(944501410)(4982022)(52105095)(10201501046)(93006095)(93001095)(6055026)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(201708071742011)(7699051)(76991084);SRVR:VI1PR04MB0944;BCL:0;PCL:0;RULEID:;SRVR:VI1PR04MB0944; x-forefront-prvs: 08286A0BE2 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39860400002)(366004)(136003)(346002)(376002)(396003)(199004)(13464003)(189003)(45080400002)(229853002)(2501003)(93886005)(478600001)(5250100002)(966005)(14454004)(25786009)(33656002)(66066001)(39060400002)(4326008)(105586002)(106356001)(3846002)(6246003)(2906002)(66574009)(4744004)(53936002)(71200400001)(71190400001)(6116002)(305945005)(99286004)(76176011)(7736002)(74316002)(53546011)(186003)(68736007)(6506007)(102836004)(8676002)(7416002)(5660300001)(81166006)(14444005)(81156014)(2201001)(217873002)(256004)(7696005)(26005)(2900100001)(97736004)(11346002)(575784001)(55016002)(6436002)(53946003)(6306002)(86362001)(316002)(486006)(16200700003)(9686003)(476003)(446003)(54906003)(110136005)(8936002)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR04MB0944;H:VI1PR04MB1038.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: lvrcRVJ/femmM+HcGPwP5t2omh6X+Bl2oyKTWe8DLhP/bMf9TgbQY1s4lCvCu4rzUbh19GZNxnefIjERNz5c29m0nl+tpa/jfucXuKAPBWJOuW3alXgBIXPBi8BLahybAEfc+eRLo/BYw9IeG7mChclEUqQt1gVRxX+DVlxN02cEItyQk1bpjoQcGkRmbu5SG0p6043P8H9dZgMGBFvipxB6nt1q8xfzjlp6Ej6YAgokiqFXnHZteoxmI3r+GI8rTLkU6vKd4/6MXbW2AnyPhcjjmdbY9iqQKrURfmcMlpprTymF4hd/G6LVNsoX8WHjly0n6TlTQ21Ysgz+xaGd8RkTTawHBhVhYuJHu6v8tjg= 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: 3b73a2e2-2de6-485d-becb-08d633d55364 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Oct 2018 02:07:43.8074 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB0944 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgVHVkb3IsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQ3lyaWxs ZSBQaXRjaGVuIFttYWlsdG86Y3lyaWxsZS5waXRjaGVuQHdlZGV2NHUuZnJdDQo+IFNlbnQ6IFR1 ZXNkYXksIE9jdG9iZXIgMTYsIDIwMTggMTA6MDQgUE0NCj4gVG86IFR1ZG9yIEFtYmFydXMgPHR1 ZG9yLmFtYmFydXNAbWljcm9jaGlwLmNvbT47IFlvZ2VzaCBOYXJheWFuIEdhdXINCj4gPHlvZ2Vz aG5hcmF5YW4uZ2F1ckBueHAuY29tPjsgbWFyZWsudmFzdXRAZ21haWwuY29tOw0KPiBkd213MkBp bmZyYWRlYWQub3JnOyBjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb207DQo+IGJvcmlzLmJyZXpp bGxvbkBib290bGluLmNvbTsgcmljaGFyZEBub2QuYXQNCj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmc7IG5pY29sYXMuZmVycmVAbWljcm9jaGlwLmNvbTsNCj4gY3lyaWxsZS5waXRj aGVuQG1pY3JvY2hpcC5jb207IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1h cm0tDQo+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBDcmlzdGlhbi5CaXJzYW5AbWljcm9j aGlwLmNvbQ0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYzIDEvMl0gbXRkOiBzcGktbm9yOiBhZGQg c3VwcG9ydCB0byBub24tdW5pZm9ybSBTRkRQIFNQSQ0KPiBOT1IgZmxhc2ggbWVtb3JpZXMNCj4g DQo+IEhpIFR1ZG9yLA0KPiANCj4gTGUgMTYvMTAvMjAxOCDDoCAxNzoxNCwgVHVkb3IgQW1iYXJ1 cyBhIMOpY3JpdMKgOg0KPiA+IEhpLCBZb2dlc2gsDQo+ID4NCj4gPiBPbiAxMC8xNi8yMDE4IDEy OjUxIFBNLCBZb2dlc2ggTmFyYXlhbiBHYXVyIHdyb3RlOg0KPiA+PiBIaSBUdWRvciwNCj4gPj4N Cj4gPj4gVGhpcyBwYXRjaCBpcyBicmVha2luZyB0aGUgMS00LTQgUmVhZCBwcm90b2NvbCBmb3Ig dGhlIHNwYW5zaW9uIGZsYXNoDQo+ICJzMjVmbDUxMnMiLg0KPiA+Pg0KPiA+PiBXaXRob3V0IHRo aXMgcGF0Y2ggcmVhZCByZXF1ZXN0IGNvbW1hbmQgZm9yIFF1YWQgbW9kZSwgNC1ieXRlIGVuYWJs ZSwgaXMNCj4gY29taW5nIGFzIDB4RUMgaS5lLiBTUElOT1JfT1BfUkVBRF8xXzRfNF80Qi4NCj4g Pj4gQnV0IGFmdGVyIGFwcGx5aW5nIHRoaXMgcGF0Y2gsIHJlYWQgcmVxdWVzdCBjb21tYW5kIGZv ciBRdWFkIG1vZGUgaXMNCj4gY29taW5nIGFzIDB4NkMgaS5lLiBTUElOT1JfT1BfUkVBRF8xXzFf NF80Qi4NCj4gPj4NCj4gPj4gVGhpcyBmbGFzaCBhbHNvIHN1cHBvcnRzIG5vbi11bmlmb3JtIGVy YXNlLg0KPiA+PiBDYW4geW91IHBsZWFzZSBjaGVjayBhbmQgcHJvdmlkZSBzb21lIHN1Z2dlc3Rp b24/DQo+ID4NCj4gPiBJIGRvbid0IGhhdmUgdGhpcyBtZW1vcnkgdG8gdGVzdCBpdCwgYnV0IEkn bGwgdHJ5IHRvIGhlbHAuDQo+ID4NCj4gPiBEb2VzIHMyNWZsNTEycyBzdXBwb3J0IG5vbi11bmlm b3JtIGVyYXNlPyBJJ20gbG9va2luZyBpbiBkYXRhc2hlZXRbMV0NCj4gPiBhdCBKRURFQyBCRlBU IHRhYmxlLCBkd29yZHMgOCBhbmQgOSwgcGFnZSAxMzIvMTQ2IGFuZCBpdCBsb29rcyBsaWtlIGl0 DQo+ID4gc3VwcG9ydHMganVzdCAyNTZLQiB1bmlmb3JtIGVyYXNlLg0KPiA+DQo+IA0KQWN0dWFs bHkgdGhlcmUgaXMgbm8gZW50cnkgb2YgczI1ZnM1MTJzIGluIGN1cnJlbnQgc3BpLW5vci5jIGZp bGUuDQpGb3IgbXkgY29ubmVjdGVkIGZsYXNoIHBhcnQsIGplZGVjIElEIHJlYWQgcG9pbnRzIHRv IHMyNWZsNTEycy4gSSBoYXZlIGFza2VkIG15IGJvYXJkIHRlYW0gdG8gY29uZmlybSB0aGUgbmFt ZSBvZiBleGFjdCBjb25uZWN0ZWQgZmxhc2ggcGFydC4NCldoZW4gSSBjaGVjayB0aGUgZGF0YSBz aGVldCBvZiBzMjVmczUxMnMsIGl0IGFsc28gcG9pbnRzIHRvIHRoZSBzYW1lIEplZGVjIElEIGlu Zm9ybWF0aW9uLg0KICAgICAgeyAiczI1Zmw1MTJzIiwgIElORk8oMHgwMTAyMjAsIDB4NGQwMCwg MjU2ICogMTAyNCwgMjU2LCAuLi4ufQ0KDQpCdXQgYXMgc3RhdGVkIGVhcmxpZXIsIGlmIEkgc2tp cCByZWFkaW5nIFNGRFAgb3IgcmVhZCB1c2luZyAxLTEtMSBwcm90b2NvbCB0aGVuIHJlYWQgYXJl IGFsd2F5cyBjb3JyZWN0Lg0KRm9yIDEtNC00IHByb3RvY29sIHJlYWQgYXJlIHdyb25nIGFuZCBv biBmdXJ0aGVyIGRlYnVnZ2luZyBmb3VuZCB0aGF0IFJlYWQgY29kZSBvZiAweDZDIGlzIGJlaW5n IHNlbmQgYXMgb3Bjb2RlIGluc3RlYWQgb2YgMHhFQy4NCg0KSWYgSSByZXZlcnQgdGhpcyBwYXRj aCwgcmVhZHMgYXJlIHdvcmtpbmcgZmluZS4NCg0KLS0NClJlZ2FyZHMNCllvZ2VzaCBHYXVyDQoN Cj4gczI1ZlM1MTJzIHN1cHBvcnRzIGJvdGggdW5pZm9ybSBhbmQgbm9uIHVuaWZvcm0gZXJhc2Ug b3B0aW9ucyBidXQgczI1Zkw1MTJzIGlzDQo+IGFsd2F5cyB1bmlmb3JtLiBMIGlzIGFuIG9sZCBt ZW1vcnkgcGFydCwgUyBpcyBuZXdlci4NCj4NCj4gQWxzbywgdGhlIDh0aCBhbmQgOXRoIFdPUkRz IG9mIHRoZSBCYXNpYyBGbGFzaCBQYXJhbWV0ZXIgVGFibGUgYWxvbmUgY2FuJ3QgdGVsbA0KPiB5 b3Ugd2hldGhlciBvciBub3QgdGhlIG1lbW9yeSBwYXJ0IGNhbiBiZSBub24gdW5pZm9ybS4NCj4g SWYgdGhlIG1lbW9yeSBjYW4gYmUgbm9uIHVuaWZvcm0gdGhlbiB0aGUgc2VjdG9yIGVyYXNlIG1h cCB0YWJsZSBpcyBtYW5kYXRvcnksDQo+IGhlbmNlIHdoZW4gdGhlIHRhYmxlIGlzIG1pc3Npbmcg eW91IGtub3cgdGhhdCB5b3VyIG1lbW9yeSBwYXJ0IGlzIGFsd2F5cw0KPiB1bmlmb3JtLg0KPiAN Cj4gQmVzdCByZWdhcmRzLA0KPiANCj4gQ3lyaWxsZQ0KPiANCj4gPiBUaGFua3MsDQo+ID4gdGEN Cj4gPg0KPiA+IFsxXQ0KPiA+IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91 dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRnd3dy4NCj4gPg0KPiBjeXByZXNzLmNvbSUyRmZp bGUlMkYxNzc5NzElMkZkb3dubG9hZCZhbXA7ZGF0YT0wMiU3QzAxJTdDeW9nZXNobg0KPiBhcmF5 YQ0KPiA+DQo+IG4uZ2F1ciU0MG54cC5jb20lN0M3NmU3ZTE1NTVmNGE0Y2RhMzc4MDA4ZDYzMzg1 NDgwYiU3QzY4NmVhMWQzYmMyDQo+IGI0YzZmDQo+ID4NCj4gYTkyY2Q5OWM1YzMwMTYzNSU3QzAl N0MwJTdDNjM2NzUzMDQ0ODc2MTk5MTU1JmFtcDtzZGF0YT1jaW9DOThFSA0KPiBPR2xGYmcNCj4g PiBYUGhvSUlKNzJLM0pyTlVuekExcFloU0I5akR3ZyUzRCZhbXA7cmVzZXJ2ZWQ9MA0KPiA+DQo+ ID4+DQo+ID4+IC0tDQo+ID4+IFJlZ2FyZHMNCj4gPj4gWW9nZXNoIEdhdXINCj4gPj4NCj4gPj4+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+PiBGcm9tOiBsaW51eC1tdGQgW21haWx0 bzpsaW51eC1tdGQtYm91bmNlc0BsaXN0cy5pbmZyYWRlYWQub3JnXSBPbg0KPiA+Pj4gQmVoYWxm IE9mIFR1ZG9yIEFtYmFydXMNCj4gPj4+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAxMSwgMjAx OCA5OjEwIFBNDQo+ID4+PiBUbzogbWFyZWsudmFzdXRAZ21haWwuY29tOyBkd213MkBpbmZyYWRl YWQub3JnOw0KPiA+Pj4gY29tcHV0ZXJzZm9ycGVhY2VAZ21haWwuY29tOyBib3Jpcy5icmV6aWxs b25AYm9vdGxpbi5jb207DQo+ID4+PiByaWNoYXJkQG5vZC5hdA0KPiA+Pj4gQ2M6IFR1ZG9yIEFt YmFydXMgPHR1ZG9yLmFtYmFydXNAbWljcm9jaGlwLmNvbT47IGxpbnV4LQ0KPiA+Pj4ga2VybmVs QHZnZXIua2VybmVsLm9yZzsgbmljb2xhcy5mZXJyZUBtaWNyb2NoaXAuY29tOw0KPiA+Pj4gY3ly aWxsZS5waXRjaGVuQG1pY3JvY2hpcC5jb207IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3Jn Ow0KPiA+Pj4gbGludXgtYXJtLSBrZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgQ3Jpc3RpYW4u Qmlyc2FuQG1pY3JvY2hpcC5jb20NCj4gPj4+IFN1YmplY3Q6IFtQQVRDSCB2MyAxLzJdIG10ZDog c3BpLW5vcjogYWRkIHN1cHBvcnQgdG8gbm9uLXVuaWZvcm0NCj4gPj4+IFNGRFAgU1BJIE5PUiBm bGFzaCBtZW1vcmllcw0KPiA+Pj4NCj4gPj4+IEJhc2VkIG9uIEN5cmlsbGUgUGl0Y2hlbidzIHBh dGNoDQo+ID4+PiBodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNv bS8/dXJsPWh0dHBzJTNBJTJGJTJGbA0KPiA+Pj4ga21sLm9yDQo+ID4+Pg0KPiBnJTJGbGttbCUy RjIwMTclMkYzJTJGMjIlMkY5MzUmYW1wO2RhdGE9MDIlN0MwMSU3Q3lvZ2VzaG5hcmF5YW4uDQo+ ID4+Pg0KPiBnYXVyJTQwbnhwLmNvbSU3QzNjNzgyZTUyYjdmZDRhOGI5YWYwMDhkNjE3ZmQ1MTU0 JTdDNjg2ZWExZDNiYzJiNA0KPiA+Pj4NCj4gYzZmYTkyY2Q5OWM1YzMwMTYzNSU3QzAlN0MwJTdD NjM2NzIyNzc0MTA4NzE4NzgyJmFtcDtzZGF0YT1zenljJQ0KPiA+Pj4NCj4gMkZUdW1HNmVZQW1C ZDBvVzNJTDd2MXlMaDlFMVNBWnFMJTJCQ1djek9BJTNEJmFtcDtyZXNlcnZlZD0wLg0KPiA+Pj4N Cj4gPj4+IFRoaXMgcGF0Y2ggaXMgYSB0cmFuc2l0aW9uYWwgcGF0Y2ggaW4gaW50cm9kdWNpbmcg IHRoZSBzdXBwb3J0IG9mDQo+ID4+PiBTRkRQIFNQSSBtZW1vcmllcyB3aXRoIG5vbi11bmlmb3Jt IGVyYXNlIHNpemVzIGxpa2UgU3BhbnNpb24gczI1ZnM1MTJzLg0KPiA+Pj4gTm9uLXVuaWZvcm0g ZXJhc2UgbWFwcyB3aWxsIGJlIHVzZWQgbGF0ZXIgd2hlbiBpbml0aWFsaXplZCBiYXNlZCBvbg0K PiA+Pj4gdGhlIFNGRFAgZGF0YS4NCj4gPj4+DQo+ID4+PiBJbnRyb2R1Y2UgdGhlIG1lbW9yeSBl cmFzZSBtYXAgd2hpY2ggc3BsaXRzIHRoZSBtZW1vcnkgYXJyYXkgaW50bw0KPiA+Pj4gb25lIG9y IG1hbnkgZXJhc2UgcmVnaW9ucy4gRWFjaCBlcmFzZSByZWdpb24gc3VwcG9ydHMgdXAgdG8gNCBl cmFzZQ0KPiA+Pj4gdHlwZXMsIGFzIGRlZmluZWQgYnkgdGhlIEpFREVDIEpFU0QyMTZCIChTRkRQ KSBzcGVjaWZpY2F0aW9uLg0KPiA+Pj4NCj4gPj4+IFRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUs IHRoZSBlcmFzZSBtYXAgb2YgdW5pZm9ybSBTUEkgTk9SIGZsYXNoDQo+ID4+PiBtZW1vcmllcyBp cyBpbml0aWFsaXplZCBzbyBpdCBjb250YWlucyBvbmx5IG9uZSBlcmFzZSByZWdpb24gYW5kDQo+ ID4+PiB0aGlzIGVyYXNlIHJlZ2lvbiBzdXBwb3J0cyBvbmx5IG9uZSBlcmFzZSBjb21tYW5kLiBI ZW5jZSBhIHNpbmdsZQ0KPiA+Pj4gc2l6ZSBpcyB1c2VkIHRvIGVyYXNlIGFueSBzZWN0b3IvYmxv Y2sgb2YgdGhlIG1lbW9yeS4NCj4gPj4+DQo+ID4+PiBCZXNpZGVzLCBzaW5jZSB0aGUgYWxnb3Jp dGhtIHVzZWQgdG8gZXJhc2Ugc2VjdG9ycyBvbiBub24tdW5pZm9ybQ0KPiA+Pj4gU1BJIE5PUiBm bGFzaCBtZW1vcmllcyBpcyBxdWl0ZSBleHBlbnNpdmUsIHdoZW4gcG9zc2libGUsIHRoZSBlcmFz ZQ0KPiA+Pj4gbWFwIGlzIHR1bmVkIHRvIGNvbWUgYmFjayB0byB0aGUgdW5pZm9ybSBjYXNlLg0K PiA+Pj4NCj4gPj4+IFRoZSAnZXJhc2Ugd2l0aCB0aGUgYmVzdCBjb21tYW5kLCBtb3ZlIGZvcndh cmQgYW5kIHJlcGVhdCcgYXBwcm9hY2gNCj4gPj4+IHdhcyBzdWdnZXN0ZWQgYnkgQ3Jpc3RpYW4g Qmlyc2FuIGluIGEgYnJhaW5zdG9ybSBzZXNzaW9uLCBzbzoNCj4gPj4+DQo+ID4+PiBTdWdnZXN0 ZWQtYnk6IENyaXN0aWFuIEJpcnNhbiA8Y3Jpc3RpYW4uYmlyc2FuQG1pY3JvY2hpcC5jb20+DQo+ ID4+PiBTaWduZWQtb2ZmLWJ5OiBUdWRvciBBbWJhcnVzIDx0dWRvci5hbWJhcnVzQG1pY3JvY2hp cC5jb20+DQo+ID4+PiAtLS0NCj4gPj4+ICBkcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYyB8 IDU5NA0KPiA+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tDQo+ ID4+PiAgaW5jbHVkZS9saW51eC9tdGQvc3BpLW5vci5oICAgfCAxMDcgKysrKysrKysNCj4gPj4+ ICAyIGZpbGVzIGNoYW5nZWQsIDY1OSBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkNCj4g Pj4+DQo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMNCj4g Pj4+IGIvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMgaW5kZXgNCj4gPj4+IGRjODc1N2Uu LjQ2ODczNDUgMTAwNjQ0DQo+ID4+PiAtLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3Iu Yw0KPiA+Pj4gKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMNCj4gPj4+IEBAIC0x OCw2ICsxOCw3IEBADQo+ID4+PiAgI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPg0KPiA+Pj4gICNp bmNsdWRlIDxsaW51eC9zaXplcy5oPg0KPiA+Pj4gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ ID4+PiArI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4NCj4gPj4+DQo+ID4+PiAgI2luY2x1ZGUgPGxp bnV4L210ZC9tdGQuaD4NCj4gPj4+ICAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4g Pj4+IEBAIC0yNjEsNiArMjYyLDE4IEBAIHN0YXRpYyB2b2lkIHNwaV9ub3Jfc2V0XzRieXRlX29w Y29kZXMoc3RydWN0DQo+ID4+PiBzcGlfbm9yICpub3IsDQo+ID4+PiAgCW5vci0+cmVhZF9vcGNv ZGUgPSBzcGlfbm9yX2NvbnZlcnRfM3RvNF9yZWFkKG5vci0+cmVhZF9vcGNvZGUpOw0KPiA+Pj4g IAlub3ItPnByb2dyYW1fb3Bjb2RlID0gc3BpX25vcl9jb252ZXJ0XzN0bzRfcHJvZ3JhbShub3It DQo+ID4+Pj4gcHJvZ3JhbV9vcGNvZGUpOw0KPiA+Pj4gIAlub3ItPmVyYXNlX29wY29kZSA9IHNw aV9ub3JfY29udmVydF8zdG80X2VyYXNlKG5vci0+ZXJhc2Vfb3Bjb2RlKTsNCj4gPj4+ICsNCj4g Pj4+ICsJaWYgKCFzcGlfbm9yX2hhc191bmlmb3JtX2VyYXNlKG5vcikpIHsNCj4gPj4+ICsJCXN0 cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAqbWFwID0gJm5vci0+ZXJhc2VfbWFwOw0KPiA+Pj4gKwkJ c3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqZXJhc2U7DQo+ID4+PiArCQlpbnQgaTsNCj4gPj4+ ICsNCj4gPj4+ICsJCWZvciAoaSA9IDA7IGkgPCBTTk9SX0VSQVNFX1RZUEVfTUFYOyBpKyspIHsN Cj4gPj4+ICsJCQllcmFzZSA9ICZtYXAtPmVyYXNlX3R5cGVbaV07DQo+ID4+PiArCQkJZXJhc2Ut Pm9wY29kZSA9DQo+ID4+PiArCQkJCXNwaV9ub3JfY29udmVydF8zdG80X2VyYXNlKGVyYXNlLT5v cGNvZGUpOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKwl9DQo+ID4+PiAgfQ0KPiA+Pj4NCj4gPj4+ICAv KiBFbmFibGUvZGlzYWJsZSA0LWJ5dGUgYWRkcmVzc2luZyBtb2RlLiAqLyBAQCAtNDk5LDYgKzUx MiwyNzUgQEANCj4gPj4+IHN0YXRpYyBpbnQgc3BpX25vcl9lcmFzZV9zZWN0b3Ioc3RydWN0IHNw aV9ub3IgKm5vciwgdTMyIGFkZHIpICB9DQo+ID4+Pg0KPiA+Pj4gIC8qDQo+ID4+PiArICogc3Bp X25vcl9kaXZfYnlfZXJhc2Vfc2l6ZSgpIC0gY2FsY3VsYXRlIHJlbWFpbmRlciBhbmQgdXBkYXRl IG5ldw0KPiBkaXZpZGVuZA0KPiA+Pj4gKyAqIEBlcmFzZToJcG9pbnRlciB0byBhIHN0cnVjdHVy ZSB0aGF0IGRlc2NyaWJlcyBhIFNQSSBOT1IgZXJhc2UgdHlwZQ0KPiA+Pj4gKyAqIEBkaXZpZGVu ZDoJZGl2aWRlbmQgdmFsdWUNCj4gPj4+ICsgKiBAcmVtYWluZGVyOglwb2ludGVyIHRvIHUzMiBy ZW1haW5kZXIgKHdpbGwgYmUgdXBkYXRlZCkNCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIFJldHVybnMg dHdvIHZhbHVlczogcmVtYWluZGVyIGFuZCB0aGUgbmV3IGRpdmlkZW5kICAqLyBzdGF0aWMNCj4g Pj4+ICt1NjQgc3BpX25vcl9kaXZfYnlfZXJhc2Vfc2l6ZShjb25zdCBzdHJ1Y3Qgc3BpX25vcl9l cmFzZV90eXBlICplcmFzZSwNCj4gPj4+ICsJCQkJICAgICB1NjQgZGl2aWRlbmQsIHUzMiAqcmVt YWluZGVyKSB7DQo+ID4+PiArCS8qIEpFREVDIEpFU0QyMTZCIFN0YW5kYXJkIGltcG9zZXMgZXJh c2Ugc2l6ZXMgdG8gYmUgcG93ZXIgb2YgMi4gKi8NCj4gPj4+ICsJKnJlbWFpbmRlciA9ICh1MzIp ZGl2aWRlbmQgJiBlcmFzZS0+c2l6ZV9tYXNrOw0KPiA+Pj4gKwlyZXR1cm4gZGl2aWRlbmQgPj4g ZXJhc2UtPnNpemVfc2hpZnQ7IH0NCj4gPj4+ICsNCj4gPj4+ICsvKg0KPiA+Pj4gKyAqIHNwaV9u b3JfZmluZF9iZXN0X2VyYXNlX3R5cGUoKSAtIGZpbmQgdGhlIGJlc3QgZXJhc2UgdHlwZSBmb3IN Cj4gPj4+ICt0aGUgZ2l2ZW4NCj4gPj4+ICsgKiBvZmZzZXQgaW4gdGhlIHNlcmlhbCBmbGFzaCBt ZW1vcnkgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZXJhc2UuDQo+ID4+PiArVGhlDQo+ID4+ PiArICogcmVnaW9uIGluIHdoaWNoIHRoZSBhZGRyZXNzIGZpdHMgaXMgZXhwZWN0ZWQgdG8gYmUg cHJvdmlkZWQuDQo+ID4+PiArICogQG1hcDoJdGhlIGVyYXNlIG1hcCBvZiB0aGUgU1BJIE5PUg0K PiA+Pj4gKyAqIEByZWdpb246CXBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMg YSBTUEkgTk9SIGVyYXNlDQo+IHJlZ2lvbg0KPiA+Pj4gKyAqIEBhZGRyOglvZmZzZXQgaW4gdGhl IHNlcmlhbCBmbGFzaCBtZW1vcnkNCj4gPj4+ICsgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8g ZXJhc2UNCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBiZXN0 IGZpdHRlZCBlcmFzZSB0eXBlLCBOVUxMIG90aGVyd2lzZS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqDQo+ID4+PiArc3BpX25vcl9m aW5kX2Jlc3RfZXJhc2VfdHlwZShjb25zdCBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9tYXAgKm1hcCwN Cj4gPj4+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lvbiAqcmVnaW9u LA0KPiA+Pj4gKwkJCSAgICAgdTY0IGFkZHIsIHUzMiBsZW4pDQo+ID4+PiArew0KPiA+Pj4gKwlj b25zdCBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV90eXBlICplcmFzZTsNCj4gPj4+ICsJdTMyIHJlbTsN Cj4gPj4+ICsJaW50IGk7DQo+ID4+PiArCXU4IGVyYXNlX21hc2sgPSByZWdpb24tPm9mZnNldCAm IFNOT1JfRVJBU0VfVFlQRV9NQVNLOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKg0KPiA+Pj4gKwkgKiBF cmFzZSB0eXBlcyBhcmUgb3JkZXJlZCBieSBzaXplLCB3aXRoIHRoZSBiaWdnZXN0IGVyYXNlIHR5 cGUgYXQNCj4gPj4+ICsJICogaW5kZXggMC4NCj4gPj4+ICsJICovDQo+ID4+PiArCWZvciAoaSA9 IFNOT1JfRVJBU0VfVFlQRV9NQVggLSAxOyBpID49IDA7IGktLSkgew0KPiA+Pj4gKwkJLyogRG9l cyB0aGUgZXJhc2UgcmVnaW9uIHN1cHBvcnQgdGhlIHRlc3RlZCBlcmFzZSB0eXBlPyAqLw0KPiA+ Pj4gKwkJaWYgKCEoZXJhc2VfbWFzayAmIEJJVChpKSkpDQo+ID4+PiArCQkJY29udGludWU7DQo+ ID4+PiArDQo+ID4+PiArCQllcmFzZSA9ICZtYXAtPmVyYXNlX3R5cGVbaV07DQo+ID4+PiArDQo+ ID4+PiArCQkvKiBEb24ndCBlcmFzZSBtb3JlIHRoYW4gd2hhdCB0aGUgdXNlciBoYXMgYXNrZWQg Zm9yLiAqLw0KPiA+Pj4gKwkJaWYgKGVyYXNlLT5zaXplID4gbGVuKQ0KPiA+Pj4gKwkJCWNvbnRp bnVlOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJLyogQWxpZ25tZW50IGlzIG5vdCBtYW5kYXRvcnkgZm9y IG92ZXJsYWlkIHJlZ2lvbnMgKi8NCj4gPj4+ICsJCWlmIChyZWdpb24tPm9mZnNldCAmIFNOT1Jf T1ZFUkxBSURfUkVHSU9OKQ0KPiA+Pj4gKwkJCXJldHVybiBlcmFzZTsNCj4gPj4+ICsNCj4gPj4+ ICsJCXNwaV9ub3JfZGl2X2J5X2VyYXNlX3NpemUoZXJhc2UsIGFkZHIsICZyZW0pOw0KPiA+Pj4g KwkJaWYgKHJlbSkNCj4gPj4+ICsJCQljb250aW51ZTsNCj4gPj4+ICsJCWVsc2UNCj4gPj4+ICsJ CQlyZXR1cm4gZXJhc2U7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIE5VTEw7 DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qDQo+ID4+PiArICogc3BpX25vcl9yZWdpb25f bmV4dCgpIC0gZ2V0IHRoZSBuZXh0IHNwaSBub3IgcmVnaW9uDQo+ID4+PiArICogQHJlZ2lvbjoJ cG9pbnRlciB0byBhIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIFNQSSBOT1IgZXJhc2UNCj4g cmVnaW9uDQo+ID4+PiArICoNCj4gPj4+ICsgKiBSZXR1cm5zIHRoZSBuZXh0IHNwaSBub3IgcmVn aW9uIG9yIE5VTEwgaWYgbGFzdCByZWdpb24uDQo+ID4+PiArICovDQo+ID4+PiArc3RhdGljIHN0 cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lvbiAqIHNwaV9ub3JfcmVnaW9uX25leHQoc3RydWN0DQo+ ID4+PiArc3BpX25vcl9lcmFzZV9yZWdpb24gKnJlZ2lvbikgew0KPiA+Pj4gKwlpZiAoc3BpX25v cl9yZWdpb25faXNfbGFzdChyZWdpb24pKQ0KPiA+Pj4gKwkJcmV0dXJuIE5VTEw7DQo+ID4+PiAr CXJlZ2lvbisrOw0KPiA+Pj4gKwlyZXR1cm4gcmVnaW9uOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4g Pj4+ICsvKg0KPiA+Pj4gKyAqIHNwaV9ub3JfZmluZF9lcmFzZV9yZWdpb24oKSAtIGZpbmQgdGhl IHJlZ2lvbiBvZiB0aGUgc2VyaWFsDQo+ID4+PiArZmxhc2ggbWVtb3J5IGluDQo+ID4+PiArICog d2hpY2ggdGhlIG9mZnNldCBmaXRzDQo+ID4+PiArICogQG1hcDoJdGhlIGVyYXNlIG1hcCBvZiB0 aGUgU1BJIE5PUg0KPiA+Pj4gKyAqIEBhZGRyOglvZmZzZXQgaW4gdGhlIHNlcmlhbCBmbGFzaCBt ZW1vcnkNCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgc3BpX25v cl9lcmFzZV9yZWdpb24gc3RydWN0LA0KPiA+Pj4gK0VSUl9QVFIoLWVycm5vKQ0KPiA+Pj4gKyAq IG90aGVyd2lzZS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtzdGF0aWMgc3RydWN0IHNwaV9ub3JfZXJh c2VfcmVnaW9uICoNCj4gPj4+ICtzcGlfbm9yX2ZpbmRfZXJhc2VfcmVnaW9uKGNvbnN0IHN0cnVj dCBzcGlfbm9yX2VyYXNlX21hcCAqbWFwLCB1NjQNCj4gPj4+ICthZGRyKSB7DQo+ID4+PiArCXN0 cnVjdCBzcGlfbm9yX2VyYXNlX3JlZ2lvbiAqcmVnaW9uID0gbWFwLT5yZWdpb25zOw0KPiA+Pj4g Kwl1NjQgcmVnaW9uX3N0YXJ0ID0gcmVnaW9uLT5vZmZzZXQgJiB+U05PUl9FUkFTRV9GTEFHU19N QVNLOw0KPiA+Pj4gKwl1NjQgcmVnaW9uX2VuZCA9IHJlZ2lvbl9zdGFydCArIHJlZ2lvbi0+c2l6 ZTsNCj4gPj4+ICsNCj4gPj4+ICsJd2hpbGUgKGFkZHIgPCByZWdpb25fc3RhcnQgfHwgYWRkciA+ PSByZWdpb25fZW5kKSB7DQo+ID4+PiArCQlyZWdpb24gPSBzcGlfbm9yX3JlZ2lvbl9uZXh0KHJl Z2lvbik7DQo+ID4+PiArCQlpZiAoIXJlZ2lvbikNCj4gPj4+ICsJCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsNCj4gPj4+ICsNCj4gPj4+ICsJCXJlZ2lvbl9zdGFydCA9IHJlZ2lvbi0+b2Zmc2V0 ICYgflNOT1JfRVJBU0VfRkxBR1NfTUFTSzsNCj4gPj4+ICsJCXJlZ2lvbl9lbmQgPSByZWdpb25f c3RhcnQgKyByZWdpb24tPnNpemU7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJu IHJlZ2lvbjsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKiBzcGlfbm9y X2luaXRfZXJhc2VfY21kKCkgLSBpbml0aWFsaXplIGFuIGVyYXNlIGNvbW1hbmQNCj4gPj4+ICsg KiBAcmVnaW9uOglwb2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgU1BJIE5P UiBlcmFzZQ0KPiByZWdpb24NCj4gPj4+ICsgKiBAZXJhc2U6CXBvaW50ZXIgdG8gYSBzdHJ1Y3R1 cmUgdGhhdCBkZXNjcmliZXMgYSBTUEkgTk9SIGVyYXNlIHR5cGUNCj4gPj4+ICsgKg0KPiA+Pj4g KyAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBlcmFzZSBjb21tYW5kLA0K PiA+Pj4gK0VSUl9QVFIoLWVycm5vKQ0KPiA+Pj4gKyAqIG90aGVyd2lzZS4NCj4gPj4+ICsgKi8N Cj4gPj4+ICtzdGF0aWMgc3RydWN0IHNwaV9ub3JfZXJhc2VfY29tbWFuZCAqIHNwaV9ub3JfaW5p dF9lcmFzZV9jbWQoY29uc3QNCj4gPj4+ICtzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9yZWdpb24gKnJl Z2lvbiwNCj4gPj4+ICsJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV90eXBlICpl cmFzZSkgew0KPiA+Pj4gKwlzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9jb21tYW5kICpjbWQ7DQo+ID4+ PiArDQo+ID4+PiArCWNtZCA9IGttYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsNCj4g Pj4+ICsJaWYgKCFjbWQpDQo+ID4+PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gPj4+ ICsNCj4gPj4+ICsJSU5JVF9MSVNUX0hFQUQoJmNtZC0+bGlzdCk7DQo+ID4+PiArCWNtZC0+b3Bj b2RlID0gZXJhc2UtPm9wY29kZTsNCj4gPj4+ICsJY21kLT5jb3VudCA9IDE7DQo+ID4+PiArDQo+ ID4+PiArCWlmIChyZWdpb24tPm9mZnNldCAmIFNOT1JfT1ZFUkxBSURfUkVHSU9OKQ0KPiA+Pj4g KwkJY21kLT5zaXplID0gcmVnaW9uLT5zaXplOw0KPiA+Pj4gKwllbHNlDQo+ID4+PiArCQljbWQt PnNpemUgPSBlcmFzZS0+c2l6ZTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIGNtZDsNCj4gPj4+ ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKiBzcGlfbm9yX2Rlc3Ryb3lfZXJhc2Vf Y21kX2xpc3QoKSAtIGRlc3Ryb3kgZXJhc2UgY29tbWFuZCBsaXN0DQo+ID4+PiArICogQGVyYXNl X2xpc3Q6CWxpc3Qgb2YgZXJhc2UgY29tbWFuZHMNCj4gPj4+ICsgKi8NCj4gPj4+ICtzdGF0aWMg dm9pZCBzcGlfbm9yX2Rlc3Ryb3lfZXJhc2VfY21kX2xpc3Qoc3RydWN0IGxpc3RfaGVhZA0KPiA+ Pj4gKyplcmFzZV9saXN0KSB7DQo+ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX2NvbW1hbmQg KmNtZCwgKm5leHQ7DQo+ID4+PiArDQo+ID4+PiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShj bWQsIG5leHQsIGVyYXNlX2xpc3QsIGxpc3QpIHsNCj4gPj4+ICsJCWxpc3RfZGVsKCZjbWQtPmxp c3QpOw0KPiA+Pj4gKwkJa2ZyZWUoY21kKTsNCj4gPj4+ICsJfQ0KPiA+Pj4gK30NCj4gPj4+ICsN Cj4gPj4+ICsvKg0KPiA+Pj4gKyAqIHNwaV9ub3JfaW5pdF9lcmFzZV9jbWRfbGlzdCgpIC0gaW5p dGlhbGl6ZSBlcmFzZSBjb21tYW5kIGxpc3QNCj4gPj4+ICsgKiBAbm9yOglwb2ludGVyIHRvIGEg J3N0cnVjdCBzcGlfbm9yJw0KPiA+Pj4gKyAqIEBlcmFzZV9saXN0OglsaXN0IG9mIGVyYXNlIGNv bW1hbmRzIHRvIGJlIGV4ZWN1dGVkIG9uY2Ugd2UNCj4gdmFsaWRhdGUgdGhhdA0KPiA+Pj4gdGhl DQo+ID4+PiArICoJCWVyYXNlIGNhbiBiZSBwZXJmb3JtZWQNCj4gPj4+ICsgKiBAYWRkcjoJb2Zm c2V0IGluIHRoZSBzZXJpYWwgZmxhc2ggbWVtb3J5DQo+ID4+PiArICogQGxlbjoJbnVtYmVyIG9m IGJ5dGVzIHRvIGVyYXNlDQo+ID4+PiArICoNCj4gPj4+ICsgKiBCdWlsZHMgdGhlIGxpc3Qgb2Yg YmVzdCBmaXR0ZWQgZXJhc2UgY29tbWFuZHMgYW5kIHZlcmlmaWVzIGlmDQo+ID4+PiArdGhlIGVy YXNlIGNhbg0KPiA+Pj4gKyAqIGJlIHBlcmZvcm1lZC4NCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIFJl dHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLg0KPiA+Pj4gKyAqLw0KPiA+Pj4g K3N0YXRpYyBpbnQgc3BpX25vcl9pbml0X2VyYXNlX2NtZF9saXN0KHN0cnVjdCBzcGlfbm9yICpu b3IsDQo+ID4+PiArCQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplcmFzZV9saXN0LA0KPiA+ Pj4gKwkJCQkgICAgICAgdTY0IGFkZHIsIHUzMiBsZW4pDQo+ID4+PiArew0KPiA+Pj4gKwljb25z dCBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9tYXAgKm1hcCA9ICZub3ItPmVyYXNlX21hcDsNCj4gPj4+ ICsJY29uc3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqZXJhc2UsICpwcmV2X2VyYXNlID0g TlVMTDsNCj4gPj4+ICsJc3RydWN0IHNwaV9ub3JfZXJhc2VfcmVnaW9uICpyZWdpb247DQo+ID4+ PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX2NvbW1hbmQgKmNtZCA9IE5VTEw7DQo+ID4+PiArCXU2 NCByZWdpb25fZW5kOw0KPiA+Pj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsNCj4gPj4+ICsNCj4gPj4+ ICsJcmVnaW9uID0gc3BpX25vcl9maW5kX2VyYXNlX3JlZ2lvbihtYXAsIGFkZHIpOw0KPiA+Pj4g KwlpZiAoSVNfRVJSKHJlZ2lvbikpDQo+ID4+PiArCQlyZXR1cm4gUFRSX0VSUihyZWdpb24pOw0K PiA+Pj4gKw0KPiA+Pj4gKwlyZWdpb25fZW5kID0gc3BpX25vcl9yZWdpb25fZW5kKHJlZ2lvbik7 DQo+ID4+PiArDQo+ID4+PiArCXdoaWxlIChsZW4pIHsNCj4gPj4+ICsJCWVyYXNlID0gc3BpX25v cl9maW5kX2Jlc3RfZXJhc2VfdHlwZShtYXAsIHJlZ2lvbiwgYWRkciwgbGVuKTsNCj4gPj4+ICsJ CWlmICghZXJhc2UpDQo+ID4+PiArCQkJZ290byBkZXN0cm95X2VyYXNlX2NtZF9saXN0Ow0KPiA+ Pj4gKw0KPiA+Pj4gKwkJaWYgKHByZXZfZXJhc2UgIT0gZXJhc2UgfHwNCj4gPj4+ICsJCSAgICBy ZWdpb24tPm9mZnNldCAmIFNOT1JfT1ZFUkxBSURfUkVHSU9OKSB7DQo+ID4+PiArCQkJY21kID0g c3BpX25vcl9pbml0X2VyYXNlX2NtZChyZWdpb24sIGVyYXNlKTsNCj4gPj4+ICsJCQlpZiAoSVNf RVJSKGNtZCkpIHsNCj4gPj4+ICsJCQkJcmV0ID0gUFRSX0VSUihjbWQpOw0KPiA+Pj4gKwkJCQln b3RvIGRlc3Ryb3lfZXJhc2VfY21kX2xpc3Q7DQo+ID4+PiArCQkJfQ0KPiA+Pj4gKw0KPiA+Pj4g KwkJCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgZXJhc2VfbGlzdCk7DQo+ID4+PiArCQl9IGVs c2Ugew0KPiA+Pj4gKwkJCWNtZC0+Y291bnQrKzsNCj4gPj4+ICsJCX0NCj4gPj4+ICsNCj4gPj4+ ICsJCWFkZHIgKz0gY21kLT5zaXplOw0KPiA+Pj4gKwkJbGVuIC09IGNtZC0+c2l6ZTsNCj4gPj4+ ICsNCj4gPj4+ICsJCWlmIChsZW4gJiYgYWRkciA+PSByZWdpb25fZW5kKSB7DQo+ID4+PiArCQkJ cmVnaW9uID0gc3BpX25vcl9yZWdpb25fbmV4dChyZWdpb24pOw0KPiA+Pj4gKwkJCWlmICghcmVn aW9uKQ0KPiA+Pj4gKwkJCQlnb3RvIGRlc3Ryb3lfZXJhc2VfY21kX2xpc3Q7DQo+ID4+PiArCQkJ cmVnaW9uX2VuZCA9IHNwaV9ub3JfcmVnaW9uX2VuZChyZWdpb24pOw0KPiA+Pj4gKwkJfQ0KPiA+ Pj4gKw0KPiA+Pj4gKwkJcHJldl9lcmFzZSA9IGVyYXNlOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ ID4+PiArCXJldHVybiAwOw0KPiA+Pj4gKw0KPiA+Pj4gK2Rlc3Ryb3lfZXJhc2VfY21kX2xpc3Q6 DQo+ID4+PiArCXNwaV9ub3JfZGVzdHJveV9lcmFzZV9jbWRfbGlzdChlcmFzZV9saXN0KTsNCj4g Pj4+ICsJcmV0dXJuIHJldDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsg KiBzcGlfbm9yX2VyYXNlX211bHRpX3NlY3RvcnMoKSAtIHBlcmZvcm0gYSBub24tdW5pZm9ybSBl cmFzZQ0KPiA+Pj4gKyAqIEBub3I6CXBvaW50ZXIgdG8gYSAnc3RydWN0IHNwaV9ub3InDQo+ID4+ PiArICogQGFkZHI6CW9mZnNldCBpbiB0aGUgc2VyaWFsIGZsYXNoIG1lbW9yeQ0KPiA+Pj4gKyAq IEBsZW46CW51bWJlciBvZiBieXRlcyB0byBlcmFzZQ0KPiA+Pj4gKyAqDQo+ID4+PiArICogQnVp bGQgYSBsaXN0IG9mIGJlc3QgZml0dGVkIGVyYXNlIGNvbW1hbmRzIGFuZCBleGVjdXRlIGl0IG9u Y2UNCj4gPj4+ICt3ZQ0KPiA+Pj4gKyAqIHZhbGlkYXRlIHRoYXQgdGhlIGVyYXNlIGNhbiBiZSBw ZXJmb3JtZWQuDQo+ID4+PiArICoNCj4gPj4+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVy cm5vIG90aGVyd2lzZS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtzdGF0aWMgaW50IHNwaV9ub3JfZXJh c2VfbXVsdGlfc2VjdG9ycyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1NjQNCj4gPj4+ICthZGRyLA0K PiA+Pj4gK3UzMiBsZW4pIHsNCj4gPj4+ICsJTElTVF9IRUFEKGVyYXNlX2xpc3QpOw0KPiA+Pj4g KwlzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9jb21tYW5kICpjbWQsICpuZXh0Ow0KPiA+Pj4gKwlpbnQg cmV0Ow0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXQgPSBzcGlfbm9yX2luaXRfZXJhc2VfY21kX2xpc3Qo bm9yLCAmZXJhc2VfbGlzdCwgYWRkciwgbGVuKTsNCj4gPj4+ICsJaWYgKHJldCkNCj4gPj4+ICsJ CXJldHVybiByZXQ7DQo+ID4+PiArDQo+ID4+PiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShj bWQsIG5leHQsICZlcmFzZV9saXN0LCBsaXN0KSB7DQo+ID4+PiArCQlub3ItPmVyYXNlX29wY29k ZSA9IGNtZC0+b3Bjb2RlOw0KPiA+Pj4gKwkJd2hpbGUgKGNtZC0+Y291bnQpIHsNCj4gPj4+ICsJ CQl3cml0ZV9lbmFibGUobm9yKTsNCj4gPj4+ICsNCj4gPj4+ICsJCQlyZXQgPSBzcGlfbm9yX2Vy YXNlX3NlY3Rvcihub3IsIGFkZHIpOw0KPiA+Pj4gKwkJCWlmIChyZXQpDQo+ID4+PiArCQkJCWdv dG8gZGVzdHJveV9lcmFzZV9jbWRfbGlzdDsNCj4gPj4+ICsNCj4gPj4+ICsJCQlhZGRyICs9IGNt ZC0+c2l6ZTsNCj4gPj4+ICsJCQljbWQtPmNvdW50LS07DQo+ID4+PiArDQo+ID4+PiArCQkJcmV0 ID0gc3BpX25vcl93YWl0X3RpbGxfcmVhZHkobm9yKTsNCj4gPj4+ICsJCQlpZiAocmV0KQ0KPiA+ Pj4gKwkJCQlnb3RvIGRlc3Ryb3lfZXJhc2VfY21kX2xpc3Q7DQo+ID4+PiArCQl9DQo+ID4+PiAr CQlsaXN0X2RlbCgmY21kLT5saXN0KTsNCj4gPj4+ICsJCWtmcmVlKGNtZCk7DQo+ID4+PiArCX0N Cj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIDA7DQo+ID4+PiArDQo+ID4+PiArZGVzdHJveV9lcmFz ZV9jbWRfbGlzdDoNCj4gPj4+ICsJc3BpX25vcl9kZXN0cm95X2VyYXNlX2NtZF9saXN0KCZlcmFz ZV9saXN0KTsNCj4gPj4+ICsJcmV0dXJuIHJldDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiAr LyoNCj4gPj4+ICAgKiBFcmFzZSBhbiBhZGRyZXNzIHJhbmdlIG9uIHRoZSBub3IgY2hpcC4gIFRo ZSBhZGRyZXNzIHJhbmdlIG1heSBleHRlbmQNCj4gPj4+ICAgKiBvbmUgb3IgbW9yZSBlcmFzZSBz ZWN0b3JzLiAgUmV0dXJuIGFuIGVycm9yIGlzIHRoZXJlIGlzIGEgcHJvYmxlbSBlcmFzaW5nLg0K PiA+Pj4gICAqLw0KPiA+Pj4gQEAgLTUxMiw5ICs3OTQsMTEgQEAgc3RhdGljIGludCBzcGlfbm9y X2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLA0KPiA+Pj4gc3RydWN0IGVyYXNlX2luZm8gKmlu c3RyKQ0KPiA+Pj4gIAlkZXZfZGJnKG5vci0+ZGV2LCAiYXQgMHglbGx4LCBsZW4gJWxsZFxuIiwg KGxvbmcgbG9uZylpbnN0ci0+YWRkciwNCj4gPj4+ICAJCQkobG9uZyBsb25nKWluc3RyLT5sZW4p Ow0KPiA+Pj4NCj4gPj4+IC0JZGl2X3U2NF9yZW0oaW5zdHItPmxlbiwgbXRkLT5lcmFzZXNpemUs ICZyZW0pOw0KPiA+Pj4gLQlpZiAocmVtKQ0KPiA+Pj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+ PiArCWlmIChzcGlfbm9yX2hhc191bmlmb3JtX2VyYXNlKG5vcikpIHsNCj4gPj4+ICsJCWRpdl91 NjRfcmVtKGluc3RyLT5sZW4sIG10ZC0+ZXJhc2VzaXplLCAmcmVtKTsNCj4gPj4+ICsJCWlmIChy ZW0pDQo+ID4+PiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+PiArCX0NCj4gPj4+DQo+ID4+PiAg CWFkZHIgPSBpbnN0ci0+YWRkcjsNCj4gPj4+ICAJbGVuID0gaW5zdHItPmxlbjsNCj4gPj4+IEBA IC01NTMsNyArODM3LDcgQEAgc3RhdGljIGludCBzcGlfbm9yX2VyYXNlKHN0cnVjdCBtdGRfaW5m byAqbXRkLA0KPiA+Pj4gc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQ0KPiA+Pj4gIAkgKi8NCj4g Pj4+DQo+ID4+PiAgCS8qICJzZWN0b3IiLWF0LWEtdGltZSBlcmFzZSAqLw0KPiA+Pj4gLQl9IGVs c2Ugew0KPiA+Pj4gKwl9IGVsc2UgaWYgKHNwaV9ub3JfaGFzX3VuaWZvcm1fZXJhc2Uobm9yKSkg ew0KPiA+Pj4gIAkJd2hpbGUgKGxlbikgew0KPiA+Pj4gIAkJCXdyaXRlX2VuYWJsZShub3IpOw0K PiA+Pj4NCj4gPj4+IEBAIC01NjgsNiArODUyLDEyIEBAIHN0YXRpYyBpbnQgc3BpX25vcl9lcmFz ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwNCj4gPj4+IHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikN Cj4gPj4+ICAJCQlpZiAocmV0KQ0KPiA+Pj4gIAkJCQlnb3RvIGVyYXNlX2VycjsNCj4gPj4+ICAJ CX0NCj4gPj4+ICsNCj4gPj4+ICsJLyogZXJhc2UgbXVsdGlwbGUgc2VjdG9ycyAqLw0KPiA+Pj4g Kwl9IGVsc2Ugew0KPiA+Pj4gKwkJcmV0ID0gc3BpX25vcl9lcmFzZV9tdWx0aV9zZWN0b3JzKG5v ciwgYWRkciwgbGVuKTsNCj4gPj4+ICsJCWlmIChyZXQpDQo+ID4+PiArCQkJZ290byBlcmFzZV9l cnI7DQo+ID4+PiAgCX0NCj4gPj4+DQo+ID4+PiAgCXdyaXRlX2Rpc2FibGUobm9yKTsNCj4gPj4+ IEBAIC0yMTkwLDYgKzI0ODAsMTEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZkcF9iZnB0X2Vy YXNlDQo+ID4+PiBzZmRwX2JmcHRfZXJhc2VzW10gPSB7DQo+ID4+Pg0KPiA+Pj4gIHN0YXRpYyBp bnQgc3BpX25vcl9od2NhcHNfcmVhZDJjbWQodTMyIGh3Y2Fwcyk7DQo+ID4+Pg0KPiA+Pj4gKy8q DQo+ID4+PiArICogc3BpX25vcl9zZXRfZXJhc2VfdHlwZSgpIC0gc2V0IGEgU1BJIE5PUiBlcmFz ZSB0eXBlDQo+ID4+PiArICogQGVyYXNlOglwb2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQgZGVz Y3JpYmVzIGEgU1BJIE5PUiBlcmFzZSB0eXBlDQo+ID4+PiArICogQHNpemU6CXRoZSBzaXplIG9m IHRoZSBzZWN0b3IvYmxvY2sgZXJhc2VkIGJ5IHRoZSBlcmFzZSB0eXBlDQo+ID4+PiArICogQG9w Y29kZToJdGhlIFNQSSBjb21tYW5kIG9wIGNvZGUgdG8gZXJhc2UgdGhlIHNlY3Rvci9ibG9jaw0K PiA+Pj4gKyAqLw0KPiA+Pj4gK3N0YXRpYyB2b2lkIHNwaV9ub3Jfc2V0X2VyYXNlX3R5cGUoc3Ry dWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqZXJhc2UsDQo+ID4+PiArCQkJCSAgIHUzMiBzaXplLCB1 OCBvcGNvZGUpDQo+ID4+PiArew0KPiA+Pj4gKwllcmFzZS0+c2l6ZSA9IHNpemU7DQo+ID4+PiAr CWVyYXNlLT5vcGNvZGUgPSBvcGNvZGU7DQo+ID4+PiArCS8qIEpFREVDIEpFU0QyMTZCIFN0YW5k YXJkIGltcG9zZXMgZXJhc2Ugc2l6ZXMgdG8gYmUgcG93ZXIgb2YgMi4gKi8NCj4gPj4+ICsJZXJh c2UtPnNpemVfc2hpZnQgPSBmZnMoZXJhc2UtPnNpemUpIC0gMTsNCj4gPj4+ICsJZXJhc2UtPnNp emVfbWFzayA9ICgxIDw8IGVyYXNlLT5zaXplX3NoaWZ0KSAtIDE7IH0NCj4gPj4+ICsNCj4gPj4+ ICsvKg0KPiA+Pj4gKyAqIHNwaV9ub3Jfc2V0X2VyYXNlX3NldHRpbmdzX2Zyb21fYmZwdCgpIC0g c2V0IGVyYXNlIHR5cGUgc2V0dGluZ3MgZnJvbQ0KPiBCRlBUDQo+ID4+PiArICogQGVyYXNlOglw b2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgU1BJIE5PUiBlcmFzZSB0eXBl DQo+ID4+PiArICogQHNpemU6CXRoZSBzaXplIG9mIHRoZSBzZWN0b3IvYmxvY2sgZXJhc2VkIGJ5 IHRoZSBlcmFzZSB0eXBlDQo+ID4+PiArICogQG9wY29kZToJdGhlIFNQSSBjb21tYW5kIG9wIGNv ZGUgdG8gZXJhc2UgdGhlIHNlY3Rvci9ibG9jaw0KPiA+Pj4gKyAqIEBpOgkJZXJhc2UgdHlwZSBp bmRleCBhcyBzb3J0ZWQgaW4gdGhlIEJhc2ljIEZsYXNoIFBhcmFtZXRlcg0KPiBUYWJsZQ0KPiA+ Pj4gKyAqDQo+ID4+PiArICogVGhlIHN1cHBvcnRlZCBFcmFzZSBUeXBlcyB3aWxsIGJlIHNvcnRl ZCBhdCBpbml0IGluIGFzY2VuZGluZw0KPiA+Pj4gK29yZGVyLCB3aXRoDQo+ID4+PiArICogdGhl IHNtYWxsZXN0IEVyYXNlIFR5cGUgc2l6ZSBiZWluZyB0aGUgZmlyc3QgbWVtYmVyIGluIHRoZQ0K PiA+Pj4gK2VyYXNlX3R5cGUgYXJyYXkNCj4gPj4+ICsgKiBvZiB0aGUgc3BpX25vcl9lcmFzZV9t YXAgc3RydWN0dXJlLiBTYXZlIHRoZSBFcmFzZSBUeXBlIGluZGV4IGFzDQo+ID4+PiArc29ydGVk IGluDQo+ID4+PiArICogdGhlIEJhc2ljIEZsYXNoIFBhcmFtZXRlciBUYWJsZSBzaW5jZSBpdCB3 aWxsIGJlIHVzZWQgbGF0ZXIgb24NCj4gPj4+ICt0bw0KPiA+Pj4gKyAqIHN5bmNocm9uaXplIHdp dGggdGhlIHN1cHBvcnRlZCBFcmFzZSBUeXBlcyBkZWZpbmVkIGluIFNGRFAgb3B0aW9uYWwNCj4g dGFibGVzLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK3N0YXRpYyB2b2lkDQo+ID4+PiArc3BpX25vcl9z ZXRfZXJhc2Vfc2V0dGluZ3NfZnJvbV9iZnB0KHN0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUgKmVy YXNlLA0KPiA+Pj4gKwkJCQkgICAgIHUzMiBzaXplLCB1OCBvcGNvZGUsIHU4IGkpIHsNCj4gPj4+ ICsJZXJhc2UtPmlkeCA9IGk7DQo+ID4+PiArCXNwaV9ub3Jfc2V0X2VyYXNlX3R5cGUoZXJhc2Us IHNpemUsIG9wY29kZSk7IH0NCj4gPj4+ICsNCj4gPj4+ICsvKiBzcGlfbm9yX21hcF9jbXBfZXJh c2VfdHlwZSgpIC0gY29tcGFyZSB0aGUgbWFwJ3MgZXJhc2UgdHlwZXMgYnkgc2l6ZQ0KPiA+Pj4g KyAqIEBsOgltZW1iZXIgaW4gdGhlIGxlZnQgaGFsZiBvZiB0aGUgbWFwJ3MgZXJhc2VfdHlwZSBh cnJheQ0KPiA+Pj4gKyAqIEByOgltZW1iZXIgaW4gdGhlIHJpZ2h0IGhhbGYgb2YgdGhlIG1hcCdz IGVyYXNlX3R5cGUgYXJyYXkNCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIENvbXBhcmlzb24gZnVuY3Rp b24gdXNlZCBpbiB0aGUgc29ydCgpIGNhbGwgdG8gc29ydCBpbiBhc2NlbmRpbmcNCj4gPj4+ICtv cmRlciB0aGUNCj4gPj4+ICsgKiBtYXAncyBlcmFzZSB0eXBlcywgdGhlIHNtYWxsZXN0IGVyYXNl IHR5cGUgc2l6ZSBiZWluZyB0aGUgZmlyc3QNCj4gPj4+ICttZW1iZXIgaW4gdGhlDQo+ID4+PiAr ICogc29ydGVkIGVyYXNlX3R5cGUgYXJyYXkuDQo+ID4+PiArICovDQo+ID4+PiArc3RhdGljIGlu dCBzcGlfbm9yX21hcF9jbXBfZXJhc2VfdHlwZShjb25zdCB2b2lkICpsLCBjb25zdCB2b2lkICpy KSB7DQo+ID4+PiArCWNvbnN0IHN0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUgKmxlZnQgPSBsLCAq cmlnaHQgPSByOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gbGVmdC0+c2l6ZSAtIHJpZ2h0LT5z aXplOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKg0KPiA+Pj4gKyAqIHNwaV9ub3JfcmVn aW9uc19zb3J0X2VyYXNlX3R5cGVzKCkgLSBzb3J0IGVyYXNlIHR5cGVzIGluIGVhY2ggcmVnaW9u DQo+ID4+PiArICogQG1hcDoJdGhlIGVyYXNlIG1hcCBvZiB0aGUgU1BJIE5PUg0KPiA+Pj4gKyAq DQo+ID4+PiArICogRnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBlcmFzZSB0eXBlcyBkZWZpbmVk IGluIHRoZSBlcmFzZSBtYXANCj4gPj4+ICthcmUgYWxyZWFkeQ0KPiA+Pj4gKyAqIHNvcnRlZCBp biBhc2NlbmRpbmcgb3JkZXIsIHdpdGggdGhlIHNtYWxsZXN0IGVyYXNlIHR5cGUgc2l6ZQ0KPiA+ Pj4gK2JlaW5nIHRoZSBmaXJzdA0KPiA+Pj4gKyAqIG1lbWJlciBpbiB0aGUgZXJhc2VfdHlwZSBh cnJheS4gSXQgcmVwbGljYXRlcyB0aGUgc29ydCBkb25lIGZvcg0KPiA+Pj4gK3RoZSBtYXAncw0K PiA+Pj4gKyAqIGVyYXNlIHR5cGVzLiBFYWNoIHJlZ2lvbidzIGVyYXNlIGJpdG1hc2sgd2lsbCBp bmRpY2F0ZSB3aGljaA0KPiA+Pj4gK2VyYXNlIHR5cGVzIGFyZQ0KPiA+Pj4gKyAqIHN1cHBvcnRl ZCBmcm9tIHRoZSBzb3J0ZWQgZXJhc2UgdHlwZXMgZGVmaW5lZCBpbiB0aGUgZXJhc2UgbWFwLg0K PiA+Pj4gKyAqIFNvcnQgdGhlIGFsbCByZWdpb24ncyBlcmFzZSB0eXBlIGF0IGluaXQgaW4gb3Jk ZXIgdG8gc3BlZWQgdXANCj4gPj4+ICt0aGUgcHJvY2VzcyBvZg0KPiA+Pj4gKyAqIGZpbmRpbmcg dGhlIGJlc3QgZXJhc2UgY29tbWFuZCBhdCBydW50aW1lLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK3N0 YXRpYyB2b2lkIHNwaV9ub3JfcmVnaW9uc19zb3J0X2VyYXNlX3R5cGVzKHN0cnVjdA0KPiA+Pj4g K3NwaV9ub3JfZXJhc2VfbWFwDQo+ID4+PiArKm1hcCkgew0KPiA+Pj4gKwlzdHJ1Y3Qgc3BpX25v cl9lcmFzZV9yZWdpb24gKnJlZ2lvbiA9IG1hcC0+cmVnaW9uczsNCj4gPj4+ICsJc3RydWN0IHNw aV9ub3JfZXJhc2VfdHlwZSAqZXJhc2VfdHlwZSA9IG1hcC0+ZXJhc2VfdHlwZTsNCj4gPj4+ICsJ aW50IGk7DQo+ID4+PiArCXU4IHJlZ2lvbl9lcmFzZV9tYXNrLCBzb3J0ZWRfZXJhc2VfbWFzazsN Cj4gPj4+ICsNCj4gPj4+ICsJd2hpbGUgKHJlZ2lvbikgew0KPiA+Pj4gKwkJcmVnaW9uX2VyYXNl X21hc2sgPSByZWdpb24tPm9mZnNldCAmDQo+ID4+PiBTTk9SX0VSQVNFX1RZUEVfTUFTSzsNCj4g Pj4+ICsNCj4gPj4+ICsJCS8qIFJlcGxpY2F0ZSB0aGUgc29ydCBkb25lIGZvciB0aGUgbWFwJ3Mg ZXJhc2UgdHlwZXMuICovDQo+ID4+PiArCQlzb3J0ZWRfZXJhc2VfbWFzayA9IDA7DQo+ID4+PiAr CQlmb3IgKGkgPSAwOyBpIDwgU05PUl9FUkFTRV9UWVBFX01BWDsgaSsrKQ0KPiA+Pj4gKwkJCWlm IChlcmFzZV90eXBlW2ldLnNpemUgJiYNCj4gPj4+ICsJCQkgICAgcmVnaW9uX2VyYXNlX21hc2sg JiBCSVQoZXJhc2VfdHlwZVtpXS5pZHgpKQ0KPiA+Pj4gKwkJCQlzb3J0ZWRfZXJhc2VfbWFzayB8 PSBCSVQoaSk7DQo+ID4+PiArDQo+ID4+PiArCQkvKiBPdmVyd3JpdGUgZXJhc2UgbWFzay4gKi8N Cj4gPj4+ICsJCXJlZ2lvbi0+b2Zmc2V0ID0gKHJlZ2lvbi0+b2Zmc2V0ICYgflNOT1JfRVJBU0Vf VFlQRV9NQVNLKQ0KPiA+Pj4gfA0KPiA+Pj4gKwkJCQkgc29ydGVkX2VyYXNlX21hc2s7DQo+ID4+ PiArDQo+ID4+PiArCQlyZWdpb24gPSBzcGlfbm9yX3JlZ2lvbl9uZXh0KHJlZ2lvbik7DQo+ID4+ PiArCX0NCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKnNwaV9ub3JfaW5p dF91bmlmb3JtX2VyYXNlX21hcCgpIC0gSW5pdGlhbGl6ZSB1bmlmb3JtIGVyYXNlIG1hcA0KPiA+ Pj4gKyAqIEBtYXA6CQl0aGUgZXJhc2UgbWFwIG9mIHRoZSBTUEkgTk9SDQo+ID4+PiArICogQGVy YXNlX21hc2s6CQliaXRtYXNrIGVuY29kaW5nIGVyYXNlIHR5cGVzIHRoYXQgY2FuIGVyYXNlDQo+ ID4+PiB0aGUgZW50aXJlDQo+ID4+PiArICoJCQlmbGFzaCBtZW1vcnkNCj4gPj4+ICsgKiBAZmxh c2hfc2l6ZToJCXRoZSBzcGkgbm9yIGZsYXNoIG1lbW9yeSBzaXplDQo+ID4+PiArICovDQo+ID4+ PiArc3RhdGljIHZvaWQgc3BpX25vcl9pbml0X3VuaWZvcm1fZXJhc2VfbWFwKHN0cnVjdCBzcGlf bm9yX2VyYXNlX21hcA0KPiAqbWFwLA0KPiA+Pj4gKwkJCQkJICAgdTggZXJhc2VfbWFzaywgdTY0 IGZsYXNoX3NpemUpIHsNCj4gPj4+ICsJLyogT2Zmc2V0IDAgd2l0aCBlcmFzZV9tYXNrIGFuZCBT Tk9SX0xBU1RfUkVHSU9OIGJpdCBzZXQgKi8NCj4gPj4+ICsJbWFwLT51bmlmb3JtX3JlZ2lvbi5v ZmZzZXQgPSAoZXJhc2VfbWFzayAmDQo+ID4+PiBTTk9SX0VSQVNFX1RZUEVfTUFTSykgfA0KPiA+ Pj4gKwkJCQkgICAgIFNOT1JfTEFTVF9SRUdJT047DQo+ID4+PiArCW1hcC0+dW5pZm9ybV9yZWdp b24uc2l6ZSA9IGZsYXNoX3NpemU7DQo+ID4+PiArCW1hcC0+cmVnaW9ucyA9ICZtYXAtPnVuaWZv cm1fcmVnaW9uOw0KPiA+Pj4gKwltYXAtPnVuaWZvcm1fZXJhc2VfdHlwZSA9IGVyYXNlX21hc2s7 IH0NCj4gPj4+ICsNCj4gPj4+ICAvKioNCj4gPj4+ICAgKiBzcGlfbm9yX3BhcnNlX2JmcHQoKSAt IHJlYWQgYW5kIHBhcnNlIHRoZSBCYXNpYyBGbGFzaCBQYXJhbWV0ZXIgVGFibGUuDQo+ID4+PiAg ICogQG5vcjoJCXBvaW50ZXIgdG8gYSAnc3RydWN0IHNwaV9ub3InDQo+ID4+PiBAQCAtMjIyNCwx MiArMjYyMSwxNCBAQCBzdGF0aWMgaW50IHNwaV9ub3JfcGFyc2VfYmZwdChzdHJ1Y3Qgc3BpX25v cg0KPiAqbm9yLA0KPiA+Pj4gIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBzZmRwX3BhcmFtZXRlcl9o ZWFkZXIgKmJmcHRfaGVhZGVyLA0KPiA+Pj4gIAkJCSAgICAgIHN0cnVjdCBzcGlfbm9yX2ZsYXNo X3BhcmFtZXRlciAqcGFyYW1zKSAgew0KPiA+Pj4gLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9ICZu b3ItPm10ZDsNCj4gPj4+ICsJc3RydWN0IHNwaV9ub3JfZXJhc2VfbWFwICptYXAgPSAmbm9yLT5l cmFzZV9tYXA7DQo+ID4+PiArCXN0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUgKmVyYXNlX3R5cGUg PSBtYXAtPmVyYXNlX3R5cGU7DQo+ID4+PiAgCXN0cnVjdCBzZmRwX2JmcHQgYmZwdDsNCj4gPj4+ ICAJc2l6ZV90IGxlbjsNCj4gPj4+ICAJaW50IGksIGNtZCwgZXJyOw0KPiA+Pj4gIAl1MzIgYWRk cjsNCj4gPj4+ICAJdTE2IGhhbGY7DQo+ID4+PiArCXU4IGVyYXNlX21hc2s7DQo+ID4+Pg0KPiA+ Pj4gIAkvKiBKRVNEMjE2IEJhc2ljIEZsYXNoIFBhcmFtZXRlciBUYWJsZSBsZW5ndGggaXMgYXQg bGVhc3QgOSBEV09SRHMuICovDQo+ID4+PiAgCWlmIChiZnB0X2hlYWRlci0+bGVuZ3RoIDwgQkZQ VF9EV09SRF9NQVhfSkVTRDIxNikgQEAgLTIyOTgsNw0KPiA+Pj4gKzI2OTcsMTIgQEAgc3RhdGlj IGludCBzcGlfbm9yX3BhcnNlX2JmcHQoc3RydWN0IHNwaV9ub3IgKm5vciwNCj4gPj4+ICAJCXNw aV9ub3Jfc2V0X3JlYWRfc2V0dGluZ3NfZnJvbV9iZnB0KHJlYWQsIGhhbGYsIHJkLT5wcm90byk7 DQo+ID4+PiAgCX0NCj4gPj4+DQo+ID4+PiAtCS8qIFNlY3RvciBFcmFzZSBzZXR0aW5ncy4gKi8N Cj4gPj4+ICsJLyoNCj4gPj4+ICsJICogU2VjdG9yIEVyYXNlIHNldHRpbmdzLiBSZWluaXRpYWxp emUgdGhlIHVuaWZvcm0gZXJhc2UgbWFwIHVzaW5nIHRoZQ0KPiA+Pj4gKwkgKiBFcmFzZSBUeXBl cyBkZWZpbmVkIGluIHRoZSBiZnB0IHRhYmxlLg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJZXJhc2Vf bWFzayA9IDA7DQo+ID4+PiArCW1lbXNldCgmbm9yLT5lcmFzZV9tYXAsIDAsIHNpemVvZihub3It PmVyYXNlX21hcCkpOw0KPiA+Pj4gIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZmRwX2Jm cHRfZXJhc2VzKTsgaSsrKSB7DQo+ID4+PiAgCQljb25zdCBzdHJ1Y3Qgc2ZkcF9iZnB0X2VyYXNl ICplciA9ICZzZmRwX2JmcHRfZXJhc2VzW2ldOw0KPiA+Pj4gIAkJdTMyIGVyYXNlc2l6ZTsNCj4g Pj4+IEBAIC0yMzEzLDE4ICsyNzE3LDI1IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9wYXJzZV9iZnB0 KHN0cnVjdCBzcGlfbm9yDQo+ID4+PiAqbm9yLA0KPiA+Pj4NCj4gPj4+ICAJCWVyYXNlc2l6ZSA9 IDFVIDw8IGVyYXNlc2l6ZTsNCj4gPj4+ICAJCW9wY29kZSA9IChoYWxmID4+IDgpICYgMHhmZjsN Cj4gPj4+IC0jaWZkZWYgQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTDQo+ID4+PiAt CQlpZiAoZXJhc2VzaXplID09IFNaXzRLKSB7DQo+ID4+PiAtCQkJbm9yLT5lcmFzZV9vcGNvZGUg PSBvcGNvZGU7DQo+ID4+PiAtCQkJbXRkLT5lcmFzZXNpemUgPSBlcmFzZXNpemU7DQo+ID4+PiAt CQkJYnJlYWs7DQo+ID4+PiAtCQl9DQo+ID4+PiAtI2VuZGlmDQo+ID4+PiAtCQlpZiAoIW10ZC0+ ZXJhc2VzaXplIHx8IG10ZC0+ZXJhc2VzaXplIDwgZXJhc2VzaXplKSB7DQo+ID4+PiAtCQkJbm9y LT5lcmFzZV9vcGNvZGUgPSBvcGNvZGU7DQo+ID4+PiAtCQkJbXRkLT5lcmFzZXNpemUgPSBlcmFz ZXNpemU7DQo+ID4+PiAtCQl9DQo+ID4+PiArCQllcmFzZV9tYXNrIHw9IEJJVChpKTsNCj4gPj4+ ICsJCXNwaV9ub3Jfc2V0X2VyYXNlX3NldHRpbmdzX2Zyb21fYmZwdCgmZXJhc2VfdHlwZVtpXSwN Cj4gPj4+IGVyYXNlc2l6ZSwNCj4gPj4+ICsJCQkJCQkgICAgIG9wY29kZSwgaSk7DQo+ID4+PiAg CX0NCj4gPj4+ICsJc3BpX25vcl9pbml0X3VuaWZvcm1fZXJhc2VfbWFwKG1hcCwgZXJhc2VfbWFz aywgcGFyYW1zLT5zaXplKTsNCj4gPj4+ICsJLyoNCj4gPj4+ICsJICogU29ydCBhbGwgdGhlIG1h cCdzIEVyYXNlIFR5cGVzIGluIGFzY2VuZGluZyBvcmRlciB3aXRoIHRoZSBzbWFsbGVzdA0KPiA+ Pj4gKwkgKiBlcmFzZSBzaXplIGJlaW5nIHRoZSBmaXJzdCBtZW1iZXIgaW4gdGhlIGVyYXNlX3R5 cGUgYXJyYXkuDQo+ID4+PiArCSAqLw0KPiA+Pj4gKwlzb3J0KGVyYXNlX3R5cGUsIFNOT1JfRVJB U0VfVFlQRV9NQVgsIHNpemVvZihlcmFzZV90eXBlWzBdKSwNCj4gPj4+ICsJICAgICBzcGlfbm9y X21hcF9jbXBfZXJhc2VfdHlwZSwgTlVMTCk7DQo+ID4+PiArCS8qDQo+ID4+PiArCSAqIFNvcnQg dGhlIGVyYXNlIHR5cGVzIGluIHRoZSB1bmlmb3JtIHJlZ2lvbiBpbiBvcmRlciB0byB1cGRhdGUg dGhlDQo+ID4+PiArCSAqIHVuaWZvcm1fZXJhc2VfdHlwZSBiaXRtYXNrLiBUaGUgYml0bWFzayB3 aWxsIGJlIHVzZWQgbGF0ZXIgb24gd2hlbg0KPiA+Pj4gKwkgKiBzZWxlY3RpbmcgdGhlIHVuaWZv cm0gZXJhc2UuDQo+ID4+PiArCSAqLw0KPiA+Pj4gKwlzcGlfbm9yX3JlZ2lvbnNfc29ydF9lcmFz ZV90eXBlcyhtYXApOw0KPiA+Pj4gKwltYXAtPnVuaWZvcm1fZXJhc2VfdHlwZSA9IG1hcC0+dW5p Zm9ybV9yZWdpb24ub2Zmc2V0ICYNCj4gPj4+ICsJCQkJICBTTk9SX0VSQVNFX1RZUEVfTUFTSzsN Cj4gPj4+DQo+ID4+PiAgCS8qIFN0b3AgaGVyZSBpZiBub3QgSkVTRDIxNiByZXYgQSBvciBsYXRl ci4gKi8NCj4gPj4+ICAJaWYgKGJmcHRfaGVhZGVyLT5sZW5ndGggPCBCRlBUX0RXT1JEX01BWCkg QEAgLTI0ODAsNiArMjg5MSw5DQo+IEBADQo+ID4+PiBzdGF0aWMgaW50IHNwaV9ub3JfaW5pdF9w YXJhbXMoc3RydWN0IHNwaV9ub3IgKm5vciwNCj4gPj4+ICAJCQkgICAgICAgY29uc3Qgc3RydWN0 IGZsYXNoX2luZm8gKmluZm8sDQo+ID4+PiAgCQkJICAgICAgIHN0cnVjdCBzcGlfbm9yX2ZsYXNo X3BhcmFtZXRlciAqcGFyYW1zKSAgew0KPiA+Pj4gKwlzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9tYXAg Km1hcCA9ICZub3ItPmVyYXNlX21hcDsNCj4gPj4+ICsJdTggaSwgZXJhc2VfbWFzazsNCj4gPj4+ ICsNCj4gPj4+ICAJLyogU2V0IGxlZ2FjeSBmbGFzaCBwYXJhbWV0ZXJzIGFzIGRlZmF1bHQuICov DQo+ID4+PiAgCW1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7DQo+ID4+Pg0KPiA+ Pj4gQEAgLTI1MTksNiArMjkzMywyOCBAQCBzdGF0aWMgaW50IHNwaV9ub3JfaW5pdF9wYXJhbXMo c3RydWN0IHNwaV9ub3INCj4gKm5vciwNCj4gPj4+ICAJc3BpX25vcl9zZXRfcHBfc2V0dGluZ3Mo JnBhcmFtcy0+cGFnZV9wcm9ncmFtc1tTTk9SX0NNRF9QUF0sDQo+ID4+PiAgCQkJCVNQSU5PUl9P UF9QUCwgU05PUl9QUk9UT18xXzFfMSk7DQo+ID4+Pg0KPiA+Pj4gKwkvKg0KPiA+Pj4gKwkgKiBT ZWN0b3IgRXJhc2Ugc2V0dGluZ3MuIFNvcnQgRXJhc2UgVHlwZXMgaW4gYXNjZW5kaW5nIG9yZGVy LCB3aXRoIHRoZQ0KPiA+Pj4gKwkgKiBzbWFsbGVzdCBlcmFzZSBzaXplIHN0YXJ0aW5nIGF0IEJJ VCgwKS4NCj4gPj4+ICsJICovDQo+ID4+PiArCWVyYXNlX21hc2sgPSAwOw0KPiA+Pj4gKwlpID0g MDsNCj4gPj4+ICsJaWYgKGluZm8tPmZsYWdzICYgU0VDVF80S19QTUMpIHsNCj4gPj4+ICsJCWVy YXNlX21hc2sgfD0gQklUKGkpOw0KPiA+Pj4gKwkJc3BpX25vcl9zZXRfZXJhc2VfdHlwZSgmbWFw LT5lcmFzZV90eXBlW2ldLCA0MDk2dSwNCj4gPj4+ICsJCQkJICAgICAgIFNQSU5PUl9PUF9CRV80 S19QTUMpOw0KPiA+Pj4gKwkJaSsrOw0KPiA+Pj4gKwl9IGVsc2UgaWYgKGluZm8tPmZsYWdzICYg U0VDVF80Sykgew0KPiA+Pj4gKwkJZXJhc2VfbWFzayB8PSBCSVQoaSk7DQo+ID4+PiArCQlzcGlf bm9yX3NldF9lcmFzZV90eXBlKCZtYXAtPmVyYXNlX3R5cGVbaV0sIDQwOTZ1LA0KPiA+Pj4gKwkJ CQkgICAgICAgU1BJTk9SX09QX0JFXzRLKTsNCj4gPj4+ICsJCWkrKzsNCj4gPj4+ICsJfQ0KPiA+ Pj4gKwllcmFzZV9tYXNrIHw9IEJJVChpKTsNCj4gPj4+ICsJc3BpX25vcl9zZXRfZXJhc2VfdHlw ZSgmbWFwLT5lcmFzZV90eXBlW2ldLCBpbmZvLT5zZWN0b3Jfc2l6ZSwNCj4gPj4+ICsJCQkgICAg ICAgU1BJTk9SX09QX1NFKTsNCj4gPj4+ICsJc3BpX25vcl9pbml0X3VuaWZvcm1fZXJhc2VfbWFw KG1hcCwgZXJhc2VfbWFzaywgcGFyYW1zLT5zaXplKTsNCj4gPj4+ICsNCj4gPj4+ICAJLyogU2Vs ZWN0IHRoZSBwcm9jZWR1cmUgdG8gc2V0IHRoZSBRdWFkIEVuYWJsZSBiaXQuICovDQo+ID4+PiAg CWlmIChwYXJhbXMtPmh3Y2Fwcy5tYXNrICYgKFNOT1JfSFdDQVBTX1JFQURfUVVBRCB8DQo+ID4+ PiAgCQkJCSAgIFNOT1JfSFdDQVBTX1BQX1FVQUQpKSB7DQo+ID4+PiBAQCAtMjU0NiwyMCArMjk4 MiwyMCBAQCBzdGF0aWMgaW50IHNwaV9ub3JfaW5pdF9wYXJhbXMoc3RydWN0IHNwaV9ub3INCj4g Km5vciwNCj4gPj4+ICAJCQlwYXJhbXMtPnF1YWRfZW5hYmxlID0gaW5mby0+cXVhZF9lbmFibGU7 DQo+ID4+PiAgCX0NCj4gPj4+DQo+ID4+PiAtCS8qIE92ZXJyaWRlIHRoZSBwYXJhbWV0ZXJzIHdp dGggZGF0YSByZWFkIGZyb20gU0ZEUCB0YWJsZXMuICovDQo+ID4+PiAtCW5vci0+YWRkcl93aWR0 aCA9IDA7DQo+ID4+PiAtCW5vci0+bXRkLmVyYXNlc2l6ZSA9IDA7DQo+ID4+PiAgCWlmICgoaW5m by0+ZmxhZ3MgJiAoU1BJX05PUl9EVUFMX1JFQUQgfCBTUElfTk9SX1FVQURfUkVBRCkpICYmDQo+ ID4+PiAgCSAgICAhKGluZm8tPmZsYWdzICYgU1BJX05PUl9TS0lQX1NGRFApKSB7DQo+ID4+PiAg CQlzdHJ1Y3Qgc3BpX25vcl9mbGFzaF9wYXJhbWV0ZXIgc2ZkcF9wYXJhbXM7DQo+ID4+PiArCQlz dHJ1Y3Qgc3BpX25vcl9lcmFzZV9tYXAgcHJldl9tYXA7DQo+ID4+Pg0KPiA+Pj4gIAkJbWVtY3B5 KCZzZmRwX3BhcmFtcywgcGFyYW1zLCBzaXplb2Yoc2ZkcF9wYXJhbXMpKTsNCj4gPj4+IC0JCWlm IChzcGlfbm9yX3BhcnNlX3NmZHAobm9yLCAmc2ZkcF9wYXJhbXMpKSB7DQo+ID4+PiAtCQkJbm9y LT5hZGRyX3dpZHRoID0gMDsNCj4gPj4+IC0JCQlub3ItPm10ZC5lcmFzZXNpemUgPSAwOw0KPiA+ Pj4gLQkJfSBlbHNlIHsNCj4gPj4+ICsJCW1lbWNweSgmcHJldl9tYXAsICZub3ItPmVyYXNlX21h cCwgc2l6ZW9mKHByZXZfbWFwKSk7DQo+ID4+PiArDQo+ID4+PiArCQlpZiAoc3BpX25vcl9wYXJz ZV9zZmRwKG5vciwgJnNmZHBfcGFyYW1zKSkNCj4gPj4+ICsJCQkvKiByZXN0b3JlIHByZXZpb3Vz IGVyYXNlIG1hcCAqLw0KPiA+Pj4gKwkJCW1lbWNweSgmbm9yLT5lcmFzZV9tYXAsICZwcmV2X21h cCwNCj4gPj4+ICsJCQkgICAgICAgc2l6ZW9mKG5vci0+ZXJhc2VfbWFwKSk7DQo+ID4+PiArCQll bHNlDQo+ID4+PiAgCQkJbWVtY3B5KHBhcmFtcywgJnNmZHBfcGFyYW1zLCBzaXplb2YoKnBhcmFt cykpOw0KPiA+Pj4gLQkJfQ0KPiA+Pj4gIAl9DQo+ID4+Pg0KPiA+Pj4gIAlyZXR1cm4gMDsNCj4g Pj4+IEBAIC0yNjY4LDI5ICszMTA0LDEwMyBAQCBzdGF0aWMgaW50IHNwaV9ub3Jfc2VsZWN0X3Bw KHN0cnVjdCBzcGlfbm9yDQo+ICpub3IsDQo+ID4+PiAgCXJldHVybiAwOw0KPiA+Pj4gIH0NCj4g Pj4+DQo+ID4+PiAtc3RhdGljIGludCBzcGlfbm9yX3NlbGVjdF9lcmFzZShzdHJ1Y3Qgc3BpX25v ciAqbm9yLA0KPiA+Pj4gLQkJCQljb25zdCBzdHJ1Y3QgZmxhc2hfaW5mbyAqaW5mbykNCj4gPj4+ ICsvKg0KPiA+Pj4gKyAqIHNwaV9ub3Jfc2VsZWN0X3VuaWZvcm1fZXJhc2UoKSAtIHNlbGVjdCBv cHRpbXVtIHVuaWZvcm0gZXJhc2UgdHlwZQ0KPiA+Pj4gKyAqIEBtYXA6CQl0aGUgZXJhc2UgbWFw IG9mIHRoZSBTUEkgTk9SDQo+ID4+PiArICogQHdhbnRlZF9zaXplOgl0aGUgZXJhc2UgdHlwZSBz aXplIHRvIHNlYXJjaCBmb3IuIENvbnRhaW5zIHRoZSB2YWx1ZSBvZg0KPiA+Pj4gKyAqCQkJaW5m by0+c2VjdG9yX3NpemUgb3Igb2YgdGhlICJzbWFsbCBzZWN0b3IiIHNpemUgaW4gY2FzZQ0KPiA+ Pj4gKyAqCQkJQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTIGlzIGRlZmluZWQuDQo+ ID4+PiArICoNCj4gPj4+ICsgKiBPbmNlIHRoZSBvcHRpbXVtIHVuaWZvcm0gc2VjdG9yIGVyYXNl IGNvbW1hbmQgaXMgZm91bmQsIGRpc2FibGUNCj4gPj4+ICthbGwgdGhlDQo+ID4+PiArICogb3Ro ZXIuDQo+ID4+PiArICoNCj4gPj4+ICsgKiBSZXR1cm46IHBvaW50ZXIgdG8gZXJhc2UgdHlwZSBv biBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4NCj4gPj4+ICsgKi8NCj4gPj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqDQo+ID4+PiArc3BpX25vcl9zZWxlY3RfdW5p Zm9ybV9lcmFzZShzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9tYXAgKm1hcCwNCj4gPj4+ICsJCQkgICAg IGNvbnN0IHUzMiB3YW50ZWRfc2l6ZSkNCj4gPj4+ICB7DQo+ID4+PiAtCXN0cnVjdCBtdGRfaW5m byAqbXRkID0gJm5vci0+bXRkOw0KPiA+Pj4gKwljb25zdCBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV90 eXBlICp0ZXN0ZWRfZXJhc2UsICplcmFzZSA9IE5VTEw7DQo+ID4+PiArCWludCBpOw0KPiA+Pj4g Kwl1OCB1bmlmb3JtX2VyYXNlX3R5cGUgPSBtYXAtPnVuaWZvcm1fZXJhc2VfdHlwZTsNCj4gPj4+ DQo+ID4+PiAtCS8qIERvIG5vdGhpbmcgaWYgYWxyZWFkeSBjb25maWd1cmVkIGZyb20gU0ZEUC4g Ki8NCj4gPj4+IC0JaWYgKG10ZC0+ZXJhc2VzaXplKQ0KPiA+Pj4gLQkJcmV0dXJuIDA7DQo+ID4+ PiArCWZvciAoaSA9IFNOT1JfRVJBU0VfVFlQRV9NQVggLSAxOyBpID49IDA7IGktLSkgew0KPiA+ Pj4gKwkJaWYgKCEodW5pZm9ybV9lcmFzZV90eXBlICYgQklUKGkpKSkNCj4gPj4+ICsJCQljb250 aW51ZTsNCj4gPj4+ICsNCj4gPj4+ICsJCXRlc3RlZF9lcmFzZSA9ICZtYXAtPmVyYXNlX3R5cGVb aV07DQo+ID4+PiArDQo+ID4+PiArCQkvKg0KPiA+Pj4gKwkJICogSWYgdGhlIGN1cnJlbnQgZXJh c2Ugc2l6ZSBpcyB0aGUgb25lLCBzdG9wIGhlcmU6DQo+ID4+PiArCQkgKiB3ZSBoYXZlIGZvdW5k IHRoZSByaWdodCB1bmlmb3JtIFNlY3RvciBFcmFzZSBjb21tYW5kLg0KPiA+Pj4gKwkJICovDQo+ ID4+PiArCQlpZiAodGVzdGVkX2VyYXNlLT5zaXplID09IHdhbnRlZF9zaXplKSB7DQo+ID4+PiAr CQkJZXJhc2UgPSB0ZXN0ZWRfZXJhc2U7DQo+ID4+PiArCQkJYnJlYWs7DQo+ID4+PiArCQl9DQo+ ID4+Pg0KPiA+Pj4gKwkJLyoNCj4gPj4+ICsJCSAqIE90aGVyd2lzZSwgdGhlIGN1cnJlbnQgZXJh c2Ugc2l6ZSBpcyBzdGlsbCBhIHZhbGlkIGNhbmRpdGF0ZS4NCj4gPj4+ICsJCSAqIFNlbGVjdCB0 aGUgYmlnZ2VzdCB2YWxpZCBjYW5kaWRhdGUuDQo+ID4+PiArCQkgKi8NCj4gPj4+ICsJCWlmICgh ZXJhc2UgJiYgdGVzdGVkX2VyYXNlLT5zaXplKQ0KPiA+Pj4gKwkJCWVyYXNlID0gdGVzdGVkX2Vy YXNlOw0KPiA+Pj4gKwkJCS8qIGtlZXAgaXRlcmF0aW5nIHRvIGZpbmQgdGhlIHdhbnRlZF9zaXpl ICovDQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKCFlcmFzZSkNCj4gPj4+ICsJCXJl dHVybiBOVUxMOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBEaXNhYmxlIGFsbCBvdGhlciBTZWN0b3Ig RXJhc2UgY29tbWFuZHMuICovDQo+ID4+PiArCW1hcC0+dW5pZm9ybV9lcmFzZV90eXBlICY9IH5T Tk9SX0VSQVNFX1RZUEVfTUFTSzsNCj4gPj4+ICsJbWFwLT51bmlmb3JtX2VyYXNlX3R5cGUgfD0g QklUKGVyYXNlIC0gbWFwLT5lcmFzZV90eXBlKTsNCj4gPj4+ICsJcmV0dXJuIGVyYXNlOw0KPiA+ Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgaW50IHNwaV9ub3Jfc2VsZWN0X2VyYXNlKHN0 cnVjdCBzcGlfbm9yICpub3IsIHUzMiB3YW50ZWRfc2l6ZSkgew0KPiA+Pj4gKwlzdHJ1Y3Qgc3Bp X25vcl9lcmFzZV9tYXAgKm1hcCA9ICZub3ItPmVyYXNlX21hcDsNCj4gPj4+ICsJY29uc3Qgc3Ry dWN0IHNwaV9ub3JfZXJhc2VfdHlwZSAqZXJhc2UgPSBOVUxMOw0KPiA+Pj4gKwlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9ICZub3ItPm10ZDsNCj4gPj4+ICsJaW50IGk7DQo+ID4+PiArDQo+ID4+PiAr CS8qDQo+ID4+PiArCSAqIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBoYW5kbGluZyBTZWN0 b3IgRXJhc2UgY29tbWFuZHMNCj4gPj4+IGFzc3VtZWQNCj4gPj4+ICsJICogdGhhdCB0aGUgU1BJ IGZsYXNoIG1lbW9yeSBoYXMgYW4gdW5pZm9ybSBsYXlvdXQgdGhlbiB1c2VkIG9ubHkgb25lDQo+ ID4+PiArCSAqIG9mIHRoZSBzdXBwb3J0ZWQgZXJhc2Ugc2l6ZXMgZm9yIGFsbCBTZWN0b3IgRXJh c2UgY29tbWFuZHMuDQo+ID4+PiArCSAqIFNvIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUsIHRo ZSBuZXcgaW1wbGVtZW50YXRpb24gYWxzbyB0cmllcyB0bw0KPiA+Pj4gKwkgKiBtYW5hZ2UgdGhl IFNQSSBmbGFzaCBtZW1vcnkgYXMgdW5pZm9ybSB3aXRoIGEgc2luZ2xlIGVyYXNlIHNlY3Rvcg0K PiA+Pj4gKwkgKiBzaXplLCB3aGVuIHBvc3NpYmxlLg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICAjaWZk ZWYgQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTDQo+ID4+PiAgCS8qIHByZWZlciAi c21hbGwgc2VjdG9yIiBlcmFzZSBpZiBwb3NzaWJsZSAqLw0KPiA+Pj4gLQlpZiAoaW5mby0+Zmxh Z3MgJiBTRUNUXzRLKSB7DQo+ID4+PiAtCQlub3ItPmVyYXNlX29wY29kZSA9IFNQSU5PUl9PUF9C RV80SzsNCj4gPj4+IC0JCW10ZC0+ZXJhc2VzaXplID0gNDA5NjsNCj4gPj4+IC0JfSBlbHNlIGlm IChpbmZvLT5mbGFncyAmIFNFQ1RfNEtfUE1DKSB7DQo+ID4+PiAtCQlub3ItPmVyYXNlX29wY29k ZSA9IFNQSU5PUl9PUF9CRV80S19QTUM7DQo+ID4+PiAtCQltdGQtPmVyYXNlc2l6ZSA9IDQwOTY7 DQo+ID4+PiAtCX0gZWxzZQ0KPiA+Pj4gKwl3YW50ZWRfc2l6ZSA9IDQwOTZ1Ow0KPiA+Pj4gICNl bmRpZg0KPiA+Pj4gLQl7DQo+ID4+PiAtCQlub3ItPmVyYXNlX29wY29kZSA9IFNQSU5PUl9PUF9T RTsNCj4gPj4+IC0JCW10ZC0+ZXJhc2VzaXplID0gaW5mby0+c2VjdG9yX3NpemU7DQo+ID4+PiAr DQo+ID4+PiArCWlmIChzcGlfbm9yX2hhc191bmlmb3JtX2VyYXNlKG5vcikpIHsNCj4gPj4+ICsJ CWVyYXNlID0gc3BpX25vcl9zZWxlY3RfdW5pZm9ybV9lcmFzZShtYXAsIHdhbnRlZF9zaXplKTsN Cj4gPj4+ICsJCWlmICghZXJhc2UpDQo+ID4+PiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+PiAr CQlub3ItPmVyYXNlX29wY29kZSA9IGVyYXNlLT5vcGNvZGU7DQo+ID4+PiArCQltdGQtPmVyYXNl c2l6ZSA9IGVyYXNlLT5zaXplOw0KPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ID4+PiAgCX0NCj4gPj4+ ICsNCj4gPj4+ICsJLyoNCj4gPj4+ICsJICogRm9yIG5vbi11bmlmb3JtIFNQSSBmbGFzaCBtZW1v cnksIHNldCBtdGQtPmVyYXNlc2l6ZSB0byB0aGUNCj4gPj4+ICsJICogbWF4aW11bSBlcmFzZSBz ZWN0b3Igc2l6ZS4gTm8gbmVlZCB0byBzZXQgbm9yLT5lcmFzZV9vcGNvZGUuDQo+ID4+PiArCSAq Lw0KPiA+Pj4gKwlmb3IgKGkgPSBTTk9SX0VSQVNFX1RZUEVfTUFYIC0gMTsgaSA+PSAwOyBpLS0p IHsNCj4gPj4+ICsJCWlmIChtYXAtPmVyYXNlX3R5cGVbaV0uc2l6ZSkgew0KPiA+Pj4gKwkJCWVy YXNlID0gJm1hcC0+ZXJhc2VfdHlwZVtpXTsNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsJCX0N Cj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAoIWVyYXNlKQ0KPiA+Pj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4+PiArDQo+ID4+PiArCW10ZC0+ZXJhc2VzaXplID0gZXJhc2UtPnNpemU7 DQo+ID4+PiAgCXJldHVybiAwOw0KPiA+Pj4gIH0NCj4gPj4+DQo+ID4+PiBAQCAtMjczNyw3ICsz MjQ3LDcgQEAgc3RhdGljIGludCBzcGlfbm9yX3NldHVwKHN0cnVjdCBzcGlfbm9yICpub3IsDQo+ ID4+PiBjb25zdCBzdHJ1Y3QgZmxhc2hfaW5mbyAqaW5mbywNCj4gPj4+ICAJfQ0KPiA+Pj4NCj4g Pj4+ICAJLyogU2VsZWN0IHRoZSBTZWN0b3IgRXJhc2UgY29tbWFuZC4gKi8NCj4gPj4+IC0JZXJy ID0gc3BpX25vcl9zZWxlY3RfZXJhc2Uobm9yLCBpbmZvKTsNCj4gPj4+ICsJZXJyID0gc3BpX25v cl9zZWxlY3RfZXJhc2Uobm9yLCBpbmZvLT5zZWN0b3Jfc2l6ZSk7DQo+ID4+PiAgCWlmIChlcnIp IHsNCj4gPj4+ICAJCWRldl9lcnIobm9yLT5kZXYsDQo+ID4+PiAgCQkJImNhbid0IHNlbGVjdCBl cmFzZSBzZXR0aW5ncyBzdXBwb3J0ZWQgYnkgYm90aCB0aGUgU1BJDQo+ID4+PiBjb250cm9sbGVy IGFuZCBtZW1vcnkuXG4iKTsgZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3NwaS1ub3Iu aA0KPiA+Pj4gYi9pbmNsdWRlL2xpbnV4L210ZC9zcGktbm9yLmggaW5kZXggMDlhMTBmZC4uYTg3 M2EwYiAxMDA2NDQNCj4gPj4+IC0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3NwaS1ub3IuaA0KPiA+ Pj4gKysrIGIvaW5jbHVkZS9saW51eC9tdGQvc3BpLW5vci5oDQo+ID4+PiBAQCAtMjQwLDYgKzI0 MCw5NCBAQCBlbnVtIHNwaV9ub3Jfb3B0aW9uX2ZsYWdzIHsgIH07DQo+ID4+Pg0KPiA+Pj4gIC8q Kg0KPiA+Pj4gKyAqIHN0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUgLSBTdHJ1Y3R1cmUgdG8gZGVz Y3JpYmUgYSBTUEkgTk9SIGVyYXNlIHR5cGUNCj4gPj4+ICsgKiBAc2l6ZToJCXRoZSBzaXplIG9m IHRoZSBzZWN0b3IvYmxvY2sgZXJhc2VkIGJ5IHRoZSBlcmFzZSB0eXBlLg0KPiA+Pj4gKyAqCQkJ SkVERUMgSkVTRDIxNkIgaW1wb3NlcyBlcmFzZSBzaXplcyB0byBiZSBhIHBvd2VyIG9mIDIuDQo+ ID4+PiArICogQHNpemVfc2hpZnQ6CQlAc2l6ZSBpcyBhIHBvd2VyIG9mIDIsIHRoZSBzaGlmdCBp cyBzdG9yZWQgaW4NCj4gPj4+ICsgKgkJCUBzaXplX3NoaWZ0Lg0KPiA+Pj4gKyAqIEBzaXplX21h c2s6CQl0aGUgc2l6ZSBtYXNrIGJhc2VkIG9uIEBzaXplX3NoaWZ0Lg0KPiA+Pj4gKyAqIEBvcGNv ZGU6CQl0aGUgU1BJIGNvbW1hbmQgb3AgY29kZSB0byBlcmFzZSB0aGUNCj4gc2VjdG9yL2Jsb2Nr Lg0KPiA+Pj4gKyAqIEBpZHg6CQlFcmFzZSBUeXBlIGluZGV4IGFzIHNvcnRlZCBpbiB0aGUgQmFz aWMgRmxhc2ggUGFyYW1ldGVyDQo+ID4+PiArICoJCQlUYWJsZS4gSXQgd2lsbCBiZSB1c2VkIHRv IHN5bmNocm9uaXplIHRoZSBzdXBwb3J0ZWQNCj4gPj4+ICsgKgkJCUVyYXNlIFR5cGVzIHdpdGgg dGhlIG9uZXMgaWRlbnRpZmllZCBpbiB0aGUgU0ZEUA0KPiA+Pj4gKyAqCQkJb3B0aW9uYWwgdGFi bGVzLg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK3N0cnVjdCBzcGlfbm9yX2VyYXNlX3R5cGUgew0KPiA+ Pj4gKwl1MzIJc2l6ZTsNCj4gPj4+ICsJdTMyCXNpemVfc2hpZnQ7DQo+ID4+PiArCXUzMglzaXpl X21hc2s7DQo+ID4+PiArCXU4CW9wY29kZTsNCj4gPj4+ICsJdTgJaWR4Ow0KPiA+Pj4gK307DQo+ ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICogc3RydWN0IHNwaV9ub3JfZXJhc2VfY29tbWFu ZCAtIFVzZWQgZm9yIG5vbi11bmlmb3JtIGVyYXNlcw0KPiA+Pj4gKyAqIFRoZSBzdHJ1Y3R1cmUg aXMgdXNlZCB0byBkZXNjcmliZSBhIGxpc3Qgb2YgZXJhc2UgY29tbWFuZHMgdG8gYmUNCj4gPj4+ ICtleGVjdXRlZA0KPiA+Pj4gKyAqIG9uY2Ugd2UgdmFsaWRhdGUgdGhhdCB0aGUgZXJhc2UgY2Fu IGJlIHBlcmZvcm1lZC4gVGhlIGVsZW1lbnRzDQo+ID4+PiAraW4gdGhlIGxpc3QNCj4gPj4+ICsg KiBhcmUgcnVuLWxlbmd0aCBlbmNvZGVkLg0KPiA+Pj4gKyAqIEBsaXN0OgkJZm9yIGluY2x1c2lv biBpbnRvIHRoZSBsaXN0IG9mIGVyYXNlIGNvbW1hbmRzLg0KPiA+Pj4gKyAqIEBjb3VudDoJCWhv dyBtYW55IHRpbWVzIHRoZSBzYW1lIGVyYXNlIGNvbW1hbmQNCj4gc2hvdWxkIGJlDQo+ID4+PiAr ICoJCQljb25zZWN1dGl2ZWx5IHVzZWQuDQo+ID4+PiArICogQHNpemU6CQl0aGUgc2l6ZSBvZiB0 aGUgc2VjdG9yL2Jsb2NrIGVyYXNlZCBieSB0aGUgY29tbWFuZC4NCj4gPj4+ICsgKiBAb3Bjb2Rl OgkJdGhlIFNQSSBjb21tYW5kIG9wIGNvZGUgdG8gZXJhc2UgdGhlDQo+IHNlY3Rvci9ibG9jay4N Cj4gPj4+ICsgKi8NCj4gPj4+ICtzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9jb21tYW5kIHsNCj4gPj4+ ICsJc3RydWN0IGxpc3RfaGVhZAlsaXN0Ow0KPiA+Pj4gKwl1MzIJCQljb3VudDsNCj4gPj4+ICsJ dTMyCQkJc2l6ZTsNCj4gPj4+ICsJdTgJCQlvcGNvZGU7DQo+ID4+PiArfTsNCj4gPj4+ICsNCj4g Pj4+ICsvKioNCj4gPj4+ICsgKiBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9yZWdpb24gLSBTdHJ1Y3R1 cmUgdG8gZGVzY3JpYmUgYSBTUEkgTk9SIGVyYXNlDQo+IHJlZ2lvbg0KPiA+Pj4gKyAqIEBvZmZz ZXQ6CQl0aGUgb2Zmc2V0IGluIHRoZSBkYXRhIGFycmF5IG9mIGVyYXNlIHJlZ2lvbg0KPiBzdGFy dC4NCj4gPj4+ICsgKgkJCUxTQiBiaXRzIGFyZSB1c2VkIGFzIGEgYml0bWFzayBlbmNvZGluZyBm bGFncyB0bw0KPiA+Pj4gKyAqCQkJZGV0ZXJtaW5lIGlmIHRoaXMgcmVnaW9uIGlzIG92ZXJsYWlk LCBpZiB0aGlzIHJlZ2lvbiBpcw0KPiA+Pj4gKyAqCQkJdGhlIGxhc3QgaW4gdGhlIFNQSSBOT1Ig Zmxhc2ggbWVtb3J5IGFuZCB0byBpbmRpY2F0ZQ0KPiA+Pj4gKyAqCQkJYWxsIHRoZSBzdXBwb3J0 ZWQgZXJhc2UgY29tbWFuZHMgaW5zaWRlIHRoaXMgcmVnaW9uLg0KPiA+Pj4gKyAqCQkJVGhlIGVy YXNlIHR5cGVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIHdpdGggdGhlDQo+ID4+PiAr ICoJCQlzbWFsbGVzdCBFcmFzZSBUeXBlIHNpemUgYmVpbmcgYXQgQklUKDApLg0KPiA+Pj4gKyAq IEBzaXplOgkJdGhlIHNpemUgb2YgdGhlIHJlZ2lvbiBpbiBieXRlcy4NCj4gPj4+ICsgKi8NCj4g Pj4+ICtzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9yZWdpb24gew0KPiA+Pj4gKwl1NjQJCW9mZnNldDsN Cj4gPj4+ICsJdTY0CQlzaXplOw0KPiA+Pj4gK307DQo+ID4+PiArDQo+ID4+PiArI2RlZmluZSBT Tk9SX0VSQVNFX1RZUEVfTUFYCTQNCj4gPj4+ICsjZGVmaW5lIFNOT1JfRVJBU0VfVFlQRV9NQVNL DQo+ID4+PiAJR0VOTUFTS19VTEwoU05PUl9FUkFTRV9UWVBFX01BWCAtIDEsIDApDQo+ID4+PiAr DQo+ID4+PiArI2RlZmluZSBTTk9SX0xBU1RfUkVHSU9OCUJJVCg0KQ0KPiA+Pj4gKyNkZWZpbmUg U05PUl9PVkVSTEFJRF9SRUdJT04JQklUKDUpDQo+ID4+PiArDQo+ID4+PiArI2RlZmluZSBTTk9S X0VSQVNFX0ZMQUdTX01BWAk2DQo+ID4+PiArI2RlZmluZSBTTk9SX0VSQVNFX0ZMQUdTX01BU0sN Cj4gPj4+IAlHRU5NQVNLX1VMTChTTk9SX0VSQVNFX0ZMQUdTX01BWCAtIDEsIDApDQo+ID4+PiAr DQo+ID4+PiArLyoqDQo+ID4+PiArICogc3RydWN0IHNwaV9ub3JfZXJhc2VfbWFwIC0gU3RydWN0 dXJlIHRvIGRlc2NyaWJlIHRoZSBTUEkgTk9SIGVyYXNlIG1hcA0KPiA+Pj4gKyAqIEByZWdpb25z OgkJYXJyYXkgb2YgZXJhc2UgcmVnaW9ucy4gVGhlIHJlZ2lvbnMgYXJlDQo+IGNvbnNlY3V0aXZl IGluDQo+ID4+PiArICoJCQlhZGRyZXNzIHNwYWNlLiBXYWxraW5nIHRocm91Z2ggdGhlIHJlZ2lv bnMgaXMgZG9uZQ0KPiA+Pj4gKyAqCQkJaW5jcmVtZW50YWxseS4NCj4gPj4+ICsgKiBAdW5pZm9y bV9yZWdpb246CWEgcHJlLWFsbG9jYXRlZCBlcmFzZSByZWdpb24gZm9yIFNQSSBOT1Igd2l0aCBh DQo+IHVuaWZvcm0NCj4gPj4+ICsgKgkJCXNlY3RvciBzaXplIChsZWdhY3kgaW1wbGVtZW50YXRp b24pLg0KPiA+Pj4gKyAqIEBlcmFzZV90eXBlOgkJYW4gYXJyYXkgb2YgZXJhc2UgdHlwZXMgc2hh cmVkIGJ5IGFsbCB0aGUgcmVnaW9ucy4NCj4gPj4+ICsgKgkJCVRoZSBlcmFzZSB0eXBlcyBhcmUg c29ydGVkIGluIGFzY2VuZGluZyBvcmRlciwgd2l0aCB0aGUNCj4gPj4+ICsgKgkJCXNtYWxsZXN0 IEVyYXNlIFR5cGUgc2l6ZSBiZWluZyB0aGUgZmlyc3QgbWVtYmVyIGluIHRoZQ0KPiA+Pj4gKyAq CQkJZXJhc2VfdHlwZSBhcnJheS4NCj4gPj4+ICsgKiBAdW5pZm9ybV9lcmFzZV90eXBlOgliaXRt YXNrIGVuY29kaW5nIGVyYXNlIHR5cGVzIHRoYXQgY2FuIGVyYXNlDQo+ID4+PiB0aGUNCj4gPj4+ ICsgKgkJCWVudGlyZSBtZW1vcnkuIFRoaXMgbWVtYmVyIGlzIGNvbXBsZXRlZCBhdCBpbml0IGJ5 DQo+ID4+PiArICoJCQl1bmlmb3JtIGFuZCBub24tdW5pZm9ybSBTUEkgTk9SIGZsYXNoIG1lbW9y aWVzIGlmDQo+ID4+PiB0aGV5DQo+ID4+PiArICoJCQlzdXBwb3J0IGF0IGxlYXN0IG9uZSBlcmFz ZSB0eXBlIHRoYXQgY2FuIGVyYXNlIHRoZQ0KPiA+Pj4gKyAqCQkJZW50aXJlIG1lbW9yeS4NCj4g Pj4+ICsgKi8NCj4gPj4+ICtzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9tYXAgew0KPiA+Pj4gKwlzdHJ1 Y3Qgc3BpX25vcl9lcmFzZV9yZWdpb24JKnJlZ2lvbnM7DQo+ID4+PiArCXN0cnVjdCBzcGlfbm9y X2VyYXNlX3JlZ2lvbgl1bmlmb3JtX3JlZ2lvbjsNCj4gPj4+ICsJc3RydWN0IHNwaV9ub3JfZXJh c2VfdHlwZQllcmFzZV90eXBlW1NOT1JfRVJBU0VfVFlQRV9NQVhdOw0KPiA+Pj4gKwl1OAkJCQl1 bmlmb3JtX2VyYXNlX3R5cGU7DQo+ID4+PiArfTsNCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ ICAgKiBzdHJ1Y3QgZmxhc2hfaW5mbyAtIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgYSBzdHJ1Y3R1 cmUgdXNlZCBpbnRlcm5hbGx5IGJ5DQo+ID4+PiAgICoJCSAgICAgICBzcGlfbm9yX3NjYW4oKQ0K PiA+Pj4gICAqLw0KPiA+Pj4gQEAgLTI2Myw2ICszNTEsNyBAQCBzdHJ1Y3QgZmxhc2hfaW5mbzsN Cj4gPj4+ICAgKiBAd3JpdGVfcHJvdG86CXRoZSBTUEkgcHJvdG9jb2wgZm9yIHdyaXRlIG9wZXJh dGlvbnMNCj4gPj4+ICAgKiBAcmVnX3Byb3RvCQl0aGUgU1BJIHByb3RvY29sIGZvciByZWFkX3Jl Zy93cml0ZV9yZWcvZXJhc2UNCj4gPj4+IG9wZXJhdGlvbnMNCj4gPj4+ICAgKiBAY21kX2J1ZjoJ CXVzZWQgYnkgdGhlIHdyaXRlX3JlZw0KPiA+Pj4gKyAqIEBlcmFzZV9tYXA6CQl0aGUgZXJhc2Ug bWFwIG9mIHRoZSBTUEkgTk9SDQo+ID4+PiAgICogQHByZXBhcmU6CQlbT1BUSU9OQUxdIGRvIHNv bWUgcHJlcGFyYXRpb25zIGZvciB0aGUNCj4gPj4+ICAgKgkJCXJlYWQvd3JpdGUvZXJhc2UvbG9j ay91bmxvY2sgb3BlcmF0aW9ucw0KPiA+Pj4gICAqIEB1bnByZXBhcmU6CQlbT1BUSU9OQUxdIGRv IHNvbWUgcG9zdCB3b3JrIGFmdGVyIHRoZQ0KPiA+Pj4gQEAgLTI5OCw2ICszODcsNyBAQCBzdHJ1 Y3Qgc3BpX25vciB7DQo+ID4+PiAgCWJvb2wJCQlzc3Rfd3JpdGVfc2Vjb25kOw0KPiA+Pj4gIAl1 MzIJCQlmbGFnczsNCj4gPj4+ICAJdTgJCQljbWRfYnVmW1NQSV9OT1JfTUFYX0NNRF9TSVpFXTsN Cj4gPj4+ICsJc3RydWN0IHNwaV9ub3JfZXJhc2VfbWFwCWVyYXNlX21hcDsNCj4gPj4+DQo+ID4+ PiAgCWludCAoKnByZXBhcmUpKHN0cnVjdCBzcGlfbm9yICpub3IsIGVudW0gc3BpX25vcl9vcHMg b3BzKTsNCj4gPj4+ICAJdm9pZCAoKnVucHJlcGFyZSkoc3RydWN0IHNwaV9ub3IgKm5vciwgZW51 bSBzcGlfbm9yX29wcyBvcHMpOyBAQCAtDQo+ID4+PiAzMTgsNiArNDA4LDIzIEBAIHN0cnVjdCBz cGlfbm9yIHsNCj4gPj4+ICAJdm9pZCAqcHJpdjsNCj4gPj4+ICB9Ow0KPiA+Pj4NCj4gPj4+ICtz dGF0aWMgdTY0IF9fbWF5YmVfdW51c2VkDQo+ID4+PiArc3BpX25vcl9yZWdpb25faXNfbGFzdChj b25zdCBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9yZWdpb24gKnJlZ2lvbikgew0KPiA+Pj4gKwlyZXR1 cm4gcmVnaW9uLT5vZmZzZXQgJiBTTk9SX0xBU1RfUkVHSU9OOyB9DQo+ID4+PiArDQo+ID4+PiAr c3RhdGljIHU2NCBfX21heWJlX3VudXNlZA0KPiA+Pj4gK3NwaV9ub3JfcmVnaW9uX2VuZChjb25z dCBzdHJ1Y3Qgc3BpX25vcl9lcmFzZV9yZWdpb24gKnJlZ2lvbikgew0KPiA+Pj4gKwlyZXR1cm4g KHJlZ2lvbi0+b2Zmc2V0ICYgflNOT1JfRVJBU0VfRkxBR1NfTUFTSykgKyByZWdpb24tPnNpemU7 IH0NCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzcGlfbm9yX2hh c191bmlmb3JtX2VyYXNlKGNvbnN0IHN0cnVjdA0KPiA+Pj4gK3NwaV9ub3IgKm5vcikgew0KPiA+ Pj4gKwlyZXR1cm4gISFub3ItPmVyYXNlX21hcC51bmlmb3JtX2VyYXNlX3R5cGU7DQo+ID4+PiAr fQ0KPiA+Pj4gKw0KPiA+Pj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfbm9yX3NldF9mbGFzaF9u b2RlKHN0cnVjdCBzcGlfbm9yICpub3IsDQo+ID4+PiAgCQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnApDQo+ID4+PiAgew0KPiA+Pj4gLS0NCj4gPj4+IDIuOS40DQo+ID4+Pg0KPiA+Pj4NCj4g Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xw0KPiA+Pj4gTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0DQo+ID4+PiBodHRwczov L2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYl MkZsaQ0KPiA+Pj4gc3RzLmluZnINCj4gPj4+IGFkZWFkLm9yZyUyRm1haWxtYW4lMkZsaXN0aW5m byUyRmxpbnV4LQ0KPiA+Pj4NCj4gbXRkJTJGJmFtcDtkYXRhPTAyJTdDMDElN0N5b2dlc2huYXJh eWFuLmdhdXIlNDBueHAuY29tJTdDM2M3ODJlNQ0KPiA+Pj4NCj4gMmI3ZmQ0YThiOWFmMDA4ZDYx N2ZkNTE1NCU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAxNjM1JTdDMCUNCj4gPj4+DQo+ IDdDMCU3QzYzNjcyMjc3NDEwODcxODc4MiZhbXA7c2RhdGE9Y1NwSFVETWkwTERWJTJGeEFZajZp NnBpU2kzZ24lDQo+ID4+PiAyQkRHQU1XS29PeDMlMkY1JTJCc1UlM0QmYW1wO3Jlc2VydmVkPTAN Cj4gPj4NCj4gPg0KPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXw0KPiA+IExpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdA0KPiA+ IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0 cCUzQSUyRiUyRmxpc3QNCj4gPiBzLmluZnJhZGVhZC5vcmclMkZtYWlsbWFuJTJGbGlzdGluZm8l MkZsaW51eC0NCj4gbXRkJTJGJmFtcDtkYXRhPTAyJTdDMDElNw0KPiA+DQo+IEN5b2dlc2huYXJh eWFuLmdhdXIlNDBueHAuY29tJTdDNzZlN2UxNTU1ZjRhNGNkYTM3ODAwOGQ2MzM4NTQ4MGIlDQo+ IDdDNjg2DQo+ID4NCj4gZWExZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUlN0MwJTdDMCU3QzYz Njc1MzA0NDg3NjE5OTE1NSZhbXA7cw0KPiBkYXRhPTANCj4gPg0KPiB2ZEVjT05IbHVmWVFXJTJC RDdLNmxWYVBCeVhNdURINVlBeXglMkZFJTJGQzNlbm8lM0QmYW1wO3Jlc2Vydg0KPiBlZD0wDQo+ ID4NCg==