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 7AE9A431FB; Wed, 25 Oct 2023 12:06:27 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4A0CE402E8; Wed, 25 Oct 2023 12:06:27 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 13788402C5 for ; Wed, 25 Oct 2023 12:06:25 +0200 (CEST) Received: from frapeml500007.china.huawei.com (unknown [172.18.147.206]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4SFkyz72vKz6K626; Wed, 25 Oct 2023 18:03:39 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml500007.china.huawei.com (7.182.85.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Wed, 25 Oct 2023 12:06:24 +0200 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.031; Wed, 25 Oct 2023 12:06:23 +0200 From: Konstantin Ananyev To: Tyler Retzlaff , Konstantin Ananyev CC: "dev@dpdk.org" , Akhil Goyal , "Anatoly Burakov" , Andrew Rybchenko , Bruce Richardson , Chenbo Xia , Ciara Power , David Christensen , "David Hunt" , Dmitry Kozlyuk , Dmitry Malloy , Elena Agostini , Erik Gabriel Carrillo , Fan Zhang , Ferruh Yigit , Harman Kalra , Harry van Haaren , "Honnappa Nagarahalli" , Jerin Jacob , Matan Azrad , Maxime Coquelin , Narcisa Ana Maria Vasile , Nicolas Chautru , Olivier Matz , Ori Kam , Pallavi Kadam , Pavan Nikhilesh , Reshma Pattan , "Sameh Gobriel" , Shijith Thotton , Sivaprasad Tummala , Stephen Hemminger , Suanming Mou , "Sunil Kumar Kori" , Thomas Monjalon , Viacheslav Ovsiienko , Vladimir Medvedkin , Yipeng Wang Subject: RE: [PATCH v2 19/19] ring: use rte optional stdatomic API Thread-Topic: [PATCH v2 19/19] ring: use rte optional stdatomic API Thread-Index: AQHaATk4XZbCOnuRa0KWB7uj0Fg0/rBYiEWAgACCKQCAAUTUwA== Date: Wed, 25 Oct 2023 10:06:23 +0000 Message-ID: References: <1697497745-20664-1-git-send-email-roretzla@linux.microsoft.com> <1697574677-16578-1-git-send-email-roretzla@linux.microsoft.com> <1697574677-16578-20-git-send-email-roretzla@linux.microsoft.com> <516905e7-20eb-495b-bd66-9598fd9f27a2@yandex.ru> <20231024162904.GB32052@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> In-Reply-To: <20231024162904.GB32052@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.48.145.72] 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 DQoNCj4gDQo+IE9uIFR1ZSwgT2N0IDI0LCAyMDIzIGF0IDA5OjQzOjEzQU0gKzAxMDAsIEtvbnN0 YW50aW4gQW5hbnlldiB3cm90ZToNCj4gPiAxNy4xMC4yMDIzIDIxOjMxLCBUeWxlciBSZXR6bGFm ZiDQv9C40YjQtdGCOg0KPiA+ID5SZXBsYWNlIHRoZSB1c2Ugb2YgZ2NjIGJ1aWx0aW4gX19hdG9t aWNfeHh4IGludHJpbnNpY3Mgd2l0aA0KPiA+ID5jb3JyZXNwb25kaW5nIHJ0ZV9hdG9taWNfeHh4 IG9wdGlvbmFsIHN0ZGF0b21pYyBBUEkNCj4gPiA+DQo+ID4gPlNpZ25lZC1vZmYtYnk6IFR5bGVy IFJldHpsYWZmIDxyb3JldHpsYUBsaW51eC5taWNyb3NvZnQuY29tPg0KPiA+ID4tLS0NCj4gPiA+ ICBkcml2ZXJzL25ldC9tbHg1L21seDVfaHdzX2NudC5oICAgfCAgMiArLQ0KPiA+ID4gIGxpYi9y aW5nL3J0ZV9yaW5nX2MxMV9wdnQuaCAgICAgICB8IDMzICsrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLQ0KPiA+ID4gIGxpYi9yaW5nL3J0ZV9yaW5nX2NvcmUuaCAgICAgICAgICB8IDEw ICsrKysrLS0tLS0NCj4gPiA+ICBsaWIvcmluZy9ydGVfcmluZ19nZW5lcmljX3B2dC5oICAgfCAg MyArKy0NCj4gPiA+ICBsaWIvcmluZy9ydGVfcmluZ19odHNfZWxlbV9wdnQuaCAgfCAyMiArKysr KysrKysrKystLS0tLS0tLS0tDQo+ID4gPiAgbGliL3JpbmcvcnRlX3JpbmdfcGVla19lbGVtX3B2 dC5oIHwgIDYgKysrLS0tDQo+ID4gPiAgbGliL3JpbmcvcnRlX3JpbmdfcnRzX2VsZW1fcHZ0Lmgg IHwgMjcgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tDQo+ID4gPiAgNyBmaWxlcyBjaGFuZ2Vk LCA1NCBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkNCj4gPiA+DQo+ID4gPmRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC9tbHg1L21seDVfaHdzX2NudC5oIGIvZHJpdmVycy9uZXQvbWx4NS9t bHg1X2h3c19jbnQuaA0KPiA+ID5pbmRleCBmNDYyNjY1Li5jYzlhYzEwIDEwMDY0NA0KPiA+ID4t LS0gYS9kcml2ZXJzL25ldC9tbHg1L21seDVfaHdzX2NudC5oDQo+ID4gPisrKyBiL2RyaXZlcnMv bmV0L21seDUvbWx4NV9od3NfY250LmgNCj4gPiA+QEAgLTM5NCw3ICszOTQsNyBAQCBzdHJ1Y3Qg bWx4NV9od3NfYWdlX3BhcmFtIHsNCj4gPiA+ICAJX19ydGVfcmluZ19nZXRfZWxlbV9hZGRyKHIs IHJldmVydDJoZWFkLCBzaXplb2YoY250X2lkX3QpLCBuLA0KPiA+ID4gIAkJCSZ6Y2QtPnB0cjEs ICZ6Y2QtPm4xLCAmemNkLT5wdHIyKTsNCj4gPiA+ICAJLyogVXBkYXRlIHRhaWwgKi8NCj4gPiA+ LQlfX2F0b21pY19zdG9yZV9uKCZyLT5wcm9kLnRhaWwsIHJldmVydDJoZWFkLCBfX0FUT01JQ19S RUxFQVNFKTsNCj4gPiA+KwlydGVfYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZyLT5wcm9kLnRhaWws IHJldmVydDJoZWFkLCBydGVfbWVtb3J5X29yZGVyX3JlbGVhc2UpOw0KPiA+ID4gIAlyZXR1cm4g bjsNCj4gPiA+ICB9DQo+ID4gPmRpZmYgLS1naXQgYS9saWIvcmluZy9ydGVfcmluZ19jMTFfcHZ0 LmggYi9saWIvcmluZy9ydGVfcmluZ19jMTFfcHZ0LmgNCj4gPiA+aW5kZXggZjg5NTk1MC4uZjhi ZTUzOCAxMDA2NDQNCj4gPiA+LS0tIGEvbGliL3JpbmcvcnRlX3JpbmdfYzExX3B2dC5oDQo+ID4g PisrKyBiL2xpYi9yaW5nL3J0ZV9yaW5nX2MxMV9wdnQuaA0KPiA+ID5AQCAtMjIsOSArMjIsMTAg QEANCj4gPiA+ICAJICogd2UgbmVlZCB0byB3YWl0IGZvciB0aGVtIHRvIGNvbXBsZXRlDQo+ID4g PiAgCSAqLw0KPiA+ID4gIAlpZiAoIXNpbmdsZSkNCj4gPiA+LQkJcnRlX3dhaXRfdW50aWxfZXF1 YWxfMzIoJmh0LT50YWlsLCBvbGRfdmFsLCBfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiA+KwkJcnRl X3dhaXRfdW50aWxfZXF1YWxfMzIoKHZvbGF0aWxlIHVpbnQzMl90ICopKHVpbnRwdHJfdCkmaHQt PnRhaWwsIG9sZF92YWwsDQo+ID4gPisJCQlydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpOw0KPiA+ ID4tCV9fYXRvbWljX3N0b3JlX24oJmh0LT50YWlsLCBuZXdfdmFsLCBfX0FUT01JQ19SRUxFQVNF KTsNCj4gPiA+KwlydGVfYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZodC0+dGFpbCwgbmV3X3ZhbCwg cnRlX21lbW9yeV9vcmRlcl9yZWxlYXNlKTsNCj4gPiA+ICB9DQo+ID4gPiAgLyoqDQo+ID4gPkBA IC02MSwxOSArNjIsMTkgQEANCj4gPiA+ICAJdW5zaWduZWQgaW50IG1heCA9IG47DQo+ID4gPiAg CWludCBzdWNjZXNzOw0KPiA+ID4tCSpvbGRfaGVhZCA9IF9fYXRvbWljX2xvYWRfbigmci0+cHJv ZC5oZWFkLCBfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiA+Kwkqb2xkX2hlYWQgPSBydGVfYXRvbWlj X2xvYWRfZXhwbGljaXQoJnItPnByb2QuaGVhZCwgcnRlX21lbW9yeV9vcmRlcl9yZWxheGVkKTsN Cj4gPiA+ICAJZG8gew0KPiA+ID4gIAkJLyogUmVzZXQgbiB0byB0aGUgaW5pdGlhbCBidXJzdCBj b3VudCAqLw0KPiA+ID4gIAkJbiA9IG1heDsNCj4gPiA+ICAJCS8qIEVuc3VyZSB0aGUgaGVhZCBp cyByZWFkIGJlZm9yZSB0YWlsICovDQo+ID4gPi0JCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FU T01JQ19BQ1FVSVJFKTsNCj4gPiA+KwkJX19hdG9taWNfdGhyZWFkX2ZlbmNlKHJ0ZV9tZW1vcnlf b3JkZXJfYWNxdWlyZSk7DQo+ID4gPiAgCQkvKiBsb2FkLWFjcXVpcmUgc3luY2hyb25pemUgd2l0 aCBzdG9yZS1yZWxlYXNlIG9mIGh0LT50YWlsDQo+ID4gPiAgCQkgKiBpbiB1cGRhdGVfdGFpbC4N Cj4gPiA+ICAJCSAqLw0KPiA+ID4tCQljb25zX3RhaWwgPSBfX2F0b21pY19sb2FkX24oJnItPmNv bnMudGFpbCwNCj4gPiA+LQkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4gPisJCWNvbnNfdGFp bCA9IHJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmci0+Y29ucy50YWlsLA0KPiA+ID4rCQkJCQly dGVfbWVtb3J5X29yZGVyX2FjcXVpcmUpOw0KPiA+ID4gIAkJLyogVGhlIHN1YnRyYWN0aW9uIGlz IGRvbmUgYmV0d2VlbiB0d28gdW5zaWduZWQgMzJiaXRzIHZhbHVlDQo+ID4gPiAgCQkgKiAodGhl IHJlc3VsdCBpcyBhbHdheXMgbW9kdWxvIDMyIGJpdHMgZXZlbiBpZiB3ZSBoYXZlDQo+ID4gPkBA IC05NSwxMCArOTYsMTAgQEANCj4gPiA+ICAJCQlyLT5wcm9kLmhlYWQgPSAqbmV3X2hlYWQsIHN1 Y2Nlc3MgPSAxOw0KPiA+ID4gIAkJZWxzZQ0KPiA+ID4gIAkJCS8qIG9uIGZhaWx1cmUsICpvbGRf aGVhZCBpcyB1cGRhdGVkICovDQo+ID4gPi0JCQlzdWNjZXNzID0gX19hdG9taWNfY29tcGFyZV9l eGNoYW5nZV9uKCZyLT5wcm9kLmhlYWQsDQo+ID4gPisJCQlzdWNjZXNzID0gcnRlX2F0b21pY19j b21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgmci0+cHJvZC5oZWFkLA0KPiA+ID4gIAkJ CQkJb2xkX2hlYWQsICpuZXdfaGVhZCwNCj4gPiA+LQkJCQkJMCwgX19BVE9NSUNfUkVMQVhFRCwN Cj4gPiA+LQkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gPisJCQkJCXJ0ZV9tZW1vcnlfb3Jk ZXJfcmVsYXhlZCwNCj4gPiA+KwkJCQkJcnRlX21lbW9yeV9vcmRlcl9yZWxheGVkKTsNCj4gPiA+ ICAJfSB3aGlsZSAodW5saWtlbHkoc3VjY2VzcyA9PSAwKSk7DQo+ID4gPiAgCXJldHVybiBuOw0K PiA+ID4gIH0NCj4gPiA+QEAgLTEzNywxOSArMTM4LDE5IEBADQo+ID4gPiAgCWludCBzdWNjZXNz Ow0KPiA+ID4gIAkvKiBtb3ZlIGNvbnMuaGVhZCBhdG9taWNhbGx5ICovDQo+ID4gPi0JKm9sZF9o ZWFkID0gX19hdG9taWNfbG9hZF9uKCZyLT5jb25zLmhlYWQsIF9fQVRPTUlDX1JFTEFYRUQpOw0K PiA+ID4rCSpvbGRfaGVhZCA9IHJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmci0+Y29ucy5oZWFk LCBydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpOw0KPiA+ID4gIAlkbyB7DQo+ID4gPiAgCQkvKiBS ZXN0b3JlIG4gYXMgaXQgbWF5IGNoYW5nZSBldmVyeSBsb29wICovDQo+ID4gPiAgCQluID0gbWF4 Ow0KPiA+ID4gIAkJLyogRW5zdXJlIHRoZSBoZWFkIGlzIHJlYWQgYmVmb3JlIHRhaWwgKi8NCj4g PiA+LQkJX19hdG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4rCQlf X2F0b21pY190aHJlYWRfZmVuY2UocnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlKTsNCj4gPiA+ICAJ CS8qIHRoaXMgbG9hZC1hY3F1aXJlIHN5bmNocm9uaXplIHdpdGggc3RvcmUtcmVsZWFzZSBvZiBo dC0+dGFpbA0KPiA+ID4gIAkJICogaW4gdXBkYXRlX3RhaWwuDQo+ID4gPiAgCQkgKi8NCj4gPiA+ LQkJcHJvZF90YWlsID0gX19hdG9taWNfbG9hZF9uKCZyLT5wcm9kLnRhaWwsDQo+ID4gPi0JCQkJ CV9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4rCQlwcm9kX3RhaWwgPSBydGVfYXRvbWljX2xvYWRf ZXhwbGljaXQoJnItPnByb2QudGFpbCwNCj4gPiA+KwkJCQkJcnRlX21lbW9yeV9vcmRlcl9hY3F1 aXJlKTsNCj4gPiA+ICAJCS8qIFRoZSBzdWJ0cmFjdGlvbiBpcyBkb25lIGJldHdlZW4gdHdvIHVu c2lnbmVkIDMyYml0cyB2YWx1ZQ0KPiA+ID4gIAkJICogKHRoZSByZXN1bHQgaXMgYWx3YXlzIG1v ZHVsbyAzMiBiaXRzIGV2ZW4gaWYgd2UgaGF2ZQ0KPiA+ID5AQCAtMTcwLDEwICsxNzEsMTAgQEAN Cj4gPiA+ICAJCQlyLT5jb25zLmhlYWQgPSAqbmV3X2hlYWQsIHN1Y2Nlc3MgPSAxOw0KPiA+ID4g IAkJZWxzZQ0KPiA+ID4gIAkJCS8qIG9uIGZhaWx1cmUsICpvbGRfaGVhZCB3aWxsIGJlIHVwZGF0 ZWQgKi8NCj4gPiA+LQkJCXN1Y2Nlc3MgPSBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJnIt PmNvbnMuaGVhZCwNCj4gPiA+KwkJCXN1Y2Nlc3MgPSBydGVfYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2Vfc3Ryb25nX2V4cGxpY2l0KCZyLT5jb25zLmhlYWQsDQo+ID4gPiAgCQkJCQkJCW9sZF9oZWFk LCAqbmV3X2hlYWQsDQo+ID4gPi0JCQkJCQkJMCwgX19BVE9NSUNfUkVMQVhFRCwNCj4gPiA+LQkJ CQkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiA+KwkJCQkJCQlydGVfbWVtb3J5X29yZGVyX3Jl bGF4ZWQsDQo+ID4gPisJCQkJCQkJcnRlX21lbW9yeV9vcmRlcl9yZWxheGVkKTsNCj4gPiA+ICAJ fSB3aGlsZSAodW5saWtlbHkoc3VjY2VzcyA9PSAwKSk7DQo+ID4gPiAgCXJldHVybiBuOw0KPiA+ ID4gIH0NCj4gPiA+ZGlmZiAtLWdpdCBhL2xpYi9yaW5nL3J0ZV9yaW5nX2NvcmUuaCBiL2xpYi9y aW5nL3J0ZV9yaW5nX2NvcmUuaA0KPiA+ID5pbmRleCAzMjdmZGNmLi43YTJiNTc3IDEwMDY0NA0K PiA+ID4tLS0gYS9saWIvcmluZy9ydGVfcmluZ19jb3JlLmgNCj4gPiA+KysrIGIvbGliL3Jpbmcv cnRlX3JpbmdfY29yZS5oDQo+ID4gPkBAIC02Nyw3ICs2Nyw3IEBAIGVudW0gcnRlX3Jpbmdfc3lu Y190eXBlIHsNCj4gPiA+ICAgKi8NCj4gPiA+ICBzdHJ1Y3QgcnRlX3JpbmdfaGVhZHRhaWwgew0K PiA+ID4gIAl2b2xhdGlsZSB1aW50MzJfdCBoZWFkOyAgICAgIC8qKjwgcHJvZC9jb25zdW1lciBo ZWFkLiAqLw0KPiA+ID4tCXZvbGF0aWxlIHVpbnQzMl90IHRhaWw7ICAgICAgLyoqPCBwcm9kL2Nv bnN1bWVyIHRhaWwuICovDQo+ID4gPisJdm9sYXRpbGUgUlRFX0FUT01JQyh1aW50MzJfdCkgdGFp bDsgICAgICAvKio8IHByb2QvY29uc3VtZXIgdGFpbC4gKi8NCj4gPg0KPiA+IFByb2JhYmx5IGEg c3R1cGlkIHE6DQo+ID4gd2h5IHdlIGRvIG5lZWQgUlRFX0FUT01JQygpIGFyb3VuZCB0YWlsIG9u bHk/DQo+ID4gV2h5IGhlYWQgaXMgbm90IGFmZmVjdGVkPw0KPiANCj4geW91IGhhdmUgYSBnb29k IGV5ZSBhbmQgdGhpcyBpcyBhIHNsaWdodGx5IGNvbW1vbiBpc3N1ZSB0aGF0IGkndmUgc2Vlbg0K PiBhbmQgdGhlcmUgYXBwZWFyIHRvIGJlIHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzIHNob3dpbmcg dXAuDQo+IA0KPiB0aGUgZmllbGQgYmVpbmcgcXVhbGlmaWVkIGhhcyBhdG9taWMgb3BlcmF0aW9u IHBlcmZvcm1lZCBvbiBpdCB0aGUgb3RoZXINCj4gZmllbGQgZG9lcyBub3QgaW4gdGhlIGltcGxl bWVudGF0aW9uLiBpdCBtYXkgYmUgYW4gaW5kaWNhdGlvbiBvZiBhIGJ1ZyBpbg0KPiB0aGUgZXhp c3RpbmcgY29kZSBvciBpdCBtYXkgYmUgaW50ZW50aW9uYWwuDQoNCkhtbS4uLiBidXQgYXMgSSBj YW4gc2VlLCB3ZSBhcmUgZG9pbmcgc2ltaWxhciBvcGVyYXRpb25zIG9uICBib3RoIGhlYWQgYW5k IHRhaWwuDQpGb3IgaGVhZCBpdCB3b3VsZCBiZTogYXRvbWljX2xvYWQoKSwgdGhlbiBlaXRoZXIg YXRvbWljX3N0b3JlKCkgb3IgYXRvbWljX2NhcygpLg0KRm9yIHRhaWwgaXQgd291bGQgYmU6IGF0 b21pY19sb2FkKCksIHRoZW4gYXRvbWljX3N0b3JlKCkuDQpPciBpcyB0aGF0IGJlY2F1c2Ugb2Yg d2UgbWlzc2VkIGF0b21pY19zdG9yZSgmci0+cHJvZC5oZWFkLCAuLi4sIFJFTEFYRUQpIGhlcmU6 DQpzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCl9fcnRlX3JpbmdfbW92 ZV9wcm9kX2hlYWQoc3RydWN0IHJ0ZV9yaW5nICpyLCB1bnNpZ25lZCBpbnQgaXNfc3AsDQogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3Ig YmVoYXZpb3IsDQogICAgICAgICAgICAgICAgdWludDMyX3QgKm9sZF9oZWFkLCB1aW50MzJfdCAq bmV3X2hlYWQsDQogICAgICAgICAgICAgICAgdWludDMyX3QgKmZyZWVfZW50cmllcykNCnsNCi4u Li4NCmlmIChpc19zcCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHItPnByb2QuaGVhZCA9ICpu ZXdfaGVhZCwgc3VjY2VzcyA9IDE7DQoNCj8NCg0KPiANCj4gY2FzZSAxLiBhdG9taWNzIHNob3Vs ZCBiZSB1c2VkIGJ1dCB0aGV5IGFyZW4ndC4NCj4gDQo+IHRoZXJlIGFyZSBmaWVsZHMgaW4gc3Ry dWN0dXJlcyBhbmQgdmFyaWFibGVzIHRoYXQgd2VyZSBhY2Nlc3NlZCBpbiBhDQo+ICdtaXhlZCcg bWFubmVyLiB0aGF0IGlzIGluIHNvbWUgaW5zdGFuY2VzIF9fYXRvbWljX29wX3h4eCB3YXMgYmVp bmcgdXNlZA0KPiBvbiB0aGVtIGFuZCBpbiBvdGhlciBpbnN0YW5jZXMgbm90LiBzb21ldGltZXMg aXQgaXMgdGhlIGluaXRpYWxpemF0aW9uDQo+IGNhc2Ugc28gaXQgaXMgcHJvYmFibHkgb2theSwg c29tZXRpbWVzIG1heWJlIG5vdC4uLg0KPiANCj4gY2FzZSAyLiBicm9hZGVyIHNjb3BlIGF0b21p YyBvcGVyYXRpb24sIG9yIHdlIGRvbid0IGNhcmUgaWYgbmFycm93ZXINCj4gICAgICAgICBhY2Nl c3MgaXMgYXRvbWljLg0KPiANCj4gZS5nLg0KPiB1bmlvbiB7DQo+ICAgIHN0cnVjdCB7DQo+ICAg ICAgICB1aW50MzJfdCBoZWFkOw0KPiAgICAgICAgUlRFX0FUT01JQyh1aW50MzJfdCkgdGFpbDsN Cj4gICAgIH0NCj4gICAgIFJURV9BVE9NSUModWludDY0X3QpIGNvbWJpbmVkOw0KPiB9DQo+IA0K PiBhZ2FpbiwgY291bGQgYmUgYW4gaW5kaWNhdGlvbiBvZiBtaXNzaW5nIHVzZSBvZiBhdG9taWMs IG9mdGVuIHRoZQ0KPiBvcGVyYXRpb24gb24gdGhlIGBjb21iaW5lZCcgZmllbGQgY29uc2lzdGVu dGx5IHVzZXMgYXRvbWljcyBidXQgb25lIG9mDQo+IHRoZSBoZWFkL3RhaWwgZmllbGRzIHdpbGwg bm90IGJlLiBvbiBwdXJwb3NlPyBtYXliZSBpZiB3ZSBhcmUganVzdCBkb2luZw0KPiA9PSBjb21w YXJpc29uPw0KPiANCj4gbXkgYXBwcm9hY2ggaW4gdGhpcyBzZXJpZXMgcHJpb3JpdGl6ZWQgbm8g ZnVuY3Rpb25hbCBjaGFuZ2UuIGFzIGEgcmVzdWx0DQo+IGlmIGFueSBvZiB0aGUgYWJvdmUgYXJl IHJlYWwgYnVncywgdGhleSBzdGF5IHJlYWwgYnVncyBidXQgaSBoYXZlIG5vdA0KPiBjaGFuZ2Vk IHRoZSB3YXkgdGhlIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQuIGlmIGkgd2VyZSB0byBjaGFuZ2Ug dGhlIGNvZGUNCj4gYW5kIHN0YXJ0IGF0b21pYyBzcGVjaWZ5aW5nIGl0IGhhcyBhIHJpc2sgb2Yg cGVyZm9ybWFuY2UgcmVncmVzc2lvbiAoZm9yDQo+IGNhc2VzIHdoZXJlIGl0IGlzbid0IGEgYnVn KSBiZWNhdXNlIHNwZWNpZnlpbmcgd291bGQgcmVzdWx0IGluIHRoZQ0KPiBjb21waWxlciBjb2Rl IGdlbmVyYXRpbmcgZm9yIHN0cm9uZ2VzdCBvcmRlcmluZyBzZXFfY3N0IGZvciBhY2Nlc3Nlcw0K PiB0aGF0IGFyZSBub3QgdXNpbmcgYXRvbWljIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgc3BlY2lm eSBvcmRlcmluZy4NCj4gDQo+IHRoZXJlIGlzIGFub3RoZXIgY2FzZSB3aGljaCBjb21lcyB1cCBo YWxmIGEgZG96ZW4gdGltZXMgb3Igc28gdGhhdCBpcw0KPiBhbHNvIGNvbmNlcm5pbmcgdG8gbWUs IGJ1dCBpIHdvdWxkIG5lZWQgdGhlIG1haW50YWluZXJzIG9mIHRoZSBjb2RlIHRvDQo+IGFkYXB0 IHRoZSBjb2RlIHRvIGJlIGNvcnJlY3Qgb3IgbWF5YmUgaXQgaXMgb2theS4uLg0KPiANCj4gDQo+ IGNhc2UgMy4gcXVhbGlmaWNhdGlvbiBkaXNjYXJkIC4uIGlzIHRoZSBleGlzdGluZyBjb2RlIHJl YWxseSBva2F5Pw0KPiANCj4gZS5nLg0KPiANCj4gYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoKm9i amVjdCwgKmV4cGVjdGVkLCBkZXNpcmVkLCAuLi4pDQo+IA0KPiB0aGUgaXNzdWUgaXMgd2l0aCB0 aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgbWVtb3J5IGFsaWFzZWQgYnkgZXhwZWN0ZWQuDQo+IGdj YyBkb2Vzbid0IGNvbXBsYWluIG9yIGVuZm9yY2UgZGlzY2FyZGluZyBvZiBxdWFsaWZpY2F0aW9u IHdoZW4gdXNpbmcNCj4gYnVpbHRpbiBpbnRyaW5zaWNzLiB0aGUgcmVzdWx0IGlzIHRoYXQgaWYg ZXhwZWN0ZWQgaXMgYW4gYXRvbWljIHR5cGUgaXQNCj4gbWF5IGJlIGFjY2Vzc2VkIGluIGEgbm9u LWF0b21pYyBtYW5uZXIgYnkgdGhlIGNvZGUgZ2VuZXJhdGVkIGZvciB0aGUNCj4gYXRvbWljIG9w ZXJhdGlvbi4NCj4gDQo+IGFnYWluLCBpIGhhdmUgY2hvc2VuIHRvIG1haW50YWluIGV4aXN0aW5n IGJlaGF2aW9yIGJ5IGNhc3RpbmcgYXdheSB0aGUNCj4gcXVhbGlmaWNhdGlvbiBpZiBwcmVzZW50 IG9uIHRoZSBleHBlY3RlZCBhcmd1bWVudC4NCj4gDQo+IGkgZmVlbCB0aGF0IGluIHRlcm1zIG9m IG11dGF0aW5nIHRoZSBzb3VyY2UgdHJlZSBpdCBpcyBiZXN0IHRvIHNlcGFyYXRlDQo+IGNvbnZl cnNpb24gdG8gYXRvbWljIHNwZWNpZmllZC9xdWFsaWZpZWQgdHlwZXMgaW50byB0aGlzIHNlcGFy YXRlIHNlcmllcw0KPiBhbmQgdGhlbiBmb2xsb3cgdXAgd2l0aCBhZGRpdGlvbmFsIGNoYW5nZXMg dGhhdCBtYXkgaGF2ZQ0KPiBmdW5jdGlvbmFsL3BlcmZvcm1hbmNlIGltcGFjdCBpZiBub3QgZm9y IGFueSBvdGhlciByZWFzb24gdGhhdCBpdA0KPiBuYXJyb3dzIHdoZXJlIHlvdSBoYXZlIHRvIGxv b2sgaWYgdGhlcmUgaXMgYSBjaGFuZ2UuIGNlcnRhaW5seSBjb252ZXJzaW9uDQo+IHRvIGF0b21p Y3MgaGFzIG1hZGUgdGhlc2UgY2FzZXMgZmFyIGVhc2llciB0byBzcG90IGluIHRoZSBjb2RlLg0K PiANCj4gZmluYWxseSBpbiB0ZXJtcyBvZiBtb3N0IG9mIHRoZSB0b29sY2hhaW4vdGFyZ2V0cyBh bGwgb2YgdGhpcyBpcyBwcmV0dHkNCj4gbW9vdCBiZWNhdXNlIG1vc3Qgb2YgdGhlbSBhcmUgZGVm YXVsdGluZyB0byBlbmFibGVfc3RkYXRvbWljcz1mYWxzZSBzbw0KPiBtb3N0IGxpa2VseSBpZiB0 aGVyZSBhcmUgcHJvYmxlbXMgdGhleSB3aWxsIG1hbmlmZXN0IG9uIHdpbmRvd3MgYnVpbHQgd2l0 aA0KPiBtc3ZjIG9ubHkuDQo+IA0KPiB0aG91Z2h0cz8NCj4gDQo+ID4NCj4gPiA+ICAJdW5pb24g ew0KPiA+ID4gIAkJLyoqIHN5bmMgdHlwZSBvZiBwcm9kL2NvbnMgKi8NCj4gPiA+ICAJCWVudW0g cnRlX3Jpbmdfc3luY190eXBlIHN5bmNfdHlwZTsNCj4gPiA+QEAgLTc4LDcgKzc4LDcgQEAgc3Ry dWN0IHJ0ZV9yaW5nX2hlYWR0YWlsIHsNCj4gPiA+ICB1bmlvbiBfX3J0ZV9yaW5nX3J0c19wb3Nj bnQgew0KPiA+ID4gIAkvKiogcmF3IDhCIHZhbHVlIHRvIHJlYWQvd3JpdGUgKmNudCogYW5kICpw b3MqIGFzIG9uZSBhdG9taWMgb3AgKi8NCj4gPiA+LQl1aW50NjRfdCByYXcgX19ydGVfYWxpZ25l ZCg4KTsNCj4gPiA+KwlSVEVfQVRPTUlDKHVpbnQ2NF90KSByYXcgX19ydGVfYWxpZ25lZCg4KTsN Cj4gPiA+ICAJc3RydWN0IHsNCj4gPiA+ICAJCXVpbnQzMl90IGNudDsgLyoqPCBoZWFkL3RhaWwg cmVmZXJlbmNlIGNvdW50ZXIgKi8NCj4gPiA+ICAJCXVpbnQzMl90IHBvczsgLyoqPCBoZWFkL3Rh aWwgcG9zaXRpb24gKi8NCj4gPiA+QEAgLTk0LDEwICs5NCwxMCBAQCBzdHJ1Y3QgcnRlX3Jpbmdf cnRzX2hlYWR0YWlsIHsNCj4gPiA+ICB1bmlvbiBfX3J0ZV9yaW5nX2h0c19wb3Mgew0KPiA+ID4g IAkvKiogcmF3IDhCIHZhbHVlIHRvIHJlYWQvd3JpdGUgKmhlYWQqIGFuZCAqdGFpbCogYXMgb25l IGF0b21pYyBvcCAqLw0KPiA+ID4tCXVpbnQ2NF90IHJhdyBfX3J0ZV9hbGlnbmVkKDgpOw0KPiA+ ID4rCVJURV9BVE9NSUModWludDY0X3QpIHJhdyBfX3J0ZV9hbGlnbmVkKDgpOw0KPiA+ID4gIAlz dHJ1Y3Qgew0KPiA+ID4tCQl1aW50MzJfdCBoZWFkOyAvKio8IGhlYWQgcG9zaXRpb24gKi8NCj4g PiA+LQkJdWludDMyX3QgdGFpbDsgLyoqPCB0YWlsIHBvc2l0aW9uICovDQo+ID4gPisJCVJURV9B VE9NSUModWludDMyX3QpIGhlYWQ7IC8qKjwgaGVhZCBwb3NpdGlvbiAqLw0KPiA+ID4rCQlSVEVf QVRPTUlDKHVpbnQzMl90KSB0YWlsOyAvKio8IHRhaWwgcG9zaXRpb24gKi8NCj4gPiA+ICAJfSBw b3M7DQo+ID4gPiAgfTsNCj4gPiA+ZGlmZiAtLWdpdCBhL2xpYi9yaW5nL3J0ZV9yaW5nX2dlbmVy aWNfcHZ0LmggYi9saWIvcmluZy9ydGVfcmluZ19nZW5lcmljX3B2dC5oDQo+ID4gPmluZGV4IDVh Y2I2ZTUuLmZmYjM2NTQgMTAwNjQ0DQo+ID4gPi0tLSBhL2xpYi9yaW5nL3J0ZV9yaW5nX2dlbmVy aWNfcHZ0LmgNCj4gPiA+KysrIGIvbGliL3JpbmcvcnRlX3JpbmdfZ2VuZXJpY19wdnQuaA0KPiA+ ID5AQCAtMjMsNyArMjMsOCBAQA0KPiA+ID4gIAkgKiB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZW0g dG8gY29tcGxldGUNCj4gPiA+ICAJICovDQo+ID4gPiAgCWlmICghc2luZ2xlKQ0KPiA+ID4tCQly dGVfd2FpdF91bnRpbF9lcXVhbF8zMigmaHQtPnRhaWwsIG9sZF92YWwsIF9fQVRPTUlDX1JFTEFY RUQpOw0KPiA+ID4rCQlydGVfd2FpdF91bnRpbF9lcXVhbF8zMigodm9sYXRpbGUgdWludDMyX3Qg KikodWludHB0cl90KSZodC0+dGFpbCwgb2xkX3ZhbCwNCj4gPg0KPiA+IEkgc3VwcG9zZSB3ZSBk byBuZWVkIHRoYXQgZG91YmxlIHR5cGUgY29udmVyc2lvbiBvbmx5IGZvciBhdG9taWMNCj4gPiB0 eXBlcyByaWdodD8NCj4gPg0KPiA+ID4rCQkJcnRlX21lbW9yeV9vcmRlcl9yZWxheGVkKTsNCj4g PiA+ICAJaHQtPnRhaWwgPSBuZXdfdmFsOw0KPiA+ID4gIH0NCj4gPiA+ZGlmZiAtLWdpdCBhL2xp Yi9yaW5nL3J0ZV9yaW5nX2h0c19lbGVtX3B2dC5oIGIvbGliL3JpbmcvcnRlX3JpbmdfaHRzX2Vs ZW1fcHZ0LmgNCj4gPiA+aW5kZXggYTg2NzhkMy4uOTFmNWVlYyAxMDA2NDQNCj4gPiA+LS0tIGEv bGliL3JpbmcvcnRlX3JpbmdfaHRzX2VsZW1fcHZ0LmgNCj4gPiA+KysrIGIvbGliL3JpbmcvcnRl X3JpbmdfaHRzX2VsZW1fcHZ0LmgNCj4gPiA+QEAgLTEwLDYgKzEwLDggQEANCj4gPiA+ICAjaWZu ZGVmIF9SVEVfUklOR19IVFNfRUxFTV9QVlRfSF8NCj4gPiA+ICAjZGVmaW5lIF9SVEVfUklOR19I VFNfRUxFTV9QVlRfSF8NCj4gPiA+KyNpbmNsdWRlIDxydGVfc3RkYXRvbWljLmg+DQo+ID4gPisN Cj4gPiA+ICAvKioNCj4gPiA+ICAgKiBAZmlsZSBydGVfcmluZ19odHNfZWxlbV9wdnQuaA0KPiA+ ID4gICAqIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3Rs eSwNCj4gPiA+QEAgLTMwLDcgKzMyLDcgQEANCj4gPiA+ICAJUlRFX1NFVF9VU0VEKGVucXVldWUp Ow0KPiA+ID4gIAl0YWlsID0gb2xkX3RhaWwgKyBudW07DQo+ID4gPi0JX19hdG9taWNfc3RvcmVf bigmaHQtPmh0LnBvcy50YWlsLCB0YWlsLCBfX0FUT01JQ19SRUxFQVNFKTsNCj4gPiA+KwlydGVf YXRvbWljX3N0b3JlX2V4cGxpY2l0KCZodC0+aHQucG9zLnRhaWwsIHRhaWwsIHJ0ZV9tZW1vcnlf b3JkZXJfcmVsZWFzZSk7DQo+ID4gPiAgfQ0KPiA+ID4gIC8qKg0KPiA+ID5AQCAtNDQsNyArNDYs NyBAQA0KPiA+ID4gIHsNCj4gPiA+ICAJd2hpbGUgKHAtPnBvcy5oZWFkICE9IHAtPnBvcy50YWls KSB7DQo+ID4gPiAgCQlydGVfcGF1c2UoKTsNCj4gPiA+LQkJcC0+cmF3ID0gX19hdG9taWNfbG9h ZF9uKCZodC0+aHQucmF3LCBfX0FUT01JQ19BQ1FVSVJFKTsNCj4gPiA+KwkJcC0+cmF3ID0gcnRl X2F0b21pY19sb2FkX2V4cGxpY2l0KCZodC0+aHQucmF3LCBydGVfbWVtb3J5X29yZGVyX2FjcXVp cmUpOw0KPiA+ID4gIAl9DQo+ID4gPiAgfQ0KPiA+ID5AQCAtNjEsNyArNjMsNyBAQA0KPiA+ID4g IAljb25zdCB1aW50MzJfdCBjYXBhY2l0eSA9IHItPmNhcGFjaXR5Ow0KPiA+ID4tCW9wLnJhdyA9 IF9fYXRvbWljX2xvYWRfbigmci0+aHRzX3Byb2QuaHQucmF3LCBfX0FUT01JQ19BQ1FVSVJFKTsN Cj4gPiA+KwlvcC5yYXcgPSBydGVfYXRvbWljX2xvYWRfZXhwbGljaXQoJnItPmh0c19wcm9kLmh0 LnJhdywgcnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlKTsNCj4gPiA+ICAJZG8gew0KPiA+ID4gIAkJ LyogUmVzZXQgbiB0byB0aGUgaW5pdGlhbCBidXJzdCBjb3VudCAqLw0KPiA+ID5AQCAtOTgsOSAr MTAwLDkgQEANCj4gPiA+ICAJICogIC0gT09PIHJlYWRzIG9mIGNvbnMgdGFpbCB2YWx1ZQ0KPiA+ ID4gIAkgKiAgLSBPT08gY29weSBvZiBlbGVtcyBmcm9tIHRoZSByaW5nDQo+ID4gPiAgCSAqLw0K PiA+ID4tCX0gd2hpbGUgKF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfbigmci0+aHRzX3Byb2Qu aHQucmF3LA0KPiA+ID4tCQkJJm9wLnJhdywgbnAucmF3LA0KPiA+ID4tCQkJMCwgX19BVE9NSUNf QUNRVUlSRSwgX19BVE9NSUNfQUNRVUlSRSkgPT0gMCk7DQo+ID4gPisJfSB3aGlsZSAocnRlX2F0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgmci0+aHRzX3Byb2QuaHQucmF3 LA0KPiA+ID4rCQkJKHVpbnQ2NF90ICopKHVpbnRwdHJfdCkmb3AucmF3LCBucC5yYXcsDQo+ID4g PisJCQlydGVfbWVtb3J5X29yZGVyX2FjcXVpcmUsIHJ0ZV9tZW1vcnlfb3JkZXJfYWNxdWlyZSkg PT0gMCk7DQo+ID4gPiAgCSpvbGRfaGVhZCA9IG9wLnBvcy5oZWFkOw0KPiA+ID4gIAlyZXR1cm4g bjsNCj4gPiA+QEAgLTExNyw3ICsxMTksNyBAQA0KPiA+ID4gIAl1aW50MzJfdCBuOw0KPiA+ID4g IAl1bmlvbiBfX3J0ZV9yaW5nX2h0c19wb3MgbnAsIG9wOw0KPiA+ID4tCW9wLnJhdyA9IF9fYXRv bWljX2xvYWRfbigmci0+aHRzX2NvbnMuaHQucmF3LCBfX0FUT01JQ19BQ1FVSVJFKTsNCj4gPiA+ KwlvcC5yYXcgPSBydGVfYXRvbWljX2xvYWRfZXhwbGljaXQoJnItPmh0c19jb25zLmh0LnJhdywg cnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlKTsNCj4gPiA+ICAJLyogbW92ZSBjb25zLmhlYWQgYXRv bWljYWxseSAqLw0KPiA+ID4gIAlkbyB7DQo+ID4gPkBAIC0xNTMsOSArMTU1LDkgQEANCj4gPiA+ ICAJICogIC0gT09PIHJlYWRzIG9mIHByb2QgdGFpbCB2YWx1ZQ0KPiA+ID4gIAkgKiAgLSBPT08g Y29weSBvZiBlbGVtcyBmcm9tIHRoZSByaW5nDQo+ID4gPiAgCSAqLw0KPiA+ID4tCX0gd2hpbGUg KF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfbigmci0+aHRzX2NvbnMuaHQucmF3LA0KPiA+ID4t CQkJJm9wLnJhdywgbnAucmF3LA0KPiA+ID4tCQkJMCwgX19BVE9NSUNfQUNRVUlSRSwgX19BVE9N SUNfQUNRVUlSRSkgPT0gMCk7DQo+ID4gPisJfSB3aGlsZSAocnRlX2F0b21pY19jb21wYXJlX2V4 Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgmci0+aHRzX2NvbnMuaHQucmF3LA0KPiA+ID4rCQkJKHVp bnQ2NF90ICopKHVpbnRwdHJfdCkmb3AucmF3LCBucC5yYXcsDQo+ID4gPisJCQlydGVfbWVtb3J5 X29yZGVyX2FjcXVpcmUsIHJ0ZV9tZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCk7DQo+ID4gPiAg CSpvbGRfaGVhZCA9IG9wLnBvcy5oZWFkOw0KPiA+ID4gIAlyZXR1cm4gbjsNCj4gPiA+ZGlmZiAt LWdpdCBhL2xpYi9yaW5nL3J0ZV9yaW5nX3BlZWtfZWxlbV9wdnQuaCBiL2xpYi9yaW5nL3J0ZV9y aW5nX3BlZWtfZWxlbV9wdnQuaA0KPiA+ID5pbmRleCBiYjBhN2Q1Li5iNWYwODIyIDEwMDY0NA0K PiA+ID4tLS0gYS9saWIvcmluZy9ydGVfcmluZ19wZWVrX2VsZW1fcHZ0LmgNCj4gPiA+KysrIGIv bGliL3JpbmcvcnRlX3JpbmdfcGVla19lbGVtX3B2dC5oDQo+ID4gPkBAIC01OSw3ICs1OSw3IEBA DQo+ID4gPiAgCXBvcyA9IHRhaWwgKyBudW07DQo+ID4gPiAgCWh0LT5oZWFkID0gcG9zOw0KPiA+ ID4tCV9fYXRvbWljX3N0b3JlX24oJmh0LT50YWlsLCBwb3MsIF9fQVRPTUlDX1JFTEVBU0UpOw0K PiA+ID4rCXJ0ZV9hdG9taWNfc3RvcmVfZXhwbGljaXQoJmh0LT50YWlsLCBwb3MsIHJ0ZV9tZW1v cnlfb3JkZXJfcmVsZWFzZSk7DQo+ID4gPiAgfQ0KPiA+ID4gIC8qKg0KPiA+ID5AQCAtNzgsNyAr NzgsNyBAQA0KPiA+ID4gIAl1aW50MzJfdCBuOw0KPiA+ID4gIAl1bmlvbiBfX3J0ZV9yaW5nX2h0 c19wb3MgcDsNCj4gPiA+LQlwLnJhdyA9IF9fYXRvbWljX2xvYWRfbigmaHQtPmh0LnJhdywgX19B VE9NSUNfUkVMQVhFRCk7DQo+ID4gPisJcC5yYXcgPSBydGVfYXRvbWljX2xvYWRfZXhwbGljaXQo Jmh0LT5odC5yYXcsIHJ0ZV9tZW1vcnlfb3JkZXJfcmVsYXhlZCk7DQo+ID4gPiAgCW4gPSBwLnBv cy5oZWFkIC0gcC5wb3MudGFpbDsNCj4gPiA+ICAJUlRFX0FTU0VSVChuID49IG51bSk7DQo+ID4g PkBAIC0xMDQsNyArMTA0LDcgQEANCj4gPiA+ICAJcC5wb3MuaGVhZCA9IHRhaWwgKyBudW07DQo+ ID4gPiAgCXAucG9zLnRhaWwgPSBwLnBvcy5oZWFkOw0KPiA+ID4tCV9fYXRvbWljX3N0b3JlX24o Jmh0LT5odC5yYXcsIHAucmF3LCBfX0FUT01JQ19SRUxFQVNFKTsNCj4gPiA+KwlydGVfYXRvbWlj X3N0b3JlX2V4cGxpY2l0KCZodC0+aHQucmF3LCBwLnJhdywgcnRlX21lbW9yeV9vcmRlcl9yZWxl YXNlKTsNCj4gPiA+ICB9DQo+ID4gPiAgLyoqDQo+ID4gPmRpZmYgLS1naXQgYS9saWIvcmluZy9y dGVfcmluZ19ydHNfZWxlbV9wdnQuaCBiL2xpYi9yaW5nL3J0ZV9yaW5nX3J0c19lbGVtX3B2dC5o DQo+ID4gPmluZGV4IDcxNjQyMTMuLjEyMjY1MDMgMTAwNjQ0DQo+ID4gPi0tLSBhL2xpYi9yaW5n L3J0ZV9yaW5nX3J0c19lbGVtX3B2dC5oDQo+ID4gPisrKyBiL2xpYi9yaW5nL3J0ZV9yaW5nX3J0 c19lbGVtX3B2dC5oDQo+ID4gPkBAIC0zMSwxOCArMzEsMTkgQEANCj4gPiA+ICAJICogbWlnaHQg cHJlY2VkZWQgdXMsIHRoZW4gZG9uJ3QgdXBkYXRlIHRhaWwgd2l0aCBuZXcgdmFsdWUuDQo+ID4g PiAgCSAqLw0KPiA+ID4tCW90LnJhdyA9IF9fYXRvbWljX2xvYWRfbigmaHQtPnRhaWwucmF3LCBf X0FUT01JQ19BQ1FVSVJFKTsNCj4gPiA+KwlvdC5yYXcgPSBydGVfYXRvbWljX2xvYWRfZXhwbGlj aXQoJmh0LT50YWlsLnJhdywgcnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlKTsNCj4gPiA+ICAJZG8g ew0KPiA+ID4gIAkJLyogb24gMzItYml0IHN5c3RlbXMgd2UgaGF2ZSB0byBkbyBhdG9taWMgcmVh ZCBoZXJlICovDQo+ID4gPi0JCWgucmF3ID0gX19hdG9taWNfbG9hZF9uKCZodC0+aGVhZC5yYXcs IF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4rCQloLnJhdyA9IHJ0ZV9hdG9taWNfbG9hZF9leHBs aWNpdCgmaHQtPmhlYWQucmF3LCBydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpOw0KPiA+ID4gIAkJ bnQucmF3ID0gb3QucmF3Ow0KPiA+ID4gIAkJaWYgKCsrbnQudmFsLmNudCA9PSBoLnZhbC5jbnQp DQo+ID4gPiAgCQkJbnQudmFsLnBvcyA9IGgudmFsLnBvczsNCj4gPiA+LQl9IHdoaWxlIChfX2F0 b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJmh0LT50YWlsLnJhdywgJm90LnJhdywgbnQucmF3LA0K PiA+ID4tCQkJMCwgX19BVE9NSUNfUkVMRUFTRSwgX19BVE9NSUNfQUNRVUlSRSkgPT0gMCk7DQo+ ID4gPisJfSB3aGlsZSAocnRlX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNp dCgmaHQtPnRhaWwucmF3LA0KPiA+ID4rCQkJKHVpbnQ2NF90ICopKHVpbnRwdHJfdCkmb3QucmF3 LCBudC5yYXcsDQo+ID4gPisJCQlydGVfbWVtb3J5X29yZGVyX3JlbGVhc2UsIHJ0ZV9tZW1vcnlf b3JkZXJfYWNxdWlyZSkgPT0gMCk7DQo+ID4gPiAgfQ0KPiA+ID4gIC8qKg0KPiA+ID5AQCAtNTks NyArNjAsNyBAQA0KPiA+ID4gIAl3aGlsZSAoaC0+dmFsLnBvcyAtIGh0LT50YWlsLnZhbC5wb3Mg PiBtYXgpIHsNCj4gPiA+ICAJCXJ0ZV9wYXVzZSgpOw0KPiA+ID4tCQloLT5yYXcgPSBfX2F0b21p Y19sb2FkX24oJmh0LT5oZWFkLnJhdywgX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4gPisJCWgtPnJh dyA9IHJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmaHQtPmhlYWQucmF3LCBydGVfbWVtb3J5X29y ZGVyX2FjcXVpcmUpOw0KPiA+ID4gIAl9DQo+ID4gPiAgfQ0KPiA+ID5AQCAtNzYsNyArNzcsNyBA QA0KPiA+ID4gIAljb25zdCB1aW50MzJfdCBjYXBhY2l0eSA9IHItPmNhcGFjaXR5Ow0KPiA+ID4t CW9oLnJhdyA9IF9fYXRvbWljX2xvYWRfbigmci0+cnRzX3Byb2QuaGVhZC5yYXcsIF9fQVRPTUlD X0FDUVVJUkUpOw0KPiA+ID4rCW9oLnJhdyA9IHJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmci0+ cnRzX3Byb2QuaGVhZC5yYXcsIHJ0ZV9tZW1vcnlfb3JkZXJfYWNxdWlyZSk7DQo+ID4gPiAgCWRv IHsNCj4gPiA+ICAJCS8qIFJlc2V0IG4gdG8gdGhlIGluaXRpYWwgYnVyc3QgY291bnQgKi8NCj4g PiA+QEAgLTExMyw5ICsxMTQsOSBAQA0KPiA+ID4gIAkgKiAgLSBPT08gcmVhZHMgb2YgY29ucyB0 YWlsIHZhbHVlDQo+ID4gPiAgCSAqICAtIE9PTyBjb3B5IG9mIGVsZW1zIHRvIHRoZSByaW5nDQo+ ID4gPiAgCSAqLw0KPiA+ID4tCX0gd2hpbGUgKF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfbigm ci0+cnRzX3Byb2QuaGVhZC5yYXcsDQo+ID4gPi0JCQkmb2gucmF3LCBuaC5yYXcsDQo+ID4gPi0J CQkwLCBfX0FUT01JQ19BQ1FVSVJFLCBfX0FUT01JQ19BQ1FVSVJFKSA9PSAwKTsNCj4gPiA+Kwl9 IHdoaWxlIChydGVfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KCZyLT5y dHNfcHJvZC5oZWFkLnJhdywNCj4gPiA+KwkJCSh1aW50NjRfdCAqKSh1aW50cHRyX3QpJm9oLnJh dywgbmgucmF3LA0KPiA+ID4rCQkJcnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlLCBydGVfbWVtb3J5 X29yZGVyX2FjcXVpcmUpID09IDApOw0KPiA+ID4gIAkqb2xkX2hlYWQgPSBvaC52YWwucG9zOw0K PiA+ID4gIAlyZXR1cm4gbjsNCj4gPiA+QEAgLTEzMiw3ICsxMzMsNyBAQA0KPiA+ID4gIAl1aW50 MzJfdCBuOw0KPiA+ID4gIAl1bmlvbiBfX3J0ZV9yaW5nX3J0c19wb3NjbnQgbmgsIG9oOw0KPiA+ ID4tCW9oLnJhdyA9IF9fYXRvbWljX2xvYWRfbigmci0+cnRzX2NvbnMuaGVhZC5yYXcsIF9fQVRP TUlDX0FDUVVJUkUpOw0KPiA+ID4rCW9oLnJhdyA9IHJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgm ci0+cnRzX2NvbnMuaGVhZC5yYXcsIHJ0ZV9tZW1vcnlfb3JkZXJfYWNxdWlyZSk7DQo+ID4gPiAg CS8qIG1vdmUgY29ucy5oZWFkIGF0b21pY2FsbHkgKi8NCj4gPiA+ICAJZG8gew0KPiA+ID5AQCAt MTY4LDkgKzE2OSw5IEBADQo+ID4gPiAgCSAqICAtIE9PTyByZWFkcyBvZiBwcm9kIHRhaWwgdmFs dWUNCj4gPiA+ICAJICogIC0gT09PIGNvcHkgb2YgZWxlbXMgZnJvbSB0aGUgcmluZw0KPiA+ID4g IAkgKi8NCj4gPiA+LQl9IHdoaWxlIChfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJnItPnJ0 c19jb25zLmhlYWQucmF3LA0KPiA+ID4tCQkJJm9oLnJhdywgbmgucmF3LA0KPiA+ID4tCQkJMCwg X19BVE9NSUNfQUNRVUlSRSwgX19BVE9NSUNfQUNRVUlSRSkgPT0gMCk7DQo+ID4gPisJfSB3aGls ZSAocnRlX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgmci0+cnRzX2Nv bnMuaGVhZC5yYXcsDQo+ID4gPisJCQkodWludDY0X3QgKikodWludHB0cl90KSZvaC5yYXcsIG5o LnJhdywNCj4gPiA+KwkJCXJ0ZV9tZW1vcnlfb3JkZXJfYWNxdWlyZSwgcnRlX21lbW9yeV9vcmRl cl9hY3F1aXJlKSA9PSAwKTsNCj4gPiA+ICAJKm9sZF9oZWFkID0gb2gudmFsLnBvczsNCj4gPiA+ ICAJcmV0dXJuIG47DQo=