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 4B618A0613 for ; Sat, 28 Sep 2019 17:20:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7ED90DE3; Sat, 28 Sep 2019 17:20:05 +0200 (CEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80054.outbound.protection.outlook.com [40.107.8.54]) by dpdk.org (Postfix) with ESMTP id 5333D9E4 for ; Sat, 28 Sep 2019 17:20:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fXKjH20LlLEuqGUSNCLeM4QZs+JD3N4gyqZBcaFHwK6uHjUNmXw4K0HyFEy4QMk/uWeeWgAp913W+eZcxln1msngU6c6fMyWSBlIeynCkBYSRr5pu+oU9f4jQvfkKPELmiC7qrdiVMnd4noOgJiWLKS3xJVnptUuf3wNySnKRgHon1y2BYXZXLaH8/P/WGUWYzMTxJVBJRRxKyA7cHYPER1iOzlgdoxhOCttXrimUbdX1k9aXq8vgNLu8MPehJdq6skfEnws13ar0qpvM+evjmW/vnWwvlGf5wXkud2Za4Q3xkHv3Bwnf7HZIXzL7xum9hfH2Q/sXuZLFDYTvxyKBg== 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=FtxC/X3BqEP7EbtyL0xaDtRyMrvRRDMWfKS1yQQPNSU=; b=S70N9CekGlCPXAY1FmvYAlCLIxc527Wre0ruG5E4uXnIyeUBfS6gIDcn6JYzaFs+XBO43perbvS6PhRyExt5qyDfgDpQA4eJfbp18M4yfbBsYQ3xCl/yoe3FJHOUjoCFFD9mOtHKNSnpBScY0UFo1sC0s93K58tLq05iVezn8DjGeVs2ArlWc/NKc98hJI0Pfl6820ODhP1jGvGqrJQPZ2t58LwyVT/ezzB+pLPRkQ3FQODBisK9OdRyDtiY6NwEFDA54gkz41597FnD9RWGhhIbddkJlBnOjFE/zM0fCiRzFbFv734LpQH3GCa5ryVUqhSPk6mxvQZ0M/NgquQbXw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FtxC/X3BqEP7EbtyL0xaDtRyMrvRRDMWfKS1yQQPNSU=; b=J3zDNtbgw3e/Ybm7y2K+TfBlXaYnyE4YghlvyVwXXy+5ZFA0Rg9b0dm6OY3TM+qlFPJ1kC4SsVcU0MocYDLryX1ne40bXUUpNNDnujL1TBKB8UWcl68bupVFRhHgpLiWsjGWx7+9NDc1F4Wt89I7+rwcO6O0PAmosPWm5lDPs7s= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.190.15) by AM4PR05MB3460.eurprd05.prod.outlook.com (10.171.187.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.20; Sat, 28 Sep 2019 15:19:59 +0000 Received: from AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::7964:7996:4c67:ade0]) by AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::7964:7996:4c67:ade0%3]) with mapi id 15.20.2305.017; Sat, 28 Sep 2019 15:19:59 +0000 From: Ori Kam To: Andrew Rybchenko , Thomas Monjalon , Ferruh Yigit CC: "dev@dpdk.org" , "jingjing.wu@intel.com" , "stephen@networkplumber.org" Thread-Topic: [dpdk-dev] [PATCH 01/13] ethdev: support setup function for hairpin queue Thread-Index: AQHVdI9BkWYJ+mlzFEWqs6ph9WFTv6dBLuFA Date: Sat, 28 Sep 2019 15:19:59 +0000 Message-ID: References: <1569479349-36962-1-git-send-email-orika@mellanox.com> <1569479349-36962-2-git-send-email-orika@mellanox.com> <4c7da322-ea96-9649-b6cc-aad3a21df57a@solarflare.com> In-Reply-To: <4c7da322-ea96-9649-b6cc-aad3a21df57a@solarflare.com> 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=orika@mellanox.com; x-originating-ip: [185.175.35.255] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c3011e18-4dc5-4feb-b58c-08d7442753d4 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:AM4PR05MB3460; x-ms-traffictypediagnostic: AM4PR05MB3460: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5797; x-forefront-prvs: 0174BD4BDA x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(39860400002)(376002)(366004)(346002)(136003)(199004)(189003)(51444003)(13464003)(5660300002)(305945005)(74316002)(25786009)(33656002)(66066001)(446003)(71200400001)(71190400001)(11346002)(55016002)(6116002)(6436002)(3846002)(76116006)(76176011)(6506007)(26005)(53546011)(2906002)(7736002)(9686003)(316002)(52536014)(110136005)(4326008)(86362001)(102836004)(30864003)(66446008)(256004)(64756008)(99286004)(478600001)(54906003)(7696005)(14444005)(81156014)(81166006)(66476007)(8936002)(66946007)(186003)(66556008)(229853002)(476003)(8676002)(6246003)(486006)(14454004)(559001)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3460; H:AM4PR05MB3425.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: mtk1sN9bU1Y97hG/okqAnZNE7aLGLjCRY3B3EczQApt5YN7HSfMT4hZLIIHk8B45rVFO/fPCic+mSPUgQgPhK7hKYnq+nz3ea4cuEO+nCNUxfPSlvjw/r4SZWpfebXKGj3eTVA1UfXZl1ze/6G6uWj7cSDXAwXRBD1YTmoPinFhvTQxOgqRiN3vTChM0+ut3XQYDB9HOMtkfV+McMS+SVqirw61ioV7/IkBRmxM5LN6wvl9Wiyn36ZsXOIMWWLmHldLuuVwA+CSlxmA0nhfQBuErjWUTR0kXyv71FA/lv5VNMPjBdD34l6XDjpAl19SghWw8huPB40Ktm9pUVlK1kuB0MyygOzM36OEmmU6c27/9pJIVCt2SLUHjnqzqvjJf5b/idBnGOX70BnkB82tp+iz6HgotwVAyPOC2RFO6j/M= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3011e18-4dc5-4feb-b58c-08d7442753d4 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Sep 2019 15:19:59.5867 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: fI2hfc1qfjkapyB4+JWN3JuknwJWtSM4XXdMcBJnhNsM3MQ6DHr+aBE9uoPEinNQ/fTYC5ioa4k/+pOvwCiJ+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3460 Subject: Re: [dpdk-dev] [PATCH 01/13] ethdev: support setup function for hairpin queue 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" SGkgQW5kcmV3Lg0KUFNCDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTog QW5kcmV3IFJ5YmNoZW5rbyA8YXJ5YmNoZW5rb0Bzb2xhcmZsYXJlLmNvbT4NCj4gU2VudDogVGh1 cnNkYXksIFNlcHRlbWJlciAyNiwgMjAxOSA4OjI0IFBNDQo+IFRvOiBPcmkgS2FtIDxvcmlrYUBt ZWxsYW5veC5jb20+OyBUaG9tYXMgTW9uamFsb24NCj4gPHRob21hc0Btb25qYWxvbi5uZXQ+OyBG ZXJydWggWWlnaXQgPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+DQo+IENjOiBkZXZAZHBkay5vcmc7 IGppbmdqaW5nLnd1QGludGVsLmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1bWJlci5vcmcNCj4gU3Vi amVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIIDAxLzEzXSBldGhkZXY6IHN1cHBvcnQgc2V0dXAg ZnVuY3Rpb24gZm9yDQo+IGhhaXJwaW4gcXVldWUNCj4gDQo+IE9uIDkvMjYvMTkgNjo1OCBQTSwg T3JpIEthbSB3cm90ZToNCj4gPiBIaSBBbmRyZXcsDQo+ID4gVGhhbmtzIGZvciB5b3VyIGNvbW1l bnRzIFBTQi4NCj4gPg0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9t OiBBbmRyZXcgUnliY2hlbmtvIDxhcnliY2hlbmtvQHNvbGFyZmxhcmUuY29tPg0KPiA+PiBPbiA5 LzI2LzE5IDk6MjggQU0sIE9yaSBLYW0gd3JvdGU6DQo+ID4+PiBUaGlzIGNvbW1pdCBpbnRyb2R1 Y2UgdGhlIFJYL1RYIGhhaXJwaW4gc2V0dXAgZnVuY3Rpb24uDQo+ID4+PiBSWC9UWCBzaG91bGQg YmUgUngvVHggaGVyZSBhbmQgZXZlcnl3aGVyZSBiZWxvdy4NCj4gPj4+DQo+ID4+PiBIYWlycGlu IGlzIFJYL1RYIHF1ZXVlIHRoYXQgaXMgdXNlZCBieSB0aGUgbmljIGluIG9yZGVyIHRvIG9mZmxv YWQNCj4gPj4+IHdpcmUgdG8gd2lyZSB0cmFmZmljLg0KPiA+Pj4NCj4gPj4+IEVhY2ggaGFpcnBp biBxdWV1ZSBpcyBiaW5kZWQgdG8gb25lIG9yIG1vcmUgcXVldWVzIGZyb20gb3RoZXIgdHlwZS4N Cj4gPj4+IEZvciBleGFtcGxlIFRYIGhhaXJwaW4gcXVldWUgc2hvdWxkIGJlIGJpbmRlZCB0byBh dCBsZWFzdCAxIFJYIGhhaXJwaW4NCj4gPj4+IHF1ZXVlIGFuZCB2aWNlIHZlcnNhLg0KPiA+PiBI b3cgc2hvdWxkIGFwcGxpY2F0aW9uIGZpbmQgb3V0IHRoYXQgaGFpcnBpbiBxdWV1ZXMgYXJlIHN1 cHBvcnRlZD8NCj4gPiBJdCBzaG91bGQgYmUgc3RhdGVkIGluIHRoZSByZWxlYXNlIG5vdGUgb2Yg dGhlIERQREssIHdoZW4gbWFudWZhY3R1cmUgYWRkcw0KPiBzdXBwb3J0IGZvciB0aGlzLg0KPiA+ IEluIGFkZGl0aW9uIGlmIHRoZSBhcHBsaWNhdGlvbiB0cnkgdG8gc2V0IGhhaXJwaW4gcXVldWUg YW5kIGl0IGZhaWxzIGl0IGNhbiBtZWFuDQo+IGRlcGVuZGluZyBvbiB0aGUNCj4gPiBlcnJvciB0 aGF0IHRoZSBoYWlycGluIGlzIG5vdCBzdXBwb3J0ZWQuDQo+IA0KPiBJJ20gdGFsa2luZyBhYm91 dCBkZXZfaW5mby1saWtlIGluZm9ybWF0aW9uLiBEb2N1bWVudGF0aW9uIGlzIG5pY2UsIGJ1dA0K PiBpdCBpcyBub3QNCj4gdmVyeSB1c2VmdWwgdG8gaW1wbGVtZW50IGFwcGxpY2F0aW9uIHdoaWNo IHdvcmtzIHdpdGggTklDcyBmcm9tDQo+IGRpZmZlcmVudCB2ZW5kb3JzLg0KPiANCg0KV2hhdCBp ZiB3ZSBhZGQgZ2V0IGhhaXJwaW4gY2FwYWJpbGl0aWVzIGZ1bmN0aW9uLg0KV2UgY291bGQgaGF2 ZSwgIHRoZSBtYXggbnVtYmVyIG9mIHF1ZXVlcywgaWYgdGhlIG5pYyBzdXBwb3J0IDE6biBjb25u ZWN0aW9uLA0Kd2hpY2ggb2ZmbG9hZHMgYXJlIHN1cHBvcnRlZCBhbmQgc28gb24uIFNvIGJhc2lj YWxseSBjcmVhdGUgYSBuZXcgc2V0IG9mIGNhcGFiaWxpdGllcw0KZm9yIGhhaXJwaW4gdGhpcyBJ IHRoaW5rIHdpbGwgYWxzbyByZW1vdmUgb3RoZXIgY29uY2VybiB0aGF0IHlvdSBoYXZlLg0KV2hh dCBkbyB5b3UgdGhpbms/DQogIA0KPiA+PiBIb3cgbWFueT8NCj4gPiBUaGVyZSBpcyBubyBsaW1p dCB0byB0aGUgbnVtYmVyIG9mIGhhaXJwaW4gcXVldWVzIGZyb20gYXBwbGljYXRpb24gYWxsIHF1 ZXVlcw0KPiBjYW4gYmUgaGFpcnBpbiBxdWV1ZXMuDQo+IA0KPiBJJ20gcHJldHR5IHN1cmUgdGhh dCBpdCBjb3VsZCBiZSB2ZW5kb3Igc3BlY2lmaWMuDQo+DQoNClBsZWFzZSBzZWUgbXkgYW5zd2Vy IGFib3ZlLg0KIA0KPiA+PiBIb3cgc2hvdWxkIGFwcGxpY2F0aW9uIGZpbmQgb3V0IHdoaWNoIHBv cnRzL3F1ZXVlcyBjb3VsZCBiZSB1c2VkIGZvcg0KPiA+PiBwaW5pbmc/DQo+ID4gQWxsIHBvcnRz IGFuZCBxdWV1ZXMgY2FuIGJlIHN1cHBvcnRlZCwgaWYgdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3Qg aW52YWxpZA0KPiBjb21iaW5hdGlvbiwgZm9yIGV4YW1wbGUNCj4gPiBpbiBjdXJyZW50IE1lbGxh bm94IGltcGxlbWVudGF0aW9uIGJpbmRpbmcgYmV0d2VlbiB0d28gcG9ydHMgdGhlbiB0aGUNCj4g c2V0dXAgZnVuY3Rpb24gd2lsbCAgZmFpbC4NCj4gPg0KPiA+IElmIHlvdSB3b3VsZCBsaWtlIEkg Y2FuIGFkZCBjYXBhYmlsaXR5IGZvciB0aGlzLCBidXQgdGhlcmUgYXJlIHRvbyBtYW55IG9wdGlv bnMuDQo+IEZvciBleGFtcGxlIG51bWJlcg0KPiA+IG9mIHF1ZXVlcywgYmluZGluZyBsaW1pdGF0 aW9ucyBhbGwgb2YgdGhvc2Ugd2lsbCBiZSB2ZXJ5IGhhcmQgdG8gZGVjbGFyZS4NCj4gPg0KPiA+ DQo+ID4+IElzIGhhaXItcGlubmluZyBkb21haW4gb24gZGV2aWNlIGxldmVsIHN1ZmZpY2llbnQg dG8gZXhwb3NlIGxpbWl0YXRpb25zPw0KPiA+Pg0KPiA+IEknbSBzb3JyeSBidXQgSSBkb27igJl0 IHVuZGVyc3RhbmQgeW91ciBxdWVzdGlvbi4NCj4gDQo+IEkgd2FzIGp1c3QgdHJ5aW5nIHRvIGlt YWdpbmUgaG93IHdlIGNvdWxkwqAgc2F5IHRoYXQgd2UgY2FuIGhhaXJwaW4NCj4gb25lIHBvcnQg UnggcXVldWVzIHRvIGFub3RoZXIgcG9ydCBUeCBxdWV1ZXMuDQo+DQoNCkxpa2UgSSBzdWdnZXN0 ZWQgYWJvdmUgaWYgSSB3aWxsIGFkZCBhIGNhcGFiaWxpdHkgZnVuY3Rpb24gd2UgY291bGQgaGF2 ZQ0KYSBmaWVsZCB0aGF0IHNheXMgcG9ydF9iaW5pZG5nIHN1cHBvcnRlZCwgb3Igc29tZXRoaW5n IGVsc2UsIGFsb25nIHRoaXMgbGluZS4NCiANCj4gPj4+IFNpZ25lZC1vZmYtYnk6IE9yaSBLYW0g PG9yaWthQG1lbGxhbm94LmNvbT4NCj4gPj4+IC0tLQ0KPiA+Pj4gICAgbGliL2xpYnJ0ZV9ldGhk ZXYvcnRlX2V0aGRldi5jICAgICAgICAgICB8IDIxMw0KPiA+Pj4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiA+Pj4gICAgbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oICAg ICAgICAgICB8IDE0NSArKysrKysrKysrKysrKysrKysrKysNCj4gPj4+ICAgIGxpYi9saWJydGVf ZXRoZGV2L3J0ZV9ldGhkZXZfY29yZS5oICAgICAgfCAgMTggKysrDQo+ID4+PiAgICBsaWIvbGli cnRlX2V0aGRldi9ydGVfZXRoZGV2X3ZlcnNpb24ubWFwIHwgICA0ICsNCj4gPj4+ICAgIDQgZmls ZXMgY2hhbmdlZCwgMzgwIGluc2VydGlvbnMoKykNCj4gPj4+DQo+ID4+PiBkaWZmIC0tZ2l0IGEv bGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4+PiBiL2xpYi9saWJydGVfZXRoZGV2 L3J0ZV9ldGhkZXYuYyBpbmRleCAzMGIwYzc4Li40MDIxZjM4IDEwMDY0NA0KPiA+Pj4gLS0tIGEv bGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4+PiArKysgYi9saWIvbGlicnRlX2V0 aGRldi9ydGVfZXRoZGV2LmMNCj4gPj4+IEBAIC0xNzAxLDYgKzE3MDEsMTE1IEBAIHN0cnVjdCBy dGVfZXRoX2RldiAqDQo+ID4+PiAgICB9DQo+ID4+Pg0KPiA+Pj4gICAgaW50DQo+ID4+PiArcnRl X2V0aF9yeF9oYWlycGluX3F1ZXVlX3NldHVwKHVpbnQxNl90IHBvcnRfaWQsIHVpbnQxNl90DQo+ ID4+PiByeF9xdWV1ZV9pZCwNCj4gPj4+ICsJCQkgICAgICAgdWludDE2X3QgbmJfcnhfZGVzYywg dW5zaWduZWQgaW50IHNvY2tldF9pZCwNCj4gPj4+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0 ZV9ldGhfcnhjb25mICpyeF9jb25mLA0KPiA+Pj4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcnRl X2V0aF9oYWlycGluX2NvbmYgKmhhaXJwaW5fY29uZikNCj4gPj4+IEJlbG93IGNvZGUgZHVwbGlj YXRlcyBydGVfZXRoX3J4X3F1ZXVlX3NldHVwKCkgYSBsb3QgYW5kIGl0IGlzIHZlcnkgYmFkDQo+ ID4+PiBmcm9tIG1haW50ZW5hbmNlIHBvaW50IG9mIHZpZXcuIFNpbWlsYXIgcHJvYmxlbSB3aXRo IFR4IGhhaXJwaW4gcXVldWUNCj4gPj4+IHNldHVwLg0KPiA+Pj4NCj4gPiBJJ20gYXdhcmUgb2Yg dGhhdC4gVGhlIHJlYXNvbnMgSSBjaG9vc2UgaXQgYXJlOiAoc2FtZSBnb2VzIHRvIFR4KQ0KPiA+ IDEuIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiBhcHByb2FjaCwgbWVhbmluZyB0byB1c2UgdGhlIGN1 cnJlbnQgIHNldHVwDQo+IGZ1bmN0aW9uDQo+ID4gICAgICB0aGUgaXNzdWVzIHdpdGggdGhpcyBh cmU6DQo+ID4gICAgICAgKiBBUEkgYnJlYWsuDQo+ID4gICAgICAgKiBJdCB3aWxsIGhhdmUgZXh0 cmEgcGFyYW1ldGVycywgZm9yIGV4YW1wbGUgbWVtcG9vbCB3aWxsIG5vdCBiZSB1c2VkDQo+ID4g ICAgICAgICAgZm9yIGhhaXJwaW4gYW5kIGhhaXJwaW4gY29uZmlndXJhdGlvbiB3aWxsIG5vdCBi ZSB1c2VkIGZvciBub3JtYWwgcXVldWUuDQo+ID4gICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8g dXNlIGEgc3RydWN0IGJ1dCBhZ2FpbiBBUEkgYnJlYWsgYW5kIHNvbWUgZmllbGRzIGFyZSBub3QN Cj4gdXNlZC4NCj4gPiAgICAgICAqIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIHdpdGggdGhlIGhhaXJw aW4sIG1vc3QgbGlrZWx5IHRoZXJlIHdpbGwgYmUNCj4gbW9kaWZpY2F0aW9uIHNvDQo+ID4gICAg ICAgICAgIGl0IGlzIGJldHRlciB0byBoYXZlIGEgZGlmZmVyZW50IGZ1bmN0aW9uLg0KPiA+ICAg ICAgICogRnJvbSBhcHBsaWNhdGlvbiBoZSB1bmRlcnRhbmQgdGhhdCB0aGlzIGlzIGEgZGlmZmVy ZW50IGtpbmQgb2YgcXVldWUsDQo+IHdoaWNoIHNob3VsZG4ndCBiZQ0KPiA+ICAgICAgICAgICB1 c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4NCj4gDQo+IEl0IGRvZXMgbm90IGV4Y3VzZSB0byBkdXBs aWNhdGUgc28gbXVjaCBjb2RlIGJlbG93LiBJZiB3ZSBoYXZlIHNlcGFyYXRlDQo+IGRldl9pbmZv LWxpa2UgbGltaXRhdGlvbnMgZm9yIGhhaXJwaW4sIGl0IHdvdWxkIG1ha2Ugc2Vuc2UsIGJ1dCBJ IGhvcGUgdGhhdA0KPiBpdCB3b3VsZCBiZSBzdGlsbCBwb3NzaWJsZSB0byBhdm9pZCBjb2RlIGR1 cGxpY2F0aW9uLg0KPiANCg0KV2UgY2FuIHN0YXJ0IHdpdGggdGhlIG1vc3QgYmFzaWMgaW1wbGVt ZW50YXRpb24sIHdoaWNoIHdpbGwgbWVhbiB0aGF0IHRoZSBmdW5jdGlvbg0Kd2lsbCBhbG1vc3Qg YmUgZW1wdHksIHdoZW4gb3RoZXIgdmVuZG9ycyBvciBNZWxsYW5veCB3aWxsIHJlcXVpcmUgc29t ZSBhZGRpdGlvbmFsDQp0ZXN0IG9yIGNvZGUgdGhleSB3aWxsIGJlIGFibGUgdG8gZGVjaWRlIGlm IHRvIGFkZCBuZXcgY29kZSB0byBoZSBmdW5jdGlvbiwgb3INCmV4dHJhY3QgdGhlIHNoYXJlZCBj b2RlIGZyb20gdGhlIHN0YW5kYXJkIGZ1bmN0aW9uIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGFu ZA0KdXNlIHRoaXMgZnVuY3Rpb24gaW4gYm90aCBzZXR1cCBmdW5jdGlvbnMuDQpXaGF0IGRvIHlv dSB0aGluaz8gDQoNCj4gPj4+ICt7DQo+ID4+PiArCWludCByZXQ7DQo+ID4+PiArCXN0cnVjdCBy dGVfZXRoX2RldiAqZGV2Ow0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXZfaW5mbyBkZXZfaW5m bzsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9ldGhfcnhjb25mIGxvY2FsX2NvbmY7DQo+ID4+PiArCXZv aWQgKipyeHE7DQo+ID4+PiArDQo+ID4+PiArCVJURV9FVEhfVkFMSURfUE9SVElEX09SX0VSUl9S RVQocG9ydF9pZCwgLUVJTlZBTCk7DQo+ID4+PiArDQo+ID4+PiArCWRldiA9ICZydGVfZXRoX2Rl dmljZXNbcG9ydF9pZF07DQo+ID4+PiArCWlmIChyeF9xdWV1ZV9pZCA+PSBkZXYtPmRhdGEtPm5i X3J4X3F1ZXVlcykgew0KPiA+Pj4gKwkJUlRFX0VUSERFVl9MT0coRVJSLCAiSW52YWxpZCBSWCBx dWV1ZV9pZD0ldVxuIiwNCj4gPj4gcnhfcXVldWVfaWQpOw0KPiA+Pj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQo KmRldi0+ZGV2X29wcy0+ZGV2X2luZm9zX2dldCwgLQ0KPiA+PiBFTk9UU1VQKTsNCj4gPj4+ICsJ UlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29wcy0NCj4gPj4+IHJ4X2hhaXJwaW5f cXVldWVfc2V0dXAsDQo+ID4+PiArCQkJCS1FTk9UU1VQKTsNCj4gPj4+ICsNCj4gPj4+ICsJcnRl X2V0aF9kZXZfaW5mb19nZXQocG9ydF9pZCwgJmRldl9pbmZvKTsNCj4gPj4+ICsNCj4gPj4+ICsJ LyogVXNlIGRlZmF1bHQgc3BlY2lmaWVkIGJ5IGRyaXZlciwgaWYgbmJfcnhfZGVzYyBpcyB6ZXJv ICovDQo+ID4+PiArCWlmIChuYl9yeF9kZXNjID09IDApIHsNCj4gPj4+ICsJCW5iX3J4X2Rlc2Mg PSBkZXZfaW5mby5kZWZhdWx0X3J4cG9ydGNvbmYucmluZ19zaXplOw0KPiA+Pj4gKwkJLyogSWYg ZHJpdmVyIGRlZmF1bHQgaXMgYWxzbyB6ZXJvLCBmYWxsIGJhY2sgb24gRUFMIGRlZmF1bHQgKi8N Cj4gPj4+ICsJCWlmIChuYl9yeF9kZXNjID09IDApDQo+ID4+PiArCQkJbmJfcnhfZGVzYyA9DQo+ ID4+IFJURV9FVEhfREVWX0ZBTExCQUNLX1JYX1JJTkdTSVpFOw0KPiA+Pj4gKwl9DQo+ID4+PiAr DQo+ID4+PiArCWlmIChuYl9yeF9kZXNjID4gZGV2X2luZm8ucnhfZGVzY19saW0ubmJfbWF4IHx8 DQo+ID4+PiArCQkJbmJfcnhfZGVzYyA8IGRldl9pbmZvLnJ4X2Rlc2NfbGltLm5iX21pbiB8fA0K PiA+Pj4gKwkJCW5iX3J4X2Rlc2MgJSBkZXZfaW5mby5yeF9kZXNjX2xpbS5uYl9hbGlnbiAhPSAw KSB7DQo+ID4+PiArDQo+ID4+PiArCQlSVEVfRVRIREVWX0xPRyhFUlIsDQo+ID4+PiArCQkJICAg ICAgICJJbnZhbGlkIHZhbHVlIGZvciBuYl9yeF9kZXNjKD0laHUpLCBzaG91bGQgYmU6ICINCj4g Pj4+ICsJCQkgICAgICAgIjw9ICVodSwgPj0gJWh1LCBhbmQgYSBwcm9kdWN0IG9mICVodVxuIiwN Cj4gPj4+ICsJCQluYl9yeF9kZXNjLCBkZXZfaW5mby5yeF9kZXNjX2xpbS5uYl9tYXgsDQo+ID4+ PiArCQkJZGV2X2luZm8ucnhfZGVzY19saW0ubmJfbWluLA0KPiA+Pj4gKwkJCWRldl9pbmZvLnJ4 X2Rlc2NfbGltLm5iX2FsaWduKTsNCj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+Pj4gKwl9 DQo+ID4+PiArDQo+ID4+PiArCWlmIChkZXYtPmRhdGEtPmRldl9zdGFydGVkICYmDQo+ID4+PiAr CQkhKGRldl9pbmZvLmRldl9jYXBhICYNCj4gPj4+ICsNCj4gPj4gCVJURV9FVEhfREVWX0NBUEFf UlVOVElNRV9SWF9RVUVVRV9TRVRVUCkpDQo+ID4+PiArCQlyZXR1cm4gLUVCVVNZOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlpZiAoZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAmJg0KPiA+Pj4gKwkJKGRldi0+ ZGF0YS0+cnhfcXVldWVfc3RhdGVbcnhfcXVldWVfaWRdICE9DQo+ID4+PiArCQkJUlRFX0VUSF9R VUVVRV9TVEFURV9TVE9QUEVEKSkNCj4gPj4+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4+PiArDQo+ ID4+PiArCXJ4cSA9IGRldi0+ZGF0YS0+cnhfcXVldWVzOw0KPiA+Pj4gKwlpZiAocnhxW3J4X3F1 ZXVlX2lkXSkgew0KPiA+Pj4gKwkJUlRFX0ZVTkNfUFRSX09SX0VSUl9SRVQoKmRldi0+ZGV2X29w cy0NCj4gPj4+IHJ4X3F1ZXVlX3JlbGVhc2UsDQo+ID4+PiArCQkJCQktRU5PVFNVUCk7DQo+ID4+ PiArCQkoKmRldi0+ZGV2X29wcy0+cnhfcXVldWVfcmVsZWFzZSkocnhxW3J4X3F1ZXVlX2lkXSk7 DQo+ID4+PiArCQlyeHFbcnhfcXVldWVfaWRdID0gTlVMTDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0K PiA+Pj4gKwlpZiAocnhfY29uZiA9PSBOVUxMKQ0KPiA+Pj4gKwkJcnhfY29uZiA9ICZkZXZfaW5m by5kZWZhdWx0X3J4Y29uZjsNCj4gPj4+ICsNCj4gPj4+ICsJbG9jYWxfY29uZiA9ICpyeF9jb25m Ow0KPiA+Pj4gKw0KPiA+Pj4gKwkvKg0KPiA+Pj4gKwkgKiBJZiBhbiBvZmZsb2FkaW5nIGhhcyBh bHJlYWR5IGJlZW4gZW5hYmxlZCBpbg0KPiA+Pj4gKwkgKiBydGVfZXRoX2Rldl9jb25maWd1cmUo KSwgaXQgaGFzIGJlZW4gZW5hYmxlZCBvbiBhbGwgcXVldWVzLA0KPiA+Pj4gKwkgKiBzbyB0aGVy ZSBpcyBubyBuZWVkIHRvIGVuYWJsZSBpdCBpbiB0aGlzIHF1ZXVlIGFnYWluLg0KPiA+Pj4gKwkg KiBUaGUgbG9jYWxfY29uZi5vZmZsb2FkcyBpbnB1dCB0byB1bmRlcmx5aW5nIFBNRCBvbmx5IGNh cnJpZXMNCj4gPj4+ICsJICogdGhvc2Ugb2ZmbG9hZGluZ3Mgd2hpY2ggYXJlIG9ubHkgZW5hYmxl ZCBvbiB0aGlzIHF1ZXVlIGFuZA0KPiA+Pj4gKwkgKiBub3QgZW5hYmxlZCBvbiBhbGwgcXVldWVz Lg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJbG9jYWxfY29uZi5vZmZsb2FkcyAmPSB+ZGV2LT5kYXRh LT5kZXZfY29uZi5yeG1vZGUub2ZmbG9hZHM7DQo+ID4+PiArDQo+ID4+PiArCS8qDQo+ID4+PiAr CSAqIE5ldyBhZGRlZCBvZmZsb2FkaW5ncyBmb3IgdGhpcyBxdWV1ZSBhcmUgdGhvc2Ugbm90IGVu YWJsZWQgaW4NCj4gPj4+ICsJICogcnRlX2V0aF9kZXZfY29uZmlndXJlKCkgYW5kIHRoZXkgbXVz dCBiZSBwZXItcXVldWUgdHlwZS4NCj4gPj4+ICsJICogQSBwdXJlIHBlci1wb3J0IG9mZmxvYWRp bmcgY2FuJ3QgYmUgZW5hYmxlZCBvbiBhIHF1ZXVlIHdoaWxlDQo+ID4+PiArCSAqIGRpc2FibGVk IG9uIGFub3RoZXIgcXVldWUuIEEgcHVyZSBwZXItcG9ydCBvZmZsb2FkaW5nIGNhbid0DQo+ID4+ PiArCSAqIGJlIGVuYWJsZWQgZm9yIGFueSBxdWV1ZSBhcyBuZXcgYWRkZWQgb25lIGlmIGl0IGhh c24ndCBiZWVuDQo+ID4+PiArCSAqIGVuYWJsZWQgaW4gcnRlX2V0aF9kZXZfY29uZmlndXJlKCku DQo+ID4+PiArCSAqLw0KPiA+Pj4gKwlpZiAoKGxvY2FsX2NvbmYub2ZmbG9hZHMgJiBkZXZfaW5m by5yeF9xdWV1ZV9vZmZsb2FkX2NhcGEpICE9DQo+ID4+PiArCSAgICAgbG9jYWxfY29uZi5vZmZs b2Fkcykgew0KPiA+Pj4gKwkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+Pj4gKwkJCSJFdGhkZXYg cG9ydF9pZD0lZCByeF9xdWV1ZV9pZD0lZCwgIg0KPiA+Pj4gKwkJCSJuZXcgYWRkZWQgb2ZmbG9h ZHMgMHglIlBSSXg2NCIgbXVzdCBiZSAiDQo+ID4+PiArCQkJIndpdGhpbiBwZXItcXVldWUgb2Zm bG9hZCBjYXBhYmlsaXRpZXMgIg0KPiA+Pj4gKwkJCSIweCUiUFJJeDY0IiBpbiAlcygpXG4iLA0K PiA+Pj4gKwkJCXBvcnRfaWQsIHJ4X3F1ZXVlX2lkLCBsb2NhbF9jb25mLm9mZmxvYWRzLA0KPiA+ Pj4gKwkJCWRldl9pbmZvLnJ4X3F1ZXVlX29mZmxvYWRfY2FwYSwNCj4gPj4+ICsJCQlfX2Z1bmNf Xyk7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4g KwlyZXQgPSAoKmRldi0+ZGV2X29wcy0+cnhfaGFpcnBpbl9xdWV1ZV9zZXR1cCkoZGV2LA0KPiA+ PiByeF9xdWV1ZV9pZCwNCj4gPj4+ICsJCQkJCQkgICAgICBuYl9yeF9kZXNjLCBzb2NrZXRfaWQs DQo+ID4+PiArCQkJCQkJICAgICAgJmxvY2FsX2NvbmYsDQo+ID4+PiArCQkJCQkJICAgICAgaGFp cnBpbl9jb25mKTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIGV0aF9lcnIocG9ydF9pZCwgcmV0 KTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiAraW50DQo+ID4+PiAgICBydGVfZXRoX3R4X3F1 ZXVlX3NldHVwKHVpbnQxNl90IHBvcnRfaWQsIHVpbnQxNl90IHR4X3F1ZXVlX2lkLA0KPiA+Pj4g ICAgCQkgICAgICAgdWludDE2X3QgbmJfdHhfZGVzYywgdW5zaWduZWQgaW50IHNvY2tldF9pZCwN Cj4gPj4+ICAgIAkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVfZXRoX3R4Y29uZiAqdHhfY29uZikg QEAgLTE3OTksNg0KPiA+PiArMTkwOCwxMTANCj4gPj4+IEBAIHN0cnVjdCBydGVfZXRoX2RldiAq DQo+ID4+PiAgICAJCSAgICAgICB0eF9xdWV1ZV9pZCwgbmJfdHhfZGVzYywgc29ja2V0X2lkLCAm bG9jYWxfY29uZikpOw0KPiA+Pj4gICAgfQ0KPiA+Pj4NCj4gPj4+ICtpbnQNCj4gPj4+ICtydGVf ZXRoX3R4X2hhaXJwaW5fcXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwgdWludDE2X3QNCj4g Pj4gdHhfcXVldWVfaWQsDQo+ID4+PiArCQkJICAgICAgIHVpbnQxNl90IG5iX3R4X2Rlc2MsIHVu c2lnbmVkIGludCBzb2NrZXRfaWQsDQo+ID4+PiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVf ZXRoX3R4Y29uZiAqdHhfY29uZiwNCj4gPj4+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9l dGhfaGFpcnBpbl9jb25mICpoYWlycGluX2NvbmYpDQo+ID4+IHsNCj4gPj4+ICsJc3RydWN0IHJ0 ZV9ldGhfZGV2ICpkZXY7DQo+ID4+PiArCXN0cnVjdCBydGVfZXRoX2Rldl9pbmZvIGRldl9pbmZv Ow0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX2V0aF90eGNvbmYgbG9jYWxfY29uZjsNCj4gPj4+ICsJdm9p ZCAqKnR4cTsNCj4gPj4+ICsNCj4gPj4+ICsJUlRFX0VUSF9WQUxJRF9QT1JUSURfT1JfRVJSX1JF VChwb3J0X2lkLCAtRUlOVkFMKTsNCj4gPj4+ICsNCj4gPj4+ICsJZGV2ID0gJnJ0ZV9ldGhfZGV2 aWNlc1twb3J0X2lkXTsNCj4gPj4+ICsJaWYgKHR4X3F1ZXVlX2lkID49IGRldi0+ZGF0YS0+bmJf dHhfcXVldWVzKSB7DQo+ID4+PiArCQlSVEVfRVRIREVWX0xPRyhFUlIsICJJbnZhbGlkIFRYIHF1 ZXVlX2lkPSV1XG4iLA0KPiA+PiB0eF9xdWV1ZV9pZCk7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgq ZGV2LT5kZXZfb3BzLT5kZXZfaW5mb3NfZ2V0LCAtDQo+ID4+IEVOT1RTVVApOw0KPiA+Pj4gKwlS VEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgqZGV2LT5kZXZfb3BzLQ0KPiA+Pj4gdHhfaGFpcnBpbl9x dWV1ZV9zZXR1cCwNCj4gPj4+ICsJCQkJLUVOT1RTVVApOw0KPiA+Pj4gKw0KPiA+Pj4gKwlydGVf ZXRoX2Rldl9pbmZvX2dldChwb3J0X2lkLCAmZGV2X2luZm8pOw0KPiA+Pj4gKw0KPiA+Pj4gKwkv KiBVc2UgZGVmYXVsdCBzcGVjaWZpZWQgYnkgZHJpdmVyLCBpZiBuYl90eF9kZXNjIGlzIHplcm8g Ki8NCj4gPj4+ICsJaWYgKG5iX3R4X2Rlc2MgPT0gMCkgew0KPiA+Pj4gKwkJbmJfdHhfZGVzYyA9 IGRldl9pbmZvLmRlZmF1bHRfdHhwb3J0Y29uZi5yaW5nX3NpemU7DQo+ID4+PiArCQkvKiBJZiBk cml2ZXIgZGVmYXVsdCBpcyB6ZXJvLCBmYWxsIGJhY2sgb24gRUFMIGRlZmF1bHQgKi8NCj4gPj4+ ICsJCWlmIChuYl90eF9kZXNjID09IDApDQo+ID4+PiArCQkJbmJfdHhfZGVzYyA9DQo+ID4+IFJU RV9FVEhfREVWX0ZBTExCQUNLX1RYX1JJTkdTSVpFOw0KPiA+Pj4gKwl9DQo+ID4+PiArCWlmIChu Yl90eF9kZXNjID4gZGV2X2luZm8udHhfZGVzY19saW0ubmJfbWF4IHx8DQo+ID4+PiArCSAgICBu Yl90eF9kZXNjIDwgZGV2X2luZm8udHhfZGVzY19saW0ubmJfbWluIHx8DQo+ID4+PiArCSAgICBu Yl90eF9kZXNjICUgZGV2X2luZm8udHhfZGVzY19saW0ubmJfYWxpZ24gIT0gMCkgew0KPiA+Pj4g KwkJUlRFX0VUSERFVl9MT0coRVJSLA0KPiA+Pj4gKwkJCSAgICAgICAiSW52YWxpZCB2YWx1ZSBm b3IgbmJfdHhfZGVzYyg9JWh1KSwgIg0KPiA+Pj4gKwkJCSAgICAgICAic2hvdWxkIGJlOiA8PSAl aHUsID49ICVodSwgYW5kIGEgcHJvZHVjdCBvZiAiDQo+ID4+PiArCQkJICAgICAgICIgJWh1XG4i LA0KPiA+Pj4gKwkJCSAgICAgICBuYl90eF9kZXNjLCBkZXZfaW5mby50eF9kZXNjX2xpbS5uYl9t YXgsDQo+ID4+PiArCQkJICAgICAgIGRldl9pbmZvLnR4X2Rlc2NfbGltLm5iX21pbiwNCj4gPj4+ ICsJCQkgICAgICAgZGV2X2luZm8udHhfZGVzY19saW0ubmJfYWxpZ24pOw0KPiA+Pj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGRldi0+ZGF0YS0+ ZGV2X3N0YXJ0ZWQgJiYNCj4gPj4+ICsJCSEoZGV2X2luZm8uZGV2X2NhcGEgJg0KPiA+Pj4gKwkJ ICBSVEVfRVRIX0RFVl9DQVBBX1JVTlRJTUVfVFhfUVVFVUVfU0VUVVApKQ0KPiA+Pj4gKwkJcmV0 dXJuIC1FQlVTWTsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGRldi0+ZGF0YS0+ZGV2X3N0YXJ0ZWQg JiYNCj4gPj4+ICsJCShkZXYtPmRhdGEtPnR4X3F1ZXVlX3N0YXRlW3R4X3F1ZXVlX2lkXSAhPQ0K PiA+Pj4gKwkJIFJURV9FVEhfUVVFVUVfU1RBVEVfU1RPUFBFRCkpDQo+ID4+PiArCQlyZXR1cm4g LUVCVVNZOw0KPiA+Pj4gKw0KPiA+Pj4gKwl0eHEgPSBkZXYtPmRhdGEtPnR4X3F1ZXVlczsNCj4g Pj4+ICsJaWYgKHR4cVt0eF9xdWV1ZV9pZF0pIHsNCj4gPj4+ICsJCVJURV9GVU5DX1BUUl9PUl9F UlJfUkVUKCpkZXYtPmRldl9vcHMtDQo+ID4+PiB0eF9xdWV1ZV9yZWxlYXNlLA0KPiA+Pj4gKwkJ CQkJLUVOT1RTVVApOw0KPiA+Pj4gKwkJKCpkZXYtPmRldl9vcHMtPnR4X3F1ZXVlX3JlbGVhc2Up KHR4cVt0eF9xdWV1ZV9pZF0pOw0KPiA+Pj4gKwkJdHhxW3R4X3F1ZXVlX2lkXSA9IE5VTEw7DQo+ ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHR4X2NvbmYgPT0gTlVMTCkNCj4gPj4+ICsJ CXR4X2NvbmYgPSAmZGV2X2luZm8uZGVmYXVsdF90eGNvbmY7DQo+ID4+PiArDQo+ID4+PiArCWxv Y2FsX2NvbmYgPSAqdHhfY29uZjsNCj4gPj4+ICsNCj4gPj4+ICsJLyoNCj4gPj4+ICsJICogSWYg YW4gb2ZmbG9hZGluZyBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQgaW4NCj4gPj4+ICsJICogcnRl X2V0aF9kZXZfY29uZmlndXJlKCksIGl0IGhhcyBiZWVuIGVuYWJsZWQgb24gYWxsIHF1ZXVlcywN Cj4gPj4+ICsJICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBlbmFibGUgaXQgaW4gdGhpcyBxdWV1 ZSBhZ2Fpbi4NCj4gPj4+ICsJICogVGhlIGxvY2FsX2NvbmYub2ZmbG9hZHMgaW5wdXQgdG8gdW5k ZXJseWluZyBQTUQgb25seSBjYXJyaWVzDQo+ID4+PiArCSAqIHRob3NlIG9mZmxvYWRpbmdzIHdo aWNoIGFyZSBvbmx5IGVuYWJsZWQgb24gdGhpcyBxdWV1ZSBhbmQNCj4gPj4+ICsJICogbm90IGVu YWJsZWQgb24gYWxsIHF1ZXVlcy4NCj4gPj4+ICsJICovDQo+ID4+PiArCWxvY2FsX2NvbmYub2Zm bG9hZHMgJj0gfmRldi0+ZGF0YS0+ZGV2X2NvbmYudHhtb2RlLm9mZmxvYWRzOw0KPiA+Pj4gKw0K PiA+Pj4gKwkvKg0KPiA+Pj4gKwkgKiBOZXcgYWRkZWQgb2ZmbG9hZGluZ3MgZm9yIHRoaXMgcXVl dWUgYXJlIHRob3NlIG5vdCBlbmFibGVkIGluDQo+ID4+PiArCSAqIHJ0ZV9ldGhfZGV2X2NvbmZp Z3VyZSgpIGFuZCB0aGV5IG11c3QgYmUgcGVyLXF1ZXVlIHR5cGUuDQo+ID4+PiArCSAqIEEgcHVy ZSBwZXItcG9ydCBvZmZsb2FkaW5nIGNhbid0IGJlIGVuYWJsZWQgb24gYSBxdWV1ZSB3aGlsZQ0K PiA+Pj4gKwkgKiBkaXNhYmxlZCBvbiBhbm90aGVyIHF1ZXVlLiBBIHB1cmUgcGVyLXBvcnQgb2Zm bG9hZGluZyBjYW4ndA0KPiA+Pj4gKwkgKiBiZSBlbmFibGVkIGZvciBhbnkgcXVldWUgYXMgbmV3 IGFkZGVkIG9uZSBpZiBpdCBoYXNuJ3QgYmVlbg0KPiA+Pj4gKwkgKiBlbmFibGVkIGluIHJ0ZV9l dGhfZGV2X2NvbmZpZ3VyZSgpLg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJaWYgKChsb2NhbF9jb25m Lm9mZmxvYWRzICYgZGV2X2luZm8udHhfcXVldWVfb2ZmbG9hZF9jYXBhKSAhPQ0KPiA+Pj4gKwkg ICAgIGxvY2FsX2NvbmYub2ZmbG9hZHMpIHsNCj4gPj4+ICsJCVJURV9FVEhERVZfTE9HKEVSUiwN Cj4gPj4+ICsJCQkgICAgICAgIkV0aGRldiBwb3J0X2lkPSVkIHR4X3F1ZXVlX2lkPSVkLCBuZXcN Cj4gPj4gYWRkZWQgIg0KPiA+Pj4gKwkJCSAgICAgICAib2ZmbG9hZHMgMHglIlBSSXg2NCIgbXVz dCBiZSB3aXRoaW4gIg0KPiA+Pj4gKwkJCSAgICAgICAicGVyLXF1ZXVlIG9mZmxvYWQgY2FwYWJp bGl0aWVzIDB4JSJQUkl4NjQiICINCj4gPj4+ICsJCQkgICAgICAgImluICVzKClcbiIsDQo+ID4+ PiArCQkJICAgICAgIHBvcnRfaWQsIHR4X3F1ZXVlX2lkLCBsb2NhbF9jb25mLm9mZmxvYWRzLA0K PiA+Pj4gKwkJCSAgICAgICBkZXZfaW5mby50eF9xdWV1ZV9vZmZsb2FkX2NhcGEsDQo+ID4+PiAr CQkJICAgICAgIF9fZnVuY19fKTsNCj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+Pj4gKwl9 DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBldGhfZXJyKHBvcnRfaWQsICgqZGV2LT5kZXZfb3Bz LT50eF9oYWlycGluX3F1ZXVlX3NldHVwKQ0KPiA+Pj4gKwkJICAgICAgIChkZXYsIHR4X3F1ZXVl X2lkLCBuYl90eF9kZXNjLCBzb2NrZXRfaWQsICZsb2NhbF9jb25mLA0KPiA+Pj4gKwkJCWhhaXJw aW5fY29uZikpOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICAgIHZvaWQNCj4gPj4+ICAgIHJ0 ZV9ldGhfdHhfYnVmZmVyX2Ryb3BfY2FsbGJhY2soc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWlu dDE2X3QNCj4gPj4gdW5zZW50LA0KPiA+Pj4gICAgCQl2b2lkICp1c2VyZGF0YSBfX3J0ZV91bnVz ZWQpDQo+ID4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ ID4+PiBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9ldGhkZXYuaCBpbmRleCA0NzVkYmRhLi5iM2Ix NTk3IDEwMDY0NA0KPiA+Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ ID4+PiArKysgYi9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2LmgNCj4gPj4+IEBAIC04MDMs NiArODAzLDMwIEBAIHN0cnVjdCBydGVfZXRoX3R4Y29uZiB7DQo+ID4+PiAgICAJdWludDY0X3Qg b2ZmbG9hZHM7DQo+ID4+PiAgICB9Ow0KPiA+Pj4NCj4gPj4+ICsjZGVmaW5lIFJURV9FVEhfTUFY X0hBSVJQSU5fUEVFUlMgMzINCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgKiBAd2Fybmlu Zw0KPiA+Pj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUg cmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiA+Pj4gK25vdGljZQ0KPiA+Pj4gKyAqDQo+ID4+PiAr ICogQSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGhhaXJwaW4gcGVlciBkYXRhLg0KPiA+Pj4gKyAq Lw0KPiA+Pj4gK3N0cnVjdCBydGVfZXRoX2hhaXJwaW5fcGVlciB7DQo+ID4+PiArCXVpbnQxNl90 IHBvcnQ7IC8qKjwgUGVlciBwb3J0LiAqLw0KPiA+Pj4gKwl1aW50MTZfdCBxdWV1ZTsgLyoqPCBQ ZWVyIHF1ZXVlLiAqLw0KPiA+Pj4gK307DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICog QHdhcm5pbmcNCj4gPj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Us IG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gPj4+ICtub3RpY2UNCj4gPj4+ICsgKg0K PiA+Pj4gKyAqIEEgc3RydWN0dXJlIHVzZWQgdG8gY29uZmlndXJlIGhhaXJwaW4gYmluZGluZy4N Cj4gPj4+ICsgKi8NCj4gPj4+ICtzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgew0KPiA+Pj4g Kwl1aW50MTZfdCBwZWVyX247IC8qKjwgVGhlIG51bWJlciBvZiBwZWVycy4gKi8NCj4gPj4+ICsJ c3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9wZWVyIHBlZXJzW1JURV9FVEhfTUFYX0hBSVJQSU5fUEVF UlNdOw0KPiA+PiB9Ow0KPiA+Pj4gKw0KPiA+Pj4gICAgLyoqDQo+ID4+PiAgICAgKiBBIHN0cnVj dHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBIVyBkZXNjcmlwdG9yIHJpbmcgbGltaXRh dGlvbnMuDQo+ID4+PiAgICAgKi8NCj4gPj4+IEBAIC0xNzY5LDYgKzE3OTMsNjAgQEAgaW50IHJ0 ZV9ldGhfcnhfcXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwNCj4gPj4gdWludDE2X3Qgcnhf cXVldWVfaWQsDQo+ID4+PiAgICAJCXN0cnVjdCBydGVfbWVtcG9vbCAqbWJfcG9vbCk7DQo+ID4+ Pg0KPiA+Pj4gICAgLyoqDQo+ID4+PiArICogQHdhcm5pbmcNCj4gPj4+ICsgKiBAYiBFWFBFUklN RU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3IN Cj4gPj4+ICsgbm90aWNlDQo+ID4+PiArICoNCj4gPj4+ICsgKiBBbGxvY2F0ZSBhbmQgc2V0IHVw IGEgaGFpcnBpbiByZWNlaXZlIHF1ZXVlIGZvciBhbiBFdGhlcm5ldCBkZXZpY2UuDQo+ID4+PiAr ICoNCj4gPj4+ICsgKiBUaGUgZnVuY3Rpb24gc2V0IHVwIHRoZSBzZWxlY3RlZCBxdWV1ZSB0byBi ZSB1c2VkIGluIGhhaXJwaW4uDQo+ID4+PiArICoNCj4gPj4+ICsgKiBAcGFyYW0gcG9ydF9pZA0K PiA+Pj4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0K PiA+Pj4gKyAqIEBwYXJhbSByeF9xdWV1ZV9pZA0KPiA+Pj4gKyAqICAgVGhlIGluZGV4IG9mIHRo ZSByZWNlaXZlIHF1ZXVlIHRvIHNldCB1cC4NCj4gPj4+ICsgKiAgIFRoZSB2YWx1ZSBtdXN0IGJl IGluIHRoZSByYW5nZSBbMCwgbmJfcnhfcXVldWUgLSAxXSBwcmV2aW91c2x5DQo+ID4+IHN1cHBs aWVkDQo+ID4+PiArICogICB0byBydGVfZXRoX2Rldl9jb25maWd1cmUoKS4NCj4gPj4gSXMgYW55 IFJ4IHF1ZXVlIG1heSBiZSBzZXR1cCBhcyBoYWlycGluIHF1ZXVlPw0KPiA+PiBDYW4gaXQgYmUg c3RpbGwgdXNlZCBmb3IgcmVndWxhciB0cmFmZmljPw0KPiA+Pg0KPiA+IE5vIGlmIGEgcXVldWUg aXMgdXNlZCBhcyBoYWlycGluIGl0IGNhbid0IGJlIHVzZWQgZm9yIG5vcm1hbCB0cmFmZmljLg0K PiA+IFRoaXMgaXMgYWxzbyB3aHkgSSBsaWtlIHRoZSBpZGVhIG9mIHR3byBkaWZmZXJlbnQgZnVu Y3Rpb25zLCBpbiBvcmRlciB0byBjcmVhdGUNCj4gPiBUaGlzIGRpc3RpbmN0aW9uLg0KPiANCj4g SWYgc28sIGRvIHdlIG5lZWQgYXQgbGVhc3QgZGVidWctbGV2ZWwgY2hlY2tzIGluIFR4L1J4IGJ1 cnN0IGZ1bmN0aW9ucz8NCj4gSXMgaXQgcmVxdWlyZWQgdG8gcGF0Y2ggcnRlIGZsb3cgUlNTIGFj dGlvbiB0byBlbnN1cmUgdGhhdCBSeCBxdWV1ZXMgb2YNCj4gb25seSBvbmUga2luZCBhcmUgc3Bl Y2lmaWVkPw0KPiBXaGF0IGFib3V0IGF0dGVtcHQgdG8gYWRkIFJ4L1R4IGNhbGxiYWNrcyBmb3Ig aGFpcnBpbiBxdWV1ZXM/DQo+IA0KDQpJIHRoaW5rIHRoZSBjaGVja3Mgc2hvdWxkIGJlIGRvbmUg aW4gUE1EIGxldmVsLiBTaW5jZSBmcm9tIGhpZ2ggbGV2ZWwgdGhleSBhcmUgdGhlIA0Kc2FtZS4g Q2FsbCBiYWNrcyBmb3IgUngvVHggZG9lc24ndCBtYWtlIHNlbnNlLCBzaW5jZSB0aGUgaWRlYSBp cyB0byBieXBhc3MgdGhlDQpDUFUuIA0KDQo+ID4+PiArICogQHBhcmFtIG5iX3J4X2Rlc2MNCj4g Pj4+ICsgKiAgIFRoZSBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBm b3IgdGhlIHJlY2VpdmUgcmluZy4NCj4gPj4gRG9lcyBpdCBzdGlsbCBtYWtlIHNlbnNlIGZvciBo YWlycGluIHF1ZXVlPw0KPiA+Pg0KPiA+IFllcywgc2luY2UgaXQgY2FuIGFmZmVjdCBtZW1vcnkg c2l6ZSB1c2VkIGJ5IHRoZSBkZXZpY2UsIGFuZCBjYW4gYWZmZWN0DQo+IHBlcmZvcm1hbmNlLg0K PiA+DQo+ID4+PiArICogQHBhcmFtIHNvY2tldF9pZA0KPiA+Pj4gKyAqICAgVGhlICpzb2NrZXRf aWQqIGFyZ3VtZW50IGlzIHRoZSBzb2NrZXQgaWRlbnRpZmllciBpbiBjYXNlIG9mIE5VTUEuDQo+ ID4+PiArICogICBUaGUgdmFsdWUgY2FuIGJlICpTT0NLRVRfSURfQU5ZKiBpZiB0aGVyZSBpcyBu byBOVU1BIGNvbnN0cmFpbnQNCj4gPj4gZm9yDQo+ID4+PiArICogICB0aGUgRE1BIG1lbW9yeSBh bGxvY2F0ZWQgZm9yIHRoZSByZWNlaXZlIGRlc2NyaXB0b3JzIG9mIHRoZSByaW5nLg0KPiA+PiBJ cyBpdCBzdGlsbCByZXF1aXJlZCB0byBiZSBwcm92aWRlZCBmb3IgaGFpcnBpbiBSeCBxdWV1ZT8N Cj4gPj4NCj4gPiBZZXMsIGZvciBpbnRlcm5hbCBQTUQgc3RydWN0dXJlcyB0byBiZSBhbGxvY2F0 ZWQsIGJ1dCB3ZSBjYW4gaWYgcHJlc3NlZA0KPiByZW1vdmUgaXQuDQo+ID4NCj4gPj4+ICsgKiBA cGFyYW0gcnhfY29uZg0KPiA+Pj4gKyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRp b24gZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcmVjZWl2ZQ0KPiA+PiBxdWV1ZS4NCj4gPj4+ICsg KiAgIE5VTEwgdmFsdWUgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSBkZWZhdWx0IFJYIGNvbmZp Z3VyYXRpb24NCj4gPj4+ICsgKiAgIHdpbGwgYmUgdXNlZC4NCj4gPj4+ICsgKiAgIFRoZSAqcnhf Y29uZiogc3RydWN0dXJlIGNvbnRhaW5zIGFuICpyeF90aHJlc2gqIHN0cnVjdHVyZSB3aXRoIHRo ZQ0KPiA+PiB2YWx1ZXMNCj4gPj4+ICsgKiAgIG9mIHRoZSBQcmVmZXRjaCwgSG9zdCwgYW5kIFdy aXRlLUJhY2sgdGhyZXNob2xkIHJlZ2lzdGVycyBvZiB0aGUNCj4gPj4gcmVjZWl2ZQ0KPiA+Pj4g KyAqICAgcmluZy4NCj4gPj4+ICsgKiAgIEluIGFkZGl0aW9uIGl0IGNvbnRhaW5zIHRoZSBoYXJk d2FyZSBvZmZsb2FkcyBmZWF0dXJlcyB0byBhY3RpdmF0ZSB1c2luZw0KPiA+Pj4gKyAqICAgdGhl IERFVl9SWF9PRkZMT0FEXyogZmxhZ3MuDQo+ID4+PiArICogICBJZiBhbiBvZmZsb2FkaW5nIHNl dCBpbiByeF9jb25mLT5vZmZsb2Fkcw0KPiA+Pj4gKyAqICAgaGFzbid0IGJlZW4gc2V0IGluIHRo ZSBpbnB1dCBhcmd1bWVudCBldGhfY29uZi0+cnhtb2RlLm9mZmxvYWRzDQo+ID4+PiArICogICB0 byBydGVfZXRoX2Rldl9jb25maWd1cmUoKSwgaXQgaXMgYSBuZXcgYWRkZWQgb2ZmbG9hZGluZywg aXQgbXVzdCBiZQ0KPiA+Pj4gKyAqICAgcGVyLXF1ZXVlIHR5cGUgYW5kIGl0IGlzIGVuYWJsZWQg Zm9yIHRoZSBxdWV1ZS4NCj4gPj4+ICsgKiAgIE5vIG5lZWQgdG8gcmVwZWF0IGFueSBiaXQgaW4g cnhfY29uZi0+b2ZmbG9hZHMgd2hpY2ggaGFzIGFscmVhZHkgYmVlbg0KPiA+Pj4gKyAqICAgZW5h YmxlZCBpbiBydGVfZXRoX2Rldl9jb25maWd1cmUoKSBhdCBwb3J0IGxldmVsLiBBbiBvZmZsb2Fk aW5nDQo+ID4+IGVuYWJsZWQNCj4gPj4+ICsgKiAgIGF0IHBvcnQgbGV2ZWwgY2FuJ3QgYmUgZGlz YWJsZWQgYXQgcXVldWUgbGV2ZWwuDQo+ID4+IFdoaWNoIG9mZmxvYWRzIHN0aWxsIG1ha2Ugc2Vu c2UgaW4gdGhlIGNhc2Ugb2YgaGFpcnBpbiBSeCBxdWV1ZT8NCj4gPj4gV2hhdCBhYm91dCB0aHJl c2hob2RzLCBkcm9wIGVuYWJsZT8NCj4gPj4NCj4gPiBEcm9wIGFuZCB0aHJlc2hvbGRzIG1ha2Ug c2Vuc2UsIGZvciBleGFtcGxlIHRoZSBhcHBsaWNhdGlvbiBjYW4gc3RhdGUgdGhhdCwNCj4gPiBp biBjYXNlIG9mIGJhY2sgcHJlc3N1cmUgdG8gc3RhcnQgZHJvcHBpbmcgcGFja2V0cyBpbiBvcmRl ciBub3QgdG8gYWZmZWN0IHRoZQ0KPiA+IGVudGlyZSBuaWMuDQo+ID4gcmVnYXJkaW5nIG9mZmxv YWRzIG1haW5seSB2bGFuIHN0cmlwIG9yIHZsYW4gaW5zZXJ0IGJ1dCB0aG9zZSBjYW4gYWxzbw0K PiA+IGJlIHVzZWQgaW4gcnRlX2Zsb3cuDQo+ID4gQnV0IGZ1dHVyZSBvZmZsb2FkcyBsaWtlIFFv UyBvciBvdGhlciBtYXliZSBzaGFyZWQuDQo+IA0KPiBJJ20gbm90IGEgZmFuIG9mIGRlYWQgcGFy YW1ldGVycyB3aGljaCBhcmUgYWRkZWQganVzdCB0byB1c2UNCj4gdGhlIHNhbWUgc3RydWN0dXJl LiBJdCByYWlzZXMgdG9vIG1hbnkgcXVlc3Rpb25zIG9uIG1haW50ZW5hbmNlLg0KPiBBbHNvIEkg ZG9uJ3QgbGlrZSBpZGVhIHRvIHNoYXJlIGhhaXJwaW4gYW5kIHJlZ3VsYXIgb2ZmbG9hZHMuDQo+ IE1heSBiZSBpdCBpcyBPSyB0byBzaGFyZSBuYW1lc3BhY2UgKHN0aWxsIHVuc3VyZSksIGJ1dCBj YXBhYmlsaXRpZXMNCj4gYXJlIGRlZmluaXRlbHkgZGlmZmVyZW50IGFuZCBzb21lIHJlZ3VsYXIg b2ZmbG9hZHMgYXJlIHNpbXBseSBub3QNCj4gYXBwbGljYWJsZSB0byBoYWlycGluIGNhc2UuDQo+ IA0KSSBhZ3JlZSB3aXRoIHlvdSBJIHRoaW5rIHRoYXQgbXkgc3VnZ2VzdGlvbiBhYm92ZSAobmV3 IGNhcHMgZm9yIGhhaXJwaW4pDQpzb2x2ZSB0aGlzIGlzc3VlLiBEbyB5b3UgYWdyZWU/DQpJIHdp bGwgcmVtb3ZlIHRoZSBydGVfZXRoX3R4Y29uZiBhbmQgb25seSBoYWUgdGhlIGhhaXJwaW5fY29u ZiB3aXRoIHNvbWUgbmV3DQpmaWVsZHMsIHNhbWUgZm9yIHRoZSBSeCwgaXMgdGhhdCBPLksuPw0K DQoNCj4gPj4+ICsgKiBAcGFyYW0gaGFpcnBpbl9jb25mDQo+ID4+PiArICogICBUaGUgcG9pbnRl ciB0byB0aGUgaGFpcnBpbiBiaW5kaW5nIGNvbmZpZ3VyYXRpb24uDQo+ID4+PiArICogQHJldHVy bg0KPiA+Pj4gKyAqICAgLSAwOiBTdWNjZXNzLCByZWNlaXZlIHF1ZXVlIGNvcnJlY3RseSBzZXQg dXAuDQo+ID4+PiArICogICAtIC1FSU5WQUw6IFRoZSBzaXplIG9mIG5ldHdvcmsgYnVmZmVycyB3 aGljaCBjYW4gYmUgYWxsb2NhdGVkIGZyb20gdGhlDQo+ID4+PiArICogICAgICBtZW1vcnkgcG9v bCBkb2VzIG5vdCBmaXQgdGhlIHZhcmlvdXMgYnVmZmVyIHNpemVzIGFsbG93ZWQgYnkgdGhlDQo+ ID4+PiArICogICAgICBkZXZpY2UgY29udHJvbGxlci4NCj4gPj4+ICsgKiAgIC0gLUVOT01FTTog VW5hYmxlIHRvIGFsbG9jYXRlIHRoZSByZWNlaXZlIHJpbmcgZGVzY3JpcHRvcnMgb3IgdG8NCj4g Pj4+ICsgKiAgICAgIGFsbG9jYXRlIG5ldHdvcmsgbWVtb3J5IGJ1ZmZlcnMgZnJvbSB0aGUgbWVt b3J5IHBvb2wgd2hlbg0KPiA+Pj4gKyAqICAgICAgaW5pdGlhbGl6aW5nIHJlY2VpdmUgZGVzY3Jp cHRvcnMuDQo+ID4+PiArICovDQo+ID4+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4+PiAraW50 IHJ0ZV9ldGhfcnhfaGFpcnBpbl9xdWV1ZV9zZXR1cA0KPiA+Pj4gKwkodWludDE2X3QgcG9ydF9p ZCwgdWludDE2X3QgcnhfcXVldWVfaWQsDQo+ID4+PiArCSB1aW50MTZfdCBuYl9yeF9kZXNjLCB1 bnNpZ25lZCBpbnQgc29ja2V0X2lkLA0KPiA+Pj4gKwkgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfcnhj b25mICpyeF9jb25mLA0KPiA+Pj4gKwkgY29uc3Qgc3RydWN0IHJ0ZV9ldGhfaGFpcnBpbl9jb25m ICpoYWlycGluX2NvbmYpOw0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gICAgICogQWxsb2Nh dGUgYW5kIHNldCB1cCBhIHRyYW5zbWl0IHF1ZXVlIGZvciBhbiBFdGhlcm5ldCBkZXZpY2UuDQo+ ID4+PiAgICAgKg0KPiA+Pj4gICAgICogQHBhcmFtIHBvcnRfaWQNCj4gPj4+IEBAIC0xODIxLDYg KzE4OTksNzMgQEAgaW50IHJ0ZV9ldGhfdHhfcXVldWVfc2V0dXAodWludDE2X3QgcG9ydF9pZCwN Cj4gPj4gdWludDE2X3QgdHhfcXVldWVfaWQsDQo+ID4+PiAgICAJCWNvbnN0IHN0cnVjdCBydGVf ZXRoX3R4Y29uZiAqdHhfY29uZik7DQo+ID4+Pg0KPiA+Pj4gICAgLyoqDQo+ID4+PiArICogQHdh cm5pbmcNCj4gPj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9y IGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gPj4+ICsgbm90aWNlDQo+ID4+PiArICoNCj4g Pj4+ICsgKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIGEgdHJhbnNtaXQgaGFpcnBpbiBxdWV1ZSBmb3Ig YW4gRXRoZXJuZXQgZGV2aWNlLg0KPiA+Pj4gKyAqDQo+ID4+PiArICogQHBhcmFtIHBvcnRfaWQN Cj4gPj4+ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4N Cj4gPj4+ICsgKiBAcGFyYW0gdHhfcXVldWVfaWQNCj4gPj4+ICsgKiAgIFRoZSBpbmRleCBvZiB0 aGUgdHJhbnNtaXQgcXVldWUgdG8gc2V0IHVwLg0KPiA+Pj4gKyAqICAgVGhlIHZhbHVlIG11c3Qg YmUgaW4gdGhlIHJhbmdlIFswLCBuYl90eF9xdWV1ZSAtIDFdIHByZXZpb3VzbHkNCj4gPj4gc3Vw cGxpZWQNCj4gPj4+ICsgKiAgIHRvIHJ0ZV9ldGhfZGV2X2NvbmZpZ3VyZSgpLg0KPiA+PiBJcyBh bnkgVHggcXVldWUgbWF5IGJlIHNldHVwIGFzIGhhaXJwaW4gcXVldWU/DQo+ID4+DQo+ID4gWWVz IGp1c3QgbGlrZSBhbnkgUnggcXVldWUuDQo+ID4NCj4gPj4+ICsgKiBAcGFyYW0gbmJfdHhfZGVz Yw0KPiA+Pj4gKyAqICAgVGhlIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycyB0byBhbGxv Y2F0ZSBmb3IgdGhlIHRyYW5zbWl0IHJpbmcuDQo+ID4+IElzIGl0IHJlYWxseSByZXF1aXJlZCBm b3IgaGFpcnBpbiBxdWV1ZT8gQXJlIG1pbi9tYXgvYWxpZ24gbGltaXRzIHN0aWxsIHRoZQ0KPiA+ PiBzYW1lPw0KPiA+Pg0KPiA+IFRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgY2FuIGVmZmVjdCBt ZW1vcnkgYW5kIHBlcmZvcm1hbmNlLg0KPiA+IFJlZ2FyZGluZyBtaW4vbWF4L2FsaWduIEkgZ3Vl c3MgdGhpcyBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUNCj4gbmljLg0KPiAN Cj4gQWdhaW4sIGl0IGxvb2tzIGxpa2Ugc2VwYXJhdGUgZGV2X2luZm8tbGlrZSBpbmZvcm1hdGlv bi4NCj4gDQoNClBsZWFzZSBzZWUgY29tbWVudHMgYWJvdmUuDQoNCj4gPj4+ICsgKiBAcGFyYW0g c29ja2V0X2lkDQo+ID4+PiArICogICBUaGUgKnNvY2tldF9pZCogYXJndW1lbnQgaXMgdGhlIHNv Y2tldCBpZGVudGlmaWVyIGluIGNhc2Ugb2YgTlVNQS4NCj4gPj4+ICsgKiAgIEl0cyB2YWx1ZSBj YW4gYmUgKlNPQ0tFVF9JRF9BTlkqIGlmIHRoZXJlIGlzIG5vIE5VTUEgY29uc3RyYWludCBmb3IN Cj4gPj4+ICsgKiAgIHRoZSBETUEgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHRyYW5zbWl0IGRl c2NyaXB0b3JzIG9mIHRoZSByaW5nLg0KPiA+PiBEb2VzIGl0IHN0aWxsIG1ha2Ugc2Vuc2UgZm9y IFR4IGhhaXJwaW4gcXVldWU/DQo+ID4+DQo+ID4gU2FtZSBhcyBmb3IgdGhlIFJYLCBpdCBpcyB1 c2VkIGZvciBpbnRlcm5hbCBQTUQgc3RydWN0dXJlcywgYnV0IG1heWJlIG9uDQo+ID4gb3RoZXIg bmljcyB0aGV5IGNhbiB1c2UgdGhpcy4NCj4gPg0KPiA+Pj4gKyAqIEBwYXJhbSB0eF9jb25mDQo+ ID4+PiArICogICBUaGUgcG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHRvIGJlIHVz ZWQgZm9yIHRoZSB0cmFuc21pdA0KPiA+PiBxdWV1ZS4NCj4gPj4+ICsgKiAgIE5VTEwgdmFsdWUg aXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSBkZWZhdWx0IFJYIGNvbmZpZ3VyYXRpb24NCj4gPj4+ ICsgKiAgIHdpbGwgYmUgdXNlZC4NCj4gPj4+ICsgKiAgIFRoZSAqdHhfY29uZiogc3RydWN0dXJl IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGF0YToNCj4gPj4+ICsgKiAgIC0gVGhlICp0eF90aHJl c2gqIHN0cnVjdHVyZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIFByZWZldGNoLCBIb3N0LCBhbmQN Cj4gPj4+ICsgKiAgICAgV3JpdGUtQmFjayB0aHJlc2hvbGQgcmVnaXN0ZXJzIG9mIHRoZSB0cmFu c21pdCByaW5nLg0KPiA+Pj4gKyAqICAgICBXaGVuIHNldHRpbmcgV3JpdGUtQmFjayB0aHJlc2hv bGQgdG8gdGhlIHZhbHVlIGdyZWF0ZXIgdGhlbiB6ZXJvLA0KPiA+Pj4gKyAqICAgICAqdHhfcnNf dGhyZXNoKiB2YWx1ZSBzaG91bGQgYmUgZXhwbGljaXRseSBzZXQgdG8gb25lLg0KPiA+Pj4gKyAq ICAgLSBUaGUgKnR4X2ZyZWVfdGhyZXNoKiB2YWx1ZSBpbmRpY2F0ZXMgdGhlIFttaW5pbXVtXSBu dW1iZXIgb2YNCj4gPj4gbmV0d29yaw0KPiA+Pj4gKyAqICAgICBidWZmZXJzIHRoYXQgbXVzdCBi ZSBwZW5kaW5nIGluIHRoZSB0cmFuc21pdCByaW5nIHRvIHRyaWdnZXIgdGhlaXINCj4gPj4+ICsg KiAgICAgW2ltcGxpY2l0XSBmcmVlaW5nIGJ5IHRoZSBkcml2ZXIgdHJhbnNtaXQgZnVuY3Rpb24u DQo+ID4+PiArICogICAtIFRoZSAqdHhfcnNfdGhyZXNoKiB2YWx1ZSBpbmRpY2F0ZXMgdGhlIFtt aW5pbXVtXSBudW1iZXIgb2YNCj4gPj4gdHJhbnNtaXQNCj4gPj4+ICsgKiAgICAgZGVzY3JpcHRv cnMgdGhhdCBtdXN0IGJlIHBlbmRpbmcgaW4gdGhlIHRyYW5zbWl0IHJpbmcgYmVmb3JlIHNldHRp bmcNCj4gPj4gdGhlDQo+ID4+PiArICogICAgIFJTIGJpdCBvbiBhIGRlc2NyaXB0b3IgYnkgdGhl IGRyaXZlciB0cmFuc21pdCBmdW5jdGlvbi4NCj4gPj4+ICsgKiAgICAgVGhlICp0eF9yc190aHJl c2gqIHZhbHVlIHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRoZW4NCj4gPj4+ICsgKiAgICAgKnR4 X2ZyZWVfdGhyZXNoKiB2YWx1ZSwgYW5kIGJvdGggb2YgdGhlbSBzaG91bGQgYmUgbGVzcyB0aGVu DQo+ID4+PiArICogICAgICpuYl90eF9kZXNjKiAtIDMuDQo+ID4+IEknbSBub3Qgc3VyZSB0aGF0 IGV2ZXJ5dGhpbmcgYWJvdmUgbWFrZXMgc2Vuc2UgZm9yIGhhaXJwaW4gVHggcXVldWUuDQo+ID4+ DQo+ID4gWW91IGFyZSByaWdodCBub3QgYWxsIG9mIHRoZW0gbWFrZSBzZW5zZSwNCj4gPiBCdXQg c2luY2UgSSBkb24ndCBrbm93IG90aGVyIG5pY3MgSSBwcmVmZXIgdG8gZ2l2ZSB0aGVtIHRob3Nl IHZhbHVlcywgaWYgdGhleQ0KPiBuZWVkIHRoZW0uDQo+ID4gSWYgeW91IHdpc2ggSSBjYW4gY2hh bmdlIHRoZSBkb2N1bWVudGF0aW9uLg0KPiANCj4gRGVhZCBwYXJhbWV0ZXJzIGFyZSBub3Qgbmlj ZS4NCj4NCg0KU2VlIGNvbW1lbnRzIGFib3ZlLg0KIA0KPiA+Pj4gKyAqICAgLSBUaGUgKnR4cV9m bGFncyogbWVtYmVyIGNvbnRhaW5zIGZsYWdzIHRvIHBhc3MgdG8gdGhlIFRYIHF1ZXVlDQo+ID4+ IHNldHVwDQo+ID4+PiArICogICAgIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3Ig b2YgdGhlIFRYIHF1ZXVlLiBUaGlzIHNob3VsZCBiZQ0KPiA+PiBzZXQNCj4gPj4+ICsgKiAgICAg dG8gMCBpZiBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuDQo+ID4+PiArICog ICAgIFRoaXMgQVBJIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIGRlcHJlY2F0ZWQuIEFwcGxpY2F0 aW9ucw0KPiA+Pj4gKyAqICAgICBzaG91bGQgc2V0IGl0IHRvIEVUSF9UWFFfRkxBR1NfSUdOT1JF IGFuZCB1c2UNCj4gPj4+ICsgKiAgICAgdGhlIG9mZmxvYWRzIGZpZWxkIGJlbG93Lg0KPiA+PiBU aGVyZSBpcyBubyB0eHFfZmxhZ3MgZm9yIGEgbG9uZyB0aW1lIGFscmVhZHkuIFNvLCBJJ20gd29u ZGVyaW5nIHdoZW4gaXQgd2FzDQo+ID4+IGNvcGllcyBmcm9tIHJ0ZV9ldGhfdHhfcXVldWVfc2V0 dXAoKS4NCj4gPj4NCj4gPiBNeSBiYWQgZnJvbSAxNy4xMS4gd2lsbCBmaXguDQo+ID4NCj4gPj4+ ICsgKiAgIC0gVGhlICpvZmZsb2FkcyogbWVtYmVyIGNvbnRhaW5zIFR4IG9mZmxvYWRzIHRvIGJl IGVuYWJsZWQuDQo+ID4+PiArICogICAgIElmIGFuIG9mZmxvYWRpbmcgc2V0IGluIHR4X2NvbmYt Pm9mZmxvYWRzDQo+ID4+PiArICogICAgIGhhc24ndCBiZWVuIHNldCBpbiB0aGUgaW5wdXQgYXJn dW1lbnQgZXRoX2NvbmYtPnR4bW9kZS5vZmZsb2Fkcw0KPiA+Pj4gKyAqICAgICB0byBydGVfZXRo X2Rldl9jb25maWd1cmUoKSwgaXQgaXMgYSBuZXcgYWRkZWQgb2ZmbG9hZGluZywgaXQgbXVzdCBi ZQ0KPiA+Pj4gKyAqICAgICBwZXItcXVldWUgdHlwZSBhbmQgaXQgaXMgZW5hYmxlZCBmb3IgdGhl IHF1ZXVlLg0KPiA+Pj4gKyAqICAgICBObyBuZWVkIHRvIHJlcGVhdCBhbnkgYml0IGluIHR4X2Nv bmYtPm9mZmxvYWRzIHdoaWNoIGhhcyBhbHJlYWR5DQo+ID4+IGJlZW4NCj4gPj4+ICsgKiAgICAg ZW5hYmxlZCBpbiBydGVfZXRoX2Rldl9jb25maWd1cmUoKSBhdCBwb3J0IGxldmVsLiBBbiBvZmZs b2FkaW5nDQo+ID4+IGVuYWJsZWQNCj4gPj4+ICsgKiAgICAgYXQgcG9ydCBsZXZlbCBjYW4ndCBi ZSBkaXNhYmxlZCBhdCBxdWV1ZSBsZXZlbC4NCj4gPj4gV2hpY2ggb2ZmbG9hZHMgZG8gcmVhbGx5 IG1ha2Ugc2Vuc2UgYW5kIHZhbGlkIHRvIHVzZSBmb3IgaGFpcnBpbiBUeCBxdWV1ZXM/DQo+ID4+ IERvIHdlIG5lZWQgc2VwYXJhdGUgY2FwcyBmb3IgaGFpcnBpbiBvZmZsb2Fkcz8NCj4gPj4NCj4g PiBJJ20gc3VyZSB0aGF0IHdlIHdpbGwgbmVlZCBjYXBzIGZvciBleGFtcGxlIFFvUyBidXQgSSBk b24ndCBrbm93IHdoaWNoIHlldC4NCj4gDQo+IFNhbWUgYXMgUnguDQo+DQoNCkFncmVlIHBsZWFz ZSBzZWUgY29tbWVudHMgYWJvdmUuDQogDQo+ID4+PiArICoNCj4gPj4+ICsgKiAgICAgTm90ZSB0 aGF0IHNldHRpbmcgKnR4X2ZyZWVfdGhyZXNoKiBvciAqdHhfcnNfdGhyZXNoKiB2YWx1ZSB0byAw DQo+ID4+IGZvcmNlcw0KPiA+Pj4gKyAqICAgICB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gdG8gdXNl IGRlZmF1bHQgdmFsdWVzLg0KPiA+Pj4gKyAqIEBwYXJhbSBoYWlycGluX2NvbmYNCj4gPj4+ICsg KiAgIFRoZSBoYWlycGluIGJpbmRpbmcgY29uZmlndXJhdGlvbi4NCj4gPj4+ICsgKg0KPiA+Pj4g KyAqIEByZXR1cm4NCj4gPj4+ICsgKiAgIC0gMDogU3VjY2VzcywgdGhlIHRyYW5zbWl0IHF1ZXVl IGlzIGNvcnJlY3RseSBzZXQgdXAuDQo+ID4+PiArICogICAtIC1FTk9NRU06IFVuYWJsZSB0byBh bGxvY2F0ZSB0aGUgdHJhbnNtaXQgcmluZyBkZXNjcmlwdG9ycy4NCj4gPj4+ICsgKi8NCj4gPj4+ ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4+ICtpbnQgcnRlX2V0aF90eF9oYWlycGluX3F1ZXVl X3NldHVwDQo+ID4+PiArCSh1aW50MTZfdCBwb3J0X2lkLCB1aW50MTZfdCB0eF9xdWV1ZV9pZCwN Cj4gPj4+ICsJIHVpbnQxNl90IG5iX3R4X2Rlc2MsIHVuc2lnbmVkIGludCBzb2NrZXRfaWQsDQo+ ID4+PiArCSBjb25zdCBzdHJ1Y3QgcnRlX2V0aF90eGNvbmYgKnR4X2NvbmYsDQo+ID4+PiArCSBj b25zdCBzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgKmhhaXJwaW5fY29uZik7DQo+ID4+PiAr DQo+ID4+PiArLyoqDQo+ID4+PiAgICAgKiBSZXR1cm4gdGhlIE5VTUEgc29ja2V0IHRvIHdoaWNo IGFuIEV0aGVybmV0IGRldmljZSBpcyBjb25uZWN0ZWQNCj4gPj4+ICAgICAqDQo+ID4+PiAgICAg KiBAcGFyYW0gcG9ydF9pZA0KPiA+Pj4NCj4gPj4gW3NuaXBdDQoNClRoYW5rcywNCk9yaQ0K