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 3102C41DE6; Mon, 6 Mar 2023 13:36:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 11A4740E50; Mon, 6 Mar 2023 13:36:47 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 1A50040A8A for ; Mon, 6 Mar 2023 13:36:45 +0100 (CET) Received: from dggpeml500021.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4PVdKc1C5YzSkSc; Mon, 6 Mar 2023 20:33:40 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by dggpeml500021.china.huawei.com (7.185.36.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Mon, 6 Mar 2023 20:36:40 +0800 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.021; Mon, 6 Mar 2023 13:36:39 +0100 From: Konstantin Ananyev To: Ferruh Yigit , Ruifeng Wang , Konstantin Ananyev , "dev@dpdk.org" , Fengchengwen , Honnappa Nagarahalli , Stephen Hemminger , "Ajit Khaparde (ajit.khaparde@broadcom.com)" CC: nd Subject: RE: [PATCH 2/2] ethdev: fix race condition in fast-path ops setup Thread-Topic: [PATCH 2/2] ethdev: fix race condition in fast-path ops setup Thread-Index: AQHZRPHnBL1vPilgIEWuG59yHT+R767XVo0AgAGZ0YCAAKEXgIAAh9OAgACoesCAASVfAIAAPmKAgABYF4CAAlnQAIACm6eAgAfazgCAA/0DgIAAV9OQgAAITgCAABjI8A== Date: Mon, 6 Mar 2023 12:36:38 +0000 Message-ID: References: <20230220060839.1267349-1-ashok.k.kaladi@intel.com> <20230220060839.1267349-2-ashok.k.kaladi@intel.com> <4786db4b-63dc-5329-522d-77eb58d4cff4@huawei.com> <20230221090053.14d653bf@hermes.local> <3cd97a71-b32f-b33b-dce1-46fabad182f6@huawei.com> <54fbf4e55cd44477b1e956f98a7a3c50@huawei.com> <3dc3b3d3-c80f-a361-8780-b1b3e48d843e@yandex.ru> <52296fe2-d9f6-1a24-e577-e5271a69a053@amd.com> <5cbf53cb272d42b994eb12b337466986@huawei.com> <273e4b96-260f-0096-9570-3268cf25fc78@amd.com> In-Reply-To: <273e4b96-260f-0096-9570-3268cf25fc78@amd.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.195.247.106] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected 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 DQoNCj4gT24gMy82LzIwMjMgMTA6MzIgQU0sIEtvbnN0YW50aW4gQW5hbnlldiB3cm90ZToNCj4g Pg0KPiA+DQo+ID4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+Pj4gRnJvbTogRmVy cnVoIFlpZ2l0IDxmZXJydWgueWlnaXRAYW1kLmNvbT4NCj4gPj4+IFNlbnQ6IFNhdHVyZGF5LCBN YXJjaCA0LCAyMDIzIDE6MTkgQU0NCj4gPj4+IFRvOiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0 YW50aW4udi5hbmFueWV2QHlhbmRleC5ydT47IGRldkBkcGRrLm9yZzsgZmVuZ2NoZW5nd2VuDQo+ ID4+PiA8ZmVuZ2NoZW5nd2VuQGh1YXdlaS5jb20+OyBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0 YW50aW4uYW5hbnlldkBodWF3ZWkuY29tPjsgSG9ubmFwcGENCj4gPj4+IE5hZ2FyYWhhbGxpIDxI b25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tPjsgU3RlcGhlbiBIZW1taW5nZXIgPHN0ZXBoZW5A bmV0d29ya3BsdW1iZXIub3JnPjsNCj4gPj4+IFJ1aWZlbmcgV2FuZyA8UnVpZmVuZy5XYW5nQGFy bS5jb20+OyBBaml0IEtoYXBhcmRlIChhaml0LmtoYXBhcmRlQGJyb2FkY29tLmNvbSkNCj4gPj4+ IDxhaml0LmtoYXBhcmRlQGJyb2FkY29tLmNvbT4NCj4gPj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg Mi8yXSBldGhkZXY6IGZpeCByYWNlIGNvbmRpdGlvbiBpbiBmYXN0LXBhdGggb3BzIHNldHVwDQo+ ID4+Pg0KPiA+Pj4gT24gMi8yNi8yMDIzIDU6MjIgUE0sIEtvbnN0YW50aW4gQW5hbnlldiB3cm90 ZToNCj4gPj4+Pg0KPiA+Pj4+Pj4+Pj4+Pj4+PiBJZiBldGhkZXYgZW5xdWV1ZSBvciBkZXF1ZXVl IGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcNCj4gPj4+Pj4+Pj4+Pj4+Pj4gZXRoX2Rldl9mcF9v cHNfc2V0dXAoKSwgaXQgbWF5IGdldCBwcmUtZW1wdGVkIGFmdGVyIHNldHRpbmcNCj4gPj4+Pj4+ Pj4+Pj4+Pj4gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLCBidXQgYmVmb3JlIHNldHRpbmcgdGhlIHBv aW50ZXIgdG8gcG9ydCBkYXRhLg0KPiA+Pj4+Pj4+Pj4+Pj4+PiBJbiB0aGlzIGNhc2UgdGhlIG5l d2x5IHJlZ2lzdGVyZWQgZW5xdWV1ZS9kZXF1ZXVlIGZ1bmN0aW9uDQo+ID4+Pj4+Pj4+Pj4+Pj4+ IHdpbGwgdXNlIGR1bW15IHBvcnQgZGF0YSBhbmQgZW5kIHVwIGluIHNlZyBmYXVsdC4NCj4gPj4+ Pj4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+Pj4+Pj4gVGhpcyBwYXRjaCBtb3ZlcyB0aGUgdXBkYXRp b24gb2YgZWFjaCBkYXRhIHBvaW50ZXJzIGJlZm9yZQ0KPiA+Pj4+Pj4+Pj4+Pj4+PiB1cGRhdGlu ZyBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHBvaW50ZXJzLg0KPiA+Pj4+Pj4+Pj4+Pj4+Pg0KPiA+ Pj4+Pj4+Pj4+Pj4+PiBGaXhlczogYzg3ZDQzNWE0ZDc5ICgiZXRoZGV2OiBjb3B5IGZhc3QtcGF0 aCBBUEkgaW50bw0KPiA+Pj4+Pj4+Pj4+Pj4+PiBzZXBhcmF0ZQ0KPiA+Pj4+Pj4+Pj4+Pj4+PiBz dHJ1Y3R1cmUiKQ0KPiA+Pj4+Pj4+Pj4+Pj4+PiBDYzogc3RhYmxlQGRwZGsub3JnDQo+ID4+Pj4+ Pj4+Pj4+DQo+ID4+Pj4+Pj4+Pj4+IFdoeSBpcyBzb21ldGhpbmcgY2FsbGluZyBlbnF1ZXVlL2Rl cXVldWUgd2hlbiBkZXZpY2UgaXMgbm90DQo+ID4+Pj4+Pj4+Pj4+IGZ1bGx5DQo+ID4+Pj4+Pj4+ PiBzdGFydGVkLg0KPiA+Pj4+Pj4+Pj4+PiBBIGNvcnJlY3RseSB3cml0dGVuIGFwcGxpY2F0aW9u IHdvdWxkIG5vdCBjYWxsIHJ4L3R4IGJ1cnN0DQo+ID4+Pj4+Pj4+Pj4+IHVudGlsIGFmdGVyIGV0 aGRldiBzdGFydCBoYWQgZmluaXNoZWQuDQo+ID4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+PiBQbGVh c2UgcmVmZXIgdGhlIGViMGQ0NzFhODk0IChldGhkZXY6IGFkZCBwcm9hY3RpdmUgZXJyb3INCj4g Pj4+Pj4+Pj4+PiBoYW5kbGluZyBtb2RlKSwgd2hlbiBkcml2ZXIgcmVjb3ZlciBpdHNlbGYsIHRo ZSBhcHBsaWNhdGlvbiBtYXkNCj4gPj4+Pj4+Pj4+PiBzdGlsbCBpbnZva2UNCj4gPj4+Pj4+Pj4+ IGVucXVldWUvZGVxdWV1ZSBBUEkuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gUmlnaHQgbm93 IERQREsgZXRoZGV2IGxheWVyICpkb2VzIG5vdCogcHJvdmlkZSBzeW5jaHJvbml6YXRpb24NCj4g Pj4+Pj4+Pj4+IG1lY2hhbmlzbXMgYmV0d2VlbiBkYXRhLXBhdGggYW5kIGNvbnRyb2wtcGF0aCBm dW5jdGlvbnMuDQo+ID4+Pj4+Pj4+PiBUaGF0IHdhcyBhIGRlbGliZXJhdGUgZGVpc2duIGNob2lj ZS4gSWYgd2Ugd2FudCB0byBjaGFuZ2UgdGhhdA0KPiA+Pj4+Pj4+Pj4gcnVsZSwgdGhlbiBJIHN1 cHBvc2Ugd2UgbmVlZCBhIGNvbW11bml0eSBjb25zZW5zdXMgZm9yIGl0Lg0KPiA+Pj4+Pj4+Pj4g SSB0aGluayB0aGF0IGlmIHRoZSBkcml2ZXIgd2FudHMgdG8gcHJvdmlkZSBzb21lIHNvcnQgb2Yg ZXJyb3INCj4gPj4+Pj4+Pj4+IHJlY292ZXJ5IHByb2NlZHVyZSwgdGhlbiBpdCBoYXMgdG8gcHJv dmlkZSBzb21lIHN5bmNocm9uaXphdGlvbg0KPiA+Pj4+Pj4+Pj4gbWVjaGFuaXNtIGluc2lkZSBp dCBiZXR3ZWVuIGRhdGEtcGF0aCBhbmQgY29udHJvbC1wYXRoIGZ1bmN0aW9ucy4NCj4gPj4+Pj4+ Pj4+IEFjdHVhbGx5IGxvb2tpbmcgYXQgZWIwZDQ3MWE4OTQgKGV0aGRldjogYWRkIHByb2FjdGl2 ZSBlcnJvcg0KPiA+Pj4+Pj4+Pj4gaGFuZGxpbmcgbW9kZSksIGFuZCBmb2xsb3dpbmcgcGF0Y2hl cyBJIHdvbmRlciBob3cgaXQgY3JlZXBlZCBpbj8NCj4gPj4+Pj4+Pj4+IEl0IHNlZW1zIHdlIGp1 c3QgaW50cm9kdWNlZCBhIGxvb3Bob2xlIGZvciByYWNlIGNvbmRpdGlvbiB3aXRoDQo+ID4+Pj4+ Pj4+PiB0aGlzIGFwcHJvYWNoLi4uDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBDb3VsZCB5b3UgdHJ5 IHRvIGRlc2NyaWJlIHRoZSBzcGVjaWZpYyBzY2VuYXJpbyBvZiBsb29waG9sZSA/DQo+ID4+Pj4+ Pg0KPiA+Pj4+Pj4gT2ssIGFzIEkgdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtOg0K PiA+Pj4+Pj4NCj4gPj4+Pj4+IFdoZW4gUE1EIHdhbnRzIHRvIHN0YXJ0IGEgcmVjb3ZlcnkgaXQg aGFzIHRvOg0KPiA+Pj4+Pj4gwqAgLSBpbnZva2UNCj4gPj4+Pj4+IHJ0ZV9ldGhfZGV2X2NhbGxi YWNrX3Byb2Nlc3MoUlRFX0VUSF9FVkVOVF9FUlJfUkVDT1ZFUklORyk7DQo+ID4+Pj4+PiDCoMKg wqAgVGhhdCBzdXBwb3NlZCB0byBjYWxsIHVzZXIgcHJvdmlkZWQgY2FsbGJhY2suIEFmdGVyIGNh bGxiYWNrIGlzDQo+ID4+Pj4+PiBmaW5pc2hlZCBQTUQgYXNzdW1lcw0KPiA+Pj4+Pj4gwqDCoMKg IHRoYXQgdXNlciBpcyBhd2FyZSB0aGF0IHJlY292ZXJ5IGlzIGFib3V0IHRvIHN0YXJ0IGFuZCBz aG91bGQNCj4gPj4+Pj4+IG1ha2Ugc29tZSBwcmVjYXV0aW9ucy4NCj4gPj4+Pj4+IC0gd2hlbiBy ZWNvdmVyeSBpcyBmaW5pc2hlZCBpdCBpbnZva2VzIGFub3RoZXIgY2FsbGJhY2s6DQo+ID4+Pj4+ PiDCoMKgIFJURV9FVEhfRVZFTlRfUkVDT1ZFUllfKFNVQ0NFU1MvRkFJTEVEKS4gQWZ0ZXIgdGhh dCB1c2VyIGVpdGhlcg0KPiA+Pj4+Pj4gY2FuIGNvbnRpbnVlIHRvDQo+ID4+Pj4+PiDCoMKgIHVz ZSBwb3J0IG9yIGhhdmUgdG8gdHJlYXQgaXMgYXMgZmF1bHR5Lg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+ IFRoZSBpZGVhIGlzIG9rIGluIHByaW5jaXBsZSwgYnV0IHRoZXJlIGlzIGEgcHJvYmxlbS4NCj4g Pj4+Pj4+DQo+ID4+Pj4+PiBsaWIvZXRoZGV2L3J0ZV9ldGhkZXYuaDoNCj4gPj4+Pj4+IMKgIMKg wqDCoMKgwqDCoMKgwqDCoCAvKiogUG9ydCByZWNvdmVyaW5nIGZyb20gYSBoYXJkd2FyZSBvciBm aXJtd2FyZSBlcnJvci4NCj4gPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAqIElmIFBNRCBzdXBw b3J0cyBwcm9hY3RpdmUgZXJyb3IgcmVjb3ZlcnksDQo+ID4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgKiBpdCBzaG91bGQgdHJpZ2dlciB0aGlzIGV2ZW50IHRvIG5vdGlmeSBhcHBsaWNhdGlvbg0K PiA+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogdGhhdCBpdCBkZXRlY3RlZCBhbiBlcnJvciBh bmQgdGhlIHJlY292ZXJ5IGlzIGJlaW5nIHN0YXJ0ZWQuDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gPDw8 ICEhISEhDQo+ID4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBVcG9uIHJlY2VpdmluZyB0aGUg ZXZlbnQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90DQo+ID4+Pj4+PiBpbnZva2UgYW55IGNv bnRyb2wgcGF0aCBBUEkNCj4gPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAqIChzdWNoIGFzIHJ0 ZV9ldGhfZGV2X2NvbmZpZ3VyZS9ydGVfZXRoX2Rldl9zdG9wLi4uKQ0KPiA+Pj4+Pj4gdW50aWwg cmVjZWl2aW5nDQo+ID4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBSVEVfRVRIX0VWRU5UX1JF Q09WRVJZX1NVQ0NFU1Mgb3INCj4gPj4+Pj4+IFJURV9FVEhfRVZFTlRfUkVDT1ZFUllfRkFJTEVE IGV2ZW50Lg0KPiA+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogVGhlIFBNRCB3aWxsIHNldCB0 aGUgZGF0YSBwYXRoIHBvaW50ZXJzIHRvIGR1bW15DQo+ID4+Pj4+PiBmdW5jdGlvbnMsDQo+ID4+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBhbmQgcmUtc2V0IHRoZSBkYXRhIHBhdGggcG9pbnRl cnMgdG8gbm9uLWR1bW15IGZ1bmN0aW9ucw0KPiA+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICog YmVmb3JlIHJlcG9ydGluZyBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NVQ0NFU1MgZXZlbnQuDQo+ ID4+Pj4+PiA8PDwgISEhISENCj4gPj4+Pj4+DQo+ID4+Pj4+PiBUaGF0IHBhcnQgaXMganVzdCB3 cm9uZyBJIGJlbGlldmUuDQo+ID4+Pj4+PiBJdCBzaG91bGQgYmU6DQo+ID4+Pj4+PiBVcG9uIHJl Y2VpdmluZyB0aGUgZXZlbnQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGludm9rZSBhbnkN Cj4gPj4+Pj4+ICpib3RoIGNvbnRyb2wgYW5kIGRhdGEtcGF0aCogQVBJIHVudGlsIHJlY2Vpdmlu Zw0KPiA+Pj4+Pj4gUlRFX0VUSF9FVkVOVF9SRUNPVkVSWV9TVUNDRVNTIG9yIFJURV9FVEhfRVZF TlRfUkVDT1ZFUllfRkFJTEVEDQo+ID4+Pj4+PiBldmVudC4NCj4gPj4+Pj4+IFJlc2V0dGluZyBk YXRhIHBhdGggcG9pbnRlcnMgdG8gZHVtbXkgZnVuY3Rpb25zIGJ5IFBNRCAqYmVmb3JlKg0KPiA+ Pj4+Pj4gaW52b2tpbmcgcnRlX2V0aF9kZXZfY2FsbGJhY2tfcHJvY2VzcyhSVEVfRVRIX0VWRU5U X0VSUl9SRUNPVkVSSU5HKTsNCj4gPj4+Pj4+IGludHJvZHVjZXMgYSByYWNlLWNvbmRpdGlvbiB3 aXRoIGRhdGEtcGF0aCB0aHJlYWRzLCBhcyBzdWNoIHRocmVhZA0KPiA+Pj4+Pj4gY291bGQgYWxy ZWFkeSBiZSBpbnNpZGUgUlgvVFggZnVuY3Rpb24gb3IgY2FuIGFscmVhZHkgcmVhZCBSWC9UWA0K PiA+Pj4+Pj4gZnVuY3Rpb24vZGF0YSBwb2ludGVycyBhbmQgYmUgYWJvdXQgdG8gdXNlIHRoZW0u DQo+ID4+Pj4+DQo+ID4+Pj4+IEN1cnJlbnQgcHJhY3RpY2VzOiB0aGUgUE1EcyBhbHJlYWR5IGFk ZCBzb21lIGRlbGF5IGFmdGVyIHNldCBSeC9UeA0KPiA+Pj4+PiBjYWxsYmFjayB0byBkdW1teSwg YW5kIHBsdXMgdGhlIERQREsgd29ya2VyIHRocmVhZCBpcyBidXN5cG9sbGluZywNCj4gPj4+Pj4g dGhlIHByb2JhYmlsaXR5IG9mIG9jY3VyZW5jZSBpbiByZWFsaXR5IGlzIHplcm8uIEJ1dCBpbiB0 aGVvcmV0aWNhbGx5DQo+ID4+Pj4+IGV4aXN0IHRoZSBhYm92ZSByYWNlLWNvbmRpdGlvbi4NCj4g Pj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gQWRkaW5nIGRlbGF5IG1pZ2h0IG1ha2UgYSBwcm9ibGVtIGEg Yml0IGxlc3MgcmVwcm9kdWNpYmxlLCBidXQgaXQNCj4gPj4+PiBkb2Vzbid0IGZpeCBpdC4NCj4g Pj4+PiBUaGUgYnVnIGlzIHN0aWxsIHRoZXJlLg0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+Pj4NCj4g Pj4+Pj4+IEFuZCByaWdodCBub3cgcnRlX2V0aGRldiBsYXllciBkb2Vzbid0IHByb3ZpZGUgYW55 IG1lY2hhbmlzbSB0bw0KPiA+Pj4+Pj4gY2hlY2sgaXQgb3Igd2FpdCB3aGVuIHRoZXknbGwgZmlu aXNoLCBldGMuDQo+ID4+Pj4+DQo+ID4+Pj4+IFllcw0KPiA+Pj4+Pg0KPiA+Pj4+Pj4NCj4gPj4+ Pj4+IFNvLCBwcm9iYWJseSB0aGUgc2ltcGxlc3Qgd2F5IHRvIGZpeCBpdCB3aXRoIGV4aXN0aW5n IERQREsgZGVzaWduOg0KPiA+Pj4+Pj4gLSB1c2VyIGxldmVsIGNhbGxiYWNrwqAgUlRFX0VUSF9F VkVOVF9FUlJfUkVDT1ZFUklORyBzaG91bGQgcmV0dXJuDQo+ID4+Pj4+PiBvbmx5IGFmdGVyIGl0 IGVuc3VyZXMgdGhhdCAqYWxsKg0KPiA+Pj4+Pj4gwqDCoCBhcHBsaWNhdGlvbiB0aHJlYWRzIChh bmQgcHJvY2Vzc2VzKSBzdG9wcGVkIHVzaW5nIGVpdGhlciBjb250cm9sDQo+ID4+Pj4+PiBvciBk YXRhLXBhdGggZnVuY3Rpb25zIGZvciB0aGF0IHBvcnQNCj4gPj4+Pj4NCj4gPj4+Pj4gQWdyZWUN Cj4gPj4+Pj4NCj4gPj4+Pj4+IMKgwqAgKHllcyBpdCBtZWFucyB0aGF0IGFwcGxpY2F0aW9uIHRo YXQgd2FudHMgdG8gdXNlIHRoaXMgZmVhdHVyZSBoYXMNCj4gPj4+Pj4+IHRvIHByb3ZpZGUgaXRz IG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtDQo+ID4+Pj4+PiDCoMKgIGFyb3VuZCBkYXRh LXBhdGggZnVuY3Rpb25zIChSWC9UWCkgdGhhdCBpdCBpcyBnb2luZyB0byB1c2UpLg0KPiA+Pj4+ Pj4gLSBhZnRlciB0aGF0IFBNRCBpcyBzYWZlIHRvIHJlc2V0IHJ0ZV9ldGhfZnBfb3BzW10gdmFs dWVzIHRvIGR1bW15IG9uZXMuDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gQW5kIG1lc3NhZ2UgdG8gYWxs IFBNRCBkZXZlbG9wZXJzOg0KPiA+Pj4+Pj4gKnBsZWFzZSBzdG9wIHVwZGF0aW5nIHJ0ZV9ldGhf ZnBfb3BzW10gb24geW91ciBvd24qLg0KPiA+Pj4+Pj4gVGhhdCdzIGEgYmFkIHByYWN0aWNlIGFu ZCBpdCBpcyBub3Qgc3VwcG9zZWQgdG8gZG8gdGhpbmdzIHRoYXQgd2F5Lg0KPiA+Pj4+Pj4gVGhl cmUgaXMgYSBzcGVjaWFsIEFQSSBwcm92aWRlZCBmb3IgdGhlc2UgcHVycG9zZXM6DQo+ID4+Pj4+ PiBldGhfZGV2X2ZwX29wc19yZXNldCgpLCBldGhfZGV2X2ZwX29wc19zZXR1cCgpLCBzbyB1c2Ug aXQuDQo+ID4+Pj4+DQo+ID4+Pj4+IFRoaXMgdHdvIGZ1bmN0aW9uIGlzIGluIHByaXZhdGUuaCwg c28gaXQgc2hvdWxkIGJlIGV4cG9zZSB0byBwdWJsaWMNCj4gPj4+Pj4gaGVhZGVyIGZpbGUuDQo+ ID4+Pj4NCj4gPj4+PiBZb3UgbWVhbiB3ZSBuZWVkIHRvIG1vdmUgdGhlc2UgZnVuY3Rpb25zIGRl Y2xhcmF0aW9ucyBpbnRvIGV0aGRldl9kcml2ZXIuaD8NCj4gPj4+PiBJZiBzbywgdGhlbiB5ZXMs IEkgdGhpbmsgd2UgcHJvYmFibHkgZG8uDQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4NCj4gPj4+DQo+ ID4+PiBXaGF0IGFib3V0IG1ha2luZyBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbiBhdmFpbGFi bGUgdG8gZHJpdmVycywgd2hpY2ggb25seSB1cGRhdGVzDQo+ID4+PiBmdW5jdGlvbiBwb2ludGVy cywgYnV0IG5vdCAgJ2Zwby0+cnhxJyAvICdmcG8tPnR4cScuDQo+ID4+Pg0KPiA+Pj4gVGhpcyB3 YXkgZHJpdmVyIGNhbiBzd2l0Y2ggdG8gYmV0d2VlbiBkdW1teSBhbmQgcmVhbCBidXJzdCBmdW5j dGlvbiB3aXRob3V0IHdvcnJ5aW5nIFJ4L1R4DQo+ID4+PiBxdWV1ZSB2YWxpZGl0eS4NCj4gPj4+ DQo+ID4+PiBAQ2hlbmd3ZW4sIEBSdWlmZW5nLCBjYW4gdGhpcyBzb2x2ZSB0aGUgaXNzdWUgZm9y IHJlbGF4ZWQgbWVtb3J5IG9yZGVyaW5nIHN5c3RlbXM/DQo+ID4+DQo+ID4+IFllcywgdXBkYXRp bmcgb25seSBmdW5jdGlvbiBwb2ludGVycyByZW1vdmVzIHRoZSBzeW5jaHJvbml6YXRpb24gcmVx dWlyZW1lbnQgYmV0d2VlbiBmdW5jdGlvbg0KPiA+PiBwb2ludGVyIGFuZCBxZGF0YS4NCj4gPg0K PiA+IExhZHMsIHRoYXQgd291bGRuJ3Qgd29yayBhbnl3YXkuDQo+ID4gVGhlIHJhY2UgYmV0d2Vl biByZWNvdmVyeSBwcm9jZWR1cmUgYW5kIGRhdGEtcGF0aCBwZXJzaXN0czoNCj4gPiBSZWNvdmVy eSBzdGlsbCBoYXMgbm8gaWRlYSBpcyBhdCBnaXZlbiBtb21lbnQgYW55IHRocmVhZCBkb2luZyBS WC9UWCBvciBub3QsIGFuZCB0aGVyZSBpcyBubw0KPiA+IHdheSBmb3IgaXQgdG8ga25vdyB3aGVu IHN1Y2ggdGhyZWFkIHdpbGwgZmluaXNoLg0KPiANCj4gDQo+IFllcyByYWNlIGNvbmRpdGlvbiBw ZXJzaXN0cywgYnV0IGFzIGxvbmcgYXMgZGF0YSAocnhxL3R4cSkgc3RheXMgdmFsaWQsDQo+IGRv ZXMgaXQgY2F1c2UgYSB0cm91YmxlPyBBdCBsZXN0IHRoaXMgZml4ZXMgdGhlIHBvdGVudGlhbCBj cmFzaCBJIHRoaW5rLg0KDQpZZXMsIEkgYmVsaWV2ZSBpdCBzdGlsbCB3b3VsZCBjYXVzZSB0aGUg dHJvdWJsZS4NCldlIHN0aWxsIGhhdmUgY29udHJvbCB0aHJlYWQgYW5kIFJYL1RYIHRocmVhZHMg c2ltdWx0YW5lb3VzbHkgYWNjZXNzaW5nIHJ4cS90eHEgZGF0YSBhbmQNCnByb2JhYmx5IHRyeWlu ZyB0byBhY2Nlc3MvbW9kaWZ5IHRoZSBzYW1lIEhXIHJlZ2lzdGVycy4NCldpdGggY3VycmVudCBl dGhkZXYgZGVzaWduIChubyBzeW5jIGJldHdlZW4gY29udHJvbCBhbmQgZGF5YS1wYXRoKSANCmRl dl9mcF9vcHNfc2V0dXAoKSAgYW5kIFJYL1RYIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIGNhbGxl ZCBzaW11bHRhbmVvdXNseS4NCg0KPiANCj4gPiBXZSBkbyBuZWVkIHNvbWUgc3luY2hyb25pemF0 aW9uIG1lY2hhbmlzbSBiZXR3ZWVuIGNvbnRyb2wocmVjb3ZlcnkpIGFuZCBkYXRhLXBhdGggdGhy ZWFkcy4NCj4gPiBJIGJlbGlldmUgaXQgaXMgdW5hdm9pZGFibGUuDQo+ID4NCj4gPj4+DQo+ID4+ Pg0KPiA+Pj4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBCVFcswqAgSSBkb24ndCBzZWUgYW55IGltcGxl bWVudGF0aW9uIGZvcg0KPiA+Pj4+Pj4gUlRFX0VUSF9FVkVOVF9FUlJfUkVDT1ZFUklORyB3aXRo aW4gZWl0aGVyIHRlc3RwbWQgb3IgYW55IG90aGVyDQo+ID4+Pj4+PiBleGFtcGxlIGFwcHMuDQo+ ID4+Pj4+PiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPw0KPiA+Pj4+Pg0KPiA+Pj4+PiBDdXJyZW50 bHkgaXQganVzdCBwcm9tb3RlIHRoZSBldmVudC4NCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gT2ss IGNhbiBJIHN1Z2dlc3QgdGhlbiB0byBhZGQgYSBwcm9wZXIgdXNhZ2UgZm9yIGludG8gaW4gdGVz dHBtZD8NCj4gPj4+PiBJdCBsb29rcyByZWFsbHkgc3RyYW5nZSB0aGF0IHdlIGFkZCBuZXcgZmVh dHVyZSBpbnRvIGV0aGRldiAoYW5kIDINCj4gPj4+PiBQTURzKSwgYnV0IGRpZG4ndCBwcm92aWRl IGFueSB3YXkgZm9yIHVzZXJzIHRvIHRlc3QgaXQuDQo+ID4+Pj4NCj4gPj4+Pj4NCj4gPj4+Pj4+ IElmIG5vdCwgdGhlbiBwcm9iYWJseSBpdCBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQg LSBsZXQncw0KPiA+Pj4+Pj4gaW5jb3Jwb3JhdGUgaXQgaW5zaWRlIHRlc3RwbWQgKG5ldyBmb3J3 YXJkaW5nIGVuZ2luZSBwcm9iYWJseSkgc28NCj4gPj4+Pj4+IGV2ZXJ5b25lIGNhbiB0ZXN0L3Ry eSBpdC4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJdCBtZWFucyB0 aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW5ub3Qgc2VuZCBvciByZWNlaXZlIGFueQ0KPiA+Pj4+Pj4g cGFja2V0cw0KPiA+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogZHVyaW5nIHRoaXMgcGVyaW9k Lg0KPiA+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICogQG5vdGUgQmVmb3JlIHRoZSBQTUQgcmVw b3J0cyB0aGUgcmVjb3ZlcnkgcmVzdWx0LA0KPiA+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICog dGhlIFBNRCBtYXkgcmVwb3J0IHRoZSBSVEVfRVRIX0VWRU5UX0VSUl9SRUNPVkVSSU5HDQo+ID4+ Pj4+PiBldmVudCBhZ2FpbiwNCj4gPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAqIGJlY2F1c2Ug YSBsYXJnZXIgZXJyb3IgbWF5IG9jY3VyIGR1cmluZyB0aGUgcmVjb3ZlcnkuDQo+ID4+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgUlRFX0VUSF9F VkVOVF9FUlJfUkVDT1ZFUklORywNCj4gPj4+Pj4+DQo+ID4+Pj4+Pj4+PiBJdCBwcm9iYWJseSBu ZWVkcyB0byBiZSBlaXRoZXIgZGVwcmVjYXRlZCBvciByZXdvcmtlZC4NCj4gPj4+Pj4+Pj4gTG9v a2luZyBhdCB0aGUgY29tbWl0LCBpdCBkb2VzIG5vdCBzYXkgYW55dGhpbmcgYWJvdXQgdGhlIGRh dGENCj4gPj4+Pj4+Pj4gcGxhbmUgZnVuY3Rpb25zIHdoaWNoIHByb2JhYmx5IG1lYW5zLCB0aGUg ZXJyb3IgcmVjb3ZlcnkgaXMNCj4gPj4+Pj4+PiBoYXBwZW5pbmcgd2l0aGluIHRoZSBkYXRhIHBs YW5lIHRocmVhZC4gV2hhdCBoYXBwZW5zIHRvIG90aGVyIGRhdGENCj4gPj4+Pj4+PiBwbGFuZSB0 aHJlYWRzIHRoYXQgYXJlIHBvbGxpbmcgdGhlIHNhbWUgcG9ydCBvbiB3aGljaCB0aGUgZXJyb3IN Cj4gPj4+Pj4+PiByZWNvdmVyeSBpcyBoYXBwZW5pbmc/DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBU aGUgY29tbWl0IGxvZyBzYXlzOiAidGhlIFBNRCBzZXRzIHRoZSBkYXRhIHBhdGggcG9pbnRlcnMg dG8gZHVtbXkNCj4gPj4+Pj4+PiBmdW5jdGlvbnMiLg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gU28g dGhlIGRhdGEgcGxhbmUgdGhyZWFkcyB3aWxsIHJlY2VpdmUgbm9uLXBhY2tldCBhbmQgc2VuZCB6 ZXJvDQo+ID4+Pj4+Pj4gd2l0aCBwb3J0IHdoaWNoIGluIGVycm9yIHJlY292ZXJ5Lg0KPiA+Pj4+ Pj4+DQo+ID4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+IEFsc28sIHRoZSBjb21taXQgbG9nIHNheXMgdGhh dCB3aGlsZSB0aGUgZXJyb3IgcmVjb3ZlcnkgaXMgdW5kZXINCj4gPj4+Pj4+Pj4gcHJvZ3Jlc3Ms IHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGNhbGwgYW55IGNvbnRyb2wgcGxhbmUgQVBJcy4N Cj4gPj4+Pj4+Pj4gRG9lcw0KPiA+Pj4+Pj4+IHRoYXQgbWVhbiwgdGhlIGFwcGxpY2F0aW9uIGhh cyB0byBjaGVjayBmb3IgZXJyb3IgY29uZGl0aW9uIGV2ZXJ5DQo+ID4+Pj4+Pj4gdGltZSBpdCBj YWxscyBhIGNvbnRyb2wgcGxhbmUgQVBJPw0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gSWYgYXBwbGlj YXRpb24gaGFzIG5vdCByZWdpc3RlciBldmVudA0KPiA+Pj4+Pj4+IChSVEVfRVRIX0VWRU5UX0VS Ul9SRUNPVkVSSU5HKSBjYWxsYmFjaywgaXQgY291bGQgY2FsbHMgY29udHJvbA0KPiA+Pj4+Pj4+ IHBsYW5lIEFQSSwgYnV0IGl0IHdpbGwgcmV0dXJuIGZhaWxlZC4NCj4gPj4+Pj4+PiBJZiBhcHBs aWNhdGlvbiBoYXMgcmVnaXN0ZXIgYWJvdmUgY2FsbGJhY2ssIGl0IGNhbiB3YWl0IGZvcg0KPiA+ Pj4+Pj4+IHJlY292ZXJ5IHJlc3VsdCwgb3IgZGlyZWN0IGNhbGwgd2l0aG91dCB3YWl0IGJ1dCB0 aGlzIHdpbGwgcmV0dXJuIGZhaWxlZC4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+ PiBUaGUgY29tbWl0IG1lc3NhZ2UgYWxzbyBzYXlzIHRoYXQgIlBNRCBtYWtlcyBzdXJlIHRoZSBj b250cm9sIHBhdGgNCj4gPj4+Pj4+Pj4gb3BlcmF0aW9ucyBmYWlsZWQgd2l0aCByZXRjb2RlIC1F QlVTWSIuIEl0IGRvZXMgbm90IHNheSBob3cgaXQNCj4gPj4+Pj4+PiBkb2VzIHRoaXMuIEJ1dCwg YW55IGNvbW11bmljYXRpb24gZnJvbSB0aGUgUE1EIHRocmVhZCB0byBjb250cm9sDQo+ID4+Pj4+ Pj4gcGxhbmUgdGhyZWFkIG1heSBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zIGlmIG5vdCBkb25l IGNvcnJlY3RseS4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IEZpcnN0IHRoZXJlIGFyZSBubyBQTUQg dGhyZWFkLCBkbyB5b3UgbWVhbiBlYWwtaW50ci10aHJlYWQgPw0KPiA+Pj4+Pj4+DQo+ID4+Pj4+ Pj4gQXMgZm9yIHRoaXMgcXVlc3Rpb24sIHlvdSBjYW4gc2VlIFBNRHMgd2hpY2ggYWxyZWFkeSBp bXBsZW1lbnQgaXQsDQo+ID4+Pj4+Pj4gdGhleSBib3RoIHByb3ZpZGVzIG11dHVhbCBleGNsdXNp b24gcHJvdGVjdGlvbi4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4NCj4gPj4+ Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+PiBXb3VsZCBzb21ldGhpbmcgbGlr ZSB0aGlzIHdvcmsgYmV0dGVyPw0KPiA+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+PiBOb3RlOiB0 aGVyZSBpcyBhbm90aGVyIGJ1ZyBpbiBjdXJyZW50IGNvZGUuIFRoZSBjaGVjayBmb3IgbGluaw0K PiA+Pj4+Pj4+Pj4+PiBzdGF0ZSBpbnRlcnJ1cHQgYW5kIGxpbmtfb3BzIGNvdWxkIHJldHVybiAt RU5PVFNVUCBhbmQgbGVhdmUNCj4gPj4+Pj4+Pj4+Pj4gZGV2aWNlIGluDQo+ID4+Pj4+Pj4+PiBp bmRldGVybWluYXRlIHN0YXRlLg0KPiA+Pj4+Pj4+Pj4+PiBUaGUgY2hlY2sgc2hvdWxkIGJlIGRv bmUgYmVmb3JlIGNhbGxpbmcgUE1ELg0KPiA+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+PiBkaWZm IC0tZ2l0IGEvbGliL2V0aGRldi9ydGVfZXRoZGV2LmMgYi9saWIvZXRoZGV2L3J0ZV9ldGhkZXYu Yw0KPiA+Pj4+Pj4+Pj4+PiBpbmRleA0KPiA+Pj4+Pj4+Pj4+PiAwMjY2Y2M4MmFjYjYuLmQ2YzE2 M2VkODVlNyAxMDA2NDQNCj4gPj4+Pj4+Pj4+Pj4gLS0tIGEvbGliL2V0aGRldi9ydGVfZXRoZGV2 LmMNCj4gPj4+Pj4+Pj4+Pj4gKysrIGIvbGliL2V0aGRldi9ydGVfZXRoZGV2LmMNCj4gPj4+Pj4+ Pj4+Pj4gQEAgLTE1ODIsNiArMTU4MiwxNCBAQCBydGVfZXRoX2Rldl9zdGFydCh1aW50MTZfdCBw b3J0X2lkKQ0KPiA+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+ID4+ Pj4+Pj4+Pj4+IMKgwqDCoMKgwqAgfQ0KPiA+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+PiArwqDC oMKgIGlmIChkZXYtPmRhdGEtPmRldl9jb25mLmludHJfY29uZi5sc2MgPT0gMCAmJg0KPiA+Pj4+ Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2LT5kZXZfb3BzLT5saW5rX3VwZGF0ZSA9PSBOVUxM KSB7DQo+ID4+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBSVEVfRVRIREVWX0xPRyhJTkZPLA0K PiA+Pj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJEZXZp Y2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2IiBsaW5rIHVwZGF0ZQ0KPiA+Pj4+Pj4+Pj4+PiArbm90 DQo+ID4+Pj4+Pj4+PiBzdXBwb3J0ZWRcbiIsDQo+ID4+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9ydF9pZCk7DQo+ID4+Pj4+Pj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PVFNVUDsNCj4gPj4+Pj4+Pj4+Pj4gK8KgwqDCoCB9 DQo+ID4+Pj4+Pj4+Pj4+ICsNCj4gPj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCByZXQgPSBydGVfZXRo X2Rldl9pbmZvX2dldChwb3J0X2lkLCAmZGV2X2luZm8pOw0KPiA+Pj4+Pj4+Pj4+PiDCoMKgwqDC oMKgIGlmIChyZXQgIT0gMCkNCj4gPj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7DQo+ID4+Pj4+Pj4+Pj4+IEBAIC0xNTkxLDkgKzE1OTksNyBAQCBydGVfZXRoX2Rldl9z dGFydCh1aW50MTZfdCBwb3J0X2lkKQ0KPiA+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg ZXRoX2Rldl9tYWNfcmVzdG9yZShkZXYsICZkZXZfaW5mbyk7DQo+ID4+Pj4+Pj4+Pj4+DQo+ID4+ Pj4+Pj4+Pj4+IMKgwqDCoMKgwqAgZGlhZyA9ICgqZGV2LT5kZXZfb3BzLT5kZXZfc3RhcnQpKGRl dik7DQo+ID4+Pj4+Pj4+Pj4+IC3CoMKgwqAgaWYgKGRpYWcgPT0gMCkNCj4gPj4+Pj4+Pj4+Pj4g LcKgwqDCoMKgwqDCoMKgIGRldi0+ZGF0YS0+ZGV2X3N0YXJ0ZWQgPSAxOw0KPiA+Pj4+Pj4+Pj4+ PiAtwqDCoMKgIGVsc2UNCj4gPj4+Pj4+Pj4+Pj4gK8KgwqDCoCBpZiAoZGlhZyAhPSAwKQ0KPiA+ Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGV0aF9lcnIocG9ydF9pZCwgZGlh Zyk7DQo+ID4+Pj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqAgcmV0ID0gZXRoX2Rl dl9jb25maWdfcmVzdG9yZShkZXYsICZkZXZfaW5mbywgcG9ydF9pZCk7IEBADQo+ID4+Pj4+Pj4+ Pj4+IC0xNjExLDE2DQo+ID4+Pj4+Pj4+Pj4+ICsxNjE3LDE4IEBAIHJ0ZV9ldGhfZGV2X3N0YXJ0 KHVpbnQxNl90IHBvcnRfaWQpDQo+ID4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Ow0KPiA+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIH0NCj4gPj4+Pj4+Pj4+Pj4NCj4gPj4+ Pj4+Pj4+Pj4gLcKgwqDCoCBpZiAoZGV2LT5kYXRhLT5kZXZfY29uZi5pbnRyX2NvbmYubHNjID09 IDApIHsNCj4gPj4+Pj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICgqZGV2LT5kZXZfb3BzLT5s aW5rX3VwZGF0ZSA9PSBOVUxMKQ0KPiA+Pj4+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVOT1RTVVA7DQo+ID4+Pj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCAoKmRldi0+ ZGV2X29wcy0+bGlua191cGRhdGUpKGRldiwgMCk7DQo+ID4+Pj4+Pj4+Pj4+IC3CoMKgwqAgfQ0K PiA+Pj4+Pj4+Pj4+PiAtDQo+ID4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqAgLyogZXhwb3NlIHNlbGVj dGlvbiBvZiBQTUQgZmFzdC1wYXRoIGZ1bmN0aW9ucyAqLw0KPiA+Pj4+Pj4+Pj4+PiDCoMKgwqDC oMKgIGV0aF9kZXZfZnBfb3BzX3NldHVwKHJ0ZV9ldGhfZnBfb3BzICsgcG9ydF9pZCwgZGV2KTsN Cj4gPj4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+Pj4gK8KgwqDCoCAvKiBlbnN1cmUgc3RhdGUgaXMg c2V0IGJlZm9yZSBtYXJraW5nIGRldmljZSByZWFkeSAqLw0KPiA+Pj4+Pj4+Pj4+PiArwqDCoMKg IHJ0ZV9zbXBfd21iKCk7DQo+ID4+Pj4+Pj4+Pj4+ICsNCj4gPj4+Pj4+Pj4+Pj4gwqDCoMKgwqDC oCBydGVfZXRoZGV2X3RyYWNlX3N0YXJ0KHBvcnRfaWQpOw0KPiA+Pj4+Pj4+Pj4+PiArDQo+ID4+ Pj4+Pj4+Pj4+ICvCoMKgwqAgLyogVXBkYXRlIGN1cnJlbnQgbGluayBzdGF0ZSAqLw0KPiA+Pj4+ Pj4+Pj4+PiArwqDCoMKgIGlmIChkZXYtPmRhdGEtPmRldl9jb25mLmludHJfY29uZi5sc2MgPT0g MCkNCj4gPj4+Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgICgqZGV2LT5kZXZfb3BzLT5saW5rX3Vw ZGF0ZSkoZGV2LCAwKTsNCj4gPj4+Pj4+Pj4+Pj4gKw0KPiA+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKg IHJldHVybiAwOw0KPiA+Pj4+Pj4+Pj4+PiDCoCB9DQo+ID4+Pj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+ Pj4+DQo+ID4+Pj4+Pj4+Pj4+IC4NCj4gPj4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pg0K PiA+DQoNCg==