From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 8193F532C; Tue, 9 Apr 2019 09:40:20 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Apr 2019 00:40:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,328,1549958400"; d="scan'208";a="129788016" Received: from pgsmsx105.gar.corp.intel.com ([10.221.44.96]) by orsmga007.jf.intel.com with ESMTP; 09 Apr 2019 00:40:18 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.111]) by PGSMSX105.gar.corp.intel.com ([169.254.4.8]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 15:40:17 +0800 From: "Zhao1, Wei" To: "Yigit, Ferruh" , "dev@dpdk.org" CC: "stable@dpdk.org" , "stephen@networkplumber.org" , "Ananyev, Konstantin" Thread-Topic: [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API Thread-Index: AQHU4GFyXPe53M0yN0G4YLqSpzGFL6YXN+gAgBxU/WCAAADZMA== Date: Tue, 9 Apr 2019 07:40:14 +0000 Message-ID: References: <1552896961-33681-1-git-send-email-wei.zhao1@intel.com> <1553224548-37749-1-git-send-email-wei.zhao1@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [172.30.20.206] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API 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: Tue, 09 Apr 2019 07:40:21 -0000 SGksICBGZXJydWgNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBaaGFv MSwgV2VpDQo+IFNlbnQ6IFR1ZXNkYXksIEFwcmlsIDksIDIwMTkgMzozOCBQTQ0KPiBUbzogWWln aXQsIEZlcnJ1aCA8ZmVycnVoLnlpZ2l0QGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzog c3RhYmxlQGRwZGsub3JnOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29u c3RhbnRpbg0KPiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6 IFtkcGRrLXN0YWJsZV0gW1BBVENIIHYzXSBhcHAvdGVzdHBtZDogZml4IHN1cHBvcnQgb2YgaGV4 IHN0cmluZw0KPiBwYXJzZXIgZm9yIGZsb3cgQVBJDQo+IA0KPiBIaSwgIEZlcnJ1aA0KPiANCj4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFlpZ2l0LCBGZXJydWgNCj4g PiBTZW50OiBGcmlkYXksIE1hcmNoIDIyLCAyMDE5IDEwOjU2IFBNDQo+ID4gVG86IFpoYW8xLCBX ZWkgPHdlaS56aGFvMUBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmcNCj4gPiBDYzogc3RhYmxlQGRw ZGsub3JnOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29uc3RhbnRpbg0K PiA+IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbZHBk ay1zdGFibGVdIFtQQVRDSCB2M10gYXBwL3Rlc3RwbWQ6IGZpeCBzdXBwb3J0IG9mIGhleA0KPiA+ IHN0cmluZyBwYXJzZXIgZm9yIGZsb3cgQVBJDQo+ID4NCj4gPiBPbiAzLzIyLzIwMTkgMzoxNSBB TSwgV2VpIFpoYW8gd3JvdGU6DQo+ID4gPiBUaGVyZSBpcyBuZWVkIGZvciB1c2VycyB0byBzZXQg Y29uZmlndXJhdGlvbiBvZiBIRVggbnVtYmVyIGZvciBSU1MNCj4gPiA+IGtleS4gVGhlIGtleSBi eXRlIHNob3VsZCBiZSBwYXNzIGRvd24gYXMgaGV4IG51bWJlciBub3QgYXMgY2hhcg0KPiA+ID4g c3RyaW5nLiBUaGlzIHBhdGNoIGVuYWJsZSBjbWRsaW5lIGZsb3cgcGFyc2UgSEVYIG51bWJlciwg aW4gb3JkZXIgdG8NCj4gPiA+IG5vdCB1c2luZyBzdHJpbmcgd2hpY2ggcGFzcyBBU0lDIG51bWJl ci4NCj4gPiA+DQo+ID4gPiBGaXhlczogZjRkNjIzZjk2MTE5ICgiYXBwL3Rlc3RwbWQ6IGZpeCBt aXNzaW5nIFJTUyBmaWVsZHMgaW4gZmxvdw0KPiA+ID4gYWN0aW9uIikNCj4gPiA+IENjOiBzdGFi bGVAZHBkay5vcmcNCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBXZWkgWmhhbyA8d2VpLnpo YW8xQGludGVsLmNvbT4NCj4gPiA+IFRlc3RlZC1ieTogUGVuZyBZdWFuIDx5dWFuLnBlbmdAaW50 ZWwuY29tPg0KPiA+DQo+ID4gPC4uLj4NCj4gPg0KPiA+ID4gQEAgLTQ0NzUsNiArNDQ4NiwxMzgg QEAgcGFyc2Vfc3RyaW5nKHN0cnVjdCBjb250ZXh0ICpjdHgsIGNvbnN0DQo+ID4gPiBzdHJ1Y3QN Cj4gPiB0b2tlbiAqdG9rZW4sDQo+ID4gPiAgCXJldHVybiAtMTsNCj4gPiA+ICB9DQo+ID4gPg0K PiA+ID4gK3N0YXRpYyB1aW50MzJfdA0KPiA+ID4gK2dldF9oZXhfdmFsKGNoYXIgYykNCj4gPiA+ ICt7DQo+ID4gPiArCXN3aXRjaCAoYykgew0KPiA+ID4gKwljYXNlICcwJzogY2FzZSAnMSc6IGNh c2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOg0KPiA+ID4gKwljYXNlICc2Jzog Y2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoNCj4gPiA+ICsJCXJldHVybiBjIC0gJzAnOw0K PiA+ID4gKwljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6 IGNhc2UgJ0YnOg0KPiA+ID4gKwkJcmV0dXJuIGMgLSAnQScgKyAxMDsNCj4gPiA+ICsJY2FzZSAn YSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzoNCj4g PiA+ICsJCXJldHVybiBjIC0gJ2EnICsgMTA7DQo+ID4gPiArCWRlZmF1bHQ6DQo+ID4gPiArCQly ZXR1cm4gMDsNCj4gPiA+ICsJfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50 DQo+ID4gPiArcGFyc2VfaGV4X3N0cmluZyhjb25zdCBjaGFyICpzcmMsIHVpbnQ4X3QgKmRzdCwg dWludDMyX3QgKnNpemUpIHsNCj4gPiA+ICsJY29uc3QgY2hhciAqYzsNCj4gPiA+ICsJdWludDMy X3QgaTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogQ2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLw0KPiA+ ID4gKwlpZiAoKHNyYyA9PSBOVUxMKSB8fA0KPiA+ID4gKwkJKGRzdCA9PSBOVUxMKSB8fA0KPiA+ ID4gKwkJKHNpemUgPT0gTlVMTCkgfHwNCj4gPiA+ICsJCSgqc2l6ZSA9PSAwKSkNCj4gPiA+ICsJ CXJldHVybiAtMTsNCj4gPiA+ICsJaWYgKCgqc2l6ZSAmIDEpICE9IDApDQo+ID4gPiArCQlyZXR1 cm4gLTE7DQo+ID4gPiArDQo+ID4gPiArCWZvciAoYyA9IHNyYywgaSA9IDA7IGkgPCAqc2l6ZTsg YysrLCBpKyspIHsNCj4gPiA+ICsJCWlmIChpc3hkaWdpdCgqYykpDQo+ID4gPiArCQkJY29udGlu dWU7DQo+ID4gPiArCQllbHNlDQo+ID4gPiArCQkJcmV0dXJuIC0xOw0KPiA+ID4gKwl9DQo+ID4g PiArDQo+ID4gPiArCSpzaXplID0gKnNpemUgLyAyOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBDb252 ZXJ0IGNoYXJzIHRvIGJ5dGVzICovDQo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCAqc2l6ZTsgaSsr KQ0KPiA+ID4gKwkJZHN0W2ldID0gZ2V0X2hleF92YWwoc3JjWzIgKiBpXSkgKiAxNiArDQo+ID4g PiArCQkJZ2V0X2hleF92YWwoc3JjWzIgKiBpICsgMV0pOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1 cm4gMDsNCj4gPiA+ICt9DQo+ID4NCj4gPiBJIGNhbiBzZWUgdGhpcyBoYXMgYmVlbiBkaXNjdXNz ZWQgYWxyZWFkeSBidXQgd2hhdCB3b3VsZCB5b3UgdGhpbmsNCj4gPiB1cGRhdGluZyB0aGUgJ3Bh cnNlX2hleF9zdHJpbmcnIHNvbWV0aGluZyBsaWtlIGZvbGxvd2luZywgaXQgaXMgbGVzcyBjb2Rl IHRvDQo+IG1haW50YWluOg0KPiA+DQo+ID4gc3RhdGljIGludA0KPiA+IHBhcnNlX2hleF9zdHJp bmcoY29uc3QgY2hhciAqc3JjLCB1aW50OF90ICpkc3QsIHVpbnQzMl90ICpzaXplKSB7DQo+ID4g ICBpbnQgbGVuOw0KPiA+ICAgaW50IGkNCj4gPiAgIGZvciAoaSA9IDAsIGxlbiA9IDA7IGkgPCAq c2l6ZTsgaSArPSAyKSB7DQo+ID4gICAgIGNoYXIgdG1wWzNdOw0KPiA+ICAgICBzbnByaW50Zih0 bXAsIDMsIHNyYyArIGkpOw0KPiA+ICAgICBkc3RbbGVuKytdID0gc3RydG91bCh0bXAsIE5VTEws IDE2KTsNCj4gPiAgIH0NCj4gPiAgIGRzdFtsZW5dID0gMDsNCj4gPiAgICpzaXplID0gbGVuOw0K PiA+ICAgcmV0dXJuIDA7DQo+ID4gfQ0KPiA+DQo+ID4gKGluZGVlZCB3aXRoIGJldHRlciBlcnJv ciBjaGVja2luZyBvbiBzdHJ0b3VsIDspICkNCj4gPg0KPiA+IDwuLi4+DQo+IA0KPiANCj4gDQo+ IEkgaGF2ZSBjaGFuZ2UgY29kZSBzdHlsZSBhcyB5b3VyIGd1aWRlIGFzIGJlbGxvdywgYnV0IHN0 cnRvdWwoKSBzZWVtcyBkbyBub3QNCj4gd29yaywgaXQgcmV0dXJuIGMgd2l0aCBhIG5vbmUtbnVs bCBldmVyeSB0aW1lLg0KPiB5b3UgY2FuIGhhdmUgYSB0cnkgeW91cnNlbGYuDQo+IA0KPiANCj4g c3RhdGljIGludA0KPiBwYXJzZV9oZXhfc3RyaW5nKGNvbnN0IGNoYXIgKnNyYywgdWludDhfdCAq ZHN0LCB1aW50MzJfdCAqc2l6ZSkNCj4gew0KPiAJY2hhciAqYyA9IE5VTEw7DQo+IAl1aW50MzJf dCBpLCBsZW47DQo+IAljaGFyIHRtcFszXTsNCj4gDQo+IAkvKiBDaGVjayBpbnB1dCBwYXJhbWV0 ZXJzICovDQo+IAlpZiAoKHNyYyA9PSBOVUxMKSB8fA0KPiAJCShkc3QgPT0gTlVMTCkgfHwNCj4g CQkoc2l6ZSA9PSBOVUxMKSB8fA0KPiAJCSgqc2l6ZSA9PSAwKSkNCj4gCQlyZXR1cm4gLTE7DQo+ IA0KPiAJLyogQ29udmVydCBjaGFycyB0byBieXRlcyAqLw0KPiAJZm9yIChpID0gMCwgbGVuID0g MDsgaSA8ICpzaXplOyBpICs9IDIpIHsNCj4gCQlzbnByaW50Zih0bXAsIDMsICIlcyIgLHNyYyAr IGkpOw0KPiAJCWRzdFtsZW4rK10gPSBzdHJ0b3VsKHRtcCwgJmMsIDE2KTsNCj4gCQlpZihjKQ0K PiAJCQlyZXR1cm4gLTE7DQo+ICAJfQ0KPiAJZHN0W2xlbl0gPSAwOw0KPiAJKnNpemUgPSBsZW47 DQo+IA0KPiAJcmV0dXJuIDA7DQo+IH0NCj4gDQoNCkFzIHRoaXMgY29kZSB3aXRoIHN0cnRvdWwg ZG8gbm90IHdvcmssIEkgc3VnZ2VzdCB3ZSB1c2UgdjMgb2YgZ2V0X2hleF92YWwoKSwgZG8geW91 IHRoaW5rIHNvPw0KDQoNCj4gPg0KPiA+ID4gKwkvKiBPdXRwdXQgYnVmZmVyIGlzIG5vdCBuZWNl c3NhcmlseSBOVUwtdGVybWluYXRlZC4gKi8NCj4gPiA+ICsJbWVtY3B5KGJ1ZiwgaGV4X3RtcCwg aGV4bGVuKTsNCj4gPiA+ICsJbWVtc2V0KCh1aW50OF90ICopYnVmICsgbGVuLCAweDAwLCBzaXpl IC0gaGV4bGVuKTsNCj4gPg0KPiA+IENhbid0IHRoaXMgb3ZlcmZsb3cgdGhlICdidWYnPyBzaW5j ZSAibGVuID0gMiAqIGhleGxlbiINCj4gPiBJIGd1ZXNzIGludGVudGlvbiBpcyAiYnVmICsgaGV4 bGVuIg0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 192C4A0096 for ; Tue, 9 Apr 2019 09:40:23 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C319E5592; Tue, 9 Apr 2019 09:40:22 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 8193F532C; Tue, 9 Apr 2019 09:40:20 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Apr 2019 00:40:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,328,1549958400"; d="scan'208";a="129788016" Received: from pgsmsx105.gar.corp.intel.com ([10.221.44.96]) by orsmga007.jf.intel.com with ESMTP; 09 Apr 2019 00:40:18 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.111]) by PGSMSX105.gar.corp.intel.com ([169.254.4.8]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 15:40:17 +0800 From: "Zhao1, Wei" To: "Yigit, Ferruh" , "dev@dpdk.org" CC: "stable@dpdk.org" , "stephen@networkplumber.org" , "Ananyev, Konstantin" Thread-Topic: [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API Thread-Index: AQHU4GFyXPe53M0yN0G4YLqSpzGFL6YXN+gAgBxU/WCAAADZMA== Date: Tue, 9 Apr 2019 07:40:14 +0000 Message-ID: References: <1552896961-33681-1-git-send-email-wei.zhao1@intel.com> <1553224548-37749-1-git-send-email-wei.zhao1@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [172.30.20.206] Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Message-ID: <20190409074014.QOV1ZjOluuYLUB0INs7_LJypISTaBU5N34DpPIMpw2A@z> SGksICBGZXJydWgNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBaaGFv MSwgV2VpDQo+IFNlbnQ6IFR1ZXNkYXksIEFwcmlsIDksIDIwMTkgMzozOCBQTQ0KPiBUbzogWWln aXQsIEZlcnJ1aCA8ZmVycnVoLnlpZ2l0QGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzog c3RhYmxlQGRwZGsub3JnOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29u c3RhbnRpbg0KPiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6 IFtkcGRrLXN0YWJsZV0gW1BBVENIIHYzXSBhcHAvdGVzdHBtZDogZml4IHN1cHBvcnQgb2YgaGV4 IHN0cmluZw0KPiBwYXJzZXIgZm9yIGZsb3cgQVBJDQo+IA0KPiBIaSwgIEZlcnJ1aA0KPiANCj4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFlpZ2l0LCBGZXJydWgNCj4g PiBTZW50OiBGcmlkYXksIE1hcmNoIDIyLCAyMDE5IDEwOjU2IFBNDQo+ID4gVG86IFpoYW8xLCBX ZWkgPHdlaS56aGFvMUBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmcNCj4gPiBDYzogc3RhYmxlQGRw ZGsub3JnOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29uc3RhbnRpbg0K PiA+IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbZHBk ay1zdGFibGVdIFtQQVRDSCB2M10gYXBwL3Rlc3RwbWQ6IGZpeCBzdXBwb3J0IG9mIGhleA0KPiA+ IHN0cmluZyBwYXJzZXIgZm9yIGZsb3cgQVBJDQo+ID4NCj4gPiBPbiAzLzIyLzIwMTkgMzoxNSBB TSwgV2VpIFpoYW8gd3JvdGU6DQo+ID4gPiBUaGVyZSBpcyBuZWVkIGZvciB1c2VycyB0byBzZXQg Y29uZmlndXJhdGlvbiBvZiBIRVggbnVtYmVyIGZvciBSU1MNCj4gPiA+IGtleS4gVGhlIGtleSBi eXRlIHNob3VsZCBiZSBwYXNzIGRvd24gYXMgaGV4IG51bWJlciBub3QgYXMgY2hhcg0KPiA+ID4g c3RyaW5nLiBUaGlzIHBhdGNoIGVuYWJsZSBjbWRsaW5lIGZsb3cgcGFyc2UgSEVYIG51bWJlciwg aW4gb3JkZXIgdG8NCj4gPiA+IG5vdCB1c2luZyBzdHJpbmcgd2hpY2ggcGFzcyBBU0lDIG51bWJl ci4NCj4gPiA+DQo+ID4gPiBGaXhlczogZjRkNjIzZjk2MTE5ICgiYXBwL3Rlc3RwbWQ6IGZpeCBt aXNzaW5nIFJTUyBmaWVsZHMgaW4gZmxvdw0KPiA+ID4gYWN0aW9uIikNCj4gPiA+IENjOiBzdGFi bGVAZHBkay5vcmcNCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBXZWkgWmhhbyA8d2VpLnpo YW8xQGludGVsLmNvbT4NCj4gPiA+IFRlc3RlZC1ieTogUGVuZyBZdWFuIDx5dWFuLnBlbmdAaW50 ZWwuY29tPg0KPiA+DQo+ID4gPC4uLj4NCj4gPg0KPiA+ID4gQEAgLTQ0NzUsNiArNDQ4NiwxMzgg QEAgcGFyc2Vfc3RyaW5nKHN0cnVjdCBjb250ZXh0ICpjdHgsIGNvbnN0DQo+ID4gPiBzdHJ1Y3QN Cj4gPiB0b2tlbiAqdG9rZW4sDQo+ID4gPiAgCXJldHVybiAtMTsNCj4gPiA+ICB9DQo+ID4gPg0K PiA+ID4gK3N0YXRpYyB1aW50MzJfdA0KPiA+ID4gK2dldF9oZXhfdmFsKGNoYXIgYykNCj4gPiA+ ICt7DQo+ID4gPiArCXN3aXRjaCAoYykgew0KPiA+ID4gKwljYXNlICcwJzogY2FzZSAnMSc6IGNh c2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOg0KPiA+ID4gKwljYXNlICc2Jzog Y2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoNCj4gPiA+ICsJCXJldHVybiBjIC0gJzAnOw0K PiA+ID4gKwljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6 IGNhc2UgJ0YnOg0KPiA+ID4gKwkJcmV0dXJuIGMgLSAnQScgKyAxMDsNCj4gPiA+ICsJY2FzZSAn YSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzoNCj4g PiA+ICsJCXJldHVybiBjIC0gJ2EnICsgMTA7DQo+ID4gPiArCWRlZmF1bHQ6DQo+ID4gPiArCQly ZXR1cm4gMDsNCj4gPiA+ICsJfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50 DQo+ID4gPiArcGFyc2VfaGV4X3N0cmluZyhjb25zdCBjaGFyICpzcmMsIHVpbnQ4X3QgKmRzdCwg dWludDMyX3QgKnNpemUpIHsNCj4gPiA+ICsJY29uc3QgY2hhciAqYzsNCj4gPiA+ICsJdWludDMy X3QgaTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogQ2hlY2sgaW5wdXQgcGFyYW1ldGVycyAqLw0KPiA+ ID4gKwlpZiAoKHNyYyA9PSBOVUxMKSB8fA0KPiA+ID4gKwkJKGRzdCA9PSBOVUxMKSB8fA0KPiA+ ID4gKwkJKHNpemUgPT0gTlVMTCkgfHwNCj4gPiA+ICsJCSgqc2l6ZSA9PSAwKSkNCj4gPiA+ICsJ CXJldHVybiAtMTsNCj4gPiA+ICsJaWYgKCgqc2l6ZSAmIDEpICE9IDApDQo+ID4gPiArCQlyZXR1 cm4gLTE7DQo+ID4gPiArDQo+ID4gPiArCWZvciAoYyA9IHNyYywgaSA9IDA7IGkgPCAqc2l6ZTsg YysrLCBpKyspIHsNCj4gPiA+ICsJCWlmIChpc3hkaWdpdCgqYykpDQo+ID4gPiArCQkJY29udGlu dWU7DQo+ID4gPiArCQllbHNlDQo+ID4gPiArCQkJcmV0dXJuIC0xOw0KPiA+ID4gKwl9DQo+ID4g PiArDQo+ID4gPiArCSpzaXplID0gKnNpemUgLyAyOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBDb252 ZXJ0IGNoYXJzIHRvIGJ5dGVzICovDQo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCAqc2l6ZTsgaSsr KQ0KPiA+ID4gKwkJZHN0W2ldID0gZ2V0X2hleF92YWwoc3JjWzIgKiBpXSkgKiAxNiArDQo+ID4g PiArCQkJZ2V0X2hleF92YWwoc3JjWzIgKiBpICsgMV0pOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1 cm4gMDsNCj4gPiA+ICt9DQo+ID4NCj4gPiBJIGNhbiBzZWUgdGhpcyBoYXMgYmVlbiBkaXNjdXNz ZWQgYWxyZWFkeSBidXQgd2hhdCB3b3VsZCB5b3UgdGhpbmsNCj4gPiB1cGRhdGluZyB0aGUgJ3Bh cnNlX2hleF9zdHJpbmcnIHNvbWV0aGluZyBsaWtlIGZvbGxvd2luZywgaXQgaXMgbGVzcyBjb2Rl IHRvDQo+IG1haW50YWluOg0KPiA+DQo+ID4gc3RhdGljIGludA0KPiA+IHBhcnNlX2hleF9zdHJp bmcoY29uc3QgY2hhciAqc3JjLCB1aW50OF90ICpkc3QsIHVpbnQzMl90ICpzaXplKSB7DQo+ID4g ICBpbnQgbGVuOw0KPiA+ICAgaW50IGkNCj4gPiAgIGZvciAoaSA9IDAsIGxlbiA9IDA7IGkgPCAq c2l6ZTsgaSArPSAyKSB7DQo+ID4gICAgIGNoYXIgdG1wWzNdOw0KPiA+ICAgICBzbnByaW50Zih0 bXAsIDMsIHNyYyArIGkpOw0KPiA+ICAgICBkc3RbbGVuKytdID0gc3RydG91bCh0bXAsIE5VTEws IDE2KTsNCj4gPiAgIH0NCj4gPiAgIGRzdFtsZW5dID0gMDsNCj4gPiAgICpzaXplID0gbGVuOw0K PiA+ICAgcmV0dXJuIDA7DQo+ID4gfQ0KPiA+DQo+ID4gKGluZGVlZCB3aXRoIGJldHRlciBlcnJv ciBjaGVja2luZyBvbiBzdHJ0b3VsIDspICkNCj4gPg0KPiA+IDwuLi4+DQo+IA0KPiANCj4gDQo+ IEkgaGF2ZSBjaGFuZ2UgY29kZSBzdHlsZSBhcyB5b3VyIGd1aWRlIGFzIGJlbGxvdywgYnV0IHN0 cnRvdWwoKSBzZWVtcyBkbyBub3QNCj4gd29yaywgaXQgcmV0dXJuIGMgd2l0aCBhIG5vbmUtbnVs bCBldmVyeSB0aW1lLg0KPiB5b3UgY2FuIGhhdmUgYSB0cnkgeW91cnNlbGYuDQo+IA0KPiANCj4g c3RhdGljIGludA0KPiBwYXJzZV9oZXhfc3RyaW5nKGNvbnN0IGNoYXIgKnNyYywgdWludDhfdCAq ZHN0LCB1aW50MzJfdCAqc2l6ZSkNCj4gew0KPiAJY2hhciAqYyA9IE5VTEw7DQo+IAl1aW50MzJf dCBpLCBsZW47DQo+IAljaGFyIHRtcFszXTsNCj4gDQo+IAkvKiBDaGVjayBpbnB1dCBwYXJhbWV0 ZXJzICovDQo+IAlpZiAoKHNyYyA9PSBOVUxMKSB8fA0KPiAJCShkc3QgPT0gTlVMTCkgfHwNCj4g CQkoc2l6ZSA9PSBOVUxMKSB8fA0KPiAJCSgqc2l6ZSA9PSAwKSkNCj4gCQlyZXR1cm4gLTE7DQo+ IA0KPiAJLyogQ29udmVydCBjaGFycyB0byBieXRlcyAqLw0KPiAJZm9yIChpID0gMCwgbGVuID0g MDsgaSA8ICpzaXplOyBpICs9IDIpIHsNCj4gCQlzbnByaW50Zih0bXAsIDMsICIlcyIgLHNyYyAr IGkpOw0KPiAJCWRzdFtsZW4rK10gPSBzdHJ0b3VsKHRtcCwgJmMsIDE2KTsNCj4gCQlpZihjKQ0K PiAJCQlyZXR1cm4gLTE7DQo+ICAJfQ0KPiAJZHN0W2xlbl0gPSAwOw0KPiAJKnNpemUgPSBsZW47 DQo+IA0KPiAJcmV0dXJuIDA7DQo+IH0NCj4gDQoNCkFzIHRoaXMgY29kZSB3aXRoIHN0cnRvdWwg ZG8gbm90IHdvcmssIEkgc3VnZ2VzdCB3ZSB1c2UgdjMgb2YgZ2V0X2hleF92YWwoKSwgZG8geW91 IHRoaW5rIHNvPw0KDQoNCj4gPg0KPiA+ID4gKwkvKiBPdXRwdXQgYnVmZmVyIGlzIG5vdCBuZWNl c3NhcmlseSBOVUwtdGVybWluYXRlZC4gKi8NCj4gPiA+ICsJbWVtY3B5KGJ1ZiwgaGV4X3RtcCwg aGV4bGVuKTsNCj4gPiA+ICsJbWVtc2V0KCh1aW50OF90ICopYnVmICsgbGVuLCAweDAwLCBzaXpl IC0gaGV4bGVuKTsNCj4gPg0KPiA+IENhbid0IHRoaXMgb3ZlcmZsb3cgdGhlICdidWYnPyBzaW5j ZSAibGVuID0gMiAqIGhleGxlbiINCj4gPiBJIGd1ZXNzIGludGVudGlvbiBpcyAiYnVmICsgaGV4 bGVuIg0K