From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <qi.z.zhang@intel.com>
Received: from mga07.intel.com (mga07.intel.com [134.134.136.100])
 by dpdk.org (Postfix) with ESMTP id 57D011B42F
 for <dev@dpdk.org>; Wed, 20 Jun 2018 06:00:06 +0200 (CEST)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga003.jf.intel.com ([10.7.209.27])
 by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 19 Jun 2018 21:00:04 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.51,245,1526367600"; d="scan'208";a="60663670"
Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203])
 by orsmga003.jf.intel.com with ESMTP; 19 Jun 2018 21:00:04 -0700
Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by
 FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS)
 id 14.3.319.2; Tue, 19 Jun 2018 21:00:03 -0700
Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.51]) by
 SHSMSX104.ccr.corp.intel.com ([169.254.5.87]) with mapi id 14.03.0319.002;
 Wed, 20 Jun 2018 12:00:01 +0800
From: "Zhang, Qi Z" <qi.z.zhang@intel.com>
To: "Burakov, Anatoly" <anatoly.burakov@intel.com>, "thomas@monjalon.net"
 <thomas@monjalon.net>
CC: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>, "dev@dpdk.org"
 <dev@dpdk.org>, "Richardson, Bruce" <bruce.richardson@intel.com>, "Yigit,
 Ferruh" <ferruh.yigit@intel.com>, "Shelton, Benjamin H"
 <benjamin.h.shelton@intel.com>, "Vangati, Narender"
 <narender.vangati@intel.com>
Thread-Topic: [PATCH 05/22] ethdev: introduce device lock
Thread-Index: AQHUBL+GBVCVeOqaBU6hufOQOUk106RoiNIg
Date: Wed, 20 Jun 2018 04:00:01 +0000
Message-ID: <039ED4275CED7440929022BC67E706115323AA7F@SHSMSX103.ccr.corp.intel.com>
References: <20180607123849.14439-1-qi.z.zhang@intel.com>
 <20180607123849.14439-6-qi.z.zhang@intel.com>
 <bab2b78c-3037-661d-2e18-84e2749f8d94@intel.com>
In-Reply-To: <bab2b78c-3037-661d-2e18-84e2749f8d94@intel.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYjEyODAzZTgtMDljMS00ODdhLWI1MWYtNTQ3MGVlNGQ1MTY5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoibGNiOFIrYnVVRnA4dENhQ3ZUWWEwYnBoVEZscVJaRG1ibjZYM3pNdWtwRmlGMk5US0xjcmNYb3RCZTF2VnoyUCJ9
x-ctpclassification: CTP_NT
dlp-product: dlpe-windows
dlp-version: 11.0.200.100
dlp-reaction: no-action
x-originating-ip: [10.239.127.40]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Subject: Re: [dpdk-dev] [PATCH 05/22] ethdev: introduce device lock
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Jun 2018 04:00:08 -0000

SGkgQW5hdG9seToNCglTb3JyeSB0byBtaXNzIHRoaXMgZW1haWwgYW5kIHJlcGx5IGxhdGUuDQoN
Cj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQnVyYWtvdiwgQW5hdG9seQ0K
PiBTZW50OiBGcmlkYXksIEp1bmUgMTUsIDIwMTggMTE6NDMgUE0NCj4gVG86IFpoYW5nLCBRaSBa
IDxxaS56LnpoYW5nQGludGVsLmNvbT47IHRob21hc0Btb25qYWxvbi5uZXQNCj4gQ2M6IEFuYW55
ZXYsIEtvbnN0YW50aW4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+OyBkZXZAZHBkay5v
cmc7DQo+IFJpY2hhcmRzb24sIEJydWNlIDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IFlp
Z2l0LCBGZXJydWgNCj4gPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+OyBTaGVsdG9uLCBCZW5qYW1p
biBIDQo+IDxiZW5qYW1pbi5oLnNoZWx0b25AaW50ZWwuY29tPjsgVmFuZ2F0aSwgTmFyZW5kZXIN
Cj4gPG5hcmVuZGVyLnZhbmdhdGlAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIDA1
LzIyXSBldGhkZXY6IGludHJvZHVjZSBkZXZpY2UgbG9jaw0KPiANCj4gT24gMDctSnVuLTE4IDE6
MzggUE0sIFFpIFpoYW5nIHdyb3RlOg0KPiA+IEludHJvZHVjZSBBUEkgcnRlX2V0aF9kZXZfbG9j
ayBhbmQgcnRlX2V0aF9kZXZfdW5sb2NrIHRvIGxldA0KPiA+IGFwcGxpY2F0aW9uIGxvY2sgb3Ig
dW5sb2NrIG9uIHNwZWNpZmljIGV0aGRldiwgYSBsb2NrZWQgZGV2aWNlIGNhbid0DQo+ID4gYmUg
ZGV0YWNoZWQsIHRoaXMgaGVscCBhcHBsaWNhaXRvbiB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgZGV2
aWNlDQo+ID4gZGV0YWNoaW5nLCBlc3BlY2lhbGx5IGluIG11bHRpLXByb2Nlc3MgZW52cmlvbm1l
bnQuDQo+ID4NCj4gPiBBc2xvIHRoZSBuZXcgQVBJIGxldCBhcHBsaWNhdGlvbiB0byByZWdpc3Rl
ciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoDQo+ID4gd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBh
IGRldmljZSBpcyBnb2luZyB0byBiZSBkZXRhY2hlZCwgdGhlIHJldHVybg0KPiA+IHZhbHVlIG9m
IHRoZSBmdW5jdGlvbiB3aWxsIGRlY2lkZSBpZiBkZXZpY2Ugd2lsbCBjb250aW51ZSBiZSBkZXRh
Y2hlZA0KPiA+IG9yIG5vdCwgdGhpcyBzdXBwb3J0IGFwcGxpY2F0aW9uIHRvIGRvIGNvbmRpdGlv
biBjaGVjayBhdCBydW50aW1lLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogUWkgWmhhbmcgPHFp
LnouemhhbmdAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiANCj4gPHNuaXA+DQo+IA0KPiA+ICsNCj4g
PiAraW50DQo+ID4gK3J0ZV9ldGhfZGV2X2xvY2sodWludDE2X3QgcG9ydF9pZCwgcnRlX2V0aF9k
ZXZfbG9ja19jYWxsYmFja190IGNhbGxiYWNrLA0KPiA+ICsJCSB2b2lkICp1c2VyX2FyZ3MpDQo+
ID4gK3sNCj4gPiArCVJURV9FVEhfVkFMSURfUE9SVElEX09SX0VSUl9SRVQocG9ydF9pZCwgLUVO
T0RFVik7DQo+ID4gKw0KPiA+ICsJaWYgKGNhbGxiYWNrID09IE5VTEwpDQo+ID4gKwkJcmV0dXJu
IHJlZ2lzdGVyX2xvY2tfY2FsbGJhY2socG9ydF9pZCwgZGV2X2lzX2J1c3ksIE5VTEwpOw0KPiA+
ICsJZWxzZQ0KPiA+ICsJCXJldHVybiByZWdpc3Rlcl9sb2NrX2NhbGxiYWNrKHBvcnRfaWQsIGNh
bGxiYWNrLCB1c2VyX2FyZ3MpOw0KPiANCj4gQXMgbXVjaCBhcyBpIGRvbid0IGxpa2Ugc2VlaW5n
IG5lZ2F0aXZlIGVycm5vIHZhbHVlcyBhcyByZXR1cm4sIHRoZSByZXN0IG9mDQo+IGV0aGRldiBs
aWJyYXJ5IHVzZXMgdGhvc2UsIHNvIHRoaXMgaXMgT0sgOikNCj4gDQo+ID4gK30NCj4gPiArDQo+
ID4gK2ludA0KPiA+ICtydGVfZXRoX2Rldl91bmxvY2sodWludDE2X3QgcG9ydF9pZCwgcnRlX2V0
aF9kZXZfbG9ja19jYWxsYmFja190IGNhbGxiYWNrLA0KPiA+ICsJCSAgIHZvaWQgKnVzZXJfYXJn
cykNCj4gPiArew0KPiA+ICsJUlRFX0VUSF9WQUxJRF9QT1JUSURfT1JfRVJSX1JFVChwb3J0X2lk
LCAtRU5PREVWKTsNCj4gPiArDQo+IA0KPiA8c25pcD4NCj4gDQo+ID4gKyAqIEFsc28sIGFueSBj
YWxsYmFjayBmdW5jdGlvbiByZXR1cm4gITAgdmFsdWUgd2lsbCBwcmV2ZW50IGRldmljZSBiZQ0K
PiA+ICsgKiBkZXRhY2hlZChyZWYuIHJ0ZV9ldGhfZGV2X2xvY2sgYW5kIHJ0ZV9ldGhfZGV2X3Vu
bG9jaykuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBwb3J0X2lkDQo+ID4gKyAqICAgVGhlIHBv
cnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW0gdXNl
cl9hcmdzDQo+ID4gKyAqICAgVGhpcyBpcyBwYXJhbWV0ZXIgInVzZXJfYXJncyIgYmUgc2F2ZWQg
d2hlbiBjYWxsYmFjayBmdW5jdGlvbiBpcw0KPiA+ICsgKiAgIHJlZ2lzdGVyZWQocnRlX2Rldl9l
dGhfbG9jaykuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAwICBkZXZpY2Ug
aXMgYWxsb3dlZCBiZSBkZXRhY2hlZC4NCj4gPiArICogICAhMCBkZXZpY2UgaXMgbm90IGFsbG93
ZWQgYmUgZGV0YWNoZWQuDQo+IA0KPiAhMCBjYW4gYmUgbmVnYXRpdmUgb3IgcG9zaXRpdmUuIEFy
ZSB3ZSBleHBlY3RpbmcgcG9zaXRpdmUgcmV0dXJuIHZhbHVlcyBmcm9tDQo+IHRoaXMgQVBJPw0K
DQpJIGhhdmUgbm8gc3Ryb25nIG9waW5pb24sIGJ1dCBpZiB5b3UgdGhpbmsgYmVsb3cgb3Igb3Ro
ZXIgb3B0aW9uIGlzIGJldHRlciwgSSBjYW4gY2hhbmdlDQoNCj49MCAgZGV2aWNlIGlzIGFsbG93
ZWQgYmUgZGV0YWNoZWQuDQo8MCBkZXZpY2UgaXMgbm90IGFsbG93ZWQgYmUgZGV0YWNoZWQuDQoN
Cj4gDQo+ID4gKyAqLw0KPiA+ICt0eXBlZGVmIGludCAoKnJ0ZV9ldGhfZGV2X2xvY2tfY2FsbGJh
Y2tfdCkodWludDE2X3QgcG9ydF9pZCwgdm9pZA0KPiA+ICsqdXNlcl9hcmdzKTsNCj4gPiArDQo+
ID4gKy8qKg0KPiA+ICsgKiBMb2NrIGFuIEV0aGVybmV0IERldmljZSBkaXJlY3RseSBvciByZWdp
c3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uDQo+ID4gKyAqIGZvciBjb25kaXRpb24gY2hlY2sgYXQg
cnVudGltZSwgdGhpcyBoZWxwIGFwcGxpY2F0aW9uIHRvIHByZXZlbnQNCj4gPiArICogYSBkZXZp
Y2UgYmUgZGV0YWNoZWQgdW5leHBlY3RlZGx5IA0KPiA+ICsgKiBOT1RFOiBMb2NrIGEgZGV2aWNl
IG11bHRpcGxlIHRpbWVzIHdpdGggc2FtZSBwYXJtZXRlciB3aWxsDQo+ID4gK2luY3JlYXNlDQo+
ID4gKyAqIGEgcmVmX2NvdW50LCBhbmQgY29ycmVzcG9uZGluZyB1bmxvY2sgZGVjcmVhc2UgdGhl
IHJlZl9jb3VudCwgdGhlDQo+ID4gKyAqIGRldmljZSB3aWxsIGJlIHVubG9ja2VkIHdoZW4gcmVm
X2NvdW50IHJlYWNoIDAuDQo+IA0KPiBOaXRwaWNrOiAibm90ZSIgc2VjdGlvbnMgc2hvdWxkIGJl
IGRvbmUgd2l0aCBAbm90ZSBtYXJrZXIuDQo+IA0KPiBBbHNvLCBpIHdvdWxkIG1lbnRpb24gdGhh
dCB0aGlzIGlzIGEgcGVyLXByb2Nlc3MgbG9jayB0aGF0IGRvZXMgbm90IGFmZmVjdCBvdGhlcg0K
PiBwcm9jZXNzZXMgKGFzc3VtaW5nIGkgdW5kZXJzdG9vZCB0aGUgY29kZSBjb3JyZWN0bHksIG9m
IGNvdXJzZS4uLikuDQoNCk9LLCBJIHdpbGwgYWRkIG1vcmUgY29tbWVudCB0byBleHBsYWluIHRo
aXMuDQoNCj4gDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBwb3J0X2lkDQo+ID4gKyAqICAgVGhl
IHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW0g
Y2FsbGJhY2sNCj4gPiArICogICAhTlVMTCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBh
ZGRlZCBpbnRvIGEgcHJlLWRldGFjaCBsaXN0LA0KPiA+ICsgKiAgICAgICAgIGl0IHdpbGwgYmUg
aW52b2tlZCB3aGVuIGEgZGV2aWNlIGlzIGdvaW5nIHRvIGJlIGRldGFjaGVkLiBUaGUNCj4gPiAr
ICogICAgICAgICByZXR1cm4gdmFsdWUgd2lsbCBkZWNpZGUgaWYgY29udGludWUgZGV0YWNoIHRo
ZSBkZXZpY2Ugb3Igbm90Lg0KPiA+ICsgKiAgIE5VTEwgIGxvY2sgdGhlIGRldmljZSBkaXJlY3Rs
eSwgYmFzaWNhbGx5IHRoaXMganVzdCByZWdpdGVyIGEgZW1wdHkNCj4gPiArICogICAgICAgICBj
YWxsYmFjayBmdW5jdGlvbihkZXZfaXNfYnVzeSkgdGhhdCByZXR1cm4gLUVCVVNZLCBzbyB3ZSBj
YW4NCj4gPiArICogICAgICAgICBoYW5kbGUgdGhlIHByZS1kZXRhY2ggY2hlY2sgaW4gdW5pZmll
ZCB3YXkuDQo+ID4gKyAqIEBwYXJhbSB1c2VyX2FyZ3MNCj4gPiArICogICBwYXJhbWV0ZXIgd2ls
bCBiZSBwYXJzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb24sIG9ubHkgdmFsaWQgd2hlbg0KPiA+ICsg
KiAgIGNhbGxiYWNrICE9IE5VTEwuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAwIG9uIHN1
Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yLg0KPiA+ICsgKi8NCj4gPiAraW50IHJ0ZV9ldGhfZGV2
X2xvY2sodWludDE2X3QgcG9ydF9pZCwgcnRlX2V0aF9kZXZfbG9ja19jYWxsYmFja190DQo+IGNh
bGxiYWNrLA0KPiA+ICsJCSAgICAgdm9pZCAqdXNlcl9hcmdzKTsNCj4gDQo+IE5pdHBpY2tzOiBE
UERLIHN0eWxlIGd1aWRlIGRpc2NvdXJhZ2VzIHVzaW5nIHNwYWNlcyBhcyBpbmRlbnRhdGlvbiAo
b3RoZXIgcGFydHMNCj4gb2YgdGhpcyBwYXRjaCwgYW5kIG90aGVyIHBhdGNoZXMgaGF2ZSB0aGlz
IGlzc3VlIGFzIHdlbGwpLg0KDQpPSywgd2lsbCBmaXggYWxsLg0KPiANCj4gPiArDQo+ID4gKy8q
Kg0KPiA+ICsgKiBSZXZlcnNlIG9wZXJhdGlvbiBvZiBydGVfZXRoX2Rldl9sb2NrLg0KPiA+ICsg
Kg0KPiA+ICsgKiBAcGFyYW0gcG9ydF9pZA0KPiA+ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIg
b2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtIGNhbGxiYWNrDQo+ID4gKyAq
ICAgTlVMTCAgZGVjcmVhc2UgdGhlIHJlZl9jb3VudCBvZiBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0
aW9uLg0KPiA+ICsgKiAgICFOVUxMIGRlY3JlYXNlIHRoZSByZWZfY291bnQgb2Ygc3BlY2lmaWMg
Y2FsbGJhY2sgd2l0aCBtYXRjaGVkDQo+ID4gKyAqICAgICAgICAgdXNlcl9hcmdzLg0KPiA+ICsg
KiBAcGFyYW0gdXNlcl9hcmdzDQo+ID4gKyAqICAgcGFyYW1ldGVyIHRvIG1hdGNoLCBvbmx5IHZh
bGlkIHdoZW4gY2FsbGJhY2sgIT0gTlVMTC4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIDAg
b24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtpbnQgcnRlX2V0
aF9kZXZfdW5sb2NrKHVpbnQxNl90IHBvcnRfaWQsIHJ0ZV9ldGhfZGV2X2xvY2tfY2FsbGJhY2tf
dA0KPiBjYWxsYmFjaywNCj4gPiArCQkgICAgICAgdm9pZCAqdXNlcl9hcmdzKTsNCj4gPiArDQo+
ID4gICAjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiAgIH0NCj4gPiAgICNlbmRpZg0KPiA+IGRpZmYg
LS1naXQgYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZXRoZGV2X2xvY2suYw0KPiA+IGIvbGliL2xp
YnJ0ZV9ldGhkZXYvcnRlX2V0aGRldl9sb2NrLmMNCj4gDQo+IHJ0ZV9ldGhkZXZfbG9jay4qIHNl
ZW0gdG8gYmUgaW50ZXJuYWwtb25seSBmaWxlcy4gUGVyaGFwcyB5b3Ugc2hvdWxkIG5hbWUNCj4g
dGhlbSB3aXRob3V0IHRoZSBydGVfIHByZWZpeCB0byBpbmRpY2F0ZSB0aGF0IHRoZXkncmUgbm90
IGV4cG9ydGVkPw0KPiANCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw
MDAwMC4uNjg4ZDFkNzBhDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2xpYi9saWJydGVf
ZXRoZGV2L3J0ZV9ldGhkZXZfbG9jay5jDQo+ID4gQEAgLTAsMCArMSwxMDIgQEANCj4gPiArLyog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ICsgKiBDb3B5cmlnaHQo
YykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbiAgKi8gI2luY2x1ZGUNCj4gPiArInJ0ZV9ldGhkZXZf
bG9jay5oIg0KPiA+ICsNCj4gPiArc3RydWN0IGxvY2tfZW50cnkgew0KPiA+ICsJVEFJTFFfRU5U
UlkobG9ja19lbnRyeSkgbmV4dDsNCj4gPiArCXJ0ZV9ldGhfZGV2X2xvY2tfY2FsbGJhY2tfdCBj
YWxsYmFjazsNCj4gPiArCXVpbnQxNl90IHBvcnRfaWQ7DQo+IA0KPiA8c25pcD4NCj4gDQo+ID4g
K3JlZ2lzdGVyX2xvY2tfY2FsbGJhY2sodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkgICAgICAg
cnRlX2V0aF9kZXZfbG9ja19jYWxsYmFja190IGNhbGxiYWNrLA0KPiA+ICsJCSAgICAgICB2b2lk
ICp1c2VyX2FyZ3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBsb2NrX2VudHJ5ICpsZTsNCj4gPiAr
DQo+ID4gKwlydGVfc3BpbmxvY2tfbG9jaygmbG9ja19lbnRyeV9sb2NrKTsNCj4gPiArDQo+ID4g
KwlUQUlMUV9GT1JFQUNIKGxlLCAmbG9ja19lbnRyeV9saXN0LCBuZXh0KSB7DQo+ID4gKwkJaWYg
KGxlLT5wb3J0X2lkID09IHBvcnRfaWQgJiYNCj4gPiArCQkgICAgbGUtPmNhbGxiYWNrID09IGNh
bGxiYWNrICYmDQo+ID4gKwkJICAgIGxlLT51c2VyX2FyZ3MgPT0gdXNlcl9hcmdzKQ0KPiA+ICsJ
CQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoIWxlKSB7DQo+ID4gKwkJbGUgPSBj
YWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2VudHJ5KSk7DQo+ID4gKwkJaWYgKCFsZSkgew0K
PiANCj4gTml0cGljazogZ2VuZXJhbGx5LCBEUERLIHN0eWxlIGd1aWRlIHByZWZlcnMgImlmICh2
YWx1ZSkiIG9yICJpZiAoIXZhbHVlKSIgdG8gb25seQ0KPiBiZSByZXNlcnZlZCBmb3IgYm9vbGVh
biB2YWx1ZXMsIGFuZCB1c2UgZXhwbGljaXQgY29tcGFyaXNvbiAoZS5nLiAiaWYgKHZhbHVlID09
DQo+IE5VTEwpIiBvciAiaWYgKHZhbHVlID09IDApIikgZm9yIGFsbCBvdGhlciBjYXNlcy4NCg0K
T0ssIHdpbGwgZml4DQo+IA0KPiAtLQ0KPiBUaGFua3MsDQo+IEFuYXRvbHkNCg==