From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BB9E7A034F; Sun, 3 Oct 2021 23:04:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 412F64126A; Sun, 3 Oct 2021 23:04:34 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2081.outbound.protection.outlook.com [40.107.244.81]) by mails.dpdk.org (Postfix) with ESMTP id B80334125B for ; Sun, 3 Oct 2021 23:04:32 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i3h43AMib39b7UzcRS0YSNIMpYPxmBrcqnPdA5fJU+9berpBtlCADXtlaAHjdWkTv1rFB145G25UiAJOHsQKpwSRrMPkJl3ivDo+i3WZdJpopSojym/SohnIE//B6/g12YjRt35taXD7VFVKP+Zcsi0/JP1LYe9XJzjvIWI+hxUqO4Dr1i2WyzyV+hvzlsS4tA/t2j6quqra8QAgeUtohhzt3wbg8yzU138AHWb+8QbywX1QkDWpeDUA16p77nET0GuCTTB8Spi3ozKEQ5GreYHxObB/UzUR8ZHFXG8Y31oZ81TWjWl/RO2vkneoSxcTu9WlyO3TIQ/3uJW0oCEUcw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3eXsSFguIwdi3MnQ7NXRXhXD9O1VyoHniovSGkkCcGA=; b=hZMjnA9Wj7K+ZrptHjSLYzQvOEZyX1GEQQ0YPols3fKRNko5F6pnPTwRRUwoUZK1PKKcoz691wbSPQseyqwx/VGIs91qURVGLLeYXQ4AZXonk4xA4Jx+D93zmAuxRaWdI3iqBFlhxXrNKTGbVYVDx2ppEhGn3K4yfGQmPFCsvdKDJAG9hUbXxEf9tSdbyJKAN43XaqOZ11nCidvMlVWuiKm1AxuThhBndtNYo9izBWwRwuT6rNRck/8+2jr581VwJAc1jTvCIxn2v8+KEtTBol/7ybt0powBKbW/SxjK4ZK4kNHVA9zVSx8jHCQyNxB2jQHqM55XOSx++LPR07LA2w== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3eXsSFguIwdi3MnQ7NXRXhXD9O1VyoHniovSGkkCcGA=; b=sE+06BoAkSsudOJ14AV6wGcgdOBru6ujHyBnndqzB4N71kGvKKBEFLD7HFyBZzmJXQdMPU5YVq9O/F6zwnJWLrB+vgG79c8Hp0dqM3Fs+GCKj/lPiTK/6x0rRxC2coMIndNjuibKZY2kgnLjn9tQW1I6znDwrlHEd6b+cnKmSU9V7p3jnTt/l8Ks6QS4iO8rggYtUSiKyEhxTVWeeL+AESjswlYdT0AGWuEKZ5PG3A7XnNQ73aBjUHjVTZElke5MGVKhbPps9T7KCNghCTavqGLgSY4u8O5M+fs6Y/qZlc8DnpbuoSeVwJeRRvVBORn6BOD7HMIsNIN5ebV7fnv5Jw== Received: from DM8PR12MB5400.namprd12.prod.outlook.com (2603:10b6:8:3b::12) by DM4PR12MB5087.namprd12.prod.outlook.com (2603:10b6:5:38a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.19; Sun, 3 Oct 2021 21:04:19 +0000 Received: from DM8PR12MB5400.namprd12.prod.outlook.com ([fe80::d03d:1f75:ca20:6a32]) by DM8PR12MB5400.namprd12.prod.outlook.com ([fe80::d03d:1f75:ca20:6a32%5]) with mapi id 15.20.4566.022; Sun, 3 Oct 2021 21:04:19 +0000 From: Ori Kam To: Ivan Malov , Andrew Rybchenko , "dev@dpdk.org" CC: Andy Moreton , Ray Kinsella , Jerin Jacob , Wisam Monther , Xiaoyun Li , NBU-Contact-Thomas Monjalon , Ferruh Yigit Thread-Topic: [PATCH v3 1/5] ethdev: add API to negotiate delivery of Rx meta data Thread-Index: AQHXsG0EGYKwxu5FGk6rpb3sj4WbEKu8simggABJ14CAAMRGAIADKRXQgAAoU4CAAA0j8IAAeO6AgAArh0A= Date: Sun, 3 Oct 2021 21:04:19 +0000 Message-ID: References: <20210902142359.28138-1-ivan.malov@oktetlabs.ru> <20210923112012.14595-1-ivan.malov@oktetlabs.ru> <20210923112012.14595-2-ivan.malov@oktetlabs.ru> <6e9703ae-9fe0-2656-c08f-da95e44bcdeb@oktetlabs.ru> <06d5d165-a9e0-ecc6-74b5-20a77a88e301@oktetlabs.ru> In-Reply-To: <06d5d165-a9e0-ecc6-74b5-20a77a88e301@oktetlabs.ru> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: oktetlabs.ru; dkim=none (message not signed) header.d=none;oktetlabs.ru; dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4adebd2a-c386-4c11-a53a-08d986b15e46 x-ms-traffictypediagnostic: DM4PR12MB5087: x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:873; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JzFjjhlaSpOCsEcbbqn2dw1Y6IzeIG/zNy9XwSSnIajp+C8LQqvjV6QCnkFAk0Jn5IGgKuIAqlUTUPClwrR17evh5GbSUYR9H1QdOvtYzDnAZjK5Nl07cjENQlxkedvn1T90nbqj5YwNR919QbkOim2TSIuwJs3R2aSn7rzhV4Oj1GC0HpSPthHcLJ5SCVoGMoCfLkba0YYpKj2UyQS0k9B3jIMzmevsPnwYoY0cQLhEe992R6wlej8mAoOCL97fUcoLt6I5JqDjwtI7I3HztCzB+od7PU2KXk70QD4y+LtvoZL0TS/vKVTY5Q5lcgFmJz8aK80shb5cERwelRqT6AvoUfzgZdiCrdlhUu3p+ITW8vnHV2tLCg2yDzacbUcBpcRqoTmaUmsyQcUS8JFr6BZ5ZjSNNOUOchvbetPdKRN40aprvVR1BAfdXLBYp+F+7SQO4F4YVzxeDFU7eAjhIiMui0xdVf3mwjXi4YSlmGZOzWzN4ILZSZBJtTab1+J72cd+8TX+PrnWK2dnETp/3mKTEnt+VNixlZPC5FmOYPRbc6IPscjlR6y+G83UxcC/FCyxs2bKLwx/usPzE5jEoEjWM6VN50FlYA0a/hF/k3mUJOFiUMXVSBFrG8WENo9VyKVCFFZfyjh20ety+SiamtpLaXz9CqMLG0F/n19s93AEWv8W7umggIu00f0VfgRWfxjuYi9UKMNO57stBPhRicvhYYXFhN9+uMQx5usXJN561fvQLG4Qcgijh3/tQh7fN+GyfYvgEjgAj3wvY7R7b2PH1SkVbafL2AwTbCU47GY= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR12MB5400.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(53546011)(38070700005)(66946007)(9686003)(55016002)(76116006)(4326008)(83380400001)(71200400001)(66446008)(64756008)(66556008)(66476007)(33656002)(8936002)(7696005)(86362001)(5660300002)(6506007)(38100700002)(508600001)(122000001)(52536014)(316002)(8676002)(186003)(30864003)(54906003)(110136005)(2906002)(966005)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SFpCREowckE2bzJGcVBoZ0UwTUVvMU5zallDNTlJU3Z1VW5VRUQyN1Q3cWVa?= =?utf-8?B?OXBzR1BMcmdtWndqN3pRLzNLWk03T3l4WUVtY1JtcWl4Qm5rbk43MWg4a292?= =?utf-8?B?bGptRFl2WnZFaWFPaXltcEdQM05hb0VTQml4d01VazMrSHR2Um8xcWtCa3Nn?= =?utf-8?B?Z0FhamhXNEhUOWFKY1F2SkR0UUNVdmVFS01VUkErUnl0Ymd0QldzS0syQXEw?= =?utf-8?B?NHhOY29tSkFzT0Z4M1lTY1FralBWSFJvTjh5SUg3dkN6NCtxNTdQN0hJbU9m?= =?utf-8?B?a2JEZVBRc1h5NnVZME5TMlRBWUlFeGxZSlVGem5UbmlVbTRZSjNleXN1eHlp?= =?utf-8?B?UHVWWmpNTFJGOUw2Vnk4OXNORzNRTjB0ZUk4cGJ2cTd0M1UyOWJVeVRZcjdV?= =?utf-8?B?UzlvOUdJVU95TllYdklyVTBGOXhZVENmUG1iMjFCVE1WZDRjV1Y0Sm9QTlB6?= =?utf-8?B?amloQ0ZrWjVNa3FwVURnT0Z1L0V4NWtGMFljYVZ1OEFqZWZsY2hXSnJnTDA4?= =?utf-8?B?ZXFJU0hIeGdKbWd1K1REeUdLaHliQkxTNHJlSTErNmpUb3JIUzllejh3c2x6?= =?utf-8?B?WnZYZVpDQnpXL3hUWGpFcEFqNHBNVHdDbUI0aG00eWtTcldhYTZaaEljRCtv?= =?utf-8?B?dnFNMmJiK2Q0Y2RyS0FTZlRPNEt0a3ByYW9ObGZ1TytxWVdoMVJPNG9kcE1S?= =?utf-8?B?RklobHZzUmpMaE5VYy9ZbFJrZ28zZG9rS2ZCM0VXcVVDemNNUDBsZFA4a3Z5?= =?utf-8?B?WVRUeU1md0gwQmdmY2V4V3VUaWlsRUxTQ1p0R2hLTmZLWEtBaU1oZk9WaWRN?= =?utf-8?B?dnFKZGdkeDl2M3h0dzlzR0xMTDFYcFpZUEFqUlBKcUZsL3lGMkJmZithbmFE?= =?utf-8?B?WVFxV2Z1bE1YaXRsZzBvUDRnWjlycFplUDBVRVJTTEx4ZzhpS3VGd1c3d0xB?= =?utf-8?B?K2FoN2MydXM0TUs4NkZwS2RqUFVKd0lKU0tMZ0hDZjFQejhGS3Y3eFBzYUdl?= =?utf-8?B?WWhqSWl1MjlicnJGRnJHYVJrekNSOURXQjRNTFdVc2xMZERJVVl0MXpMWGRs?= =?utf-8?B?aVUwNzFpcnZpWGl6ZlZxMVhJS2tFaHN3cVgrQ2hueU4wRGcxSFpKUkE3STkw?= =?utf-8?B?dFJGRVJ5VDRXdEZsY0RCZ0FZSGZvZm13ZUNjeEd5anUrSnNBcUdXL0hKMWFv?= =?utf-8?B?U1dWL1RTQmdFTjVnb3FlUFZNTjQ0ZjBPVG10bjNXbkJqbWdleTVJWEZUa2Ju?= =?utf-8?B?bXNXZnZnU2ZjRDF5VnI0MkpDM1c2Z2U4K1AwbGJwQTI1SnZVeW1DK3IxbWRQ?= =?utf-8?B?NlVNbEdrdVVMM0UyK2YxMEhSYjZ6bS8wdHJIK3lMbWU1WkNXM3FteHk0NDVB?= =?utf-8?B?R241UE41QVA5eWNkNFArNE1vczFpUCtVQ3ZZcVRqd3d2Q3BvaDlZK0xuZDl0?= =?utf-8?B?aCtIaStTd21HcGptR29YVFZodGJOajJoYk5DSW5VU2hzeDI4c3RCRDBHckg4?= =?utf-8?B?cVgwVjB0T0V3cUV4d1lEZS9sbWNKQ2ZpQ29iNUVHdXl6Y2lqZ0NXMWhZTS84?= =?utf-8?B?ZHJDMXM5TVZLZW03OVRHZDROWXViWk5Ub0pHNTN4QjdMSTFGUytGL01IMVpQ?= =?utf-8?B?UW9nRytQMm9yU0xCcnJoUVUwaGNJVmUrdGJ2WUN2V3h3MTVObVV3NTZHWWxl?= =?utf-8?B?cU1QZG50RUZ4ZTF6K2t5YTBQQ1FzcGdtL1RCM1hSbDF0RVVyYWhCc1dmZGt0?= =?utf-8?B?VzZ6bFBVdWgyRHpManBsVlFkSGN4RmdhYTRaRTMxUUdzT20xRVJYT3BDc3ox?= =?utf-8?B?aDNxZHlIby82dk1NbDZuWVJxMzljRkdnNU4wYkV3cHJvREtmMmtVMy9GcVJX?= =?utf-8?Q?C9UppbSWOfp/h?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR12MB5400.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4adebd2a-c386-4c11-a53a-08d986b15e46 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Oct 2021 21:04:19.7562 (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: kKy7aGF+nBpipoYr6ZyxHcOZWRvdxFcjmA4er6IDxlTzAxjtXqYpxE+E45im3w/HX5w+dBI9xFGK4Ldzq2WEMA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5087 Subject: Re: [dpdk-dev] [PATCH v3 1/5] ethdev: add API to negotiate delivery of Rx meta data X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" SGkgSXZhbiwNCg0KU29ycnkgZm9yIHRoZSBsb25nIHJldmlldy4NCg0KPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBJdmFuIE1hbG92IDxJdmFuLk1hbG92QG9rdGV0bGFicy5y dT4NCj4gU2VudDogU3VuZGF5LCBPY3RvYmVyIDMsIDIwMjEgODozMCBQTQ0KPiBTdWJqZWN0OiBS ZTogW1BBVENIIHYzIDEvNV0gZXRoZGV2OiBhZGQgQVBJIHRvIG5lZ290aWF0ZSBkZWxpdmVyeSBv ZiBSeCBtZXRhDQo+IGRhdGENCj4gDQo+IEhpIE9yaSwNCj4gDQo+IE9uIDAzLzEwLzIwMjEgMTQ6 MDEsIE9yaSBLYW0gd3JvdGU6DQo+ID4gSGkgSXZhbiwNCj4gPg0KPiA+PiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBJdmFuIE1hbG92IDxJdmFuLk1hbG92QG9rdGV0bGFi cy5ydT4NCj4gPj4gU2VudDogU3VuZGF5LCBPY3RvYmVyIDMsIDIwMjEgMTI6MzAgUE0gZGF0YQ0K PiA+Pg0KPiA+PiBIaSBPcmksDQo+ID4+DQo+ID4+IFRoYW5rcyBmb3IgcmV2aWV3aW5nIHRoaXMu DQo+ID4+DQo+ID4NCj4gPiBObyBwcm9ibGVtLg0KPiA+DQo+ID4+IE9uIDAzLzEwLzIwMjEgMTA6 NDIsIE9yaSBLYW0gd3JvdGU6DQo+ID4+PiBIaSBBbmRyZXcgYW5kIEl2YW4sDQo+ID4+Pg0KPiA+ Pj4NCj4gPj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+Pj4+IEZyb206IEFuZHJl dyBSeWJjaGVua28gPGFuZHJldy5yeWJjaGVua29Ab2t0ZXRsYWJzLnJ1Pg0KPiA+Pj4+IFNlbnQ6 IEZyaWRheSwgT2N0b2JlciAxLCAyMDIxIDk6NTAgQU0NCj4gPj4+PiBTdWJqZWN0OiBSZTogW1BB VENIIHYzIDEvNV0gZXRoZGV2OiBhZGQgQVBJIHRvIG5lZ290aWF0ZSBkZWxpdmVyeQ0KPiA+Pj4+ IG9mIFJ4IG1ldGEgZGF0YQ0KPiA+Pj4+DQo+ID4+Pj4gT24gOS8zMC8yMSAxMDowNyBQTSwgSXZh biBNYWxvdiB3cm90ZToNCj4gPj4+Pj4gSGkgT3JpLA0KPiA+Pj4+Pg0KPiA+Pj4+PiBPbiAzMC8w OS8yMDIxIDE3OjU5LCBPcmkgS2FtIHdyb3RlOg0KPiA+Pj4+Pj4gSGkgSXZhbiwNCj4gPj4+Pj4+ IFNvcnJ5IGZvciBqdW1waW5nIGluIGxhdGUuDQo+ID4+Pj4+DQo+ID4+Pj4+IE5vIHdvcnJpZXMu IFRoYXQncyBPSy4NCj4gPj4+Pj4NCj4gPj4+Pj4+IEkgaGF2ZSBhIGNvbmNlcm4gdGhhdCB0aGlz IHBhdGNoIGJyZWFrcyBvdGhlciBQTURzLg0KPiA+Pj4+Pg0KPiA+Pj4+PiBJdCBkb2VzIG5vIHN1 Y2ggdGhpbmcuDQo+ID4+Pj4+DQo+ID4+Pj4+Pj4gICBGcm9tIHRoZSByc3QgZmlsZSAiIE9uZSBz aG91bGQgbmVnb3RpYXRlIGZsYWcgZGVsaXZlcnkgYmVmb3JlaGFuZCINCj4gPj4+Pj4+IHNpbmNl IHlvdSBvbmx5IGFkZGVkIHRoaXMgZnVuY3Rpb24gZm9yIHlvdXIgUE1EIGFsbCBvdGhlciBQTUQg d2lsbA0KPiBmYWlsLg0KPiA+Pj4+Pj4gSSBzZWUgdGhhdCB5b3UgYWRkZWQgZXhjZXB0aW9uIGlu IHRoZcKgIGV4YW1wbGVzLCBidXQgaXQgZG9lc24ndA0KPiA+Pj4+Pj4gbWFrZSBzZW5zZSB0aGF0 IGFwcGxpY2F0aW9ucyB3aWxsIGFsc28gbmVlZCB0byBhZGQgdGhpcyBleGNlcHRpb24NCj4gPj4+ Pj4+IHdoaWNoIGlzIG5vdCBkb2N1bWVudGVkLg0KPiA+Pj4+Pg0KPiA+Pj4+PiBTYXksIHlvdSBo YXZlIGFuIGFwcGxpY2F0aW9uLCBhbmQgeW91IHVzZSBpdCB3aXRoIHNvbWUgc3BlY2lmaWMgUE1E Lg0KPiA+Pj4+PiBTYXksIHRoYXQgUE1EIGRvZXNuJ3QgcnVuIGludG8gdGhlIHByb2JsZW0gYXMg b3VycyBkb2VzLiBJbiBvdGhlcg0KPiA+Pj4+PiB3b3JkcywgdGhlIHVzZXIgY2FuIGluc2VydCBh IGZsb3cgd2l0aCBhY3Rpb24gTUFSSyBhdCBhbnkgcG9pbnQNCj4gPj4+Pj4gYW5kIGdldCBtYXJr IGRlbGl2ZXJ5IHdvcmtpbmcgc3RhcnRpbmcgZnJvbSB0aGF0IG1vbWVudCB3aXRob3V0DQo+ID4+ Pj4+IGFueSBwcm9ibGVtLiBTYXksIHRoaXMgaXMgZXhhY3RseSB0aGUgd2F5IGhvdyBpdCB3b3Jr cyBmb3IgeW91IGF0DQo+ID4+Pj4+IHRoZQ0KPiA+PiBtb21lbnQuDQo+ID4+Pj4+DQo+ID4+Pj4+ IE5vdy4gVGhpcyBuZXcgQVBJIGtpY2tzIGluLiBXZSB1cGRhdGUgdGhlIGFwcGxpY2F0aW9uIHRv IGludm9rZSBpdA0KPiA+Pj4+PiBhcyBlYXJseSBhcyBwb3NzaWJsZS4gQnV0IHlvdXIgUE1EIGlu IHF1ZXN0aW9uIHN0aWxsIGRvZXNuJ3QNCj4gPj4+Pj4gc3VwcG9ydCB0aGlzIEFQSS4gVGhlIGNv bW1lbnQgaW4gdGhlIHBhdGNoIHNheXMgdGhhdCBpZiB0aGUgbWV0aG9kDQo+ID4+Pj4+IHJldHVy bnMgRU5PVFNVUCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBpZ25vcmUgdGhhdCB3aXRob3V0DQo+ ID4+Pj4+IGJhdHRpbmcgYW4gZXllbGlkLiBJdCBzaG91bGQganVzdCBrZWVwIG9uIHdvcmtpbmcg YXMgaXQgZGlkIGJlZm9yZQ0KPiA+Pj4+PiB0aGUgaW50cm9kdWN0aW9uIG9mDQo+ID4+IHRoaXMg QVBJLg0KPiA+Pj4+Pg0KPiA+Pj4NCj4gPj4+IEkgdW5kZXJzdGFuZCB0aGF0IGl0IGlzIG5pY2Ug dG8gd3JpdGUgaW4gdGhlIHBhdGNoIGNvbW1lbnQgdGhhdA0KPiA+Pj4gYXBwbGljYXRpb24gc2hv dWxkIGRpc3JlZ2FyZCB0aGlzIGZ1bmN0aW9uIGluIGNhc2Ugb2YgRU5PVFNVUCBidXQgaW4NCj4g Pj4+IGEgZmV3IG1vbnRoIHNvbWVvbmUgd2lsbCByZWFkIHRoZSBvZmZpY2lhbCBkb2MsIHdoZXJl IGl0IGlzIHN0YXRlZA0KPiA+Pj4gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgYSBtdXN0IGFu ZCB0aGVuIHdoYXQgZG8geW91IHRoaW5rIHRoZQ0KPiA+Pj4gYXBwbGljYXRpb24gd2lsbCBkbz8N Cj4gPj4+IEkgdGhpbmsgdGhhdCB0aGUgY29ycmVjdCB3YXkgaXMgdG8gYWRkIHRoaXMgZnVuY3Rp b24gdG8gYWxsIFBNRHMuDQo+ID4+PiBBbm90aGVyIG9wdGlvbiBpcyB0byBhZGQgdG8gdGhlIGRv YyB0aGF0IGlmIHRoZSBmdW5jdGlvbiBpcw0KPiA+Pj4gcmV0dXJuaW5nIEVOT1RTVVAgdGhlIGFw cGxpY2F0aW9uIHNob3VsZCBhc3N1bWUgdGhhdCBhbGwgaXMgc3VwcG9ydGVkLg0KPiA+Pj4NCj4g Pj4+IFNvIGZyb20gdGhpcyBwb2ludCBvZiB2aWV3IHRoZXJlIGlzIEFQSSBicmVhay4NCj4gPj4N Cj4gPj4gU28sIHlvdSBtZWFuIGFuIEFQSSBicmVha2FnZSBpbiBzb21lIGZvcm1hbCBzZW5zZT8g SWYgdGhlIGRvYyBpcw0KPiA+PiBmaXhlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNlY29uZCBv cHRpb24geW91IHN1Z2dlc3QsIHdpbGwgaXQNCj4gPj4gc3VmZmljZSB0byBhdm9pZCB0aGlzIGZv cm1hbCBBUEkgYnJlYWthZ2U/DQo+ID4+DQo+ID4NCj4gPiBZZXMsIGJ1dCBJIHRoaW5rIGl0IHdp bGwgYmUgYmV0dGVyIHRvIGFkZCB0aGUgbWlzc2luZyBmdW5jdGlvbi4NCj4gPg0KPiA+Pj4NCj4g Pj4+Pj4gTW9yZSBzcGVjaWZpYyBleGFtcGxlOg0KPiA+Pj4+PiBTYXksIHRoZSBhcHBsaWNhdGlv biBkb2Vzbid0IG1pbmQgdXNpbmcgZWl0aGVyICJSU1MgKyBNQVJLIiBvcg0KPiA+Pj4+PiB0dW5u ZWwgb2ZmbG9hZC4gV2hhdCBpdCBkb2VzIHJpZ2h0IG5vdyBpcyBhdHRlbXB0IHRvIGluc2VydCB0 dW5uZWwNCj4gPj4+Pj4gZmxvd3MgZmlyc3QgYW5kLCBpZiB0aGlzIGZhaWxzLCBmYWxsIGJhY2sg dG8gIlJTUyArIE1BUksiLiBXaXRoDQo+ID4+Pj4+IHRoaXMgQVBJLCB0aGUgYXBwbGljYXRpb24g d2lsbCB0cnkgdG8gaW52b2tlIHRoaXMgQVBJIHdpdGgNCj4gPj4+Pj4gIlVTRVJfTUFSSyB8IFRV Tk5FTF9JRCIgaW4gYWRhcHRlciBpbml0aWFsaXNlZCBzdGF0ZS4gSWYgdGhlIFBNRA0KPiA+Pj4+ PiBzYXlzIHRoYXQgaXQgY2FuIG9ubHkgZW5hYmxlIHRoZSB0dW5uZWwgb2ZmbG9hZCwgdGhlbiB0 aGUNCj4gPj4+Pj4gYXBwbGljYXRpb24gd2lsbCBnZXQgdGhlIGtub3dsZWRnZSB0aGF0IGl0IGRv ZXNuJ3QgbWFrZSBzZW5zZSB0bw0KPiA+Pj4+PiBldmVuIHRyeSBpbnNlcnRpbmcgIlJTUyArIE1B UksiIGZsb3dzLiBJdCBqdXN0IGNhbiBza2lwIHVzZWxlc3MNCj4gPj4+Pj4gYWN0aW9ucy4gQnV0 IGlmIHRoZSBQTUQgZG9lc24ndCBzdXBwb3J0IHRoZSBtZXRob2QsIHRoZQ0KPiA+Pj4+PiBhcHBs aWNhdGlvbiB3aWxsIHNlZSBFTk9UU1VQIGFuZCBoYW5kbGUgdGhpcw0KPiA+Pj4+PiBncmFjZWZ1 bGx5OiBpdCB3aWxsIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCdzIGd1YXJhbnRlZWQg dG8NCj4gPj4+Pj4gYmUgc3VwcG9ydGVkIGFuZCB3aGF0J3Mgbm90IGFuZCB3aWxsIGp1c3Qga2Vl cCBvbiBpdHMgb2xkIGJlaGF2aW9yOg0KPiA+Pj4+PiB0cnkgdG8gaW5zZXJ0IGEgZmxvdywgZmFp bCwgZmFsbCBiYWNrIHRvIGFub3RoZXIgdHlwZSBvZiBmbG93Lg0KPiA+Pj4+Pg0KPiA+Pj4NCj4g Pj4+IEkgZnVsbHkgYWdyZWUgd2l0aCB5b3VyIGV4YW1wbGUsIGFuZCB0aGluayB0aGF0IHRoaXMg aXMgdGhlIHdheSB0bw0KPiA+Pj4gZ28sIGFwcGxpY2F0aW9uIHNob3VsZCBzdXBwbHkgYXMgbXVj aCBpbmZvIGFzIHBvc3NpYmxlIGR1cmluZyBzdGFydHVwLg0KPiA+Pg0KPiA+PiBSaWdodC4NCj4g Pj4NCj4gPj4+IE15IHF1ZXN0aW9uL2NvbW1lbnQgaXMgdGhlIG5lZ290aWF0ZWQgcmVzdWx0IG1l YW5zIHRoYXQgYWxsIG9mIHRoZQ0KPiA+Pj4gYWN0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHRoZSBz YW1lIHJ1bGU/DQo+ID4+PiBmb3IgZXhhbXBsZSBpZiBhcHBsaWNhdGlvbiB3YW50cyB0byBhZGQg bWFyayBhbmQgdGFnIG9uIHRoZSBzYW1lIHJ1bGUuDQo+ID4+PiAoSSBrbm93IGl0IGRvZXNuJ3Qg bWFrZSBtdWNoIHNlbnNlKSBhbmQgdGhlIFBNRCBjYW4gc3VwcG9ydCBib3RoIG9mDQo+ID4+PiB0 aGVtIGJ1dCBub3Qgb24gdGhlIHNhbWUgcnVsZSwgd2hhdCBzaG91bGQgaXQgcmV0dXJuPw0KPiA+ Pj4gT3IgZm9yIGV4YW1wbGUgaWYgdXNpbmcgdGhlIG1hcmsgY2FuIG9ubHkgYmUgc3VwcG9ydGVk IGlmIG5vIGRlY2FwDQo+ID4+PiBhY3Rpb24gaXMgc2V0IG9uIHRoaXMgcnVsZSB3aGF0IHNob3Vs ZCBiZSB0aGUgcmVzdWx0Pw0KPiA+Pj4gICBGcm9tIG15IHVuZHN0YW5kaW5nIHRoaXMgZnVuY3Rp b24gaXMgb25seSB0byBsZXQgdGhlIFBNRCBrbm93IHRoYXQNCj4gPj4+IG9uIHNvbWUgcnVsZXMg dGhlIGFwcGxpY2F0aW9uIHdpbGwgdXNlIHRob3NlIGFjdGlvbnMsIHRoZSBjaGVja2luZw0KPiA+ Pj4gaWYgdGhlIGFjdGlvbiBjb21iaW5hdGlvbiBpcyB2YWxpZCBvbmx5IGhhcHBlbnMgb24gdmFs aWRhdGUgZnVuY3Rpb24gcmlnaHQ/DQo+ID4+DQo+ID4+IFRoaXMgQVBJIGRvZXMgbm90IGJpbmQg aXRzZWxmIHRvIGZsb3cgQVBJLiBJdCdzICpub3QqIGFib3V0IGVuYWJsaW5nDQo+ID4+IHN1cHBv cnQgZm9yIG1ldGFkYXRhICphY3Rpb25zKiAodGhleSBhcmUgY29uZHVjdGVkIGVudGlyZWx5ICpp bnNpZGUqDQo+ID4+IHRoZSBOSUMpLiBJdCdzIGFib3V0IGVuYWJsaW5nICpkZWxpdmVyeSogb2Yg bWV0YWRhdGEgZnJvbSB0aGUgTklDIHRvIGhvc3QuDQo+ID4+DQo+ID4NCj4gPiBHb29kIHBvaW50 IHNvIHdoeSBub3QgdXNlIHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBtZXRhZGF0YSBhbmQgcmVnaXN0 ZXIgaXQ/DQo+ID4gU2luY2UgaW4gYW55IGNhc2UsIHRoaXMgaXMgc29tZXRoaW5nIGluIHRoZSBt YnVmIHNvIG1heWJlIHRoaXMgc2hvdWxkIGJlIHRoZQ0KPiBhbnN3ZXI/DQo+IA0KPiBJIGRpZG4n dCBjYXRjaCB5b3VyIHRob3VnaHQuIENvdWxkIHlvdSBwbGVhc2UgZWxhYm9yYXRlIG9uIGl0Pw0K DQpUaGUgbWV0YWRhdGEgYWN0aW9uIGp1c3QgbGlrZSB0aGUgbWFyayBvciBmbGFnIGlzIHVzZWQg dG8gZ2l2ZSBhcHBsaWNhdGlvbg0KZGF0YSB0aGF0IHdhcyBzZXQgYnkgYSBmbG93IHJ1bGUuDQpU byBlbmFibGUgdGhlIG1ldGFkYXRhIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHJlZ2lzdGVyIHRoZSBt ZXRhZGF0YSBmaWVsZC4NClNpbmNlIHRoaXMgaGFwcGVucyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9m IHRoZSBtYnVmIGl0IG1lYW5zIHRoYXQgaXQgbXVzdCBiZQ0KY3JlYXRlZCBiZWZvcmUgdGhlIGRl dmljZSBzdGFydC4NCg0KSSB1bmRlcnN0YW5kIHRoYXQgdGhlIG1hcmsgYW5kIGZsYWcgZG9uJ3Qg bmVlZCB0byBiZSByZWdpc3RlcmVkIGluIHRoZSBtYnVmDQpzaW5jZSB0aGV5IGhhdmUgc2F2ZWQg c3BhY2UgYnV0IGZyb20gYXBwbGljYXRpb24gcG9pbnQgb2YgdmlldyB0aGVyZSBpcyBubw0KZGlm ZmVyZW5jZSBiZXR3ZWVuIHRoZSBtZXRhZGF0YSBhbmQgbWFyaywgc28gd2h5IGRvZXMgbmVnb3Rp YXRlIGZ1bmN0aW9uDQpkb2Vzbid0IGhhbmRsZSB0aGUgbWV0YWRhdGE/DQoNCkkgaG9wZSB0aGlz IGlzIGNsZWFyZXIuDQoNCj4gDQo+ID4NCj4gPj4gU2F5LCB5b3UgaW5zZXJ0IGEgZmxvdyBydWxl IHRvIG1hcmsgc29tZSBwYWNrZXRzLiBUaGUgTklDLCBpbnRlcm5hbGx5DQo+ID4+IChpbiB0aGUN Cj4gPj4gZS1zd2l0Y2gpIGFkZHMgdGhlIG1hcmsgdG8gbWF0Y2hpbmcgcGFja2V0cy4gWWVzLCBp biB0aGUgYm91bmRhcmllcw0KPiA+PiBvZiB0aGUgTklDIEhXLCB0aGUgcGFja2V0cyBiZWFyIHRo ZSBtYXJrIG9uIHRoZW0uIEl0IGhhcyBiZWVuIHNldCwNCj4gPj4geWVzLiBCdXQgd2hlbiB0aW1l IGNvbWVzIHRvICpkZWxpdmVyKiB0aGUgcGFja2V0cyB0byB0aGUgaG9zdCwgdGhlDQo+ID4+IE5J QyAoYXQgbGVhc3QsIGluIG5ldC9zZmMNCj4gPj4gY2FzZSkgaGFzIHR3byBvcHRpb25zOiBlaXRo ZXIgcHJvdmlkZSBvbmx5IGEgc21hbGwgY2h1bmsgb2YgdGhlDQo+ID4+IG1ldGFkYXRhIGZvciBl YWNoIHBhY2tldCAqdG8gdGhlIGhvc3QqLCB3aGljaCBkb2Vzbid0IGluY2x1ZGUgbWFyaw0KPiA+ PiBJRCwgZmxhZyBhbmQgUlNTIGhhc2gsIE9SLCBhbHRlcm5hdGl2ZWx5LCBwcm92aWRlIHRoZSBm dWxsIHNldCBvZg0KPiA+PiBtZXRhZGF0YS4gSW4gdGhlIGZvcm1lciBvcHRpb24sIHRoZSBtYXJr IGlzIHNpbXBseSBub3QgZGVsaXZlcmVkLg0KPiA+PiBPbmNlIGFnYWluOiBpdCAqaGFzIGJlZW4g c2V0KiwgYnV0IHNpbXBseSB3aWxsIG5vdCBiZSAqZGVsaXZlcmVkIHRvIHRoZQ0KPiBob3N0Ki4N Cj4gPj4NCj4gPj4gU28sIHRoaXMgQVBJIGlzIGFib3V0IG5lZ290aWF0aW5nICpkZWxpdmVyeSog b2YgbWV0YWRhdGEuIEluIHB1cmUNCj4gPj4gdGVjaG5pY2FsIHNlbnNlLiBBbmQgdGhlIHNldCBv ZiBmbGFncyB0aGF0IHRoaXMgQVBJIHJldHVybnMgaW5kaWNhdGVzDQo+ID4+IHdoaWNoIGtpbmRz IG9mIG1ldGFkYXRhIHRoZSBOSUMgd2lsbCBiZSBhYmxlIHRvIGRlbGl2ZXIgc2ltdWx0YW5lb3Vz bHkuDQo+ID4+DQo+ID4+IEZvciBleGFtcGxlLCBhcyBJIHVuZGVyc3RhbmQsIGluIHRoZSBjYXNl IG9mIHR1bm5lbCBvZmZsb2FkLCBNTFg1DQo+ID4+IGNsYWltcyBSeCBtYXJrIGVudGlyZWx5IGZv ciB0dW5uZWwgSUQgbWV0YWRhdGEsIHNvLCBpZiBhbiBhcHBsaWNhdGlvbg0KPiA+PiByZXF1ZXN0 cyAiTUFSSyB8IFRVTk5FTF9JRCIgd2l0aCB0aGlzIEFQSSwgdGhpcyBQTUQgc2hvdWxkIHByb2Jh Ymx5DQo+ID4+IHdhbnQgdG8gcmVzcG9uZCB3aXRoIGp1c3QgIlRVTk5FTF9JRCIuIFRoZSBhcHBs aWNhdGlvbiB3aWxsIHNlZSB0aGUNCj4gPj4gcmVzcG9uc2UgYW5kIHJlYWxpc2UgdGhhdCwgZXZl biBpZiBpdCBhZGRzIGl0cyAqb3duKiAodXNlcikgYWN0aW9uDQo+ID4+IE1BUksgdG8gYSBmbG93 IGFuZCBpZiB0aGUgZmxvdyBpcyBub3QgcmVqZWN0ZWQgYnkgdGhlIFBNRCwgaXQgd29uJ3QNCj4g Pj4gYmUgYWJsZSB0byBzZWUgdGhlIG1hcmsgaW4gdGhlIHJlY2VpdmVkIG1idWZzIChvciB0aGUg bWFyayB3aWxsIGJlDQo+IGluY29ycmVjdCkuDQo+ID4+DQo+ID4gU28gd2hhdCBzaG91bGQgdGhl IGFwcGxpY2F0aW9uIGRvIGlmIG9uIHNvbWUgZmxvd3MgaXQgd2FudHMgTUFSSyBhbmQgb24NCj4g b3RoZXIgRkxBRz8NCj4gDQo+IFlvdSBtZW50aW9uZWQgZmxvd3MsIHNvIEknZCBsaWtlIHRvIHN0 cmVzcyB0aGlzIG91dCBvbmUgbW9yZSB0aW1lOiB3aGF0IHRoaXMNCj4gQVBJIGNhcmVzIGFib3V0 IGlzIHNvbGVseSB0aGUgcG9zc2liaWxpdHkgdG8gZGVsaXZlciBtZXRhZGF0YSBiZXR3ZWVuIHRo ZSBOSUMNCj4gYW5kIHRoZSBob3N0LiBUaGUgaG9zdCA9PSB0aGUgUE1EICgqbm90KiBhcHBsaWNh dGlvbikuDQo+IA0KDQpJIHVuZGVyc3RhbmQgdGhhdCB5b3UgYXJlIG9ubHkgdGFsa2luZyBhYm91 dCBlbmFibGluZyB0aGUgYWN0aW9uLA0KbWVhbmluZyB0byBsZXQgdGhlIFBNRCBrbm93IHRoYXQg YXQgc29tZSBwb2ludCB0aGVyZSB3aWxsIGJlIGEgcnVsZQ0KdGhhdCB3aWxsIHVzZSB0aGUgbWFy ayBhY3Rpb24gZm9yIGV4YW1wbGUuIA0KSXMgbXkgdW5kZXJzdGFuZGluZyBjb3JyZWN0Pw0KSSBk b24ndCB1bmRlcnN0YW5kIHlvdXIgbGFzdCBjb21tZW50IGFib3V0IGhvc3QgPT0gUE1EIHNpbmNl IGF0IHRoZSBlbmQNCnRoaXMgdmFsdWUgc2hvdWxkIGJlIGdpdmVuIHRvIHRoZSBhcHBsaWNhdGlv bi4NCg0KPiA+ICBGcm9tIERQREsgdmlld3BvaW50IGJvdGggb2YgdGhlbSBjYW4ndCBiZSBzaGFy ZWQgb24gdGhlIHNhbWUgcnVsZQ0KPiA+ICh0aGV5IGFyZSB1c2luZyB0aGUgc2FtZSBzcGFjZSBp biBtYnVmKSBzbyB0aGUgYXBwbGljYXRpb24gd2lsbCBuZXZlcg0KPiA+IGFzayBmb3IgYm90aCBv ZiB0aGVtIGluIHRoZSBzYW1lIHJ1bGUgYnV0IGhlIGNhbiBvbiBzb21lIHJ1bGVzIGFzayBmb3IN Cj4gPiBtYXJrIHdoaWxlIG9uIG90aGVyIHJlcXVlc3QgZm9yIEZMQUcsIGV2ZW4gaW4geW91ciBj b2RlIHlvdSBhZGRlZCBib3RoDQo+IG9mIHRoZW0uDQo+ID4NCj4gPiBTbyB3aGF0IHNob3VsZCB0 aGUgUE1EIHJldHVybiBpZiBpdCBjYW4gc3VwcG9ydCBib3RoIG9mIHRoZW0ganVzdCBub3QNCj4g PiBhdCB0aGUgc2FtZSBydWxlPw0KPiANCj4gUGxlYXNlIHNlZSBhYm92ZS4gVGhpcyBpcyBub3Qg YWJvdXQgcnVsZXMuIFRoaXMgaXMgbm90IGFib3V0IHRoZSB3YXkgaG93IGZsYWcNCj4gYW5kIG1h cmsgYXJlIHByZXNlbnRlZCAqYnkqIHRoZSBQTUQgKnRvKiB0aGUgYXBwbGljYXRpb24gaW4gbWJ1 ZnMuDQo+IFNpbXVsdGFuZW91cyB1c2Ugb2YgYWN0aW9ucyBGTEFHIGFuZCBNQVJLIGluIGZsb3dz IG11c3QgYmUgcnVsZWQgb3V0IGJ5DQo+IHJ0ZV9mbG93X3ZhbGlkYXRlKCkgLyBydGVfZmxvd19j cmVhdGUoKS4gVGhlIHdheSBob3cgZmxhZyBhbmQgbWFyayBhcmUNCj4gKnJlcHJlc2VudGVkKiBp biBtYnVmcyBiZWxvbmdzIGluIG1idWYgbGlicmFyeSByZXNwb25zaWJpbGl0eSBkb21haW4uDQo+ IA0KPiBDb25zaWRlciB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbmFsIHNlcXVlbmNlOg0KPiANCj4g MSkgVGhlIE5JQyBoYXMgYSBwYWNrZXQsIHdoaWNoIGhhcyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdp dGggaXQ7DQo+IDIpIFRoZSBOSUMgdHJhbnNmZXJzIHRoaXMgcGFja2V0IHRvIHRoZSBob3N0Ow0K PiAzKSBUaGUgUE1EIHNlZXMgdGhlIHBhY2tldCBhbmQgaXRzIG1ldGFkYXRhOw0KPiA0KSBUaGUg UE1EIHJlcHJlc2VudHMgd2hhdGV2ZXIgYXZhaWxhYmxlIG1ldGFkYXRhIGluIG1idWYgZm9ybWF0 Lg0KPiANCj4gRmVhdHVyZXMgbmVnb3RpYXRlZCBieSB2aXJ0dWUgb2YgdGhpcyBBUEkgKGZvciBp bnN0YW5jZSwgRkxBRyBhbmQgTUFSSykNCj4gZW5hYmxlIGRlbGl2ZXJ5IG9mIHRoZXNlIGtpbmRz IG9mIG1ldGFkYXRhIGJldHdlZW4gcG9pbnRzICgyKSBhbmQgKDMpLg0KPiANCj4gQW5kIHRoZSBw cm9ibGVtIG9mIGZsYWcgLyBtYXJrIGNvLWV4aXN0ZW5jZSBpbiBtYnVmcyBzaXRzIGF0IHBvaW50 ICg0KS4NCj4gDQo+IC0+IENvbXBsZXRlbHkgZGlmZmVyZW50IHByb2JsZW1zLCBpbiBmYWN0Lg0K PiANCg0KQWdyZWUuDQoNCj4gPg0KPiA+IE9uZSBvcHRpb24gaXMgdG8gZG9jdW1lbnQgdGhhdCB0 aGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgbm90IHBlciBydWxlDQo+ID4gYnV0IGZvciB0aGUgZW50 aXJlIHBvcnQuIEZvciBleGFtcGxlIGluIHRoZSBleGFtcGxlIHlvdSBnYXZlIE1MWDUgd2lsbA0K PiA+IHN1cHBvcnQgbWFyayArIGZsYWcgYnV0IHdpbGwgbm90IHN1cHBvcnQgbWFyayArIHR1bm5l bC4NCj4gDQo+IFllcywgZm9yIHRoZSBwb3J0LiBGbG93IHJ1bGVzIGFyZSBhIGRvbid0IGNhcmUg dG8gdGhpcyBBUEkuDQo+IA0KPiA+DQo+ID4gQWxzbyBjb25zaWRlcmluZyB5b3VyIGV4YW1wbGUs IHRoZSBuZWdvdGlhdGlvbiBtYXkgcmVzdWx0IGluIHN1YnBhciByZXN1bHQuDQo+ID4gdGFraW5n IHlvdXIgZXhhbXBsZSB0aGUgUE1EIHJldHVybmVkICBUVU5ORUxfSUQgbWF5YmUgYXBwbGljYXRp b24NCj4gPiB3b3VsZCBwcmVmZXIgdG8gaGF2ZSB0aGUgbWFyayBhbmQgbm90IHRoZSBUVU5ORUxf SUQuIEkgdW5kZXJzdGFuZCB0aGF0DQo+ID4gYXBwbGljYXRpb24gY2FuIGNoZWNrIGFuZCB0cnkg YWdhaW4gd2l0aCBqdXN0IHRoZSBNQVJLLg0KPiANCj4gRXhhY3RseS4gVGhlIEFwcGxpY2F0aW9u IGNhbiByZXBlYXQgbmVnb3RpYXRpb24gd2l0aCBqdXN0IE1BUksuIElzIHRoZXJlIGFueQ0KPiBw cm9ibGVtIHdpdGggdGhhdD8NCj4gDQoNCkkgdW5kZXJzdGFuZCB0aGF0IHRoZSBhcHBsaWNhdGlv biBjYW4gbmVnb3RpYXRlIGFnYWluIGFuZCBhZ2Fpbi4NCkkganVzdCBkb24ndCBsaWtlIHRoYXQg dGhlIFBNRCBoYXMgbG9naWMgYW5kIHNlbGVjdHMgd2hhdCBoZSB0aGlua3Mgd2lsbCBiZSBiZXN0 Lg0KDQpJIHdhbnRlZCB0byBzdWdnZXN0IHRoYXQgdGhlIFBNRCB3aWxsIGp1c3QgdGVsbCB3aGF0 IGFyZSB0aGUgY29uZmxpY3RzIGFuZCB0aGUgYXBwbGljYXRpb24NCndpbGwgbmVnb3RpYXRlIGFn YWluIGJhc2VkIG9uIGl0cyBsb2dpYy4NCg0KPiA+IFlvdSBhcmUgaW5zZXJ0aW5nIGxvZ2ljIHRv IHRoZSBQTUQsIG1heWJlIHRoZSBmdW5jdGlvbiBzaG91bGQganVzdA0KPiA+IGZhaWwgbWF5YmUg cmV0dXJuaW5nIHRoZSBjb25mbGljdGluZyBpdGVtcz8NCj4gDQo+IFdoeSByZXR1cm4gY29uZmxp Y3RpbmcgaXRlbXM/IFRoZSBvcHRpbWFsIHN1YnNldCAoZnJvbSB0aGUgUE1EJ3MNCj4gcGVyc3Bl Y3RpdmUpIHNob3VsZCBiZSByZXR1cm5lZC4gSXQncyBhIHNpbHZlciBsaW5pbmcuIEluIHRoZSBl bmQsIHRoZSBhcHBsaWNhdGlvbg0KPiBjYW4gbGVhcm4gd2hpY2ggZmVhdHVyZXMgY2FuIGJlIGVu YWJsZWQgYW5kIGluIHdoYXQgY29tYmluYXRpb25zLiBBbmQgaXQNCj4gY2FuIHJlbHkgb24gdGhl IG91dGNvbWUgb2YgdGhlIG5lZ290aWF0aW9uIHByb2Nlc3MuDQo+IA0KVGhhdCBpcyBteSBwb2lu dCB0aGlzIGlzIFBNRCBwZXJzcGVjdGl2ZSwgbm90IHRoZSBhcHBsaWNhdGlvbi4gDQpob3cgY2Fu IGEgUE1EIGRlZmluZSBhbiBvcHRpbWFsIHN1YnNldD8gSG93IGNhbiBpdCBrbm93IHdoYXQgaXMg bW9yZQ0KaW1wb3J0YW50IHRvIHRoZSBhcHBsaWNhdGlvbj8NCkFsc28sIHRoZSBQTUQgbG9naWMg aXMgaW50ZXJuYWwgc28gaWYgZm9yIHNvbWUgcmVhc29uDQp0aGUgUE1EIHNlbGVjdGVkIHRoZSBi ZXN0IGZvciB0aGUgYXBwbGljYXRpb24gYnkgY2hhbmNlLCBzbyB0aGUgYXBwbGljYXRpb24gbGVh cm5zDQp0aGF0IHRoaXMgaXMgYSBnb29kIHZhbHVlIGZvciBoaW0uIEEgcmVsZWFzZSBsYXRlciB0 aGUgaW50ZXJuYWwgUE1EIGxvZ2ljIGNoYW5nZXMNCmZvciBleGFtcGxlLCBhIG5ldyBmZWF0dXJl IHdhcyBhZGRlZCwgb3RoZXIgY3VzdG9tZXIgcmVxdWVzdHMuDQpzaW5jZSB0aGlzIGlzIFBNRCB0 aGUgb3JpZ2luYWwgYXBwIGlzIG5vdCBhd2FyZSBvZiB0aGlzIGNoYW5nZSBhbmQgbWF5IGZhaWwu DQoNCldlIGJvdGggYWdyZWUgdGhhdCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGNoZWNrIHRoZSBy ZXN1bHQgYW5kIHJlbmVnb3RpYXRlIGlmIG5lZWRlZA0KSSBvbmx5IHN1Z2dlc3RlZCB0aGF0IHRo ZSBQTUQgd2lsbCBvbmx5IHJldHVybiBlcnJvciBhbmQgbm90IGFzc3VtZSBoZSBrbm93cyBiZXN0 Lg0KDQoNCj4gPg0KPiA+DQo+ID4NCj4gPj4gQnV0IHNvbWUgb3RoZXIgUE1EcyAobmV0L3NmYywg Zm9yIGluc3RhbmNlKSBjbGFpbSBvbmx5IGEgc21hbGwgZnJhY3Rpb24gb2YNCj4gYml0cw0KPiA+ PiBpbiBSeCBtYXJrIHRvIGRlbGl2ZXIgdHVubmVsIElEIGluZm9ybWF0aW9uLiBSZW1haW5pbmcg Yml0cyBhcmUgc3RpbGwNCj4gYXZhaWxhYmxlDQo+ID4+IGZvciBkZWxpdmVyeSBvZiAqdXNlciog bWFyayBJRC4gUGxlYXNlIHNlZSBhbiBleGFtcGxlIGF0DQo+ID4+IGh0dHBzOi8vcGF0Y2hlcy5k cGRrLm9yZy9wcm9qZWN0L2RwZGsvcGF0Y2gvMjAyMTA5MjkyMDU3MzAuNzc1LTItDQo+ID4+IGl2 YW4ubWFsb3ZAb2t0ZXRsYWJzLnJ1Lw0KPiA+PiAuIEluIHRoaXMgY2FzZSwgdGhlIFBNRCBtYXkg d2FudCB0byByZXR1cm4gYm90aCBmbGFncyBpbiB0aGUgcmVzcG9uc2U6DQo+ID4+ICJNQVJLIHwg VFVOTkVMX0lEIi4gVGhpcyB3YXksIHRoZSBhcHBsaWNhdGlvbiBrbm93cyB0aGF0IGJvdGggZmVh dHVyZXMNCj4gPj4gYXJlIGVuYWJsZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlLg0KPiA+Pg0KPiA+ PiBOb3cuIEkgYW50aWNpcGF0ZSBtb3JlIHF1ZXN0aW9ucyBhc2tpbmcgd2h5IHdvdWxkbid0IHdl IHByZWZlciBmbG93IEFQSQ0KPiA+PiB0ZXJtaW5vbG9neSBvciB3aHkgd291bGRuJ3Qgd2UgYWRk IGFuIEFQSSBmb3IgbmVnb3RpYXRpbmcgc3VwcG9ydCBmb3INCj4gPj4gbWV0YWRhdGEgKmFjdGlv bnMqIGFuZCBub3QganVzdCBtZXRhZGF0YSAqZGVsaXZlcnkqLiBUaGVyZSdzIGFuIGFuc3dlci4N Cj4gPj4gQWx3YXlzIGhhcyBiZWVuLg0KPiA+Pg0KPiA+PiBUaGUgdGhpbmcgaXMsIHRoZSB1c2Ug b2YgKmFjdGlvbnMqIGlzIHZlcnkgY29tcGxpY2F0ZWQuIEZvciBleGFtcGxlLCB0aGUNCj4gUE1E DQo+ID4+IG1heSBzdXBwb3J0IGFjdGlvbiBNQVJLIGZvciAidHJhbnNmZXIiIGZsb3dzIGJ1dCBu b3QgZm9yIG5vbi0idHJhbnNmZXIiDQo+ID4+IG9uZXMuIEFsc28sIHNpbXVsdGFuZW91cyB1c2Ug b2YgbXVsdGlwbGUgZGlmZmVyZW50IG1ldGFkYXRhIGFjdGlvbnMgbWF5DQo+IG5vdA0KPiA+PiBi ZSBwb3NzaWJsZS4gQW5kLCBsYXN0IGJ1dCBub3QgbGVhc3QsIGlmIHdlIGZvcmNlIHRoZSBhcHBs aWNhdGlvbiB0byBjaGVjaw0KPiA+PiBzdXBwb3J0IGZvciAqYWN0aW9ucyogb24gYWN0aW9uLWFm dGVyLWFjdGlvbiBiYXNpcywgdGhlIG9yZGVyIG9mIGNoZWNrcyB3aWxsDQo+IGJlDQo+ID4+IHZl cnkgY29uZnVzaW5nIHRvIGFwcGxpY2F0aW9ucy4NCj4gPj4NCj4gPj4gUHJldmlvdXNseSwgaW4g dGhpcyB0aHJlYWQsIFRob21hcyBzdWdnZXN0ZWQgdG8gZ28gZm9yIGV4YWN0bHkgdGhpcyB0eXBl IG9mDQo+ID4+IEFQSSwgdG8gY2hlY2sgc3VwcG9ydCBmb3IgYWN0aW9ucyBvbmUtYnktb25lLCB3 aXRob3V0IGFueSBjb250ZXh0DQo+ID4+ICgidHJhbnNmZXIiIC8gbm9uLSJ0cmFuc2ZlciIpLiBJ J20gYWZyYWlkLCB0aGlzIHdvbid0IGJlIE9LLg0KPiA+Pg0KPiA+ICsxIHRvIGtlZXBpbmcgaXQg YXMgYSBzZXBhcmF0ZWQgQVBJLiAoSSBhZ3JlZSBhY3Rpb25zIGxpbWl0YXRpb24gYXJlIHZlcnkN Cj4gY29tcGxleCBtZXRyaXgpDQo+ID4NCj4gPj4+DQo+ID4+PiBJbiBhbnkgY2FzZSBJIHRoaW5r IHRoaXMgaXMgZ29vZCBpZGVhIGFuZCBJIHdpbGwgc2VlIGhvdyB3ZSBjYW4gYWRkIGENCj4gPj4+ IG1vcmUgZ2VuZXJpYyBhcHByb2FjaCBvZiB0aGlzIEFQSSB0byB0aGUgbmV3IEFQSSB0aGF0IEkn bSBnb2luZyB0bw0KPiBwcmVzZW50Lg0KPiA+Pj4NCj4gPj4+DQo+ID4+Pj4+IFNvIG5vIGJyZWFr YWdlcyB3aXRoIHRoaXMgQVBJLg0KPiA+Pj4+Pg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IFBsZWFzZSBz ZWUgbW9yZSBjb21tZW50cyBpbmxpbmUuDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gVGhhbmtzLA0KPiA+ Pj4+Pj4gT3JpDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+ID4+Pj4+Pj4gRnJvbTogSXZhbiBNYWxvdiA8aXZhbi5tYWxvdkBva3RldGxhYnMucnU+DQo+ ID4+Pj4+Pj4gU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAyMywgMjAyMSAyOjIwIFBNDQo+ID4+ Pj4+Pj4gU3ViamVjdDogW1BBVENIIHYzIDEvNV0gZXRoZGV2OiBhZGQgQVBJIHRvIG5lZ290aWF0 ZSBkZWxpdmVyeSBvZg0KPiA+Pj4+Pj4+IFJ4IG1ldGEgZGF0YQ0KPiA+Pj4+Pj4+DQo+ID4+Pj4+ Pj4gRGVsaXZlcnkgb2YgbWFyaywgZmxhZyBhbmQgdGhlIGxpa2VzIG1pZ2h0IGFmZmVjdCBzbWFs bCBwYWNrZXQNCj4gPj4+Pj4+PiBwZXJmb3JtYW5jZS4NCj4gPj4+Pj4+PiBJZiB0aGVzZSBmZWF0 dXJlcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgZW5hYmxpbmcgdGhlbSBpbg0KPiA+Pj4+Pj4+ IHN0YXJ0ZWQgc3RhdGUgd2l0aG91dCBjYXVzaW5nIHRyYWZmaWMgZGlzcnVwdGlvbiBtYXkgbm90 IGFsd2F5cyBiZQ0KPiA+PiBwb3NzaWJsZS4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IExldCBhcHBs aWNhdGlvbnMgbmVnb3RpYXRlIGRlbGl2ZXJ5IG9mIFJ4IG1ldGEgZGF0YSBiZWZvcmVoYW5kLg0K PiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogSXZhbiBNYWxvdiA8aXZhbi5tYWxv dkBva3RldGxhYnMucnU+DQo+ID4+Pj4+Pj4gUmV2aWV3ZWQtYnk6IEFuZHJldyBSeWJjaGVua28N Cj4gPj4gPGFuZHJldy5yeWJjaGVua29Ab2t0ZXRsYWJzLnJ1Pg0KPiA+Pj4+Pj4+IFJldmlld2Vk LWJ5OiBBbmR5IE1vcmV0b24gPGFtb3JldG9uQHhpbGlueC5jb20+DQo+ID4+Pj4+Pj4gQWNrZWQt Ynk6IFJheSBLaW5zZWxsYSA8bWRyQGFzaHJvZS5ldT4NCj4gPj4+Pj4+PiBBY2tlZC1ieTogSmVy aW4gSmFjb2IgPGplcmluakBtYXJ2ZWxsLmNvbT4NCj4gPj4+Pj4+PiAtLS0NCj4gPj4+Pj4+PiAg IMKgIGFwcC90ZXN0LWZsb3ctcGVyZi9tYWluLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 IDIxICsrKysrKysrKysrKw0KPiA+Pj4+Pj4+ICAgwqAgYXBwL3Rlc3QtcG1kL3Rlc3RwbWQuY8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMjYgKysrKysrKysrKysrKysrDQo+ID4+ Pj4+Pj4gICDCoCBkb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzIxXzExLnJzdCB8wqAgOSAr KysrKysNCj4gPj4+Pj4+PiAgIMKgIGxpYi9ldGhkZXYvZXRoZGV2X2RyaXZlci5owqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHwgMTkgKysrKysrKysrKysNCj4gPj4+Pj4+PiAgIMKgIGxpYi9ldGhk ZXYvcnRlX2V0aGRldi5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMjUgKysrKysr KysrKysrKysNCj4gPj4+Pj4+PiAgIMKgIGxpYi9ldGhkZXYvcnRlX2V0aGRldi5owqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNDUNCj4gPj4+Pj4+PiArKysrKysrKysrKysrKysrKysr KysrKysrKw0KPiA+Pj4+Pj4+ICAgwqAgbGliL2V0aGRldi9ydGVfZmxvdy5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDEyICsrKysrKysNCj4gPj4+Pj4+PiAgIMKgIGxpYi9l dGhkZXYvdmVyc2lvbi5tYXDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMyAr Kw0KPiA+Pj4+Pj4+ICAgwqAgOCBmaWxlcyBjaGFuZ2VkLCAxNjAgaW5zZXJ0aW9ucygrKQ0KPiA+ Pj4+Pj4+DQo+ID4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0LWZsb3ctcGVyZi9tYWluLmMg Yi9hcHAvdGVzdC1mbG93LXBlcmYvbWFpbi5jDQo+ID4+Pj4+Pj4gaW5kZXggOWJlOGVkYzMxZC4u NDhlYWZmZmIxZCAxMDA2NDQNCj4gPj4+Pj4+PiAtLS0gYS9hcHAvdGVzdC1mbG93LXBlcmYvbWFp bi5jDQo+ID4+Pj4+Pj4gKysrIGIvYXBwL3Rlc3QtZmxvdy1wZXJmL21haW4uYw0KPiA+Pj4+Pj4+ IEBAIC0xNzYwLDYgKzE3NjAsMjcgQEAgaW5pdF9wb3J0KHZvaWQpDQo+ID4+Pj4+Pj4gICDCoMKg wqDCoMKgwqDCoMKgwqAgcnRlX2V4aXQoRVhJVF9GQUlMVVJFLCAiRXJyb3I6IGNhbid0IGluaXQg bWJ1Zg0KPiA+Pj4+Pj4+IHBvb2xcbiIpOw0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gICDCoMKgwqDC oMKgIGZvciAocG9ydF9pZCA9IDA7IHBvcnRfaWQgPCBucl9wb3J0czsgcG9ydF9pZCsrKSB7DQo+ ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHVpbnQ2NF90IHJ4X21ldGFfZmVhdHVyZXMgPSAwOw0K PiA+Pj4+Pj4+ICsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcnhfbWV0YV9mZWF0dXJlcyB8 PSBSVEVfRVRIX1JYX01FVEFfVVNFUl9GTEFHOw0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBy eF9tZXRhX2ZlYXR1cmVzIHw9IFJURV9FVEhfUlhfTUVUQV9VU0VSX01BUks7DQo+ID4+Pj4+Pj4g Kw0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBydGVfZXRoX3J4X21ldGFfbmVnb3Rp YXRlKHBvcnRfaWQsDQo+ID4+Pj4+Pj4gJnJ4X21ldGFfZmVhdHVyZXMpOw0KPiA+Pj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAocmV0ID09IDApIHsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoIShyeF9tZXRhX2ZlYXR1cmVzICYNCj4gPj4+Pj4+PiBSVEVfRVRIX1JYX01F VEFfVVNFUl9GTEFHKSkgew0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcHJpbnRmKCI6OiBmbG93IGFjdGlvbiBGTEFHIHdpbGwgbm90IGFmZmVjdCBSeA0KPiA+Pj4+ Pj4+IG1idWZzIG9uIHBvcnQ9JXVcbiIsDQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBvcnRfaWQpOw0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0NCj4gPj4+Pj4+PiArDQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKCEocnhfbWV0YV9mZWF0dXJlcyAmDQo+ID4+Pj4+Pj4gUlRFX0VUSF9SWF9NRVRB X1VTRVJfTUFSSykpIHsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHByaW50ZigiOjogZmxvdyBhY3Rpb24gTUFSSyB3aWxsIG5vdCBhZmZlY3QgUngNCj4gPj4+Pj4+ PiBtYnVmcyBvbiBwb3J0PSV1XG4iLA0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwb3J0X2lkKTsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB9DQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAocmV0ICE9 IC1FTk9UU1VQKSB7DQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnRlX2V4aXQo RVhJVF9GQUlMVVJFLCAiRXJyb3Igd2hlbiBuZWdvdGlhdGluZyBSeA0KPiA+Pj4+Pj4+IG1ldGEg ZmVhdHVyZXMgb24gcG9ydD0ldTogJXNcbiIsDQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBvcnRfaWQsIHJ0ZV9zdHJlcnJvcigtcmV0KSk7DQo+ID4+Pj4+Pj4g K8KgwqDCoMKgwqDCoMKgIH0NCj4gPj4+Pj4+PiArDQo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gcnRlX2V0aF9kZXZfaW5mb19nZXQocG9ydF9pZCwgJmRldl9pbmZvKTsNCj4g Pj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0ICE9IDApDQo+ID4+Pj4+Pj4gICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydGVfZXhpdChFWElUX0ZBSUxVUkUsIGRpZmYgLS1n aXQNCj4gPj4+Pj4+PiBhL2FwcC90ZXN0LXBtZC90ZXN0cG1kLmMgYi9hcHAvdGVzdC1wbWQvdGVz dHBtZC5jIGluZGV4DQo+ID4+Pj4+Pj4gOTdhZTUyZTE3ZS4uN2E4ZGEzZDdhYiAxMDA2NDQNCj4g Pj4+Pj4+PiAtLS0gYS9hcHAvdGVzdC1wbWQvdGVzdHBtZC5jDQo+ID4+Pj4+Pj4gKysrIGIvYXBw L3Rlc3QtcG1kL3Rlc3RwbWQuYw0KPiA+Pj4+Pj4+IEBAIC0xNDg1LDEwICsxNDg1LDM2IEBAIHN0 YXRpYyB2b2lkDQo+ID4+Pj4+Pj4gICDCoCBpbml0X2NvbmZpZ19wb3J0X29mZmxvYWRzKHBvcnRp ZF90IHBpZCwgdWludDMyX3Qgc29ja2V0X2lkKcKgIHsNCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAg c3RydWN0IHJ0ZV9wb3J0ICpwb3J0ID0gJnBvcnRzW3BpZF07DQo+ID4+Pj4+Pj4gK8KgwqDCoCB1 aW50NjRfdCByeF9tZXRhX2ZlYXR1cmVzID0gMDsNCj4gPj4+Pj4+PiAgIMKgwqDCoMKgwqAgdWlu dDE2X3QgZGF0YV9zaXplOw0KPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCBpbnQgcmV0Ow0KPiA+Pj4+ Pj4+ICAgwqDCoMKgwqDCoCBpbnQgaTsNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+ICvCoMKgwqAgcnhf bWV0YV9mZWF0dXJlcyB8PSBSVEVfRVRIX1JYX01FVEFfVVNFUl9GTEFHOw0KPiA+Pj4+Pj4+ICvC oMKgwqAgcnhfbWV0YV9mZWF0dXJlcyB8PSBSVEVfRVRIX1JYX01FVEFfVVNFUl9NQVJLOw0KPiA+ Pj4+Pj4+ICvCoMKgwqAgcnhfbWV0YV9mZWF0dXJlcyB8PSBSVEVfRVRIX1JYX01FVEFfVFVOTkVM X0lEOw0KPiA+Pj4+Pj4+ICsNCj4gPj4+Pj4+PiArwqDCoMKgIHJldCA9IHJ0ZV9ldGhfcnhfbWV0 YV9uZWdvdGlhdGUocGlkLCAmcnhfbWV0YV9mZWF0dXJlcyk7DQo+ID4+Pj4+Pj4gK8KgwqDCoCBp ZiAocmV0ID09IDApIHsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCEocnhfbWV0YV9m ZWF0dXJlcyAmIFJURV9FVEhfUlhfTUVUQV9VU0VSX0ZMQUcpKSB7DQo+ID4+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgVEVTVFBNRF9MT0coSU5GTywgIkZsb3cgYWN0aW9uIEZMQUcgd2ls bCBub3QNCj4gPj4+Pj4+PiBhZmZlY3QgUnggbWJ1ZnMgb24gcG9ydCAldVxuIiwNCj4gPj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGlkKTsNCj4gPj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgfQ0KPiA+Pj4+Pj4+ICsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKCEocnhfbWV0YV9mZWF0dXJlcyAmIFJURV9FVEhfUlhfTUVUQV9VU0VSX01BUkspKQ0K PiA+Pj4+Pj4+IHsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBURVNUUE1EX0xP RyhJTkZPLCAiRmxvdyBhY3Rpb24gTUFSSyB3aWxsIG5vdA0KPiA+Pj4+Pj4+IGFmZmVjdCBSeCBt YnVmcyBvbiBwb3J0ICV1XG4iLA0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwaWQpOw0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+ID4+Pj4+ Pj4gKw0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIShyeF9tZXRhX2ZlYXR1cmVzICYg UlRFX0VUSF9SWF9NRVRBX1RVTk5FTF9JRCkpIHsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBURVNUUE1EX0xPRyhJTkZPLCAiRmxvdyB0dW5uZWwgb2ZmbG9hZCBzdXBwb3J0DQo+ ID4+Pj4+Pj4gbWlnaHQgYmUgbGltaXRlZCBvciB1bmF2YWlsYWJsZSBvbiBwb3J0ICV1XG4iLA0K PiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWQpOw0K PiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+ID4+Pj4+Pj4gK8KgwqDCoCB9IGVsc2UgaWYg KHJldCAhPSAtRU5PVFNVUCkgew0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBydGVfZXhpdChF WElUX0ZBSUxVUkUsICJFcnJvciB3aGVuIG5lZ290aWF0aW5nIFJ4IG1ldGENCj4gPj4+Pj4+PiBm ZWF0dXJlcyBvbiBwb3J0ICV1OiAlc1xuIiwNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBpZCwgcnRlX3N0cmVycm9yKC1yZXQpKTsNCj4gPj4+Pj4+PiArwqDCoMKgIH0NCj4g Pj4+Pj4+PiArDQo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIHBvcnQtPmRldl9jb25mLnR4bW9kZSA9 IHR4X21vZGU7DQo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIHBvcnQtPmRldl9jb25mLnJ4bW9kZSA9 IHJ4X21vZGU7DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9y ZWxfbm90ZXMvcmVsZWFzZV8yMV8xMS5yc3QNCj4gPj4+Pj4+PiBiL2RvYy9ndWlkZXMvcmVsX25v dGVzL3JlbGVhc2VfMjFfMTEucnN0DQo+ID4+Pj4+Pj4gaW5kZXggMTkzNTZhYzUzYy4uNjY3NGQ0 NDc0YyAxMDA2NDQNCj4gPj4+Pj4+PiAtLS0gYS9kb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNl XzIxXzExLnJzdA0KPiA+Pj4+Pj4+ICsrKyBiL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2Vf MjFfMTEucnN0DQo+ID4+Pj4+Pj4gQEAgLTEwNiw2ICsxMDYsMTUgQEAgTmV3IEZlYXR1cmVzDQo+ ID4+Pj4+Pj4gICDCoMKgwqAgQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgdG8gc3BlY2lmeSB0 b3RhbCBudW1iZXIgb2YNCj4gPj4+Pj4+PiBwcm9jZXNzZXMgYW5kDQo+ID4+Pj4+Pj4gICDCoMKg wqAgY3VycmVudCBwcm9jZXNzIElELiBFYWNoIHByb2Nlc3Mgb3ducyBzdWJzZXQgb2YgUnggYW5k IFR4DQo+IHF1ZXVlcy4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+ICsqICoqQWRkZWQgYW4gQVBJIHRv IG5lZ290aWF0ZSBkZWxpdmVyeSBvZiBzcGVjaWZpYyBwYXJ0cyBvZiBSeA0KPiA+Pj4+Pj4+ICtt ZXRhDQo+ID4+Pj4+Pj4gK2RhdGEqKg0KPiA+Pj4+Pj4+ICsNCj4gPj4+Pj4+PiArwqAgQSBuZXcg QVBJLCBgYHJ0ZV9ldGhfcnhfbWV0YV9uZWdvdGlhdGUoKWBgLCB3YXMgYWRkZWQuDQo+ID4+Pj4+ Pj4gK8KgIFRoZSBmb2xsb3dpbmcgcGFydHMgb2YgUnggbWV0YSBkYXRhIHdlcmUgZGVmaW5lZDoN Cj4gPj4+Pj4+PiArDQo+ID4+Pj4+Pj4gK8KgICogYGBSVEVfRVRIX1JYX01FVEFfVVNFUl9GTEFH YGANCj4gPj4+Pj4+PiArwqAgKiBgYFJURV9FVEhfUlhfTUVUQV9VU0VSX01BUktgYA0KPiA+Pj4+ Pj4+ICvCoCAqIGBgUlRFX0VUSF9SWF9NRVRBX1RVTk5FTF9JRGBgDQo+ID4+Pj4+Pj4gKw0KPiA+ Pj4+Pj4+DQo+ID4+Pj4+Pj4gICDCoCBSZW1vdmVkIEl0ZW1zDQo+ID4+Pj4+Pj4gICDCoCAtLS0t LS0tLS0tLS0tDQo+ID4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2xpYi9ldGhkZXYvZXRoZGV2X2RyaXZl ci5oDQo+ID4+Pj4+Pj4gYi9saWIvZXRoZGV2L2V0aGRldl9kcml2ZXIuaCBpbmRleCA0MGU0NzRh YTdlLi45NmUwYzYwY2FlDQo+IDEwMDY0NA0KPiA+Pj4+Pj4+IC0tLSBhL2xpYi9ldGhkZXYvZXRo ZGV2X2RyaXZlci5oDQo+ID4+Pj4+Pj4gKysrIGIvbGliL2V0aGRldi9ldGhkZXZfZHJpdmVyLmgN Cj4gPj4+Pj4+PiBAQCAtNzg5LDYgKzc4OSwyMiBAQCB0eXBlZGVmIGludA0KPiAoKmV0aF9nZXRf bW9uaXRvcl9hZGRyX3QpKHZvaWQNCj4gPj4+Pj4+PiAqcnhxLCB0eXBlZGVmIGludCAoKmV0aF9y ZXByZXNlbnRvcl9pbmZvX2dldF90KShzdHJ1Y3QNCj4gcnRlX2V0aF9kZXYNCj4gPj4+Pj4+PiAq ZGV2LA0KPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCBzdHJ1Y3QgcnRlX2V0aF9yZXByZXNlbnRvcl9p bmZvICppbmZvKTsNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+ICsvKioNCj4gPj4+Pj4+PiArICogQGlu dGVybmFsDQo+ID4+Pj4+Pj4gKyAqIE5lZ290aWF0ZSBkZWxpdmVyeSBvZiBzcGVjaWZpYyBwYXJ0 cyBvZiBSeCBtZXRhIGRhdGEuDQo+ID4+Pj4+Pj4gKyAqDQo+ID4+Pj4+Pj4gKyAqIEBwYXJhbSBk ZXYNCj4gPj4+Pj4+PiArICrCoMKgIFBvcnQgKGV0aGRldikgaGFuZGxlDQo+ID4+Pj4+Pj4gKyAq DQo+ID4+Pj4+Pj4gKyAqIEBwYXJhbVtpbm91dF0gZmVhdHVyZXMNCj4gPj4+Pj4+PiArICrCoMKg IEZlYXR1cmUgc2VsZWN0aW9uIGJ1ZmZlcg0KPiA+Pj4+Pj4+ICsgKg0KPiA+Pj4+Pj4+ICsgKiBA cmV0dXJuDQo+ID4+Pj4+Pj4gKyAqwqDCoCBOZWdhdGl2ZSBlcnJubyB2YWx1ZSBvbiBlcnJvciwg emVybyBvdGhlcndpc2UgICovIHR5cGVkZWYNCj4gPj4+Pj4+PiAraW50ICgqZXRoX3J4X21ldGFf bmVnb3RpYXRlX3QpKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiA+Pj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50NjRfdCAqZmVhdHVyZXMp Ow0KPiA+Pj4+Pj4+ICsNCj4gPj4+Pj4+PiAgIMKgIC8qKg0KPiA+Pj4+Pj4+ICAgwqDCoCAqIEBp bnRlcm5hbCBBIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkN Cj4gPj4+Pj4+PiBhbiBFdGhlcm5ldCBkcml2ZXIuDQo+ID4+Pj4+Pj4gICDCoMKgICovDQo+ID4+ Pj4+Pj4gQEAgLTk0OSw2ICs5NjUsOSBAQCBzdHJ1Y3QgZXRoX2Rldl9vcHMgew0KPiA+Pj4+Pj4+ DQo+ID4+Pj4+Pj4gICDCoMKgwqDCoMKgIGV0aF9yZXByZXNlbnRvcl9pbmZvX2dldF90IHJlcHJl c2VudG9yX2luZm9fZ2V0Ow0KPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCAvKio8IEdldCByZXByZXNl bnRvciBpbmZvLiAqLw0KPiA+Pj4+Pj4+ICsNCj4gPj4+Pj4+PiArwqDCoMKgIGV0aF9yeF9tZXRh X25lZ290aWF0ZV90IHJ4X21ldGFfbmVnb3RpYXRlOw0KPiA+Pj4+Pj4+ICvCoMKgwqAgLyoqPCBO ZWdvdGlhdGUgZGVsaXZlcnkgb2Ygc3BlY2lmaWMgcGFydHMgb2YgUnggbWV0YSBkYXRhLiAqLw0K PiA+Pj4+Pj4+ICAgwqAgfTsNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+ICAgwqAgLyoqDQo+ID4+Pj4+ Pj4gZGlmZiAtLWdpdCBhL2xpYi9ldGhkZXYvcnRlX2V0aGRldi5jIGIvbGliL2V0aGRldi9ydGVf ZXRoZGV2LmMNCj4gPj4+Pj4+PiBpbmRleCBkYWY1Y2E5MjQyLi40OWNiODRkNjRjIDEwMDY0NA0K PiA+Pj4+Pj4+IC0tLSBhL2xpYi9ldGhkZXYvcnRlX2V0aGRldi5jDQo+ID4+Pj4+Pj4gKysrIGIv bGliL2V0aGRldi9ydGVfZXRoZGV2LmMNCj4gPj4+Pj4+PiBAQCAtNjMxMCw2ICs2MzEwLDMxIEBA IHJ0ZV9ldGhfcmVwcmVzZW50b3JfaW5mb19nZXQodWludDE2X3QNCj4gPj4+Pj4+PiBwb3J0X2lk LA0KPiA+Pj4+Pj4+ICAgwqDCoMKgwqDCoCByZXR1cm4gZXRoX2Vycihwb3J0X2lkLCAoKmRldi0+ ZGV2X29wcy0NCj4gPj4+Pj4+Pj4gcmVwcmVzZW50b3JfaW5mb19nZXQpKGRldiwgaW5mbykpO8Kg IH0NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+ICtpbnQNCj4gPj4+Pj4+PiArcnRlX2V0aF9yeF9tZXRh X25lZ290aWF0ZSh1aW50MTZfdCBwb3J0X2lkLCB1aW50NjRfdA0KPiAqZmVhdHVyZXMpIHsNCj4g Pj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBydGVfZXRoX2RldiAqZGV2Ow0KPiA+Pj4+Pj4+ICsNCj4g Pj4+Pj4+PiArwqDCoMKgIFJURV9FVEhfVkFMSURfUE9SVElEX09SX0VSUl9SRVQocG9ydF9pZCwg LUVOT0RFVik7DQo+ID4+Pj4+Pj4gK8KgwqDCoCBkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRf aWRdOw0KPiA+Pj4+Pj4+ICsNCj4gPj4+Pj4+PiArwqDCoMKgIGlmIChkZXYtPmRhdGEtPmRldl9j b25maWd1cmVkICE9IDApIHsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgUlRFX0VUSERFVl9M T0coRVJSLA0KPiA+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJUaGUgcG9ydCAoaWQ9 JSJQUkl1MTYiKSBpcyBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIsDQo+ID4+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcG9ydF9pZCk7DQo+ID4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUJVU1k7DQo+ID4+Pj4+Pj4gK8KgwqDCoCB9DQo+ID4+Pj4+Pj4gKw0KPiA+Pj4+Pj4+ICvC oMKgwqAgaWYgKGZlYXR1cmVzID09IE5VTEwpIHsNCj4gPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg UlRFX0VUSERFVl9MT0coRVJSLCAiSW52YWxpZCBmZWF0dXJlcyAoTlVMTClcbiIpOw0KPiA+Pj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsNCj4gPj4+Pj4+PiArwqDCoMKgIH0N Cj4gPj4+Pj4+PiArDQo+ID4+Pj4+Pj4gK8KgwqDCoCBSVEVfRlVOQ19QVFJfT1JfRVJSX1JFVCgq ZGV2LT5kZXZfb3BzLQ0KPiA+Pj4gcnhfbWV0YV9uZWdvdGlhdGUsDQo+ID4+Pj4+Pj4gLUVOT1RT VVApOw0KPiA+Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIGV0aF9lcnIocG9ydF9pZCwNCj4gPj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKmRldi0+ZGV2X29wcy0+cnhfbWV0YV9u ZWdvdGlhdGUpKGRldiwNCj4gPj4+Pj4+PiArZmVhdHVyZXMpKTsgfQ0KPiA+Pj4+Pj4+ICsNCj4g Pj4+Pj4+PiAgIMKgIFJURV9MT0dfUkVHSVNURVJfREVGQVVMVChydGVfZXRoX2Rldl9sb2d0eXBl LCBJTkZPKTsNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+ICAgwqAgUlRFX0lOSVQoZXRoZGV2X2luaXRf dGVsZW1ldHJ5KSBkaWZmIC0tZ2l0DQo+ID4+Pj4+Pj4gYS9saWIvZXRoZGV2L3J0ZV9ldGhkZXYu aCBiL2xpYi9ldGhkZXYvcnRlX2V0aGRldi5oIGluZGV4DQo+ID4+Pj4+Pj4gMWRhMzc4OTZkOC4u ODQ2N2E3YTM2MiAxMDA2NDQNCj4gPj4+Pj4+PiAtLS0gYS9saWIvZXRoZGV2L3J0ZV9ldGhkZXYu aA0KPiA+Pj4+Pj4+ICsrKyBiL2xpYi9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ID4+Pj4+Pj4gQEAg LTQ4ODgsNiArNDg4OCw1MSBAQCBfX3J0ZV9leHBlcmltZW50YWzCoCBpbnQNCj4gPj4+Pj4+PiBy dGVfZXRoX3JlcHJlc2VudG9yX2luZm9fZ2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4+Pj4+Pj4g ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJ0ZV9ldGhfcmVw cmVzZW50b3JfaW5mbyAqaW5mbyk7DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiArLyoqIFRoZSBldGhk ZXYgc2VlcyBmbGFnZ2VkIHBhY2tldHMgaWYgdGhlcmUgYXJlIGZsb3dzIHdpdGgNCj4gPj4+Pj4+ PiArYWN0aW9uIEZMQUcuICovICNkZWZpbmUgUlRFX0VUSF9SWF9NRVRBX1VTRVJfRkxBRw0KPiA+ PiAoVUlOVDY0X0MoMSkgPDwNCj4gPj4+Pj4+PiArMCkNCj4gPj4+Pj4+PiArDQo+ID4+Pj4+Pj4g Ky8qKiBUaGUgZXRoZGV2IHNlZXMgbWFyayBJRHMgaW4gcGFja2V0cyBpZiB0aGVyZSBhcmUgZmxv d3Mgd2l0aA0KPiA+Pj4+Pj4+ICthY3Rpb24gTUFSSy4gKi8gI2RlZmluZSBSVEVfRVRIX1JYX01F VEFfVVNFUl9NQVJLDQo+ID4+Pj4gKFVJTlQ2NF9DKDEpIDw8DQo+ID4+Pj4+Pj4gKzEpDQo+ID4+ Pj4+Pj4gKw0KPiA+Pj4+Pj4+ICsvKiogVGhlIGV0aGRldiBkZXRlY3RzIG1pc3NlZCBwYWNrZXRz IGlmIHRoZXJlIGFyZSAidHVubmVsX3NldCINCj4gPj4+Pj4+PiArZmxvd3MgaW4gdXNlLiAqLyAj ZGVmaW5lIFJURV9FVEhfUlhfTUVUQV9UVU5ORUxfSUQNCj4gPj4gKFVJTlQ2NF9DKDEpDQo+ID4+ Pj4gPDwNCj4gPj4+Pj4+PiArMikNCj4gPj4+Pj4+PiArDQo+ID4+Pj4+Pj4gKy8qKg0KPiA+Pj4+ Pj4+ICsgKiBAd2FybmluZw0KPiA+Pj4+Pj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJ IG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPj4+Pj4+PiArICoNCj4gPj4+Pj4+ PiArICogTmVnb3RpYXRlIGRlbGl2ZXJ5IG9mIHNwZWNpZmljIHBhcnRzIG9mIFJ4IG1ldGEgZGF0 YS4NCj4gPj4+Pj4+PiArICoNCj4gPj4+Pj4+PiArICogSW52b2tlIHRoaXMgQVBJIGJlZm9yZSB0 aGUgZmlyc3QgcnRlX2V0aF9kZXZfY29uZmlndXJlKCkNCj4gPj4+Pj4+PiAraW52b2NhdGlvbg0K PiA+Pj4+Pj4+ICsgKiB0byBsZXQgdGhlIFBNRCBtYWtlIHByZXBhcmF0aW9ucyB0aGF0IGFyZSBp bmNvbnZlbmllbnQgdG8gZG8NCj4gPj4gbGF0ZXIuDQo+ID4+Pj4+Pj4gKyAqDQo+ID4+Pj4+Pj4g KyAqIFRoZSBuZWdvdGlhdGlvbiBwcm9jZXNzIGlzIGFzIGZvbGxvd3M6DQo+ID4+Pj4+Pj4gKyAq DQo+ID4+Pj4+Pj4gKyAqIC0gdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3RzIGZlYXR1cmVzIGludGVu ZGluZyB0byB1c2UgYXQgbGVhc3QNCj4gPj4+Pj4+PiArc29tZSBvZiB0aGVtOw0KPiA+Pj4+Pj4+ ICsgKiAtIHRoZSBQTUQgcmVzcG9uZHMgd2l0aCB0aGUgZ3VhcmFudGVlZCBzdWJzZXQgb2YgdGhl DQo+IHJlcXVlc3RlZA0KPiA+Pj4+Pj4+ICtmZWF0dXJlIHNldDsNCj4gPj4+Pj4+PiArICogLSB0 aGUgYXBwbGljYXRpb24gY2FuIHJldHJ5IG5lZ290aWF0aW9uIHdpdGggYW5vdGhlciBzZXQgb2YN Cj4gPj4+Pj4+PiArZmVhdHVyZXM7DQo+ID4+Pj4+Pj4gKyAqIC0gdGhlIGFwcGxpY2F0aW9uIGNh biBwYXNzIHplcm8gdG8gY2xlYXIgdGhlIG5lZ290aWF0aW9uDQo+ID4+Pj4+Pj4gK3Jlc3VsdDsN Cj4gPj4+Pj4+PiArICogLSB0aGUgbGFzdCBuZWdvdGlhdGVkIHJlc3VsdCB0YWtlcyBlZmZlY3Qg dXBvbiB0aGUgZXRoZGV2IHN0YXJ0Lg0KPiA+Pj4+Pj4+ICsgKg0KPiA+Pj4+Pj4+ICsgKiBJZiB0 aGlzIEFQSSBpcyB1bnN1cHBvcnRlZCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBncmFjZWZ1bGx5 DQo+ID4+Pj4+Pj4gaWdub3JlIHRoYXQuDQo+ID4+Pj4+Pj4gKyAqDQo+ID4+Pj4+Pj4gKyAqIEBw YXJhbSBwb3J0X2lkDQo+ID4+Pj4+Pj4gKyAqwqDCoCBQb3J0IChldGhkZXYpIGlkZW50aWZpZXIN Cj4gPj4+Pj4+PiArICoNCj4gPj4+Pj4+PiArICogQHBhcmFtW2lub3V0XSBmZWF0dXJlcw0KPiA+ Pj4+Pj4+ICsgKsKgwqAgRmVhdHVyZSBzZWxlY3Rpb24gYnVmZmVyDQo+ID4+Pj4+Pj4gKyAqDQo+ ID4+Pj4+Pj4gKyAqIEByZXR1cm4NCj4gPj4+Pj4+PiArICrCoMKgIC0gKC1FQlVTWSkgaWYgdGhl IHBvcnQgY2FuJ3QgaGFuZGxlIHRoaXMgaW4gaXRzIGN1cnJlbnQNCj4gPj4+Pj4+PiArc3RhdGU7 DQo+ID4+Pj4+Pj4gKyAqwqDCoCAtICgtRU5PVFNVUCkgaWYgdGhlIG1ldGhvZCBpdHNlbGYgaXMg bm90IHN1cHBvcnRlZCBieSB0aGUNCj4gPj4+Pj4+PiArUE1EOw0KPiA+Pj4+Pj4+ICsgKsKgwqAg LSAoLUVOT0RFVikgaWYgKnBvcnRfaWQqIGlzIGludmFsaWQ7DQo+ID4+Pj4+Pj4gKyAqwqDCoCAt ICgtRUlOVkFMKSBpZiAqZmVhdHVyZXMqIGlzIE5VTEw7DQo+ID4+Pj4+Pj4gKyAqwqDCoCAtICgt RUlPKSBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQ7DQo+ID4+Pj4+Pj4gKyAqwqDCoCAtICgwKSBv biBzdWNjZXNzDQo+ID4+Pj4+Pj4gKyAqLw0KPiA+Pj4+Pj4+ICtfX3J0ZV9leHBlcmltZW50YWwN Cj4gPj4+Pj4+PiAraW50IHJ0ZV9ldGhfcnhfbWV0YV9uZWdvdGlhdGUodWludDE2X3QgcG9ydF9p ZCwgdWludDY0X3QNCj4gPj4+Pj4+PiArKmZlYXR1cmVzKTsNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBJ IGRvbid0IHRoaW5rIG1ldGEgaXMgdGhlIGJlc3QgbmFtZSBzaW5jZSB3ZSBhbHNvIGhhdmUgbWV0 YSBpdGVtDQo+ID4+Pj4+PiBhbmQgdGhlIHdvcmQgbWV0YSBjYW4gYmUgdXNlZCBpbiBvdGhlciBj YXNlcy4NCj4gPj4+Pj4NCj4gPj4+Pj4gSSdtIG5vIGV4cGVydCBpbiBuYW1pbmcuIFdoYXQgY291 bGQgYmUgYSBiZXR0ZXIgdGVybSBmb3IgdGhpcz8NCj4gPj4+Pj4gUGVyc29uYWxseSwgSSdkIHJh dGhlciBub3QgcGVyY2VpdmUgIm1ldGEiIHRoZSB3YXkgeW91IGRlc2NyaWJlLg0KPiA+Pj4+PiBJ dCdzIG5vdCBqdXN0ICJtZXRhIi4gSXQncyAicnhfbWV0YSIsIGFuZCB0aGUgZmxhZ3Mgc3VwcGxp ZWQgd2l0aA0KPiA+Pj4+PiB0aGlzIEFQSSBwcm92aWRlIGVub3VnaCBjb250ZXh0IHRvIGV4cGxh aW4gd2hhdCBpdCdzIGFsbCBhYm91dC4NCj4gPj4+Pg0KPiA+Pj4+IFRoaW5raW5nIG92ZXJuaWdo dCBhYm91dCBpdCBJJ2Qgc3VnZ2VzdCBmdWxsICJtZXRhZGF0YSIuDQo+ID4+Pj4gWWVzLCBpdCB3 aWxsIG5hbWUgYSBiaXQgbG9uZ2VyLCBidXQgbGVzcyBjb25mdXNpbmcgdmVyc3VzIHRlcm0gTUVU QQ0KPiA+Pj4+IGFscmVhZHkgdXNlZCBpbiBmbG93IEFQSS4NCj4gPj4+Pg0KPiA+Pj4gRm9sbG93 aW5nIG15IGFib3ZlIGNvbW1lbnRzLCBJIHRoaW5rIGl0IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBu ZXcgQVBJDQo+ID4+PiBidXQgaW4gYW55IGNhc2Ugd2hhdCBhYm91dCByeF9mbG93X2FjdGlvbl9u ZWdvdGlhdGU/DQo+ID4+DQo+ID4+IFNlZSBteSB0aG91Z2h0cyBhYm92ZS4gSXQgbWFrZXMgbm8g c2Vuc2UgdG8gbmVnb3RpYXRlICpzdXBwb3J0IGZvcg0KPiA+PiBhY3Rpb25zKi4gRXhpc3Rpbmcg InJ0ZV9mbG93X3ZhbGlkYXRlKCkiIGFscmVhZHkgZG9lcyB0aGF0IGpvYi4gVGhlIG5ldw0KPiA+ PiAibmVnb3RpYXRlIFJ4IG1ldGFkYXRhKiBBUEkgaXMgYWxsIGFib3V0ICpkZWxpdmVyeSogb2Yg bWV0YWRhdGEgd2hpY2ggaXMNCj4gPj4gc3VwcG9zZWQgdG8gYmUgKmFscmVhZHkqIHNldCBmb3Ig dGhlIHBhY2tldHMgKmluc2lkZSogdGhlIE5JQy4gU28sIHdlDQo+ID4+IG5lZ290aWF0ZSAqZGVs aXZlcnkgZnJvbSB0aGUgTklDIHRvIHRoZSBob3N0Ki4gTm90aGluZyBtb3JlLg0KPiA+Pg0KPiA+ IEFncmVlIHdpdGggeW91ciBjb21tZW50IGJ1dCB0aGVuIG1heWJlIHdlIHNob3VsZCBnbyB0byB0 aGUgcmVnaXN0ZXINCj4gPiBhcHByb2FjaCBqdXN0IGxpa2UgbWV0YWRhdGE/DQo+IA0KPiBEb24n dCB5b3UgbWVhbiAicmVnaXN0ZXJpbmcgbWJ1ZiBkeW5hbWljIGZpZWxkIC8gZmxhZyIgYnkgYW55 IGNoYW5jZT8NCj4gRXZlbiBpZiBpdCdzIHRlY2huaWNhbGx5IHBvc3NpYmxlLCB0aGlzIG1heSBj b21wbGljYXRlIHRoZSBBUEkgY29udHJhY3QNCj4gYmVjYXVzZSB0aGUga2V5IGlkZWEgaGVyZSBp cyB0byBkZW1hbmQgdGhhdCB0aGUgYXBwbGljYXRpb24gbmVnb3RpYXRlDQo+IG1ldGFkYXRhIGRl bGl2ZXJ5IGF0IHRoZSBlYXJsaWVzdCBzdGVwIHBvc3NpYmxlIChiZWZvcmUgY29uZmlndXJpbmcg dGhlDQo+IHBvcnQpLCB3aGlsc3QgYSBkeW5hbWljIGZpZWxkIC8gZmxhZyBjYW4gYmUgKHRoZW9y ZXRpY2FsbHkpIHJlZ2lzdGVyZWQNCj4gYXQgYW55IHRpbWUuIEJ1dCwgb2YgY291cnNlLCBmZWVs IGZyZWUgdG8gZWxhYm9yYXRlIG9uIHlvdXIgaWRlYS4NCj4gDQoNClllcywgbGlrZSBJIHNhaWQg YWJvdmUgSSBkb24ndCBzZWUgYSBkaWZmZXJlbmNlIGJldHdlZW4gbWV0YWRhdGENCmFuZCBtYXJr LCBhdCBsZWFzdCBub3QgZnJvbSB0aGUgYXBwbGljYXRpb24gdXNhZ2UuDQpJIGFzc3VtZSB5b3Ug bmVlZCB0aGlzIGluZm8gYXQgZGV2aWNlIHN0YXJ0IGFuZCBieSBkZWZpbml0aW9uDQp0aGUgcmVn aXN0cmF0aW9uIHNob3VsZCBoYXBwZW4gYmVmb3JlLiAobWJ1ZiBzaG91bGQgYmUgY29uZmlndXJl ZA0KYmVmb3JlIHN0YXJ0KQ0KDQo+IFdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB3ZSBhbGwgcmVh Y2ggYW4gYWdyZWVtZW50Lg0KPiANCg0KKzEgSSB0aGluayB3ZSBjYW4gYWdyZWUgdGhhdCB0aGVy ZSBpcyBhIG5lZWQgZm9yIGxldHRpbmcgdGhlIFBNRA0Ka25vdyBiZWZvcmUgdGhlIHN0YXJ0IHRo YXQgc29tZSBhY3Rpb24gd2lsbCBiZSB1c2VkLg0KDQpBbmQgSSdtIHNvcnJ5IGlmIEkgc291bmQg cGlja3kgYW5kIGhhcmQsIHRoaXMgaXMgbm90IG15IGludGVudGlvbi4NCkknbSBhbHNvIGRvaW5n IG15IGJlc3QgdG8gcmV2aWV3IHRoaXMgYXMgZmFzdCBhcyBJIGNhbi4NCk15IG9wZW4gaXNzdWVz IGFuZCBwcmlvcml0aWVzOg0KMS4gdGhlIEFQSSBicmVha2FnZSB0aGUgcG9zc2libGUgc29sdXRp b24gYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSByZXN0IG9mIHRoZSBQTURzIC8gdXBkYXRlIGRvYw0K dG8gc2F5IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgdGhlIGFwcGxpY2F0 aW9uIHNob3VsZCBhc3N1bWUgdGhhdA0KaXQgY2FuIHN0aWxsIHVzZSB0aGUgbWFyayAvIGZsYWcu IC0tIGJsb2NrZXIgdGhpcyBtdXN0IGJlIHJlc29sdmVkLg0KMi4gZnVuY3Rpb24gbmFtZS4gbXkg bWFpbiBpc3N1ZSBpcyB0aGF0IG1ldGFkYXRhIHNob3VsZCBiZSBqdXN0IGxpa2UgbWFyaw0KbWF5 YmUgdGhlIHNvbHV0aW9uIGNhbiBiZSBhZGRpbmcgbWV0YWRhdGEgZmxhZyB0byB0aGlzIGZ1bmN0 aW9uLg0KdGhlIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGNhbGxz IHR3byBmdW5jdGlvbnMgdG8gY29uZmlndXJlDQptZXRhZGF0YS4gLS0gaGlnaCBwcmlvcml0eSBi dXQgaWYgeW91IGNhbiBnaXZlIG1lIGdvb2QgcmVhc29uaW5nIG5vdCBqdXN0DQp3ZSBkb24ndCBu ZWVkIHRvIHJlZ2lzdGVyIHRoZSBtYXJrIEkgZ3Vlc3MgSSB3aWxsIGJlIE8uSy4NCjMuIElmIFBN RCBoYXMgaW50ZXJuYWwgbG9naWMgaW4gY2FzZSBvZiBjb25mbGljdCBvciBub3QuDQpQbGVhc2Ug dGhpbmsgYWJvdXQgaXQuIC0tIGxvdyBwcmlvIEkgd2lsbCBhZ3JlZSB0byB3aGF0IHlvdSBkZWNp ZGUuDQpidXQgaWYgeW91IGRlY2lkZSB0aGF0IFBNRCB3aWxsIGhhdmUgaW50ZXJuYWwgbG9naWMg dGhlbiB0aGlzIG11c3QgYmUgZG9jdW1lbnRlZA0Kc28gdGhlIGFwcGxpY2F0aW9uIHdpbGwga25v dyBub3QgdG8gcmVseSBvbiB0aGUgcmVzdWx0cy4NCg0KQmVzdCwNCk9yaQ0KDQo+ID4NCj4gPiBC ZXN0LA0KPiA+IE9yaQ0KPiA+Pj4NCj4gPj4+PiBBbmRyZXcuDQo+ID4+PiBCZXN0LA0KPiA+Pj4g T3JpDQo+ID4+Pg0KPiA+Pg0KPiA+PiAtLQ0KPiA+PiBJdmFuIE0NCj4gDQo+IC0tDQo+IEl2YW4g TQ0K