From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 03090A0563; Wed, 15 Apr 2020 21:00:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 225771D9F2; Wed, 15 Apr 2020 21:00:03 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2081.outbound.protection.outlook.com [40.107.21.81]) by dpdk.org (Postfix) with ESMTP id 7D1431D97C for ; Wed, 15 Apr 2020 20:59:59 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j+Hr6Fiyk5oYOmp+Pi4rBr7RReEla40QAOQS94E8h+htLywgmHqSONdM2Z2p263OWqw5LzLs4IOmkq7QYN3EcPmcpsbfHeSyb6fLHGiGNS5Ks0jag19TtvMfTsjKQgrWkNfcBCt1RdfwOR7/WCIv2jMIzoQDnzvhnb9v3kIsUdFm1Yv1C/9mRyOwCXLjhngPFXGPjR6mBjHAr//w041guXISS6u9Dg06nrWOR2Lcms7ft1JsASUzwvdzejR4jeSW3Ib+J9jEWo6BcvvQFJyZiHDWtnjtIwfJaMPsSBNQf5Da1Kgrm7ELX18i7YnA6vhpJis9wHfDiUbygsRcW5++uA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AJwEXogK8oC7I+Z6JzryUwDx0w7XQN0fgsDjogWm83k=; b=kfpcNlUq5GSDqhcUIvAon5Vgr0suqo+9ABJwXZFJ1OXngmCX4OODqQN+hU/pypXn9Y5YCWRjORldrbxEjkjrAGdFm2RYScxSTPj3a0BxLs7YtTEpXZvPnYcGEOq7QqqppGQRfN9s5CCSIOaQTMbAFSmHNa9aPh6LQmIexgmvBZGkQZpZsFxY79uzXPvrBBv3M2Cv/OyB7gWiH7hJY/IaLhZaDqSnTarXkJZXnTR1IG2J0tMSguvsl56L/qZUOCHw9SMvI8buQbuCcyevIWHAy48ECZnsFKMlhqR2fwQLKNdaG4gzmt3I6HP4S9w6n+qWWEbph1X9ir5zpG1hdNAi7g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ericsson.com; dmarc=pass action=none header.from=ericsson.com; dkim=pass header.d=ericsson.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AJwEXogK8oC7I+Z6JzryUwDx0w7XQN0fgsDjogWm83k=; b=jyBn/JunyC4T0n7mAULxHvBs7AxOjKWbs4diHuuo8b7wDk5OllXPvv/G0+SDFFD0VrGtLIFoyaMcHqZmLbjUlQ+sL1cYKu2+bakth9LxOZIIJZL8Aqc1XpCa75cv7vSg/ZLxc+LKNC7WlygwpssYJnoH1T19abM/lq44qbxg1/Y= Received: from HE1PR07MB4284.eurprd07.prod.outlook.com (2603:10a6:7:9f::29) by HE1PR07MB3259.eurprd07.prod.outlook.com (2603:10a6:7:2f::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.24; Wed, 15 Apr 2020 18:59:58 +0000 Received: from HE1PR07MB4284.eurprd07.prod.outlook.com ([fe80::542b:7b22:1f38:d985]) by HE1PR07MB4284.eurprd07.prod.outlook.com ([fe80::542b:7b22:1f38:d985%5]) with mapi id 15.20.2921.024; Wed, 15 Apr 2020 18:59:58 +0000 From: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= To: Vladimir Medvedkin , "dev@dpdk.org" CC: "konstantin.ananyev@intel.com" , "yipeng1.wang@intel.com" , "sameh.gobriel@intel.com" , "bruce.richardson@intel.com" Thread-Topic: [dpdk-dev] [PATCH v3 1/4] hash: add k32v64 hash library Thread-Index: AQHWE1Itndzr+QAAvEG7tdTeADvJn6h6iXsA Date: Wed, 15 Apr 2020 18:59:57 +0000 Message-ID: <2c0ed656-a8dc-5536-6eff-a63c31d5458c@ericsson.com> References: <0e767e9171c4e90d57ec06b50d6bf3b7d79828b1.1586974411.git.vladimir.medvedkin@intel.com> In-Reply-To: <0e767e9171c4e90d57ec06b50d6bf3b7d79828b1.1586974411.git.vladimir.medvedkin@intel.com> Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 authentication-results: spf=none (sender IP is ) smtp.mailfrom=mattias.ronnblom@ericsson.com; x-originating-ip: [95.205.139.88] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: cc071b29-4697-4968-3146-08d7e16f3153 x-ms-traffictypediagnostic: HE1PR07MB3259: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-forefront-prvs: 0374433C81 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:HE1PR07MB4284.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10009020)(4636009)(376002)(136003)(396003)(346002)(39860400002)(366004)(4326008)(66476007)(5660300002)(36756003)(6486002)(71200400001)(8676002)(8936002)(6512007)(85182001)(30864003)(31696002)(316002)(186003)(54906003)(86362001)(2906002)(66446008)(478600001)(66946007)(26005)(85202003)(76116006)(2616005)(53546011)(81156014)(64756008)(31686004)(110136005)(6506007)(66556008)(579004); DIR:OUT; SFP:1101; received-spf: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: W9afy8jelhxjBqdUEiQ+axsx2BYQXaU6o/x11wQLaQxlL5rZibZ6XXKR/RAUs4VWUvKRRYN3VUgipZTZ7JL20sJV+0vtH3hwolVwoG1AhsVzScTCDFdHtvZkoAKhslhn9RfSuJgWHnyt8Wj84AYoAXjUppaQ8AJCr2AbSzoNeitSQt2KrXtqP885ynnjgs3P98Eu+iQOP552u4xV1jko+i+h7eulaeGx+fPQU3b1EXJYrWDZX0k++t4kE2mTFtpMeCRcqoYte6cwSZmkGEeh7kB80I3/wawiCttPtCED4nsA5KwngmKc+kULIuAYgdbnCz/3E9KXg/I0Yr3cX32P/72JqhdYPdAfXiY+fE1+uvqE9I75ZK5RkqpALautOisH5zUbAEZ4QRyBL4GmbeABhLhECOhZi3bZZV9I7YWxOKwRxI6fPrFnoPpb36Z33bKv x-ms-exchange-antispam-messagedata: vo93wfO5sDwZXgujih3z26ihw6EhIY6h7mfKl5NO66xgc5xB36sRjcdona3r+zLDJ6Its/Ktz9yjRpqscTzdjEZn2S/T6BtaNI2ZYBuajcFUNwIsySVrybk5r3bpBZN2KCVHufKbkiQHxJJKczPfdA== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <65E27F584DFB8845BFBFD2301700068B@eurprd07.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-Network-Message-Id: cc071b29-4697-4968-3146-08d7e16f3153 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2020 18:59:57.9730 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: mgc47T3rUYlDsetMJjSHwWAh8PEx5xHltsC5ihzhQXw4+AZ8IOJAdVSbE7pBQ6vfitWCBQzUbgYOjmkDa++OazxK1kJx0mQZKFT2tw4AKYw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR07MB3259 Subject: Re: [dpdk-dev] [PATCH v3 1/4] hash: add k32v64 hash library X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" T24gMjAyMC0wNC0xNSAyMDoxNywgVmxhZGltaXIgTWVkdmVka2luIHdyb3RlOg0KPiBLMzJWNjQg aGFzaCBpcyBhIGhhc2ggdGFibGUgdGhhdCBzdXBwb3J0cyAzMiBiaXQga2V5cyBhbmQgNjQgYml0 IHZhbHVlcy4NCj4gVGhpcyB0YWJsZSBpcyBoYXNoIGZ1bmN0aW9uIGFnbm9zdGljIHNvIHVzZXIg bXVzdCBwcm92aWRlDQo+IHByZWNhbGN1bGF0ZWQgaGFzaCBzaWduYXR1cmUgZm9yIGFkZC9kZWxl dGUvbG9va3VwIG9wZXJhdGlvbnMuDQo+DQo+IFNpZ25lZC1vZmYtYnk6IFZsYWRpbWlyIE1lZHZl ZGtpbiA8dmxhZGltaXIubWVkdmVka2luQGludGVsLmNvbT4NCj4gLS0tDQo+ICAgbGliL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0NCj4gICBsaWIvbGlicnRlX2hh c2gvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAxMyArLQ0KPiAgIGxpYi9saWJydGVfaGFzaC9r MzJ2NjRfaGFzaF9hdng1MTJ2bC5jIHwgIDU2ICsrKysrKw0KPiAgIGxpYi9saWJydGVfaGFzaC9t ZXNvbi5idWlsZCAgICAgICAgICAgIHwgIDE3ICstDQo+ICAgbGliL2xpYnJ0ZV9oYXNoL3J0ZV9o YXNoX3ZlcnNpb24ubWFwICAgfCAgIDYgKy0NCj4gICBsaWIvbGlicnRlX2hhc2gvcnRlX2szMnY2 NF9oYXNoLmMgICAgICB8IDMxNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4g ICBsaWIvbGlicnRlX2hhc2gvcnRlX2szMnY2NF9oYXNoLmggICAgICB8IDIxMSArKysrKysrKysr KysrKysrKysrKysrDQo+ICAgNyBmaWxlcyBjaGFuZ2VkLCA2MTUgaW5zZXJ0aW9ucygrKSwgNSBk ZWxldGlvbnMoLSkNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9oYXNoL2szMnY2 NF9oYXNoX2F2eDUxMnZsLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9oYXNo L3J0ZV9rMzJ2NjRfaGFzaC5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfaGFz aC9ydGVfazMydjY0X2hhc2guaA0KPg0KPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGli L01ha2VmaWxlDQo+IGluZGV4IDQ2YjkxYWUuLmE4YzAyZTQgMTAwNjQ0DQo+IC0tLSBhL2xpYi9N YWtlZmlsZQ0KPiArKysgYi9saWIvTWFrZWZpbGUNCj4gQEAgLTQ4LDcgKzQ4LDcgQEAgRElSUy0k KENPTkZJR19SVEVfTElCUlRFX1ZIT1NUKSArPSBsaWJydGVfdmhvc3QNCj4gICBERVBESVJTLWxp YnJ0ZV92aG9zdCA6PSBsaWJydGVfZWFsIGxpYnJ0ZV9tZW1wb29sIGxpYnJ0ZV9tYnVmIGxpYnJ0 ZV9ldGhkZXYgXA0KPiAgIAkJCWxpYnJ0ZV9uZXQgbGlicnRlX2hhc2ggbGlicnRlX2NyeXB0b2Rl dg0KPiAgIERJUlMtJChDT05GSUdfUlRFX0xJQlJURV9IQVNIKSArPSBsaWJydGVfaGFzaA0KPiAt REVQRElSUy1saWJydGVfaGFzaCA6PSBsaWJydGVfZWFsIGxpYnJ0ZV9yaW5nDQo+ICtERVBESVJT LWxpYnJ0ZV9oYXNoIDo9IGxpYnJ0ZV9lYWwgbGlicnRlX3JpbmcgbGlicnRlX21lbXBvb2wNCj4g ICBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfRUZEKSArPSBsaWJydGVfZWZkDQo+ICAgREVQRElS Uy1saWJydGVfZWZkIDo9IGxpYnJ0ZV9lYWwgbGlicnRlX3JpbmcgbGlicnRlX2hhc2gNCj4gICBE SVJTLSQoQ09ORklHX1JURV9MSUJSVEVfUklCKSArPSBsaWJydGVfcmliDQo+IGRpZmYgLS1naXQg YS9saWIvbGlicnRlX2hhc2gvTWFrZWZpbGUgYi9saWIvbGlicnRlX2hhc2gvTWFrZWZpbGUNCj4g aW5kZXggZWM5Zjg2NC4uMDIzNjg5ZCAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9oYXNoL01h a2VmaWxlDQo+ICsrKyBiL2xpYi9saWJydGVfaGFzaC9NYWtlZmlsZQ0KPiBAQCAtOCwxMyArOCwx NCBAQCBMSUIgPSBsaWJydGVfaGFzaC5hDQo+ICAgDQo+ICAgQ0ZMQUdTICs9IC1PMw0KPiAgIENG TEFHUyArPSAkKFdFUlJPUl9GTEFHUykgLUkkKFNSQ0RJUikNCj4gLUxETElCUyArPSAtbHJ0ZV9l YWwgLWxydGVfcmluZw0KPiArTERMSUJTICs9IC1scnRlX2VhbCAtbHJ0ZV9yaW5nIC1scnRlX21l bXBvb2wNCj4gICANCj4gICBFWFBPUlRfTUFQIDo9IHJ0ZV9oYXNoX3ZlcnNpb24ubWFwDQo+ICAg DQo+ICAgIyBhbGwgc291cmNlIGFyZSBzdG9yZWQgaW4gU1JDUy15DQo+ICAgU1JDUy0kKENPTkZJ R19SVEVfTElCUlRFX0hBU0gpIDo9IHJ0ZV9jdWNrb29faGFzaC5jDQo+ICAgU1JDUy0kKENPTkZJ R19SVEVfTElCUlRFX0hBU0gpICs9IHJ0ZV9mYmtfaGFzaC5jDQo+ICtTUkNTLSQoQ09ORklHX1JU RV9MSUJSVEVfSEFTSCkgKz0gcnRlX2szMnY2NF9oYXNoLmMNCj4gICANCj4gICAjIGluc3RhbGwg dGhpcyBoZWFkZXIgZmlsZQ0KPiAgIFNZTUxJTkstJChDT05GSUdfUlRFX0xJQlJURV9IQVNIKS1p bmNsdWRlIDo9IHJ0ZV9oYXNoLmgNCj4gQEAgLTI3LDUgKzI4LDE1IEBAIGVuZGlmDQo+ICAgU1lN TElOSy0kKENPTkZJR19SVEVfTElCUlRFX0hBU0gpLWluY2x1ZGUgKz0gcnRlX2poYXNoLmgNCj4g ICBTWU1MSU5LLSQoQ09ORklHX1JURV9MSUJSVEVfSEFTSCktaW5jbHVkZSArPSBydGVfdGhhc2gu aA0KPiAgIFNZTUxJTkstJChDT05GSUdfUlRFX0xJQlJURV9IQVNIKS1pbmNsdWRlICs9IHJ0ZV9m YmtfaGFzaC5oDQo+ICtTWU1MSU5LLSQoQ09ORklHX1JURV9MSUJSVEVfSEFTSCktaW5jbHVkZSAr PSBydGVfazMydjY0X2hhc2guaA0KPiArDQo+ICtDQ19BVlg1MTJWTF9TVVBQT1JUPSQoc2hlbGwg JChDQykgLW1hdng1MTJ2bCAtZE0gLUUgLSA8L2Rldi9udWxsIDI+JjEgfCBcDQo+ICtncmVwIC1x IF9fQVZYNTEyVkxfXyAmJiBlY2hvIDEpDQo+ICsNCj4gK2lmZXEgKCQoQ0NfQVZYNTEyVkxfU1VQ UE9SVCksIDEpDQo+ICsJU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX0hBU0gpICs9IGszMnY2NF9o YXNoX2F2eDUxMnZsLmMNCj4gKwlDRkxBR1NfazMydjY0X2hhc2hfYXZ4NTEydmwubyArPSAtbWF2 eDUxMnZsDQo+ICsJQ0ZMQUdTX3J0ZV9rMzJ2NjRfaGFzaC5vICs9IC1EQ0NfQVZYNTEyVkxfU1VQ UE9SVA0KPiArZW5kaWYNCj4gICANCj4gICBpbmNsdWRlICQoUlRFX1NESykvbWsvcnRlLmxpYi5t aw0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9oYXNoL2szMnY2NF9oYXNoX2F2eDUxMnZsLmMg Yi9saWIvbGlicnRlX2hhc2gvazMydjY0X2hhc2hfYXZ4NTEydmwuYw0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi43YzcwZGQyDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvbGliL2xpYnJ0ZV9oYXNoL2szMnY2NF9oYXNoX2F2eDUxMnZsLmMNCj4gQEAgLTAsMCArMSw1 NiBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICog Q29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqLw0KPiArDQo+ICsjaW5j bHVkZSA8cnRlX2szMnY2NF9oYXNoLmg+DQo+ICsNCj4gK2ludA0KPiArazMydjY0X2hhc2hfYnVs a19sb29rdXBfYXZ4NTEydmwoc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqdGFibGUsDQo+ ICsJdWludDMyX3QgKmtleXMsIHVpbnQzMl90ICpoYXNoZXMsIHVpbnQ2NF90ICp2YWx1ZXMsIHVu c2lnbmVkIGludCBuKTsNCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQNCj4gK2szMnY2NF9jbXBf a2V5c19hdng1MTJ2bChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX2J1Y2tldCAqYnVja2V0LCB1aW50 MzJfdCBrZXksDQo+ICsJdWludDY0X3QgKnZhbCkNCj4gK3sNCj4gKwlfX20xMjhpIGtleXMsIHNy Y2hfa2V5Ow0KPiArCV9fbW1hc2s4IG1zazsNCj4gKw0KPiArCWtleXMgPSBfbW1fbG9hZF9zaTEy OCgodm9pZCAqKWJ1Y2tldCk7DQo+ICsJc3JjaF9rZXkgPSBfbW1fc2V0MV9lcGkzMihrZXkpOw0K PiArDQo+ICsJbXNrID0gX21tX21hc2tfY21wZXFfZXBpMzJfbWFzayhidWNrZXQtPmtleV9tYXNr LCBrZXlzLCBzcmNoX2tleSk7DQo+ICsJaWYgKG1zaykgew0KPiArCQkqdmFsID0gYnVja2V0LT52 YWxbX19idWlsdGluX2N0eihtc2spXTsNCj4gKwkJcmV0dXJuIDE7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ICtrMzJ2NjRfaGFz aF9sb29rdXBfYXZ4NTEydmwoc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqdGFibGUsIHVp bnQzMl90IGtleSwNCj4gKwl1aW50MzJfdCBoYXNoLCB1aW50NjRfdCAqdmFsdWUpDQo+ICt7DQo+ ICsJcmV0dXJuIF9fazMydjY0X2hhc2hfbG9va3VwKHRhYmxlLCBrZXksIGhhc2gsIHZhbHVlLA0K PiArCQlrMzJ2NjRfY21wX2tleXNfYXZ4NTEydmwpOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK2sz MnY2NF9oYXNoX2J1bGtfbG9va3VwX2F2eDUxMnZsKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFi bGUgKnRhYmxlLA0KPiArCXVpbnQzMl90ICprZXlzLCB1aW50MzJfdCAqaGFzaGVzLCB1aW50NjRf dCAqdmFsdWVzLCB1bnNpZ25lZCBpbnQgbikNCj4gK3sNCj4gKwlpbnQgcmV0LCBjbnQgPSAwOw0K PiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJaWYgKHVubGlrZWx5KCh0YWJsZSA9PSBOVUxM KSB8fCAoa2V5cyA9PSBOVUxMKSB8fCAoaGFzaGVzID09IE5VTEwpIHx8DQo+ICsJCQkodmFsdWVz ID09IE5VTEwpKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKSB7DQo+ICsJCXJldCA9IGszMnY2NF9oYXNoX2xvb2t1cF9hdng1MTJ2bCh0YWJs ZSwga2V5c1tpXSwgaGFzaGVzW2ldLA0KPiArCQkJJnZhbHVlc1tpXSk7DQo+ICsJCWlmIChyZXQg PT0gMCkNCj4gKwkJCWNudCsrOw0KPiArCX0NCj4gKwlyZXR1cm4gY250Ow0KPiArfQ0KPiBkaWZm IC0tZ2l0IGEvbGliL2xpYnJ0ZV9oYXNoL21lc29uLmJ1aWxkIGIvbGliL2xpYnJ0ZV9oYXNoL21l c29uLmJ1aWxkDQo+IGluZGV4IDZhYjQ2YWUuLjhhMzdjYzQgMTAwNjQ0DQo+IC0tLSBhL2xpYi9s aWJydGVfaGFzaC9tZXNvbi5idWlsZA0KPiArKysgYi9saWIvbGlicnRlX2hhc2gvbWVzb24uYnVp bGQNCj4gQEAgLTMsMTAgKzMsMjMgQEANCj4gICANCj4gICBoZWFkZXJzID0gZmlsZXMoJ3J0ZV9j cmNfYXJtNjQuaCcsDQo+ICAgCSdydGVfZmJrX2hhc2guaCcsDQo+ICsJJ3J0ZV9rMzJ2NjRfaGFz aC5oJywNCj4gICAJJ3J0ZV9oYXNoX2NyYy5oJywNCj4gICAJJ3J0ZV9oYXNoLmgnLA0KPiAgIAkn cnRlX2poYXNoLmgnLA0KPiAgIAkncnRlX3RoYXNoLmgnKQ0KPiAgIA0KPiAtc291cmNlcyA9IGZp bGVzKCdydGVfY3Vja29vX2hhc2guYycsICdydGVfZmJrX2hhc2guYycpDQo+IC1kZXBzICs9IFsn cmluZyddDQo+ICtzb3VyY2VzID0gZmlsZXMoJ3J0ZV9jdWNrb29faGFzaC5jJywgJ3J0ZV9mYmtf aGFzaC5jJywgJ3J0ZV9rMzJ2NjRfaGFzaC5jJykNCj4gK2RlcHMgKz0gWydyaW5nJywgJ21lbXBv b2wnXQ0KPiArDQo+ICtpZiBkcGRrX2NvbmYuaGFzKCdSVEVfQVJDSF9YODYnKQ0KPiArCWlmIGNj Lmhhc19hcmd1bWVudCgnLW1hdng1MTJ2bCcpDQo+ICsJCWF2eDUxMl90bXBsaWIgPSBzdGF0aWNf bGlicmFyeSgnYXZ4NTEyX3RtcCcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdrMzJ2NjRfaGFzaF9hdng1MTJ2bC5jJywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGVwZW5kZW5jaWVzOiBzdGF0aWNfcnRlX21lbXBvb2wsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNfYXJnczogY2ZsYWdzICsgWyctbWF2eDUxMnZsJ10pDQo+ICsg ICAgICAgICAgICAgICAgb2JqcyArPSBhdng1MTJfdG1wbGliLmV4dHJhY3Rfb2JqZWN0cygnazMy djY0X2hhc2hfYXZ4NTEydmwuYycpDQo+ICsgICAgICAgICAgICAgICAgY2ZsYWdzICs9ICctREND X0FWWDUxMlZMX1NVUFBPUlQnDQo+ICsNCj4gKwllbmRpZg0KPiArZW5kaWYNCj4gZGlmZiAtLWdp dCBhL2xpYi9saWJydGVfaGFzaC9ydGVfaGFzaF92ZXJzaW9uLm1hcCBiL2xpYi9saWJydGVfaGFz aC9ydGVfaGFzaF92ZXJzaW9uLm1hcA0KPiBpbmRleCBhOGZiYmMzLi45YTRmMmY2IDEwMDY0NA0K PiAtLS0gYS9saWIvbGlicnRlX2hhc2gvcnRlX2hhc2hfdmVyc2lvbi5tYXANCj4gKysrIGIvbGli L2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoX3ZlcnNpb24ubWFwDQo+IEBAIC0zNCw1ICszNCw5IEBAIEVY UEVSSU1FTlRBTCB7DQo+ICAgDQo+ICAgCXJ0ZV9oYXNoX2ZyZWVfa2V5X3dpdGhfcG9zaXRpb247 DQo+ICAgCXJ0ZV9oYXNoX21heF9rZXlfaWQ7DQo+IC0NCj4gKwlydGVfazMydjY0X2hhc2hfY3Jl YXRlOw0KPiArCXJ0ZV9rMzJ2NjRfaGFzaF9maW5kX2V4aXN0aW5nOw0KPiArCXJ0ZV9rMzJ2NjRf aGFzaF9mcmVlOw0KPiArCXJ0ZV9rMzJ2NjRfaGFzaF9hZGQ7DQo+ICsJcnRlX2szMnY2NF9oYXNo X2RlbGV0ZTsNCj4gICB9Ow0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9rMzJ2 NjRfaGFzaC5jIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9rMzJ2NjRfaGFzaC5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjdlZDk0YjQNCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9saWIvbGlicnRlX2hhc2gvcnRlX2szMnY2NF9oYXNoLmMNCj4gQEAgLTAsMCArMSwz MTUgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gKyAq IENvcHlyaWdodChjKSAyMDIwIEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2lu Y2x1ZGUgPHN0cmluZy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2VhbF9tZW1jb25maWcuaD4N Cj4gKyNpbmNsdWRlIDxydGVfZXJybm8uaD4NCj4gKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+ ICsjaW5jbHVkZSA8cnRlX21lbW9yeS5oPg0KPiArI2luY2x1ZGUgPHJ0ZV90YWlscS5oPg0KPiAr DQo+ICsjaW5jbHVkZSA8cnRlX2szMnY2NF9oYXNoLmg+DQo+ICsNCj4gK1RBSUxRX0hFQUQocnRl X2szMnY2NF9oYXNoX2xpc3QsIHJ0ZV90YWlscV9lbnRyeSk7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1 Y3QgcnRlX3RhaWxxX2VsZW0gcnRlX2szMnY2NF9oYXNoX3RhaWxxID0gew0KPiArCS5uYW1lID0g IlJURV9LMzJWNjRfSEFTSCIsDQo+ICt9Ow0KPiArDQo+ICtFQUxfUkVHSVNURVJfVEFJTFEocnRl X2szMnY2NF9oYXNoX3RhaWxxKTsNCj4gKw0KPiArI2RlZmluZSBWQUxJRF9LRVlfTVNLICAgICAg ICAgICAoKDEgPDwgUlRFX0szMlY2NF9LRVlTX1BFUl9CVUNLRVQpIC0gMSkNCj4gKw0KPiArI2lm ZGVmIENDX0FWWDUxMlZMX1NVUFBPUlQNCj4gK2ludA0KPiArazMydjY0X2hhc2hfYnVsa19sb29r dXBfYXZ4NTEydmwoc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqdGFibGUsDQo+ICsJdWlu dDMyX3QgKmtleXMsIHVpbnQzMl90ICpoYXNoZXMsIHVpbnQ2NF90ICp2YWx1ZXMsIHVuc2lnbmVk IGludCBuKTsNCj4gKyNlbmRpZg0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtrMzJ2NjRfaGFzaF9i dWxrX2xvb2t1cChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICp0YWJsZSwgdWludDMyX3Qg KmtleXMsDQo+ICsJdWludDMyX3QgKmhhc2hlcywgdWludDY0X3QgKnZhbHVlcywgdW5zaWduZWQg aW50IG4pDQo+ICt7DQo+ICsJaW50IHJldCwgY250ID0gMDsNCj4gKwl1bnNpZ25lZCBpbnQgaTsN Cj4gKw0KPiArCWlmICh1bmxpa2VseSgodGFibGUgPT0gTlVMTCkgfHwgKGtleXMgPT0gTlVMTCkg fHwgKGhhc2hlcyA9PSBOVUxMKSB8fA0KPiArCQkJKHZhbHVlcyA9PSBOVUxMKSkpDQo+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KPiArCQly ZXQgPSBydGVfazMydjY0X2hhc2hfbG9va3VwKHRhYmxlLCBrZXlzW2ldLCBoYXNoZXNbaV0sDQo+ ICsJCQkmdmFsdWVzW2ldKTsNCj4gKwkJaWYgKHJldCA9PSAwKQ0KPiArCQkJY250Kys7DQo+ICsJ fQ0KPiArCXJldHVybiBjbnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBydGVfazMydjY0X2hhc2hf YnVsa19sb29rdXBfdA0KPiArZ2V0X2xvb2t1cF9idWxrX2ZuKHZvaWQpDQo+ICt7DQo+ICsjaWZk ZWYgQ0NfQVZYNTEyVkxfU1VQUE9SVA0KPiArCWlmIChydGVfY3B1X2dldF9mbGFnX2VuYWJsZWQo UlRFX0NQVUZMQUdfQVZYNTEyRikpDQo+ICsJCXJldHVybiBrMzJ2NjRfaGFzaF9idWxrX2xvb2t1 cF9hdng1MTJ2bDsNCj4gKyNlbmRpZg0KPiArCXJldHVybiBrMzJ2NjRfaGFzaF9idWxrX2xvb2t1 cDsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtydGVfazMydjY0X2hhc2hfYWRkKHN0cnVjdCBydGVf azMydjY0X2hhc2hfdGFibGUgKnRhYmxlLCB1aW50MzJfdCBrZXksDQo+ICsJdWludDMyX3QgaGFz aCwgdWludDY0X3QgdmFsdWUpDQo+ICt7DQo+ICsJdWludDMyX3QgYnVja2V0Ow0KPiArCWludCBp LCBpZHgsIHJldDsNCj4gKwl1aW50OF90IG1zazsNCj4gKwlzdHJ1Y3QgcnRlX2szMnY2NF9leHRf ZW50ICp0bXAsICplbnQsICpwcmV2ID0gTlVMTDsNCj4gKw0KPiArCWlmICh0YWJsZSA9PSBOVUxM KQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWJ1Y2tldCA9IGhhc2ggJiB0YWJsZS0+ YnVja2V0X21zazsNCj4gKwkvKiBTZWFyY2gga2V5IGluIHRhYmxlLiBVcGRhdGUgdmFsdWUgaWYg ZXhpc3RzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IFJURV9LMzJWNjRfS0VZU19QRVJfQlVDS0VU OyBpKyspIHsNCj4gKwkJaWYgKChrZXkgPT0gdGFibGUtPnRbYnVja2V0XS5rZXlbaV0pICYmDQo+ ICsJCQkJKHRhYmxlLT50W2J1Y2tldF0ua2V5X21hc2sgJiAoMSA8PCBpKSkpIHsNCj4gKwkJCXRh YmxlLT50W2J1Y2tldF0udmFsW2ldID0gdmFsdWU7DQo+ICsJCQlyZXR1cm4gMDsNCj4gKwkJfQ0K PiArCX0NCj4gKw0KPiArCWlmICghU0xJU1RfRU1QVFkoJnRhYmxlLT50W2J1Y2tldF0uaGVhZCkp IHsNCj4gKwkJU0xJU1RfRk9SRUFDSChlbnQsICZ0YWJsZS0+dFtidWNrZXRdLmhlYWQsIG5leHQp IHsNCj4gKwkJCWlmIChlbnQtPmtleSA9PSBrZXkpIHsNCj4gKwkJCQllbnQtPnZhbCA9IHZhbHVl Ow0KPiArCQkJCXJldHVybiAwOw0KPiArCQkJfQ0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJbXNr ID0gfnRhYmxlLT50W2J1Y2tldF0ua2V5X21hc2sgJiBWQUxJRF9LRVlfTVNLOw0KPiArCWlmICht c2spIHsNCj4gKwkJaWR4ID0gX19idWlsdGluX2N0eihtc2spOw0KPiArCQl0YWJsZS0+dFtidWNr ZXRdLmtleVtpZHhdID0ga2V5Ow0KPiArCQl0YWJsZS0+dFtidWNrZXRdLnZhbFtpZHhdID0gdmFs dWU7DQo+ICsJCXJ0ZV9zbXBfd21iKCk7DQo+ICsJCXRhYmxlLT50W2J1Y2tldF0ua2V5X21hc2sg fD0gMSA8PCBpZHg7DQo+ICsJCXRhYmxlLT5uYl9lbnQrKzsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0ID0gcnRlX21lbXBvb2xfZ2V0KHRhYmxlLT5leHRfZW50X3Bvb2wsICh2 b2lkICoqKSZlbnQpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJU0xJU1RfTkVYVChlbnQsIG5leHQpID0gTlVMTDsNCj4gKwllbnQtPmtleSA9IGtleTsNCj4g KwllbnQtPnZhbCA9IHZhbHVlOw0KPiArCXJ0ZV9zbXBfd21iKCk7DQo+ICsJU0xJU1RfRk9SRUFD SCh0bXAsICZ0YWJsZS0+dFtidWNrZXRdLmhlYWQsIG5leHQpDQo+ICsJCXByZXYgPSB0bXA7DQo+ ICsNCj4gKwlpZiAocHJldiA9PSBOVUxMKQ0KPiArCQlTTElTVF9JTlNFUlRfSEVBRCgmdGFibGUt PnRbYnVja2V0XS5oZWFkLCBlbnQsIG5leHQpOw0KPiArCWVsc2UNCj4gKwkJU0xJU1RfSU5TRVJU X0FGVEVSKHByZXYsIGVudCwgbmV4dCk7DQo+ICsNCj4gKwl0YWJsZS0+bmJfZW50Kys7DQo+ICsJ dGFibGUtPm5iX2V4dF9lbnQrKzsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50DQo+ ICtydGVfazMydjY0X2hhc2hfZGVsZXRlKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKnRh YmxlLCB1aW50MzJfdCBrZXksDQo+ICsJdWludDMyX3QgaGFzaCkNCj4gK3sNCj4gKwl1aW50MzJf dCBidWNrZXQ7DQo+ICsJaW50IGk7DQo+ICsJc3RydWN0IHJ0ZV9rMzJ2NjRfZXh0X2VudCAqZW50 Ow0KPiArDQo+ICsJaWYgKHRhYmxlID09IE5VTEwpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiAr DQo+ICsJYnVja2V0ID0gaGFzaCAmIHRhYmxlLT5idWNrZXRfbXNrOw0KPiArDQo+ICsJZm9yIChp ID0gMDsgaSA8IFJURV9LMzJWNjRfS0VZU19QRVJfQlVDS0VUOyBpKyspIHsNCj4gKwkJaWYgKChr ZXkgPT0gdGFibGUtPnRbYnVja2V0XS5rZXlbaV0pICYmDQo+ICsJCQkJKHRhYmxlLT50W2J1Y2tl dF0ua2V5X21hc2sgJiAoMSA8PCBpKSkpIHsNCj4gKwkJCWVudCA9IFNMSVNUX0ZJUlNUKCZ0YWJs ZS0+dFtidWNrZXRdLmhlYWQpOw0KPiArCQkJaWYgKGVudCkgew0KPiArCQkJCXJ0ZV9hdG9taWMz Ml9pbmMoJnRhYmxlLT50W2J1Y2tldF0uY250KTsNCj4gKwkJCQl0YWJsZS0+dFtidWNrZXRdLmtl eVtpXSA9IGVudC0+a2V5Ow0KPiArCQkJCXRhYmxlLT50W2J1Y2tldF0udmFsW2ldID0gZW50LT52 YWw7DQo+ICsJCQkJU0xJU1RfUkVNT1ZFX0hFQUQoJnRhYmxlLT50W2J1Y2tldF0uaGVhZCwgbmV4 dCk7DQo+ICsJCQkJcnRlX2F0b21pYzMyX2luYygmdGFibGUtPnRbYnVja2V0XS5jbnQpOw0KPiAr CQkJCXRhYmxlLT5uYl9leHRfZW50LS07DQo+ICsJCQl9IGVsc2UNCj4gKwkJCQl0YWJsZS0+dFti dWNrZXRdLmtleV9tYXNrICY9IH4oMSA8PCBpKTsNCj4gKwkJCWlmIChlbnQpDQo+ICsJCQkJcnRl X21lbXBvb2xfcHV0KHRhYmxlLT5leHRfZW50X3Bvb2wsIGVudCk7DQo+ICsJCQl0YWJsZS0+bmJf ZW50LS07DQo+ICsJCQlyZXR1cm4gMDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCVNMSVNUX0ZP UkVBQ0goZW50LCAmdGFibGUtPnRbYnVja2V0XS5oZWFkLCBuZXh0KQ0KPiArCQlpZiAoZW50LT5r ZXkgPT0ga2V5KQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwlpZiAoZW50ID09IE5VTEwpDQo+ICsJ CXJldHVybiAtRU5PRU5UOw0KPiArDQo+ICsJcnRlX2F0b21pYzMyX2luYygmdGFibGUtPnRbYnVj a2V0XS5jbnQpOw0KPiArCVNMSVNUX1JFTU9WRSgmdGFibGUtPnRbYnVja2V0XS5oZWFkLCBlbnQs IHJ0ZV9rMzJ2NjRfZXh0X2VudCwgbmV4dCk7DQo+ICsJcnRlX2F0b21pYzMyX2luYygmdGFibGUt PnRbYnVja2V0XS5jbnQpOw0KPiArCXJ0ZV9tZW1wb29sX3B1dCh0YWJsZS0+ZXh0X2VudF9wb29s LCBlbnQpOw0KPiArDQo+ICsJdGFibGUtPm5iX2V4dF9lbnQtLTsNCj4gKwl0YWJsZS0+bmJfZW50 LS07DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RydWN0IHJ0ZV9rMzJ2NjRf aGFzaF90YWJsZSAqDQo+ICtydGVfazMydjY0X2hhc2hfZmluZF9leGlzdGluZyhjb25zdCBjaGFy ICpuYW1lKQ0KPiArew0KPiArCXN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKmggPSBOVUxM Ow0KPiArCXN0cnVjdCBydGVfdGFpbHFfZW50cnkgKnRlOw0KPiArCXN0cnVjdCBydGVfazMydjY0 X2hhc2hfbGlzdCAqazMydjY0X2hhc2hfbGlzdDsNCj4gKw0KPiArCWszMnY2NF9oYXNoX2xpc3Qg PSBSVEVfVEFJTFFfQ0FTVChydGVfazMydjY0X2hhc2hfdGFpbHEuaGVhZCwNCj4gKwkJCXJ0ZV9r MzJ2NjRfaGFzaF9saXN0KTsNCj4gKw0KPiArCXJ0ZV9tY2ZnX3RhaWxxX3JlYWRfbG9jaygpOw0K PiArCVRBSUxRX0ZPUkVBQ0godGUsIGszMnY2NF9oYXNoX2xpc3QsIG5leHQpIHsNCj4gKwkJaCA9 IChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICopIHRlLT5kYXRhOw0KPiArCQlpZiAoc3Ry bmNtcChuYW1lLCBoLT5uYW1lLCBSVEVfSzMyVjY0X0hBU0hfTkFNRVNJWkUpID09IDApDQo+ICsJ CQlicmVhazsNCj4gKwl9DQo+ICsJcnRlX21jZmdfdGFpbHFfcmVhZF91bmxvY2soKTsNCj4gKwlp ZiAodGUgPT0gTlVMTCkgew0KPiArCQlydGVfZXJybm8gPSBFTk9FTlQ7DQo+ICsJCXJldHVybiBO VUxMOw0KPiArCX0NCj4gKwlyZXR1cm4gaDsNCj4gK30NCj4gKw0KPiArc3RydWN0IHJ0ZV9rMzJ2 NjRfaGFzaF90YWJsZSAqDQo+ICtydGVfazMydjY0X2hhc2hfY3JlYXRlKGNvbnN0IHN0cnVjdCBy dGVfazMydjY0X2hhc2hfcGFyYW1zICpwYXJhbXMpDQo+ICt7DQo+ICsJY2hhciBoYXNoX25hbWVb UlRFX0szMlY2NF9IQVNIX05BTUVTSVpFXTsNCj4gKwlzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3Rh YmxlICpodCA9IE5VTEw7DQo+ICsJc3RydWN0IHJ0ZV90YWlscV9lbnRyeSAqdGU7DQo+ICsJc3Ry dWN0IHJ0ZV9rMzJ2NjRfaGFzaF9saXN0ICprMzJ2NjRfaGFzaF9saXN0Ow0KPiArCXVpbnQzMl90 IG1lbV9zaXplLCBuYl9idWNrZXRzLCBtYXhfZW50Ow0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0 IHJ0ZV9tZW1wb29sICptcDsNCj4gKw0KPiArCWlmICgocGFyYW1zID09IE5VTEwpIHx8IChwYXJh bXMtPm5hbWUgPT0gTlVMTCkgfHwNCj4gKwkJCShwYXJhbXMtPmVudHJpZXMgPT0gMCkpIHsNCj4g KwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsNCj4g KwlrMzJ2NjRfaGFzaF9saXN0ID0gUlRFX1RBSUxRX0NBU1QocnRlX2szMnY2NF9oYXNoX3RhaWxx LmhlYWQsDQo+ICsJCXJ0ZV9rMzJ2NjRfaGFzaF9saXN0KTsNCj4gKw0KPiArCXJldCA9IHNucHJp bnRmKGhhc2hfbmFtZSwgc2l6ZW9mKGhhc2hfbmFtZSksICJLMzJWNjRfJXMiLCBwYXJhbXMtPm5h bWUpOw0KPiArCWlmIChyZXQgPCAwIHx8IHJldCA+PSBSVEVfSzMyVjY0X0hBU0hfTkFNRVNJWkUp IHsNCj4gKwkJcnRlX2Vycm5vID0gRU5BTUVUT09MT05HOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4g Kwl9DQo+ICsNCj4gKwltYXhfZW50ID0gcnRlX2FsaWduMzJwb3cyKHBhcmFtcy0+ZW50cmllcyk7 DQo+ICsJbmJfYnVja2V0cyA9IG1heF9lbnQgLyBSVEVfSzMyVjY0X0tFWVNfUEVSX0JVQ0tFVDsN Cj4gKwltZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlKSArDQo+ ICsJCXNpemVvZihzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX2J1Y2tldCkgKiBuYl9idWNrZXRzOw0K PiArDQo+ICsJbXAgPSBydGVfbWVtcG9vbF9jcmVhdGUoaGFzaF9uYW1lLCBtYXhfZW50LA0KPiAr CQlzaXplb2Yoc3RydWN0IHJ0ZV9rMzJ2NjRfZXh0X2VudCksIDAsIDAsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsDQo+ICsJCXBhcmFtcy0+c29ja2V0X2lkLCAwKTsNCj4gKw0KPiArCWlmIChtcCA9 PSBOVUxMKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCXJ0ZV9tY2ZnX3RhaWxxX3dyaXRl X2xvY2soKTsNCj4gKwlUQUlMUV9GT1JFQUNIKHRlLCBrMzJ2NjRfaGFzaF9saXN0LCBuZXh0KSB7 DQo+ICsJCWh0ID0gKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKikgdGUtPmRhdGE7DQo+ ICsJCWlmIChzdHJuY21wKHBhcmFtcy0+bmFtZSwgaHQtPm5hbWUsDQo+ICsJCQkJUlRFX0szMlY2 NF9IQVNIX05BTUVTSVpFKSA9PSAwKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArCWh0ID0gTlVM TDsNCj4gKwlpZiAodGUgIT0gTlVMTCkgew0KPiArCQlydGVfZXJybm8gPSBFRVhJU1Q7DQo+ICsJ CXJ0ZV9tZW1wb29sX2ZyZWUobXApOw0KPiArCQlnb3RvIGV4aXQ7DQo+ICsJfQ0KPiArDQo+ICsJ dGUgPSBydGVfem1hbGxvYygiSzMyVjY0X0hBU0hfVEFJTFFfRU5UUlkiLCBzaXplb2YoKnRlKSwg MCk7DQo+ICsJaWYgKHRlID09IE5VTEwpIHsNCj4gKwkJUlRFX0xPRyhFUlIsIEhBU0gsICJGYWls ZWQgdG8gYWxsb2NhdGUgdGFpbHEgZW50cnlcbiIpOw0KPiArCQlydGVfbWVtcG9vbF9mcmVlKG1w KTsNCj4gKwkJZ290byBleGl0Ow0KPiArCX0NCj4gKw0KPiArCWh0ID0gcnRlX3ptYWxsb2Nfc29j a2V0KGhhc2hfbmFtZSwgbWVtX3NpemUsDQo+ICsJCVJURV9DQUNIRV9MSU5FX1NJWkUsIHBhcmFt cy0+c29ja2V0X2lkKTsNCj4gKwlpZiAoaHQgPT0gTlVMTCkgew0KPiArCQlSVEVfTE9HKEVSUiwg SEFTSCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmYmsgaGFzaCB0YWJsZVxuIik7DQo+ICsJCXJ0ZV9m cmVlKHRlKTsNCj4gKwkJcnRlX21lbXBvb2xfZnJlZShtcCk7DQo+ICsJCWdvdG8gZXhpdDsNCj4g Kwl9DQo+ICsNCj4gKwltZW1jcHkoaHQtPm5hbWUsIGhhc2hfbmFtZSwgc2l6ZW9mKGh0LT5uYW1l KSk7DQo+ICsJaHQtPm1heF9lbnQgPSBtYXhfZW50Ow0KPiArCWh0LT5idWNrZXRfbXNrID0gbmJf YnVja2V0cyAtIDE7DQo+ICsJaHQtPmV4dF9lbnRfcG9vbCA9IG1wOw0KPiArCWh0LT5sb29rdXAg PSBnZXRfbG9va3VwX2J1bGtfZm4oKTsNCj4gKw0KPiArCXRlLT5kYXRhID0gKHZvaWQgKilodDsN Cj4gKwlUQUlMUV9JTlNFUlRfVEFJTChrMzJ2NjRfaGFzaF9saXN0LCB0ZSwgbmV4dCk7DQo+ICsN Cj4gK2V4aXQ6DQo+ICsJcnRlX21jZmdfdGFpbHFfd3JpdGVfdW5sb2NrKCk7DQo+ICsNCj4gKwly ZXR1cm4gaHQ7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK3J0ZV9rMzJ2NjRfaGFzaF9mcmVlKHN0 cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKmh0KQ0KPiArew0KPiArCXN0cnVjdCBydGVfdGFp bHFfZW50cnkgKnRlOw0KPiArCXN0cnVjdCBydGVfazMydjY0X2hhc2hfbGlzdCAqazMydjY0X2hh c2hfbGlzdDsNCj4gKw0KPiArCWlmIChodCA9PSBOVUxMKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4g KwlrMzJ2NjRfaGFzaF9saXN0ID0gUlRFX1RBSUxRX0NBU1QocnRlX2szMnY2NF9oYXNoX3RhaWxx LmhlYWQsDQo+ICsJCQkJcnRlX2szMnY2NF9oYXNoX2xpc3QpOw0KPiArDQo+ICsJcnRlX21jZmdf dGFpbHFfd3JpdGVfbG9jaygpOw0KPiArDQo+ICsJLyogZmluZCBvdXQgdGFpbHEgZW50cnkgKi8N Cj4gKwlUQUlMUV9GT1JFQUNIKHRlLCBrMzJ2NjRfaGFzaF9saXN0LCBuZXh0KSB7DQo+ICsJCWlm ICh0ZS0+ZGF0YSA9PSAodm9pZCAqKSBodCkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiAr DQo+ICsJaWYgKHRlID09IE5VTEwpIHsNCj4gKwkJcnRlX21jZmdfdGFpbHFfd3JpdGVfdW5sb2Nr KCk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlUQUlMUV9SRU1PVkUoazMydjY0X2hh c2hfbGlzdCwgdGUsIG5leHQpOw0KPiArDQo+ICsJcnRlX21jZmdfdGFpbHFfd3JpdGVfdW5sb2Nr KCk7DQo+ICsNCj4gKwlydGVfbWVtcG9vbF9mcmVlKGh0LT5leHRfZW50X3Bvb2wpOw0KPiArCXJ0 ZV9mcmVlKGh0KTsNCj4gKwlydGVfZnJlZSh0ZSk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX2hhc2gvcnRlX2szMnY2NF9oYXNoLmggYi9saWIvbGlicnRlX2hhc2gvcnRlX2szMnY2 NF9oYXNoLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uYjJjNTJl OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9saWJydGVfaGFzaC9ydGVfazMydjY0X2hh c2guaA0KPiBAQCAtMCwwICsxLDIxMSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24N Cj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9SVEVfSzMyVjY0X0hBU0hfSF8NCj4gKyNkZWZpbmUg X1JURV9LMzJWNjRfSEFTSF9IXw0KPiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK2V4dGVy biAiQyIgew0KPiArI2VuZGlmDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfY29tcGF0Lmg+DQo+ICsj aW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9tZW1wb29sLmg+DQo+ICsN Cj4gKyNkZWZpbmUgUlRFX0szMlY2NF9IQVNIX05BTUVTSVpFCQkzMg0KPiArI2RlZmluZSBSVEVf SzMyVjY0X0tFWVNfUEVSX0JVQ0tFVAkJNA0KPiArI2RlZmluZSBSVEVfSzMyVjY0X1dSSVRFX0lO X1BST0dSRVNTCQkxDQo+ICsNCj4gK3N0cnVjdCBydGVfazMydjY0X2hhc2hfcGFyYW1zIHsNCj4g Kwljb25zdCBjaGFyICpuYW1lOw0KPiArCXVpbnQzMl90IGVudHJpZXM7DQo+ICsJaW50IHNvY2tl dF9pZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBydGVfazMydjY0X2V4dF9lbnQgew0KPiArCVNM SVNUX0VOVFJZKHJ0ZV9rMzJ2NjRfZXh0X2VudCkgbmV4dDsNCj4gKwl1aW50MzJfdAlrZXk7DQo+ ICsJdWludDY0X3QJdmFsOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF9i dWNrZXQgew0KPiArCXVpbnQzMl90CWtleVtSVEVfSzMyVjY0X0tFWVNfUEVSX0JVQ0tFVF07DQo+ ICsJdWludDY0X3QJdmFsW1JURV9LMzJWNjRfS0VZU19QRVJfQlVDS0VUXTsNCj4gKwl1aW50OF90 CQlrZXlfbWFzazsNCj4gKwlydGVfYXRvbWljMzJfdAljbnQ7DQo+ICsJU0xJU1RfSEVBRChydGVf azMydjY0X2xpc3RfaGVhZCwgcnRlX2szMnY2NF9leHRfZW50KSBoZWFkOw0KPiArfSBfX3J0ZV9j YWNoZV9hbGlnbmVkOw0KPiArDQo+ICtzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlOw0KPiAr DQo+ICt0eXBlZGVmIGludCAoKnJ0ZV9rMzJ2NjRfaGFzaF9idWxrX2xvb2t1cF90KQ0KPiArKHN0 cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKnRhYmxlLCB1aW50MzJfdCAqa2V5cywgdWludDMy X3QgKmhhc2hlcywNCj4gKwl1aW50NjRfdCAqdmFsdWVzLCB1bnNpZ25lZCBpbnQgbik7DQo+ICsN Cj4gK3N0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgew0KPiArCWNoYXIgbmFtZVtSVEVfSzMy VjY0X0hBU0hfTkFNRVNJWkVdOwkvKio8IE5hbWUgb2YgdGhlIGhhc2guICovDQo+ICsJdWludDMy X3QJbmJfZW50OwkJLyoqPCBOdW1iZXIgb2YgZW50aXRpZXMgaW4gdGhlIHRhYmxlKi8NCj4gKwl1 aW50MzJfdAluYl9leHRfZW50OwkvKio8IE51bWJlciBvZiBleHRlbmRlZCBlbnRpdGllcyAqLw0K PiArCXVpbnQzMl90CW1heF9lbnQ7CS8qKjwgTWF4aW11bSBudW1iZXIgb2YgZW50aXRpZXMgKi8N Cj4gKwl1aW50MzJfdAlidWNrZXRfbXNrOw0KPiArCXN0cnVjdCBydGVfbWVtcG9vbAkqZXh0X2Vu dF9wb29sOw0KPiArCXJ0ZV9rMzJ2NjRfaGFzaF9idWxrX2xvb2t1cF90CWxvb2t1cDsNCj4gKwlf X2V4dGVuc2lvbl9fIHN0cnVjdCBydGVfazMydjY0X2hhc2hfYnVja2V0CXRbMF07DQo+ICt9Ow0K PiArDQo+ICt0eXBlZGVmIGludCAoKnJ0ZV9rMzJ2NjRfY21wX2ZuX3QpDQo+ICsoc3RydWN0IHJ0 ZV9rMzJ2NjRfaGFzaF9idWNrZXQgKmJ1Y2tldCwgdWludDMyX3Qga2V5LCB1aW50NjRfdCAqdmFs KTsNCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQNCj4gK19fazMydjY0X2NtcF9rZXlzKHN0cnVj dCBydGVfazMydjY0X2hhc2hfYnVja2V0ICpidWNrZXQsIHVpbnQzMl90IGtleSwNCj4gKwl1aW50 NjRfdCAqdmFsKQ0KPiArew0KPiArCWludCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IFJU RV9LMzJWNjRfS0VZU19QRVJfQlVDS0VUOyBpKyspIHsNCj4gKwkJaWYgKChrZXkgPT0gYnVja2V0 LT5rZXlbaV0pICYmDQo+ICsJCQkJKGJ1Y2tldC0+a2V5X21hc2sgJiAoMSA8PCBpKSkpIHsNCj4g KwkJCSp2YWwgPSBidWNrZXQtPnZhbFtpXTsNCj4gKwkJCXJldHVybiAxOw0KPiArCQl9DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ ICtfX2szMnY2NF9oYXNoX2xvb2t1cChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICp0YWJs ZSwgdWludDMyX3Qga2V5LA0KPiArCXVpbnQzMl90IGhhc2gsIHVpbnQ2NF90ICp2YWx1ZSwgcnRl X2szMnY2NF9jbXBfZm5fdCBjbXBfZikNCj4gK3sNCj4gKwl1aW50NjRfdAl2YWwgPSAwOw0KPiAr CXN0cnVjdCBydGVfazMydjY0X2V4dF9lbnQgKmVudDsNCj4gKwlpbnQzMl90CWNudDsNCj4gKwlp bnQgZm91bmQgPSAwOw0KPiArCXVpbnQzMl90IGJ1Y2tldCA9IGhhc2ggJiB0YWJsZS0+YnVja2V0 X21zazsNCj4gKw0KPiArCWRvIHsNCj4gKwkJZG8NCj4gKwkJCWNudCA9IHJ0ZV9hdG9taWMzMl9y ZWFkKCZ0YWJsZS0+dFtidWNrZXRdLmNudCk7DQo+ICsJCXdoaWxlICh1bmxpa2VseShjbnQgJiBS VEVfSzMyVjY0X1dSSVRFX0lOX1BST0dSRVNTKSk7DQo+ICsNCj4gKwkJZm91bmQgPSBjbXBfZigm dGFibGUtPnRbYnVja2V0XSwga2V5LCAmdmFsKTsNCj4gKwkJaWYgKHVubGlrZWx5KChmb3VuZCA9 PSAwKSAmJg0KPiArCQkJCSghU0xJU1RfRU1QVFkoJnRhYmxlLT50W2J1Y2tldF0uaGVhZCkpKSkg ew0KPiArCQkJU0xJU1RfRk9SRUFDSChlbnQsICZ0YWJsZS0+dFtidWNrZXRdLmhlYWQsIG5leHQp IHsNCj4gKwkJCQlpZiAoZW50LT5rZXkgPT0ga2V5KSB7DQo+ICsJCQkJCXZhbCA9IGVudC0+dmFs Ow0KPiArCQkJCQlmb3VuZCA9IDE7DQo+ICsJCQkJCWJyZWFrOw0KPiArCQkJCX0NCj4gKwkJCX0N Cj4gKwkJfQ0KPiArDQo+ICsJfSB3aGlsZSAodW5saWtlbHkoY250ICE9IHJ0ZV9hdG9taWMzMl9y ZWFkKCZ0YWJsZS0+dFtidWNrZXRdLmNudCkpKTsNCj4gKw0KPiArCWlmIChmb3VuZCA9PSAxKSB7 DQo+ICsJCSp2YWx1ZSA9IHZhbDsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfSBlbHNlDQo+ICsJCXJl dHVybiAtRU5PRU5UOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludA0KPiArcnRlX2sz MnY2NF9oYXNoX2xvb2t1cChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICp0YWJsZSwgdWlu dDMyX3Qga2V5LA0KPiArCXVpbnQzMl90IGhhc2gsIHVpbnQ2NF90ICp2YWx1ZSkNCj4gK3sNCj4g KwlyZXR1cm4gX19rMzJ2NjRfaGFzaF9sb29rdXAodGFibGUsIGtleSwgaGFzaCwgdmFsdWUsIF9f azMydjY0X2NtcF9rZXlzKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQNCj4gK3J0 ZV9rMzJ2NjRfaGFzaF9idWxrX2xvb2t1cChzdHJ1Y3QgcnRlX2szMnY2NF9oYXNoX3RhYmxlICp0 YWJsZSwNCj4gKwl1aW50MzJfdCAqa2V5cywgdWludDMyX3QgKmhhc2hlcywgdWludDY0X3QgKnZh bHVlcywgdW5zaWduZWQgaW50IG4pDQo+ICt7DQo+ICsJcmV0dXJuIHRhYmxlLT5sb29rdXAodGFi bGUsIGtleXMsIGhhc2hlcywgdmFsdWVzLCBuKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBB ZGQgYSBrZXkgdG8gYW4gZXhpc3RpbmcgaGFzaCB0YWJsZSB3aXRoIGhhc2ggdmFsdWUuDQo+ICsg KiBUaGlzIG9wZXJhdGlvbiBpcyBub3QgbXVsdGktdGhyZWFkIHNhZmUNCj4gKyAqIGFuZCBzaG91 bGQgb25seSBiZSBjYWxsZWQgZnJvbSBvbmUgdGhyZWFkLg0KPiArICoNCg0KDQpEb2VzIHRoaXMg aGFzaCBhbGxvdyBtdWx0aXBsZSByZWFkZXJzLCBhbmQgYXQgbW9zdCBvbmUgd3JpdGVyLCBmb3Ig YSANCnBhcnRpY3VsYXIgaW5zdGFuY2U/IElmIHRoYXQncyB0aGUgY2FzZSwgaXQgc2hvdWxkIHBy b2JhYmx5IGJlIG1lbnRpb25lZCANCnNvbWV3aGVyZS4NCg0KDQpKdXN0IHNwZWNpZnlpbmcgdGhh dCBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgbm90IE1UIHNhZmUgZG9lc24ndCBzYXkgDQphbnl0 aGluZyBpZiBpdCdzIHNhZmUgdG8gY2FsbCBpdCBpbiBwYXJhbGxlbCB3aXRoIG90aGVyLCBub24t TVQgc2FmZSANCmZ1bmN0aW9ucy4gSSBhc3N1bWUgeW91IGNhbid0IGFkZCBhbmQgZGVsZXRlIGlu IHBhcmFsbGVsPw0KDQoNCj4gKyAqIEBwYXJhbSBodA0KPiArICogICBIYXNoIHRhYmxlIHRvIGFk ZCB0aGUga2V5IHRvLg0KPiArICogQHBhcmFtIGtleQ0KPiArICogICBLZXkgdG8gYWRkIHRvIHRo ZSBoYXNoIHRhYmxlLg0KPiArICogQHBhcmFtIHZhbHVlDQo+ICsgKiAgIFZhbHVlIHRvIGFzc29j aWF0ZSB3aXRoIGtleS4NCj4gKyAqIEBwYXJhbSBoYXNoDQo+ICsgKiAgIEhhc2ggdmFsdWUgYXNz b2NpYXRlZCB3aXRoIGtleS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgMCBpZiBvaywgb3IgbmVn YXRpdmUgdmFsdWUgb24gZXJyb3IuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAr aW50DQo+ICtydGVfazMydjY0X2hhc2hfYWRkKHN0cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUg KnRhYmxlLCB1aW50MzJfdCBrZXksDQo+ICsJdWludDMyX3QgaGFzaCwgdWludDY0X3QgdmFsdWUp Ow0KPiArDQo+ICsvKioNCj4gKyAqIFJlbW92ZSBhIGtleSB3aXRoIGEgZ2l2ZW4gaGFzaCB2YWx1 ZSBmcm9tIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUuDQo+ICsgKiBUaGlzIG9wZXJhdGlvbiBpcyBu b3QgbXVsdGktdGhyZWFkDQo+ICsgKiBzYWZlIGFuZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJv bSBvbmUgdGhyZWFkLg0KPiArICoNCj4gKyAqIEBwYXJhbSBodA0KPiArICogICBIYXNoIHRhYmxl IHRvIHJlbW92ZSB0aGUga2V5IGZyb20uDQo+ICsgKiBAcGFyYW0ga2V5DQo+ICsgKiAgIEtleSB0 byByZW1vdmUgZnJvbSB0aGUgaGFzaCB0YWJsZS4NCj4gKyAqIEBwYXJhbSBoYXNoDQo+ICsgKiAg IGhhc2ggdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAg MCBpZiBvaywgb3IgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuDQo+ICsgKi8NCj4gK19fcnRlX2V4 cGVyaW1lbnRhbA0KPiAraW50DQo+ICtydGVfazMydjY0X2hhc2hfZGVsZXRlKHN0cnVjdCBydGVf azMydjY0X2hhc2hfdGFibGUgKnRhYmxlLCB1aW50MzJfdCBrZXksDQo+ICsJdWludDMyX3QgaGFz aCk7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgKiBQZXJmb3JtcyBhIGxvb2t1cCBmb3IgYW4gZXhp c3RpbmcgaGFzaCB0YWJsZSwgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvDQo+ICsgKiB0aGUgdGFi bGUgaWYgZm91bmQuDQo+ICsgKg0KPiArICogQHBhcmFtIG5hbWUNCj4gKyAqICAgTmFtZSBvZiB0 aGUgaGFzaCB0YWJsZSB0byBmaW5kDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICBwb2lu dGVyIHRvIGhhc2ggdGFibGUgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3Igd2l0aCBydGVfZXJy bm8NCj4gKyAqICAgc2V0IGFwcHJvcHJpYXRlbHkuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1l bnRhbA0KPiArc3RydWN0IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqDQo+ICtydGVfazMydjY0X2hh c2hfZmluZF9leGlzdGluZyhjb25zdCBjaGFyICpuYW1lKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBD cmVhdGUgYSBuZXcgaGFzaCB0YWJsZSBmb3IgdXNlIHdpdGggZm91ciBieXRlIGtleXMuDQo+ICsg Kg0KPiArICogQHBhcmFtIHBhcmFtcw0KPiArICogICBQYXJhbWV0ZXJzIHVzZWQgaW4gY3JlYXRp b24gb2YgaGFzaCB0YWJsZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFBvaW50ZXIg dG8gaGFzaCB0YWJsZSBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGluIGZ1dHVyZSBoYXNoIHRhYmxl DQo+ICsgKiAgIG9wZXJhdGlvbnMsIG9yIE5VTEwgb24gZXJyb3Igd2l0aCBydGVfZXJybm8gc2V0 IGFwcHJvcHJpYXRlbHkuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RydWN0 IHJ0ZV9rMzJ2NjRfaGFzaF90YWJsZSAqDQo+ICtydGVfazMydjY0X2hhc2hfY3JlYXRlKGNvbnN0 IHN0cnVjdCBydGVfazMydjY0X2hhc2hfcGFyYW1zICpwYXJhbXMpOw0KPiArDQo+ICsvKioNCj4g KyAqIEZyZWUgYWxsIG1lbW9yeSB1c2VkIGJ5IGEgaGFzaCB0YWJsZS4NCj4gKyAqDQo+ICsgKiBA cGFyYW0gdGFibGUNCj4gKyAqICAgSGFzaCB0YWJsZSB0byBkZWFsbG9jYXRlLg0KPiArICovDQo+ ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3ZvaWQNCj4gK3J0ZV9rMzJ2NjRfaGFzaF9mcmVlKHN0 cnVjdCBydGVfazMydjY0X2hhc2hfdGFibGUgKnRhYmxlKTsNCj4gKw0KPiArI2lmZGVmIF9fY3Bs dXNwbHVzDQo+ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmIC8qIF9SVEVfSzMyVjY0X0hB U0hfSF8gKi8NCg0KDQo=