From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ola Liljedahl Subject: Re: [PATCH 1/1] eal: add 128-bit cmpset (x86-64 only) Date: Fri, 1 Feb 2019 19:43:53 +0000 Message-ID: <1549050246.20325.45.camel@arm.com> References: <20190128172945.27251-1-gage.eads@intel.com> <20190128172945.27251-2-gage.eads@intel.com> <1548716507.11472.96.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CE1FE@FMSMSX108.amr.corp.intel.com> <1549047709.20325.35.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CE2CE@FMSMSX108.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "jerinj@marvell.com" , "chaozhu@linux.vnet.ibm.com" , nd , "bruce.richardson@intel.com" , "konstantin.ananyev@intel.com" , "hemant.agrawal@nxp.com" , "olivier.matz@6wind.com" , "arybchenko@solarflare.com" , "Gavin Hu (Arm Technology China)" , Honnappa Nagarahalli To: "gage.eads@intel.com" , "dev@dpdk.org" Return-path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140053.outbound.protection.outlook.com [40.107.14.53]) by dpdk.org (Postfix) with ESMTP id 2E71D1B4FC for ; Fri, 1 Feb 2019 20:43:55 +0100 (CET) In-Reply-To: <9184057F7FC11744A2107296B6B8EB1E541CE2CE@FMSMSX108.amr.corp.intel.com> Content-Language: en-US Content-ID: List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" T24gRnJpLCAyMDE5LTAyLTAxIGF0IDE5OjI4ICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiAN Cj4gPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE9sYSBMaWxq ZWRhaGwgW21haWx0bzpPbGEuTGlsamVkYWhsQGFybS5jb21dDQo+ID4gU2VudDogRnJpZGF5LCBG ZWJydWFyeSAxLCAyMDE5IDE6MDIgUE0NCj4gPiBUbzogRWFkcywgR2FnZSA8Z2FnZS5lYWRzQGlu dGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiA+IENjOiBqZXJpbmpAbWFydmVsbC5jb207IGNoYW96 aHVAbGludXgudm5ldC5pYm0uY29tOyBuZCA8bmRAYXJtLmNvbT47DQo+ID4gUmljaGFyZHNvbiwg QnJ1Y2UgPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgQW5hbnlldiwgS29uc3RhbnRpbg0K PiA+IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPjsgaGVtYW50LmFncmF3YWxAbnhwLmNv bTsNCj4gPiBvbGl2aWVyLm1hdHpANndpbmQuY29tOyBhcnliY2hlbmtvQHNvbGFyZmxhcmUuY29t OyBHYXZpbiBIdSAoQXJtDQo+ID4gVGVjaG5vbG9neSBDaGluYSkgPEdhdmluLkh1QGFybS5jb20+ OyBIb25uYXBwYSBOYWdhcmFoYWxsaQ0KPiA+IDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29t Pg0KPiA+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCAxLzFdIGVhbDogYWRkIDEyOC1i aXQgY21wc2V0ICh4ODYtNjQgb25seSkNCj4gPiANCj4gPiBPbiBGcmksIDIwMTktMDItMDEgYXQg MTc6MDYgKzAwMDAsIEVhZHMsIEdhZ2Ugd3JvdGU6DQo+ID4gPiANCj4gPiA+IA0KPiA+ID4gPiAN Cj4gPiA+ID4gDQo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+IEZy b206IE9sYSBMaWxqZWRhaGwgW21haWx0bzpPbGEuTGlsamVkYWhsQGFybS5jb21dDQo+ID4gPiA+ IFNlbnQ6IE1vbmRheSwgSmFudWFyeSAyOCwgMjAxOSA1OjAyIFBNDQo+ID4gPiA+IFRvOiBFYWRz LCBHYWdlIDxnYWdlLmVhZHNAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnDQo+ID4gPiA+IENjOiBh cnliY2hlbmtvQHNvbGFyZmxhcmUuY29tOyBqZXJpbmpAbWFydmVsbC5jb207DQo+ID4gPiA+IGNo YW96aHVAbGludXgudm5ldC5pYm0uY29tOyBuZCA8bmRAYXJtLmNvbT47IFJpY2hhcmRzb24sIEJy dWNlDQo+ID4gPiA+IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IEFuYW55ZXYsIEtvbnN0 YW50aW4NCj4gPiA+ID4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+OyBoZW1hbnQuYWdy YXdhbEBueHAuY29tOw0KPiA+ID4gPiBvbGl2aWVyLm1hdHpANndpbmQuY29tOyBIb25uYXBwYSBO YWdhcmFoYWxsaQ0KPiA+ID4gPiA8SG9ubmFwcGEuTmFnYXJhaGFsbGlAYXJtLmNvbT47IEdhdmlu IEh1IChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gPiA+ID4gPEdhdmluLkh1QGFybS5jb20+DQo+ ID4gPiA+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCAxLzFdIGVhbDogYWRkIDEyOC1i aXQgY21wc2V0ICh4ODYtNjQNCj4gPiA+ID4gb25seSkNCj4gPiA+ID4gDQo+ID4gPiA+IE9uIE1v biwgMjAxOS0wMS0yOCBhdCAxMToyOSAtMDYwMCwgR2FnZSBFYWRzIHdyb3RlOg0KPiA+ID4gPiA+ IA0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIGZvciBu b24tYmxvY2tpbmcgYWxnb3JpdGhtcywgc3VjaCBhcyBhDQo+ID4gPiA+ID4gbm9uLWJsb2NraW5n IHN0YWNrIG9yIHJpbmcuDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogR2Fn ZSBFYWRzIDxnYWdlLmVhZHNAaW50ZWwuY29tPg0KPiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+IMKg Li4uL2NvbW1vbi9pbmNsdWRlL2FyY2gveDg2L3J0ZV9hdG9taWNfNjQuaMKgwqDCoMKgwqDCoMKg wqB8IDMxDQo+ID4gPiA+ID4gKysrKysrKysrKysNCj4gPiA+ID4gPiDCoGxpYi9saWJydGVfZWFs L2NvbW1vbi9pbmNsdWRlL2dlbmVyaWMvcnRlX2F0b21pYy5oIHwgNjUNCj4gPiA+ID4gPiArKysr KysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ID4gwqAyIGZpbGVzIGNoYW5nZWQsIDk2IGluc2Vy dGlvbnMoKykNCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBkaWZmIC0tZ2l0DQo+ID4gPiA+ID4gYS9s aWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9hcmNoL3g4Ni9ydGVfYXRvbWljXzY0LmgNCj4g PiA+ID4gPiBiL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL2FyY2gveDg2L3J0ZV9hdG9t aWNfNjQuaA0KPiA+ID4gPiA+IGluZGV4IGZkMmVjOWM1My4uYjdiOTBiODNlIDEwMDY0NA0KPiA+ ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL2FyY2gveDg2L3J0ZV9h dG9taWNfNjQuaA0KPiA+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRl L2FyY2gveDg2L3J0ZV9hdG9taWNfNjQuaA0KPiA+ID4gPiA+IEBAIC0zNCw2ICszNCw3IEBADQo+ ID4gPiA+ID4gwqAvKg0KPiA+ID4gPiA+IMKgICogSW5zcGlyZWQgZnJvbSBGcmVlQlNEIHNyYy9z eXMvYW1kNjQvaW5jbHVkZS9hdG9taWMuaA0KPiA+ID4gPiA+IMKgICogQ29weXJpZ2h0IChjKSAx OTk4IERvdWcgUmFic29uDQo+ID4gPiA+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBD b3Jwb3JhdGlvbg0KPiA+ID4gPiA+IMKgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiA+ID4g PiDCoCAqLw0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IEBAIC00Niw2ICs0Nyw3IEBADQo+ID4gPiA+ ID4gDQo+ID4gPiA+ID4gwqAjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gPiA+ID4gwqAjaW5jbHVk ZSA8cnRlX2NvbW1vbi5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX2NvbXBhdC5oPg0KPiA+ ID4gPiA+IMKgI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiDC oC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA2NCBiaXQgYXRvbWljIG9wZXJhdGlvbnMNCj4g PiA+ID4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLSovIEBAIC0yMDgsNCArMjEwLDMzIEBA IHN0YXRpYyBpbmxpbmUNCj4gPiA+ID4gPiB2b2lkIHJ0ZV9hdG9taWM2NF9jbGVhcihydGVfYXRv bWljNjRfdCAqdikNCj4gPiA+ID4gPiDCoH0NCj4gPiA+ID4gPiDCoCNlbmRpZg0KPiA+ID4gPiA+ IA0KPiA+ID4gPiA+ICtzdGF0aWMgaW5saW5lIGludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ ID4gX19ydGVfYWx3YXlzX2lubGluZT8NCj4gPiA+ID4gDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4g DQo+ID4gPiA+ID4gK3J0ZV9hdG9taWMxMjhfY21wc2V0KHZvbGF0aWxlIHJ0ZV9pbnQxMjhfdCAq ZHN0LA0KPiA+ID4gPiBObyBuZWVkIHRvIGRlY2xhcmUgdGhlIGxvY2F0aW9uIHZvbGF0aWxlLiBW b2xhdGlsZSBkb2Vzbid0IGRvIHdoYXQNCj4gPiA+ID4geW91IHRoaW5rIGl0IGRvZXMuDQo+ID4g PiA+IGh0dHBzOi8veW91dHUuYmUvbGtnc3prUG5WOGc/dD0xMDI3DQo+ID4gPiA+IA0KPiA+ID4g SSBtYWRlIHRoaXMgdm9sYXRpbGUgdG8gbWF0Y2ggdGhlIGV4aXN0aW5nIHJ0ZV9hdG9taWNOX2Nt cHNldA0KPiA+ID4gZGVmaW5pdGlvbnMsIHdoaWNoIHByZXN1bWFibHkgaGF2ZSBhIGdvb2QgcmVh c29uIGZvciB1c2luZyB0aGUNCj4gPiA+IGtleXdvcmQuIE1haW50YWluZXJzLCBhbnkgaW5wdXQg aGVyZT8NCj4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiA+IA0K PiA+ID4gPiA+IA0KPiA+ID4gPiA+ICsJCcKgwqDCoMKgwqBydGVfaW50MTI4X3QgKmV4cCwNCj4g PiA+ID4gSSB3b3VsZCBkZWNsYXJlICdleHAnIGNvbnN0IGFzIHdlbGwgYW5kIGRvY3VtZW50IHRo YXQgJ2V4cCcgaXMgbm90DQo+ID4gPiA+IHVwZGF0ZWQgKHdpdGggdGhlIG9sZCB2YWx1ZSkgZm9y IGEgZmFpbHVyZS4gVGhlIHJlYXNvbiBiZWluZyB0aGF0DQo+ID4gPiA+IEFSTXY4LjAvQUFyY2g2 NCBjYW5ub3QgYXRvbWljYWxseSByZWFkIHRoZSBvbGQgdmFsdWUgd2l0aG91dCBhbHNvDQo+ID4g PiA+IHdyaXRpbmcgdGhlIGxvY2F0aW9uIGFuZCB0aGF0IGlzIGJhZCBmb3IgcGVyZm9ybWFuY2Ug KHVubmVjZXNzYXJ5DQo+ID4gPiA+IHdyaXRlcyBsZWFkcyB0byB1bm5lY2Vzc2FyeSBjb250ZW50 aW9uIGFuZCB3b3JzZSBzY2FsYWJpbGl0eSkuIEFuZA0KPiA+ID4gPiB0aGUgdXNlciBtdXN0IGFu eXdheSByZWFkIHRoZSBsb2NhdGlvbiAoaW4gdGhlIHN0YXJ0IG9mIHRoZSBjcml0aWNhbA0KPiA+ ID4gPiBzZWN0aW9uKSB1c2luZyBlLmcuIG5vbi1hdG9taWMgNjQtYml0IHJlYWRzIHNvIHRoZXJl IGlzbid0IGFjdHVhbGx5DQo+ID4gPiA+IGFueSByZXF1aXJlbWVudCBmb3IgYW4gYXRvbWljIDEy OC1iaXQgcmVhZCBvZiB0aGUgbG9jYXRpb24uDQo+ID4gPiA+IA0KPiA+ID4gV2lsbCBjaGFuZ2Ug aW4gdjIuDQo+ID4gPiANCj4gPiA+ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+ IA0KPiA+ID4gPiA+IMKgcnRlX2ludDEyOF90ICpzcmMsDQo+ID4gPiA+IGNvbnN0IHJ0ZV9pbnQx MjhfdCAqc3JjPw0KPiA+ID4gU3VyZSwgSSBkb24ndCBzZWUgYW55IGhhcm0gaW4gdXNpbmcgY29u c3QuDQo+ID4gPiANCj4gPiA+ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gQnV0IHdo eSBhcmUgd2Ugbm90IHBhc3NpbmcgJ2V4cCcgYW5kICdzcmMnIGJ5IHZhbHVlPyBUaGF0IHdvcmtz DQo+ID4gPiA+IGdyZWF0LCBldmVuIHdpdGggc3RydWN0cy4gUGFzc2luZyBieSB2YWx1ZSBzaW1w bGlmaWVzIHRoZSBjb21waWxlcidzDQo+ID4gPiA+IGxpZmUsIGVzcGVjaWFsbHkgaWYgdGhlIGNh bGwgaXMgaW5saW5lZC4gQXNrIGEgY29tcGlsZXIgZGV2ZWxvcGVyLg0KPiA+ID4gSSByYW4gb2Jq ZHVtcCBvbiB0aGUgbmJfc3RhY2sgY29kZSB3aXRoIGJvdGggYXBwcm9hY2hlcywgYW5kDQo+ID4g PiBwYXNzLWJ5LXJlZmVyZW5jZSByZXN1bHRlZCBpbiBmZXdlciBvdmVyYWxsIHg4Nl82NCBhc3Nl bWJseSBvcHMuDQo+ID4gPiBQQlY6IDEwMCBvcHMgZm9yIHB1c2gsIDk3IG9wcyBmb3IgcG9wDQo+ ID4gPiBQQlI6IDkyIG9wcyBmb3IgcHVzaCwgODQgb3BzIGZvciBwb3ANCj4gPiBPSyBJIGhhdmUg bmV2ZXIgY2hlY2tlZCB4ODZfNjQgY29kZSBnZW5lcmF0aW9uLi4uIEkgaGF2ZSBnb29kIGV4cGVy aWVuY2VzDQo+ID4gd2l0aCBBUk0vQUFyY2g2NCwgZXZlcnl0aGluZyBzZWVtcyB0byBiZSBkb25l IHVzaW5nIHJlZ2lzdGVycy4gSSBhbQ0KPiA+IHN1cnByaXNlZA0KPiA+IHRoZXJlIGlzIGEgZGlm ZmVyZW5jZS4NCj4gPiANCj4gPiBEaWQgYSBxdWljayBjaGVjayB3aXRoIGxmcmluZywgcGFzc2lu ZyAnc3JjJyAodGhpcmQgcGFyYW0pIGJ5IHJlZmVyZW5jZSBhbmQNCj4gPiBieQ0KPiA+IHZhbHVl LiBObyBkaWZmZXJlbmNlIGluIGNvZGUgZ2VuZXJhdGlvbiBvbiB4ODZfNjQuDQo+ID4gDQo+ID4g QnV0IGlmIHlvdSBpbnNpc3QgbGV0J3MgZ28gd2l0aCBQQlIuDQo+ID4gDQo+ID4gPiANCj4gPiA+ IA0KPiA+ID4gKFVzaW5nIHRoZSBpbi1wcm9ncmVzcyB2NSBuYl9zdGFjayBjb2RlKQ0KPiA+ID4g DQo+ID4gPiBBbm90aGVyIGZhY3RvciAtLSB0aG91Z2ggbXVjaCBsZXNzIGNvbXBlbGxpbmcgLS0g aXMgdGhhdCB3aXRoIHBhc3MtYnktDQo+ID4gPiByZWZlcmVuY2UsIHRoZSB1c2VyIGNhbiBjcmVh dGUgYSAxNkIgc3RydWN0dXJlIGFuZCBjYXN0IGl0IHRvDQo+ID4gPiBydGVfaW50MTI4X3Qgd2hl biB0aGV5IGNhbGwgcnRlX2F0b21pYzEyOF9jbXBzZXQsIHdoZXJlYXMgd2l0aA0KPiA+ID4gcGFz cy1ieS12YWx1ZSB0aGV5IG5lZWQgdG8gcHV0IHRoYXQgc3RydWN0IGluIGEgdW5pb24gd2l0aCBy dGVfaW50MTI4X3QuDQo+ID4gV2hpY2ggaXMgd2hhdCBJIGFsd2F5cyBkbyBub3dhZGF5cy4uLiBU cnlpbmcgdG8gdXNlIGFzIGZldyBjYXN0cyBhcyBwb3NzaWJsZQ0KPiA+IGFuZA0KPiA+IGxpZSB0 byB0aGUgY29tcGlsZXIgYXMgc2VsZG9tIGFzIHBvc3NpYmxlLiBCdXQgSSBjYW4gc2VlIHRoZSBm cmVlZG9tDQo+ID4gcHJvdmlkZWQgYnkNCj4gPiB0YWtpbmcgYSBwb2ludGVyIHRvIHNvbWV0aGlu ZyBhbmQgY2FzdCBpdCBpdCBydGVfaW50MTI4X3QgcHRyIGluIHRoZSBjYWxsDQo+ID4gdG/CoHJ0 ZV9hdG9taWMxMjhfY21wc2V0KCkuDQo+ID4gDQo+ID4gV291bGQgcHJlZmVyIGEgbmFtZSB0aGF0 IGlzIG1vcmUgc2ltaWxhciB0byBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKCkuDQo+ID4gRS5n Lg0KPiA+IHJ0ZV9hdG9taWMxMjhfY29tcGFyZV9leGNoYW5nZSgpIChvciBwZXJoYXBzIGp1c3Qg cnRlX2F0b21pYzEyOF9jbXB4Y2hnKT8NCj4gPiBBbGwgdGhlIHJ0ZV9hdG9taWNYWF9jbXBzZXQo KSBmdW5jdGlvbnMgZG8gbm90IHRha2UgYW55IG1lbW9yeSBvcmRlcg0KPiA+IHBhcmFtZXRlcnMu DQo+ID4gRnJvbSBhbiBBcm0gcGVyc3BlY3RpdmUsIHdlIGFyZSBub3QgaGFwcHkgd2l0aCB0aGF0 Lg0KPiBTaW5jZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGJvb2xlYW4gc3VjY2VzcyB2YWx1ZSwg aXNuJ3QgY29tcGFyZS1hbmQtc2V0IHRoZQ0KPiBhcHByb3ByaWF0ZSB0ZXJtPw0KSSB3YXMgdGhp bmtpbmcgb2YgdGhlIG1lbW9yeSBvcmRlcmluZyBwYXJhbWV0ZXJzIHRoYXQgX19hdG9taWNfeHh4 IGJ1aWx0aW5zIGhhdmUNCmFuZCB3ZSB3YW50IChmcm9tIGFuIEFybSBwZXJzcGVjdGl2ZSkuDQoN CkdDQyBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlIGFsc28gcmV0dXJucyBhIGJvb2xlYW4uDQpo dHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL18wMDVmXzAwNWZhdG9taWMtQnVpbHRp bnMuaHRtbA0KYm9vbCBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24gKHR5cGUgKnB0ciwgdHlw ZSAqZXhwZWN0ZWQsIHR5cGUgZGVzaXJlZCwgYm9vbA0Kd2VhaywgaW50IHN1Y2Nlc3NfbWVtb3Jk ZXIsIGludCBmYWlsdXJlX21lbW9yZGVyKQ0KYm9vbCBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdl ICh0eXBlICpwdHIsIHR5cGUgKmV4cGVjdGVkLCB0eXBlICpkZXNpcmVkLCBib29sDQp3ZWFrLCBp bnQgc3VjY2Vzc19tZW1vcmRlciwgaW50IGZhaWx1cmVfbWVtb3JkZXIpDQoNCnJ0ZV9hdG9taWMx MjhfY29tcGFyZV9leGNoYW5nZShydGVfaW50MTI4X3QgKmRzdCwgY29uc3QgcnRlX2ludDEyOF90 ICpleHAsIGNvbnN0DQpydGVfaW50MTgyX3QgKnNyYywgYm9vbCB3ZWFrLCBpbnQgbW9fc3VjY2Vz cywgaW50IG1vX2ZhaWx1cmUpOw0KDQo+IA0KPiA+IA0KPiA+IA0KPiA+ID4gDQo+ID4gPiANCj4g PiA+ID4gDQo+ID4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ ID4gPiArCQnCoMKgwqDCoMKgdW5zaWduZWQgaW50IHdlYWssDQo+ID4gPiA+ID4gKwkJwqDCoMKg wqDCoGVudW0gcnRlX2F0b21pY19tZW1tb2RlbF90IHN1Y2Nlc3MsDQo+ID4gPiA+ID4gKwkJwqDC oMKgwqDCoGVudW0gcnRlX2F0b21pY19tZW1tb2RlbF90IGZhaWx1cmUpIHsNCj4gPiA+ID4gPiAr CVJURV9TRVRfVVNFRCh3ZWFrKTsNCj4gPiA+ID4gPiArCVJURV9TRVRfVVNFRChzdWNjZXNzKTsN Cj4gPiA+ID4gPiArCVJURV9TRVRfVVNFRChmYWlsdXJlKTsNCj4gPiA+ID4gPiArCXVpbnQ4X3Qg cmVzOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWFzbSB2b2xhdGlsZSAoDQo+ID4gPiA+ID4g KwkJwqDCoMKgwqDCoMKgTVBMT0NLRUQNCj4gPiA+ID4gPiArCQnCoMKgwqDCoMKgwqAiY21weGNo ZzE2YiAlW2RzdF07Ig0KPiA+ID4gPiA+ICsJCcKgwqDCoMKgwqDCoCIgc2V0ZSAlW3Jlc10iDQo+ ID4gPiA+ID4gKwkJwqDCoMKgwqDCoMKgOiBbZHN0XSAiPW0iIChkc3QtPnZhbFswXSksDQo+ID4g PiA+ID4gKwkJCSI9QSIgKGV4cC0+dmFsWzBdKSwNCj4gPiA+ID4gPiArCQkJW3Jlc10gIj1yIiAo cmVzKQ0KPiA+ID4gPiA+ICsJCcKgwqDCoMKgwqDCoDogImMiIChzcmMtPnZhbFsxXSksDQo+ID4g PiA+ID4gKwkJCSJiIiAoc3JjLT52YWxbMF0pLA0KPiA+ID4gPiA+ICsJCQkibSIgKGRzdC0+dmFs WzBdKSwNCj4gPiA+ID4gPiArCQkJImQiIChleHAtPnZhbFsxXSksDQo+ID4gPiA+ID4gKwkJCSJh IiAoZXhwLT52YWxbMF0pDQo+ID4gPiA+ID4gKwkJwqDCoMKgwqDCoMKgOiAibWVtb3J5Iik7DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIHJlczsNCj4gPiA+ID4gPiArfQ0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiDCoCNlbmRpZiAvKiBfUlRFX0FUT01JQ19YODZfNjRfSF8gKi8gZGlm ZiAtLWdpdA0KPiA+ID4gPiA+IGEvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvZ2VuZXJp Yy9ydGVfYXRvbWljLmgNCj4gPiA+ID4gPiBiL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRl L2dlbmVyaWMvcnRlX2F0b21pYy5oDQo+ID4gPiA+ID4gaW5kZXggYjk5YmE0Njg4Li44ZDYxMmQ1 NjYgMTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUv Z2VuZXJpYy9ydGVfYXRvbWljLmgNCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX2VhbC9jb21t b24vaW5jbHVkZS9nZW5lcmljL3J0ZV9hdG9taWMuaA0KPiA+ID4gPiA+IEBAIC0xNCw2ICsxNCw3 IEBADQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gwqAjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gPiA+ ID4gwqAjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX2Nv bXBhdC5oPg0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IMKgI2lmZGVmIF9fRE9YWUdFTl9fDQo+ID4g PiA+ID4gDQo+ID4gPiA+ID4gQEAgLTEwODIsNCArMTA4Myw2OCBAQCBzdGF0aWMgaW5saW5lIHZv aWQNCj4gPiA+ID4gPiBydGVfYXRvbWljNjRfY2xlYXIocnRlX2F0b21pYzY0X3QNCj4gPiA+ID4g PiAqdikNCj4gPiA+ID4gPiDCoH0NCj4gPiA+ID4gPiDCoCNlbmRpZg0KPiA+ID4gPiA+IA0KPiA+ ID4gPiA+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAxMjggYml0IGF0b21pYyBvcGVyYXRp b25zDQo+ID4gPiA+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gPiA+IC0qLw0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gKyAqIDEyOC1iaXQgaW50ZWdl ciBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ID4gPiA+ID4gKwl1aW50NjRfdCB2YWxbMl07DQo+ID4gPiA+ID4gK30gX19ydGVfYWxpZ25l ZCgxNikgcnRlX2ludDEyOF90Ow0KPiA+ID4gPiBTbyB3ZSBjYW4ndCB1c2UgX19pbnQxMjg/DQo+ ID4gPiA+IA0KPiA+ID4gSSdsbCBwdXQgaXQgaW4gYSB1bmlvbiB3aXRoIHZhbFsyXSwgaW4gY2Fz ZSBhbnkgaW1wbGVtZW50YXRpb25zIHdhbnQNCj4gPiA+IHRvIHVzZSBpdC4NCj4gPiBUaGlua2lu ZyBvbiB0aGlzIG9uZSBtb3JlIHRpbWUsIHNpbmNlIHRoZSBpbmxpbmUgYXNtIGZ1bmN0aW9ucyAo ZS5nLiBmb3INCj4gPiB4ODZfNjQNCj4gPiBjbXB4Y2hnMTZiIGFuZCBmb3IgQUFyY2g2NCBMRFhQ L1NUWFApIGFueXdheSB3aWxsIHVzZSA2NC1iaXQgcmVnaXN0ZXJzLCBpdA0KPiA+IG1ha2VzIG1v c3Qgc2Vuc2UgdG8gbWFrZSBydGVfaW50MTI4X3QgYSBzdHJ1Y3Qgb2YgMng2NGIuIFRoZSBxdWVz dGlvbiBpcw0KPiA+IHdoZXRoZXIgdG8gdXNlIGFuIGFycmF5IGxpa2UgYWJvdmUgb3IgYSBzdHJ1 Y3Qgd2l0aCB0d28gZWxlbWVudHMgKHdoaWNoIEkNCj4gPiBub3JtYWxseSBkbyBpbnRlcm5hbGx5 KS4gQ2FuIHlvdSBjb21wYXJlIGNvZGUgZ2VuZXJhdGlvbiB3aXRoIHRoZSBmb2xsb3dpbmcNCj4g PiBkZWZpbml0aW9uPw0KPiA+IHR5cGVkZWYgc3RydWN0IHsNCj4gPiDCoCDCoCDCoCDCoCB1aW50 NjRfdCBsbywgaGk7DQo+ID4gfSBfX3J0ZV9hbGlnbmVkKDE2KSBydGVfaW50MTI4X3Q7DQo+ID4g DQo+IEludGVyZXN0aW5nbHksIHRoYXQgbWFkZSBubyBkaWZmZXJlbmNlIGluIHRoZSBQQlYgY29k ZSBidXQgYWRkZWQgbW9yZQ0KPiBpbnN0cnVjdGlvbnMgb3ZlcmFsbCB0byBQQlI6DQo+IFBCVjog MTAwIGluc3RzIGZvciBwdXNoLCA5NyBpbnN0cyBmb3IgcG9wDQo+IFBCUjogMTAwIGluc3RzIGZv ciBwdXNoLCA4MyBpbnN0cyBmb3IgcG9wDQpJIHRoaW5rIHdlIGxlYXJuZWQgc29tZXRoaW5nIGhl cmUuLi4gVHJ5aW5nIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0LiBCdXQgSQ0KdGhpbmsgdGhp cyByZXN1bHQgc2V0dGxlcyBpdC4NCg0KSSBzaG91bGQgdGVzdCB0aGUgZGlmZmVyZW50IGFsdGVy bmF0aXZlcyBvbiBBcm0sIGRvZXMgY29kZSBnZW5lcmF0aW9uIGJlaGF2ZSB0aGUNCnNhbWUgYXMg Zm9yIHg4Nl82NC4NCg0KPiANCj4gPiANCj4gPiA+IA0KPiA+ID4gDQo+ID4gPiBUaGFua3MsDQo+ ID4gPiBHYWdlDQo+ID4gPiANCj4gPiA+IFtzbmlwXQ0KPiA+IC0tDQo+ID4gT2xhIExpbGplZGFo bCwgTmV0d29ya2luZyBTeXN0ZW0gQXJjaGl0ZWN0LCBBcm0gUGhvbmUgKzQ2NzA2ODY2MzczLCBT a3lwZQ0KPiA+IG9sYS5saWxqZWRhaGwNCi0tIA0KT2xhIExpbGplZGFobCwgTmV0d29ya2luZyBT eXN0ZW0gQXJjaGl0ZWN0LCBBcm0NClBob25lICs0NjcwNjg2NjM3MywgU2t5cGUgb2xhLmxpbGpl ZGFobA0KDQo=