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 595EC45588; Thu, 4 Jul 2024 12:05:14 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 278AB410F1; Thu, 4 Jul 2024 12:05:14 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 7A9F74025C for ; Thu, 4 Jul 2024 12:05:12 +0200 (CEST) Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4WFC1B3VLmz6JB7R; Thu, 4 Jul 2024 18:04:30 +0800 (CST) Received: from frapeml100005.china.huawei.com (unknown [7.182.85.132]) by mail.maildlp.com (Postfix) with ESMTPS id 8C0F91400D4; Thu, 4 Jul 2024 18:05:11 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml100005.china.huawei.com (7.182.85.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Thu, 4 Jul 2024 12:05:11 +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.039; Thu, 4 Jul 2024 12:05:11 +0200 From: Konstantin Ananyev To: Ferruh Yigit , Konstantin Ananyev , "dev@dpdk.org" CC: "hujiayu.hu@foxmail.com" , "roretzla@linux.microsoft.com" , "bruce.richardson@intel.com" , "anatoly.burakov@intel.com" , "vladimir.medvedkin@intel.com" , "kumaraparamesh92@gmail.com" Subject: RE: [RFC 2/4] gro: remove use of VLAs Thread-Topic: [RFC 2/4] gro: remove use of VLAs Thread-Index: AQHarS5UqYyFPNmZqkSmS2XSARXhsrHDSIUAgAJSWqCAAcNrgIAV+tSAgAkSWICAAChlkA== Date: Thu, 4 Jul 2024 10:05:11 +0000 Message-ID: <81ca5265e17e4606923385bb815304ad@huawei.com> References: <20240523162604.2600-1-konstantin.v.ananyev@yandex.ru> <20240523162604.2600-3-konstantin.v.ananyev@yandex.ru> <0f149663-a2bd-4553-938e-de9e87cf6adb@amd.com> In-Reply-To: <0f149663-a2bd-4553-938e-de9e87cf6adb@amd.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.48.148.231] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 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 DQo+ID4+Pj4+DQo+ID4+Pj4+IC4uL2xpYi9ncm8vcnRlX2dyby5jOjE4MjozNDogd2FybmluZzog dmFyaWFibGUgbGVuZ3RoIGFycmF5IHVzZWQgWy1XdmxhXQ0KPiA+Pj4+PiAuLi9saWIvZ3JvL3J0 ZV9ncm8uYzozNjM6MzQ6IHdhcm5pbmc6IHZhcmlhYmxlIGxlbmd0aCBhcnJheSB1c2VkIFstV3Zs YV0NCj4gPj4+Pj4NCj4gPj4+Pj4gSW4gYm90aCBjYXNlcyB0aGUgcGF0dGVybiBpcyB0aGUgc2Ft ZTogd2UgdXNlIHVucHJvY2Vzc19wa3RzW25iX3BrdHNdIHRvDQo+ID4+Pj4+IGNvbGxlY3QgdW4t dXNlZCBieSBHUk8gcGFja2V0cywgYW5kIHRoZW4gY29weSB0aGVtIHRvIHRoZSBzdGFydCBvZg0K PiA+Pj4+PiBpbnB1dC9vdXRwdXQgcGt0c1tdIGFycmF5Lg0KPiA+Pj4+PiBJbiBib3RoIGNhc2Vz LCB3ZSBjYW4gc2FmZWx5IGNvcHkgcGt0c1tpXSBpbnRvIGFscmVhZHkNCj4gPj4+Pj4gcHJvY2Vz c2VkIGVudHJ5IGF0IHRoZSBzYW1lIGFycmF5LCBpLmUuIGludG8gcGt0c1t1bnByb2Nlc3NfbnVt XS4NCj4gPj4+Pj4gU3VjaCBjaGFuZ2UgZWxpbWluYXRlcyBuZWVkIG9mIHRlbXBvcmFyeSBWTEE6 IHVucHJvY2Vzc19wa3RzW25iX3BrdHNdLg0KPiA+Pj4+Pg0KPiA+Pj4+PiBTaWduZWQtb2ZmLWJ5 OiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4uYW5hbnlldkBodWF3ZWkuY29tPg0KPiA+ Pj4+PiAtLS0NCj4gPj4+Pj4gIGxpYi9ncm8vcnRlX2dyby5jIHwgNDAgKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+Pj4+PiAgMSBmaWxlIGNoYW5nZWQsIDE0IGlu c2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQ0KPiA+Pj4+Pg0KPiA+Pj4+PiBkaWZmIC0tZ2l0 IGEvbGliL2dyby9ydGVfZ3JvLmMgYi9saWIvZ3JvL3J0ZV9ncm8uYw0KPiA+Pj4+PiBpbmRleCBk Yjg2MTE3NjA5Li42ZDVhYWRmMzJhIDEwMDY0NA0KPiA+Pj4+PiAtLS0gYS9saWIvZ3JvL3J0ZV9n cm8uYw0KPiA+Pj4+PiArKysgYi9saWIvZ3JvL3J0ZV9ncm8uYw0KPiA+Pj4+PiBAQCAtMTc5LDcg KzE3OSw2IEBAIHJ0ZV9ncm9fcmVhc3NlbWJsZV9idXJzdChzdHJ1Y3QgcnRlX21idWYgKipwa3Rz LA0KPiA+Pj4+PiAgCXN0cnVjdCBncm9fdnhsYW5fdWRwNF9pdGVtIHZ4bGFuX3VkcF9pdGVtc1tS VEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV0NCj4gPj4+Pj4gIAkJCT0ge3t7MH19IH07DQo+ID4+ Pj4+DQo+ID4+Pj4+IC0Jc3RydWN0IHJ0ZV9tYnVmICp1bnByb2Nlc3NfcGt0c1tuYl9wa3RzXTsN Cj4gPj4+Pj4gIAl1aW50MzJfdCBpdGVtX251bTsNCj4gPj4+Pj4gIAlpbnQzMl90IHJldDsNCj4g Pj4+Pj4gIAl1aW50MTZfdCBpLCB1bnByb2Nlc3NfbnVtID0gMCwgbmJfYWZ0ZXJfZ3JvID0gbmJf cGt0czsNCj4gPj4+Pj4gQEAgLTI3NSw3ICsyNzQsNyBAQCBydGVfZ3JvX3JlYXNzZW1ibGVfYnVy c3Qoc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywNCj4gPj4+Pj4gIAkJCQkvKiBNZXJnZSBzdWNjZXNz ZnVsbHkgKi8NCj4gPj4+Pj4gIAkJCQluYl9hZnRlcl9ncm8tLTsNCj4gPj4+Pj4gIAkJCWVsc2Ug aWYgKHJldCA8IDApDQo+ID4+Pj4+IC0JCQkJdW5wcm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsr XSA9IHBrdHNbaV07DQo+ID4+Pj4+ICsJCQkJcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tp XTsNCj4gPj4+Pj4gIAkJfSBlbHNlIGlmIChJU19JUFY0X1ZYTEFOX1VEUDRfUEtUKHBrdHNbaV0t PnBhY2tldF90eXBlKSAmJg0KPiA+Pj4+PiAgCQkJCWRvX3Z4bGFuX3VkcF9ncm8pIHsNCj4gPj4+ Pj4gIAkJCXJldCA9IGdyb192eGxhbl91ZHA0X3JlYXNzZW1ibGUocGt0c1tpXSwNCj4gPj4+Pj4g QEAgLTI4NCw3ICsyODMsNyBAQCBydGVfZ3JvX3JlYXNzZW1ibGVfYnVyc3Qoc3RydWN0IHJ0ZV9t YnVmICoqcGt0cywNCj4gPj4+Pj4gIAkJCQkvKiBNZXJnZSBzdWNjZXNzZnVsbHkgKi8NCj4gPj4+ Pj4gIAkJCQluYl9hZnRlcl9ncm8tLTsNCj4gPj4+Pj4gIAkJCWVsc2UgaWYgKHJldCA8IDApDQo+ ID4+Pj4+IC0JCQkJdW5wcm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07DQo+ ID4+Pj4+ICsJCQkJcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsNCj4gPj4+Pj4gIAkJ fSBlbHNlIGlmIChJU19JUFY0X1RDUF9QS1QocGt0c1tpXS0+cGFja2V0X3R5cGUpICYmDQo+ID4+ Pj4+ICAJCQkJZG9fdGNwNF9ncm8pIHsNCj4gPj4+Pj4gIAkJCXJldCA9IGdyb190Y3A0X3JlYXNz ZW1ibGUocGt0c1tpXSwgJnRjcF90YmwsIDApOw0KPiA+Pj4+PiBAQCAtMjkyLDcgKzI5MSw3IEBA IHJ0ZV9ncm9fcmVhc3NlbWJsZV9idXJzdChzdHJ1Y3QgcnRlX21idWYgKipwa3RzLA0KPiA+Pj4+ PiAgCQkJCS8qIG1lcmdlIHN1Y2Nlc3NmdWxseSAqLw0KPiA+Pj4+PiAgCQkJCW5iX2FmdGVyX2dy by0tOw0KPiA+Pj4+PiAgCQkJZWxzZSBpZiAocmV0IDwgMCkNCj4gPj4+Pj4gLQkJCQl1bnByb2Nl c3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsNCj4gPj4+Pj4gKwkJCQlwa3RzW3Vu cHJvY2Vzc19udW0rK10gPSBwa3RzW2ldOw0KPiA+Pj4+PiAgCQl9IGVsc2UgaWYgKElTX0lQVjRf VURQX1BLVChwa3RzW2ldLT5wYWNrZXRfdHlwZSkgJiYNCj4gPj4+Pj4gIAkJCQlkb191ZHA0X2dy bykgew0KPiA+Pj4+PiAgCQkJcmV0ID0gZ3JvX3VkcDRfcmVhc3NlbWJsZShwa3RzW2ldLCAmdWRw X3RibCwgMCk7DQo+ID4+Pj4+IEBAIC0zMDAsNyArMjk5LDcgQEAgcnRlX2dyb19yZWFzc2VtYmxl X2J1cnN0KHN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsDQo+ID4+Pj4+ICAJCQkJLyogbWVyZ2Ugc3Vj Y2Vzc2Z1bGx5ICovDQo+ID4+Pj4+ICAJCQkJbmJfYWZ0ZXJfZ3JvLS07DQo+ID4+Pj4+ICAJCQll bHNlIGlmIChyZXQgPCAwKQ0KPiA+Pj4+PiAtCQkJCXVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19u dW0rK10gPSBwa3RzW2ldOw0KPiA+Pj4+PiArCQkJCXBrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBr dHNbaV07DQo+ID4+Pj4+ICAJCX0gZWxzZSBpZiAoSVNfSVBWNl9UQ1BfUEtUKHBrdHNbaV0tPnBh Y2tldF90eXBlKSAmJg0KPiA+Pj4+PiAgCQkJCWRvX3RjcDZfZ3JvKSB7DQo+ID4+Pj4+ICAJCQly ZXQgPSBncm9fdGNwNl9yZWFzc2VtYmxlKHBrdHNbaV0sICZ0Y3A2X3RibCwgMCk7DQo+ID4+Pj4+ IEBAIC0zMDgsMjEgKzMwNywxNSBAQCBydGVfZ3JvX3JlYXNzZW1ibGVfYnVyc3Qoc3RydWN0IHJ0 ZV9tYnVmICoqcGt0cywNCj4gPj4+Pj4gIAkJCQkvKiBtZXJnZSBzdWNjZXNzZnVsbHkgKi8NCj4g Pj4+Pj4gIAkJCQluYl9hZnRlcl9ncm8tLTsNCj4gPj4+Pj4gIAkJCWVsc2UgaWYgKHJldCA8IDAp DQo+ID4+Pj4+IC0JCQkJdW5wcm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07 DQo+ID4+Pj4+ICsJCQkJcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsNCj4gPj4+Pj4g IAkJfSBlbHNlDQo+ID4+Pj4+IC0JCQl1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0g cGt0c1tpXTsNCj4gPj4+Pj4gKwkJCXBrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07DQo+ ID4+Pj4+ICAJfQ0KPiA+Pj4+Pg0KPiA+Pj4+PiAgCWlmICgobmJfYWZ0ZXJfZ3JvIDwgbmJfcGt0 cykNCj4gPj4+Pj4gIAkJIHx8ICh1bnByb2Nlc3NfbnVtIDwgbmJfcGt0cykpIHsNCj4gPj4+Pj4g LQkJaSA9IDA7DQo+ID4+Pj4+IC0JCS8qIENvcHkgdW5wcm9jZXNzZWQgcGFja2V0cyAqLw0KPiA+ Pj4+PiAtCQlpZiAodW5wcm9jZXNzX251bSA+IDApIHsNCj4gPj4+Pj4gLQkJCW1lbWNweSgmcGt0 c1tpXSwgdW5wcm9jZXNzX3BrdHMsDQo+ID4+Pj4+IC0JCQkJCXNpemVvZihzdHJ1Y3QgcnRlX21i dWYgKikgKg0KPiA+Pj4+PiAtCQkJCQl1bnByb2Nlc3NfbnVtKTsNCj4gPj4+Pj4gLQkJCWkgPSB1 bnByb2Nlc3NfbnVtOw0KPiA+Pj4+PiAtCQl9DQo+ID4+Pj4+ICsNCj4gPj4+Pj4gKwkJaSA9IHVu cHJvY2Vzc19udW07DQo+ID4+Pj4+DQo+ID4+Pj4+ICAJCS8qIEZsdXNoIGFsbCBwYWNrZXRzIGZy b20gdGhlIHRhYmxlcyAqLw0KPiA+Pj4+PiAgCQlpZiAoZG9fdnhsYW5fdGNwX2dybykgew0KPiA+ Pj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gYWNrIHRvIHJlLXVzZSAncGt0c1tdJyBidWZmZXIgZm9yIHVu cHJvY2Vzc2VkIHBhY2tldHMsIHRoYXQgc2hvdWxkIHdvcmsuDQo+ID4+Pj4NCj4gPj4+PiBCdXQg YXMgYSBtb3JlIGdlbmVyYWwgR1JPIHF1ZXN0aW9uLCBhYm92ZSAncnRlX2dyb19yZWFzc2VtYmxl X2J1cnN0KCknDQo+ID4+Pj4gZnVuY3Rpb25zIHNlZW1zIHJldHVybnMgJ25iX2FmdGVyX2dybycg YW5kIGFzIGZhciBhcyBJIGNhbiBzZWUgdGhhdA0KPiA+Pj4+IGFtb3VudCBvZiBtYnVmcyBzaXRz IGluIHRoZSAncGt0c1tdJy4NCj4gPj4+PiBXaGVuIHBhY2tldHMgZmx1c2hlZCBmcm9tIHRhYmxl cywgZmx1c2hlZCBwYWNrZXRzIGFyZSByZXBsYWNlZCB0bw0KPiA+Pj4+ICdwa3RzW10nIGJ1dCBz dGlsbCAnbmJfYWZ0ZXJfZ3JvJyByZXR1cm5lZCwgdGhlcmUgaXMgbm8gd2F5IGZvcg0KPiA+Pj4+ IGFwcGxpY2F0aW9uIHRvIGtub3cgdGhhdCBtb3JlIHRoYW4gJ25iX2FmdGVyX2dybycgbWJ1ZnMg YXZhaWxhYmxlIGluIHRoZQ0KPiA+Pj4+ICdwa3RzW10nLiBTaG91bGRuJ3QgcmV0dXJuIHZhbHVl IGluY3JlYXNlZCBwZXIgZmx1c2hlZCBwYWNrZXQ/DQo+ID4+Pj4NCj4gPj4+PiBBaGgsIEkgY2Fu IHNlZSBpdCB3YXMgdGhlIGNhc2UgYmVmb3JlLCBidXQgaXQgaXMgdXBkYXRlZCAocGVyaGFwcw0K PiA+Pj4+IGJyb2tlbikgaW4gY29tbWl0Og0KPiA+Pj4+IDc0MDgwZDdkY2YzMSAoImdybzogc3Vw cG9ydCBJUHY2IGZvciBUQ1AiKQ0KPiA+Pj4NCj4gPj4+IEFjdHVhbGx5IG15IGZpcnN0IHRob3Vn aHQgd2FzIC0gd2Ugc2hvdWxkIHJldHVybiAnSScgaGVyZS4NCj4gPj4+IGJ1dCB0aGVuIGxvb2tp bmcgYXQgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHksIEkgcmVhbGl6ZWQgdGhhdCBpdCBpcyBjb3Jy ZWN0Og0KPiA+Pj4gbmJfYWZ0ZXJfZ3JvIC0gd291bGQgY29udGFpbiB2YWxpZCBudW1iZXIgb2Yg cGFja2V0cw0KPiA+Pj4gKGF0IGxlYXN0IEkgd2Fzbid0IGFibGUgdG8gZmluZCBhIGNhc2Ugd2hl biBpdCB3b3VsZG4ndCkuDQo+ID4+PiBUaG91Z2ggeWVoLCBpdCB3YXNuJ3QgdmVyeSBvYnZpb3Vz IGZvciBtZSBhdCBmaXJzdCBwbGFjZSwgc28gbWlnaHQgYmUNCj4gPj4+IGV4dHJhIGNvbW1lbnQg d291bGRuJ3QgaHVydCBoZXJlLg0KPiA+Pj4NCj4gPj4NCj4gPj4gSW4gZmlyc3QgaGFsZiBvZiB0 aGUgZnVuY3Rpb24sICduYl9hZnRlcl9ncm8nIGlzIG51bWJlciBvZiBwYWNrZXRzIG5vdA0KPiA+ PiBhc3NlbWJsZWQgYW5kIGRlY2lkZWQgdG8gcGFzcyBiYWNrIHRvIHVzZXIgdmlhICdwa3RzJyBi dWZmZXIuDQo+ID4+DQo+ID4+IEluIHNlY29uZCBoYWxmLCB0aW1lZCBvdXQgcGFja2V0cyBhcmUg ZGVjaWRlZCB0byB0dXJuIGJhY2sgdG8gdXNlcg0KPiA+PiAoZmx1c2hlZCksIGFzIHRoZXkgYXJl IG5vdCByZWFzc2VtYmxlZCwgYW5kIHRoZXNlIHBhY2tldHMgYXJlIGFkZGVkIHRvDQo+ID4+ICdw a3RzJyBhcnJheSBmb3IgdXNlciwgYnV0ICduYl9hZnRlcl9ncm8nIG5vdCBpbmNyZWFzZWQuIFNv IGhvdyB1c2VyIGNhbg0KPiA+PiBrbm93IGFib3V0IGl0Pw0KPiA+Pg0KPiA+PiBCYXNpY2FsbHks IEkgdGhpbmsgd2Ugc2hvdWxkIHJldHVybiAnaScsIHdoYXQgYW0gSSBtaXNzaW5nLCBjYW4geW91 DQo+ID4+IHBsZWFzZSBkZXRhaWw/DQo+ID4NCj4gPiBBY3R1YWxseSwgYXMgSSB1bmRlcnN0YW5k IHRoZSBsb2dpYyBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IHlvdSBkZXNjcmliZWQgYWJvdmUuDQo+ ID4gQXQgdGhlIHN0YXJ0ICAgbmJfYWZ0ZXJfZ3JvIGVxdWFscyB0byB0b3RhbCBudW1iZXIgb2Yg aW5wdXQgcGFja2V0czoNCj4gPiAgbmJfYWZ0ZXJfZ3JvID0gbmJfcGt0czsNCj4gPiBUaGVuIGxh dGVyLCBmb3IgZWFjaCBwYWNrZXQgdGhhdCB3YXMgbWVyZ2VkIHdpdGggc29tZSBvdGhlciBwYWNr ZXQgaXQgZGVjcmVtZW50czoNCj4gPiByZXQgPSBncm9fLi4uX3JlYXNzZW1ibGUocGt0c1tpXSwg Li4uKTsNCj4gPiBpZiAocmV0ID4gMCkNCj4gPiAgICAgICAvKiBNZXJnZSBzdWNjZXNzZnVsbHkg Ki8NCj4gPiAgICAgIG5iX2FmdGVyX2dyby0tOw0KPiA+DQo+ID4gU28gYXQgdGhlIGVuZCBuYl9h ZnRlcl9ncm8gY29udGFpbnMgbnVtYmVyIG9mIGlucHV0IHBhY2tldHMgbWludXMgbnVtYmVyDQo+ ID4gb2YgcGFja2V0cyB0aGF0IHdlcmUgbWVyZ2VkLg0KPiA+DQo+IA0KPiBXZSBoYXZlIHNhbWUg dW5kZXJzdGFuZGluZyB1cCB0byB0aGlzIHBvaW50LCB0aGlzIGlzIHdoYXQgSSBkZXNjcmliZWQg YXMNCj4gJ2ZpcnN0IGhhbGYgb2YgdGhlIGZ1bmN0aW9uJyBhYm92ZS4NCj4gDQo+IE15IGNvbmNl cm4gaXMgYWJvdXQgdGhlIGZsdXNoaW5nIHRpbWVkIG91dCBwYWNrZXRzLiBUaGV5IGFyZSBjb3Bp ZWQgYmFjaw0KPiB0byAncGt0cycgYXJyYXksIGJ1dCAnbmJfYWZ0ZXJfZ3JvJyBpcyBub3QgdXBk YXRlZCBmb3IgdGhlc2UgcGFja2V0cy4NCg0KSXQgaXMgcHJvYmFibHkgZWFzaWVyIHRvIGRpc2N1 c3MgaXQgb24gc29tZSBleGFtcGxlLg0KTGV0IHNheSB3ZSBoYXZlIDQgaW5wdXQgcGFja2V0czoN CjxwMCwgcDEsIHAyLCBwMz4NCmJvdGggcDAgYW5kIHAxIGJlbG9uZ3MgdG8gdGhlIHNhbWUgVENQ IGZsb3cgYW5kIGNhbiBiZSBtZXJnZWQuDQpwMiBiZWxvbmdzIHRvIGRpZmZlcmVudCB0Y3AgZmxv dw0KcDMgaXMgcmF3IGlwIHBhY2tldCAobm90IHN1YmplY3QgZnJvIEdSTykuDQpUaGVuIGFmdGVy IGZpcnN0IGhhbGYgd2UnbGwgaGF2ZToNCg0KdGNwX3RibD17Li4uLCBtZXJnZWQocDAsIHAxKSwg Li4uIHAyfSANCnVucHJvY2Vzc19wa3RzW109e3AzfSAgICAgICAgICAgIC8qIEkgYW0gdGFsa2lu ZyBhYm91dCBvcmlnaW5hbCBjb2RlIGZvciBub3cgKi8NCnVucHJvY2Vzc19udW09MQ0KbmJfYWZ0 ZXJfZ3JvPT0zICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcnJlY3QgcmV0dXJuIHZhbHVlICov DQoNCk5vdyBpdCBzdGFydHMgdG8gcmUtYXNzZW1ibGUgcGt0c1tdDQpGaXJzdCBjb3B5IGFsbCB1 bnByb2Nlc3NlZCBwYWNrZXRzLg0KVGhlbiBhcyBhbGwgb3VyIEdSTyB0YWJsZXMgIGFyZSB0ZW1w b3JhbCAobG9jYWwgdmFycykgd2UgaGF2ZSB0byBmbHVzaA0KYWxsIHRoZWlyIGNvbnRlbnRzIGJh Y2sgaW50byBwa3RzW10uDQpTbyBpdCBiZWNvbWVzOg0KcGt0c1tdPXtwMywgbWVyZ2VkKHAwLHAx KSwgcDJ9DQpyZXR1cm4gdmFsdWU6IDMNCiANCg0KPiBXaGF0IGlzIHRoZSBwdXJwb3NlIG9mIGNv cHlpbmcgcGFja2V0cyBiYWNrIHRvICdwa3RzJyBhcnJheT8NCj4gDQo+IA0KPiA+IFdoaWNoLCBh cyBJIHVuZGVyc3JhbmQgc2hvdWxkIGJlIGVxdWFsIHRvICdJJyB2YWx1ZS4NCj4gPiBTbywgbm8g Y2hhbmdlIGhlcmUgaXMgbmVjZXNzYXJ5LCBJIHRoaW5rLg0KPiA+IEV4Y2VwdCBwcm9iYWJseSBz b21lIGV4dHJhIGNvbW1lbnQgdG8gYXZvaWQgY29uZnVzaW9uLg0KPiA+DQo+ID4NCj4gPg0KDQo=