From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id A2D30293B for ; Fri, 25 Jan 2019 18:21:30 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jan 2019 09:21:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,522,1539673200"; d="scan'208";a="294415495" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga005.jf.intel.com with ESMTP; 25 Jan 2019 09:21:29 -0800 Received: from FMSMSX109.amr.corp.intel.com (10.18.116.9) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.408.0; Fri, 25 Jan 2019 09:21:29 -0800 Received: from fmsmsx108.amr.corp.intel.com ([169.254.9.99]) by FMSMSX109.amr.corp.intel.com ([169.254.15.96]) with mapi id 14.03.0415.000; Fri, 25 Jan 2019 09:21:28 -0800 From: "Eads, Gage" To: Ola Liljedahl , "dev@dpdk.org" , "jerinj@marvell.com" , "mczekaj@marvell.com" CC: "olivier.matz@6wind.com" , "stephen@networkplumber.org" , nd , "Richardson, Bruce" , "arybchenko@solarflare.com" , "Ananyev, Konstantin" Thread-Topic: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking implementation Thread-Index: AQHUr0H3NsJBTf2hT0+nXGXAmKraP6W7ZOeAgABKckCAAPt7gIADjkUw Date: Fri, 25 Jan 2019 17:21:27 +0000 Message-ID: <9184057F7FC11744A2107296B6B8EB1E541CB6FE@FMSMSX108.amr.corp.intel.com> References: <20190115235227.14013-1-gage.eads@intel.com> <20190118152326.22686-1-gage.eads@intel.com> <20190118152326.22686-3-gage.eads@intel.com> <1548168583.31150.32.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CA46E@FMSMSX108.amr.corp.intel.com> <1548238575.31150.73.camel@arm.com> In-Reply-To: <1548238575.31150.73.camel@arm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMjNiYzc0MmUtZTg0Zi00YjBmLWI1MGQtOGYyMzEwMDNlZTQwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiazRERVlucHhoRGhhSkRXSnoyczR0dW54bXhWeFZzNzlaeSs4RUVuYVg5bURIXC92WU4xTDQ5TDVoRnRFRHVXTEkifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.1.200.107] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 2/5] ring: add a non-blocking implementation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Jan 2019 17:21:31 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogT2xhIExpbGplZGFobCBb bWFpbHRvOk9sYS5MaWxqZWRhaGxAYXJtLmNvbV0NCj4gU2VudDogV2VkbmVzZGF5LCBKYW51YXJ5 IDIzLCAyMDE5IDQ6MTYgQU0NCj4gVG86IEVhZHMsIEdhZ2UgPGdhZ2UuZWFkc0BpbnRlbC5jb20+ OyBkZXZAZHBkay5vcmcNCj4gQ2M6IG9saXZpZXIubWF0ekA2d2luZC5jb207IHN0ZXBoZW5AbmV0 d29ya3BsdW1iZXIub3JnOyBuZA0KPiA8bmRAYXJtLmNvbT47IFJpY2hhcmRzb24sIEJydWNlIDxi cnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47DQo+IGFyeWJjaGVua29Ac29sYXJmbGFyZS5jb207 IEFuYW55ZXYsIEtvbnN0YW50aW4NCj4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+DQo+ IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MyAyLzVdIHJpbmc6IGFkZCBhIG5vbi1i bG9ja2luZyBpbXBsZW1lbnRhdGlvbg0KPiANCj4gT24gVHVlLCAyMDE5LTAxLTIyIGF0IDIxOjMx ICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiA+IEhpIE9sYSwNCj4gPg0KPiA+IDxzbmlwPg0K PiA+DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBAQCAtMzMxLDYgKzQzMywzMTkgQEAgdm9pZCBy dGVfcmluZ19kdW1wKEZJTEUgKmYsIGNvbnN0IHN0cnVjdA0KPiA+ID4gPiBydGVfcmluZyAqcik7 DQo+ID4gPiA+IMKgI2VuZGlmDQo+ID4gPiA+IMKgI2luY2x1ZGUgInJ0ZV9yaW5nX2dlbmVyaWNf NjQuaCINCj4gPiA+ID4NCj4gPiA+ID4gKy8qIEBpbnRlcm5hbCAxMjgtYml0IHN0cnVjdHVyZSB1 c2VkIGJ5IHRoZSBub24tYmxvY2tpbmcgcmluZyAqLw0KPiA+ID4gPiArc3RydWN0IG5iX3Jpbmdf ZW50cnkgew0KPiA+ID4gPiArCXZvaWQgKnB0cjsgLyoqPCBEYXRhIHBvaW50ZXIgKi8NCj4gPiA+ ID4gKwl1aW50NjRfdCBjbnQ7IC8qKjwgTW9kaWZpY2F0aW9uIGNvdW50ZXIgKi8NCj4gPiA+IFdo eSBub3QgbWFrZSAnY250JyB1aW50cHRyX3Q/IFRoaXMgd2F5IDMyLWJpdCBhcmNoaXRlY3R1cmVz IHdpbGwNCj4gPiA+IGFsc28gYmUgc3VwcG9ydGVkLiBJIHRoaW5rIHRoZXJlIGFyZSBzb21lIGNs YWltcyB0aGF0IERQREsgc3RpbGwgc3VwcG9ydHMgZS5nLg0KPiA+ID4gQVJNdjdhDQo+ID4gPiBh bmQgcG9zc2libHkgYWxzbyAzMi1iaXQgeDg2Pw0KPiA+IEkgY2hvc2UgYSA2NC1iaXQgbW9kaWZp Y2F0aW9uIGNvdW50ZXIgYmVjYXVzZSAocHJhY3RpY2FsbHkgc3BlYWtpbmcpDQo+ID4gdGhlIEFC QSBwcm9ibGVtIHdpbGwgbm90IG9jY3VyIHdpdGggc3VjaCBhIGxhcmdlIGNvdW50ZXIgLS0gZGVm aW5pdGVseQ0KPiA+IG5vdCB3aXRoaW4gbXkgbGlmZXRpbWUuIFNlZSB0aGUgIkRpc2N1c3Npb24i IHNlY3Rpb24gb2YgdGhlIGNvbW1pdA0KPiA+IG1lc3NhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24u DQo+ID4NCj4gPiBXaXRoIGEgMzItYml0IGNvdW50ZXIsIHRoZXJlIGlzIGEgdmVyeSAodmVyeSkg bG93IGxpa2VsaWhvb2Qgb2YgaXQsDQo+ID4gYnV0IGl0IGlzIHBvc3NpYmxlLiBQZXJzb25hbGx5 LCBJIGRvbid0IGZlZWwgY29tZm9ydGFibGUgcHJvdmlkaW5nDQo+ID4gc3VjaCBjb2RlLCBiZWNh dXNlIGEpIEkgZG91YnQgYWxsIHVzZXJzIHdvdWxkIHVuZGVyc3RhbmQgdGhlDQo+ID4gaW1wbGVt ZW50YXRpb24gd2VsbCBlbm91Z2ggdG8gZG8gdGhlIHJpc2svcmV3YXJkIGFuYWx5c2lzLCBhbmQg Yikgc3VjaA0KPiA+IGEgYnVnIHdvdWxkIGJlIG5lYXIgaW1wb3NzaWJsZSB0byByZXByb2R1Y2Ug YW5kIHJvb3QtY2F1c2UgaWYgaXQgZGlkIG9jY3VyLg0KPiBXaXRoIGEgNjQtYml0IGNvdW50ZXIg KGFuZCAzMi1iaXQgcG9pbnRlciksIDMyLWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuIEFSTXY3YSBh bmQNCj4gcHJvYmFibHkgeDg2IGFzIHdlbGwpIHdvbid0IGJlIGFibGUgdG8gc3VwcG9ydCB0aGlz IGFzIHRoZXkgYXQgYmVzdCBzdXBwb3J0IDY0LWJpdA0KPiBDQVMgKEFSTXY3YSBoYXMgTERSRVhE L1NUUkVYRCkuIFNvIHlvdSBhcmUgZXNzZW50aWFsbHkgcHV0dGluZyBhIDY0LWJpdCAoYW5kDQo+ IDEyOC1iaXQgQ0FTKSByZXF1aXJlbWVudCBvbiB0aGUgaW1wbGVtZW50YXRpb24uDQo+IA0KDQpZ ZXMsIEkgYW0uIEkgdHJpZWQgdG8gbWFrZSB0aGF0IGNsZWFyIGluIHRoZSBjb3ZlciBsZXR0ZXIu DQoNCj4gPg0KPiA+ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ ID4gPiA+ICsvKiBUaGUgbm9uLWJsb2NraW5nIHJpbmcgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIHRo ZSBvcmlnaW5hbCBydGUNCj4gPiA+ID4gK3JpbmcgKGRlcml2ZWQNCj4gPiA+ID4gKyAqIGZyb20g RnJlZUJTRCdzIGJ1ZnJpbmcuaCkgYW5kIGluc3BpcmVkIGJ5IE1pY2hhZWwgYW5kIFNjb3R0J3MN Cj4gPiA+ID4gK25vbi1ibG9ja2luZw0KPiA+ID4gPiArICogY29uY3VycmVudCBxdWV1ZS4NCj4g PiA+ID4gKyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIEBpbnRlcm5h bA0KPiA+ID4gPiArICrCoMKgwqBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgbm9uLWJs b2NraW5nIHJpbmcNCj4gPiA+ID4gKyhzaW5nbGUtcHJvZHVjZXIgb25seSkNCj4gPiA+ID4gKyAq DQo+ID4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ID4gPiArICrCoMKgwqBBIHBvaW50ZXIgdG8gdGhl IHJpbmcgc3RydWN0dXJlLg0KPiA+ID4gPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiAr ICrCoMKgwqBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVjdHMp Lg0KPiA+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ID4gKyAqwqDCoMKgVGhlIG51bWJlciBvZiBv YmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gPiA+ICsg KiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVFVUVfRklYRUQ6 wqDCoMKgwqBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIHRvDQo+ID4gPiA+ICt0aGUg cmluZw0KPiA+ID4gPiArICrCoMKgwqBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBh cyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ID4gPiA+ICt0byB0aGUgcmluZw0KPiA+ID4gPiAr ICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gPiA+ID4gKyAqwqDCoMKgcmV0dXJucyB0aGUgYW1vdW50 IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMNCj4gPiA+ID4gK2Zpbmlz aGVkDQo+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ICsgKsKgwqDCoEFjdHVhbCBudW1iZXIg b2Ygb2JqZWN0cyBlbnF1ZXVlZC4NCj4gPiA+ID4gKyAqwqDCoMKgSWYgYmVoYXZpb3IgPT0gUlRF X1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ID4gKyAq Lw0KPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4g PiA+ICtfX3J0ZV9yaW5nX2RvX25iX2VucXVldWVfc3Aoc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lk ICogY29uc3QgKm9ial90YWJsZSwNCj4gPiA+ID4gKwkJCcKgwqDCoMKgdW5zaWduZWQgaW50IG4s DQo+ID4gPiA+ICsJCQnCoMKgwqDCoGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZp b3IsDQo+ID4gPiA+ICsJCQnCoMKgwqDCoHVuc2lnbmVkIGludCAqZnJlZV9zcGFjZSkNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKwl1aW50MzJfdCBmcmVlX2VudHJpZXM7DQo+ID4gPiA+ICsJc2l6ZV90 IGhlYWQsIG5leHQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwluID0gX19ydGVfcmluZ19tb3ZlX3By b2RfaGVhZF82NChyLCAxLCBuLCBiZWhhdmlvciwNCj4gPiA+ID4gKwkJCQkJwqAmaGVhZCwgJm5l eHQsICZmcmVlX2VudHJpZXMpOw0KPiA+ID4gPiArCWlmIChuID09IDApDQo+ID4gPiA+ICsJCWdv dG8gZW5kOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJRU5RVUVVRV9QVFJTX05CKHIsICZyWzFdLCBo ZWFkLCBvYmpfdGFibGUsIG4pOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJci0+cHJvZF82NC50YWls ICs9IG47DQo+ID4gPiBEb24ndCB3ZSBuZWVkIHJlbGVhc2Ugb3JkZXIgd2hlbiAob3Igc21wX3dt YiBiZXR3ZWVuKSB3cml0aW5nIG9mIHRoZQ0KPiA+ID4gcmluZyBwb2ludGVycyBhbmQgdGhlIHVw ZGF0ZSBvZiB0YWlsPyBCeSB1cGRhdGluZyB0aGUgdGFpbCBwb2ludGVyLA0KPiA+ID4gd2UgYXJl IHN5bmNocm9uaXNpbmcgd2l0aCBhIGNvbnN1bWVyLg0KPiA+ID4NCj4gPiA+IEkgcHJlZmVyIHVz aW5nIF9fYXRvbWljIG9wZXJhdGlvbnMgZXZlbiBmb3IgbG9hZCBhbmQgc3RvcmUuIFlvdSBjYW4N Cj4gPiA+IHNlZSB3aGljaCBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IHN5bmNocm9uaXNlIHdpdGgg ZWFjaCBvdGhlciwgZS5nLg0KPiA+ID4gc3RvcmUtcmVsZWFzZSB0byBzb21lIGxvY2F0aW9uIHN5 bmNocm9uaXNlcyB3aXRoIGxvYWQtYWNxdWlyZSBmcm9tDQo+ID4gPiB0aGUgc2FtZSBsb2NhdGlv bi4gSWYgeW91IGRvbid0IGtub3cgaG93IGRpZmZlcmVudCB0aHJlYWRzDQo+ID4gPiBzeW5jaHJv bmlzZSB3aXRoIGVhY2ggb3RoZXIsIHlvdSBhcmUgdmVyeSBsaWtlbHkgdG8gbWFrZSBtaXN0YWtl cy4NCj4gPiA+DQo+ID4gWW91IGNhbiB0ZWxsIHRoaXMgY29kZSB3YXMgd3JpdHRlbiB3aGVuIEkg dGhvdWdodCB4ODYtNjQgd2FzIHRoZSBvbmx5DQo+ID4gdmlhYmxlIHRhcmdldCA6KS4gWWVzLCB5 b3UgYXJlIGNvcnJlY3QuDQo+ID4NCj4gPiBXaXRoIHJlZ2FyZHMgdG8gdXNpbmcgX19hdG9taWMg aW50cmluc2ljcywgSSdtIHBsYW5uaW5nIG9uIHRha2luZyBhDQo+ID4gc2ltaWxhciBhcHByb2Fj aCB0byB0aGUgZnVuY3Rpb25zIGR1cGxpY2F0ZWQgaW4gcnRlX3JpbmdfZ2VuZXJpYy5oIGFuZA0K PiA+IHJ0ZV9yaW5nX2MxMV9tZW0uaDogb25lIHZlcnNpb24gdGhhdCB1c2VzIHJ0ZV9hdG9taWMg ZnVuY3Rpb25zIChhbmQNCj4gPiB0aHVzIHN0cmljdGVyIG1lbW9yeSBvcmRlcmluZykgYW5kIG9u ZSB0aGF0IHVzZXMgX19hdG9taWMgaW50cmluc2ljcw0KPiA+IChhbmQgdGh1cyBjYW4gYmVuZWZp dCBmcm9tIG1vcmUgcmVsYXhlZCBtZW1vcnkgb3JkZXJpbmcpLg0KPiBXaGF0J3MgdGhlIGFkdmFu dGFnZSBvZiBoYXZpbmcgdHdvIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnM/IFdoYXQgaXMgdGhl DQo+IGRpc2FkdmFudGFnZT8NCj4gDQo+IFRoZSBleGlzdGluZyByaW5nIGJ1ZmZlciBjb2RlIG9y aWdpbmFsbHkgaGFkIG9ubHkgdGhlICJsZWdhY3kiIGltcGxlbWVudGF0aW9uDQo+IHdoaWNoIHdh cyBrZXB0IHdoZW4gdGhlIF9fYXRvbWljIGltcGxlbWVudGF0aW9uIHdhcyBhZGRlZC4gVGhlIHJl YXNvbg0KPiBjbGFpbWVkIHdhcyB0aGF0IHNvbWUgb2xkZXIgY29tcGlsZXJzIGZvciB4ODYgZG8g bm90IHN1cHBvcnQgR0NDIF9fYXRvbWljDQo+IGJ1aWx0aW5zLiBCdXQgSSB0aG91Z2h0IHRoZXJl IHdhcyBjb25zZW5zdXMgdGhhdCBuZXcgZnVuY3Rpb25hbGl0eSBjb3VsZCBoYXZlDQo+IG9ubHkg X19hdG9taWMgaW1wbGVtZW50YXRpb25zLg0KPiANCg0KV2hlbiBDT05GSUdfUlRFX1JJTkdfVVNF X0MxMV9NRU1fTU9ERUwgd2FzIGludHJvZHVjZWQsIGl0IHdhcyBsZWZ0IGRpc2FibGVkIGZvciB0 aHVuZGVyeFsxXSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gQXNzdW1pbmcgdGhhdCBoYXNuJ3Qg Y2hhbmdlZCwgdGhlIGFkdmFudGFnZSB0byBoYXZpbmcgdHdvIHZlcnNpb25zIGlzIHRvIGJlc3Qg c3VwcG9ydCBhbGwgb2YgRFBESydzIHBsYXRmb3Jtcy4gVGhlIGRpc2FkdmFudGFnZSBpcyBvZiBj b3Vyc2UgZHVwbGljYXRlZCBjb2RlIGFuZCB0aGUgYWRkaXRpb25hbCBtYWludGVuYW5jZSBidXJk ZW4uDQoNClRoYXQgc2FpZCwgaWYgdGhlIHRodW5kZXJ4IG1haW50YWluZXJzIGFyZSBvayB3aXRo IGl0LCBJJ20gY2VydGFpbmx5IG9wZW4gdG8gb25seSBkb2luZyB0aGUgX19hdG9taWMgdmVyc2lv bi4gTm90ZSB0aGF0IGV2ZW4gaW4gdGhlIF9fYXRvbWljIHZlcnNpb24sIGJhc2VkIG9uIEhvbm5h cGEncyBmaW5kaW5nc1syXSwgdXNpbmcgYSBEUERLLWRlZmluZWQgcnRlX2F0b21pYzEyOF9jbXBz ZXQoKSAod2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBzdXBwb3J0IG1hY2hpbmVzIHdpdGgg d2VhayBjb25zaXN0ZW5jeSkgYXBwZWFycyB0byBiZSBhIGJldHRlciBvcHRpb24gdGhhbiBfX2F0 b21pY19jb21wYXJlX2V4Y2hhbmdlXzE2Lg0KDQpJIGNvdWxkbid0IGZpbmQgdGhlIGRpc2N1c3Np b24gYWJvdXQgbmV3IGZ1bmN0aW9uYWxpdHkgdXNpbmcgX19hdG9taWMgZ29pbmcgZm9yd2FyZCAt LSBjYW4geW91IHNlbmQgYSBsaW5rPw0KDQpbMV0gaHR0cHM6Ly9tYWlscy5kcGRrLm9yZy9hcmNo aXZlcy9kZXYvMjAxNy1EZWNlbWJlci8wODI4NTMuaHRtbA0KWzJdIGh0dHA6Ly9tYWlscy5kcGRr Lm9yZy9hcmNoaXZlcy9kZXYvMjAxOS1KYW51YXJ5LzEyNDAwMi5odG1sDQoNCj4gRG9lcyB0aGUg bm9uLWJsb2NraW5nIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uIGhhdmUgdG8gc3VwcG9ydCB0 aGVzZSBvbGRlcg0KPiBjb21waWxlcnM/IFdpbGwgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVp cmUgdGhlc2Ugb2xkZXIgY29tcGlsZXIgYmUgdXBkYXRlZCB0bw0KPiB1dGlsaXNlIHRoZSBub24t YmxvY2tpbmcgcmluZyBidWZmZXI/DQo+IA0KDQooU2VlIGFib3ZlIC0tIGNvbXBpbGVyIHZlcnNp b25zIHdhc24ndCBhIGNvbnNpZGVyYXRpb24gaGVyZS4pDQoNCj4gPg0KPiA+ID4NCj4gPiA+ID4N Cj4gPiA+ID4gKw0KPiA+ID4gPiArZW5kOg0KPiA+ID4gPiArCWlmIChmcmVlX3NwYWNlICE9IE5V TEwpDQo+ID4gPiA+ICsJCSpmcmVlX3NwYWNlID0gZnJlZV9lbnRyaWVzIC0gbjsNCj4gPiA+ID4g KwlyZXR1cm4gbjsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ ICsgKiBAaW50ZXJuYWwNCj4gPiA+ID4gKyAqwqDCoMKgRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMg b24gdGhlIG5vbi1ibG9ja2luZyByaW5nDQo+ID4gPiA+ICsobXVsdGktcHJvZHVjZXINCj4gPiA+ ID4gK3NhZmUpDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFtIHINCj4gPiA+ID4gKyAq wqDCoMKgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ID4gKyAqIEBwYXJh bSBvYmpfdGFibGUNCj4gPiA+ID4gKyAqwqDCoMKgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9p ZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ICsg KsKgwqDCoFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUg b2JqX3RhYmxlLg0KPiA+ID4gPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ICsgKsKgwqDC oFJURV9SSU5HX1FVRVVFX0ZJWEVEOsKgwqDCoMKgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBp dGVtcyB0bw0KPiA+ID4gPiArdGhlIHJpbmcNCj4gPiA+ID4gKyAqwqDCoMKgUlRFX1JJTkdfUVVF VUVfVkFSSUFCTEU6IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiA+ID4gPiAr dG8gdGhlIHJpbmcNCj4gPiA+ID4gKyAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ID4gPiA+ICsgKsKg wqDCoHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRp b24gaGFzDQo+ID4gPiA+ICtmaW5pc2hlZA0KPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiAr ICrCoMKgwqBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ICsgKsKg wqDCoElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBv ciBuIG9ubHkuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5s aW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiArX19ydGVfcmluZ19kb19uYl9lbnF1ZXVlX21wKHN0 cnVjdCBydGVfcmluZyAqciwgdm9pZCAqIGNvbnN0DQo+ICpvYmpfdGFibGUsDQo+ID4gPiA+ICsJ CQnCoMKgwqDCoHVuc2lnbmVkIGludCBuLA0KPiA+ID4gPiArCQkJwqDCoMKgwqBlbnVtIHJ0ZV9y aW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ID4gPiArCQkJwqDCoMKgwqB1bnNpZ25l ZCBpbnQgKmZyZWVfc3BhY2UpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsjaWYgIWRlZmluZWQoUlRF X0FSQ0hfWDg2XzY0KSB8fCAhZGVmaW5lZChBTExPV19FWFBFUklNRU5UQUxfQVBJKQ0KPiA+ID4g PiArCVJURV9TRVRfVVNFRChyKTsNCj4gPiA+ID4gKwlSVEVfU0VUX1VTRUQob2JqX3RhYmxlKTsN Cj4gPiA+ID4gKwlSVEVfU0VUX1VTRUQobik7DQo+ID4gPiA+ICsJUlRFX1NFVF9VU0VEKGJlaGF2 aW9yKTsNCj4gPiA+ID4gKwlSVEVfU0VUX1VTRUQoZnJlZV9zcGFjZSk7DQo+ID4gPiA+ICsjaWZu ZGVmIEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkNCj4gPiA+ID4gKwlwcmludGYoIlslcygpXSBSSU5H X0ZfTkIgcmVxdWlyZXMgYW4gZXhwZXJpbWVudGFsIEFQSS4iDQo+ID4gPiA+ICsJwqDCoMKgwqDC oMKgwqAiIFJlY29tcGlsZSB3aXRoIEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkgdG8gdXNlIGl0Llxu Ig0KPiA+ID4gPiArCcKgwqDCoMKgwqDCoMKgLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ICsjZW5kaWYN Cj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiArI2lmIGRlZmlu ZWQoUlRFX0FSQ0hfWDg2XzY0KSAmJiBkZWZpbmVkKEFMTE9XX0VYUEVSSU1FTlRBTF9BUEkpDQo+ ID4gPiA+ICsJc2l6ZV90IGhlYWQsIG5leHQsIHRhaWw7DQo+ID4gPiA+ICsJdWludDMyX3QgZnJl ZV9lbnRyaWVzOw0KPiA+ID4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJbiA9IF9fcnRlX3JpbmdfbW92ZV9wcm9kX2hlYWRfNjQociwgMCwgbiwgYmVoYXZpb3IsDQo+ ID4gPiA+ICsJCQkJCcKgJmhlYWQsICZuZXh0LCAmZnJlZV9lbnRyaWVzKTsNCj4gPiA+ID4gKwlp ZiAobiA9PSAwKQ0KPiA+ID4gPiArCQlnb3RvIGVuZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWZv ciAoaSA9IDA7IGkgPCBuOyAvKiBpIGluY3JlbWVudGVkIGlmIGVucXVldWUgc3VjY2VlZHMgKi8p IHsNCj4gPiA+ID4gKwkJc3RydWN0IG5iX3JpbmdfZW50cnkgb2xkX3ZhbHVlLCBuZXdfdmFsdWU7 DQo+ID4gPiA+ICsJCXN0cnVjdCBuYl9yaW5nX2VudHJ5ICpyaW5nX3B0cjsNCj4gPiA+ID4gKw0K PiA+ID4gPiArCQkvKiBFbnF1ZXVlIHRvIHRoZSB0YWlsIGVudHJ5LiBJZiBhbm90aGVyIHRocmVh ZCB3aW5zIHRoZQ0KPiA+ID4gPiByYWNlLA0KPiA+ID4gPiArCQnCoCogcmV0cnkgd2l0aCB0aGUg bmV3IHRhaWwuDQo+ID4gPiA+ICsJCcKgKi8NCj4gPiA+ID4gKwkJdGFpbCA9IHItPnByb2RfNjQu dGFpbDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlyaW5nX3B0ciA9ICYoKHN0cnVjdCBuYl9yaW5n X2VudHJ5ICopJnJbMV0pW3RhaWwgJiByLQ0KPiA+ID4gPiA+bWFza107DQo+ID4gPiBUaGlzIGlz IGFuIHVnbHkgZXhwcmVzc2lvbiBhbmQgY2FzdC4gQWxzbyBJIHRoaW5rIGl0IGlzIHVubmVjZXNz YXJ5Lg0KPiA+ID4gV2hhdCdzIHByZXZlbnRpbmcgdGhpcyBmcm9tIGJlaW5nIHdyaXR0ZW4gd2l0 aG91dCBhIGNhc3Q/IFBlcmhhcHMNCj4gPiA+IHRoZSByaW5nIGFycmF5IG5lZWRzIHRvIGJlIGEg dW5pb24gb2YgInZvaWQgKiIgYW5kIHN0cnVjdA0KPiA+ID4gbmJfcmluZ19lbnRyeT8NCj4gPiBU aGUgY2FzdCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBjb3JyZWN0IHBvaW50ZXIgYXJpdGhtZXRpYyAo bGV0DQo+ID4gInVpbnRwdHJfdCBiYXNlID09ICZyWzFdIik6DQo+IFllcyBJIGtub3cgdGhlIEMg bGFuZ3VhZ2UuDQo+IA0KPiA+IC0gV2l0aCBjYXN0OiByaW5nX3B0ciA9IGJhc2UgKyBzaXplb2Yo c3RydWN0IG5iX3JpbmdfZW50cnkpICogKHRhaWwgJg0KPiA+IHItDQo+ID4gPm1hc2spOw0KPiA+ IC0gVy9vIGNhc3Q6IHJpbmdfcHRyID0gYmFzZSArIHNpemVvZihzdHJ1Y3QgcnRlX3JpbmcpICog KHRhaWwgJg0KPiA+IHItPm1hc2spOw0KPiA+DQo+ID4gRldJVywgdGhpcyBpcyBlc3NlbnRpYWxs eSB0aGUgc2FtZSBhcyBpcyBkb25lIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudA0KPiA+ICgmclsx XSkgdG8gRU5RVUVVRV9QVFJTIGFuZCBERVFVRVVFX1BUUlMsIGJ1dCB0aGVyZSBpdCdzIHNwbGl0 IGFjcm9zcw0KPiA+IG11bHRpcGxlIGxpbmVzIG9mIGNvZGUuIFRoZSBlcXVpdmFsZW50IGhlcmUg d291bGQgYmU6DQo+ID4NCj4gPiBzdHJ1Y3QgbmJfcmluZ19lbnRyeSAqcmluZ19iYXNlID0gKHN0 cnVjdCBuYl9yaW5nX2VudHJ5KikmclsxXTsNCj4gPiByaW5nX3B0ciA9IHJpbmdfYmFzZVt0YWls ICYgci0+bWFza107DQo+ID4NCj4gPiBXaGljaCBpcyBtb3JlIGxlZ2libGUsIEkgdGhpbmsuDQo+ IFRoZSBSVEUgcmluZyBidWZmZXIgY29kZSBpcyBub3QgdmVyeSBsZWdpYmxlIHRvIHN0YXJ0IHdp dGguDQo+IA0KPiA+DQo+ID4gVGhlcmUgaXMgbm8gcmluZyBhcnJheSBzdHJ1Y3R1cmUgaW4gd2hp Y2ggdG8gYWRkIGEgdW5pb247IHRoZSByaW5nDQo+ID4gYXJyYXkgaXMgYSBjb250aWd1b3VzIGNo dW5rIG9mIG1lbW9yeSB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgYWZ0ZXINCj4gPiB0aGUgZW5k IG9mIGEgc3RydWN0IHJ0ZV9yaW5nLiBXZSBpbnRlcnByZXQgdGhlIG1lbW9yeSB0aGVyZSBhY2Nv cmRpbmcNCj4gPiB0byB0aGUgcmluZyBlbnRyeSBkYXRhIHR5cGUgKHZvaWQgKiBmb3IgcmVndWxh ciByaW5ncyBhbmQgc3RydWN0IG5iX3JpbmdfZW50cnkgZm9yDQo+IG5vbi1ibG9ja2luZyByaW5n cykuDQo+IE15IHdvcnJ5IGlzIHRoYXQgd2UgYXJlIGFidXNpbmcgdGhlIEMgbGFuZ3VhZ2UgYW5k IGNyZWF0aW5nIGEgbW9uc3RlciBvZg0KPiBmcmFnaWxlIEMgY29kZSB0aGF0IHdpbGwgYmUgbW9y ZSBhbmQgbW9yZSBkaWZmaWN1bHQgdG8gdW5kZXJzdGFuZCBhbmQgdG8NCj4gbWFpbnRhaW4uIEF0 IHNvbWUgcG9pbnQgeW91IGhhdmUgdG8gdGhpbmsgdGhlIHF1ZXN0aW9uICJBcmUgd2UgZG9pbmcg dGhlIHJpZ2h0DQo+IHRoaW5nPyIuDQo+DQoNCkknbSBub3QgYXdhcmUgb2YgYW55IGZyYWdpbGl0 eS9tYWludGFpbmFiaWxpdHkgaXNzdWVzIGluIHRoZSByaW5nIGNvZGUgKHRob3VnaCBwZXJoYXBz IHRoZSBtYWludGFpbmVycyBoYXZlIGEgZGlmZmVyZW50IHZpZXchKSwgYW5kIHBlcnNvbmFsbHkg SSBmaW5kIHRoZSBjb2RlIGZhaXJseSBsZWdpYmxlLiBJZiB5b3UgaGF2ZSBhIHNwZWNpZmljIHN1 Z2dlc3Rpb24sIEknbGwgbG9vayBpbnRvIGluY29ycG9yYXRpbmcgaXQuDQoNClRoYW5rcywNCkdh Z2UNCg0KPC9zbmlwPg0K