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 F40DC5A72 for ; Wed, 18 Mar 2015 10:56:29 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP; 18 Mar 2015 02:54:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,422,1422950400"; d="scan'208";a="468845655" Received: from irsmsx109.ger.corp.intel.com ([163.33.3.23]) by FMSMGA003.fm.intel.com with ESMTP; 18 Mar 2015 02:48:55 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.117]) by IRSMSX109.ger.corp.intel.com ([169.254.13.103]) with mapi id 14.03.0195.001; Wed, 18 Mar 2015 09:56:12 +0000 From: "Ananyev, Konstantin" To: "vadim.suraev@gmail.com" Thread-Topic: [PATCH v2] rte_mbuf: mbuf bulk alloc/free functions added + unittest Thread-Index: AQHQYPpsu9YquxZduU6MoiIW4nRTTp0hU+8AgABgQoCAAErnAIAAACjg Date: Wed, 18 Mar 2015 09:56:12 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258213F706D@irsmsx105.ger.corp.intel.com> References: <1426628169-1735-1-git-send-email-vadim.suraev@gmail.com> <2601191342CEEE43887BDE71AB977258213F6F10@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258213F7053@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB977258213F7053@irsmsx105.ger.corp.intel.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v2] rte_mbuf: mbuf bulk alloc/free functions added + unittest X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 18 Mar 2015 09:56:31 -0000 DQpIaSBWYWRpbSwNCg0KIA0KPiBGcm9tOiBWYWRpbSBTdXJhZXYgW21haWx0bzp2YWRpbS5zdXJh ZXZAZ21haWwuY29tXQ0KPiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDE4LCAyMDE1IDU6MTkgQU0N Cj4gVG86IEFuYW55ZXYsIEtvbnN0YW50aW4NCj4gQ2M6IGRldkBkcGRrLm9yZzsgb2xpdmllci5t YXR6QDZ3aW5kLmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1bWJlci5vcmcNCj4gU3ViamVjdDogUmU6 IFtQQVRDSCB2Ml0gcnRlX21idWY6IG1idWYgYnVsayBhbGxvYy9mcmVlIGZ1bmN0aW9ucyBhZGRl ZCArIHVuaXR0ZXN0DQo+IA0KPiBIaSwgS29uc3RhbnRpbiwNCj4gDQo+ID5TaG91bGRuJ3QgdGhl IGxpbmUgYWJvdmUgYmUgaW5zaWRlIGlmIChoZWFkICE9IE5VTEwpIHsuLi59IGJsb2NrPw0KPiBU aGlzIGlzIHJlbW92ZWQgYXMgT2xpdmllciBjb21tZW50ZWQgYmVmb3JlOg0KPiANCj4gPj4gK3sN Cj4gPiArwqAgwqAgwqBpZiAobGlrZWx5KGhlYWQgIT0gTlVMTCkpIHsNCj4gDQo+ID5JIHRoaW5r IHdlIHNob3VsZCByZW1vdmUgdGhpcyB0ZXN0LiBUaGUgb3RoZXIgbWJ1ZiBmdW5jdGlvbnMgZG8g bm90DQo+ID5jaGVjayB0aGlzLg0KPiBSZWdhcmRzLA0KPiDCoFZhZGltLg0KDQpJIG1lYW50IHRo YXQgaW4gbXkgb3BpbmlvbiBpdCBzaG91bGQgYmU6DQoNCndoaWxlIChoZWFkKSB7DQogICAgICAg ICAgICAgbmV4dCA9IGhlYWQtPm5leHQ7DQotICAgICAgICAgICAgIGhlYWQtPm5leHQgPSBOVUxM Ow0KIA0KICAgICAgICAgICAgIGhlYWQgPSBfX3J0ZV9wa3RtYnVmX3ByZWZyZWVfc2VnKGhlYWQp Ow0KICAgICAgICAgICAgIGlmIChsaWtlbHkoaGVhZCAhPSBOVUxMKSkgew0KKyAgICAgICAgICAg ICAgICAgIGhlYWQtPm5leHQgPSBOVUxMOyAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAg ICBSVEVfTUJVRl9BU1NFUlQocnRlX21idWZfcmVmY250X3JlYWQoaGVhZCkgPT0gMCk7DQoNClNh bWUgYXMgcnRlX3BrdG1idWZfZnJlZSgpIGRvaW5nLg0KDQpLb25zdGFudGluDQoNCj4gDQo+IE9u IFdlZCwgTWFyIDE4LCAyMDE1IGF0IDE6NDYgQU0sIEFuYW55ZXYsIEtvbnN0YW50aW4gPGtvbnN0 YW50aW4uYW5hbnlldkBpbnRlbC5jb20+IHdyb3RlOg0KPiBIaSBWYWRpbSwNCj4gDQo+ID4gLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiB2YWRpbS5zdXJhZXZAZ21haWwuY29t IFttYWlsdG86dmFkaW0uc3VyYWV2QGdtYWlsLmNvbV0NCj4gPiBTZW50OiBUdWVzZGF5LCBNYXJj aCAxNywgMjAxNSA5OjM2IFBNDQo+ID4gVG86IGRldkBkcGRrLm9yZw0KPiA+IENjOiBvbGl2aWVy Lm1hdHpANndpbmQuY29tOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29u c3RhbnRpbjsgdmFkaW0uc3VyYWV2QGdtYWlsLmNvbQ0KPiA+IFN1YmplY3Q6IFtQQVRDSCB2Ml0g cnRlX21idWY6IG1idWYgYnVsayBhbGxvYy9mcmVlIGZ1bmN0aW9ucyBhZGRlZCArIHVuaXR0ZXN0 DQo+ID4NCj4gPiBGcm9tOiAidmFkaW0uc3VyYWV2QGdtYWlsLmNvbSIgPHZhZGltLnN1cmFldkBn bWFpbC5jb20+DQo+ID4NCj4gPiBUaGlzIHBhdGNoIGFkZHMgbWJ1ZiBidWxrIGFsbG9jYXRpb24v ZnJlZWluZyBmdW5jdGlvbnMgYW5kIHVuaXR0ZXN0DQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBW YWRpbSBTdXJhZXYNCj4gPiA8dmFkaW0uc3VyYWV2QGdtYWlsLmNvbT4NCj4gPiAtLS0NCj4gPiBO ZXcgaW4gdjI6DQo+ID7CoCDCoCDCoC0gZnVuY3Rpb24gcnRlX3BrdG1idWZfYWxsb2NfYnVsayBh ZGRlZA0KPiA+wqAgwqAgwqAtIGZ1bmN0aW9uIHJ0ZV9wa3RtYnVmX2J1bGtfZnJlZSBhZGRlZA0K PiA+wqAgwqAgwqAtIGZ1bmN0aW9uIHJ0ZV9wa3RtYnVmX2ZyZWVfY2hhaW4gYWRkZWQNCj4gPsKg IMKgIMKgLSBhcHBsaWVkIHJldmlld2VycycgY29tbWVudHMNCj4gPg0KPiA+wqAgYXBwL3Rlc3Qv dGVzdF9tYnVmLmPCoCDCoCDCoCDCoHzCoCDCoDk0ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystDQo+ID7CoCBsaWIvbGlicnRlX21idWYvcnRlX21idWYuaCB8wqAg wqA4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+wqAgMiBm aWxlcyBjaGFuZ2VkLCAxODIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+DQo+ID4g ZGlmZiAtLWdpdCBhL2FwcC90ZXN0L3Rlc3RfbWJ1Zi5jIGIvYXBwL3Rlc3QvdGVzdF9tYnVmLmMN Cj4gPiBpbmRleCAxZmY2NmNiLi5iMjBjNmE0IDEwMDY0NA0KPiA+IC0tLSBhL2FwcC90ZXN0L3Rl c3RfbWJ1Zi5jDQo+ID4gKysrIGIvYXBwL3Rlc3QvdGVzdF9tYnVmLmMNCj4gPiBAQCAtNzcsNiAr NzcsNyBAQA0KPiA+wqAgI2RlZmluZSBSRUZDTlRfUklOR19TSVpFwqAgwqAgwqAgwqAgKFJFRkNO VF9NQlVGX05VTSAqIFJFRkNOVF9NQVhfUkVGKQ0KPiA+DQo+ID7CoCAjZGVmaW5lIE1BS0VfU1RS SU5HKHgpwqAgwqAgwqAgwqAgwqAgIyB4DQo+ID4gKyNkZWZpbmUgTUJVRl9QT09MX0xPQ0FMX0NB Q0hFX1NJWkUgMzINCj4gPg0KPiA+wqAgc3RhdGljIHN0cnVjdCBydGVfbWVtcG9vbCAqcGt0bWJ1 Zl9wb29sID0gTlVMTDsNCj4gPg0KPiA+IEBAIC00MDUsNiArNDA2LDg0IEBAIHRlc3RfcGt0bWJ1 Zl9wb29sKHZvaWQpDQo+ID7CoCDCoCDCoCDCoHJldHVybiByZXQ7DQo+ID7CoCB9DQo+ID4NCj4g PiArLyogdGVzdCBwa3RtYnVmIGJ1bGsgYWxsb2NhdGlvbiBhbmQgZnJlZWluZw0KPiA+ICsqLw0K PiA+ICtzdGF0aWMgaW50DQo+ID4gK3Rlc3RfcGt0bWJ1Zl9wb29sX2J1bGsodm9pZCkNCj4gPiAr ew0KPiA+ICvCoCDCoCDCoHVuc2lnbmVkIGk7DQo+ID4gK8KgIMKgIMKgLyogc2l6ZSBvZiBtZW1w b29sIC0gc2l6ZSBvZiBsb2NhbCBjYWNoZSwgb3RoZXJ3aXNlIG1heSBmYWlsICovDQo+ID4gK8Kg IMKgIMKgdW5zaWduZWQgbWJ1ZnNfdG9fYWxsb2NhdGUgPSBOQl9NQlVGIC0gTUJVRl9QT09MX0xP Q0FMX0NBQ0hFX1NJWkU7DQo+ID4gK8KgIMKgIMKgc3RydWN0IHJ0ZV9tYnVmICptW21idWZzX3Rv X2FsbG9jYXRlXTsNCj4gPiArwqAgwqAgwqBpbnQgcmV0ID0gMDsNCj4gPiArwqAgwqAgwqB1bnNp Z25lZCBtYnVmX2NvdW50X2JlZm9yZV9hbGxvY2F0aW9uID0gcnRlX21lbXBvb2xfY291bnQocGt0 bWJ1Zl9wb29sKTsNCj4gPiArDQo+ID4gK8KgIMKgIMKgZm9yIChpID0gMDsgaSA8IG1idWZzX3Rv X2FsbG9jYXRlOyBpKyspDQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgbVtpXSA9IE5VTEw7DQo+ ID4gK8KgIMKgIMKgLyogYWxsb2MgTkJfTUJVRi1NQlVGX1BPT0xfTE9DQUxfQ0FDSEVfU0laRSBt YnVmcyAqLw0KPiA+ICvCoCDCoCDCoHJldCA9IHJ0ZV9wa3RtYnVmX2FsbG9jX2J1bGsocGt0bWJ1 Zl9wb29sLCBtLCBtYnVmc190b19hbGxvY2F0ZSk7DQo+ID4gK8KgIMKgIMKgaWYgKHJldCkgew0K PiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHByaW50ZigiY2Fubm90IGFsbG9jYXRlICVkIG1idWZz IGJ1bGsgbWVtcG9vbF9jbnQ9JWQgcmV0PSVkXG4iLA0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoG1idWZzX3RvX2FsbG9jYXRlLA0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHJ0ZV9tZW1wb29sX2NvdW50KHBrdG1idWZfcG9vbCksDQo+ID4gK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0KTsNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAg wqByZXR1cm4gLTE7DQo+ID4gK8KgIMKgIMKgfQ0KPiA+ICvCoCDCoCDCoGlmICgocnRlX21lbXBv b2xfY291bnQocGt0bWJ1Zl9wb29sKSArIG1idWZzX3RvX2FsbG9jYXRlKSAhPQ0KPiA+ICvCoCDC oCDCoCDCoCDCoG1idWZfY291bnRfYmVmb3JlX2FsbG9jYXRpb24pIHsNCj4gPiArwqAgwqAgwqAg wqAgwqAgwqAgwqBwcmludGYoIm1lbXBvb2wgY291bnQgJWQgKyBhbGxvY2F0ZWQgJWQgIT0gaW5p dGlhbCAlZFxuIiwNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBydGVfbWVt cG9vbF9jb3VudChwa3RtYnVmX3Bvb2wpLA0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoG1idWZzX3RvX2FsbG9jYXRlLA0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoG1idWZfY291bnRfYmVmb3JlX2FsbG9jYXRpb24pOw0KPiA+ICvCoCDCoCDCoCDCoCDC oCDCoCDCoHJldHVybiAtMTsNCj4gPiArwqAgwqAgwqB9DQo+ID4gK8KgIMKgIMKgLyogZnJlZSB0 aGVtICovDQo+ID4gK8KgIMKgIMKgcnRlX3BrdG1idWZfYnVsa19mcmVlKG0sIG1idWZzX3RvX2Fs bG9jYXRlKTsNCj4gPiArDQo+ID4gK8KgIMKgIMKgaWYgKHJ0ZV9tZW1wb29sX2NvdW50KHBrdG1i dWZfcG9vbCnCoCAhPSBtYnVmX2NvdW50X2JlZm9yZV9hbGxvY2F0aW9uKSB7DQo+ID4gK8KgIMKg IMKgIMKgIMKgIMKgIMKgcHJpbnRmKCJtZW1wb29sIGNvdW50ICVkICE9IGluaXRpYWwgJWRcbiIs DQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcnRlX21lbXBvb2xfY291bnQo cGt0bWJ1Zl9wb29sKSwNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBtYnVm X2NvdW50X2JlZm9yZV9hbGxvY2F0aW9uKTsNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1 cm4gLTE7DQo+ID4gK8KgIMKgIMKgfQ0KPiA+ICvCoCDCoCDCoGZvciAoaSA9IDA7IGkgPCBtYnVm c190b19hbGxvY2F0ZTsgaSsrKQ0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoG1baV0gPSBOVUxM Ow0KPiA+ICsNCj4gPiArwqAgwqAgwqAvKiBhbGxvYyBOQl9NQlVGLU1CVUZfUE9PTF9MT0NBTF9D QUNIRV9TSVpFIG1idWZzICovDQo+ID4gK8KgIMKgIMKgcmV0ID0gcnRlX3BrdG1idWZfYWxsb2Nf YnVsayhwa3RtYnVmX3Bvb2wsIG0sIG1idWZzX3RvX2FsbG9jYXRlKTsNCj4gPiArwqAgwqAgwqBp ZiAocmV0KSB7DQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgcHJpbnRmKCJjYW5ub3QgYWxsb2Nh dGUgJWQgbWJ1ZnMgYnVsayBtZW1wb29sX2NudD0lZCByZXQ9JWRcbiIsDQo+ID4gK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbWJ1ZnNfdG9fYWxsb2NhdGUsDQo+ID4gK8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcnRlX21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKSwN Cj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQpOw0KPiA+ICvCoCDCoCDC oCDCoCDCoCDCoCDCoHJldHVybiAtMTsNCj4gPiArwqAgwqAgwqB9DQo+ID4gK8KgIMKgIMKgaWYg KChydGVfbWVtcG9vbF9jb3VudChwa3RtYnVmX3Bvb2wpICsgbWJ1ZnNfdG9fYWxsb2NhdGUpICE9 DQo+ID4gK8KgIMKgIMKgIMKgIMKgbWJ1Zl9jb3VudF9iZWZvcmVfYWxsb2NhdGlvbikgew0KPiA+ ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHByaW50ZigibWVtcG9vbCBjb3VudCAlZCArIGFsbG9jYXRl ZCAlZCAhPSBpbml0aWFsICVkXG4iLA0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHJ0ZV9tZW1wb29sX2NvdW50KHBrdG1idWZfcG9vbCksDQo+ID4gK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbWJ1ZnNfdG9fYWxs b2NhdGUsDQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgbWJ1Zl9jb3VudF9iZWZvcmVfYWxsb2NhdGlvbik7DQo+ID4gK8KgIMKg IMKgIMKgIMKgIMKgIMKgcmV0dXJuIC0xOw0KPiA+ICvCoCDCoCDCoH0NCj4gPiArDQo+ID4gK8Kg IMKgIMKgLyogY2hhaW4gaXQgKi8NCj4gPiArwqAgwqAgwqBmb3IgKGkgPSAwOyBpIDwgbWJ1ZnNf dG9fYWxsb2NhdGUgLSAxOyBpKyspIHsNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBtW2ldLT5u ZXh0ID0gbVtpICsgMV07DQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgbVswXS0+bmJfc2Vncysr Ow0KPiA+ICvCoCDCoCDCoH0NCj4gPiArwqAgwqAgwqAvKiBmcmVlIHRoZW0gKi8NCj4gPiArwqAg wqAgwqBydGVfcGt0bWJ1Zl9mcmVlX2NoYWluKG1bMF0pOw0KPiA+ICsNCj4gPiArwqAgwqAgwqBp ZiAocnRlX21lbXBvb2xfY291bnQocGt0bWJ1Zl9wb29sKcKgICE9IG1idWZfY291bnRfYmVmb3Jl X2FsbG9jYXRpb24pIHsNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBwcmludGYoIm1lbXBvb2wg Y291bnQgJWQgIT0gaW5pdGlhbCAlZFxuIiwNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBydGVfbWVtcG9vbF9jb3VudChwa3RtYnVmX3Bvb2wpLA0KPiA+ICvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1idWZfY291 bnRfYmVmb3JlX2FsbG9jYXRpb24pOw0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiAt MTsNCj4gPiArwqAgwqAgwqB9DQo+ID4gK8KgIMKgIMKgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ ICsNCj4gPsKgIC8qDQo+ID7CoCDCoCogdGVzdCB0aGF0IHRoZSBwb2ludGVyIHRvIHRoZSBkYXRh IG9uIGEgcGFja2V0IG1idWYgaXMgc2V0IHByb3Blcmx5DQo+ID7CoCDCoCovDQo+ID4gQEAgLTc2 Niw3ICs4NDUsOCBAQCB0ZXN0X21idWYodm9pZCkNCj4gPsKgIMKgIMKgIMKgaWYgKHBrdG1idWZf cG9vbCA9PSBOVUxMKSB7DQo+ID7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHBrdG1idWZfcG9vbCA9 DQo+ID7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJ0ZV9tZW1wb29sX2NyZWF0 ZSgidGVzdF9wa3RtYnVmX3Bvb2wiLCBOQl9NQlVGLA0KPiA+IC3CoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBNQlVGX1NJWkUsIDMyLA0K PiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBNQlVGX1NJWkUsDQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE1CVUZfUE9PTF9MT0NBTF9DQUNIRV9TSVpFLA0K PiA+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgc2l6ZW9mKHN0cnVjdCBydGVfcGt0bWJ1Zl9wb29sX3ByaXZhdGUpLA0KPiA+wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgcnRlX3BrdG1idWZfcG9vbF9pbml0LCBOVUxMLA0KPiA+wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcnRlX3BrdG1idWZfaW5p dCwgTlVMTCwNCj4gPiBAQCAtNzkwLDYgKzg3MCwxOCBAQCB0ZXN0X21idWYodm9pZCkNCj4gPsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0dXJuIC0xOw0KPiA+wqAgwqAgwqAgwqB9DQo+ID4NCj4g PiArwqAgwqAgwqAvKiB0ZXN0IGJ1bGsgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyAqLw0KPiA+ICvC oCDCoCDCoGlmICh0ZXN0X3BrdG1idWZfcG9vbF9idWxrKCkgPCAwKSB7DQo+ID4gK8KgIMKgIMKg IMKgIMKgIMKgIMKgcHJpbnRmKCJ0ZXN0X3BrdG1idWZfcG9vbF9idWxrKCkgZmFpbGVkXG4iKTsN Cj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gLTE7DQo+ID4gK8KgIMKgIMKgfQ0KPiA+ ICsNCj4gPiArwqAgwqAgwqAvKiBvbmNlIGFnYWluIHRvIGVuc3VyZSBhbGwgbWJ1ZnMgd2VyZSBm cmVlZCAqLw0KPiA+ICvCoCDCoCDCoGlmICh0ZXN0X3BrdG1idWZfcG9vbF9idWxrKCkgPCAwKSB7 DQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgcHJpbnRmKCJ0ZXN0X3BrdG1idWZfcG9vbF9idWxr KCkgZmFpbGVkXG4iKTsNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gLTE7DQo+ID4g K8KgIMKgIMKgfQ0KPiA+ICsNCj4gPsKgIMKgIMKgIMKgLyogdGVzdCB0aGF0IHRoZSBwb2ludGVy IHRvIHRoZSBkYXRhIG9uIGEgcGFja2V0IG1idWYgaXMgc2V0IHByb3Blcmx5ICovDQo+ID7CoCDC oCDCoCDCoGlmICh0ZXN0X3BrdG1idWZfcG9vbF9wdHIoKSA8IDApIHsNCj4gPsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgcHJpbnRmKCJ0ZXN0X3BrdG1idWZfcG9vbF9wdHIoKSBmYWlsZWRcbiIpOw0K PiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX21idWYvcnRlX21idWYuaCBiL2xpYi9saWJydGVf bWJ1Zi9ydGVfbWJ1Zi5oDQo+ID4gaW5kZXggMTdiYTc5MS4uOTk1MjM3ZCAxMDA2NDQNCj4gPiAt LS0gYS9saWIvbGlicnRlX21idWYvcnRlX21idWYuaA0KPiA+ICsrKyBiL2xpYi9saWJydGVfbWJ1 Zi9ydGVfbWJ1Zi5oDQo+ID4gQEAgLTgyNSw2ICs4MjUsOTUgQEAgc3RhdGljIGlubGluZSB2b2lk IHJ0ZV9wa3RtYnVmX2ZyZWUoc3RydWN0IHJ0ZV9tYnVmICptKQ0KPiA+wqAgfQ0KPiA+DQo+ID7C oCAvKioNCj4gPiArICogQWxsb2NhdGUgYSBidWxrIG9mIG1idWZzLCBpbml0aWF0ZSByZWZjbnQg YW5kIHJlc2V0cw0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcG9vbA0KPiA+ICsgKsKgIMKgIG1l bW9yeSBwb29sIHRvIGFsbG9jYXRlIGZyb20NCj4gPiArICogQHBhcmFtIG1idWZzDQo+ID4gKyAq wqAgwqAgQXJyYXkgb2YgcG9pbnRlcnMgdG8gbWJ1Zg0KPiA+ICsgKiBAcGFyYW0gY291bnQNCj4g PiArICrCoCDCoCBBcnJheSBzaXplDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCBy dGVfcGt0bWJ1Zl9hbGxvY19idWxrKHN0cnVjdCBydGVfbWVtcG9vbCAqcG9vbCwNCj4gPiArwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3Ry dWN0IHJ0ZV9tYnVmICoqbWJ1ZnMsDQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVuc2lnbmVkIGNvdW50KQ0KPiA+ICt7DQo+ID4g K8KgIMKgIMKgdW5zaWduZWQgaWR4Ow0KPiA+ICvCoCDCoCDCoGludCByYyA9IDA7DQo+ID4gKw0K PiA+ICvCoCDCoCDCoHJjID0gcnRlX21lbXBvb2xfZ2V0X2J1bGsocG9vbCwgKHZvaWQgKiopbWJ1 ZnMsIGNvdW50KTsNCj4gPiArwqAgwqAgwqBpZiAodW5saWtlbHkocmMpKQ0KPiA+ICvCoCDCoCDC oCDCoCDCoCDCoCDCoHJldHVybiByYzsNCj4gPiArDQo+ID4gK8KgIMKgIMKgZm9yIChpZHggPSAw OyBpZHggPCBjb3VudDsgaWR4KyspIHsNCj4gPiArwqAgwqAgwqAgwqAgwqAgwqAgwqBSVEVfTUJV Rl9BU1NFUlQocnRlX21idWZfcmVmY250X3JlYWQobWJ1ZnNbaWR4XSkgPT0gMCk7DQo+ID4gK8Kg IMKgIMKgIMKgIMKgIMKgIMKgcnRlX21idWZfcmVmY250X3NldChtYnVmc1tpZHhdLCAxKTsNCj4g PiArwqAgwqAgwqAgwqAgwqAgwqAgwqBydGVfcGt0bWJ1Zl9yZXNldChtYnVmc1tpZHhdKTsNCj4g PiArwqAgwqAgwqB9DQo+ID4gK8KgIMKgIMKgcmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogRnJlZSBhIGJ1bGsgb2YgbWJ1ZnMgaW50byBpdHMgb3JpZ2luYWwgbWVt cG9vbC4NCj4gPiArICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHJlZmNudCBlcXVhbHMgMQ0KPiA+ ICsgKiBhcyB3ZWxsIGFzIHRoZSBmcmVlZCBtYnVmcyBhcmUgZGlyZWN0DQo+IEkgdGhpbmsgeW91 ciBmb3Jnb3QgdG8gbWVudGlvbiBpbiBjb21tZW50cyBvbmUgbW9yZSByZXF1aXJlbWVudCBmb3Ig dGhhdCBmdW5jdGlvbjoNCj4gYWxsIG1idWZzIGhhdmUgdG8gYmUgZnJvbSB0aGUgc2FtZSBtZW1w b29sLg0KPiANCj4gPiArICoNCj4gPiArICogQHBhcmFtIG1idWZzDQo+ID4gKyAqwqAgwqAgQXJy YXkgb2YgcG9pbnRlcnMgdG8gbWJ1Zg0KPiA+ICsgKiBAcGFyYW0gY291bnQNCj4gPiArICrCoCDC oCBBcnJheSBzaXplDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRlX3BrdG1i dWZfYnVsa19mcmVlKHN0cnVjdCBydGVfbWJ1ZiAqKm1idWZzLA0KPiA+ICvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1bnNpZ25lZCBjb3Vu dCkNCj4gPiArew0KPiA+ICvCoCDCoCDCoHVuc2lnbmVkIGlkeDsNCj4gPiArDQo+ID4gK8KgIMKg IMKgUlRFX01CVUZfQVNTRVJUKGNvdW50ID4gMCk7DQo+ID4gKw0KPiA+ICvCoCDCoCDCoGZvciAo aWR4ID0gMDsgaWR4IDwgY291bnQ7IGlkeCsrKSB7DQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKg cnRlX21idWZfcmVmY250X3VwZGF0ZShtYnVmc1tpZHhdLCAtMSk7DQo+IA0KPiBZb3UgY2FuIGRv IGp1c3Q6DQo+IHJ0ZV9tYnVmX3JlZmNudF9zZXQobSwgMCk7DQo+IGhlcmUgYW5kIG1vdmUgeW91 ciBhc3NlcnQgYWJvdmUgaXQuDQo+IFNvbWV0aGluZyBsaWtlOg0KPiBSVEVfTUJVRl9BU1NFUlQo cnRlX21idWZfcmVmY250X3JlYWQobWJ1ZnNbaWR4XSkgPT0gMSk7DQo+IHJ0ZV9tYnVmX3JlZmNu dF9zZXQobSwgMCk7DQo+IA0KPiBBbHNvIHByb2JhYmx5IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0 byBhZGQgb25lIG1vcmUgYXNzZXJ0IGhlcmUsDQo+IHNvbWV0aGluZyBsaWtlOg0KPiBSVEVfTUJV Rl9BU1NFUlQobWJ1ZnNbaWR4XS0+cG9vbCA9PSBtdWZzWzBdLT5wb29sKTsNCj4gDQo+ID4gK8Kg IMKgIMKgIMKgIMKgIMKgIMKgUlRFX01CVUZfQVNTRVJUKHJ0ZV9tYnVmX3JlZmNudF9yZWFkKG1i dWZzW2lkeF0pID09IDApOw0KPiA+ICvCoCDCoCDCoH0NCj4gPiArwqAgwqAgwqBydGVfbWVtcG9v bF9wdXRfYnVsayhtYnVmc1swXS0+cG9vbCwgKHZvaWQgKiopbWJ1ZnMsIGNvdW50KTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEZyZWUgY2hhaW5lZCAoc2NhdHRlcmVkKSBtYnVm cyBpbnRvIGl0cyBvcmlnaW5hbCBtZW1wb29sKHMpLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0g aGVhZA0KPiA+ICsgKsKgIMKgIFRoZSBoZWFkIG9mIG1idWZzIHRvIGJlIGZyZWVkIGNoYWluLiBN dXN0IG5vdCBiZSBOVUxMDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRlX3Br dG1idWZfZnJlZV9jaGFpbihzdHJ1Y3QgcnRlX21idWYgKmhlYWQpDQo+ID4gK3sNCj4gPiArwqAg wqAgwqBzdHJ1Y3QgcnRlX21idWYgKm1idWZzW2hlYWQtPm5iX3NlZ3NdOw0KPiA+ICvCoCDCoCDC oHVuc2lnbmVkIG1idWZzX2NvdW50ID0gMDsNCj4gPiArwqAgwqAgwqBzdHJ1Y3QgcnRlX21idWYg Km5leHQ7DQo+ID4gKw0KPiA+ICvCoCDCoCDCoHdoaWxlIChoZWFkKSB7DQo+ID4gK8KgIMKgIMKg IMKgIMKgIMKgIMKgbmV4dCA9IGhlYWQtPm5leHQ7DQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKg aGVhZC0+bmV4dCA9IE5VTEw7DQo+IA0KPiBTaG91bGRuJ3QgdGhlIGxpbmUgYWJvdmUgYmUgaW5z aWRlIGlmIChoZWFkICE9IE5VTEwpIHsuLi59IGJsb2NrPw0KPiANCj4gPiArwqAgwqAgwqAgwqAg wqAgwqAgwqBoZWFkID0gX19ydGVfcGt0bWJ1Zl9wcmVmcmVlX3NlZyhoZWFkKTsNCj4gPiArwqAg wqAgwqAgwqAgwqAgwqAgwqBpZiAobGlrZWx5KGhlYWQgIT0gTlVMTCkpIHsNCj4gPiArwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBSVEVfTUJVRl9BU1NFUlQocnRlX21idWZfcmVmY250 X3JlYWQoaGVhZCkgPT0gMCk7DQo+IA0KPiBJIGRvbid0IHRoaW5rIHRoZXJlIGlzIGFueSB1c2Ug b2YgdGhlIGFzc2VydCBhYm92ZS4NCj4gSWYgcHJlZnJlZV9zZWcgcmV0dXJucyBub24tTlVMTCB2 YWx1ZSwgaXQgc2V0cyByZWZjbnQgdG8gMCBmb3IgdGhhdCBtYnVmLg0KPiANCj4gPiArwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAobGlrZWx5KCghbWJ1ZnNfY291bnQpIHx8DQo+ ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChoZWFk LT5wb29sID09IG1idWZzWzBdLT5wb29sKSkpDQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgbWJ1ZnNbbWJ1ZnNfY291bnQrK10gPSBoZWFkOw0KPiA+ICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVsc2Ugew0KPiA+ICvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJ0ZV9tZW1wb29sX3B1dF9idWxrKG1idWZz WzBdLT5wb29sLA0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAodm9pZCAqKiltYnVmcywNCj4gPiAr wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgbWJ1ZnNfY291bnQpOw0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1idWZzX2NvdW50ID0gMDsNCj4gPiArwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9DQo+ID4gK8KgIMKgIMKgIMKgIMKgIMKgIMKgfQ0KPiA+ ICvCoCDCoCDCoCDCoCDCoCDCoCDCoGhlYWQgPSBuZXh0Ow0KPiA+ICvCoCDCoCDCoH0NCj4gPiAr wqAgwqAgwqBpZiAobWJ1ZnNfY291bnQgPiAwKQ0KPiA+ICvCoCDCoCDCoCDCoCDCoCDCoCDCoHJ0 ZV9tZW1wb29sX3B1dF9idWxrKG1idWZzWzBdLT5wb29sLA0KPiA+ICvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAodm9pZCAqKiltYnVmcywNCj4gPiAr wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbWJ1ZnNf Y291bnQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPsKgIMKgKiBDcmVhdGVzIGEgImNs b25lIiBvZiB0aGUgZ2l2ZW4gcGFja2V0IG1idWYuDQo+ID7CoCDCoCoNCj4gPsKgIMKgKiBXYWxr cyB0aHJvdWdoIGFsbCBzZWdtZW50cyBvZiB0aGUgZ2l2ZW4gcGFja2V0IG1idWYsIGFuZCBmb3Ig ZWFjaCBvZiB0aGVtOg0KPiA+IC0tDQo+ID4gMS43LjkuNQ0KDQo=