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 7DE7AA32A2 for ; Thu, 24 Oct 2019 14:30:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6B4ED1E9FE; Thu, 24 Oct 2019 14:30:36 +0200 (CEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80071.outbound.protection.outlook.com [40.107.8.71]) by dpdk.org (Postfix) with ESMTP id 0F4371E9A9 for ; Thu, 24 Oct 2019 14:30:35 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e2Rcr+p8pMx8lJYb9xKWrBqTxzH6kC4Y878TYNXHS0yyCCTn21Lq01powLAVuh9cUX4t2YtXtoobpbdCjnOkw3tbOfbm8nmYQVfjr3CyI1eRGxBVXkVP/x+jcv5r2K7WV3rokuQ4YC75XI5vk5SJkON0lcLFtbMW+D4MHDXQJx3boDSEx77G298MXOD+KTyIcC9JeTcyB6wOTFKHXvxQBlWxkQB+dweSgmx/s6x3YNgqwOSoktiL0CsHurfoH8xJYfYbOPE/a/v45UE48WGW+04k4gVxPx3j3S2GvEXgKW3xyuuBtxCcIYK4hwnmbs0u6Oe+Rv9zwvQkKm7FkXYb5Q== 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=k5bN7dSate5M+UgaqO/TuSWV76O7VqKx1g8UfETjWyU=; b=dKOwQv8STxqtlszbQQREakf8WQt7UwTRimHeztwlzKxbRlQg1g41B8dYXszqAo8Iz/ouVor6uPEvsrAW/pM0WwtXC8IpTHKM4lZHkDxuSzVWaBJvxyr3f/W4lcM4ez5a00aq9OdlspcKLkV7qhGm8PQs0S45VJWm9kFZ02b76+1LN64VisuL/q4PEMCdNcwNR7gv8aHPY8KxghS0LWh65XsowMXftg4uHrfCCYySvAvSrAE5XsXB2dsV8vuUyZDgjODfNmP1jQjHydTXrYcWvctK9APO7+vzdVSImCf0d4r9VsEYzLSnWgKVvjul6LjDiIkxiB7yXapi4DWRo9af2w== 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=k5bN7dSate5M+UgaqO/TuSWV76O7VqKx1g8UfETjWyU=; b=gOgpk0rhLy7Nh6OaBk35HzWuTnmHMQn2SAK90NVWuMFOpcsp3ao3NlgyfwwCqyqdcn5ZvDeEho5wZYTrgc5F/bZJIOhi0FBI29/D6alsyOh3FbMJx4DftrVwCxDTJvF3D3H4M+YuncCiGOEOr4Wx1udBISXgq5y+My5KECMbXRM= Received: from AM4PR05MB3265.eurprd05.prod.outlook.com (10.171.188.154) by AM4PR05MB3122.eurprd05.prod.outlook.com (10.170.125.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2387.20; Thu, 24 Oct 2019 12:30:31 +0000 Received: from AM4PR05MB3265.eurprd05.prod.outlook.com ([fe80::edab:529f:d14e:d3b]) by AM4PR05MB3265.eurprd05.prod.outlook.com ([fe80::edab:529f:d14e:d3b%7]) with mapi id 15.20.2387.021; Thu, 24 Oct 2019 12:30:31 +0000 From: Slava Ovsiienko To: Olivier Matz CC: "dev@dpdk.org" , Matan Azrad , Raslan Darawsheh , Thomas Monjalon Thread-Topic: [PATCH v2] ethdev: extend flow metadata Thread-Index: AQHVhZWNhabx0gMeL0inCxF4J+ZF1adiS/TggAMEboCAA/72oIAAPrGAgAAB/HA= Date: Thu, 24 Oct 2019 12:30:31 +0000 Message-ID: References: <20190704232122.19477-1-yskoh@mellanox.com> <1570723359-24650-1-git-send-email-viacheslavo@mellanox.com> <20191018092219.z5yoldgnicltypjr@platinum> <20191021163707.buyn3xifofz5r3pd@platinum> <20191024092249.GR25286@glumotte.dev.6wind.com> In-Reply-To: <20191024092249.GR25286@glumotte.dev.6wind.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=viacheslavo@mellanox.com; x-originating-ip: [95.67.35.250] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 1fa4f3bf-ab92-415f-c356-08d7587df5d2 x-ms-traffictypediagnostic: AM4PR05MB3122:|AM4PR05MB3122: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr,ExtFwd x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 0200DDA8BE x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(979002)(4636009)(346002)(376002)(396003)(366004)(136003)(39860400002)(199004)(189003)(13464003)(43544003)(52314003)(54094003)(55016002)(2906002)(6246003)(14454004)(30864003)(33656002)(74316002)(9686003)(561944003)(7736002)(305945005)(14444005)(256004)(5660300002)(54906003)(6436002)(8936002)(316002)(8676002)(229853002)(81156014)(81166006)(76176011)(66446008)(7696005)(64756008)(476003)(478600001)(26005)(86362001)(71200400001)(71190400001)(186003)(66556008)(66476007)(66946007)(25786009)(76116006)(66066001)(99286004)(102836004)(6916009)(6506007)(53546011)(52536014)(486006)(4326008)(11346002)(3846002)(6116002)(446003)(21314003)(559001)(579004)(309714004)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3122; H:AM4PR05MB3265.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: BCL:0; x-microsoft-antispam-message-info: A/q4yfUTsuja/9sGf92B8l+mf1+2vlgzuz7gWFdF4cwfmqXb452miQfCUg43gaXdWK4hsuMJxsdQEtIVHp/kmIt+coZaiedbxR0b8IGmVHrC3L8w/uAm0Ehx4a+rC/uF2xnqcnH3TPd4T/A0bz6ZrB2VQbzSq7urbx9GeVHSCwhk/1zmJUw0t2eYdX0xeTz60bLN5LXiOufDqSM2NMy27KLW8ad07qsGmEYr8YXw/Ue4dU+irgCbd1hXOvGmJ5tREZNuy9dYulwNXvGC3uWDhrL7W36ZHUQqq4v5seRDdDGyxqv4itzhIdJg7bqIJ3onhbhd2hcwTIDgaD1Ok1cvRzrB0PvVwhPZP3fYogABqmRCQ2LinaN7/6fnqdN2cnsJ6k5uzGwL961cOOOujFTgZmwL7QdAaEGonfOHDY+A8IG6sFqyJputWead9j05/hNE 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: 1fa4f3bf-ab92-415f-c356-08d7587df5d2 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Oct 2019 12:30:31.2942 (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: R59/Q5LuM0LYx4xiSdz28GlPw5gfjs/0iccfbCP9dpP3KktSbB6zcFUoajFiySdxmzRi108P92ZPLZoVpndMsEGuWcTKgY22YLZ606dzyT4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3122 Subject: Re: [dpdk-dev] [PATCH v2] ethdev: extend flow metadata 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" SGkgT2xpdmllciwNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogT2xpdmll ciBNYXR6IDxvbGl2aWVyLm1hdHpANndpbmQuY29tPg0KPiBTZW50OiBUaHVyc2RheSwgT2N0b2Jl ciAyNCwgMjAxOSAxMjoyMw0KPiBUbzogU2xhdmEgT3ZzaWllbmtvIDx2aWFjaGVzbGF2b0BtZWxs YW5veC5jb20+DQo+IENjOiBkZXZAZHBkay5vcmc7IE1hdGFuIEF6cmFkIDxtYXRhbkBtZWxsYW5v eC5jb20+OyBSYXNsYW4NCj4gRGFyYXdzaGVoIDxyYXNsYW5kQG1lbGxhbm94LmNvbT47IFRob21h cyBNb25qYWxvbg0KPiA8dGhvbWFzQG1vbmphbG9uLm5ldD4NCj4gU3ViamVjdDogUmU6IFtQQVRD SCB2Ml0gZXRoZGV2OiBleHRlbmQgZmxvdyBtZXRhZGF0YQ0KPg0KPiBIaSBTbGF2YSwNCj4NCj4g T24gVGh1LCBPY3QgMjQsIDIwMTkgYXQgMDY6NDk6NDFBTSArMDAwMCwgU2xhdmEgT3ZzaWllbmtv IHdyb3RlOg0KPiA+IEhpLCBPbGl2aWVyDQo+ID4NCj4gPiA+ID4gW3NuaXBdDQo+ID4gPiA+DQo+ ID4gPiA+ID4gPiAraW50DQo+ID4gPiA+ID4gPiArcnRlX2Zsb3dfZHluZl9tZXRhZGF0YV9yZWdp c3Rlcih2b2lkKQ0KPiA+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiA+ICsgICBpbnQgb2Zmc2V0Ow0K PiA+ID4gPiA+ID4gKyAgIGludCBmbGFnOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAg IHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRlX21idWZfZHluZmllbGQgZGVzY19vZmZzID0gew0KPiA+ ID4gPiA+ID4gKyAgICAgICAgICAgLm5hbWUgPSBNQlVGX0RZTkZfTUVUQURBVEFfTkFNRSwNCj4g PiA+ID4gPiA+ICsgICAgICAgICAgIC5zaXplID0gTUJVRl9EWU5GX01FVEFEQVRBX1NJWkUsDQo+ ID4gPiA+ID4gPiArICAgICAgICAgICAuYWxpZ24gPSBNQlVGX0RZTkZfTUVUQURBVEFfQUxJR04s DQo+ID4gPiA+ID4gPiArICAgICAgICAgICAuZmxhZ3MgPSBNQlVGX0RZTkZfTUVUQURBVEFfRkxB R1MsDQo+ID4gPiA+ID4gPiArICAgfTsNCj4gPiA+ID4gPiA+ICsgICBzdGF0aWMgY29uc3Qgc3Ry dWN0IHJ0ZV9tYnVmX2R5bmZsYWcgZGVzY19mbGFnID0gew0KPiA+ID4gPiA+ID4gKyAgICAgICAg ICAgLm5hbWUgPSBNQlVGX0RZTkZfTUVUQURBVEFfTkFNRSwNCj4gPiA+ID4gPiA+ICsgICB9Ow0K PiA+ID4gPiA+DQo+ID4gPiA+ID4gSSBkb24ndCBzZWUgdGhpbmsgd2UgbmVlZCAjZGVmaW5lcy4N Cj4gPiA+ID4gPiBZb3UgY2FuIGRpcmVjdGx5IHVzZSB0aGUgbmFtZSwgc2l6ZW9mKCkgYW5kIF9f YWxpZ25vZl9fKCkgaGVyZS4NCj4gPiA+ID4gPiBJZiB0aGUgaW5mb3JtYXRpb24gaXMgdXNlZCBl eHRlcm5hbGx5LCB0aGUgc3RydWN0dXJlIHNoYWxsIGJlDQo+ID4gPiA+ID4gbWFkZSBnbG9iYWwg bm9uLSBzdGF0aWMuDQo+ID4gPiA+DQo+ID4gPiA+IFRoZSBpbnRlbnRpb24gd2FzIHRvIGdhdGhl ciBhbGwgZHluYW1pYyBmaWVsZHMgZGVmaW5pdGlvbnMgaW4gb25lDQo+ID4gPiA+IHBsYWNlIChp biBydGVfbWJ1Zl9keW4uaCkuDQo+ID4gPg0KPiA+ID4gSWYgdGhlIGR5bmFtaWMgZmllbGQgaXMg b25seSBnb2luZyB0byBiZSB1c2VkIGluc2lkZSBydGVfZmxvdywgSQ0KPiA+ID4gdGhpbmsgdGhl cmUgaXMgbm8gbmVlZCB0byBleHBvc2UgaXQgaW4gcnRlX21idWZfZHluLmguDQo+ID4gPiBUaGUg b3RoZXIgcmVhc29uIGlzIEkgdGhpbmsgdGhlICNkZWZpbmUgYXJlIGp1c3QgInBhc3N0aHJvdWdo IiwgYW5kDQo+ID4gPiBkbyBub3QgcmVhbGx5IGJyaW5nIGFkZGVkIHZhbHVlLCBqdXN0IGFuIGlu ZGlyZWN0aW9uLg0KPiA+ID4NCj4gPiA+ID4gSXQgd291bGQgYmUgZWFzeSB0byBzZWUgYWxsIGZp ZWxkcyBpbiBvbmUgc2lnaHQgKHNvbWUgbWlnaHQgYmUNCj4gPiA+ID4gc2hhcmVkLCBzb21lIG1p Z2h0IGJlIG11dHVhbCBleGNsdXNpdmUsIGVzdGltYXRlIG1idWYgc3BhY2UsDQo+ID4gPiA+IHJl cXVpcmVkIGJ5IHZhcmlvdXMgZmVhdHVyZXMsIGV0Yy4pLiBTbywgd2UgY2FuJ3QganVzdCBmaWxs DQo+ID4gPiA+IHN0cnVjdHVyZSBmaWVsZHMgd2l0aCBzaW1wbGUgc2l6ZW9mKCkgYW5kIGFsaWdu b2YoKSBpbnN0ZWFkIG9mDQo+ID4gPiA+IGRlZmluaXRpb25zICh0aGUgZmllbGQgcGFyYW1ldGVy cyBtdXN0IGJlIGRlZmluZWQgb25jZSkuDQo+ID4gPiA+DQo+ID4gPiA+IEkgZG8gbm90IHNlZSB0 aGUgcmVhc29ucyB0byBtYWtlIHRhYmxlIGdsb2JhbC4gSSB3b3VsZCBwcmVmZXIgdGhlDQo+ID4g PiBkZWZpbml0aW9ucy4NCj4gPiA+ID4gLSB0aGUgZGVmaW5pdGlvbnMgYXJlIGNvbXBpbGUgdGlt ZSBwcm9jZXNzaW5nICh0YWJsZSBmaWVsZHMgYXJlDQo+ID4gPiA+IHJ1bnRpbWUpLCBpdCBwcm92 aWRlcyBjb2RlIG9wdGltaXphdGlvbiBhbmQgYmV0dGVyIHBlcmZvcm1hbmNlLg0KPiA+ID4NCj4g PiA+IFRoZXJlIGlzIGluZGVlZCBubyBuZWVkIHRvIG1ha2UgdGhlIHRhYmxlIGdsb2JhbCBpZiB0 aGUgZmllbGQgaXMNCj4gPiA+IHByaXZhdGUgdG8gcnRlX2Zsb3cuIEFib3V0IGJldHRlciBwZXJm b3JtYW5jZSwgbXkgdW5kZXJzdGFuZGluZyBpcw0KPiA+ID4gdGhhdCBpdCB3b3VsZCBvbmx5IGlt cGFjdCByZWdpc3RyYXRpb24sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/DQo+ID4NCj4gPiBPSywg SSB0aG91Z2h0IGFib3V0IHNvbWUgb3Bwb3J0dW5pdHkgdG8gYWxsb3cgYXBwbGljYXRpb24gdG8g cmVnaXN0ZXINCj4gPiBmaWVsZCBkaXJlY3RseSwgYnlwYXNzaW5nIHJ0ZV9mbG93X2R5bmZfbWV0 YWRhdGFfcmVnaXN0ZXIoKS4gU28gZWl0aGVyDQo+ID4gZGVmaW5pdGlvbnMgb3IgZmllbGQgZGVz Y3JpcHRpb24gdGFibGUgd2FzIHN1cHBvc2VkIHRvIGJlIGdsb2JhbC4NCj4gPiBJIGFncmVlLCBs ZXQncyBkbyBub3QgY29tcGxpY2F0ZSB0aGUgbWF0dGVyLCBJJ2xsIHdpbGwgbWFrZSBnbG9iYWwg dGhlDQo+ID4gbWV0YWRhdGEgZmllbGQgbmFtZSBkZWZpbml0aW9uIG9ubHkgLSBpbiB0aGUgcnRl X21idWZfZHluLmggaW4gb3JkZXINCj4gPiBqdXN0IHRvIGhhdmUgc29tZSBjZW50cmFsaXppbmcg cG9pbnQuDQo+DQo+IEJ5IHJlYWRpbmcgeW91ciBtYWlsLCB0aGluZ3MgYXJlIGFsc28gY2xlYXJl ciB0byBtZSBhYm91dCB3aGljaCBwYXJ0cyBuZWVkDQo+IGFjY2VzcyB0byB0aGlzIGZpZWxkLg0K Pg0KPiBUbyBzdW1tYXJpemUgd2hhdCBJIHVuZGVyc3RhbmQ6DQo+IC0gZHluIGZpZWxkIHJlZ2lz dHJhdGlvbiBpcyBkb25lIGluIHJ0ZV9mbG93IGxpYiB3aGVuIGNvbmZpZ3VyaW5nDQo+ICAgYSBm bG93IHVzaW5nIE1FVEENCj4gLSB0aGUgZHluYW1pYyBmaWVsZCB3aWxsIG5ldmVyIGJlIGdldC9z ZXQgaW4gYSBtYnVmIGJ5IGEgUE1EIG9yIHJ0ZV9mbG93DQo+ICAgYmVmb3JlIGEgZmxvdyB1c2lu ZyBNRVRBIGlzIGFkZGVkDQoNCkluIHRlc3RwbWQgd2l0aCBjdXJyZW50IHBhdGNoIC0geWVzLCBh bmQgdGhpcyBpcyBqdXN0IGEgc2FtcGxlLiBUaGUgY29tbW9uIHByYWN0aWNlIG9mDQplbmFibGlu ZyBtZXRhZGF0YSBtYXkgZGlmZmVyLiBJZiBhcHBsaWNhdGlvbiBzZWVzIHNvbWUgUE1EIHN1cHBv cnRpbmcgUlgvVFhfTUVUQURBVEENCm9mZmxvYWQgYW5kIGl0IGRlc2lyZXMgdG8gcmVjZWl2ZSBt ZXRhZGF0YSAtIGl0IHJlZ2lzdGVycyB0aGUgZHluYW1pYyBmaWVsZCBmb3Igb25lcy4NCg0KPiBP bmUgcXVlc3Rpb24gdGhlbjogd2h5IHdvdWxkIHlvdSBuZWVkIHRoZSBkeW4gZmllbGQgbmFtZSB0 byBiZSBleHBvcnRlZD8NCj4gRG9lcyB0aGUgUE1EIG5lZWQgdG8ga25vdyBpZiB0aGUgZmllbGQg aXMgcmVnaXN0ZXJlZCB3aXRoIGEgbG9va3VwIG9yDQo+IHNvbWV0aGluZyBsaWtlIHRoYXQ/IElm IHllcywgY2FuIHlvdSBkZXRhaWwgd2h5Pw0KDQpJIHRoaW5rIGl0IG1pZ2h0IGhhcHBlbiB0aGUg UE1EIGRvZXMuDQpSaWdodCBub3cgSSBoYXZlIGFuIGlzc3VlIHdpdGggbWx4NSBQTUQgY29tcGls ZWQgYXMgc2hhcmVkIGxpYnJhcnkuDQpUaGUgZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIHJ0ZV9mbG93 LmMgaXMgbm90IHNlZW4gaW4gUE1EIChqdXN0IGJlY2F1c2UgSSBmb3JnZXQNCnRvIGFkZCBvbmUg aW50byB0aGUgLm1hcCBmaWxlKS4gVGhlIHdheSBkeW5hbWljIGRhdGEgYXJlIGxpbmtlZCBpcyBz eXN0ZW0NCmRlcGVuZGVudCBhbmQgaXQgbWlnaHQgYmUgbmVlZGVkIHRvIG9wdGltaXplLiBJIG1l YW4gLSBpbiBzb21lDQpjYXNlcyBQTUQgbWlnaHQgbmVlZCB0byBkbyBsb29rdXAgZXhwbGljaXRs eSBhbmQgdXNlIGxvY2FsIGNvcGllcw0Kb2Ygb2Zmc2V0IGFuZCBtYXNrLiBTbycgSSdkIHByZWZl ciB0byBzZWUgZmllbGQgZGVzY3JpcHRvciBiZQ0KZ2xvYmFsIHZpc2libGUuIFllcywgUE1EIGNh biB0YWtlIHRoZSBvZmZzZXQvZmxhZyBkaXJlY3RseQ0KZnJvbSB0aGUgcnRlX2Zsb3cgdmFyaWFi bGVzIGFuZCBjYWNoZSBvbmVzIGludGVybmFsbHksDQpzbyBnbG9iYWwgZGVzY3JpcHRvciBpcyBq dXN0IHNvbWUga2luZCBvZiBpbnN1cmFuY2UuDQoNCkFzIGZvciB0aGUgbmFtZSAtIGl0IGlzIGxl c3MgY3JpdGljYWwsIGl0IG1heQ0KYmUganVzdCB1c2VmdWwgZm9yIHZhcmlvdXMgbG9nL2RlYnVn IG1lc3NhZ2VzIGFuZCBzbyBvbi4gVGhlIG90aGVyDQpyZWFzb24gdG8gaGF2ZSBuYW1lIGRlZmlu aXRpb24gaXMgdG8gcHV0IGl0IGluIHRoZSAiY2VudHJhbGl6aW5nIHBvaW50Ig0Kc29tZXdoZXJl IGluIHRoZSBydGVfbWJ1Zl9keW4uaCwgdG8gZ2F0aGVyIGFsbCBuYW1lcyB0b2dldGhlciBhbmQN CmVsaW1pbmF0ZSB0aGUgbmFtZSBjb25mbGljdHMgKHllcywgIHRoZSBkb2N1bWVudGVkIG5hbWUg Y29udmVudGlvbg0KcmVkdWNlcyB0aGUgcmlzaywgYnV0IGl0IGp1c3QgY29udmVuaWVudCB0byBz ZWUgYWxsIGZpZWxkcyBuYW1lcw0Kd2l0aGluIG9uZSBzaWdodCAtIGl0IGlzIGVhc3kgdG8gZGV0 ZXJtaW5lIHdoaWNoIGFyZSBzdXBwb3J0ZWQsIGV0YykuDQoNCj4gPg0KPiA+ID4gPg0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgIG9mZnNldCA9IHJ0ZV9tYnVmX2R5bmZpZWxkX3JlZ2lz dGVyKCZkZXNjX29mZnMpOw0KPiA+ID4gPiA+ID4gKyAgIGlmIChvZmZzZXQgPCAwKQ0KPiA+ID4g PiA+ID4gKyAgICAgICAgICAgZ290byBlcnJvcjsNCj4gPiA+ID4gPiA+ICsgICBmbGFnID0gcnRl X21idWZfZHluZmxhZ19yZWdpc3RlcigmZGVzY19mbGFnKTsNCj4gPiA+ID4gPiA+ICsgICBpZiAo ZmxhZyA8IDApDQo+ID4gPiA+ID4gPiArICAgICAgICAgICBnb3RvIGVycm9yOw0KPiA+ID4gPiA+ ID4gKyAgIHJ0ZV9mbG93X2R5bmZfbWV0YWRhdGFfb2ZmcyA9IG9mZnNldDsNCj4gPiA+ID4gPiA+ ICsgICBydGVfZmxvd19keW5mX21ldGFkYXRhX21hc2sgPSAoMVVMTCA8PCBmbGFnKTsNCj4gPiA+ ID4gPiA+ICsgICByZXR1cm4gMDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICtlcnJvcjoN Cj4gPiA+ID4gPiA+ICsgICBydGVfZmxvd19keW5mX21ldGFkYXRhX29mZnMgPSAtMTsNCj4gPiA+ ID4gPiA+ICsgICBydGVfZmxvd19keW5mX21ldGFkYXRhX21hc2sgPSAwVUxMOw0KPiA+ID4gPiA+ ID4gKyAgIHJldHVybiAtcnRlX2Vycm5vOw0KPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiA+ICBzdGF0aWMgaW50DQo+ID4gPiA+ID4gPiAgZmxvd19lcnIodWludDE2X3Qg cG9ydF9pZCwgaW50IHJldCwgc3RydWN0IHJ0ZV9mbG93X2Vycm9yDQo+ID4gPiA+ID4gPiAqZXJy b3IpIHsgZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9mbG93LmgNCj4gPiA+ID4g PiA+IGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2Zsb3cuaCBpbmRleCAzOTFhNDRhLi5hMjdlNjE5 IDEwMDY0NA0KPiA+ID4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2Zsb3cuaA0K PiA+ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2Zsb3cuaA0KPiA+ID4gPiA+ ID4gQEAgLTI3LDYgKzI3LDggQEANCj4gPiA+ID4gPiA+ICAjaW5jbHVkZSA8cnRlX3VkcC5oPg0K PiA+ID4gPiA+ID4gICNpbmNsdWRlIDxydGVfYnl0ZW9yZGVyLmg+DQo+ID4gPiA+ID4gPiAgI2lu Y2x1ZGUgPHJ0ZV9lc3AuaD4NCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX21idWYuaD4NCj4g PiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX21idWZfZHluLmg+DQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gICNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ID4gPiA+ID4gIGV4dGVybiAiQyIgew0KPiA+ ID4gPiA+ID4gQEAgLTQxNyw3ICs0MTksOCBAQCBlbnVtIHJ0ZV9mbG93X2l0ZW1fdHlwZSB7DQo+ ID4gPiA+ID4gPiAgICAgLyoqDQo+ID4gPiA+ID4gPiAgICAgICogW01FVEFdDQo+ID4gPiA+ID4g PiAgICAgICoNCj4gPiA+ID4gPiA+IC0gICAgKiBNYXRjaGVzIGEgbWV0YWRhdGEgdmFsdWUgc3Bl Y2lmaWVkIGluIG1idWYgbWV0YWRhdGENCj4gZmllbGQuDQo+ID4gPiA+ID4gPiArICAgICogTWF0 Y2hlcyBhIG1ldGFkYXRhIHZhbHVlLg0KPiA+ID4gPiA+ID4gKyAgICAqDQo+ID4gPiA+ID4gPiAg ICAgICogU2VlIHN0cnVjdCBydGVfZmxvd19pdGVtX21ldGEuDQo+ID4gPiA+ID4gPiAgICAgICov DQo+ID4gPiA+ID4gPiAgICAgUlRFX0ZMT1dfSVRFTV9UWVBFX01FVEEsDQo+ID4gPiA+ID4gPiBA QCAtMTIxMyw5ICsxMjE2LDE3IEBAIHN0cnVjdA0KPiA+ID4gcnRlX2Zsb3dfaXRlbV9pY21wNl9u ZF9vcHRfdGxhX2V0aCB7DQo+ID4gPiA+ID4gPiAjZW5kaWYNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiAgLyoqDQo+ID4gPiA+ID4gPiAtICogUlRFX0ZMT1dfSVRFTV9UWVBFX01FVEEuDQo+ID4g PiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRo aXMgc3RydWN0dXJlIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvcg0KPiA+ID4gPiA+ID4gKyBub3Rp Y2UNCj4gPiA+ID4gPiA+ICAgKg0KPiA+ID4gPiA+ID4gLSAqIE1hdGNoZXMgYSBzcGVjaWZpZWQg bWV0YWRhdGEgdmFsdWUuDQo+ID4gPiA+ID4gPiArICogUlRFX0ZMT1dfSVRFTV9UWVBFX01FVEEN Cj4gPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ID4gKyAqIE1hdGNoZXMgYSBzcGVjaWZpZWQgbWV0 YWRhdGEgdmFsdWUuIE9uIGVncmVzcywgbWV0YWRhdGENCj4gPiA+ID4gPiA+ICsgY2FuIGJlIHNl dCBlaXRoZXIgYnkNCj4gPiA+ID4gPiA+ICsgKiBtYnVmIHR4X21ldGFkYXRhIGZpZWxkIHdpdGgg UEtUX1RYX01FVEFEQVRBIGZsYWcgb3INCj4gPiA+ID4gPiA+ICsgKiBSVEVfRkxPV19BQ1RJT05f VFlQRV9TRVRfTUVUQS4gT24gaW5ncmVzcywNCj4gPiA+ID4gPiA+ICsgUlRFX0ZMT1dfQUNUSU9O X1RZUEVfU0VUX01FVEEgc2V0cw0KPiA+ID4gPiA+ID4gKyAqIG1ldGFkYXRhIGZvciBhIHBhY2tl dCBhbmQgdGhlIG1ldGFkYXRhIHdpbGwgYmUgcmVwb3J0ZWQNCj4gPiA+ID4gPiA+ICsgdmlhIG1i dWYgbWV0YWRhdGENCj4gPiA+ID4gPiA+ICsgKiBkeW5hbWljIGZpZWxkIHdpdGggUEtUX1JYX0RZ TkZfTUVUQURBVEEgZmxhZy4gVGhlIGR5bmFtaWMNCj4gPiA+IG1idWYNCj4gPiA+ID4gPiA+ICsg ZmllbGQgbXVzdCBiZQ0KPiA+ID4gPiA+ID4gKyAqIHJlZ2lzdGVyZWQgaW4gYWR2YW5jZSBieSBy dGVfZmxvd19keW5mX21ldGFkYXRhX3JlZ2lzdGVyKCkuDQo+ID4gPiA+ID4gPiAgICovDQo+ID4g PiA+ID4gPiAgc3RydWN0IHJ0ZV9mbG93X2l0ZW1fbWV0YSB7DQo+ID4gPiA+ID4gPiAgICAgcnRl X2JlMzJfdCBkYXRhOw0KPiA+ID4gPiA+ID4gQEAgLTE4MTMsNiArMTgyNCwxMyBAQCBlbnVtIHJ0 ZV9mbG93X2FjdGlvbl90eXBlIHsNCj4gPiA+ID4gPiA+ICAgICAgKiB1bmRlZmluZWQgYmVoYXZp b3IuDQo+ID4gPiA+ID4gPiAgICAgICovDQo+ID4gPiA+ID4gPiAgICAgUlRFX0ZMT1dfQUNUSU9O X1RZUEVfREVDX1RDUF9BQ0ssDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICAgLyoqDQo+ ID4gPiA+ID4gPiArICAgICogU2V0IG1ldGFkYXRhIG9uIGluZ3Jlc3Mgb3IgZWdyZXNzIHBhdGgu DQo+ID4gPiA+ID4gPiArICAgICoNCj4gPiA+ID4gPiA+ICsgICAgKiBTZWUgc3RydWN0IHJ0ZV9m bG93X2FjdGlvbl9zZXRfbWV0YS4NCj4gPiA+ID4gPiA+ICsgICAgKi8NCj4gPiA+ID4gPiA+ICsg ICBSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfTUVUQSwNCj4gPiA+ID4gPiA+ICB9Ow0KPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ICAvKioNCj4gPiA+ID4gPiA+IEBAIC0yMzAwLDYgKzIzMTgsNDMg QEAgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9zZXRfbWFjIHsNCj4gPiA+ID4gPiA+ICAgICB1aW50 OF90IG1hY19hZGRyW1JURV9FVEhFUl9BRERSX0xFTl07ICB9Ow0KPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ICsvKioNCj4gPiA+ID4gPiA+ICsgKiBAd2FybmluZw0KPiA+ID4gPiA+ID4gKyAqIEBi IEVYUEVSSU1FTlRBTDogdGhpcyBzdHJ1Y3R1cmUgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yDQo+ ID4gPiA+ID4gPiArbm90aWNlDQo+ID4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiA+ICsgKiBSVEVf RkxPV19BQ1RJT05fVFlQRV9TRVRfTUVUQQ0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiAr ICogU2V0IG1ldGFkYXRhLiBNZXRhZGF0YSBzZXQgYnkgbWJ1ZiB0eF9tZXRhZGF0YSBmaWVsZCB3 aXRoDQo+ID4gPiA+ID4gPiArICogUEtUX1RYX01FVEFEQVRBIGZsYWcgb24gZWdyZXNzIHdpbGwg YmUgb3ZlcnJpZGRlbiBieSB0aGlzDQo+IGFjdGlvbi4NCj4gPiA+ID4gPiA+ICtPbg0KPiA+ID4g PiA+ID4gKyAqIGluZ3Jlc3MsIHRoZSBtZXRhZGF0YSB3aWxsIGJlIGNhcnJpZWQgYnkgbWJ1ZiBt ZXRhZGF0YQ0KPiA+ID4gPiA+ID4gK2R5bmFtaWMgZmllbGQNCj4gPiA+ID4gPiA+ICsgKiB3aXRo IFBLVF9SWF9EWU5GX01FVEFEQVRBIGZsYWcgaWYgc2V0LiAgVGhlIGR5bmFtaWMgbWJ1Zg0KPiA+ ID4gPiA+ID4gK2ZpZWxkIG11c3QgYmUNCj4gPiA+ID4gPiA+ICsgKiByZWdpc3RlcmVkIGluIGFk dmFuY2UgYnkgcnRlX2Zsb3dfZHluZl9tZXRhZGF0YV9yZWdpc3RlcigpLg0KPiA+ID4gPiA+ID4g KyAqDQo+ID4gPiA+ID4gPiArICogQWx0ZXJpbmcgcGFydGlhbCBiaXRzIGlzIHN1cHBvcnRlZCB3 aXRoIG1hc2suIEZvciBiaXRzDQo+ID4gPiA+ID4gPiArd2hpY2ggaGF2ZSBuZXZlcg0KPiA+ID4g PiA+ID4gKyAqIGJlZW4gc2V0LCB1bnByZWRpY3RhYmxlIHZhbHVlIHdpbGwgYmUgc2VlbiBkZXBl bmRpbmcgb24NCj4gPiA+ID4gPiA+ICtkcml2ZXINCj4gPiA+ID4gPiA+ICsgKiBpbXBsZW1lbnRh dGlvbi4gRm9yIGxvb3BiYWNrL2hhaXJwaW4gcGFja2V0LCBtZXRhZGF0YSBzZXQNCj4gPiA+ID4g PiA+ICtvbiBSeC9UeCBtYXkNCj4gPiA+ID4gPiA+ICsgKiBvciBtYXkgbm90IGJlIHByb3BhZ2F0 ZWQgdG8gdGhlIG90aGVyIHBhdGggZGVwZW5kaW5nIG9uIEhXDQo+ID4gPiA+ID4gY2FwYWJpbGl0 eS4NCj4gPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ID4gKyAqIFJURV9GTE9XX0lURU1fVFlQRV9N RVRBIG1hdGNoZXMgbWV0YWRhdGEuDQo+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArc3Ry dWN0IHJ0ZV9mbG93X2FjdGlvbl9zZXRfbWV0YSB7DQo+ID4gPiA+ID4gPiArICAgcnRlX2JlMzJf dCBkYXRhOw0KPiA+ID4gPiA+ID4gKyAgIHJ0ZV9iZTMyX3QgbWFzazsNCj4gPiA+ID4gPiA+ICt9 Ow0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qIE1idWYgZHluYW1pYyBmaWVsZCBvZmZz ZXQgZm9yIG1ldGFkYXRhLiAqLyBleHRlcm4gaW50DQo+ID4gPiA+ID4gPiArcnRlX2Zsb3dfZHlu Zl9tZXRhZGF0YV9vZmZzOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qIE1idWYgZHlu YW1pYyBmaWVsZCBmbGFnIG1hc2sgZm9yIG1ldGFkYXRhLiAqLyBleHRlcm4NCj4gPiA+ID4gPiA+ ICt1aW50NjRfdCBydGVfZmxvd19keW5mX21ldGFkYXRhX21hc2s7DQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiArLyogTWJ1ZiBkeW5hbWljIGZpZWxkIHBvaW50ZXIgZm9yIG1ldGFkYXRhLiAq LyAjZGVmaW5lDQo+ID4gPiA+ID4gPiArUlRFX0ZMT1dfRFlORl9NRVRBREFUQShtKSBcDQo+ID4g PiA+ID4gPiArICAgUlRFX01CVUZfRFlORklFTEQoKG0pLCBydGVfZmxvd19keW5mX21ldGFkYXRh X29mZnMsDQo+IHVpbnQzMl90DQo+ID4gPiA+ID4gKikNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiA+ICsvKiBNYnVmIGR5bmFtaWMgZmxhZyBmb3IgbWV0YWRhdGEuICovICNkZWZpbmUNCj4gPiA+ ID4gPiA+ICtQS1RfUlhfRFlORl9NRVRBREFUQQ0KPiA+ID4gPiA+ID4gKyhydGVfZmxvd19keW5m X21ldGFkYXRhX21hc2spDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJIHdv bmRlciBpZiBoZWxwZXJzIGxpa2UgdGhpcyB3b3VsZG4ndCBiZSBiZXR0ZXIsIGJlY2F1c2UgdGhl eQ0KPiA+ID4gPiA+IGNvbWJpbmUgdGhlIGZsYWcgYW5kIHRoZSBmaWVsZDoNCj4gPiA+ID4gPg0K PiA+ID4gPiA+IC8qKg0KPiA+ID4gPiA+ICAqIFNldCBtZXRhZGF0YSBkeW5hbWljIGZpZWxkIGFu ZCBmbGFnIGluIG1idWYuDQo+ID4gPiA+ID4gICoNCj4gPiA+ID4gPiAgKiBydGVfZmxvd19keW5m X21ldGFkYXRhX3JlZ2lzdGVyKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGZpcnN0Lg0KPiA+ID4g PiA+ICAqLw0KPiA+ID4gPiA+IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4gPiA+IHN0YXRpYyBp bmxpbmUgdm9pZCBydGVfbWJ1Zl9keW5fbWV0YWRhdGFfc2V0KHN0cnVjdCBydGVfbWJ1ZiAqbSwN Cj4gPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBtZXRhZGF0YSkgew0KPiA+ID4gPiA+ICAgICAgICAqUlRFX01CVUZfRFlORklFTEQobSwgcnRl X2Zsb3dfZHluZl9tZXRhZGF0YV9vZmZzLA0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgKikgPSBtZXRhZGF0YTsNCj4gPiA+ID4gPiAgICAgICAgbS0+b2xfZmxhZ3Mg fD0gcnRlX2Zsb3dfZHluZl9tZXRhZGF0YV9tYXNrOyB9DQo+ID4gPiA+IFNldHRpbmcgZmxhZyBs b29rcyByZWR1bmRhbnRseS4NCj4gPiA+ID4gV2hhdCBpZiBkcml2ZXIganVzdCByZXBsYWNlcyB0 aGUgbWV0YWRhdGEgYW5kIGZsYWcgaXMgYWxyZWFkeSBzZXQ/DQo+ID4gPiA+IFRoZSBvdGhlciBv cHRpb24gLSB0aGUgZmxhZ3MgKGZvciBzZXQgb2YgZmllbGRzKSBtaWdodCBiZSBzZXQgaW4NCj4g Y29tYmluYXRpb25zLg0KPiA+ID4gPiBtYnVmIGZpZWxkIGlzIHN1cHBvc2VkIHRvIGJlIGVuZ2Fn ZWQgaW4gZGF0YXBhdGgsIHBlcmZvcm1hbmNlIGlzDQo+ID4gPiA+IHZlcnkgY3JpdGljYWwsIGFk ZGluZyBvbmUgbW9yZSBhYnN0cmFjdGlvbiBsYXllciBzZWVtcyBub3QgdG8gYmUNCj4gcmVsZXZh bnQuDQo+ID4gPg0KPiA+ID4gT2ssIHRoYXQgd2FzIGp1c3QgYSBzdWdnZXN0aW9uLiBMZXQncyB1 c2UgeW91ciBhY2Nlc3NvcnMgaWYgeW91IGZlYXINCj4gPiA+IGEgcGVyZm9ybWFuY2UgaW1wYWN0 Lg0KPiA+IFRoZSBzaW1wbGUgZXhhbXBsZSAtIG1seDUgUE1EIGhhcyB0aGUgcnhfYnVyc3Qgcm91 dGluZSBpbXBsZW1lbnRlZA0KPiA+IHdpdGggdmVjdG9yIGluc3RydWN0aW9ucywgYW5kIGl0IHBy b2Nlc3NlcyBmb3VyIHBhY2tldHMgYXQgb25jZS4gTm8NCj4gPiBuZWVkIHRvIGNoZWNrIGZpZWxk IGF2YWlsYWJpbGl0eSBmb3VyIHRpbWVzLCBhbmQgdGhlIHN0b3JpbmcgdGhlDQo+ID4gbWV0YWRh dGEgaXMgdGhlIHN1YmplY3QgZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uIHdpdGggdmVjdG9yIGlu c3RydWN0aW9ucy4NCj4gPiBJdCBpcyBhIGJpdCBkaWZmaWN1bHQgdG8gcHJvdmlkZSBjb21tb24g aGVscGVycyB0byBoYW5kbGUgdGhlIG1ldGFkYXRhDQo+ID4gZmllbGQgZHVlIHRvIGV4dHJlbWVs eSBoaWdoIG9wdGltaXphdGlvbiByZXF1aXJlbWVudHMuDQo+DQo+IG9rLCBnb3QgaXQNCj4NCj4g PiA+IE5ldmVydGhlbGVzcyBJIHN1Z2dlc3QgdG8gdXNlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25z IGluIHBsYWNlIG9mDQo+ID4gPiBtYWNyb3MgaWYgcG9zc2libGUuIEZvciBSVEVfTUJVRl9EWU5G SUVMRCgpLCBJIHVzZWQgYSBtYWNybyBiZWNhdXNlDQo+ID4gPiBpdCdzIHRoZSBvbmx5IHdheSB0 byBwcm92aWRlIGEgdHlwZSB0byBjYXN0IHRoZSByZXN1bHQuIEJ1dCBpbiB5b3VyDQo+ID4gPiBj YXNlLCB5b3Uga25vdyBpdCdzIGEgdWludDMyX3QgKi4NCj4gPiBXaGF0IElmIG9uZSBuZWVkcyB0 byBzcGVjaWZ5IHRoZSBhZGRyZXNzIG9mIGZpZWxkPyBNYWNybyBhbGxvd3MgdG8gZG8NCj4gPiB0 aGF0LCBpbmxpbmUgZnVuY3Rpb25zIC0gZG8gbm90LiBQYWNrZXRzIG1heSBiZSBwcm9jZXNzZWQg aW4gYml6YXJyZQ0KPiA+IHdheXMsIGZvciBleGFtcGxlIGluIGEgYmF0Y2gsIHdpdGggdmVjdG9y IGluc3RydWN0aW9ucy4gT0ssIEknbGwNCj4gPiBwcm92aWRlIHRoZSBzZXQvZ2V0IHJvdXRpbmVz LCBidXQgSSdtIG5vdCBzdXJlIHdoZXRoZXIgd2lsbCB1c2Ugb25lcyBpbiBtbHg1DQo+IGNvZGUu DQo+ID4gSW4gbXkgb3BpbmlvbiBpdCBqdXN0IG9ic2N1cmVzIHRoZSBmaWVsZCBuYXR1cmUuIEZp ZWxkIGlzIGp1c3QgYQ0KPiA+IGZpZWxkLCBBRkFJVSwgaXQgaXMgbWFpbiBpZGVhIG9mIHlvdXIg cGF0Y2gsIHRoZSB3YXkgdG8gaGFuZGxlIGR5bmFtaWMNCj4gPiBmaWVsZCBzaG91bGQgYmUgY2xv c2UgdG8gaGFuZGxpbmcgdXN1YWwgc3RhdGljIGZpZWxkcywgSSB0aGluay4gTWFjcm8NCj4gPiBw b2ludGVyIGZvbGxvd3MgdGhpcyBhcHByb2FjaCwgcm91dGluZXMgLSBkb2VzIG5vdC4NCj4NCj4g V2VsbCwgSSBqdXN0IHRoaW5rIHRoYXQ6DQo+ICAgcnRlX21idWZfc2V0X3RpbWVfc3RhbXAobSwg MTIzNCk7DQo+IGlzIG1vcmUgcmVhZGFibGUgdGhhbjoNCj4gICAqUlRFX01CVUZfVElNRVNUQU1Q KG0pID0gMTIzNDsNCg0KSSBpbXBsZW1lbnRlZCB0aGVzZSBtZXRhZGF0YSBzZXQvZ2V0IGluIHYz LCBhcyB5b3UgcHJvcG9zZWQuDQpCdXQsIG1seDUgUE1EIGRvZXMgbm90IHVzZSB0aGVzZSBvbmVz IChwb3NzaWJsZSwgSSdsbCByZWZhY3RvciBzb21lIG9jY3VycmVuY2VzKQ0KQlRXLCBJIGRpZCBu b3QgZmluZCBhbnkgcnRlX21idWZfc2V0X3h4eHgoKSBpbXBsZW1lbnRlZD8gRGlkIEkgbWlzcyBz bXRoPw0KU2hvdWxkIHdlIHN0YXJ0IHdpdGggbWV0YWRhdGEgZmllbGQgc3BlY2lmaWNhbGx5PyDw n5iKDQoNCj4NCj4gQW55d2F5LCBpbiB5b3VyIGNhc2UsIGlmIHlvdSBuZWVkIHRvIHVzZSB2ZWN0 b3IgaW5zdHJ1Y3Rpb25zIGluIHRoZSBQTUQsIEkNCj4gZ3Vlc3MgeW91IHdpbGwgZGlyZWN0bHkg dXNlIHRoZSBvZmZzZXQuDQoNClJpZ2h0Lg0KDQo+DQo+ID4gPiA+IEFsc28sIG1ldGFkYXRhIGlz IG5vdCBmZWF0dXJlIG9mIG1idWYuIEl0IHNob3VsZCBoYXZlIHJ0ZV9mbG93IHByZWZpeC4NCj4g PiA+DQo+ID4gPiBZZXMsIHN1cmUuIFRoZSBleGFtcGxlIGRlcml2ZXMgZnJvbSBhIHRlc3QgSSd2 ZSBkb25lLCBhbmQgSSBmb3Jnb3QNCj4gPiA+IHRvIGNoYW5nZSBpdC4NCj4gPiA+DQo+ID4gPg0K PiA+ID4gPiA+IC8qKg0KPiA+ID4gPiA+ICAqIEdldCBtZXRhZGF0YSBkeW5hbWljIGZpZWxkIHZh bHVlIGluIG1idWYuDQo+ID4gPiA+ID4gICoNCj4gPiA+ID4gPiAgKiBydGVfZmxvd19keW5mX21l dGFkYXRhX3JlZ2lzdGVyKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGZpcnN0Lg0KPiA+ID4gPiA+ ICAqLw0KPiA+ID4gPiA+IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4gPiA+IHN0YXRpYyBpbmxp bmUgaW50IHJ0ZV9tYnVmX2R5bl9tZXRhZGF0YV9nZXQoY29uc3Qgc3RydWN0IHJ0ZV9tYnVmDQo+ ICptLA0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90ICptZXRhZGF0YSkgew0KPiA+ID4gPiA+ICAgICAgICBpZiAoKG0tPm9sX2ZsYWdzICYg cnRlX2Zsb3dfZHluZl9tZXRhZGF0YV9tYXNrKSA9PSAwKQ0KPiA+ID4gPiA+ICAgICAgICAgICAg ICAgIHJldHVybiAtMTsNCj4gPiA+ID4gV2hhdCBpZiBtZXRhZGF0YSBpcyAweEZGRkZGRkZGID8N Cj4gPiA+ID4gVGhlIGNoZWNraW5nIG9mIGF2YWlsYWJpbGl0eSBtaWdodCBlbWJyYWNlIGxhcmdl ciBjb2RlIGJsb2NrLCBzbw0KPiA+ID4gPiB0aGlzIG1pZ2h0IGJlIG5vdCB0aGUgYmVzdCBwbGFj ZSB0byBjaGVjayBhdmFpbGFiaWxpdHkuDQo+ID4gPiA+DQo+ID4gPiA+ID4gICAgICAgICptZXRh ZGF0YSA9ICpSVEVfTUJVRl9EWU5GSUVMRChtLA0KPiA+ID4gcnRlX2Zsb3dfZHluZl9tZXRhZGF0 YV9vZmZzLA0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCAqKTsNCj4gPiA+ID4gPiAgICAgICAgcmV0dXJuIDA7DQo+ID4gPiA+ID4gfQ0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gLyoqDQo+ID4gPiA+ID4gICogRGVsZXRlIHRoZSBtZXRhZGF0YSBkeW5hbWlj IGZsYWcgaW4gbWJ1Zi4NCj4gPiA+ID4gPiAgKg0KPiA+ID4gPiA+ICAqIHJ0ZV9mbG93X2R5bmZf bWV0YWRhdGFfcmVnaXN0ZXIoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgZmlyc3QuDQo+ID4gPiA+ ID4gICovDQo+ID4gPiA+ID4gX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ID4gc3RhdGljIGlu bGluZSB2b2lkIHJ0ZV9tYnVmX2R5bl9tZXRhZGF0YV9kZWwoc3RydWN0IHJ0ZV9tYnVmICptKSB7 DQo+ID4gPiA+ID4gICAgICAgIG0tPm9sX2ZsYWdzICY9IH5ydGVfZmxvd19keW5mX21ldGFkYXRh X21hc2s7IH0NCj4gPiA+ID4gPg0KPiA+ID4gPiBTb3JyeSwgSSBkbyBub3Qgc2VlIHRoZSBwcmFj dGljYWwgdXNlY2FzZSBmb3IgdGhlc2UgaGVscGVycy4gSW4gbXkNCj4gPiA+ID4gb3BpbmlvbiBp dA0KPiA+ID4gaXMganVzdCBzb21lIGtpbmQgb2Ygb2JzY3VyYXRpb24uDQo+ID4gPiA+IFRoZXkg ZG8gcmVwbGFjZSB0aGUgdmVyeSBzaW1wbGUgY29kZSBhbmQgaW50cm9kdWNlIHNvbWUgcmlzayBv Zg0KPiA+ID4gcGVyZm9ybWFuY2UgaW1wYWN0Lg0KPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiAgLyoNCj4gPiA+ID4gPiA+ICAgKiBEZWZpbml0aW9uIG9mIGEgc2luZ2xlIGFjdGlvbi4N Cj4gPiA+ID4gPiA+ICAgKg0KPiA+ID4gPiA+ID4gQEAgLTI1MzMsNiArMjU4OCwzMiBAQCBlbnVt IHJ0ZV9mbG93X2NvbnZfb3AgeyAgfTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgLyoqDQo+ ID4gPiA+ID4gPiArICogQ2hlY2sgaWYgbWJ1ZiBkeW5hbWljIGZpZWxkIGZvciBtZXRhZGF0YSBp cyByZWdpc3RlcmVkLg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogQHJldHVybg0K PiA+ID4gPiA+ID4gKyAqICAgVHJ1ZSBpZiByZWdpc3RlcmVkLCBmYWxzZSBvdGhlcndpc2UuDQo+ ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ ID4gPiArc3RhdGljIGlubGluZSBpbnQNCj4gPiA+ID4gPiA+ICtydGVfZmxvd19keW5mX21ldGFk YXRhX2F2YWlsKHZvaWQpIHsNCj4gPiA+ID4gPiA+ICsgICByZXR1cm4gISFydGVfZmxvd19keW5m X21ldGFkYXRhX21hc2s7IH0NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IF9yZWdpc3RlcmVkKCkgaW5z dGVhZCBvZiBfYXZhaWwoKSA/DQo+ID4gPiA+IEFjY2VwdGVkLCBzb3VuZHMgYmV0dGVyLg0KPiA+ DQo+ID4gSG1tLCBJIGNoYW5nZWQgbXkgb3BpbmlvbiAtIHdlIGFscmVhZHkgaGF2ZQ0KPiA+IHJ0 ZV9mbG93X2R5bmZfbWV0YWRhdGFfcmVnaXN0ZXIodm9pZCkuIElzIGl0IE9LIHRvIGhhdmUNCj4g PiBydGVfZmxvd19keW5mX21ldGFkYXRhX3JlZ2lzdGVyRUQodm9pZCkgPw0KPiA+IEl0IHdvdWxk IGJlIGVhc3kgdG8gbWlzdHlwZS4NCj4NCj4gd2hhdCBhYm91dCB4eHhfaXNfcmVnaXN0ZXJlZCgp ID8NCkl0IHNlZW1zIHRvIGJlIG5vdCBtdWNoIGJldHRlciwgc29ycnkg4pi5DQo+IGlmIHlvdSBm ZWVsIGl0J3MgdG9vIGxvbmcsIG9rLCBsZXQncyBrZWVwIGF2YWlsKCkNCkFjdHVhbGx5LCBJIHRl bmQgdG8gY29tcGxldGUgd2l0aCAiX2F2YWlsYWJsZSIsIGJ1dCBpdCBpcyByZWFsbHkgbG9uZy4N Cg0KPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsv KioNCj4gPiA+ID4gPiA+ICsgKiBSZWdpc3RlciBtYnVmIGR5bmFtaWMgZmllbGQgYW5kIGZsYWcg Zm9yIG1ldGFkYXRhLg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogVGhpcyBmdW5j dGlvbiBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byB1c2UgU0VUX01FVEEgYWN0aW9uDQo+ID4gPiA+ ID4gPiAraW4gb3JkZXIgdG8NCj4gPiA+ID4gPiA+ICsgKiByZWdpc3RlciB0aGUgZHluYW1pYyBt YnVmIGZpZWxkLiBPdGhlcndpc2UsIHRoZSBkYXRhDQo+ID4gPiA+ID4gPiArY2Fubm90IGJlIGRl bGl2ZXJlZCB0bw0KPiA+ID4gPiA+ID4gKyAqIGFwcGxpY2F0aW9uLg0KPiA+ID4gPiA+ID4gKyAq DQo+ID4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ID4gKyAqICAgMCBvbiBzdWNjZXNz LCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzDQo+ID4g PiBzZXQuDQo+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFs DQo+ID4gPiA+ID4gPiAraW50DQo+ID4gPiA+ID4gPiArcnRlX2Zsb3dfZHluZl9tZXRhZGF0YV9y ZWdpc3Rlcih2b2lkKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKioNCj4gPiA+ID4g PiA+ICAgKiBDaGVjayB3aGV0aGVyIGEgZmxvdyBydWxlIGNhbiBiZSBjcmVhdGVkIG9uIGEgZ2l2 ZW4gcG9ydC4NCj4gPiA+ID4gPiA+ICAgKg0KPiA+ID4gPiA+ID4gICAqIFRoZSBmbG93IHJ1bGUg aXMgdmFsaWRhdGVkIGZvciBjb3JyZWN0bmVzcyBhbmQgd2hldGhlciBpdA0KPiA+ID4gPiA+ID4g Y291bGQgYmUgYWNjZXB0ZWQgZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfbWJ1Zi9ydGVfbWJ1Zl9k eW4uaA0KPiA+ID4gPiA+ID4gYi9saWIvbGlicnRlX21idWYvcnRlX21idWZfZHluLmggaW5kZXgg NmUyYzgxNi4uNGZmMzNhYyAxMDA2NDQNCj4gPiA+ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfbWJ1 Zi9ydGVfbWJ1Zl9keW4uaA0KPiA+ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9tYnVmL3J0ZV9t YnVmX2R5bi5oDQo+ID4gPiA+ID4gPiBAQCAtMTYwLDQgKzE2MCwxMiBAQCBpbnQgcnRlX21idWZf ZHluZmxhZ19sb29rdXAoY29uc3QgY2hhcg0KPiA+ID4gKm5hbWUsDQo+ID4gPiA+ID4gPiAgICov DQo+ID4gPiA+ID4gPiAgI2RlZmluZSBSVEVfTUJVRl9EWU5GSUVMRChtLCBvZmZzZXQsIHR5cGUp DQo+ID4gPiA+ID4gPiAoKHR5cGUpKCh1aW50cHRyX3QpKG0pDQo+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiAob2Zmc2V0KSkpDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKy8qKg0KPiA+ID4g PiA+ID4gKyAqIEZsb3cgbWV0YWRhdGEgZHluYW1pYyBmaWVsZCBkZWZpbml0aW9ucy4NCj4gPiA+ ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ICsjZGVmaW5lIE1CVUZfRFlORl9NRVRBREFUQV9OQU1F ICJmbG93LW1ldGFkYXRhIg0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgTUJVRl9EWU5GX01FVEFEQVRB X1NJWkUgc2l6ZW9mKHVpbnQzMl90KSAjZGVmaW5lDQo+ID4gPiA+ID4gPiArTUJVRl9EWU5GX01F VEFEQVRBX0FMSUdOIF9fYWxpZ25vZl9fKHVpbnQzMl90KSAjZGVmaW5lDQo+ID4gPiA+ID4gPiAr TUJVRl9EWU5GX01FVEFEQVRBX0ZMQUdTIDANCj4gPiA+ID4gPg0KPiA+ID4gPiA+IElmIHRoaXMg ZmxhZyBpcyBvbmx5IHRvIGJlIHVzZWQgaW4gcnRlX2Zsb3csIGl0IGNhbiBzdGF5IGluIHJ0ZV9m bG93Lg0KPiA+ID4gPiA+IFRoZSBuYW1lIHNob3VsZCBmb2xsb3cgdGhlIGZ1bmN0aW9uIG5hbWUg Y29udmVudGlvbnMsIEkgc3VnZ2VzdA0KPiA+ID4gPiA+ICJydGVfZmxvd19tZXRhZGF0YSIuDQo+ ID4gPiA+DQo+ID4gPiA+IFRoZSBkZWZpbml0aW9uczoNCj4gPiA+ID4gTUJVRl9EWU5GX01FVEFE QVRBX05BTUUsDQo+ID4gPiA+IE1CVUZfRFlORl9NRVRBREFUQV9TSVpFLA0KPiA+ID4gPiBNQlVG X0RZTkZfTUVUQURBVEFfQUxJR04NCj4gPiA+ID4gYXJlIGdsb2JhbC4gcnRlX2Zsb3cgcHJvcG9z ZXMgb25seSBtaW5pbWFsIHNldCB0eW8gY2hlY2sgYW5kDQo+ID4gPiA+IGFjY2VzcyB0aGUgbWV0 YWRhdGEuIEJ5IGtub3dpbmcgdGhlIGZpZWxkIG5hbWVzIGFwcGxpY2F0aW9ucyB3b3VsZA0KPiA+ ID4gPiBoYXZlIHRoZSBtb3JlIGZsZXhpYmlsaXR5IGluIHByb2Nlc3NpbmcgdGhlIGZpZWxkcywg Zm9yIGV4YW1wbGUgaXQNCj4gPiA+ID4gYWxsb3dzIHRvIG9wdGltaXplIHRoZSBoYW5kbGluZyBv ZiBtdWx0aXBsZSBkeW5hbWljIGZpZWxkcyAuIFRoZQ0KPiA+ID4gPiBkZWZpbml0aW9uIG9mIG1l dGFkYXRhIHNpemUgYWxsb3dzIHRvIGdlbmVyYXRlIG9wdGltaXplZCBjb2RlOg0KPiA+ID4gPiAj aWYgTUJVRl9EWU5GX01FVEFEQVRBX1NJWkUgPT0gc2l6ZW9mKHVpbnQzMikNCj4gPiA+ID4gICAg ICAgICAqUlRFX01CVUZfRFlORklFTEQobSkgPSBnZXRfbWV0YWRhdGFfMzJiaXQoKSAjZWxzZQ0K PiA+ID4gPiAgICAgICAgICpSVEVfTUJVRl9EWU5GSUVMRChtKSA9IGdldF9tZXRhZGF0YV82NGJp dCgpICNlbmRpZg0KPiA+ID4NCj4gPiA+IEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gd2h5IHRoZSBz YW1lIGR5bmFtaWMgZmllbGQgY291bGQgaGF2ZQ0KPiA+ID4gZGlmZmVyZW50IHNpemVzLCBJIGV2 ZW4gdGhpbmsgaXQgY291bGQgYmUgZGFuZ2Vyb3VzLiBZb3VyIGFjY2Vzc29ycw0KPiA+ID4gc3Vw cG9zZSB0aGF0IHRoZSBtZXRhZGF0YSBpcyBhIHVpbnQzMl90LiBIYXZpbmcgYSBjb21waWxlLXRp bWUNCj4gPiA+IG9wdGlvbiBmb3IgdGhhdCBkb2VzIG5vdCBsb29rIGRlc2lyYWJsZS4NCj4gPg0K PiA+IEkgdHJpZWQgdG8gcHJvdmlkZSBtYXhpbWFsIGZsZXhpYmlsaXR5IGFuZCBJdCB3YXMganVz dCBhbiBleGFtcGxlIG9mDQo+ID4gdGhlIHRoaW5nIHdlIGNvdWxkIGRvIHdpdGggZ2xvYmFsIGRl ZmluaXRpb25zLiBJZiB5b3UgdGhpbmsgd2UgZG8gbm90DQo+ID4gbmVlZCBpdCAtIE9LLCBsZXQn cyBkbyB0aGluZ3Mgc2ltcGxlci4NCj4gPg0KPiA+ID4NCj4gPiA+IEp1c3QgYSBzaWRlIG5vdGU6 IHdlIGhhdmUgdG8gdGFrZSBjYXJlIHdoZW4gYWRkaW5nIGEgbmV3ICpwdWJsaWMqDQo+ID4gPiBk eW5hbWljIGZpZWxkIHRoYXQgaXQgd29uJ3QgY2hhbmdlIGluIHRoZSBmdXR1cmU6IHRoZSBhY2Nl c3NvcnMgYXJlDQo+ID4gPiBtYWNyb3Mgb3Igc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIHNvIHRo ZXkgYXJlIGVtYmVkZGVkIGluIHRoZSBiaW5hcmllcy4NCj4gPiA+IFRoaXMgaXMgcHJvYmFibHkg c29tZXRoaW5nIHdlIHNob3VsZCBkaXNjdXNzIGFuZCBtYXkgbm90IGJlIHdoZW4NCj4gPiA+IHVw ZGF0aW5nIHRoZSBkcGRrIChhcyBzaGFyZWQgbGliKS4NCj4gPg0KPiA+IFllcywgYWdyZWUsIGRl ZmluZXMganVzdCB3aWxsIG5vdCB3b3JrIGNvcnJlY3QgaW4gY29ycmVjdCB3YXkgYW5kIGV2ZW4g YnJlYWsNCj4gYW4gQUJJLg0KPiA+IEFzIHdlIGRlY2lkZWQgLSBnbG9iYWwgbWV0YWRhdGEgZGVm aW5lcyBNQlVGX0RZTkZfTUVUQURBVEFfeHh4eA0KPiBzaG91bGQNCj4gPiBiZSByZW1vdmVkLg0K PiA+DQo+ID4gPg0KPiA+ID4gPiBNQlVGX0RZTkZfTUVUQURBVEFfRkxBR1MgZmxhZyBpcyBub3Qg dXNlZCBieSBydGVfZmxvdywgdGhpcyBmbGFnDQo+ID4gPiA+IGlzIHJlbGF0ZWQgZXhjbHVzaXZl bHkgdG8gZHluYW1pYyBtYnVmICAiIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0DQo+IGJl IDAiLg0KPiA+ID4gPiBXb3VsZCB5b3UgbGlrZSB0byBkcm9wIHRoaXMgZGVmaW5pdGlvbj8NCj4g PiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IElmIHRoZSBmbGFnIGlzIGdvaW5nIHRvIGJlIHVz ZWQgaW4gc2V2ZXJhbCBwbGFjZXMgaW4gZHBkaw0KPiA+ID4gPiA+IChydGVfZmxvdywgcG1kLCBh cHAsIC4uLiksIEkgd29uZGVyIGlmIGl0IHNob3VsZG4ndCBiZSBkZWZpbmVkDQo+ID4gPiA+ID4g aXQgaW4gcnRlX21idWZfZHluLmMuIEkNCj4gPiA+IG1lYW46DQo+ID4gPiA+ID4NCj4gPiA+ID4g PiA9PT09DQo+ID4gPiA+ID4gLyogcnRlX21idWZfZHluLmMgKi8NCj4gPiA+ID4gPiBjb25zdCBz dHJ1Y3QgcnRlX21idWZfZHluZmllbGQgcnRlX21idWZfZHluZmllbGRfZmxvd19tZXRhZGF0YSA9 IHsNCj4gPiA+ID4gPiAgICAuLi4NCj4gPiA+ID4gPiB9Ow0KPiA+ID4gPiBJbiB0aGlzIGNhc2Ug d2Ugd291bGQgbWFrZSB0aGlzIGRlc2NyaXB0b3IgZ2xvYmFsLg0KPiA+ID4gPiBJdCBpcyBubyBu ZWVkZWQsIGJlY2F1c2UgdGhlcmUgSXMgbm8gc3VwcG9zZWQgYW55IHVzYWdlLCBidXQgYnkNCj4g PiA+ID4gcnRlX2Zsb3dfZHluZl9tZXRhZGF0YV9yZWdpc3RlcigpIG9ubHkuIFRoZQ0KPiA+ID4N Cj4gPiA+IFllcywgaW4gbXkgZXhhbXBsZSBJIHdhc24ndCBzdXJlIGl0IHdhcyBnb2luZyB0byBi ZSBwcml2YXRlIHRvDQo+ID4gPiBydGVfZmxvdyAoc2VlICJJZiB0aGUgZmxhZyBpcyBnb2luZyB0 byBiZSB1c2VkIGluIHNldmVyYWwgcGxhY2VzIGluDQo+ID4gPiBkcGRrIChydGVfZmxvdywgcG1k LCBhcHAsIC4uLikiKS4NCj4gPiA+DQo+ID4gPiBTbyB5ZXMsIEkgYWdyZWUgdGhlIHN0cnVjdCBz aG91bGQgcmVtYWluIHByaXZhdGUuDQo+ID4gT0suDQo+ID4NCj4gPiA+DQo+ID4gPg0KPiA+ID4g PiA+IGludCBydGVfbWJ1Zl9keW5maWVsZF9mbG93X21ldGFkYXRhX29mZnNldCA9IC0xOyBjb25z dCBzdHJ1Y3QNCj4gPiA+ID4gPiBydGVfbWJ1Zl9keW5mbGFnIHJ0ZV9tYnVmX2R5bmZsYWdfZmxv d19tZXRhZGF0YSA9IHsNCj4gPiA+ID4gPiAgICAuLi4NCj4gPiA+ID4gPiB9Ow0KPiA+ID4gPiA+ IGludCBydGVfbWJ1Zl9keW5mbGFnX2Zsb3dfbWV0YWRhdGFfYml0bnVtID0gLTE7DQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBpbnQgcnRlX21idWZfZHluX2Zsb3dfbWV0YWRhdGFfcmVnaXN0ZXIodm9p ZCkNCj4gPiA+ID4gPiB7DQo+ID4gPiA+ID4gLi4uDQo+ID4gPiA+ID4gfQ0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gLyogcnRlX21idWZfZHluLmggKi8NCj4gPiA+ID4gPiBleHRlcm4gY29uc3Qgc3Ry dWN0IHJ0ZV9tYnVmX2R5bmZpZWxkDQo+ID4gPiA+ID4gcnRlX21idWZfZHluZmllbGRfZmxvd19t ZXRhZGF0YTsgZXh0ZXJuIGludA0KPiA+ID4gPiA+IHJ0ZV9tYnVmX2R5bmZpZWxkX2Zsb3dfbWV0 YWRhdGFfb2Zmc2V0Ow0KPiA+ID4gPiA+IGV4dGVybiBjb25zdCBzdHJ1Y3QgcnRlX21idWZfZHlu ZmxhZw0KPiA+ID4gPiA+IHJ0ZV9tYnVmX2R5bmZsYWdfZmxvd19tZXRhZGF0YTsgZXh0ZXJuIGlu dA0KPiA+ID4gPiA+IHJ0ZV9tYnVmX2R5bmZsYWdfZmxvd19tZXRhZGF0YV9iaXRudW07DQo+ID4g PiA+ID4NCj4gPiA+ID4gPiAuLi5oZWxwZXJzIHRvIHNldC9nZXQgbWV0YWRhdGEuLi4NCj4gPiA+ ID4gPiA9PT0NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IENlbnRyYWxpemluZyB0aGUgZGVmaW5pdGlv bnMgb2Ygbm9uLXByaXZhdGUgZHluYW1pYyBmaWVsZHMvZmxhZ3MNCj4gPiA+ID4gPiBpbiBydGVf bWJ1Zl9keW4gbWF5IGhlbHAgb3RoZXIgcGVvcGxlIHRvIHJldXNlIGEgZmllbGQgdGhhdCBpcw0K PiA+ID4gPiA+IHdlbGwgZGVzY3JpYmVkIGlmIGl0IG1hdGNoIHRoZWlyIHVzZS1jYXNlLg0KPiA+ ID4gPg0KPiA+ID4gPiBZZXMsIGNlbnRyYWxpemluZyBpcyBpbXBvcnRhbnQsIHRoYXQncyB3aHkg TUJVRl9EWU5GX01FVEFEQVRBX3h4eA0KPiA+ID4gPiBwbGFjZWQgaW4gcnRlX21idWZfZHluLmgu IERvIHlvdSB0aGluayB3ZSBzaG91bGQgc2hhcmUgdGhlDQo+ID4gPiA+IGRlc2NyaXB0b3JzDQo+ ID4gPiBlaXRoZXI/DQo+ID4gPiA+IEkgaGF2ZSBubyBpZGVhIHdoeSBzb21lb25lIChidXQgcnRl X2Zsb3dfZHluZl9tZXRhZGF0YV9yZWdpc3RlcigpKQ0KPiA+ID4gPiBtaWdodCByZWdpc3RlciBt ZXRhZGF0YSBmaWVsZCBkaXJlY3RseS4NCj4gPiA+DQo+ID4gPiBJZiB0aGUgZmllbGQgaXMgcHJp dmF0ZSB0byBydGVfZmxvdywgeWVzLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNoYXJlDQo+ID4gPiB0 aGUgInN0cnVjdCBydGVfbWJ1Zl9keW5maWVsZCIuIEV2ZW4gdGhlDQo+ID4gPiBydGVfZmxvd19k eW5mX21ldGFkYXRhX3JlZ2lzdGVyKCkgY291bGQgYmUgbWFya2VkIGFzIGludGVybmFsLCByaWdo dD8NCj4gPiBydGVfZmxvd19keW5mX21ldGFkYXRhX3JlZ2lzdGVyKCkgaXMgaW50ZW5kZWQgdG8g YmUgY2FsbGVkIGJ5IGFwcGxpY2F0aW9uLg0KPiA+IFNvbWUgYXBwbGljYXRpb25zIG1pZ2h0IHdp c2ggdG8gZW5nYWdlIG1ldGFkYXRhIGZlYXR1cmUsIHNvbWUgb25lcyAtDQo+IG5vdC4NCj4gPg0K PiA+ID4NCj4gPiA+IE9uZSBtb3JlIHF1ZXN0aW9uOiBJIHNlZSB0aGUgcmVnaXN0cmF0aW9uIGlz IGRvbmUgYnkNCj4gPiA+IHBhcnNlX3ZjX2FjdGlvbl9zZXRfbWV0YSgpLiBNeSB1bmRlcnN0YW5k aW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbg0KPiA+ID4gaXMgbm90IGluIGRhdGFwYXRoLCBhbmQg aXMgY2FsbGVkIHdoZW4gY29uZmlndXJpbmcgcnRlX2Zsb3cuIERvIHlvdQ0KPiBjb25maXJtPw0K PiA+IFJhdGhlciBpdCBpcyBjYWxsZWQgdG8gY29uZmlndXJlIGFwcGxpY2F0aW9uIGluIGdlbmVy YWwuIElmIHVzZXIgc2V0cw0KPiA+IG1ldGFkYXRhIChieSBpc3N1aW5nIHRoZSBhcHByb3ByaWF0 ZSBjb21tYW5kKSBpdCBpcyBhc3N1bWVkIGhlL3NoZQ0KPiA+IHdvdWxkIGxpa2UgdGhlIG1ldGFk YXRhIG9uIFJ4IHNpZGUgZWl0aGVyLiBUaGlzIGlzIGp1c3QgZm9yIHRlc3QNCj4gPiBwdXJwb3Nl cyBhbmQgaXQgaXMgbm90IGJyaWxsaWFudCBleGFtcGxlIG9mDQo+IHJ0ZV9mbG93X2R5bmZfbWV0 YWRhdGFfcmVnaXN0ZXIoKSB1c2UgY2FzZS4NCj4gPg0KPiA+DQo+ID4gPg0KPiA+ID4gPiA+IElu IHlvdXIgY2FzZSwgd2hhdCBpcyBjYXJyaWVkIGJ5IG1ldGFkYXRhPyBDb3VsZCBpdCBiZSByZXVz ZWQgYnkNCj4gPiA+ID4gPiBvdGhlcnM/IEkgdGhpbmsgc29tZSBtb3JlIGRlc2NyaXB0aW9uIGlz IG5lZWRlZC4NCj4gPiA+ID4gSW4gbXkgY2FzZSwgbWV0YWRhdGEgaXMganVzdCBvcGFxdWllIHJ0 ZV9mbG93IHJlbGF0ZWQgMzItYml0DQo+ID4gPiA+IHVuc2lnbmVkIHZhbHVlIHByb3ZpZGVkIGJ5 DQo+ID4gPiA+IG1seDUgaGFyZHJ3YXJlIGluIHJ4IGRhdGFwYXRoLiBJIGhhdmUgbm8gZ3Vlc3Mg d2hldGhlciBzb21lb25lDQo+ID4gPiA+IHdpc2hlcw0KPiA+ID4gdG8gcmV1c2UuDQo+ID4gPg0K PiA+ID4gV2hhdCBpcyB0aGUgdXNlciBzdXBwb3NlZCB0byBkbyB3aXRoIHRoaXMgdmFsdWU/IElm IGl0IGlzDQo+ID4gPiBody1zcGVjaWZpYyBkYXRhLCBJIHRoaW5rIHRoZSBuYW1lIG9mIHRoZSBt YnVmIGZpZWxkIHNob3VsZCBpbmNsdWRlDQo+ID4gPiAiTUxYIiwgYW5kIGl0IHNob3VsZCBiZSBk ZXNjcmliZWQuDQo+ID4NCj4gPiBNZXRhZGF0YSBhcmUgbm90IEhXIHNwZWNpZmljIGF0IGFsbCAt IHRoZXkgbmVpdGhlciBjb250cm9sIG5vciBhcmUNCj4gPiBwcm9kdWNlZCBieSBIVyAoYWJzdHJh Y3RpbmcgZnJvbSB0aGUgZmxvdyBlbmdpbmUgaXMgaW1wbGVtZW50ZWQgaW4gSFcpLg0KPiA+IE1l dGFkYXRhIGFyZSBzb21lIG9wYXF1ZSBkYXRhLCBpdCBpcyBzb21lIGtpbmQgb2YgbGluayBiZXR3 ZWVuIGRhdGENCj4gPiBwYXRoIGFuZCBmbG93IHNwYWNlLiAgV2l0aCBtZXRhZGF0YSBhcHBsaWNh dGlvbiBtYXkgcHJvdmlkZSBzb21lIHBlcg0KPiA+IHBhY2tldCBpbmZvcm1hdGlvbiB0byBmbG93 IGVuZ2luZSBhbmQgZ2V0IGJhY2sgc29tZSBpbmZvcm1hdGlvbiBmcm9tDQo+IGZsb3cgZW5naW5l Lg0KPiA+IGl0IGlzIGdlbmVyaWMgY29uY2VwdCwgc3VwcG9zZWQgdG8gYmUgbmVpdGhlciBIVy1y ZWxhdGVkIG5vciB2ZW5kb3INCj4gc3BlY2lmaWMuDQo+DQo+IG9rLCB1bmRlcnN0b29kLCBpdCdz IGxpa2UgYSBtYXJrIG9yIHRhZy4NCj4NCj4gPiA+IEFyZSB0aGVzZSBydGVfZmxvdyBhY3Rpb25z IHNvbWVob3cgc3BlY2lmaWMgdG8gbWVsbGFub3ggZHJpdmVycyA/DQo+ID4NCj4gPiBBRkFJSywg Y3VycmVudGx5IGl0IGlzIGdvaW5nIHRvIGJlIHN1cHBvcnRlZCBieSBtbHg1IFBNRCBvbmx5LCBi dXQNCj4gPiBjb25jZXB0IGlzIGNvbW1vbiBhbmQgaXMgbm90IHZlbmRvciBzcGVjaWZpYy4NCj4g Pg0KPiA+ID4NCj4gPiA+ID4gQnJpZWYgc3VtbWFyeSBvZiB5b3UgY29tbWVudCAoanVzdCB0byBt YWtlIHN1cmUgSSB1bmRlcnN0b29kIHlvdXINCj4gPiA+IHByb3Bvc2FsIGluIGNvcnJlY3Qgd2F5 KToNCj4gPiA+ID4gMS4gZHJvcCBhbGwgZGVmaW5pdGlvbnMgTUJVRl9EWU5GX01FVEFEQVRBX3h4 eCwgbGVhdmUNCj4gPiA+ID4gTUJVRl9EWU5GX01FVEFEQVRBX05BTUUgb25seSAyLiBtb3ZlIHRo ZSBkZXNjcmlwdG9yIGNvbnN0DQo+IHN0cnVjdA0KPiA+ID4gPiBydGVfbWJ1Zl9keW5maWVsZCBk ZXNjX29mZnMgPSB7fSB0byBydGVfbWJ1Zl9keW4uYyBhbmQgbWFrZSBpdA0KPiA+ID4gPiBnbG9i YWwgMy4gcHJvdmlkZSBoZWxwZXJzIHRvIGFjY2VzcyBtZXRhZGF0YQ0KPiA+ID4gPg0KPiA+ID4g PiBbMV0gYW5kIFsyXSBsb29rIE9LIGluIGdlbmVyYWwuIEFsdGhvdWdoIEkgdGhpbmsgdGhlc2Ug b25lcyBtYWtlDQo+ID4gPiA+IGNvZGUgbGVzcw0KPiA+ID4gZmxleGlibGUsIHJlc3RyaWN0IHRo ZSBwb3RlbnRpYWwgY29tcGlsZSB0aW1lIG9wdGlvbnMuDQo+ID4gPiA+IEZvciBub3cgaXQgaXMg cmF0aGVyIHRoZW9yZXRpY2FsIHF1ZXN0aW9uLCBpZiB5b3UgaW5zaXN0IG9uIHlvdXINCj4gPiA+ ID4gYXBwcm9hY2ggLSBwbGVhc2UsIGxldCBtZSBrbm93LCBJJ2xsIGFkZHJlc3MgWzFdIGFuZCBb Ml0gYW5kDQo+ID4gPiA+IHVwZGF0ZS5teQ0KPiA+ID4gcGF0Y2guDQo+ID4gPg0KPiA+ID4gWzFd IEkgdGhpbmsgdGhlICNkZWZpbmUgb25seSBhZGRzIGFuIGluZGlyZWN0aW9uLCBhbmQgSSBkaWRu J3Qgc2VlIGFueQ0KPiA+ID4gICAgIHBlcmYgY29uc3RyYWludCBoZXJlLg0KPiA+ID4gWzJdIE15 IHByZXZpb3VzIGNvbW1lbnQgd2FzIHN1cmVseSBub3QgY2xlYXIsIHNvcnJ5LiBUaGUgY29kZSBj YW4gc3RheQ0KPiA+ID4gICAgIGluIHJ0ZV9mbG93Lg0KPiA+ID4NCj4gPiA+ID4gQXMgZm9yIFsz XSAtIElNSE8sIHRoZSBleHRyYSBhYnN0cmFjdGlvbiBsYXllciBpcyBub3QgdXNlZnVsLCBhbmQN Cj4gPiA+ID4gbWlnaHQgYmUNCj4gPiA+IGV2ZW4gaGFybWZ1bC4NCj4gPiA+ID4gSSB0ZW5kIG5v dCB0byBjb21wbGljYXRlIHRoZSBjb2RlLCBhdCBsZWFzdCwgZm9yIG5vdy4NCj4gPiA+DQo+ID4g PiBbM10gb2sgZm9yIG1lDQo+ID4gPg0KPiA+ID4NCj4gPiA+IFRoYW5rcywNCj4gPiA+IE9saXZp ZXINCj4gPg0KIFdpdGggYmVzdCByZWdhcmRzLCBTbGF2YQ0KDQoNCg==