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 5EE1FA04E7; Mon, 2 Nov 2020 11:49:38 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D7DBBBE71; Mon, 2 Nov 2020 11:49:36 +0100 (CET) Received: from hqnvemgate24.nvidia.com (hqnvemgate24.nvidia.com [216.228.121.143]) by dpdk.org (Postfix) with ESMTP id A81E3BE49 for ; Mon, 2 Nov 2020 11:49:34 +0100 (CET) Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate24.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Mon, 02 Nov 2020 02:49:36 -0800 Received: from HQMAIL107.nvidia.com (172.20.187.13) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 2 Nov 2020 10:49:29 +0000 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (104.47.38.57) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Mon, 2 Nov 2020 10:49:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LsCuUnihvo5ofHWKHnM29nTZA6BCRK3GeyuND3E+RC8EJueBTLjibEGsjC/q7TdWfH8pgFpHpoadIWq+Az6x3HJLV03/nEap2XlkSIQ7JjW05cLJFaydaMZFwKk7VHzkBapGlwk0fFIHDuOTekqk4sMV7qKymIwqvGV7MKVsZmi6X1il/jaZpQK2Lafc1BcrpkEo3O0Ljyqn+zDO2fgqpbJ1rDp4CSkGCuayJrMfb7zFYp9u/+EzZSqepGDwQcB11vH/62UxXOdQXnDTu6LRnapzLcDWgmjljUcMiT1hQ7/4mmAjz4JS59zWGCDXUwiSkuU+5HCVLvWzA52gGqTllw== 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=baDIPMAVL7DQm6XmDMwoxJjGWxmIbpp9KUI7GQHFMJw=; b=BmdcuYhiLbW+B4/LyqhVrSNWXrOFL+HiUo76u3stCKcSzO5g3kiF+YU3k6OQAx/FLoyDb5spQVqG25yGSNTZ6N1QZYkEFE/10gFsmUXS4cedLrKU9EUWgTOClVioM+jxc/6c0JaYyFps3VWirLhbQ4Kj72GUQjjNoo77jSmpdQ3GThoPGCaZ/RuPZtnhLMJ5UScl9KZupK2N73gbU5MZr4hJTRzkam9ERLgfn/St23ZL6PED/wKfd+IlwKshKx2pi/Ja/HPnWNzEWbc7opXDr8yEY5zAWHOp6tyfZ59MtAOA0BSiAvGPwyK5FpOV8ffUsv721eljF6eJC1XWuKQa8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none Received: from MWHPR1201MB2525.namprd12.prod.outlook.com (2603:10b6:300:e0::19) by MWHPR12MB1871.namprd12.prod.outlook.com (2603:10b6:300:10b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.18; Mon, 2 Nov 2020 10:49:24 +0000 Received: from MWHPR1201MB2525.namprd12.prod.outlook.com ([fe80::8c0a:69c1:9821:2759]) by MWHPR1201MB2525.namprd12.prod.outlook.com ([fe80::8c0a:69c1:9821:2759%12]) with mapi id 15.20.3499.030; Mon, 2 Nov 2020 10:49:24 +0000 From: Andrey Vesnovaty To: Andrew Rybchenko , Ori Kam , "Kinsella, Ray" , "dev@dpdk.org" CC: "thomas@nvidia.net" , Slava Ovsiienko , "andrey.vesnovaty@gmail.com" , Oz Shlomo , Eli Britstein , Alex Rosenbaum , Roni Bar Yanai , Ray Kinsella , Neil Horman , Ferruh Yigit Thread-Topic: [RFC 3/3] sft: introduce API Thread-Index: AQHWjFfX1x2lfNYI0U2f8JSrQv2zrKluBjUAgEbpWmA= Date: Mon, 2 Nov 2020 10:49:23 +0000 Message-ID: References: <20200909203008.25563-1-andreyv@nvidia.com> <20200909203008.25563-4-andreyv@nvidia.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: solarflare.com; dkim=none (message not signed) header.d=none;solarflare.com; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [87.71.166.21] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5695bf4f-a656-4686-aa1b-08d87f1cf640 x-ms-traffictypediagnostic: MWHPR12MB1871: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: KMFkNNz5JXd7/0MqYz4oCwcYu0nvflusKOCZ6YtBzSYGFFyiklRUcuFOl54AUy6Jx13QErwODlHb+sU88Hif3g1UYMCfr9AT/KRMleyR4H0KyVv5QYgrr9aU/u9fd1vfENDhT68pNNB9w1dhEHpHOFPxRgR1EUuiC1WJjEwZbFNnZN7E5+GOAw9Kx0FcfgZQEvyNqjZDBaqkrq7FCZdZeaoVmkR4zzdAiT4LOVamqlYeR8WhycTORUF2hjBqHvGbzAWlKP2LM4XqBBxJcehF69NyZoOTKVB3ztilluPc6F+t0Lm2DY9VyCZ0D6JuDbrA8Fqirq11PM8FU0tEs1eU7w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR1201MB2525.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(346002)(39860400002)(366004)(136003)(376002)(54906003)(8676002)(83380400001)(2906002)(186003)(316002)(33656002)(86362001)(26005)(110136005)(478600001)(55016002)(4326008)(7696005)(6506007)(53546011)(71200400001)(66946007)(64756008)(66476007)(52536014)(66446008)(66556008)(30864003)(8936002)(76116006)(5660300002)(9686003)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: ++5+1UHlZqT41BeWBsb4WMhq5Z2y2YHMQbnRdo9E/vqu9fC5w0t/xlCUG3IBfULEie7sHWLHLJlglB8j61kpE6bxs/1nHTsty1onP42LO2/1e52tFwXVCk4ZcoT1wN0DZl9afB9mSzCGJ5y5WoStfudvd/E7EAatvTMAa1cikz/M4qSSN25D9Y1fdAhOuOcsUvoMFDrhzHkOG3oqbIdmt8cOT+6h8Cs5AjrbDPUw0yDAW/l4O0RRU4ceYdc/+0fu7X9WkHrLDD57QYGWL+hYZbmldRYtj5677uTn/P3f6hE1By+oVh6F3KsunuzE5ALk1/dIpc+OR2iqAnDFL3h+n0ukqG6wArgSd7eq9F35Puv4BJfUvtGfAZUnuZNyz0NhaHjW+T3zJmrzhItcIv/5MAvYEmWaankPVMJ+o45ToP/ZkRNwxrUTd++ISFZVEZDnpnbM7VB7TXvd0fjeaSAWnbVL6RGaxNB+8yELkju0vYMuHt/Oc+EBmUHZNeVPM/NIf7SkX8xN5U4RFFBlI8zGVGWxKYXLGeIkUQk15/g5iUNFb6LS0GHhtfOSEHQY1zCZkjZTfNBPbOifwPfy69dsBfKyXTDcf2miN1HWa0KBExheNSFrZbU+mAkW59WZppnnZlv/y0sxwEL7tHU/eAekPA== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR1201MB2525.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5695bf4f-a656-4686-aa1b-08d87f1cf640 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Nov 2020 10:49:23.8070 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ha41fDGqPjmbCgPtFOq7wYfzG8QySWmYqsCPg9dQRhSYzNBAx6xmsqgWaWSd9WKTQOo8u+kUh4oFMK7Xz0TulA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1871 X-OriginatorOrg: Nvidia.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1604314176; bh=baDIPMAVL7DQm6XmDMwoxJjGWxmIbpp9KUI7GQHFMJw=; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To: CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References: In-Reply-To:Accept-Language:Content-Language:X-MS-Has-Attach: X-MS-TNEF-Correlator:authentication-results:x-originating-ip: x-ms-publictraffictype:x-ms-office365-filtering-correlation-id: x-ms-traffictypediagnostic:x-ms-exchange-transport-forked: x-microsoft-antispam-prvs:x-ms-oob-tlc-oobclassifiers: x-ms-exchange-senderadcheck:x-microsoft-antispam: x-microsoft-antispam-message-info:x-forefront-antispam-report: x-ms-exchange-antispam-messagedata:Content-Type: Content-Transfer-Encoding:MIME-Version: X-MS-Exchange-CrossTenant-AuthAs: X-MS-Exchange-CrossTenant-AuthSource: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-originalarrivaltime: X-MS-Exchange-CrossTenant-fromentityheader: X-MS-Exchange-CrossTenant-id:X-MS-Exchange-CrossTenant-mailboxtype: X-MS-Exchange-CrossTenant-userprincipalname: X-MS-Exchange-Transport-CrossTenantHeadersStamped:X-OriginatorOrg; b=RfDn7ef7IyLSwqsBARKDBftrg1XtpeUPz0VfFK485zQzvloXFkZFSFfRfkW9b7Amg klfCD84U132XxX6RLFC1AeMYlt+ffd5AaaZaXt5Z5xrPmTh7tbqmPB7GCePzvfsjBi xYRkSoQhEVu7xWoHg9FS6lKuK8vz3Ks4F5JyMNuet1ZSFOry30q/gOv0rNZNsL96g6 /szslYHQRQ71PqrDZ9wfU3AqFT+myDbdujDdGSCOqDCyUJmmnyKG9ot3jhaZZV2JOw hpD2o4e6lmYIgAgw4PVPeDjtJORS/xN2APm8V3I12OfBIu0clsx4/oLOkck8t4L6Jw aT9W1vk4K6fiQ== Subject: Re: [dpdk-dev] [RFC 3/3] sft: introduce API 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" SGkgQW5kcmV3LCBSYXkgYW5kIGV2ZXJ5Ym9keSByZXZpZXdpbmcgU0ZUIFJGQyBwYXRjaCBzZXJp ZXMuDQoNCkFueXRoaW5nIHlvdSBjb21tZW50cyB0byB0aGlzIHBhdGNoc2V0IGNvdXBsZWQgd2l0 aCBvdGhlciBvcGVuIGlzc3Vlcw0KbWFkZSBtZSAmIE9yaSByZXRoaW5rIHRoZSBzdWdnZXN0ZWQg QVBJLg0KT3JpIGlzIGFib3V0IHRvIHB1Ymxpc2ggVjIgZm9yIFNGVCBSRkMgdmVyeSBzb29uIGFk ZHJlc3NpbmcgYWwgdGhlIG1lbnRpb25lZA0KYWJvdmUuICAgDQoNClRoYW5rcywNCkFuZHJleQ0K DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFuZHJldyBSeWJjaGVua28g PGFyeWJjaGVua29Ac29sYXJmbGFyZS5jb20+DQo+IFNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDE4 LCAyMDIwIDEwOjQ0IEFNDQo+IFRvOiBPcmkgS2FtIDxvcmlrYUBudmlkaWEuY29tPjsgQW5kcmV5 IFZlc25vdmF0eSA8YW5kcmV5dkBudmlkaWEuY29tPjsNCj4gZGV2QGRwZGsub3JnDQo+IENjOiB0 aG9tYXNAbnZpZGlhLm5ldDsgU2xhdmEgT3ZzaWllbmtvIDx2aWFjaGVzbGF2b0BudmlkaWEuY29t PjsNCj4gYW5kcmV5LnZlc25vdmF0eUBnbWFpbC5jb207IE96IFNobG9tbyA8b3pzaEBudmlkaWEu Y29tPjsgRWxpIEJyaXRzdGVpbg0KPiA8ZWxpYnJAbnZpZGlhLmNvbT47IEFsZXggUm9zZW5iYXVt IDxhbGV4ckBudmlkaWEuY29tPjsgUm9uaSBCYXIgWWFuYWkNCj4gPHJvbmliYUBudmlkaWEuY29t PjsgUmF5IEtpbnNlbGxhIDxtZHJAYXNocm9lLmV1PjsgTmVpbCBIb3JtYW4NCj4gPG5ob3JtYW5A dHV4ZHJpdmVyLmNvbT47IEZlcnJ1aCBZaWdpdCA8ZmVycnVoLnlpZ2l0QGludGVsLmNvbT4NCj4g U3ViamVjdDogUmU6IFtSRkMgMy8zXSBzZnQ6IGludHJvZHVjZSBBUEkNCj4gDQo+IEhpIEFuZHJl eSwNCj4gDQo+IGxvb2tzIHZlcnkgaW50ZXJlc3RpbmcsIGJ1dCBhIGJpdCBoYXJkIHRvIHJldmll dy4NCj4gSSBob3BlIEknbGwgZG8gZGVlcGVyIHJldmlldyBvbiB0aGUgbmV4dCB2ZXJzaW9uLg0K PiBSaWdodCBub3QganVzdCBmZXcgY29zbWV0aWMgdGhpbmdzIHRvIG1ha2UgdGhlDQo+IG5leHQg dmVyc2lvbiBhIGJpdCBjbGVhcmVyLg0KPiANCj4gRG8geW91IHBsYW4gdG8gY3JlYXRlL3B1Ymxp c2ggYW4gZXhhbXBsZSBhcHBsaWN0aW9uDQo+IHdoaWNoIHVzZXMgdGhlIEFQSSBhbmQgZGVtb25z dHJhdGVzIGhvdyB0byBkbyBpdD8NCj4gDQo+IFBsZXNlZSwgc2VlIGJlbG93Lg0KPiANCj4gVGhh bmtzLA0KPiBBbmRyZXcuDQo+IA0KPiBPbiA5LzE2LzIwIDk6MzMgUE0sIE9yaSBLYW0gd3JvdGU6 DQo+ID4gSGkgQW5kZXJ5LA0KPiA+IFBTQg0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+ID4+IEZyb206IEFuZHJleSBWZXNub3ZhdHkgPGFuZHJleXZAbnZpZGlhLmNvbT4N Cj4gPj4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgOSwgMjAyMCAxMTozMCBQTQ0KPiA+PiBU bzogZGV2QGRwZGsub3JnDQo+ID4+IFN1YmplY3Q6IFtSRkMgMy8zXSBzZnQ6IGludHJvZHVjZSBB UEkNCj4gPj4NCj4gPj4gRGVmaW5lcyBSVEUgU0ZUIEFQSXMgZm9yIFN0YXRlZnVsbCBGbG93IFRh YmxlIGxpYnJhcnkuDQo+ID4+DQo+ID4+IFNGVCBHZW5lcmFsIGRlc2NyaXB0aW9uOg0KPiA+PiBT RlQgbGlicmFyeSBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgYXBwbGljYXRpb25zIHRoYXQgbmVl ZCB0byBtYWludGFpbg0KPiA+PiBjb250ZXh0IGFjcm9zcyBkaWZmZXJlbnQgcGFja2V0cyBvZiB0 aGUgY29ubmVjdGlvbi4NCj4gPj4gRXhhbXBsZXMgZm9yIHN1Y2ggYXBwbGljYXRpb25zOg0KPiA+ PiAtIE5leHQtZ2VuZXJhdGlvbiBmaXJld2FsbHMNCj4gPj4gLSBJbnRydXNpb24gZGV0ZWN0aW9u L3ByZXZlbnRpb24gc3lzdGVtcyAoSURTL0lQUyk6IFN1cmljYXRhLCBzbm9ydA0KPiA+PiAtIFNX L1ZpcnR1YWwgU3dpdGNoaW5nOiBPVlMNCj4gPj4gVGhlIGdvYWxzIG9mIHRoZSBTRlQgbGlicmFy eToNCj4gPj4gLSBBY2NlbGVyYXRlIGZsb3cgcmVjb2duaXRpb24gJiBpdHMgY29udGV4dCByZXRy aWV2YWwgZm9yIGZ1cnRoZXINCj4gPj4gICBsb29rYXNpZGUgcHJvY2Vzc2luZy4NCj4gPj4gLSBF bmFibGUgY29udGV4dC1hd2FyZSBmbG93IGhhbmRsaW5nIG9mZmxvYWQuDQo+ID4+DQo+ID4+IFNp Z25lZC1vZmYtYnk6IEFuZHJleSBWZXNub3ZhdHkgPGFuZHJleXZAbnZpZGlhLmNvbT4NCj4gPj4g LS0tDQo+ID4+ICBsaWIvbGlicnRlX3NmdC9NYWtlZmlsZSAgICAgICAgICAgIHwgIDI4ICsNCj4g Pj4gIGxpYi9saWJydGVfc2Z0L21lc29uLmJ1aWxkICAgICAgICAgfCAgIDcgKw0KPiA+PiAgbGli L2xpYnJ0ZV9zZnQvcnRlX3NmdC5jICAgICAgICAgICB8ICAgOSArDQo+ID4+ICBsaWIvbGlicnRl X3NmdC9ydGVfc2Z0LmggICAgICAgICAgIHwgODQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrDQo+ID4+ICBsaWIvbGlicnRlX3NmdC9ydGVfc2Z0X2RyaXZlci5oICAgIHwgMTk1ICsrKysr KysNCj4gPj4gIGxpYi9saWJydGVfc2Z0L3J0ZV9zZnRfdmVyc2lvbi5tYXAgfCAgMjEgKw0KPiA+ PiAgNiBmaWxlcyBjaGFuZ2VkLCAxMTA1IGluc2VydGlvbnMoKykNCj4gPj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWIvbGlicnRlX3NmdC9NYWtlZmlsZQ0KPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9saWJydGVfc2Z0L21lc29uLmJ1aWxkDQo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2xpYnJ0ZV9zZnQvcnRlX3NmdC5jDQo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0 ZV9zZnQvcnRlX3NmdC5oDQo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9zZnQv cnRlX3NmdF9kcml2ZXIuaA0KPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfc2Z0 L3J0ZV9zZnRfdmVyc2lvbi5tYXANCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVf c2Z0L01ha2VmaWxlIGIvbGliL2xpYnJ0ZV9zZnQvTWFrZWZpbGUNCj4gPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPj4gaW5kZXggMDAwMDAwMDAwMC4uMjNjNmVlZTg0OQ0KPiA+PiAtLS0gL2Rl di9udWxsDQo+ID4+ICsrKyBiL2xpYi9saWJydGVfc2Z0L01ha2VmaWxlDQo+ID4+IEBAIC0wLDAg KzEsMjggQEANCj4gPj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0K PiA+PiArIyBDb3B5cmlnaHQgMjAyMCBNZWxsYW5veCBUZWNobm9sb2dpZXMsIEx0ZA0KPiA+PiAr DQo+ID4+ICtpbmNsdWRlICQoUlRFX1NESykvbWsvcnRlLnZhcnMubWsNCj4gPj4gKw0KPiA+PiAr IyBsaWJyYXJ5IG5hbWUNCj4gPj4gK0xJQiA9IGxpYnJ0ZV9zZnQuYQ0KPiA+PiArDQo+ID4+ICsj IGxpYnJhcnkgdmVyc2lvbg0KPiA+PiArTElCQUJJVkVSIDo9IDENCj4gPj4gKw0KPiA+PiArIyBi dWlsZCBmbGFncw0KPiA+PiArQ0ZMQUdTICs9IC1PMw0KPiA+PiArQ0ZMQUdTICs9ICQoV0VSUk9S X0ZMQUdTKQ0KPiA+PiArTERMSUJTICs9IC1scnRlX2VhbCAtbHJ0ZV9tYnVmDQo+ID4+ICsNCj4g Pj4gKyMgbGlicmFyeSBzb3VyY2UgZmlsZXMNCj4gPj4gKyMgYWxsIHNvdXJjZSBhcmUgc3RvcmVk IGluIFNSQ1MteQ0KPiA+PiArU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX1JFR0VYREVWKSA6PSBy dGVfc2Z0LmMNCj4gPj4gKw0KPiA+PiArIyBleHBvcnQgaW5jbHVkZSBmaWxlcw0KPiA+PiArU1lN TElOSy0kKENPTkZJR19SVEVfTElCUlRFX1JFR0VYREVWKS1pbmNsdWRlICs9IHJ0ZV9zZnQuaA0K PiA+PiArU1lNTElOSy0kKENPTkZJR19SVEVfTElCUlRFX1JFR0VYREVWKS1pbmNsdWRlICs9IHJ0 ZV9zZnRfZHJpdmVyLmgNCj4gPj4gKw0KPiA+PiArIyB2ZXJzaW9uaW5nIGV4cG9ydCBtYXANCj4g Pj4gK0VYUE9SVF9NQVAgOj0gcnRlX3NmdF92ZXJzaW9uLm1hcA0KPiA+PiArDQo+ID4+ICtpbmNs dWRlICQoUlRFX1NESykvbWsvcnRlLmxpYi5taw0KPiA+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0 ZV9zZnQvbWVzb24uYnVpbGQgYi9saWIvbGlicnRlX3NmdC9tZXNvbi5idWlsZA0KPiA+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+PiBpbmRleCAwMDAwMDAwMDAwLi5iMjEwZTQzZjI5DQo+ID4+ IC0tLSAvZGV2L251bGwNCj4gPj4gKysrIGIvbGliL2xpYnJ0ZV9zZnQvbWVzb24uYnVpbGQNCj4g Pj4gQEAgLTAsMCArMSw3IEBADQo+ID4+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt My1DbGF1c2UNCj4gPj4gKyMgQ29weXJpZ2h0IDIwMjAgTWVsbGFub3ggVGVjaG5vbG9naWVzLCBM dGQNCj4gPj4gKw0KPiA+PiArc291cmNlcyA9IGZpbGVzKCdydGVfc2Z0LmMnKQ0KPiA+PiAraGVh ZGVycyA9IGZpbGVzKCdydGVfc2Z0LmgnLA0KPiA+PiArCSdydGVfc2Z0X2RyaXZlci5oJykNCj4g Pj4gK2RlcHMgKz0gWydtYnVmJ10NCj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfc2Z0L3J0 ZV9zZnQuYyBiL2xpYi9saWJydGVfc2Z0L3J0ZV9zZnQuYw0KPiA+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+PiBpbmRleCAwMDAwMDAwMDAwLi5mM2QzOTQ1NTQ1DQo+ID4+IC0tLSAvZGV2L251 bGwNCj4gPj4gKysrIGIvbGliL2xpYnJ0ZV9zZnQvcnRlX3NmdC5jDQo+ID4+IEBAIC0wLDAgKzEs OSBAQA0KPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ PiArICogQ29weXJpZ2h0IDIwMjAgTWVsbGFub3ggVGVjaG5vbG9naWVzLCBMdGQNCj4gPj4gKyAq Lw0KPiA+PiArDQo+ID4+ICsNCj4gPj4gKyNpbmNsdWRlICJydGVfc2Z0LmgiDQo+ID4+ICsjaW5j bHVkZSAicnRlX3NmdF9kcml2ZXIuaCINCj4gPj4gKw0KPiA+PiArLyogUGxhY2Vob2xkZXIgZm9y IFJURSBTRlQgbGlicmFyeSBBUElzIGltcGxlbWVudGF0aW9uICovDQo+ID4+IGRpZmYgLS1naXQg YS9saWIvbGlicnRlX3NmdC9ydGVfc2Z0LmggYi9saWIvbGlicnRlX3NmdC9ydGVfc2Z0LmgNCj4g Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4gaW5kZXggMDAwMDAwMDAwMC4uNWM5ZjkyZWE5 Zg0KPiA+PiAtLS0gL2Rldi9udWxsDQo+ID4+ICsrKyBiL2xpYi9saWJydGVfc2Z0L3J0ZV9zZnQu aA0KPiA+PiBAQCAtMCwwICsxLDg0NSBAQA0KPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0zLUNsYXVzZQ0KPiA+PiArICogQ29weXJpZ2h0IDIwMjAgTWVsbGFub3ggVGVjaG5v bG9naWVzLCBMdGQNCj4gPj4gKyAqLw0KPiA+PiArDQo+ID4+ICsjaWZuZGVmIF9SVEVfU0ZUX0hf DQo+ID4+ICsjZGVmaW5lIF9SVEVfU0ZUX0hfDQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICog QGZpbGUNCj4gPj4gKyAqDQo+ID4+ICsgKiBSVEUgU0ZUIEFQSQ0KPiA+PiArICoNCj4gPj4gKyAq IERlZmluZXMgUlRFIFNGVCBBUElzIGZvciBTdGF0ZWZ1bGwgRmxvdyBUYWJsZSBsaWJyYXJ5Lg0K PiA+PiArICoNCj4gPj4gKyAqIFNGVCBHZW5lcmFsIGRlc2NyaXB0aW9uOg0KPiA+PiArICogU0ZU IGxpYnJhcnkgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQg dG8gbWFpbnRhaW4NCj4gPj4gKyAqIGNvbnRleHQgYWNyb3NzIGRpZmZlcmVudCBwYWNrZXRzIG9m IHRoZSBjb25uZWN0aW9uLg0KPiA+PiArICogRXhhbXBsZXMgZm9yIHN1Y2ggYXBwbGljYXRpb25z Og0KPiA+PiArICogLSBOZXh0LWdlbmVyYXRpb24gZmlyZXdhbGxzDQo+ID4+ICsgKiAtIEludHJ1 c2lvbiBkZXRlY3Rpb24vcHJldmVudGlvbiBzeXN0ZW1zIChJRFMvSVBTKTogU3VyaWNhdGEsIFNu b3J0DQo+ID4+ICsgKiAtIFNXL1ZpcnR1YWwgU3dpdGNoaW5nOiBPVlMNCj4gPj4gKyAqIFRoZSBn b2FscyBvZiB0aGUgU0ZUIGxpYnJhcnk6DQo+ID4+ICsgKiAtIEFjY2VsZXJhdGUgZmxvdyByZWNv Z25pdGlvbiAmIGl0cyBjb250ZXh0IHJldHJpZXZhbCBmb3IgZnVydGhlciBsb29rYXNpZGUNCj4g DQo+IGxvb2thc2lkZSAtPiBsb29rLWFzaWRlDQo+IA0KPiA+PiArICogICBwcm9jZXNzaW5nLg0K PiA+PiArICogLSBFbmFibGUgY29udGV4dC1hd2FyZSBmbG93IGhhbmRsaW5nIG9mZmxvYWQuDQo+ ID4+ICsgKg0KPiA+PiArICogRGVmaW5pdGlvbnMgYW5kIEFiYnJldmlhdGlvbnM6DQo+ID4+ICsg KiAtIDUtdHVwbGU6IGRlZmluZWQgYnk6DQo+ID4+ICsgKiAgICAgLS0gU291cmNlIElQIGFkZHJl c3MNCj4gPj4gKyAqICAgICAtLSBTb3VyY2UgcG9ydA0KPiA+PiArICogICAgIC0tIERlc3RpbmF0 aW9uIElQIGFkZHJlc3MNCj4gPj4gKyAqICAgICAtLSBEZXN0aW5hdGlvbiBwb3J0DQo+ID4+ICsg KiAgICAgLS0gSVAgcHJvdG9jb2wgbnVtYmVyDQo+ID4+ICsgKiAtIDctdHVwbGU6IDUtdHVwbGUg em9uZSBhbmQgcG9ydCAoc2VlIHN0cnVjdCBydGVfc2Z0Xzd0dXBsZSkNCj4gDQo+IEkgZ3Vlc3Mg Y29tbWEgaXMgbWlzc2luZyBhZnRlciAiNS10dXBsZSIsIHNpbmNlIEkgcmVhZCBpdCBhcw0KPiAi NS10dXBsZSB6b25lIj8/Pw0KPiANCj4gPj4gKyAqIC0gNS83LXR1cGxlOiA1LzctdHVwbGUgb2Yg dGhlIHBhY2tldCBmcm9tIGNvbm5lY3Rpb24gaW5pdGlhdG9yDQo+ID4+ICsgKiAtIHJldmVycyA1 LzctdHVwbGU6IDUvNy10dXBsZSBvZiB0aGUgcGFja2V0IGZyb20gY29ubmVjdGlvbiBpbml0aWF0 ZQ0KPiA+PiArICogLSBhcHBsaWNhdGlvbjogU0ZUIGxpYnJhcnkgQVBJIGNvbnN1bWVyDQo+ID4+ ICsgKiAtIEFQUDogc2VlIGFwcGxpY2F0aW9uDQo+ID4+ICsgKiAtIENJRDogY2xpZW50IElEDQo+ ID4+ICsgKiAtIENUOiBjb25uZWN0aW9uIHRyYWNraW5nDQo+ID4+ICsgKiAtIEZJRDogRmxvdyBp ZGVudGlmaWVyDQo+ID4+ICsgKiAtIEZJRjogRmlyc3QgSW4gRmxvdw0KPiA+PiArICogLSBGbG93 OiBkZWZpbmVkIGJ5IDctdHVwbGUgYW5kIGl0cyByZXZlcnNlIGkuZS4gZmxvdyBpcyBiaWRpcmVj dGlvbmFsDQo+ID4+ICsgKiAtIFNGVDogU3RhdGVmdWwgRmxvdyBUYWJsZQ0KPiA+PiArICogLSB1 c2VyOiBzZWUgYXBwbGljYXRpb24NCj4gPj4gKyAqIC0gem9uZTogYWRkaXRpb25hbCB1c2VyIGRl ZmluZWQgdmFsdWUgdXNlZCBhcyBkaWZmZXJlbnRpYXRvciBmb3INCj4gPj4gKyAqICAgICAgICAg Y29ubmVjdGlvbnMgaGF2aW5nIHNhbWUgNS10dXBsZSAoZm9yIGV4YW1wbGUgZGlmZmVyZW50IFZ4 TGFuDQo+IA0KPiBWeExhbiAtPiBWWExBTiAoc2VlIGRldnRvb2xzL3dvcmRzLWNhc2UudHh0KQ0K PiANCj4gPj4gKyAqICAgICAgICAgY29ubmVjdGlvbnMgd2l0aCBzYW1lIGlubmVyIDUtdHVwbGUp Lg0KPiA+PiArICoNCj4gPj4gKyAqIFNGVCBjb21wb25lbnRzOg0KPiA+PiArICoNCj4gPj4gKyAq ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gPj4gKyAqIHwgUlRFIGZs b3cgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gPj4gKyAqIHwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwNCj4gPj4gKyAqIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rIHwgICstLS0tLS0tLS0tLS0tLS0tKw0KPiA+PiArICogfCB8IGdyb3VwIFggICAg ICAgICAgICAgICAgICAgICAgIHwgfCAgfCBSVEVfU0ZUICAgICAgICB8DQo+ID4+ICsgKiB8IHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICB8ICAgICAgICAgICAgICAgIHwNCj4g Pj4gKyAqIHwgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwgIHwgICAgICAgICAg ICAgICAgfA0KPiA+PiArICogfCB8IHwgcnVsZSAuLi4gICAgICAgICAgICAgICAgICB8IHwgfCAg fCAgICAgICAgICAgICAgICB8DQo+ID4+ICsgKiB8IHwgfCAuICAgICAgICAgICAgICAgICAgICAg ICAgIHwgfCB8ICArLS0tLS0tLS0tLS0rLS0tLSsNCj4gPj4gKyAqIHwgfCB8IC4gICAgICAgICAg ICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgIHwNCj4gPj4gKyAqIHwgfCB8IC4gICAg ICAgICAgICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgZW50cnkNCj4gPj4gKyAqIHwgfCAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwgICAgICAgICAgICBjcmVhdGUNCj4gPj4g KyAqIHwgfCB8IHJ1bGUgICAgICAgICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgIHwN Cj4gPj4gKyAqIHwgfCB8ICAgcGF0dGVybnMgLi4uICAgICAgICAgICAgKy0tLS0tLS0tLSsgICAg ICAgIHwNCj4gPj4gKyAqIHwgfCB8ICAgYWN0aW9ucyAgICAgICAgICAgICAgICAgfCB8IHwgICAg IHwgICAgICAgIHwNCj4gPj4gKyAqIHwgfCB8ICAgICBTRlQgKHpvbmU9WikgICAgICAgICAgfCB8 IHwgICAgIHwgICAgICAgIHwNCj4gPj4gKyAqIHwgfCB8ICAgICBKVU1QIChncm91cD1ZKSAgICAg ICAgfCB8IHwgIGxvb2t1cCAgICAgIHwNCj4gPj4gKyAqIHwgfCArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKyB8IHwgICAgem9uZT1aLCAgIHwNCj4gPj4gKyAqIHwgfCB8IHJ1bGUgLi4uICAg ICAgICAgICAgICAgICAgfCB8IHwgICAgNXR1cGxlICAgIHwNCj4gPj4gKyAqIHwgfCB8IC4gICAg ICAgICAgICAgICAgICAgICAgICAgfCB8IHwgICAgIHwgICAgICAgIHwNCj4gPj4gKyAqIHwgfCB8 IC4gICAgICAgICAgICAgICAgICAgICAgICAgfCB8IHwgICstLXYtLS0tLS0tLS0tLS0tKw0KPiA+ PiArICogfCB8IHwgLiAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCAgfCBTRlQgICAgICAg fCAgICB8DQo+ID4+ICsgKiB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8ICB8 ICAgICAgICAgICB8ICAgIHwNCj4gPj4gKyAqIHwgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKyB8IHwgIHwgICAgICAgICstLXYtLSsgfA0KPiA+PiArICogfCB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgfCAgfCAgICAgICAgfCAgICAgfCB8DQo+ID4+ICsgKiB8ICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICB8ICAgICAgICB8IFBNRCB8IHwNCj4gPj4g KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgIHwgICAg IHwgfA0KPiA+PiArICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAg ICAgICAgKy0tLS0tKyB8DQo+ID4+ICsgKiB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKyB8ICB8ICAgICAgICAgICAgICAgIHwNCj4gPj4gKyAqIHwgfCBncm91cCBZICAgICAgICAg ICAgICAgICAgICAgICB8IHwgIHwgICAgICAgICAgICAgICAgfA0KPiA+PiArICogfCB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCBzZXQgZmxvdyBDVFggICB8DQo+ID4+ICsg KiB8IHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCB8ICB8ICAgICAgICAgICAgICAg IHwNCj4gPj4gKyAqIHwgfCB8IHJ1bGUgICAgICAgICAgICAgICAgICAgICAgfCB8IHwgICstLS0t LS0tLSstLS0tLS0tKw0KPiA+PiArICogfCB8IHwgICBwYXR0ZXJucyAgICAgICAgICAgICAgICB8 IHwgfCAgICAgICAgICAgfA0KPiA+PiArICogfCB8IHwgICAgIFNGVCAoc3RhdGU9VU5ERUZJTkVE KSB8IHwgfCAgICAgICAgICAgfA0KPiA+PiArICogfCB8IHwgICBhY3Rpb25zIFJTUyAgICAgICAg ICAgICB8IHwgfCAgICAgICAgICAgfA0KPiA+PiArICogfCB8ICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rIHwgfCAgICAgICAgICAgfA0KPiA+PiArICogfCB8IHwgcnVsZSAgICAgICAgICAg ICAgICAgICAgICB8IHwgfCAgICAgICAgICAgfA0KPiA+PiArICogfCB8IHwgICBwYXR0ZXJucyAg ICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgfA0KPiA+PiArICogfCB8IHwgICAgIFNGVCAo c3RhdGU9SU5WQUxJRCkgICB8IDwtLS0tLS0tLS0tLS0tKw0KPiA+PiArICogfCB8IHwgICBhY3Rp b25zIERST1AgICAgICAgICAgICB8IHwgfCAgZm9yd2FyZA0KPiA+PiArICogfCB8ICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgfCAgICBncm91cD1ZDQo+ID4+ICsgKiB8IHwgfCBydWxl ICAgICAgICAgICAgICAgICAgICAgIHwgfCB8DQo+ID4+ICsgKiB8IHwgfCAgIHBhdHRlcm5zICAg ICAgICAgICAgICAgIHwgfCB8DQo+ID4+ICsgKiB8IHwgfCAgICAgU0ZUIChzdGF0ZT1BQ0NFUFRF RCkgIHwgfCB8DQo+ID4+ICsgKiB8IHwgfCAgIGFjdGlvbnMgUE9SVCAgICAgICAgICAgIHwgfCB8 DQo+ID4+ICsgKiB8IHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCB8DQo+ID4+ICsg KiB8IHwgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8DQo+ID4+ICsgKiB8IHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8DQo+ID4+ICsgKiB8ICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKyB8DQo+ID4+ICsgKiB8ICAuLi4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8DQo+ID4+ICsgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8DQo+ID4+ICsgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ID4+ ICsgKg0KPiA+PiArICogU0ZUIGFzIGRhdGFzdHJ1Y3R1cmU6DQo+ID4+ICsgKiBTRlQgY2FuIGJl IHRyZWF0ZWQgYXMgZGF0YXN0cnVjdHVyZSBtYWludGFpbmluZyBmbG93IGNvbnRleHQgYWNyb3Nz IGl0cw0KPiA+PiArICogbGlmZXRpbWUuIFNGVCBmbG93IGVudHJ5IHJlcHJlc2VudCBiaWRpcmVj dGlvbmFsIG5ldHdvcmsgZmxvdyBhbmQgZGVmaW5lZA0KPiBieQ0KPiANCj4gcmVwcmVzZW50IC0+ IHJlcHJlc2VudHMNCj4gDQo+ID4+ICsgKiA3LXR1cGxlICYgaXRzIHJldmVyc2UgNy10dXBsZS4N Cj4gPj4gKyAqIEVhY2ggZW50cnkgaW4gU0ZUIGhhczoNCj4gPj4gKyAqIC0gRklEOiAxOjEgbWFw cGVkICYgdXNlZCBhcyBlbnRyeSBoYW5kbGUgJiBlbmNhcHN1bGF0aW5nIGludGVybmFsDQo+ID4+ ICsgKiAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBlbnRyeS4NCj4gPj4gKyAqIC0gU3RhdGU6IHVz ZXItZGVmaW5lZCB2YWx1ZSBhdHRhY2hlZCB0byBlYWNoIGVudHJ5LCB0aGUgb25seSBsaWJyYXJ5 DQo+ID4+ICsgKiAgIHJlc2VydmVkIHZhbHVlIGZvciBzdGF0ZSB1bnNldCAodGhlIGFjdHVhbCB2 YWx1ZSBkZWZpbmVkIGJ5IFNGVA0KPiA+PiArICogICBjb25maWd1cmF0aW9uKS4gVGhlIGFwcGxp Y2F0aW9uIHNob3VsZCBkZWZpbmUgZmxvdyBzdGF0ZSBlbmNvZGluZ3MgYW5kDQo+ID4+ICsgKiAg IHNldCBpdCBmb3IgZmxvdyB2aWEgcnRlX3NmdF9mbG93X3NldF9jdHgoKSB0aGFuIHdoYXQgYWN0 aW9ucyBzaG91bGQgYmUNCj4gPj4gKyAqICAgYXBwbGllZCBvbiBwYWNrZXRzIGNhbiBiZSBkZWZp bmVkIHZpYSByZWxhdGVkIFJURSBmbG93IHJ1bGUgbWF0Y2hpbmcgU0ZUDQo+ID4+ICsgKiAgIHN0 YXRlIChzZWUgcnVsZXMgaW4gU0ZUIGNvbXBvbmVudHMgZGlhZ3JhbSBhYm92ZSkuDQo+ID4+ICsg KiAtIFRpbWVzdGFtcDogZm9yIHRoZSBsYXN0IHNlZW4gaW4gZmxvdyBwYWNrZXQgdXNlZCBmb3Ig ZmxvdyBhZ2luZw0KPiBtZWNoYW5pc20NCj4gPj4gKyAqICAgaW1wbGVtZW50YXRpb24uDQo+ID4+ ICsgKiAtIENsaWVudCBPYmplY3RzOiB1c2VyLWRlZmluZWQgZmxvdyBjb250ZXh0cyBhdHRhY2hl ZCBhcyBvcGFxdWVzIHRvIGZsb3cuDQo+ID4+ICsgKiAtIEFjY2VsZXJhdGlvbiAmIG9mZmxvYWRp bmcgLSB1dGlsaXplIFJURSBmbG93IGNhcGFiaWxpdGllcywgd2hlbiBzdXBwb3J0ZWQNCj4gPj4g KyAqICAgKHNlZSBhY3Rpb24gYGBTRlRgYCksIGZvciBmbG93IGxvb2t1cCBhY2NlbGVyYXRpb24g YW5kIGZ1cnRoZXINCj4gPj4gKyAqICAgY29udGV4dC1hd2FyZSBmbG93IGhhbmRsaW5nIG9mZmxv YWQuDQo+ID4+ICsgKiAtIENUIHN0YXRlOiBvcHRpb25hbGx5IGZvciBUQ1AgY29ubmVjdGlvbnMg Q1Qgc3RhdGUgY2FuIGJlIG1haW50YWluZWQNCj4gPj4gKyAqICAgKHNlZSBlbnVtIHJ0ZV9zZnRf Zmxvd19jdF9zdGF0ZSkuDQo+ID4+ICsgKiAtIE91dCBvZiBvcmRlciBUQ1AgcGFja2V0czogb3B0 aW9uYWxseSBTRlQgY2FuIGtlZXAgb3V0IG9mIG9yZGVyIFRDUA0KPiA+PiArICogICBwYWNrZXRz IGFzaWRlIHRoZSBmbG93IGNvbnRleHQgdGlsbCB0aGUgYXJyaXZhbCBvZiB0aGUgbWlzc2luZyBp bi1vcmRlcg0KPiA+PiArICogICBwYWNrZXQuDQo+ID4+ICsgKg0KPiA+PiArICogUlRFIGZsb3cg Y2hhbmdlczoNCj4gPj4gKyAqIFRoZSBTRlQgZmxvdyBzdGF0ZSAob3IgY29udGV4dCkgZm9yIFJU RSBmbG93IGlzIGRlZmluZWQgYnkgZmllbGRzIG9mDQo+ID4+ICsgKiBzdHJ1Y3QgcnRlX2Zsb3df aXRlbV9zZnQuDQo+ID4+ICsgKiBUbyB1dGlsaXplIFNGVCBjYXBhYmlsaXRpZXMgbmV3IGl0ZW0g YW5kIGFjdGlvbiB0eXBlcyBpbnRyb2R1Y2VkOg0KPiA+PiArICogLSBpdGVtIFNGVDogbWF0Y2hp bmcgb24gU0ZUIGZsb3cgc3RhdGUgKHNlZSBSVEVfRkxPV19JVEVNX1RZUEVfU0ZUKS4NCj4gPj4g KyAqIC0gYWN0aW9uIFNGVDogcmV0cmlldmUgU0ZUIGZsb3cgY29udGV4dCBhbmQgYXR0YWNoZSBp dCB0byB0aGUgcHJvY2Vzc2VkDQo+ID4+ICsgKiAgIHBhY2tldCAoc2VlIFJURV9GTE9XX0FDVElP Tl9UWVBFX1NGVCkuDQo+ID4+ICsgKg0KPiA+PiArICogVGhlIGNvbnRlbnRzIG9mIHBlciBwb3J0 IFNGVCBzZXJ2aW5nIFJURSBmbG93IGFjdGlvbiBgYFNGVGBgIG1hbmFnZWQgdmlhDQo+ID4+ICsg KiBTRlQgUE1EIEFQSXMgKHNlZSBzdHJ1Y3QgcnRlX3NmdF9vcHMpLg0KPiA+PiArICogVGhlIFNG VCBmbG93IHN0YXRlL2NvbnRleHQgcmV0cmlldmFsIHBlcmZvcm1lZCBieSB1c2VyLWRlZmluZWQg em9uZQ0KPiBgYFNGVGBgDQo+ID4+ICsgKiBhY3Rpb24gYXJndW1lbnQgYW5kIHByb2Nlc3NlZCBw YWNrZXQgNS10dXBsZS4NCj4gPj4gKyAqIElmIGluIHNjb3BlIG9mIGFjdGlvbiBgYFNGVGBgIHRo ZXJlIGlzIG5vIGNvbnRleHQvc3RhdGUgZm9yIHRoZSBmbG93IGluIFNGVA0KPiA+PiArICogdW5k ZWZpbmVkIHNhdGUgYXR0YWNoZWQgdG8gdGhlIHBhY2tldCBtZWFuaW5nIHRoYXQgdGhlIGZsb3cg aXMgbm90DQo+ID4+ICsgKiByZWNvZ25pemVkIGJ5IFNGVCwgbW9zdCBwcm9iYWJseSBGSUYgcGFj a2V0Lg0KPiA+PiArICoNCj4gPj4gKyAqIE9uY2UgdGhlIFNGVCBzdGF0ZSBzZXQgZm9yIGEgcGFj a2V0IGl0IGNhbiBtYXRjaCBvbiBpdGVtIFNGVA0KPiA+PiArICogKHNlZSBSVEVfRkxPV19JVEVN X1RZUEVfU0ZUKSBhbmQgZm9yd2FyZGluZyBkZXNpZ24gY2FuIGJlIGRvbmUgZm9yDQo+IHRoZQ0K PiA+PiArICogcGFja2V0LCBmb3IgZXhhbXBsZToNCj4gPj4gKyAqIC0gaWYgc3RhdGUgdmFsdWUg PT0geCB0aGFuIHF1ZXVlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgYnkgdGhlIGFwcGxpY2F0aW9u DQo+ID4+ICsgKiAtIGlmIHN0YXRlIHZhbHVlID09IHkgdGhhbiBmb3J3YXJkIGl0IHRvIGV0aCBw b3J0IChmdWxsIG9mZmxvYWQpDQo+ID4+ICsgKiAtIGlmIHN0YXRlIHZhbHVlID09ICd1bmRlZmlu ZWQnIHRoYW4gcXVldWUgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBieQ0KPiA+PiArICogICB0aGUg YXBwbGljYXRpb24gKGhhbmRsZSBGSUYgcGFja2V0cykNCj4gPj4gKyAqDQo+ID4+ICsgKiBQcm9j ZXNzaW5nIHBhY2tldHMgd2l0aCBTRlQgbGlicmFyeToNCj4gPj4gKyAqDQo+ID4+ICsgKiBGSUYg cGFja2V0Og0KPiA+PiArICogVG8gcmVjb2duaXplIHVwY29taW5nIHBhY2tldHMgb2YgdGhlIFNG VCBmbG93IGV2ZXJ5IEZJRiBwYWNrZXQgc2hvdWxkIGJlDQo+ID4+ICsgKiBmb3J3YXJkZWQgdG8g dGhlIGFwcGxpY2F0aW9uIHV0aWxpemluZyB0aGUgU0ZUIGxpYnJhcnkuIE5vbi1GSUYgcGFja2V0 cyBjYW4NCj4gPj4gKyAqIGJlIHByb2Nlc3NlZCBieSB0aGUgYXBwbGljYXRpb24gb3IgaXRzIHBy b2Nlc3NpbmcgY2FuIGJlIGZ1bGx5IG9mZmxvYWRlZC4NCj4gPj4gKyAqIFByb2Nlc3Npbmcgb2Yg dGhlIHBhY2tldHMgaW4gU0ZUIGxpYnJhcnkgc3RhcnRzIHdpdGggcnRlX3NmdF9wcm9jZXNzX21i dWYNCj4gPj4gKyAqIG9yIHJ0ZV9zZnRfcHJvY2Vzc19tYnVmX3dpdGhfem9uZS4gSWYgbWJ1ZiBy ZWNvZ25pemVkIGFzIEZJRg0KPiBhcHBsaWNhdGlvbg0KPiA+PiArICogc2hvdWxkIG1ha2UgYSBk ZXNpZ24gdG8gZGVzdHJveSBmbG93IG9yIGNvbXBsZXRlIGZsb3cgY3JlYXRpb24gcHJvY2Vzcw0K PiBpbg0KPiA+PiArICogU0ZUIHVzaW5nIHJ0ZV9zZnRfZmxvd19hY3RpdmF0ZS4NCj4gPj4gKyAq DQo+ID4+ICsgKiBSZWNvZ25pemVkIFNGVCBmbG93Og0KPiA+PiArICogT25jZSBzdHJ1Y3QgcnRl X3NmdF9mbG93X3N0YXR1cyB3aXRoIHZhbGlkIGZpZCBmaWVsZCBwb3Nlc2VkIGJ5IGFwcGxpY2F0 aW9uDQo+IA0KPiBwb3Nlc2VkIC0+IHBvc3Nlc3NlZA0KPiANCj4gPj4gKyAqIGl0IGNhbjoNCj4g Pj4gKyAqIC0gbWFuZ2UgY2xpZW50IG9iamVjdHMgb24gaXQgKHNlZSBjbGllbnRfb2JqIGZpZWxk IGluDQo+ID4+ICsgKiAgIHN0cnVjdCBydGVfc2Z0X2Zsb3dfc3RhdHVzKSB1c2luZyBydGVfc2Z0 X2Zsb3dfPE9QPl9jbGllbnRfb2JqIEFQSXMNCj4gPj4gKyAqIC0gYW5hbHl6ZSB1c2VyLWRlZmlu ZWQgZmxvdyBzdGF0ZSBhbmQgQ1Qgc3RhdGUgKHNlZSBzdGF0ZSAmIGN0X3NhdGUgZmllbGRzDQo+ ID4+ICsgKiAgIGluIHN0cnVjdCBydGVfc2Z0X2Zsb3dfc3RhdHVzKS4NCj4gPj4gKyAqIC0gc2V0 IGZsb3cgc3RhdGUgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHVwY29taW5nIHBhY2tldHMgYnkgYWN0 aW9uIGBgU0ZUYGANCj4gPj4gKyAqICAgdmlhIHN0cnVjdCBydGVfc2Z0X2Zsb3dfc3RhdHVzIEFQ SS4NCj4gPj4gKyAqIC0gZGVjaWRlIHRvIGRlc3Ryb3kgZmxvdyB2aWEgcnRlX3NmdF9mbG93X2Rl c3Ryb3kgQVBJLg0KPiA+PiArICoNCj4gPj4gKyAqIEZsb3cgYWdpbmc6DQo+ID4+ICsgKg0KPiA+ PiArICogU0ZUIGxpYnJhcnkgbWFuYWdlcyB0aGUgYWdpbmcgZm9yIGVhY2ggZmxvdy4gT24gZmxv dyBjcmVhdGlvbiwgaXQncw0KPiA+PiArICogYXNzaWduZWQgYW4gYWdpbmcgdmFsdWUsIHRoZSBt YXhpbWFsIG51bWJlciBvZiBzZWNvbmRzIHBhc3NlZCBzaW5jZSB0aGUNCj4gPj4gKyAqIGxhc3Qg ZmxvdyBwYWNrZXQgYXJyaXZlZCwgb25jZSBleGNlZWRlZCBmbG93IGNvbnNpZGVyZWQgYWdlZC4N Cj4gPj4gKyAqIFRoZSBhcHBsaWNhdGlvbiBub3RpZmllZCBvZiBhZ2VkIGZsb3cgYXN5bmNocm9u b3VzbHkgdmlhIGV2ZW50IHF1ZXVlcy4NCj4gPj4gKyAqIFRoZSBkZXZpY2UgYW5kIHBvcnQgSURz IHR1cGxlIHRvIGlkZW50aWZ5IHRoZSBldmVudCBxdWV1ZSB0byBlbnF1ZXVlDQo+ID4+ICsgKiBm bG93IGFnZWQgZXZlbnRzIHBhc3NlZCBvbiBmbG93IGNyZWF0aW9uIGFzIGFyZ3VtZW50cw0KPiA+ PiArICogKHNlZSBydGVfc2Z0X2Zsb3dfYWN0aXZhdGUpLiBJdCdzIHRoZSBhcHBsaWNhdGlvbiBy ZXNwb25zaWJpbGl0eSB0bw0KPiA+PiArICogaW5pdGlhbGl6ZSBldmVudCBxdWV1ZXMgYW5kIGFz c2lnbiB0aGVtIHRvIGVhY2ggZmxvdyBmb3IgRU9GIGV2ZW50DQo+ID4+ICsgKiBub3RpZmljYXRp b25zLg0KPiA+PiArICogQWdlZCBFT0YgZXZlbnQgaGFuZGxpbmc6DQo+ID4+ICsgKiAtIFNob3Vs ZCBiZSBjb25zaWRlcmVkIGFzIGFwcGxpY2F0aW9uIHJlc3BvbnNpYmlsaXR5Lg0KPiA+PiArICog LSBUaGUgbGFzdCBzdGFnZSBzaG91bGQgYmUgdGhlIHJlbGVhc2Ugb2YgdGhlIGZsb3cgcmVzb3Vy Y2VzIHZpYQ0KPiA+PiArICogICAgcnRlX3NmdF9mbG93X2Rlc3Ryb3kgQVBJLg0KPiA+PiArICog LSBBbGwgY2xpZW50IG9iamVjdHMgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBmbG93IGJlZm9yZSB0 aGUNCj4gPj4gKyAqICAgcnRlX3NmdF9mbG93X2Rlc3Ryb3kgQVBJIGNhbGwuDQo+ID4+ICsgKiBT ZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHJldGVfc2Z0X2Zsb3dfZGVzdHJveSBmb3IgYW4gZXhhbXBs ZSBvZiBhZ2VkIGZsb3cNCj4gDQo+IHJldGVfc2Z0X2Zsb3dfZGVzdHJveSAtPiBydGVfc2Z0X2Zs b3dfZGVzdHJveQ0KPiANCj4gPj4gKyAqIGhhbmRsaW5nLg0KPiA+PiArICoNCj4gPj4gKyAqIFNG VCBBUEkgdGhyZWFkIHNhZmV0eToNCj4gPj4gKyAqDQo+ID4+ICsgKiBTRlQgbGlicmFyeSBBUElz IGFyZSB0aHJlYWQtc2FmZSB3aGlsZSBoYW5kbGluZyBvZiBzcGVjaWZpYyBmbG93IGNhbiBiZQ0K PiA+PiArICogZG9uZSBpbiBhIHNpbmdsZSB0aHJlYWQgc2ltdWx0YW5lb3VzbHkuIEV4Y2x1c2l2 ZSBhY2Nlc3MgdG8gc3BlY2lmaWMgU0ZUDQo+ID4+ICsgKiBmbG93IGd1YXJhbnRlZWQgYnk6DQo+ ID4NCj4gPiBUaGUgbGluZSBhYm92ZSBjb250cmFkaWN0IGl0c2VsZiwgaWYgeW91IGFyZSB3b3Jr aW5nIHdpdGggc2luZ2xlIHRocmVhZCB5b3UgY2FuJ3QNCj4gd29yayBzaW11bHRhbmVvdXNseS4N Cj4gPiBEb2VzIHRoZSBTRlQgYWxsb3cgdGhlIGFjY2VzcyB0byBhIHNpbmdsZSBmbG93IGZyb20g dHdvIHRocmVhZHMgaW4gdGhlIHNhbWUNCj4gdGltZT8gb3IgaXQgaXMgdGhlIHJlc3BvbnNpYmls aXR5DQo+ID4gT2YgdGhlIGFwcGxpY2F0aW9uIHRvIHByb3RlY3QgaXRzZWxmLiBJIHRoaW5rIGl0 IHNob3VsZCBiZSB0aGUgYXBwbGljYXRpb24NCj4gcmVzcG9uc2liaWxpdHkgdGhlIFNGVCBzaG91 bGQgcHJvdGVjdA0KPiA+IGl0c2VsZiBvbmx5IG9uIFNGVCBnbG9iYWwgZnVuY3Rpb25zLiBGb3Ig ZXhhbXBsZSBjYWxsaW5nIHByb2Nlc3NfbWJ1ZiBzaG91bGQgYmUNCj4gcHJvdGVjdGVkLCBzbyBh cHBsaWNhdGlvbiBjYW4NCj4gPiBjYWxsIHRoZSBzYW1lIGZ1bmN0aW9uIGZyb20gZGlmZmVyZW50 IHRocmVhZHMuDQo+ID4gSSB0aGluayB3ZSBjYW4gYXNzdW1lIHRoYXQgYWxsIHBhY2tldHMgZnJv bSBhIHNwZWNpZmljIGZsb3cgd2lsbCBhcnJpdmUgdG8gdGhlDQo+IHNhbWUgcXVldWUgYW5kIHRo ZSBzYW1lIHRocmVhZC4NCj4gPg0KPiA+IFNvIEkgZG9uJ3Qgc2VlIHRoZSB1c2FnZSBvZiB0aGUg bG9jayBBUEkuDQo+ID4NCj4gPj4gKyAqIC0gcnRlX3NmdF9wcm9jZXNzX21idWYNCj4gPj4gKyAq IC0gcnRlX3NmdF9wcm9jZXNzX21idWZfd2l0aF96b25lDQo+ID4+ICsgKiAtIHJ0ZV9zZnRfZmxv d19jcmVhdGUNCj4gPj4gKyAqIC0gcnRlX3NmdF9mbG93X2xvY2sNCj4gPj4gKyAqIFdoZW4gYXBw bGljYXRpb24gaXMgZG9uZSB3aXRoIHRoZSBmbG93IGhhbmRsaW5nIGZvciB0aGUgY3VycmVudCBw YWNrZXQgaXQNCj4gPj4gKyAqIHNob3VsZCBjYWxsIHJ0ZV9zZnRfZmxvd191bmxvY2sgQVBJIHRv IG1haW50YWluIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlDQo+ID4+ICsgKiBmbG93IHdpdGggb3Ro ZXIgdGhyZWFkcy4NCj4gPj4gKyAqDQo+ID4+ICsgKiBTRlQgTGlicmFyeSBpbml0aWFsaXphdGlv biBhbmQgY2xlYW51cDoNCj4gPj4gKyAqDQo+ID4+ICsgKiBTRlQgbGlicmFyeSBzaG91bGQgYmUg Y29uc2lkZXJlZCBhcyBhIHNpbmdsZSBpbnN0YW5jZSwgcHJlY29uZmlndXJlZCBhbmQNCj4gPj4g KyAqIGluaXRpYWxpemVkIHZpYSBydGVfc2Z0X2luaXQoKSBBUEkuDQo+ID4+ICsgKiBTRlQgbGli cmFyeSByZXNvdXJjZSBkZWFsbG9jYXRpb24gYW5kIGNsZWFudXAgc2hvdWxkIGJlIGRvbmUgdmlh DQo+ID4+ICsgKiBydGVfc2Z0X2luaXQoKSBBUEkgYXMgYSBzdGFnZSBvZiB0aGUgYXBwbGljYXRp b24gdGVybWluYXRpb24gcHJvY2VkdXJlLg0KPiA+PiArICovDQo+ID4+ICsNCj4gPj4gKyNpZmRl ZiBfX2NwbHVzcGx1cw0KPiA+PiArZXh0ZXJuICJDIiB7DQo+ID4+ICsjZW5kaWYNCj4gPj4gKw0K PiA+PiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4gPj4gKyNpbmNsdWRlIDxydGVfY29uZmln Lmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRlX2Vycm5vLmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRlX21i dWYuaD4NCj4gPj4gKyNpbmNsdWRlIDxydGVfZXRoZGV2Lmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRl X2Zsb3cuaD4NCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBMMy9MNCA1LXR1cGxlIC0gc3Jj L2Rlc3QgSVAgYW5kIHBvcnQgYW5kIElQIHByb3RvY29sLg0KPiA+PiArICoNCj4gPj4gKyAqIFVz ZWQgZm9yIGZsb3cvY29ubmVjdGlvbiBpZGVudGlmaWNhdGlvbi4NCj4gPj4gKyAqLw0KPiA+PiAr c3RydWN0IHJ0ZV9zZnRfNXR1cGxlIHsNCj4gPj4gKwl1bmlvbiB7DQo+ID4+ICsJCXN0cnVjdCB7 DQo+ID4+ICsJCQlydGVfYmUzMl90IHNyY19hZGRyOyAvKio8IElQdjQgc291cmNlIGFkZHJlc3Mu ICovDQo+ID4+ICsJCQlydGVfYmUzMl90IGRzdF9hZGRyOyAvKio8IElQdjQgZGVzdGluYXRpb24g YWRkcmVzcy4gKi8NCj4gPj4gKwkJfSBpcHY0Ow0KPiA+PiArCQlzdHJ1Y3Qgew0KPiA+PiArCQkJ dWludDhfdCBzcmNfYWRkclsxNl07IC8qKjwgSVB2NiBzb3VyY2UgYWRkcmVzcy4gKi8NCj4gPj4g KwkJCXVpbnQ4X3QgZHN0X2FkZHJbMTZdOyAvKio8IElQdjYgZGVzdGluYXRpb24gYWRkcmVzcy4g Ki8NCj4gPj4gKwkJfSBpcHY2Ow0KPiA+PiArCX07DQo+IA0KPiBSVEVfU1REX0MxMSBtaXNzaW5n Pw0KPiANCj4gPj4gKwl1aW50MTZfdCBzcmNfcG9ydDsgLyoqPCBTb3VyY2UgcG9ydC4gKi8NCj4g Pj4gKwl1aW50MTZfdCBkc3RfcG9ydDsgLyoqPCBEZXN0aW5hdGlvbiBwb3J0LiAqLw0KPiANCj4g SWYgaXQgaXMgcmVhbGx5IGhvc3QtZW5kaWFuLCBwbGVhc2UsIGhpZ2hsaWdodCBpdCBpbiBhYm92 ZQ0KPiBkZXNjcmlwdGlvbnMuIEFsc28gaXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gdW5kZXJz dGFuZA0KPiB3aHkuDQo+IA0KPiA+PiArCXVpbnQ4X3QgcHJvdG87IC8qKjwgSVAgcHJvdG9jb2wu ICovDQo+ID4+ICsJdWludDhfdCBpc19pcHY2OiAxOyAvKio8IFRydWUgZm9yIHZhbGlkIElQdjYg ZmllbGRzLiBPdGhlcndpc2UgSVB2NC4gKi8NCj4gPj4gK307DQo+ID4+ICsNCj4gPj4gKy8qKg0K PiA+PiArICogUG9ydCBmbG93IGlkZW50aWZpY2F0aW9uLg0KPiA+PiArICoNCj4gPj4gKyAqIEBw IHpvbmUgdXNlZCBmb3Igc2V0dXBzIHdoZXJlIDUtdHVwbGUgaXMgbm90IGVub3VnaCB0byBpZGVu dGlmeSBmbG93Lg0KPiA+PiArICogRm9yIGV4YW1wbGUgZGlmZmVyZW50IFZMQU5zL1ZYTEFOcyBt YXkgaGF2ZSBzaW1pbGFyIDUtdHVwbGVzLg0KPiA+PiArICovDQo+ID4+ICtzdHJ1Y3QgcnRlX3Nm dF83dHVwbGUgew0KPiA+PiArCXN0cnVjdCBydGVfc2Z0XzV0dXBsZSBmbG93XzV0dXBsZTsgLyoq PCBMMy9MNCA1LXR1cGxlLiAqLw0KPiA+PiArCXVpbnQzMl90IHpvbmU7IC8qKjwgWm9uZSBhc3Np Z25lZCB0byBmbG93LiAqLw0KPiA+PiArCXVpbnQxNl90IHBvcnRfaWQ7IC8qKiA8UG9ydCBpZGVu dGlmaWVyIG9mIEV0aGVybmV0IGRldmljZS4gKi8NCj4gPj4gK307DQo+ID4+ICsNCj4gPj4gKy8q Kg0KPiA+PiArICogRmxvdyBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlcw0KPiA+PiArICovDQo+ ID4+ICtlbnVtIHJ0ZV9zZnRfZmxvd19jdF9zdGF0ZSB7DQo+ID4+ICsJUlRFX1NGVF9GTE9XX0NU X1NUQVRFX05FVyAgPSAoMSA8PCAwKSwNCj4gPj4gKwlSVEVfU0ZUX0ZMT1dfQ1RfU1RBVEVfRVNU ICA9ICgxIDw8IDEpLA0KPiA+PiArCVJURV9TRlRfRkxPV19DVF9TVEFURV9SRUwgID0gKDEgPDwg MiksDQo+ID4+ICsJUlRFX1NGVF9GTE9XX0NUX1NUQVRFX1JQTCAgPSAoMSA8PCAzKSwNCj4gPj4g KwlSVEVfU0ZUX0ZMT1dfQ1RfU1RBVEVfSU5WICA9ICgxIDw8IDQpLA0KPiA+PiArCVJURV9TRlRf RkxPV19DVF9TVEFURV9UUksgID0gKDEgPDwgNSksDQo+ID4+ICsJUlRFX1NGVF9GTE9XX0NUX1NU QVRFX1NOQVQgPSAoMSA8PCA2KSwNCj4gPj4gKwlSVEVfU0ZUX0ZMT1dfQ1RfU1RBVEVfRE5BVCA9 ICgxIDw8IDcpLA0KPiA+PiArfTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBTdHJ1Y3R1 cmUgZGVzY3JpYmVzIFNGVCBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24NCj4gPj4gKyAqLw0KPiA+PiAr c3RydWN0IHJ0ZV9zZnRfY29uZiB7DQo+ID4+ICsJdWludDMyX3QgVURQX2FnaW5nOyAvKio8IFVE UCBwcm90byBkZWZhdWx0IGFnaW5nLiAqLw0KPiA+PiArCXVpbnQzMl90IFRDUF9hZ2luZzsgLyoq PCBUQ1AgcHJvdG8gZGVmYXVsdCBhZ2luZy4gKi8NCj4gPj4gKwl1aW50MzJfdCBUQ1BfU1lOX2Fn aW5nOyAvKio8IFRDUCBTWU4gZGVmYXVsdCBhZ2luZy4gKi8NCj4gPj4gKwl1aW50MzJfdCBPVEhF Ul9hZ2luZzsgLyoqPCBBbGwgdW5saXN0ZWQgcHJvdG8gZGVmYXVsdCBhZ2luZy4gKi8NCj4gDQo+ IE1heSBJIHN1Z2dlc3QgdG8gc3RpY2sgdG8gbG93ZXJjYXNlIGZpZWxkcywgcGxlYXNlLg0KPiAN Cj4gPj4gKwl1aW50MzJfdCBzaXplOyAvKio8IE1heCBlbnRyaWVzIGluIFNGVC4gKi8NCj4gPj4g Kwl1aW50OF90IHVuZGVmaW5lZF9zdGF0ZTsgLyoqPCBVbmRlZmluZWQgc3RhdGUgY29uc3RhbnQu ICovDQo+ID4+ICsJdWludDhfdCByZW9yZGVyX2VuYWJsZTogMTsNCj4gPj4gKwkvKio8IFRDUCBw YWNrZXQgcmVvcmRlcmluZyBmZWF0dXJlIGVuYWJsZWQgYml0LiAqLw0KPiA+PiArCXVpbnQ4X3Qg Y3RfZW5hYmxlOiAxOyAvKio8IENvbm5lY3Rpb24gdHJhY2tpbmcgZmVhdHVyZSBlbmFibGVkIGJp dC4gKi8NCj4gPj4gK307DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogU3RydWN0dXJlIGRl c2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIGZsb3cgaW4gU0ZULg0KPiA+PiArICovDQo+ID4+ICtz dHJ1Y3QgcnRlX3NmdF9mbG93X3N0YXR1cyB7DQo+ID4+ICsJdWludDMyX3QgZmlkOyAvKio8IFNG VCBmbG93IGlkLiAqLw0KPiA+PiArCXVpbnQzMl90IHpvbmU7IC8qKjwgWm9uZSBmb3IgbG9va3Vw IGluIFNGVCAqLw0KPiA+PiArCXVpbnQ4X3Qgc3RhdGU7IC8qKjwgQXBwbGljYXRpb24gZGVmaW5l ZCBiaWRpcmVjdGlvbmFsIGZsb3cgc3RhdGUuICovDQo+ID4+ICsJdWludDhfdCBjdF9zdGF0ZTsg LyoqPCBDb25uZWN0aW9uIHRyYWNraW5nIGZsb3cgc3RhdGUuICovDQo+ID4+ICsJdWludDMyX3Qg YWdlOyAvKio8IFNlY29uZHMgcGFzc2VkIHNpbmNlIGxhc3QgZmxvd24gcGFja2V0LiAqLw0KPiA+ PiArCXVpbnQzMl90IGFnaW5nOw0KPiA+PiArCS8qKjwgRmxvdyBjb25zaWRlcmVkIGFnZWQgb25j ZSB0aGlzIGFnZSAoc2Vjb25kcykgcmVhY2hlZC4gKi8NCj4gPj4gKwl1aW50MzJfdCBuYl9pbl9v cmRlcl9tYnVmczsNCj4gPj4gKwkvKio8IE51bWJlciBvZiBpbi1vcmRlciBtYnVmcyBhdmFpbGFi bGUgZm9yIGRyYWluICovDQo+ID4+ICsJdm9pZCAqKmNsaWVudF9vYmo7IC8qKjwgQXJyYXkgb2Yg Y2xpZW50cyBhdHRhY2hlZCB0byBmbG93LiAqLw0KPiA+PiArCWludCBuYl9jbGllbnRzOyAvKio8 IE51bWJlciBvZiBjbGllbnRzIGF0dGFjaGVkIHRvIGZsb3cuICovDQo+ID4+ICsJdWludDhfdCBk ZWZpbmVkOiAxOyAvKio8IEZsb3cgZGVmaW5lZCBpbiBTRlQgYml0LiAqLw0KPiA+PiArCXVpbnQ4 X3QgYWN0aXZhdGVkOiAxOyAvKio8IEZsb3cgYWN0aXZhdGlvbiBiaXQuICovDQo+ID4+ICsJdWlu dDhfdCBmcmFnbWVudGVkOiAxOyAvKio8IExhc3QgZmxvdyBtYnVmIHdhcyBmcmFnbWVudGVkLiAq Lw0KPiA+PiArCXVpbnQ4X3Qgb3V0X29mX29yZGVyOiAxOyAvKio8IExhc3QgZmxvdyBtYnVmIHdh cyBvdXQgb2Ygb3JkZXIgKFRDUCkuICovDQo+ID4+ICt9Ow0KPiA+PiArDQo+ID4+ICsvKioNCj4g Pj4gKyAqIEB3YXJuaW5nDQo+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4+ICsgKg0KPiA+PiArICogR2V0IFNGVCBm bG93IHN0YXR1cy4NCj4gPj4gKyAqIEZsb3cgc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxsZXIgKHNl ZSBydGVfc2Z0X2Zsb3dfbG9jaykuDQo+ID4+ICsgKg0KPiA+PiArICogRmxvdyBzaG91bGQgYmUg bG9ja2VkIGJ5IGNhbGxlciAoc2VlIHJ0ZV9zZnRfZmxvd19sb2NrKS4NCj4gPj4gKyAqDQo+IA0K PiBEdXAgbGluZXMgYWJvdmUNCj4gDQo+ID4+ICsgKiBAcGFyYW0gZmlkDQo+ID4+ICsgKiAgIFNG VCBmbG93IElELg0KPiA+PiArICogQHBhcmFtW291dF0gc3RhdHVzDQo+ID4+ICsgKiAgIFN0cnVj dHVyZSB0byBkdW1wIGFjdHVhbCBTRlQgZmxvdyBzdGF0dXMuDQo+ID4+ICsgKiBAcGFyYW1bb3V0 XSBlcnJvcg0KPiA+PiArICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5v dCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+PiArICogICBzdHJ1Y3R1cmUgaW4gY2Fz ZSBvZiBlcnJvciBvbmx5Lg0KPiA+PiArICoNCj4gPj4gKyAqIEByZXR1cm4NCj4gPj4gKyAqICAg MCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vy cm5vIGlzIHNldC4NCj4gPj4gKyAqLw0KPiANCj4gX19ydGVfZXhwZXJpbWVudGFsDQo+IA0KPiA+ PiAraW50DQo+ID4+ICtydGVfc2Z0X2Zsb3dfZ2V0X3N0YXR1cyhjb25zdCB1aW50MzJfdCBmaWQs DQo+ID4+ICsJCQlzdHJ1Y3QgcnRlX3NmdF9mbG93X3N0YXR1cyAqc3RhdHVzLA0KPiA+PiArCQkJ c3RydWN0IHJ0ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsg KiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdl IHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIFNldCB1c2VyIGRlZmlu ZWQgY29udGV4dC4NCj4gPj4gKyAqIEZsb3cgc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxsZXIgKHNl ZSBydGVfc2Z0X2Zsb3dfbG9jaykuDQo+ID4+ICsgKg0KPiA+PiArICogVXBkYXRlcyBwZXIgZXRo ZXJuZXQgZGV2IFNGVCBlbnRyaWVzOg0KPiANCj4gZXRoZXJuZXQgLT4gRXRoZXJuZXQNCj4gZGV2 IC0+IGRldmljZQ0KPiANCj4gPj4gKyAqIC0gZmxvdyBsb29rdXAgYWNjZWxlcmF0aW9uDQo+ID4+ ICsgKiAtIHBhcnRpYWwvZnVsbCBmbG93IG9mZmxvYWRpbmcgbWFuYWdlZCBieSBmbG93IGNvbnRl eHQNCj4gPj4gKyAqIEZsb3cgc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxsZXIgKHNlZSBydGVfc2Z0 X2Zsb3dfbG9jaykuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGZpZA0KPiA+PiArICogICBT RlQgZmxvdyBJRC4NCj4gPj4gKyAqIEBwYXJhbSBjdHgNCj4gPj4gKyAqICAgVXNlciBkZWZpbmVk IHN0YXRlIHRvIHNldC4NCj4gPj4gKyAqICAgVXBkYXRlIG9mICpmaWQqIG9yICp6b25lKiBmaWVs ZHMgaW4gc3RydWN0IHJ0ZV9mbG93X2l0ZW1fc2Z0DQo+IHVuc3VwcG9ydGVkLg0KPiA+PiArICog QHBhcmFtW291dF0gZXJyb3INCj4gPj4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9y dGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPj4gKyAqICAgc3RydWN0 dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ ID4+ICsgKiAgIDAgb24gc3VjY2VzcyAsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNl IGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiANCj4gUmVtb3ZlIHNwYWNlIGJlZm9yZSBjb21tYQ0K PiANCj4gPj4gKyAqLw0KPiANCj4gX19ydGVfZXhwZXJpbWVudGFsDQo+IA0KPiA+PiAraW50DQo+ ID4+ICtydGVfc2Z0X2Zsb3dfc2V0X2N0eCh1aW50MzJfdCBmaWQsDQo+ID4+ICsJCSAgICAgY29u c3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW1fc2Z0ICpjdHgsDQo+ID4+ICsJCSAgICAgc3RydWN0IHJ0 ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAd2Fybmlu Zw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQg cHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIEluaXRpYWxpemUgU0ZUIGxpYnJhcnkg aW5zdGFuY2UuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGNvbmYNCj4gPj4gKyAqICAgU0ZU IGxpYnJhcnkgaW5zdGFuY2UgY29uZmlndXJhdGlvbi4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0 dXJuDQo+ID4+ICsgKiAgIDAgb24gc3VjY2VzcyAsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3Ro ZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+PiArICovDQo+IA0KPiBfX3J0ZV9leHBl cmltZW50YWwNCj4gDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9zZnRfaW5pdChjb25zdCBzdHJ1Y3Qg cnRlX3NmdF9jb25mICpjb25mKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAd2Fybmlu Zw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQg cHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIEZpbmFsaXplIFNGVCBsaWJyYXJ5IGlu c3RhbmNlLg0KPiA+PiArICogQ2xlYW51cCAmIHJlbGVhc2UgYWxsb2NhdGVkIHJlc291cmNlcy4N Cj4gPj4gKyAqLw0KPiA+PiArdm9pZA0KPiA+PiArcnRlX3NmdF9maW5pKHZvaWQpOw0KPiA+PiAr DQo+ID4NCj4gPiBJIHRoaW5rIHdlIHNob3VsZCB1c2Ugc3RvcC4gSXQgaXMgbm90IGNvbW1vbnMg aW4gRFBESyB0byBoYXZlIGZpbmkgZnVuY3Rpb25zLg0KPiA+IE1heWJlIHdlIHNob3VsZCBhbHNv IGFkZCBzdGFydCBmdW5jdGlvbiwgc28gdGhlIGFwcCBjYW4gaW5pdCBhbmQgdGhlbiBzdGFydCB0 aGUNCj4gU0ZULg0KPiA+DQo+ID4+ICsvKioNCj4gPj4gKyAqIEB3YXJuaW5nDQo+ID4+ICsgKiBA YiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2Uu DQo+ID4+ICsgKg0KPiA+PiArICogUHJvY2VzcyBtYnVmIHJlY2VpdmVkIG9uIFJYIHF1ZXVlLg0K PiA+PiArICoNCj4gPj4gKyAqIEZyYWdtZW50YXRpb24gaGFuZGxpbmcgKFNGVCBmcmFnbWVudGF0 aW9uIGZlYXR1cmUgY29uZmlndXJlZCk6DQo+ID4+ICsgKiBJZiAqbWJ1Zl9pbiogb2YgZnJhZ21l bnRlZCBwYWNrZXQgcmVjZWl2ZWQgaXQgd2lsbCBiZSBzdG9yZWQgYnkgU0ZUDQo+IGxpYnJhcnku DQo+ID4+ICsgKiBzdGF0dXMtPmZyYWdtZW50ZWQgYml0IHdpbGwgYmUgc2V0IGFuZCAqbWJ1Zl9v dXQqIHdpbGwgYmUgc2V0IHRvIE5VTEwuDQo+ID4+ICsgKiBPbiByZWNlcHRpb24gb2YgYWxsIHJl bGF0ZWQgZnJhZ21lbnRzIG9mIElQIHBhY2tldCBpdCB3aWxsIGJlIHJlYXNzZW1ibGVkDQo+ID4+ ICsgKiBhbmQgZnVydGhlciBwcm9jZXNzZWQgYnkgdGhpcyBmdW5jdGlvbiBvbiByZWNlcHRpb24g b2YgbGFzdCBmcmFnbWVudC4NCj4gPj4gKyAqDQo+ID4gRG9lcyB0aGlzIGZ1bmN0aW9uIGFsbG9j YXRlIGEgbmV3IG1idWY/IERvZXMgaXQgcmVsZWFzZXMgYWxsIG9sZCBtYnVmcz8NCj4gPg0KPiA+ PiArICogRmxvdyBkZWZpbml0aW9uOg0KPiA+PiArICogU0ZUIGZsb3cgZGVmaW5lZCBieSBvbmUg b2YgaXRzIDctdHVwbGVzLCBzaW5jZSB0aGVyZSBpcyBubyB6b25lIHZhbHVlIGFzDQo+ID4+ICsg KiBhcmd1bWVudCBmbG93IHNob3VsZCBiZSBkZWZpbmVkIGJ5IGNvbnRleHQgYXR0YWNoZWQgdG8g bWJ1ZiB3aXRoIGFjdGlvbg0KPiA+PiArICogYGBTRlRgYCAoc2VlIFJURSBmbG93IFJURV9GTE9X X0FDVElPTl9UWVBFX1NGVCkuIE90aGVyd2lzZSBzdGF0dXMtDQo+ID4+PiBkZWZpbmVkDQo+ID4+ ICsgKiBmaWVsZCB3aWxsIGJlIHR1cm5lZCBvZmYgJiAqbWJ1Zl9vdXQqIHdpbGwgYmUgc2V0IHRv ICptYnVmX2luKi4NCj4gPj4gKyAqIEluIG9yZGVyIHRvIGRlZmluZSBmbG93IGZvciAqbWJ1Zl9p biogd2l0aG91dCBhdHRhY2hlZCBzZnQgY29udGV4dA0KPiA+PiArICogcnRlX3NmdF9wcm9jZXNz X21idWZfd2l0aF96b25lKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCAqem9uZSogYXJndW1lbnQNCj4g Pj4gKyAqIHN1cHBsaWVkIGJ5IGNhbGxlci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBGbG93IGxvb2t1 cDoNCj4gPj4gKyAqIElmIFNGVCBmbG93IGlkZW50aWZpZXIgY2FuJ3QgYmUgcmV0cmlldmVkIGZy b20gU0ZUIGNvbnRleHQgYXR0YWNoZWQgdG8NCj4gPj4gKyAqICptYnVmX2luKiBieSBhY3Rpb24g YGBTRlRgYCAtIFNGVCBsb29rdXAgc2hvdWxkIGJlIHBlcmZvcm1tZWQgYnkgem9uZSwNCj4gDQo+ IHBlcmZvcm1tZWQgLT4gcGVyZm9ybWVkDQo+IA0KPiA+PiArICogcmV0cmlldmVkIGZyb20gU0ZU IGNvbnRleHQgYXR0YWNoZWQgdG8gKm1idWZfaW4qLCBhbmQgNS10dXBsZSwgZXh0cmFjdGVkDQo+ ID4+ICsgKiBmb3JtIG1idWYgb3V0ZXIgaGVhZGVyIGNvbnRlbnRzLg0KPiA+PiArICoNCj4gPj4g KyAqIEZsb3cgZGVmaW5lZCBidXQgZG9lcyBub3QgZXhpc3RzOg0KPiA+PiArICogSWYgZmxvdyBu b3QgZm91bmQgaW4gU0ZUIGluYWN0aXZhdGVkIGZsb3cgd2lsbCBiZSBjcmVhdGVkIGluIFNGVC4N Cj4gPj4gKyAqIHN0YXR1cy0+YWN0aXZhdGVkIGZpZWxkIHdpbGwgYmUgdHVybmVkIG9mZiAmICpt YnVmX291dCogYmUgc2V0IHRvDQo+ICptYnVmX2luKi4NCj4gPj4gKyAqIEluIG9yZGVyIHRvIGFj dGl2YXRlIGNyZWF0ZWQgZmxvdyBydGVfc2Z0X2Zsb3dfYWN0aXZhdGUoKSBzaG91bGQgYmUgdXNl ZA0KPiA+PiArICogd2l0aCByZXZlcnNlIDctdHVwbGUgc3VwcGxpZWQgYnkgY2FsbGVyLg0KPiA+ PiArICogVGhpcyBpcyBmaXJzdCBwaGFzZSBvZiBmbG93IGNyZWF0aW9uIGluIFNGVCBmb3Igc2Vj b25kIHBoYXNlICYgbW9yZQ0KPiBkZXRhaWxlZA0KPiA+PiArICogZGVzY3Jpb3Rpb24gb2YgZmxv dyBjcmVhdGlvbiBzZWUgcnRlX3NmdF9mbG93X2FjdGl2YXRlLg0KPiANCj4gZGVzY3Jpb3Rpb24g LT4gZGVzY3JpcHRpb24NCj4gDQo+ID4+ICsgKg0KPiA+PiArICogT3V0IG9mIG9yZGVyIChTRlQg b3V0IG9mIG9yZWRlciBmZWF0dXJlIGNvbmZpZ3VyZWQpOg0KPiANCj4gb3JlZGVyIC0+IG9yZGVy DQo+IA0KPiA+PiArICogSWYgZmxvdyBkZWZpbmVkICYgYWN0aXZhdGVkIGJ1dCAqbWJ1Zl9pbiog aXMgVENQIG91dCBvZiBvcmRlciBwYWNrZXQgaXQNCj4gd2lsbA0KPiA+PiArICogYmUgc3RvcmVk IGJ5IFNGVCBsaWJyYXJ5LiBzdGF0dXMtPm91dF9vZl9vcmRlciBiaXQgd2lsbCBiZSBzZXQgJg0K PiAqbWJ1Zl9vdXQqDQo+ID4+ICsgKiB3aWxsIGJlIHNldCB0byBOVUxMLiBPbiByZWNlcHRpb24g b2YgdGhlIGZpcnN0IG1pc3NpbmcgaW4gb3JkZXIgcGFja2V0DQo+ID4+ICsgKiBzdGF0dXMtPm5i X2luX29yZGVyX21idWZzIHdpbGwgYmUgc2V0IHRvIG51bWJlciBvZiBtYnVmcyB0aGF0IGF2YWls YWJsZQ0KPiA+PiBmb3INCj4gPj4gKyAqIHByb2Nlc3Npbmcgd2l0aCBydGVfc2Z0X2RyYWluX21i dWYoKS4NCj4gPj4gKyAqDQo+ID4gSXQgaXMgcG9zc2libGUgdGhhdCBzb21lIHBhY2tldHMgd2ls bCBnZXQgdHJhcHBlZCBpbiB0aGUgU0ZUIGRvIHRvIHRoaXMgZmVhdHVyZS4NCj4gPiBpZiBpdCBz dXBwb3J0cyBvcmRlcmluZy4gRm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyBjYXNlOg0KPiA+IFBh Y2tldHMgYXJyaXZlIHRvIHRoZSBhcHBsaWNhdGlvbi4gQWZ0ZXIgZHJhaW5pbmcgdGhlIHBhY2tl dHMgdGhlDQo+ID4gQXBwbGljYXRpb24gY2hhbmdlZCB0aGUgZmxvdyB0byBmdWxsIG9mZmxvYWQu IFRoaXMgbWVhbnMgdGhhdA0KPiA+IGFsbCBmdXR1cmUgcGFja2V0cyB3aWxsIG5vdCBhcnJpdmUg dG8gdGhlIGFwcGxpY2F0aW9uLg0KPiA+IEJ1dCB1bnRpbCB0aGUgZmxvdyBpcyBvZmZsb2FkZWQg c29tZSBwYWNrZXRzIGRvIGFycml2ZSBub3QgaW4gb3JkZXIuDQo+ID4gVGhlbiB0aGUgZmxvdyBp cyBvZmZsb2FkZWQsIHRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIHNpdHVhdGlvbiB0aGF0IG5vIG1v cmUNCj4gPiBwYWNrZXRzIHdpbGwgYXJyaXZlIHRvIHRoZSBhcHBsaWNhdGlvbiBzbyBzb21lIHBh Y2tldHMgd2lsbCBnZXQgc3RhY2sNCj4gPiBpbiB0aGUgU0ZULg0KPiA+IEkgdGhpbmsgd2UgbXVz dCBoYXZlIHNvbWUgZm9yY2UgZHJhaW4gb3IsIG5vdGlmeSB0aGUgU0ZUIHRoYXQgbm8gbW9yZQ0K PiA+IHBhY2tldHMgc2hvdWxkIGFycml2ZSB0byBldmVuIGlmIHRoZSBwYWNrZXRzIGFyZSBub3Qg aW4gb3JkZXIgaXQgd2lsbCByZWxlYXNlDQo+IHRoZW0uDQo+ID4NCj4gPiBBbHNvIHRoZSBzYW1l IHdpdGggZnJhZ21lbnRlZCBkb2VzIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGUgbmV3IG1idWZzPyBh cmUNCj4geW91IHJlbGVhc2luZyB0aGUNCj4gPiBvbGQgb25lcz8NCj4gPg0KPiA+PiArICogRmxv dyBkZWZpbmVkICYgYWN0aXZhdGVkLCBtYnVmIG5vdCBmcmFnbWVudGVkIGFuZCAnaW4gb3JkZXIn Og0KPiA+PiArICogLSBGbG93IGFnaW5nIHJlbGF0ZWQgZGF0YSAoc2VlIGFnZSBmaWVsZCBpbiBg c3RydWN0IHJ0ZV9zZnRfZmxvd19zdGF0dXNgKQ0KPiA+PiArICogICB3aWxsIGJlIHVwZGF0ZWQg YWNjb3JkaW5nIHRvICptYnVmX2luKiB0aW1lc3RhbXAuDQo+ID4+ICsgKiAtIEZsb3cgY29ubmVj dGlvbiB0cmFja2luZyBzdGF0ZSAoc2VlIGN0X3N0YXRlIGZpZWxkIGluDQo+ID4+ICsgKiAgIGBz dHJ1Y3QgcnRlX3NmdF9mbG93X3N0YXR1c2ApICB3aWxsIGJlIHVwZGF0ZWQgYWNjb3JkaW5nIHRv ICptYnVmX2luKiBMNA0KPiA+PiArICogICBoZWFkZXIgY29udGVudHMuDQo+ID4+ICsgKiAtICpt YnVmX291dCogd2lsbCBiZSBzZXQgdG8gbGFzdCBwcm9jZXNzZWQgbWJ1Zi4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBAcGFyYW1baW5dIG1idWZfaW4NCj4gPj4gKyAqICAgbWJ1ZiB0byBwcm9jZXNzOyBt YnVmIHBpbnRlciBjb25zaWRlcmVkICdjb25zdW1lZCcgYW5kIHNob3VsZCBub3QgYmUNCj4gPj4g dXNlZA0KPiA+PiArICogICBhZnRlciBzdWNjZXNzZnVsIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4N Cj4gPj4gKyAqIEBwYXJhbVtvdXRdIG1idWZfb3V0DQo+ID4+ICsgKiAgIGxhc3QgcHJvY2Vzc2Vk IG5vdCBmcmFnbWVudGVkIGFuZCBpbiBvcmRlciBtYnVmLg0KPiA+DQo+ID4gSWYgdGhlIGluIG1i dWYgaXMgbm90IGZyYWdtZW50ZWQgYW5kIGluIG9yZGVyLCB0aGlzIHBvaW50ZXIgd2lsbCBwb2lu dCB0byB0aGUgaW4NCj4gb25lPw0KPiA+DQo+ID4+ICsgKiBAcGFyYW1bb3V0XSBzdGF0dXMNCj4g Pj4gKyAqICAgU3RydWN0dXJlIHRvIGR1bXAgU0ZUIGZsb3cgc3RhdHVzIG9uY2UgdXBkYXRlZCBh Y2NvcmRpbmcgdG8gY29udGVudHMNCj4gb2YNCj4gPj4gKyAqICAgKm1idWZfaW4qLg0KPiA+DQo+ ID4gRG9lcyB0aGUgc3RhdHVzIGJpdHMgZm9yIGV4YW1wbGUgZnJhZ21lbnRlZCBpcyBrZXB0IHBl ciBjb25uZWN0aW9uIG9yIHBlcg0KPiBmbG93Pw0KPiA+IFNpbmNlIGl0IGlzIHBvc3NpYmxlIHRv IGdldCBmcmFnbWVudGVkIHBhY2tldHMgZnJvbSBib3RoIHNpZGVzLg0KPiA+IFRoZSBzYW1lIGdv ZXMgZm9yIG91dCBvZiBvcmRlciBwYWNrZXRzDQo+ID4NCj4gPg0KPiA+PiArICogQHBhcmFtW291 dF0gZXJyb3INCj4gPj4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBu b3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPj4gKyAqICAgc3RydWN0dXJlIGluIGNh c2Ugb2YgZXJyb3Igb25seS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAg IDAgb24gc3VjY2VzczoNCj4gPj4gKyAqICAgLSAqbWJ1Zl9vdXQqIGNvbnRhaW5zIHZhbGlkIG1i dWYgcG9pbnRlciwgbG9ja2VkIFNGVCBmbG93IHJlY29nbml6ZWQgYnkNCj4gPj4gKyAqICAgICBz dGF0dXMtPmZpZC4NCj4gPj4gKyAqICAgLSAqbWJ1Zl9vdXQqIGlzIE5VTEwgYW5kIHN0YXR1cy0+ ZnJhZ21lbnRlZCBiaXQgb24gaW4gY2FzZSBvZg0KPiA+PiArICogICAgIG5vbiBsYXN0IGZyYWdt ZW50ICptYnVmX2luKi4NCj4gPj4gKyAqICAgLSAqbWJ1Zl9vdXQqIGlzIE5VTEwgYW5kIHN0YXR1 cy0+b3V0X29mX29yZGVyIGJpdCBvbiBpbiBjYXNlIG9mIG91dCBvZg0KPiA+PiArICogICAgIG9y ZGVyICptYnVmX2luKiwgbG9ja2VkIFNGVCBmbG93IHJlY29nbml6ZWQgYnkgc3RhdHVzLT5maWQu DQo+ID4+ICsgKiAgIE9uIGZhaWx1cmUgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBhbmQgcnRlX2Vy cm5vIGlzIHNldC4NCj4gPj4gKyAqLw0KPiANCj4gX19ydGVfZXhwZXJpbWVudGFsDQo+IA0KPiA+ PiAraW50DQo+ID4+ICtydGVfc2Z0X3Byb2Nlc3NfbWJ1ZihzdHJ1Y3QgcnRlX21idWYgKm1idWZf aW4sDQo+ID4+ICsJCSAgICAgc3RydWN0IHJ0ZV9tYnVmICoqbWJ1Zl9vdXQsDQo+ID4+ICsJCSAg ICAgc3RydWN0IHJ0ZV9zZnRfZmxvd19zdGF0dXMgKnN0YXR1cywNCj4gPj4gKwkJICAgICBzdHJ1 Y3QgcnRlX3NmdF9lcnJvciAqZXJyb3IpOw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEB3 YXJuaW5nDQo+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0 aG91dCBwcmlvciBub3RpY2UuDQo+ID4+ICsgKg0KPiA+PiArICogUHJvY2VzcyBtYnVmIHJlY2Vp dmVkIG9uIFJYIHF1ZXVlIHdoaWxlIHpvbmUgdmFsdWUgcHJvdmlkZWQgYnkgY2FsbGVyLg0KPiA+ PiArICoNCj4gPj4gKyAqIFRoZSBiZWhhdmlvdXIgb2YgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFy IHRvIHJ0ZV9zZnRfcHJvY2Vzc19tYnVmIGV4Y2VwdA0KPiA+PiArICogdGhlIGxvb2t1cCBpbiBT RlQgcHJvY2VkdXJlLiBUaGUgbG9va3VwIGluIFNGVCBhbHdheXMgZG9uZSBieSB0aGUgKnpvbmUq DQo+ID4+ICsgKiBhcmcgYW5kIDUtdHVwbGUgNS10dXBsZSwgZXh0cmFjdGVkIGZvcm0gbWJ1ZiBv dXRlciBoZWFkZXIgY29udGVudHMuDQo+ID4+ICsgKg0KPiA+PiArICogQHNlZSBydGVfc2Z0X3By b2Nlc3NfbWJ1Zg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbVtpbl0gbWJ1Zl9pbg0KPiA+PiAr ICogICBtYnVmIHRvIHByb2Nlc3M7IG1idWYgcGludGVyIGNvbnNpZGVyZWQgJ2NvbnN1bWVkJyBh bmQgc2hvdWxkIG5vdCBiZQ0KPiB1c2VkDQo+IA0KPiBwaW50ZXIgLT4gcG9pbnRlcg0KPiANCj4g Pj4gKyAqICAgYWZ0ZXIgc3VjY2Vzc2Z1bCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uDQo+ID4+ICsg KiBAcGFyYW1bb3V0XSBtYnVmX291dA0KPiA+PiArICogICBsYXN0IHByb2Nlc3NlZCBub3QgZnJh Z21lbnRlZCBhbmQgaW4gb3JkZXIgbWJ1Zi4NCj4gPj4gKyAqIEBwYXJhbVtvdXRdIHN0YXR1cw0K PiA+PiArICogICBTdHJ1Y3R1cmUgdG8gZHVtcCBTRlQgZmxvdyBzdGF0dXMgb25jZSB1cGRhdGVk IGFjY29yZGluZyB0byBjb250ZW50cw0KPiBvZg0KPiA+PiArICogICAqbWJ1Zl9pbiouDQo+ID4+ ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+PiArICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3Ig cmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+PiArICogICBz dHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+PiArICoNCj4gPj4gKyAqIEByZXR1 cm4NCj4gPj4gKyAqICAgMCBvbiBzdWNjZXNzOg0KPiA+PiArICogICAtICptYnVmX291dCogY29u dGFpbnMgdmFsaWQgbWJ1ZiBwb2ludGVyLg0KPiA+PiArICogICAtICptYnVmX291dCogaXMgTlVM TCBhbmQgc3RhdHVzLT5mcmFnbWVudGVkIGJpdCBvbiBpbiBjYXNlIG9mDQo+ID4+ICsgKiAgICAg bm9uIGxhc3QgZnJhZ21lbnQgKm1idWZfaW4qLg0KPiA+PiArICogICAtICptYnVmX291dCogaXMg TlVMTCBhbmQgc3RhdHVzLT5vdXRfb2Zfb3JkZXIgYml0IG9uIGluIGNhc2Ugb2Ygb3V0IG9mDQo+ ID4+ICsgKiAgICAgb3JkZXIgKm1idWZfaW4qLg0KPiA+PiArICogICBPbiBmYWlsdXJlIGEgbmVn YXRpdmUgZXJybm8gdmFsdWUgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4+ICsgKi8NCj4gDQo+ IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiANCj4gPj4gK2ludA0KPiA+PiArcnRlX3NmdF9wcm9jZXNz X21idWZfd2l0aF96b25lKHN0cnVjdCBydGVfbWJ1ZiAqbWJ1Zl9pbiwNCj4gPj4gKwkJCSAgICAg ICB1aW50MzJfdCB6b25lLA0KPiA+PiArCQkJICAgICAgIHN0cnVjdCBydGVfbWJ1ZiAqKm1idWZf b3V0LA0KPiA+PiArCQkJICAgICAgIHN0cnVjdCBydGVfc2Z0X2Zsb3dfc3RhdHVzICpzdGF0dXMs DQo+ID4+ICsJCQkgICAgICAgc3RydWN0IHJ0ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4gPj4gKw0K PiA+PiArLyoqDQo+ID4+ICsgKiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0 aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4g KyAqIERyYWluIG5leHQgaW4gb3JkZXIgbWJ1Zi4NCj4gPj4gKyAqIEZsb3cgc2hvdWxkIGJlIGxv Y2tlZCBieSBjYWxsZXIgKHNlZSBydGVfc2Z0X2Zsb3dfbG9jaykuDQo+ID4+ICsgKg0KPiA+PiAr ICogVGhpcyBmdW5jdGlvbiBiZWhhdmVzIHNpbWlsYXIgdG8gcnRlX3NmdF9wcm9jZXNzX21idWYo KSBidXQgYWN0cyBvbg0KPiBwYWNrZXRzDQo+ID4+ICsgKiBhY2N1bXVsYXRlZCBpbiBTRlQgZmxv dyBkdWUgdG8gbWlzc2luZyBpbiBvcmRlciBwYWNrZXQuIFByb2Nlc3NpbmcgZG9uZQ0KPiBvbg0K PiA+PiArICogc2luZ2xlIG1idWYgYXQgYSB0aW1lIGFuZCBgaW4gb3JkZXJgLiBPdGhlciB0aGFu IGFib3ZlIHRoZSBiZWhhdmlvciBpcw0KPiA+PiArICogc2FtZSBhcyBvZiBydGVfc2Z0X3Byb2Nl c3NfbWJ1ZiBmb3IgZmxvdyBkZWZpbmVkICYgYWN0aXZhdGVkICYgbWJ1Zg0KPiBpc24ndA0KPiA+ PiArICogZnJhZ21lbnRlZCAmICdpbiBvcmRlcicuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNh bGxlZCB3aGVuDQo+ID4+ICsgKiBydGVfc2Z0X3Byb2Nlc3NfbWJ1ZiBvciBydGVfc2Z0X3Byb2Nl c3NfbWJ1Zl93aXRoX3pvbmUgc2V0cw0KPiA+PiArICogc3RhdHVzLT5uYl9pbl9vcmRlcl9tYnVm cyBvdXRwdXQgcGFyYW0gIT0wIGFuZCB1bnRpbA0KPiA+PiArICogc3RhdHVzLT5uYl9pbl9vcmRl cl9tYnVmcyA9PSAwLg0KPiA+PiArICogRmxvdyBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlciAo c2VlIHJ0ZV9zZnRfZmxvd19sb2NrKS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gZmlkDQo+ ID4+ICsgKiAgIFNGVCBmbG93IElELg0KPiA+PiArICogQHBhcmFtW291dF0gc3RhdHVzDQo+ID4+ ICsgKiAgIFN0cnVjdHVyZSB0byBkdW1wIFNGVCBmbG93IHN0YXR1cyBvbmNlIHVwZGF0ZWQgYWNj b3JkaW5nIHRvIGNvbnRlbnRzDQo+IG9mDQo+ID4+ICsgKiAgICptYnVmX2luKi4NCj4gPj4gKyAq IEBwYXJhbVtvdXRdIGVycm9yDQo+ID4+ICsgKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBv cnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4+ICsgKiAgIHN0cnVj dHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0K PiA+PiArICogICBBIHZhbGlkIG1idWYgaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIG90aGVyd2lz ZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPj4gKyAqLw0KPiANCj4gX19ydGVfZXhwZXJpbWVu dGFsDQo+IA0KPiA+PiArc3RydWN0IHJ0ZV9tYnVmICoNCj4gPj4gK3J0ZV9zZnRfZHJhaW5fbWJ1 Zih1aW50MzJfdCBmaWQsDQo+ID4+ICsJCSAgIHN0cnVjdCBydGVfc2Z0X2Zsb3dfc3RhdHVzICpz dGF0dXMsDQo+ID4+ICsJCSAgIHN0cnVjdCBydGVfc2Z0X2Vycm9yICplcnJvcik7DQo+ID4+ICsN Cj4gPg0KPiA+IEZpZCByZXByZXNlbnQgYSBjb25uZWN0aW9uLCBzbyB3aGljaCBkaXJlY3Rpb24g ZG8gd2UgZHJhaW4gdGhlIHBhY2tldHM/DQo+ID4gc2luY2Ugd2UgY2FuIGhhdmUgaW5vcmRlcmVk IHBhY2tldCBpbiBmcm9tIGJvdGggZGlyZWN0aW9ucyByaWdodD8NCj4gPg0KPiA+PiArLyoqDQo+ ID4+ICsgKiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIEFjdGl2YXRl IGZsb3cgaW4gU0ZULg0KPiA+PiArICogRmxvdyBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlciAo c2VlIHJ0ZV9zZnRfZmxvd19sb2NrKS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGlzIGZ1bmN0aW9u IHBlcmZvcm1zIHNlY29uZCBwaGFzZSBvZiBmbG93IGNyZWF0aW9uIGluIFNGVC4NCj4gPj4gKyAq IFRoZSByZWFzb25zIGZvciAyIHBoYXNlIGZsb3cgY3JlYXRpb24gcHJvY2VkdXJlOg0KPiA+PiAr ICogMS4gTWlzc2luZyByZXZlcnNlIGZsb3cgLSBmbG93IGNvbnRleHQgaXMgc2hhcmVkIGZvciBi b3RoIGZsb3cgZGlyZWN0aW9ucw0KPiA+PiArICogICAgaS5lLiBpbiBvcmRlciBtYWludGFpbiBi aWRpcmVjdGlvbmFsIGZsb3cgY29udGV4dCBpbiBSVEUgU0ZUIHBhY2tldHMNCj4gPj4gKyAqICAg IGFycml2aW5nIGZyb20gYm90aCBkaXJyZWN0aW9ucyBzaG91bGQgYmUgaWRlbnRpZmllZCBhcyBw YWNrZXRzIG9mIHRoZQ0KPiA+PiArICogICAgUlRFIFNGVCBmbG93LiBDb25zZXF1ZW50bHkgYmVm b3JlIGNyZWF0aW9uIG9mIHRoZSBTRlQgZmxvdyBjYWxsZXINCj4gc2hvdWxkDQo+ID4+ICsgKiAg ICBwcm92aWRlIHJldmVyc2UgZmxvdyBkaXJlY3Rpb24gNy10dXBsZS4NCj4gPj4gKyAqIDIuIFRo ZSBjYWxsZXIgb2YgcnRlX3NmdF9wcm9jZXNzX21idWYvcnRlX3NmdF9wcm9jZXNzX21idWZfd2l0 aF96b25lDQo+ID4+IHNob3VsZA0KPiA+PiArICogICBiZSBub3RpZmllZCB0aGF0IGFycml2ZWQg bWJ1ZiBpcyBmaXJzdCBpbiBmbG93ICYgZGVjaWRlIHdlYXRoZXIgdG8NCj4gPj4gKyAqICAgY3Jl YXRlIG5ldyBmbG93IG9yIGl0IGRpc3Ryb3kgYmVmb3JlIGl0IHdhcyBhY3RpdmF0ZWQgd2l0aA0K PiA+PiArICogICBydGVfc2Z0X2Zsb3dfZGVzdHJveS4NCj4gPj4gKyAqIFRoaXMgZnVuY3Rpb24g Y29tcGxldGVzIGNyZWF0aW9uIG9mIHRoZSBiaWRpcmVjdGlvbmFsIFNGVCBmbG93ICYgY3JlYXRl cw0KPiA+PiArICogZW50cnkgZm9yIDctdHVwbGUgb24gU0ZUIFBNRCBkZWZpbmVkIGJ5IHRoZSB0 dXBsZSBwb3J0IGZvciBib3RoDQo+ID4+ICsgKiBpbml0aWF0b3IvaW5pdGlhdGUgNy10dXBsZXMu DQo+ID4+ICsgKiBGbG93IGFnaW5nLCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlICYgb3V0IG9m IG9yZGVyIGhhbmRsaW5nIHdpbGwgYmUNCj4gPj4gKyAqIGluaXRpYWxpemVkIGFjY29yZGluZyB0 byB0aGUgY29udGVudCBvZiB0aGUgKm1idWZfaW4qIHBhc3NlcyB0bw0KPiA+PiArICogcnRlX3Nm dF9wcm9jZXNzX21idWYvX3dpdGhfem9uZSBkdXJpbmcgdGhlIHBoYXNlIDEgb2YgZmxvdyBjcmVh dGlvbi4NCj4gPj4gKyAqIE9uY2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHVwY29taW5nIGNhbGxz DQo+ID4+IHJ0ZV9zZnRfcHJvY2Vzc19tYnVmL193aXRoX3pvbmUNCj4gPj4gKyAqIHdpdGggNy10 dXBsZSBvciBpdHMgcmV2ZXJzZSB3aWxsIHJldHVybiBoYW5kbGUgdG8gdGhpcyBmbG93Lg0KPiA+ PiArICogRmxvdyBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlciAoc2VlIHJ0ZV9zZnRfZmxvd19s b2NrKS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gZmlkDQo+ID4+ICsgKiAgIFNGVCBmbG93 IElELg0KPiA+PiArICogQHBhcmFtIHJldmVyc2VfdHVwbGUNCj4gPj4gKyAqICAgRXhwZWN0ZWQg cmVzcG9uc2UgZmxvdyA3LXR1cGxlLg0KPiA+PiArICogQHBhcmFtIGN0eA0KPiA+PiArICogICBV c2VyIGRlZmluZWQgc3RhdGUgdG8gc2V0Lg0KPiA+PiArICogICBVcGRhdGUgb2YgKmZpZCogb3Ig KnpvbmUqIGZpZWxkcyBpbiBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9zZnQNCj4gdW5zdXBwb3J0ZWQu DQo+ID4+ICsgKiBAcGFyYW0gY3RfZW5hYmxlDQo+ID4+ICsgKiAgIEVuYWJsZXMgbWFpbnRlbmFu Y2Ugb2Ygc3RhdHVzLT5jdF9zdGF0ZSBjb25uZWN0aW9uIHRyYWNraW5nIHZhbHVlIGZvcg0KPiB0 aGUNCj4gPj4gKyAqICAgZmxvdzsgb3RoZXJ3aXNlIHN0YXR1cy0+Y3Rfc3RhdGUgd2lsbCBiZSBp bml0aWFsaXplZCB3aXRoIHplcm9zLg0KPiA+PiArICogQHBhcmFtIGV2ZGV2X2lkDQo+ID4+ICsg KiAgIEV2ZW50IGRldiBJRCB0byBlbnF1ZXVlIGVuZCBvZiBmbG93IGV2ZW50Lg0KPiA+PiArICog QHBhcmFtIGV2cG9ydF9pZA0KPiA+PiArICogICBFdmVudCBwb3J0IElEIHRvIGVucXVldWUgZW5k IG9mIGZsb3cgZXZlbnQuDQo+ID4+ICsgKiBAcGFyYW1bb3V0XSBzdGF0dXMNCj4gPj4gKyAqICAg U3RydWN0dXJlIHRvIGR1bXAgU0ZUIGZsb3cgc3RhdHVzIG9uY2UgYWN0aXZhdGVkLg0KPiA+PiAr ICogQHBhcmFtW291dF0gZXJyb3INCj4gPj4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJl cG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPj4gKyAqICAgc3Ry dWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJu DQo+ID4+ICsgKiAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndp c2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4+ICsgKi8NCj4gDQo+IF9fcnRlX2V4cGVyaW1l bnRhbA0KPiANCj4gPj4gK2ludA0KPiA+PiArcnRlX3NmdF9mbG93X2FjdGl2YXRlKHVpbnQzMl90 IGZpZCwNCj4gPj4gKwkJICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9zZnRfN3R1cGxlICpyZXZlcnNl X3R1cGxlLA0KPiA+PiArCQkgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9zZnQgKmN0 eCwNCj4gPj4gKwkJICAgICAgdWludDhfdCBjdF9lbmFibGUsDQo+ID4+ICsJCSAgICAgIHVpbnQ4 X3QgZGV2X2lkLA0KPiA+PiArCQkgICAgICB1aW50OF90IHBvcnRfaWQsDQo+ID4+ICsJCSAgICAg IHN0cnVjdCBydGVfc2Z0X2Zsb3dfc3RhdHVzICpzdGF0dXMsDQo+ID4+ICsJCSAgICAgIHN0cnVj dCBydGVfc2Z0X2Vycm9yICplcnJvcik7DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogQHdh cm5pbmcNCj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRo b3V0IHByaW9yIG5vdGljZS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBBcnRpZmljaWFsbHkgY3JlYXRl IFNGVCBmbG93Lg0KPiA+PiArICoNCj4gPj4gKyAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBTRlQgZmxv dyBiZWZvcmUgcmVjZXB0aW9uIG9mIHRoZSBmaXJzdCBmbG93IHBhY2tldC4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBAcGFyYW0gdHVwbGUNCj4gPj4gKyAqICAgRXhwZWN0ZWQgaW5pdGlhdG9yIGZsb3cg Ny10dXBsZS4NCj4gPj4gKyAqIEBwYXJhbSByZXZlcnNlX3R1cGxlDQo+ID4+ICsgKiAgIEV4cGVj dGVkIGluaXRpYXRlIGZsb3cgNy10dXBsZS4NCj4gPj4gKyAqIEBwYXJhbSBjdHgNCj4gPj4gKyAq ICAgVXNlciBkZWZpbmVkIHN0YXRlIHRvIHNldC4NCj4gPj4gKyAqICAgU2V0dGluZyBvZiAqZmlk KiBvciAqem9uZSogZmllbGRzIGluIHN0cnVjdCBydGVfZmxvd19pdGVtX3NmdA0KPiB1bnN1cHBv cnRlZC4NCj4gPj4gKyAqIEBwYXJhbVtvdXRdIGN0X2VuYWJsZQ0KPiA+PiArICogICBFbmFibGVz IG1haW50ZW5hbmNlIG9mIHN0YXR1cy0+Y3Rfc3RhdGUgY29ubmVjdGlvbiB0cmFja2luZyB2YWx1 ZSBmb3INCj4gdGhlDQo+ID4+ICsgKiAgIGZsb3c7IG90aGVyd2lzZSBzdGF0dXMtPmN0X3N0YXRl IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvcy4NCj4gPj4gKyAqIEBwYXJhbVtvdXRdIHN0 YXR1cw0KPiA+PiArICogICBTdHJ1Y3R1cmUgdG8gZHVtcCBTRlQgZmxvdyBzdGF0dXMgb25jZSBj cmVhdGVkLg0KPiA+PiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPj4gKyAqICAgUGVyZm9ybSB2 ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMN Cj4gPj4gKyAqICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgIC0gb24gc3VjY2VzczogMCwgbG9ja2VkIFNGVCBm bG93IHJlY29nbml6ZWQgYnkgc3RhdHVzLT5maWQuDQo+ID4+ICsgKiAgIC0gb24gZXJyb3I6IGEg bmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ PiArICovDQo+ID4+ICsNCj4gDQo+IE5vIGV4dHJhIGVtcHR5IGxpbmUgYW5kIF9fcnRlX2V4cGVy aW1lbnRhbA0KPiANCj4gPj4gK2ludA0KPiA+PiArcnRlX3NmdF9mbG93X2NyZWF0ZShjb25zdCBz dHJ1Y3QgcnRlX3NmdF83dHVwbGUgKnR1cGxlLA0KPiA+PiArCQkgICAgY29uc3Qgc3RydWN0IHJ0 ZV9zZnRfN3R1cGxlICpyZXZlcnNlX3R1cGxlLA0KPiA+PiArCQkgICAgY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2l0ZW1fc2Z0ICpjdHgsDQo+ID4+ICsJCSAgICB1aW50OF90IGN0X2VuYWJsZSwNCj4g Pj4gKwkJICAgIHN0cnVjdCBydGVfc2Z0X2Zsb3dfc3RhdHVzICpzdGF0dXMsDQo+ID4+ICsJCSAg ICBzdHJ1Y3QgcnRlX3NmdF9lcnJvciAqZXJyb3IpOw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4g KyAqIEB3YXJuaW5nDQo+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFu Z2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4+ICsgKg0KPiA+PiArICogTG9jayBleGNsdXNp dmVseSBTRlQgZmxvdy4NCj4gPj4gKyAqDQo+ID4+ICsgKiBFeHBsaWNpdCBmbG93IGxvY2tpbmc7 IHVzZWQgZm9yIGhhbmRsaW5nIGFnZWQgZmxvd3MuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFt IGZpZA0KPiA+PiArICogICBTRlQgZmxvdyBJRC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJu DQo+ID4+ICsgKiAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndp c2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4+ICsgKi8NCj4gDQo+IF9fcnRlX2V4cGVyaW1l bnRhbA0KPiANCj4gPj4gK2ludA0KPiA+PiArcnRlX3NmdF9mbG93X2xvY2sodWludDMyX3QgZmlk KTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQ RVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ PiArICoNCj4gPj4gKyAqIFJlbGVhc2UgZXhjbHVzaXZlbHkgbG9ja2VkIFNGVCBmbG93Lg0KPiA+ PiArICoNCj4gPj4gKyAqIFdoZW4gcnRlX3NmdF9wcm9jZXNzX21idWYvX3dpdGhfem9uZSBhbmQg cnRlX3NmdF9mbG93X2NyZWF0ZQ0KPiA+PiArICogcmV0dXJuICpzdGF0dXMqIGNvbnRhaW5pbmcg ZmlkIHdpdGggZGVmaW5lZCBiaXQgb24gdGhlIGZsb3cgY29uc2lkZXJlZA0KPiA+PiArICogZXhj bHVzaXZlbHkgbG9ja2VkIGFuZCBzaG91bGQgYmUgdW5sb2NrZWQgd2l0aCB0aGlzIGZ1bmN0aW9u Lg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBmaWQNCj4gPj4gKyAqICAgU0ZUIGZsb3cgSUQu DQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+PiArICogICAwIG9uIHN1Y2Nlc3MsIGEg bmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ PiArICovDQo+IA0KPiBfX3J0ZV9leHBlcmltZW50YWwNCj4gDQo+ID4+ICtpbnQNCj4gPj4gK3J0 ZV9zZnRfZmxvd191bmxvY2sodWludDMyX3QgZmlkKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ ICsgKiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hh bmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIFJlbW92ZXMgZmxv dyBmcm9tIFNGVC4NCj4gPj4gKyAqIEZsb3cgc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxsZXIgKHNl ZSBydGVfc2Z0X2Zsb3dfbG9jaykuDQo+ID4+ICsgKg0KPiA+PiArICogLSBGbG93IHNob3VsZCBi ZSBsb2NrZWQgYnkgY2FsbGVyIGluIG9yZGVyIHRvIHJlbW92ZSBpdC4NCj4gPj4gKyAqIC0gRmxv dyBzaG91bGQgaGF2ZSBubyBjbGllbnQgb2JqZWN0cyBhdHRhY2hlZC4NCj4gPj4gKyAqDQo+ID4+ ICsgKiBTaG91bGQgYmUgYXBwbGllZCBvbiBhZ2VkIGZsb3dzLCB3aGVuIGZsb3cgYWdlZCBldmVu dCByZWNlaXZlZC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAY29kZXsuY30NCj4gPj4gKyAqICAgICB3 aGlsZSAoMSkgew0KPiA+PiArICogICAgICAgICBydGVfZXZlbnRfZGVxdWV1ZV9idXJzdCguLi4p Ow0KPiA+PiArICogICAgICAgICBGT1JfRUFDSF9FVihldikgew0KPiA+PiArICogICAgICAgICAg ICAgdWludDMyX3QgZmlkID0gZXYudTY0Ow0KPiA+PiArICogICAgICAgICAgICAgcnRlX3NmdF9m bG93X2xvY2soZmlkKTsNCj4gPj4gKyAqICAgICAgICAgICAgIEZPUl9FQUNIX0NMSUVOVChmaWQs IGNsaWVudF9pZCkgew0KPiA+PiArICogICAgICAgICAgICAgICAgIHJ0ZV9zZnRfZmxvd19yZXNl dF9jbGllbnRfb2JqKGZpZCwgY2xpZW50X29iaik7DQo+ID4+ICsgKiAgICAgICAgICAgICAgICAg Ly8gZGV0YWNoZWQgY2xpZW50IG9iamVjdCBoYW5kbGluZw0KPiA+PiArICogICAgICAgICAgICAg fQ0KPiA+PiArICogICAgICAgICAgICAgcnRlX3NmdF9mbG93X2Rlc3Ryb3koZmlkLCAmZXJyb3Ip Ow0KPiA+PiArICogICAgICAgICB9DQo+ID4+ICsgKiAgICAgfQ0KPiA+PiArICogQGVuZGNvZGUN Cj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gZmlkDQo+ID4+ICsgKiAgIFNGVCBmbG93IElEIHRv IGRlc3Ryb3kuDQo+ID4+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+PiArICogICBQZXJmb3Jt IHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhp cw0KPiA+PiArICogICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+PiArICoN Cj4gPj4gKyAqIEByZXR1cm4NCj4gPj4gKyAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVy cm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPj4gKyAqLw0KPiAN Cj4gX19ydGVfZXhwZXJpbWVudGFsDQo+IA0KPiA+PiAraW50DQo+ID4+ICtydGVfc2Z0X2Zsb3df ZGVzdHJveSh1aW50MzJfdCBmaWQsIHN0cnVjdCBydGVfc2Z0X2Vycm9yICplcnJvcik7DQo+ID4+ ICsNCj4gPj4gKy8qKg0KPiA+PiArICogQHdhcm5pbmcNCj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRB TDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBSZXNldCBmbG93IGFnZSB0byB6ZXJvLg0KPiA+PiArICogRmxvdyBzaG91bGQgYmUg bG9ja2VkIGJ5IGNhbGxlciAoc2VlIHJ0ZV9zZnRfZmxvd19sb2NrKS4NCj4gPj4gKyAqDQo+ID4+ ICsgKiBTaW11bGF0ZXMgbGFzdCBmbG93IHBhY2tldCB3aXRoIHRpbWVzdGFtcCBzZXQgdG8ganVz dCBub3cuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGZpZA0KPiA+PiArICogICBTRlQgZmxv dyBJRC4NCj4gPj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4+ICsgKiAgIFBlcmZvcm0gdmVy Ym9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ ID4+ICsgKiAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4+ICsgKg0KPiA+ PiArICogQHJldHVybg0KPiA+PiArICogICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8g dmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+PiArICovDQo+IA0KPiBf X3J0ZV9leHBlcmltZW50YWwNCj4gDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9zZnRfZmxvd190b3Vj aCh1aW50MzJfdCBmaWQsIHN0cnVjdCBydGVfc2Z0X2Vycm9yICplcnJvcik7DQo+ID4+ICsNCj4g Pj4gKy8qKg0KPiA+PiArICogQHdhcm5pbmcNCj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhp cyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPj4gKyAqDQo+ID4+ICsg KiBTZXQgZmxvdyBhZ2luZyB0byBzcGVjaWZpYyB2YWx1ZS4NCj4gPj4gKyAqIEZsb3cgc2hvdWxk IGJlIGxvY2tlZCBieSBjYWxsZXIgKHNlZSBydGVfc2Z0X2Zsb3dfbG9jaykuDQo+ID4+ICsgKg0K PiA+PiArICogQHBhcmFtIGZpZA0KPiA+PiArICogICBTRlQgZmxvdyBJRC4NCj4gPj4gKyAqIEBw YXJhbSBhZ2luZw0KPiA+PiArICogICBOZXcgZmxvdyBhZ2luZyB2YWx1ZS4NCj4gPj4gKyAqIEBw YXJhbVtvdXRdIGVycm9yDQo+ID4+ICsgKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRp bmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4+ICsgKiAgIHN0cnVjdHVy ZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+ PiArICogICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFu ZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+PiArICovDQo+IA0KPiBfX3J0ZV9leHBlcmltZW50YWwN Cj4gDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9zZnRfZmxvd19zZXRfYWdpbmcodWludDMyX3QgZmlk LA0KPiA+PiArCQkgICAgICAgdWludDMyX3QgYWdpbmcsDQo+ID4+ICsJCSAgICAgICBzdHJ1Y3Qg cnRlX3NmdF9lcnJvciAqZXJyb3IpOw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEB3YXJu aW5nDQo+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91 dCBwcmlvciBub3RpY2UuDQo+ID4+ICsgKg0KPiA+PiArICogU2V0IGNsaWVudCBvYmplY3QgZm9y IGdpdmVuIGNsaWVudCBJRC4NCj4gPj4gKyAqIEZsb3cgc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxs ZXIgKHNlZSBydGVfc2Z0X2Zsb3dfbG9jaykuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGZp ZA0KPiA+PiArICogICBTRlQgZmxvdyBJRC4NCj4gPj4gKyAqIEBwYXJhbSBjbGllbnRfaWQNCj4g Pj4gKyAqICAgQ2xpZW50IElEIHRvIHNldCBvYmplY3QgZm9yLg0KPiA+PiArICogQHBhcmFtIGNs aWVudF9vYmoNCj4gPj4gKyAqICAgUG9pbnRlciB0byBvcGFxdWUgY2xpZW50IG9iamVjdCBzdHJ1 Y3R1cmUuDQo+ID4+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+PiArICogICBQZXJmb3JtIHZl cmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0K PiA+PiArICogICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+PiArICoNCj4g Pj4gKyAqIEByZXR1cm4NCj4gPj4gKyAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5v IHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPj4gKyAqLw0KPiANCj4g X19ydGVfZXhwZXJpbWVudGFsDQo+IA0KPiA+PiAraW50DQo+ID4+ICtydGVfc2Z0X2Zsb3dfc2V0 X2NsaWVudF9vYmoodWludDMyX3QgZmlkLA0KPiA+PiArCQkJICAgIHVpbnQ4X3QgY2xpZW50X2lk LA0KPiA+PiArCQkJICAgIHZvaWQgKmNsaWVudF9vYmosDQo+ID4+ICsJCQkgICAgc3RydWN0IHJ0 ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAd2Fybmlu Zw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQg cHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIEdldCBjbGllbnQgb2JqZWN0IGZvciBn aXZlbiBjbGllbnQgSUQuDQo+ID4+ICsgKiBGbG93IHNob3VsZCBiZSBsb2NrZWQgYnkgY2FsbGVy IChzZWUgcnRlX3NmdF9mbG93X2xvY2spLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBmaWQN Cj4gPj4gKyAqICAgU0ZUIGZsb3cgSUQuDQo+ID4+ICsgKiBAcGFyYW0gY2xpZW50X2lkDQo+ID4+ ICsgKiAgIENsaWVudCBJRCB0byBnZXQgb2JqZWN0IGZvci4NCj4gPj4gKyAqIEBwYXJhbVtvdXRd IGVycm9yDQo+ID4+ICsgKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90 IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4+ICsgKiAgIHN0cnVjdHVyZSBpbiBjYXNl IG9mIGVycm9yIG9ubHkuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+PiArICogICBB IHZhbGlkIGNsaWVudCBvYmplY3Qgb3BhcXVlIHBvaW50ZXIgaW4gY2FzZSBvZiBzdWNjZXNzLCBO VUxMIG90aGVyd2lzZQ0KPiA+PiArICogICBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPj4gKyAq Lw0KPiANCj4gX19ydGVfZXhwZXJpbWVudGFsDQo+IA0KPiA+PiArdm9pZCAqDQo+ID4+ICtydGVf c2Z0X2Zsb3dfZ2V0X2NsaWVudF9vYmooY29uc3QgdWludDMyX3QgZmlkLA0KPiA+PiArCQkJICAg IHVpbnQ4X3QgY2xpZW50X2lkLA0KPiA+PiArCQkJICAgIHN0cnVjdCBydGVfc2Z0X2Vycm9yICpl cnJvcik7DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogQHdhcm5pbmcNCj4gPj4gKyAqIEBi IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4N Cj4gPj4gKyAqDQo+ID4+ICsgKiBSZW1vdmUgY2xpZW50IG9iamVjdCBmb3IgZ2l2ZW4gY2xpZW50 IElELg0KPiANCj4gRnVuY3Rpb24gbmFtZSB1c2VzICJyZXNldCIsIGJ1dCBkZXNjcmlwdGlvbiBz YXlzICJyZW1vdmUiLg0KPiBNYXkgYmUgc3luY2hyb25pemUgaXQ/DQo+IA0KPiA+PiArICogRmxv dyBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlciAoc2VlIHJ0ZV9zZnRfZmxvd19sb2NrKS4NCj4g Pj4gKyAqDQo+ID4+ICsgKiBEZXRhY2hlcyBjbGllbnQgb2JqZWN0IGZyb20gU0ZUIGZsb3cgYW5k IHJldHVybnMgdGhlIG93bmVyc2hpcCBmb3IgdGhlDQo+ID4+ICsgKiBjbGllbnQgb2JqZWN0IHRv IHRoZSBjYWxsZXIgYnkgcmV0dXJuaW5nIGNsaWVudCBvYmplY3QgcG9pbnRlciB2YWx1ZS4NCj4g Pj4gKyAqIFRoZSBwb2ludGVyIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYWNj ZXNzZWQgYW55IG1vcmUsIHRoZQ0KPiBjYWxsZXINCj4gPj4gKyAqIG1heSByZWxlYXNlIGFsbCBj bGllbnQgb2JqIHJlbGF0ZWQgcmVzb3VyY2VzICYgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yDQo+ ID4+ICsgKiB0aGlzIGNsaWVudCBvYmplY3QuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGZp ZA0KPiA+PiArICogICBTRlQgZmxvdyBJRC4NCj4gPj4gKyAqIEBwYXJhbSBjbGllbnRfaWQNCj4g Pj4gKyAqICAgQ2xpZW50IElEIHRvIHJlbW92ZSBvYmplY3QgZm9yLg0KPiA+PiArICogQHBhcmFt W291dF0gZXJyb3INCj4gPj4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBp ZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPj4gKyAqICAgc3RydWN0dXJlIGlu IGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsg KiAgIEEgdmFsaWQgY2xpZW50IG9iamVjdCBvcGFxdWUgcG9pbnRlciBpbiBjYXNlIG9mIHN1Y2Nl c3MsIE5VTEwgb3RoZXJ3aXNlDQo+ID4+ICsgKiAgIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ PiArICovDQo+IA0KPiBfX3J0ZV9leHBlcmltZW50YWwNCj4gDQo+ID4+ICt2b2lkICoNCj4gPj4g K3J0ZV9zZnRfZmxvd19yZXNldF9jbGllbnRfb2JqKHVpbnQzMl90IGZpZCwNCj4gPj4gKwkJCSAg ICAgIHVpbnQ4X3QgY2xpZW50X2lkLA0KPiA+PiArCQkJICAgICAgc3RydWN0IHJ0ZV9zZnRfZXJy b3IgKmVycm9yKTsNCj4gPj4gKw0KPiA+PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4+ICt9DQo+ ID4+ICsjZW5kaWYNCj4gPj4gKw0KPiA+PiArI2VuZGlmIC8qIF9SVEVfU0ZUX0hfICovDQo+ID4+ IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3NmdC9ydGVfc2Z0X2RyaXZlci5oIGIvbGliL2xpYnJ0 ZV9zZnQvcnRlX3NmdF9kcml2ZXIuaA0KPiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+PiBp bmRleCAwMDAwMDAwMDAwLi4wYzllMjhmZTE3DQo+ID4+IC0tLSAvZGV2L251bGwNCj4gPj4gKysr IGIvbGliL2xpYnJ0ZV9zZnQvcnRlX3NmdF9kcml2ZXIuaA0KPiA+PiBAQCAtMCwwICsxLDE5NSBA QA0KPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+PiAr ICogQ29weXJpZ2h0IDIwMjAgTWVsbGFub3ggVGVjaG5vbG9naWVzLCBMdGQNCj4gPj4gKyAqLw0K PiA+PiArDQo+ID4+ICsjaWZuZGVmIF9SVEVfU0ZUX0RSSVZFUl9IXw0KPiA+PiArI2RlZmluZSBf UlRFX1NGVF9EUklWRVJfSF8NCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAZmlsZQ0KPiA+ PiArICoNCj4gPj4gKyAqIFJURSBTRlQgRXRoZXJuZXQgZGV2aWNlIFBNRCBBUEkNCj4gPj4gKyAq DQo+ID4+ICsgKiBBUElzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIFNGVCBsaWJyYXJ5IHRvIG9mZmxv YWQgU0ZUIG9wZXJhdGlvbm9ucw0KPiA+PiArICogdG8gRXRoZXJuZXQgZGV2aWNlLg0KPiA+PiAr ICovDQo+ID4+ICsNCj4gPj4gKyNpbmNsdWRlICJydGVfc2Z0LmgiDQo+ID4+ICsNCj4gPj4gKyNp ZmRlZiBfX2NwbHVzcGx1cw0KPiA+PiArZXh0ZXJuICJDIiB7DQo+ID4+ICsjZW5kaWYNCj4gPj4g Kw0KPiA+PiArLyoqDQo+ID4+ICsgKiBPcGFxdWUgdHlwZSByZXR1cm5lZCBhZnRlciBzdWNjZXNz ZnVsbHkgY3JlYXRpbmcgYW4gZW50cnkgaW4gU0ZULg0KPiA+PiArICoNCj4gPj4gKyAqIFRoaXMg aGFuZGxlIGNhbiBiZSB1c2VkIHRvIG1hbmFnZSBhbmQgcXVlcnkgdGhlIHJlbGF0ZWQgZW50cnkg KGUuZy4gdG8NCj4gPj4gKyAqIGRlc3Ryb3kgaXQgb3IgdXBkYXRlIGFnZSkuDQo+ID4+ICsgKi8N Cj4gPj4gK3N0cnVjdCBydGVfc2Z0X2VudHJ5Ow0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAq IENyZWF0ZSBTRlQgZW50cnkgaW4gZXRoX2RldiBTRlQuDQo+ID4+ICsgKg0KPiA+PiArICogQHBh cmFtIGRldg0KPiA+PiArICogICBQb2ludGVyIHRvIEV0aGVybmV0IGRldmljZSBzdHJ1Y3R1cmUu DQo+ID4+ICsgKiBAcGFyYW0gdHVwbGUNCj4gPj4gKyAqICAgTDMvTDQgNS10dXBsZSAtIHNyYy9k ZXN0IElQIGFuZCBwb3J0IGFuZCBJUCBwcm90b2NvbC4NCj4gPj4gKyAqIEBwYXJhbSBuYXRfdHVw bGUNCj4gPj4gKyAqICAgTDMvTDQgNS10dXBsZSB0byByZXBsYWNlIGluIHBhY2tldCBvcmlnaW5h bCA1LXR1cGxlIGluIG9yZGVyIHRvIGltcGxlbWVudA0KPiA+PiArICogICBOQVQgb2ZmbG9hZGlu ZzsgaWYgTlVMTCBOQVQgb2ZmbG9hZGluZyB3b24ndCBiZSBjb25maWd1cmVkIGZvciB0aGUNCj4g Zmxvdy4NCj4gPj4gKyAqIEBwYXJhbSBhZ2luZw0KPiA+PiArICogICBGbG93IGFnaW5nIHRpbWVv dXQgaW4gc2Vjb25kcy4NCj4gPj4gKyAqIEBwYXJhbSBjdHgNCj4gPj4gKyAqICAgSW5pdGlhbCB2 YWx1ZXMgaW4gU0ZUIGZsb3cgY29udGV4dA0KPiA+PiArICogICAoc2VlIFJURSBmbG93IHN0cnVj dCBydGVfZmxvd19pdGVtX3NmdCkuDQo+ID4+ICsgKiAgIGN0eC0+em9uZSBzaG91bGQgYmUgdmFs aWQuDQo+ID4+ICsgKiBAcGFyYW0gZmlkDQo+ID4+ICsgKiAgIFNGVCBmbG93IElEIGZvciB0aGUg ZW50cnkgdG8gY3JlYXRlIG9uICpkZXZpY2UqLg0KPiA+PiArICogICBJZiB0aGVyZSBpcyBhbiBl bnRyeSBmb3IgdGhlICpmaWQqIGluIFBNRCBpdCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUNCj4g Pj4gKyAqICAgdmFsdWVzIG9mICpjdHgqLg0KPiA+PiArICogQHBhcmFtW291dF0gcXVldWVfaW5k ZXgNCj4gPj4gKyAqICAgaWYgUE1EIGNhbiBmaWd1cmUgb3V0IHRoZSBxdWV1ZSB3aGVyZSB0aGUg ZmxvdyBwYWNrZXRzIHdpbGwNCj4gPj4gKyAqICAgYXJyaXZlIGluIFJYIGRhdGEgcGF0aCBpdCB3 aWxsIHNldCB0aGUgdmFsdWUgb2YgcXVldWVfaW5kZXg7IG90aGVyd2lzZQ0KPiA+PiArICogICBh bGwgYml0cyB3aWxsIGJlIHR1cm5lZCBvbi4NCj4gPj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ ID4+ICsgKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBN RHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4+ICsgKiAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9y IG9ubHkuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+PiArICogICBBIHZhbGlkIGhh bmRsZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMg c2V0Lg0KPiA+PiArICovDQo+ID4+ICt0eXBlZGVmIHN0cnVjdCBydGVfc2Z0X2VudHJ5ICooKnNm dF9lbnRyeV9jcmVhdGVfdCkgKHN0cnVjdCBydGVfZXRoX2Rldg0KPiAqZGV2LA0KPiA+PiArCQlj b25zdCBzdHJ1Y3QgcnRlX3NmdF81dHVwbGUgKnR1cGxlLA0KPiA+PiArCQljb25zdCBzdHJ1Y3Qg cnRlX3NmdF81dHVwbGUgKm5hdF90dXBsZSwNCj4gPj4gKwkJY29uc3QgdWludDMyX3QgYWdpbmcs DQo+ID4+ICsJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX3NmdCAqY3R4LA0KPiA+PiArCQlj b25zdCB1aW50MzJfdCBmaWQsDQo+ID4+ICsJCXVpbnQxNl90ICpxdWV1ZV9pbmRleCwNCj4gPj4g KwkJc3RydWN0IHJ0ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4gPj4gKw0KPiA+DQo+ID4gSSB0aGlu ayBmb3IgZWFzaWVyIHJlYWRpbmcsIHRoZSBBUEkgc2hvdWxkIGNoYW5nZSB0byBoYXZlIDYgdHVw bGUgKDUgKyB6b25lKQ0KPiA+IHRoZSBjdHggc2hvdWxkIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2Vk IHdpdGggdGhlIHN0YXRlLg0KPiA+DQo+ID4gVGhlbiBhZGQgbmV3IEFQSSB0byBtb2RpZnkgdGhl IGN0eA0KPiA+IHR5cGVkZWYgaW50ICgqc2Z0X21vZGlmeV9zdGF0ZSkoc3RydWN0IHJ0ZV9ldGhf ZGV2ICpkZXYsIHVpbnQ4IHN0YXRlKTsNCj4gPiBUaGUgbWFpbiBpc3N1ZSB3ZSBteSBzdWdnZXN0 aW9uIGlzIHRoYXQgaXQgd2lsbCBmb3JjZSB0aGUgUE1EIHRvIHN0b3JlIHRoZQ0KPiBpbmZvcm1h dGlvbiB0byByZWNyZWF0ZQ0KPiA+IHRoZSBydWxlLCBkYXRhIHRoYXQgaXMgYWxyZWFkeSAgc2F2 ZWQgYnkgdGhlIFNGVC4NCj4gPg0KPiA+IEFsc28gSSBkb24ndCBzZWUgd2h5IHdlIG5lZWQgcXVl dWUgaW5kZXgsIHNpbmNlIHRoZSBSU1MgYW5kIHF1ZXVlIHdpbGwgYmUNCj4gY29uZmlndXJlZCBi eSB0aGUgUlRFIGZsb3cNCj4gPiBpbiBhIGRpZmZlcmVudCBncm91cC4NCj4gPg0KPiA+PiArLyoq DQo+ID4+ICsgKiBEZXN0cm95IFNGVCBlbnRyeSBpbiBldGhfZGV2IFNGVC4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBAcGFyYW0gZGV2DQo+ID4+ICsgKiAgIFBvaW50ZXIgdG8gRXRoZXJuZXQgZGV2aWNl IHN0cnVjdHVyZS4NCj4gPj4gKyAqIEBwYXJhbSBlbnRyeQ0KPiA+PiArICogICBIYW5kbGUgdG8g dGhlIFNGVCBlbnRyeSB0byBkZXN0cm95Lg0KPiA+PiArICogQHBhcmFtW291dF0gZXJyb3INCj4g Pj4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1E cyBpbml0aWFsaXplIHRoaXMNCj4gPj4gKyAqICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Ig b25seS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgIDAgb24gc3VjY2Vz cywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQu DQo+ID4+ICsgKi8NCj4gPj4gK3R5cGVkZWYgaW50ICgqc2Z0X2VudHJ5X2Rlc3Ryb3lfdCkoc3Ry dWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4+ICsJCXN0cnVjdCBydGVfc2Z0X2VudHJ5ICplbnRy eSwNCj4gPj4gKwkJc3RydWN0IHJ0ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4gPj4gKw0KPiA+PiAr LyoqDQo+ID4+ICsgKiBEZWNvZGVzIFNGVCBmbG93IGNvbnRleHQgaWYgYXR0YWNoZWQgdG8gbWJ1 ZiBieSBhY3Rpb24gYGBTRlRgYC4NCj4gPj4gKyAqIEBzZWUgUlRFIGZsb3cgUlRFX0ZMT1dfQUNU SU9OX1RZUEVfU0ZULg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBkZXYNCj4gPj4gKyAqICAg UG9pbnRlciB0byBFdGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlLg0KPiA+PiArICogQHBhcmFtIG1i dWYNCj4gPj4gKyAqICAgbWJ1ZiBvZiB0aGUgcGFja2V0IHRvIGRlY29kZSBhdHRhY2hlZCBzdGF0 ZSBmcm9tLg0KPiA+PiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPj4gKyAqICAgUGVyZm9ybSB2 ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMN Cj4gPj4gKyAqICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgIEEgdmFsaWQgU0ZUIGZsb3cgY29udGV4dCBpbiBj YXNlIG9mIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlIGFuZA0KPiBydGVfZXJybm8NCj4gPj4gKyAq ICAgaXMgc2V0Lg0KPiA+PiArICovDQo+ID4+ICt0eXBlZGVmIHN0cnVjdCBydGVfZmxvd19pdGVt X3NmdCAqKCpzZnRfZW50cnlfbWJ1Zl9kZWNvZGVfY3R4X3QpKA0KPiA+PiArCQlzdHJ1Y3QgcnRl X2V0aF9kZXYgKmRldiwNCj4gPj4gKwkJY29uc3Qgc3RydWN0IHJ0ZV9tYnVmICptYnVmLA0KPiA+ PiArCQlzdHJ1Y3QgcnRlX3NmdF9lcnJvciAqZXJyb3IpOw0KPiA+PiArDQo+ID4NCj4gPiBXaGF0 IGFib3V0IHJldHVybmluZyBpbnQgYXMgZXJyb3IgY29kZSwgYW5kIHJldHVybiB0aGUgcnRlX2Zs b3dfaXRlbV9zZnQNCj4gPiBhcyBvdXQgcGFyYW1ldGVyPw0KPiA+IFRoaXMgd2lsbCByZW1vdmUg dGhlIGFsbG9jYXRpb24gYW5kIGZyZWUuDQo+ID4NCj4gPj4gKy8qKg0KPiA+PiArICogR2V0IGFn ZWQtb3V0IFNGVCBlbnRyaWVzLg0KPiA+PiArICoNCj4gPj4gKyAqIFJlcG9ydCBlbnRyeSBhcyBh Z2VkLW91dCBpZiB0aW1lb3V0IHBhc3NlZCB3aXRob3V0IGFueSBtYXRjaGluZw0KPiA+PiArICog b24gdGhlIFNGVCBlbnRyeS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW1baW5dIGRldg0KPiA+ PiArICogICBQb2ludGVyIHRvIEV0aGVybmV0IGRldmljZSBzdHJ1Y3R1cmUuDQo+ID4+ICsgKiBA cGFyYW1baW4sIG91dF0gZmlkX2FnZWQNCj4gPj4gKyAqICAgVGhlIGFkZHJlc3Mgb2YgYW4gYXJy YXkgb2YgYWdlZC1vdXQgU0ZUIGZsb3cgSURzLg0KPiA+PiArICogQHBhcmFtW2luXSBuYl9hZ2Vk DQo+ID4+ICsgKiAgIFRoZSBsZW5ndGggb2YgKmZpZF9hZ2VkKiBhcnJheSBwb2ludGVycy4NCj4g Pj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4+ICsgKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJv ciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIEluaXRpYWxpemVkIGluIGNhc2Ugb2YNCj4gPj4gKyAq ICAgZXJyb3Igb25seS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgIGlm IG5iX2FnZWQgaXMgMCwgcmV0dXJuIHRoZSBhbW91bnQgb2YgYWxsIGFnZWQgZmxvd3MuDQo+ID4+ ICsgKiAgIGlmIG5iX2FnZWQgaXMgbm90IDAgLCByZXR1cm4gdGhlIGFtb3VudCBvZiBhZ2VkIGZs b3dzIHJlcG9ydGVkDQo+ID4+ICsgKiAgIGluIHRoZSAqZmlkX2FnZWQqIGFycmF5LCBvdGhlcndp c2UgbmVnYXRpdmUgZXJybm8gdmFsdWUuDQo+ID4+ICsgKi8NCj4gPj4gK3R5cGVkZWYgaW50ICgq c2Z0X2VudHJ5X2dldF9hZ2VkX2VudHJpZXNfdCkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ ID4+ICsJCXVpbnQzMl90ICpmaWRfYWdlZCwNCj4gPj4gKwkJaW50IG5iX2FnZWQsDQo+ID4+ICsJ CXN0cnVjdCBydGVfc2Z0X2Vycm9yICplcnJvcik7DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiAr ICogU2ltdWxhdGUgU0ZUIGVudHJ5IG1hdGNoIGluIHRlcm1zIG9mIGVudHJ5IGFnaW5nLg0KPiA+ PiArICoNCj4gPj4gKyAqIEBwYXJhbSBkZXYNCj4gPj4gKyAqICAgUG9pbnRlciB0byBFdGhlcm5l dCBkZXZpY2Ugc3RydWN0dXJlLg0KPiA+PiArICogQHBhcmFtIGZpZA0KPiA+PiArICogICBTRlQg ZmxvdyBJRCBwYWlyZWQgd2l0aCBkZXYgdG8gcmV0cmlldmUgcmVsYXRlZCBTRlQgZW50cnkuDQo+ ID4+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+PiArICogICBQZXJmb3JtIHZlcmJvc2UgZXJy b3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+PiArICog ICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+PiArICoNCj4gPj4gKyAqIEBy ZXR1cm4NCj4gPj4gKyAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90 aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPj4gKyAqLw0KPiA+PiArdHlwZWRlZiBp bnQgKCpzZnRfZW50cnlfdG91Y2hfdCkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ID4+ICsJ CXVpbnQzMl90IGZpZCwNCj4gPj4gKwkJc3RydWN0IHJ0ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4g Pj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBTZXQgU0ZUIGVudHJ5IGFnaW5nIHRvIHNwZWNpZmlj IHZhbHVlLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBkZXYNCj4gPj4gKyAqICAgUG9pbnRl ciB0byBFdGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlLg0KPiA+PiArICogQHBhcmFtIGZpZA0KPiA+ PiArICogICBTRlQgZmxvdyBJRCBwYWlyZWQgd2l0aCBkZXYgdG8gcmV0cmlldmUgcmVsYXRlZCBT RlQgZW50cnkuDQo+ID4+ICsgKiBAcGFyYW0gYWdpbmcNCj4gPj4gKyAqICAgTmV3IGVudHJ5IGFn aW5nIHZhbHVlLg0KPiA+PiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPj4gKyAqICAgUGVyZm9y bSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRo aXMNCj4gPj4gKyAqICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPj4gKyAq DQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBl cnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4+ICsgKi8NCj4g Pj4gK3R5cGVkZWYgaW50ICgqc2Z0X2VudHJ5X3NldF9hZ2luZ190KShzdHJ1Y3QgcnRlX2V0aF9k ZXYgKmRldiwNCj4gPj4gKwkJdWludDMyX3QgZmlkLA0KPiA+PiArCQl1aW50MzJfdCBhZ2luZywN Cj4gPj4gKwkJc3RydWN0IHJ0ZV9zZnRfZXJyb3IgKmVycm9yKTsNCj4gPj4gKw0KPiA+PiArLyoq IFNGVCBvcGVyYXRpb25zIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUgKi8NCj4gPj4gK3N0cnVjdCBy dGVfc2Z0X29wcyB7DQo+ID4+ICsJc2Z0X2VudHJ5X2NyZWF0ZV90IGVudHJ5X2NyZWF0ZTsNCj4g Pj4gKwkvKio8IENyZWF0ZSBTRlQgZW50cnkgaW4gZXRoX2RldiBTRlQuICovDQo+ID4+ICsJc2Z0 X2VudHJ5X2Rlc3Ryb3lfdCBlbnRyeV9kZXN0cm95Ow0KPiA+PiArCS8qKjwgRGVzdHJveSBTRlQg ZW50cnkgaW4gZXRoX2RldiBTRlQuICovDQo+ID4+ICsJc2Z0X2VudHJ5X21idWZfZGVjb2RlX2N0 eF90IG1idWZfZGVjb2RlX2N0eDsNCj4gPj4gKwkvKio8IERlY29kZXMgU0ZUIGZsb3cgY29udGV4 dCBpZiBhdHRhY2hlZCB0byBtYnVmIGJ5IGFjdGlvbiBgYFNGVGBgLiAqLw0KPiA+PiArCXNmdF9l bnRyeV9nZXRfYWdlZF9lbnRyaWVzX3QgZ2V0X2FnZWRfZW50cmllczsNCj4gPj4gKwkvKio8IEdl dCBhZ2VkLW91dCBTRlQgZW50cmllcy4gKi8NCj4gPj4gKwlzZnRfZW50cnlfdG91Y2hfdCBlbnRy eV90b3VjaDsNCj4gPj4gKwkvKio8IFNpbXVsYXRlIFNGVCBlbnRyeSBtYXRjaCBpbiB0ZXJtcyBv ZiBlbnRyeSBhZ2luZy4gKi8NCj4gPj4gKwlzZnRfZW50cnlfc2V0X2FnaW5nX3Qgc2V0X2FnaW5n Ow0KPiA+PiArCS8qKjwgU2V0IFNGVCBlbnRyeSBhZ2luZyB0byBzcGVjaWZpYyB2YWx1ZS4gKi8N Cj4gPj4gK307DQo+ID4+ICsNCj4gPj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+PiArfQ0KPiA+ PiArI2VuZGlmDQo+ID4+ICsNCj4gPj4gKyNlbmRpZiAvKiBfUlRFX1NGVF9EUklWRVJfSF8gKi8N Cj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfc2Z0L3J0ZV9zZnRfdmVyc2lvbi5tYXANCj4g Pj4gYi9saWIvbGlicnRlX3NmdC9ydGVfc2Z0X3ZlcnNpb24ubWFwDQo+ID4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4+IGluZGV4IDAwMDAwMDAwMDAuLjc0N2UxMDBhYzUNCj4gPj4gLS0tIC9k ZXYvbnVsbA0KPiA+PiArKysgYi9saWIvbGlicnRlX3NmdC9ydGVfc2Z0X3ZlcnNpb24ubWFwDQo+ ID4+IEBAIC0wLDAgKzEsMjEgQEANCj4gPj4gK0VYUEVSSU1FTlRBTCB7DQo+ID4+ICsJZ2xvYmFs Og0KPiA+PiArDQo+ID4+ICsJcnRlX3NmdF9mbG93X2dldF9zdGF0dXM7DQo+ID4+ICsJcnRlX3Nm dF9mbG93X3NldF9jdHg7DQo+ID4+ICsJcnRlX3NmdF9pbml0Ow0KPiA+PiArCXJ0ZV9zZnRfZmlu aTsNCj4gPj4gKwlydGVfc2Z0X3Byb2Nlc3NfbWJ1ZjsNCj4gPj4gKwlydGVfc2Z0X3Byb2Nlc3Nf bWJ1Zl93aXRoX3pvbmU7DQo+ID4+ICsJcnRlX3NmdF9kcmFpbl9tYnVmOw0KPiA+PiArCXJ0ZV9z ZnRfZmxvd19hY3RpdmF0ZTsNCj4gPj4gKwlydGVfc2Z0X2Zsb3dfY3JlYXRlOw0KPiA+PiArCXJ0 ZV9zZnRfZmxvd19sb2NrOw0KPiA+PiArCXJ0ZV9zZnRfZmxvd191bmxvY2s7DQo+ID4+ICsJcnRl X3NmdF9mbG93X2Rlc3Ryb3k7DQo+ID4+ICsJcnRlX3NmdF9mbG93X3RvdWNoOw0KPiA+PiArCXJ0 ZV9zZnRfZmxvd19zZXRfYWdpbmc7DQo+ID4+ICsJcnRlX3NmdF9mbG93X3NldF9jbGllbnRfb2Jq Ow0KPiA+PiArCXJ0ZV9zZnRfZmxvd19nZXRfY2xpZW50X29iajsNCj4gPj4gKwlydGVfc2Z0X2Zs b3dfcmVzZXRfY2xpZW50X29iajsNCj4gDQo+IElmIEknbSBub3QgbWlzdGFrZW4sIGl0IHNob3Vs ZCBiZSBhbHBoYWJldGlhbGx5IHNvcnRlZC4NCj4gDQo+ID4+ICt9Ow0KPiA+PiAtLQ0KPiA+PiAy LjI2LjINCj4gPg0KPiA+IEJlc3QsDQo+ID4gT3JpDQo+ID4NCg0K