From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 0D641282 for ; Fri, 14 Apr 2017 01:19:51 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Apr 2017 16:19:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,195,1488873600"; d="scan'208";a="77098368" Received: from irsmsx101.ger.corp.intel.com ([163.33.3.153]) by orsmga004.jf.intel.com with ESMTP; 13 Apr 2017 16:19:46 -0700 Received: from irsmsx109.ger.corp.intel.com ([169.254.13.12]) by IRSMSX101.ger.corp.intel.com ([163.33.3.153]) with mapi id 14.03.0319.002; Fri, 14 Apr 2017 00:19:46 +0100 From: "Ananyev, Konstantin" To: jigsaw , Adrien Mazarguil CC: "dev@dpdk.org" Thread-Topic: [dpdk-dev] Proposal of mbuf Race Condition Detection Thread-Index: AQHStFtIFcJwTLZ8P0q9t7Pjljv3wqHDU4gAgABkbICAADTwEA== Date: Thu, 13 Apr 2017 23:19:45 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772583FAE8F95@IRSMSX109.ger.corp.intel.com> References: <20170413145910.GG3790@6wind.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] Proposal of mbuf Race Condition Detection 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: Thu, 13 Apr 2017 23:19:52 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2IFttYWlsdG86ZGV2 LWJvdW5jZXNAZHBkay5vcmddIE9uIEJlaGFsZiBPZiBqaWdzYXcNCj4gU2VudDogVGh1cnNkYXks IEFwcmlsIDEzLCAyMDE3IDk6NTkgUE0NCj4gVG86IEFkcmllbiBNYXphcmd1aWwgPGFkcmllbi5t YXphcmd1aWxANndpbmQuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnDQo+IFN1YmplY3Q6IFJlOiBb ZHBkay1kZXZdIFByb3Bvc2FsIG9mIG1idWYgUmFjZSBDb25kaXRpb24gRGV0ZWN0aW9uDQo+IA0K PiBIaSBBZHJpZW4sDQo+IA0KPiBUaGFua3MgZm9yIHlvdXIgY29tbWVudC4NCj4gDQo+IFRoZSBM T0NLL1VOTE9DSyBtYXkgYmUgY2FsbGVkIGJ5IHVzZXIgYXBwbGljYXRpb24gb25seS4gVGhlcmUg YXJlIHNldmVyYWwNCj4gcmVhc29ucy4NCj4gDQo+IDEuIElmIHRoZSBsaWIgY2FsbHMgTE9DSywg dXNlciBhcHBsaWNhdGlvbiBtYXkgYmUgcHVuaXNoZWQgdW5leHBlY3RlZGx5Lg0KPiBDb25zaWRl ciB3aGF0IGlmIHRoZSBSeCBidXJzdCBmdW5jdGlvbiBjYWxscyB0aGUgTE9DSyBpbiBjb3JlICMx LCBhbmQgdGhlbg0KPiB0aGUgbWJ1ZiBpcyBoYW5kZWQgb3ZlciBmcm9tDQo+IGNvcmUgIzEgdG8g Y29yZSAjMiB0aHJvdWdoIGEgZW5xdWV1ZS9kZXF1ZXVlIG9wZXJhdGlvbiwgYXMgYmVsb3c6DQo+ IA0KPiBSeCgxKSAtLT4gRW5xdWV1ZSgxKSAtLT4gRGVxdWV1ZSgyKQ0KPiBMT0NLRUQgICAgICAg ICAgICAgICAgICAgICAgIFBhbmljIQ0KPiANCj4gVGhlIGNvcmUgIzIgd2lsbCB0aGVuIHBhbmlj IGJlY2F1c2UgdGhlIG1idWYgaXMgb3duZWQgYnkgY29yZSAjMSB3aXRob3V0DQo+IGJlaW5nIHJl bGVhc2VkLg0KPiANCj4gMi4gUnggYW5kIFR4IGJvdGggdXN1YWxseSB3b3JrcyBpbiBhIGJ1cnN0 IG1vZGUsIGNvbWJpbmVkIHdpdGggcHJlZmV0Y2gNCj4gb3BlcmF0aW9uLiBNZWFud2hpbGUNCj4g TE9DSyBhbmQgVU5MT0NLIGNhbm5vdCB3b3JrIHdlbGwgd2l0aCBwcmVmZXRjaCwgYmVjYXVzZSBp dCByZXF1aXJlcyBkYXRhDQo+IGFjY2VzcyBvZiBtYnVmIGhlYWRlci4NCj4gDQo+IDMuIFRoZSBj cml0aWNhbCBzZXNzaW9uIHRlbmRzIHRvIGJlIHNtYWxsLiBIZXJlIHdlICh1c2VyIGFwcGxpY2F0 aW9uKSBuZWVkDQo+IHRvIGZpbmQgYSBiYWxhbmNlOiB3aXRoIGxvbmdlciBpbnRlcnZhbCBvZiBj cml0aWNhbA0KPiBzZWN0aW9uLCB3ZSBjYW4gaGF2ZSBtb3JlIHNlY3VyZWQgY29kZTsgaG93ZXZl ciwgbG9uZ2VyIGR1cmF0aW9uIGxlYWRzIHRvDQo+IG1vcmUgY29tcGxpY2F0ZWQgYnVzaW5lc3MN Cj4gbG9naWMuDQo+IA0KPiBIZW5jZSwgd2UgdXJnZSB1c2VyIGFwcGxpY2F0aW9uIHRvIHVzZSBM T0NLL1VOTE9DSyB3aXRoIHRoZSBjb21tb24gc2Vuc2Ugb2YNCj4gY3JpdGljYWwgc2VjdGlvbnMu DQo+IA0KPiBUYWtlIHRoZSBleGFtcGxlcy9sM2Z3ZCBmb3IgZXhhbXBsZS4gQSBwcm9wZXIgTE9D Sy9VTkxPQ0sgcGFpciBpcyBzaG93bg0KPiBiZWxvdzoNCj4gDQo+ID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvbDNmd2Qv bDNmd2RfZW1faGxtX3NzZS5oDQo+IGIvZXhhbXBsZXMvbDNmd2QvbDNmd2RfZW1faGxtX3NzZS5o DQo+IGluZGV4IDc3MTRhMjAuLjlkYjAxOTAgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVzL2wzZndk L2wzZndkX2VtX2hsbV9zc2UuaA0KPiArKysgYi9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9lbV9obG1f c3NlLmgNCj4gQEAgLTI5OSw2ICsyOTksMTUgQEAgbDNmd2RfZW1fc2VuZF9wYWNrZXRzKGludCBu Yl9yeCwgc3RydWN0IHJ0ZV9tYnVmDQo+ICoqcGt0c19idXJzdCwNCj4gDQo+ICAgICAgICAgZm9y IChqID0gMDsgaiA8IG47IGogKz0gOCkgew0KPiANCj4gKyAgICAgICAgICAgIFJURV9NQlVGX0xP Q0socGt0c19idXJzdFtqXSk7DQo+ICsgICAgICAgICAgICBSVEVfTUJVRl9MT0NLKHBrdHNfYnVy c3RbaisxXSk7DQo+ICsgICAgICAgICAgICBSVEVfTUJVRl9MT0NLKHBrdHNfYnVyc3RbaisyXSk7 DQo+ICsgICAgICAgICAgICBSVEVfTUJVRl9MT0NLKHBrdHNfYnVyc3RbaiszXSk7DQo+ICsgICAg ICAgICAgICBSVEVfTUJVRl9MT0NLKHBrdHNfYnVyc3Rbais0XSk7DQo+ICsgICAgICAgICAgICBS VEVfTUJVRl9MT0NLKHBrdHNfYnVyc3Rbais1XSk7DQo+ICsgICAgICAgICAgICBSVEVfTUJVRl9M T0NLKHBrdHNfYnVyc3Rbais2XSk7DQo+ICsgICAgICAgICAgICBSVEVfTUJVRl9MT0NLKHBrdHNf YnVyc3Rbais3XSk7DQo+ICsNCj4gICAgICAgICAgICAgICAgIHVpbnQzMl90IHBrdF90eXBlID0N Cj4gICAgICAgICAgICAgICAgICAgICAgICAgcGt0c19idXJzdFtqXS0+cGFja2V0X3R5cGUgJg0K PiAgICAgICAgICAgICAgICAgICAgICAgICBwa3RzX2J1cnN0W2orMV0tPnBhY2tldF90eXBlICYN Cj4gQEAgLTMzMyw4ICszNDIsMTAgQEAgbDNmd2RfZW1fc2VuZF9wYWNrZXRzKGludCBuYl9yeCwg c3RydWN0IHJ0ZV9tYnVmDQo+ICoqcGt0c19idXJzdCwNCj4gICAgICAgICAgICAgICAgIH0NCj4g ICAgICAgICB9DQo+IA0KPiAtICAgICAgIGZvciAoOyBqIDwgbmJfcng7IGorKykNCj4gKyAgICAg IGZvciAoOyBqIDwgbmJfcng7IGorKykgew0KPiArICAgICAgICAgICAgICBSVEVfTUJVRl9MT0NL KHBrdHNfYnVyc3Rbal0pOw0KPiAgICAgICAgICAgICAgICAgZHN0X3BvcnRbal0gPSBlbV9nZXRf ZHN0X3BvcnQocWNvbmYsIHBrdHNfYnVyc3Rbal0sIHBvcnRpZCk7DQo+ICsgICAgICB9DQo+IA0K PiAgICAgICAgIHNlbmRfcGFja2V0c19tdWx0aShxY29uZiwgcGt0c19idXJzdCwgZHN0X3BvcnQs IG5iX3J4KTsNCj4gDQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9zc2UuaCBi L2V4YW1wbGVzL2wzZndkL2wzZndkX3NzZS5oDQo+IGluZGV4IDFhZmExZjAuLjI5Mzg1NTggMTAw NjQ0DQo+IC0tLSBhL2V4YW1wbGVzL2wzZndkL2wzZndkX3NzZS5oDQo+ICsrKyBiL2V4YW1wbGVz L2wzZndkL2wzZndkX3NzZS5oDQo+IEBAIC0zMjIsNiArMzIyLDkgQEAgc2VuZF9wYWNrZXRzeDQo c3RydWN0IGxjb3JlX2NvbmYgKnFjb25mLCB1aW50OF90IHBvcnQsDQo+IHN0cnVjdCBydGVfbWJ1 ZiAqbVtdLA0KPiANCj4gICAgICAgICBsZW4gPSBxY29uZi0+dHhfbWJ1ZnNbcG9ydF0ubGVuOw0K PiANCj4gKyAgICAgIGZvciAoaiA9IDA7IGogPCBudW07ICsraikNCj4gKyAgICAgICAgICAgIFJU RV9NQlVGX1VOTE9DSyhtKTsNCj4gKw0KPiAgICAgICAgIC8qDQo+ICAgICAgICAgICogSWYgVFgg YnVmZmVyIGZvciB0aGF0IHF1ZXVlIGlzIGVtcHR5LCBhbmQgd2UgaGF2ZSBlbm91Z2ggcGFja2V0 cywNCj4gICAgICAgICAgKiB0aGVuIHNlbmQgdGhlbSBzdHJhaWdodHdheS4NCj4gQEAgLTQ5Miw4 ICs0OTUsMTAgQEAgc2VuZF9wYWNrZXRzX211bHRpKHN0cnVjdCBsY29yZV9jb25mICpxY29uZiwg c3RydWN0DQo+IHJ0ZV9tYnVmICoqcGt0c19idXJzdCwNCj4gICAgICAgICAgICAgICAgIGlmIChs aWtlbHkocG4gIT0gQkFEX1BPUlQpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3Bh Y2tldHN4NChxY29uZiwgcG4sIHBrdHNfYnVyc3QgKyBqLCBrKTsNCj4gICAgICAgICAgICAgICAg IGVsc2UNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gajsgbSAhPSBqICsgazsg bSsrKQ0KPiArICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IGo7IG0gIT0gaiArIGs7IG0r Kykgew0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX01CVUZfVU5MT0NLKHBr dHNfYnVyc3RbbV0pOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0ZV9wa3Rt YnVmX2ZyZWUocGt0c19idXJzdFttXSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgfQ0KPiAN Cj4gICAgICAgICB9DQo+ICB9DQo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KPiANCj4gTm90ZSB0aGF0IGRhdGEgcmFjZSBtYXkgb3IgbWF5IG5vdCBoYXZlIHZp c2libGUgY29uc2VxdWVuY2UuIElmIHR3byBjb3Jlcw0KPiB1bmNvbnNjaW91c2x5IHByb2Nlc3Mg c2FtZSBtYnVmDQo+IGF0IGRpZmZlcmVudCB0aW1lLCB0aGV5IG1heSBuZXZlciBub3RpY2UgaXQ7 IGJ1dCBpZiB0d28gY29yZXMgYWNjZXNzIHNhbWUNCj4gbWJ1ZiBhdCB0aGUgc2FtZSBwaHlzaWNh bCB0aW1lLCB0aGUNCj4gY29uc2VxdWVuY2UgaXMgdXN1YWxseSB2aXNpYmxlIChjcmFzaCkuIFdl IGRvbid0IHNlZWsgZm9yIGEgc29sdXRpb24gdGhhdA0KPiBjYXB0dXJlcyBldmVuIHBvdGVudGlh bCBkYXRhIHJhY2U7DQo+IGluc3RlYWQsIHdlIHNlZWsgZm9yIGEgc29sdXRpb24gdGhhdCBjYW4g Y2FwdHVyZSBkYXRhIHJhY2UgdGhhdCBoYXBwZW5zDQo+IHNpbXVsdGFuZW91c2x5IGluIHR3byBv ciBtb3JlIGNvcmVzLg0KPiBUaGVyZWZvcmUsIHdlIGRvIG5vdCBuZWVkIHRvIGV4dGVuZCB0aGUg Ym9yZGVyIG9mIGxvY2tpbmcgYXMgd2lkZSBhcw0KPiBwb3NzaWJsZS4gV2Ugd2lsbCBhcHBseSBs b2NraW5nIG9ubHkgd2hlbg0KPiB3ZSBhcmUgZm9jdXNpbmcgb24gYSBzaW5nbGUgbWJ1ZiBwcm9j ZXNzaW5nLg0KPiANCj4gSW4gYSByZWFsIGxpZmUgYXBwbGljYXRpb24sIGEgY29yZSB3aWxsIHNw ZW5kIHF1aXRlIHNvbWUgdGltZSBvbiBlYWNoIG1idWYuDQo+IFRoZSBpbnRlcnZhbCByYW5nZXMg ZnJvbSBhIGZldyBodW5kcmVkDQo+IGN5Y2xlcyB0byBhIGZldyB0aG91c2FuZCBjeWNsZXMuIEFu ZCB1c3VhbGx5IG5vdCBtb3JlIHRoYW4gYSBoYW5kZnVsIG9mDQo+IG1idWYgYXJlIGludm9sdmVk LiBUaGlzIGlzIGEgaWRlYWwgdXNlIGNhc2UNCj4gZm9yIGxvY2tpbmcgbWJ1Zi4NCj4gDQo+IEkg YWdyZWUgdGhhdCB0aGUgcmFjZSBkZXRlY3Rpb24gc2hhbGwgbm90IGJlIGNvbXBpbGVkIGJ5IGRl ZmF1bHQsIHNpbmNlDQo+IG10b2QgaXMgb2Z0ZW4gY2FsbGVkLCBhbmQgZXZlcnkgbXRvZCBpbXBs aWVzIGENCj4gdmlzaXQgdG8gbG9jYWwgY2FjaGUuIEZ1cnRoZXIsIHJlY3Vyc2l2ZSBjYWxsIG9m IExPQ0svVU5MT0NLIHNoYWxsIGJlDQo+IHN1cHBvcnRlZCBhcyB3ZWxsLiBCdXQgSSBkb24ndCB0 aGluayByZWZjbnQgbG9naWMNCj4gc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudDsgdGhlc2Ug dHdvIGFyZSBvcnRob2dvbmFsIGRlc2lnbnMsIElNTy4gKioqKioNCj4gUGxzIGNvcnJlY3QgbWUg aWYgSSBhbSB3cm9uZyBoZXJlLiAqKioqKg0KPiANCj4gTmV0aGVyIGRvZXMgTE9DSy9VTkxPQ0sg aXMgYXdhcmUgb2YgbWJ1ZiBhbGxvYy9mcmVlLCBmb3Igc2FtZSByZWFzb24uIFRoYXQNCj4gaXMg d2h5IEkgc2FpZCBMT0NLL1VOTE9DSyBuZWVkcyB0bw0KPiBzdXJ2aXZlIG1idWYgYWxsb2MgaW5p dGlhbGl6YXRpb24uDQo+IA0KPiBPZiBjb3Vyc2Ugd2UgbmVlZCB0byBzdXBwb3J0IGxvY2tpbmcg bXVsdGlwbGUgbWJ1ZnMgYXQgdGhlIHNhbWUgdGltZS4gRm9yDQo+IGVhY2ggY29yZSwgd2Ugd2ls bCB0aGVuIHByZXNlcnZlLCBzYXksIDggc2xvdHMuDQo+IEl0IHdvcmtzIGV4YWN0bHkgbGlrZSBh IGRpcmVjdCBtYXBwZWQgY2FjaGVsaW5lLiBUaGF0IGlzLCB3ZSBjYW4gdXNlIDRiaXRzDQo+IGZy b20gdGhlIG1idWYgYWRkcmVzcyB0byBsb2NhdGUgaXRzIGNhY2hlbGluZS4NCj4gSWYgdGhlIGNh Y2hlbGluZSBoYXMgYmVlbiBvY2N1cGllZCwgd2UgZG8gYW4gZXZpY3Rpb247IHRoYXQgaXMsIHRo ZSBuZXcNCj4gbWJ1ZiB3aWxsIHRha2UgdGhlIHBsYWNlIG9mIHRoZSBvbGQgb25lLiBUaGUgb2xk IG9uZSBpcw0KPiB0aGVuIFVOTE9DS2VkLCB1bmZvcnR1bmF0ZWx5Lg0KPiANCj4gSG9uZXN0bHkg SSBoYXZlIG5vdCB5ZXQgdHJpZWQgdGhpcyBhcHByb2FjaCBpbiByZWFsIGxpZmUgYXBwbGljYXRp b24uIEJ1dCBJDQo+IGhhdmUgYmVlbiB0aGlua2luZyBvdmVyIHRoZSBwcm9ibGVtIG9mIGRhdGEg cmFjZSBkZXRlY3Rpb24NCj4gZm9yIGEgbG9uZyB0aW1lLCBhbmQgSSBmb3VuZCB0aGUgcmVzdHJp Y3Rpb24gYW5kIHJlcXVpcmVtZW50IG1ha2VzIHRoaXMNCj4gc29sdXRpb24gdGhlIG9ubHkgdmlh YmxlIG9uZS4gVGhlcmUgYXJlIGh1bmRyZWRzIG9mIHBhcGVycw0KPiBwdWJsaXNoZWQgaW4gdGhl IGZpZWxkIG9uIGRhdGEgcmFjZSBjb25kaXRpb24gZGV0ZWN0aW9uLCBidXQgdGhlIGxpZ2h0ZXN0 DQo+IG9mIHRoZSBvcHRpb25zIGhhcyBhdCBsZWFzdCA1eCBvZiBwZXJmb3JtYW5jZQ0KPiBwZW5h bHR5LCBub3QgdG8gbWVudGlvbiB0aGUgc3BhY2UgY29tcGxleGl0eSwgbWFraW5nIGl0IG5vdCBh cHBsaWNhYmxlIGluDQo+IHByYWN0aWNlLg0KPiANCj4gQWdhaW4sIHBscywgYW55b25lIGhhcyBz YW1lIHBhaW5mdWwgZXhwZXJpZW5jZSBvZiBkYXRhIHJhY2UgYnVncywgc2hhcmUNCj4gd2l0aCBt ZSB5b3VyIGNvbmNlcm5zLiBJdCB3b3VsZCBiZSBuaWNlIHRvIGNvbWUgdXAgd2l0aA0KPiBzb21l IHByYWN0aWNhbCBkZXZpY2UgdG8gYWRkcmVzcyB0aGlzIHByb2JsZW0uIEkgYmVsaWV2ZSA2V2lu ZCBhbmQgb3RoZXIgSVANCj4gc3RhY2sgdmVuZG9ycyBtdXN0IHNoYXJlIHRoZSBzYW1lIGZlZWxp bmcgYW5kIG9waW5pb24uDQo+IA0KPiB0aHggJg0KPiByZ2RzLA0KPiANCj4gUWluZ2xhaQ0KPiAN Cj4gDQo+IA0KPiBPbiBUaHUsIEFwciAxMywgMjAxNyBhdCA1OjU5IFBNLCBBZHJpZW4gTWF6YXJn dWlsIDwNCj4gYWRyaWVuLm1hemFyZ3VpbEA2d2luZC5jb20+IHdyb3RlOg0KPiANCj4gPiBIaSBR aW5nbGFpLA0KPiA+DQo+ID4gT24gVGh1LCBBcHIgMTMsIDIwMTcgYXQgMDQ6Mzg6MTlQTSArMDMw MCwgamlnc2F3IHdyb3RlOg0KPiA+ID4gSGksDQo+ID4gPg0KPiA+ID4gSSBoYXZlIGEgcHJvcG9z YWwgZm9yIG1idWYgcmFjZSBjb25kaXRpb24gZGV0ZWN0aW9uIGFuZCBJIHdvdWxkIGxpa2UgdG8N Cj4gPiBnZXQNCj4gPiA+IHlvdXIgb3BpbmlvbnMgYmVmb3JlDQo+ID4gPiBjb21taXR0aW5nIGFu eSBwYXRjaC4NCj4gPiA+DQo+ID4gPiBSYWNlIGNvbmRpdGlvbiBpcyB0aGUgd29yc3QgYnVnIEkg Y2FuIHRoaW5rIG9mOyBhcyBpdCBjYXVzZXMgY3Jhc2hpbmcNCj4gPiBsb25nDQo+ID4gPiBhZnRl ciB0aGUgZmlyc3QgY3JpbWUgc2NlbmUsDQo+ID4gPiBhbmQgdGhlIGNvbnNlcXVlbmNlIGlzIHVu cHJlZGljdGFibGUgYW5kIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kLg0KPiA+ID4NCj4gPiA+IEJl c2lkZXMsIHJhY2UgY29uZGl0aW9uIGlzIHZlcnkgZGlmZmljdWx0IHRvIHJlcHJvZHVjZS4gVXN1 YWxseSB3ZSBnZXQgYQ0KPiA+ID4gY29yZWR1bXAgZnJvbSBsaXZlIG5ldHdvcmssDQo+ID4gPiBi dXQgdGhlIGNvcmVkdW1wIGl0c2VsZiBkZWxpdmVycyBuZWFybHkgemVybyBpbmZvLiBXZSBqdXN0 IGtub3cgdGhhdCB0aGUNCj4gPiA+IG1idWYgaXMgc29tZWhvdyBicm9rZW4sIGFuZA0KPiA+ID4g aXQgaXMgcGVyaGFwcyBvdmVyd3JpdHRlbiBieSBhbm90aGVyIGNvcmUgYXQgYW55IG1vbWVudC4N Cj4gPiA+DQo+ID4gPiBUaGVyZSBhcmUgdG9vbHMgc3VjaCBhcyBWYWxncmluZCBhbmQgVGhyZWFk U2FuaXRpemVyIHRvIGNhcHR1cmUgdGhpcw0KPiA+IGZhdWx0Lg0KPiA+ID4gQnV0IHRoZSBvdmVy aGVhZCBicm91Z2h0DQo+ID4gPiBieSB0aGUgdG9vbHMgYXJlIHRvbyBoaWdoIHRvIGJlIGRlcGxv eWVkIGluIHBlcmZvcm1hbmNlIHRlc3QsIG5vdCB0bw0KPiA+ID4gbWVudGlvbiBpbiB0aGUgbGl2 ZSBuZXR3b3JrLiBCdXQNCj4gPiA+IHJhY2UgY29uZGl0aW9uIHJhcmVseSBoYXBwZW5zIHVuZGVy IGxvdyBwcmVzc3VyZS4NCj4gPiA+DQo+ID4gPiBFdmVuIHdvcnNlLCBldmVuIGluIHRoZW9yeSwg dGhlIHRvb2xzIG1lbnRpb25lZCBhcmUgbm90IGNhcGFibGUgb2YNCj4gPiA+IGNhcHR1cmluZyB0 aGUgc2NlbmFyaW8sIGJlY2F1c2UNCj4gPiA+IHRoZXkgcmVxdWlyZXMgZXhwbGljaXQgY2FsbHMg b24gbG9ja2luZyBwcmltaXRpdmVzIHN1Y2ggYXMgcHRocmVhZCBtdXRleC4NCj4gPiA+IFRoaXMg aXMgYmVjYXVzZSB0aGUgc2VtYW50aWNzDQo+ID4gPiBhcmUgbm90IHVuZGVyc3Rvb2QgYnkgdGhl IHRvb2xzIHdpdGhvdXQgZXhwbGljaXQgbG9jay91bmxvY2suDQo+ID4gPg0KPiA+ID4gV2l0aCBz dWNoIGtub3duIHJlc3RyaWN0aW9ucywgSSBoYXZlIGEgcHJvcG9zYWwgcm91Z2hseSBhcyBiZWxv dy4NCj4gPiA+DQo+ID4gPiBUaGUgaWRlYSBpcyB0byBhc2sgY29kZXIgdG8gZG8gZXhwbGljaXQg bG9jay91bmxvY2sgb24gZWFjaCBtYnVmIHRoYXQNCj4gPiA+IG1hdHRlcnMuIFRoZSBwc2V1ZG8g Y29kZSBpcyBhcyBiZWxvdzoNCj4gPiA+DQo+ID4gPiAgICAgUlRFX01CVUZfTE9DSyhtKTsNCj4g PiA+ICAgICAvKiB1c2UgbWJ1ZiBhcyB1c3VhbCAqLw0KPiA+ID4gICAgIC4uLg0KPiA+ID4gICAg IFJURV9NQlVGX1VOTE9DSyhtKTsNCj4gPiA+DQo+ID4gPiBEdXJpbmcgdGhlIHByb3RlY3RlZCBj cml0aWNhbCBzZWN0aW9uLCBvbmx5IHRoZSBjb3JlIHdoaWNoIGhvbGRzIHRoZSBsb2NrDQo+ID4g PiBjYW4gYWNjZXNzIHRoZSBtYnVmOyB3aGlsZQ0KPiA+ID4gb3RoZXIgY29yZXMsIGlmIHRoZXkg ZGFyZSB0byB1c2UgbWJ1ZiwgdGhleSB3aWxsIGJlIHB1bmlzaGVkIGJ5IHNlZ2ZhdWx0Lg0KPiA+ ID4NCj4gPiA+IFNpbmNlIHRoZSBwcm9wb3NhbCBzaGFsbCBiZSBmZWFzaWJsZSBhdCBsZWFzdCBp biBwZXJmb3JtYW5jZSB0ZXN0LCB0aGUNCj4gPiA+IG92ZXJoZWFkIG9mIGxvY2tpbmcgYW5kDQo+ ID4gPiBwdW5pc2htZW50IG11c3QgYmUgc21hbGwuIEFuZCB0aGUgYWNjZXNzIHRvIG1idWYgbXVz dCBiZSBhcyB1c3VhbC4NCj4gPiA+DQo+ID4gPiBIZW5jZSwgdGhlIFJURV9NQlVGX0xPQ0sgaXMg YWN0dWFsbHkgZG9pbmcgdGhlIGZvbGxvd2luZyAocHNldWRvIGNvZGUpOg0KPiA+ID4NCj4gPiA+ IFJURV9NQlVGX0xPQ0sobSkNCj4gPiA+IHsNCj4gPiA+ICAgICBzdG9yZV9wZXJfY29yZV9jYWNo ZShtLCBtLT5idWZfYWRkcik7DQo+ID4gPiAgICAgbS0+YnVmX2FkZHIgPSBOVUxMOw0KPiA+ID4g ICAgIG1iKCk7IC8vIG1lbW9yeSBiYXJyaWVyDQo+ID4gPiB9DQo+ID4gPg0KPiA+ID4gQW5kIFJU RV9NQlVGX1VOTE9DSyBpcyBzaW1wbHkgdGhlIHJldmVyc2U6DQo+ID4gPg0KPiA+ID4gUlRFX01C VUZfVU5MT0NLKG0pDQo+ID4gPiB7DQo+ID4gPiAgICAgcHVyZ2VfcGVyX2NvcmVfY2FjaGUobSk7 DQo+ID4gPiAgICAgbS0+YnVmX2FkZHIgPSBsb2FkX3Blcl9jb3JlX2NhY2hlKG0pOw0KPiA+ID4g ICAgIG1iKCk7DQo+ID4gPiB9DQo+ID4gPg0KPiA+ID4gQXMgd2UgY2FuIHNlZSB0aGF0IHRoZSBp ZGVhIGlzIHRvIHJlLXdyaXRlIG0tPmJ1Zl9hZGRyIHdpdGggTlVMTCwgYW5kDQo+ID4gc3RvcmUN Cj4gPiA+IGl0IGluIGEgcGVyLWNvcmUNCj4gPiA+IGNhY2hlLiBUaGUgb3RoZXIgY29yZXMsIHdo aWxlIHRyeWluZyB0byBhY2Nlc3MgdGhlIG1idWYgZHVyaW5nIGNyaXRpY2FsDQo+ID4gPiBzZWN0 aW9uLCB3aWxsIGJlIGNlcnRhaW5seQ0KPiA+ID4gcHVuaXNoZWQuDQo+ID4gPg0KPiA+ID4gVGhl biBvZiBjb3Vyc2Ugd2UgbmVlZCB0byBrZWVwIHRoZSBvd25lciBjb3JlIHdvcmtpbmcuIFRoaXMg aXMgZG9uZSBieQ0KPiA+ID4gbWFraW5nIGNoYW5nZXMgdG8NCj4gPiA+IG10b2QsIGFzIGJlbG93 Og0KPiA+ID4NCj4gPiA+ICNkZWZpbmUgcnRlX3BrdG1idWZfbXRvZF9vZmZzZXQobSwgdCwgbykg XA0KPiA+ID4gICAgICgodCkoKGNoYXIgKikobSktPmJ1Zl9hZGRyICsgbG9hZF9wZXJfY29yZV9j YWNoZShtKSArIChtKS0+ZGF0YV9vZmYgKw0KPiA+ID4gKG8pKSkNCj4gPiA+DQo+ID4gPiBUaGUg cGVyLWNvcmUgY2FjaGUgb2YgbWJ1ZiB3b3JrcyBsaWtlIGEga2V5LXZhbHVlIGRhdGFiYXNlLCB3 aGljaCB3b3Jrcw0KPiA+ID4gbGlrZSBhIGRpcmVjdC1tYXBwaW5nDQo+ID4gPiBjYWNoZS4gSWYg YW4gZXZpY3Rpb24gaGFwcGVucyAoYSBuZXdseSBhcnJpdmluZyBtYnVmIG11c3Qga2ljayBvdXQg YW4gb2xkDQo+ID4gPiBvbmUpLCB0aGVuIHRoZSB3ZSByZXN0b3JlDQo+ID4gPiB0aGUgYnVmX2Fk ZHIgb2YgdGhlIGV2aWN0ZWQgbWJ1Zi4gT2YgY291cnNlIHRoZSBSVEVfTUJVRl9VTkxPQ0sgd2ls bCB0aGVuDQo+ID4gPiB0YWtlIGNhcmUgb2Ygc3VjaA0KPiA+ID4gc2l0dWF0aW9uLg0KPiA+ID4N Cj4gPiA+IE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhlIExPQ0svVU5MT0NLIHRvIHdvcmsgZXZlbiB3 aGVuIHRoZSBtYnVmIGlzIGZyZWVkDQo+ID4gYW5kDQo+ID4gPiBhbGxvY2F0ZWQsIHNpbmNlDQo+ ID4gPiB3ZSBkb24ndCB0cnVzdCB0aGUgcmVmY250LiBBIGRvdWJsZS1mcmVlIGlzIGFjdHVhbGx5 IHZlcnkgcmFyZTsgYnV0IGRhdGENCj4gPiA+IHJhY2UgY2FuIG9jY3VyIHdpdGhvdXQgZG91Ymxl LWZyZWUuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBzdXJ2aXZlIHRoZQ0KPiA+ID4gYWxsb2NhdGlv biBvZiBtYnVmLCB0aGF0IGlzIHJ0ZV9wa3RtYnVmX2luaXQsIHdoaWNoIHJlc2V0IHRoZQ0KPiA+ ID4gYnVmX2FkZHIuDQo+ID4gPg0KPiA+ID4gRnVydGhlciwgb3RoZXIgZGVyZWZlcmVuY2UgdG8g YnVmX2FkZHIgaW4gcnRlX21idWYuaCBuZWVkIHRvIGJlIHJldmlzZWQuDQo+ID4gPiBCdXQgaXQg aXMgbm90IGEgYmlnIGRlYWwgKEkgaG9wZSkuDQo+ID4gPg0KPiA+ID4gVGhlIHJ1bnRpbWUgb3Zl cmhlYWQgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGxpZ2h0LXdlaWdodGVkLCBhbmQN Cj4gPiA+IHByb2JhYmx5IGlzIGFibGUgdG8gdHVybmVkDQo+ID4gPiBvbiBldmVuIGluIGxpdmUg bmV0d29yay4gQW5kIGl0IGlzIG5vdCBpbnRydXNpdmUgYXQgYWxsOiBubyBjaGFuZ2UgaXMNCj4g PiA+IG5lZWRlZCBpbiBzdHJ1Y3QgcnRlX21idWY7IHdlIGp1c3QNCj4gPiA+IG5lZWQgYSBPKE4p IHNwYWNlIGNvbXBsZXhpdHkgKHdoZXJlIE4gaXMgbnVtYmVyIG9mIGNvcmVzKSwgYW5kIE8oMSkN Cj4gPiBydW50aW1lDQo+ID4gPiBjb21wbGV4aXR5Lg0KPiA+ID4NCj4gPiA+IEFscmlnaHQsIHRo YXQgaXMgYmFzaWNhbGx5IHdoYXQgaXMgaW4gbXkgbWluZC4gQmVmb3JlIGFueSBwYXRjaCBpcw0K PiA+ID4gcHJvdmlkZWQsIG9yIGFueSBwZXJmIGFuYWx5c2lzIGlzIG1hZGUsIEkgd291bGQgbGlr ZSB0byBrbm93IHdoYXQgYXJlIHRoZQ0KPiA+ID4gcmlza3MgZm9ybSBkZXNpZ24gcG9pbnQgb2Yg dmlldy4gUGxlYXNlIGxlYXZlIHlvdXIgZmVlZGJhY2suDQo+ID4NCj4gPiBZb3VyIHByb3Bvc2Fs IG1ha2VzIHNlbnNlIGJ1dCBJJ20gbm90IHN1cmUgd2hlcmUgZGV2ZWxvcGVycyBzaG91bGQgY2Fs bA0KPiA+IFJURV9NQlVGX0xPQ0soKSBhbmQgUlRFX01CVUZfVU5MT0NLKCkuIElzIGl0IHRhcmdl dGVkIGF0IHVzZXIgYXBwbGljYXRpb25zDQo+ID4gb25seT8gSXMgaXQgdG8gYmUgdXNlZCBpbnRl cm5hbGx5IGJ5IERQREsgYXMgd2VsbD8gRG9lcyBpdCBpbmNsdWRlIFBNRHM/DQo+ID4NCj4gPiBJ IHRoaW5rIGFueSBvdmVyaGVhZCBvdXRzaWRlIG9mIGRlYnVnZ2luZyBtb2RlLCBhcyBtaW5pbWFs IGFzIGl0IGlzLCBpcyB0b28NCj4gPiBtdWNoIG9mIGEgInB1bmlzaG1lbnQiIGZvciB3ZWxsIGJl aGF2aW5nIGFwcGxpY2F0aW9ucy4gVGhlIGNvc3Qgb2YgYSBtZW1vcnkNCj4gPiBiYXJyaWVyIGNh biBiZSBleHRyZW1lbHkgaGlnaCBhbmQgdGhpcyBpcyBvbmUgb2YgdGhlIHJlYXNvbnMgRFBESyBw cm9jZXNzZXMNCj4gPiBtYnVmcyBhcyBidWxrcyBldmVyeSB0aW1lIGl0IGdldHMgdGhlIGNoYW5j ZS4gUlRFX01CVUZfTE9DSygpIGFuZA0KPiA+IFJURV9NQlVGX1VOTE9DSygpIHNob3VsZCB0aHVz IGV4aXN0IHVuZGVyIHNvbWUgY29tcGlsYXRpb24gb3B0aW9uIGRpc2FibGVkDQo+ID4gYnkgZGVm YXVsdCwgYW5kIHRob3VnaHQgYXMgYW4gYWRkaXRpb25hbCBkZWJ1Z2dpbmcgdG9vbC4NCj4gPg0K PiA+IEFsc28gdGhlIGltcGxlbWVudGF0aW9uIHdvdWxkIHByb2JhYmx5IGJlIG1vcmUgZXhwZW5z aXZlIHRoYW4geW91cg0KPiA+IHN1Z2dlc3Rpb24sIGluIG15IG9waW5pb24gdGhlIHJlZmVyZW5j ZSBjb3VudCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudA0KPiA+IGFuZC9vciBSVEVfTUJVRl9M T0NLKCkgbXVzdCBiZSByZWN1cnNpdmUsIGJlY2F1c2UgdGhpcyBpcyBob3cgbWJ1ZnMNCj4gPiB3 b3JrLiBGcmVlaW5nIG1idWZzIG11bHRpcGxlIHRpbWVzIGlzIHBlcmZlY3RseSB2YWxpZCBpbiBt YW55IGNhc2VzLg0KPiA+DQo+ID4gSG93IGNhbiBvbmUgbG9jayBzZXZlcmFsIG1idWZzIGF0IG9u Y2UgYnkgdGhlIHdheT8NCj4gPg0KPiA+IFNpbmNlIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UsIHRo aXMgY2FuIG9ubHkgbWFrZSBzZW5zZSBhcyBhIGRlYnVnZ2luZyB0b29sDQo+ID4gZGV2ZWxvcGVy cyBjYW4gdXNlIHdoZW4gdGhleSBlbmNvdW50ZXIgc29tZSBjb3JydXB0aW9uIGlzc3VlIHRoZXkg Y2Fubm90DQo+ID4gaWRlbnRpZnksIHNvbWV3aGF0IGxpa2UgcG9pc29uaW5nIGJ1ZmZlcnMgYmVm b3JlIHRoZXkgYXJlIGZyZWVkLiBOb3Qgc3VyZQ0KPiA+IGl0J3Mgd29ydGggdGhlIHRyb3VibGUu DQoNCkkgYW0gYWdyZWUgd2l0aCBBZHJpYW4gaGVyZSAtIGl0IGRvZXNuJ3QgIGxvb2sgd29ydGgg aXQ6DQpGcm9tIG9uZSBzaWRlIGl0IGFkZHMgcXVpdGUgYSBsb3Qgb2Ygb3ZlcmhlYWQgYW5kIGNv bXBsZXhpdHkgdG8gdGhlIG1idWYgY29kZS4NCkZyb20gb3RoZXIgc2lkZSBpdCB1c2FnZSBzZWVt cyBwcmV0dHkgbGltaXRlZCAtIHRoZXJlIHdvdWxkIGJlIGEgbG90IG9mIGNhc2VzIHdoZW4gaXQg d291bGRuJ3QgYmUNCmFibGUgdG8gZGV0ZWN0IHJhY2UgY29uZGl0aW9uIGFueXdheS4uDQpTbyBt eSBvcGluaW9uIGlzIE5BQ0suDQpCVFcsIGlmIHlvdXIgYXBwIGlzIGludGVudGlvbmFsbHkgdHJ5 aW5nIHRvIGRvIHJlYWQvd3JpdGUgdG8gdGhlIHNhbWUgbWJ1ZnMgc2ltdWx0YW5lb3VzbHkgZnJv bSBkaWZmZXJlbnQgdGhyZWFkcw0Kd2l0aG91dCBzb21lIGV4cGxpY2l0IHN5bmNocm9uaXphdGlv biwgdGhlbiBtb3N0IGxpa2VseSB0aGVyZSBpcyBzb21ldGhpbmcgd3Jvbmcgd2l0aCBpdC4NCktv bnN0YW50aW4NCg==