From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D565AA053A; Tue, 4 Aug 2020 03:31:49 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 69BB529D2; Tue, 4 Aug 2020 03:31:49 +0200 (CEST) Received: from m13134.mail.163.com (m13134.mail.163.com [220.181.13.134]) by dpdk.org (Postfix) with ESMTP id 12963F04 for ; Tue, 4 Aug 2020 03:31:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:MIME-Version:Message-ID; bh=gDn4w noyPza0KHb2noT8vr5u8a0vaatLnqVTGqr1mx4=; b=pDMrGqy5DlDnkSwXwnTXI 1Nz5wHK7UiqSX4m7yyafKta79IwHCa3EZts5TJiigbW4atc/ipXQoZWiJV3IKZHt 0va6LbBGuEQ2lQpargJeNwJ/6y2lDCbJ5eAESv1oIz0z7EOQwJZqRtm478SdVEY4 vqkWxqcZ0+HkEvpKBV6YYc= Received: from yang_y_yi$163.com ( [111.207.123.56] ) by ajax-webmail-wmsvr134 (Coremail) ; Tue, 4 Aug 2020 09:31:19 +0800 (CST) X-Originating-IP: [111.207.123.56] Date: Tue, 4 Aug 2020 09:31:19 +0800 (CST) From: yang_y_yi To: "Olivier Matz" Cc: dev@dpdk.org, jiayu.hu@intel.com, thomas@monjalon.net, yangyi01@inspur.com X-Priority: 1 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <20200803123425.GM5869@platinum> References: <20200730120900.108232-1-yang_y_yi@163.com> <20200730120900.108232-3-yang_y_yi@163.com> <20200731151543.GH5869@platinum> <2a50e80c.44f.173ac4c6d20.Coremail.yang_y_yi@163.com> <20200802202907.GJ5869@platinum> <3cf82e61.145c.173b1ed87ce.Coremail.yang_y_yi@163.com> <20200803081139.GK5869@platinum> <7584d005.5305.173b3b3389f.Coremail.yang_y_yi@163.com> <20200803123425.GM5869@platinum> X-CM-CTRLDATA: hpbMZGZvb3Rlcl9odG09MjAzMDQ6NTY= MIME-Version: 1.0 Message-ID: <7e80eaff.148a.173b71824b0.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: hsGowAA37MBnuihfW59hAA--.18350W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiMwl2i1Xl5jP9LAACsx X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH V1 2/3] mbuf: change free_cb interface to adapt to GSO case 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" QXQgMjAyMC0wOC0wMyAyMDozNDoyNSwgIk9saXZpZXIgTWF0eiIgPG9saXZpZXIubWF0ekA2d2lu ZC5jb20+IHdyb3RlOgo+T24gTW9uLCBBdWcgMDMsIDIwMjAgYXQgMDU6NDI6MTNQTSArMDgwMCwg eWFuZ195X3lpIHdyb3RlOgo+PiBBdCAyMDIwLTA4LTAzIDE2OjExOjM5LCAiT2xpdmllciBNYXR6 IiA8b2xpdmllci5tYXR6QDZ3aW5kLmNvbT4gd3JvdGU6Cj4+ID5PbiBNb24sIEF1ZyAwMywgMjAy MCBhdCAwOToyNjo0MEFNICswODAwLCB5YW5nX3lfeWkgd3JvdGU6Cj4+ID4+IEF0IDIwMjAtMDgt MDMgMDQ6Mjk6MDcsICJPbGl2aWVyIE1hdHoiIDxvbGl2aWVyLm1hdHpANndpbmQuY29tPiB3cm90 ZToKPj4gPj4gPkhpLAo+PiA+PiA+Cj4+ID4+ID5PbiBTdW4sIEF1ZyAwMiwgMjAyMCBhdCAwNzox MjozNkFNICswODAwLCB5YW5nX3lfeWkgd3JvdGU6Cj4+ID4+ID4+IAo+PiA+PiA+PiAKPj4gPj4g Pj4gQXQgMjAyMC0wNy0zMSAyMzoxNTo0MywgIk9saXZpZXIgTWF0eiIgPG9saXZpZXIubWF0ekA2 d2luZC5jb20+IHdyb3RlOgo+PiA+PiA+PiA+SGksCj4+ID4+ID4+ID4KPj4gPj4gPj4gPk9uIFRo dSwgSnVsIDMwLCAyMDIwIGF0IDA4OjA4OjU5UE0gKzA4MDAsIHlhbmdfeV95aUAxNjMuY29tIHdy b3RlOgo+PiA+PiA+PiA+PiBGcm9tOiBZaSBZYW5nIDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiA+ PiA+PiA+PiAKPj4gPj4gPj4gPj4gSW4gR1NPIGNhc2UsIHNlZ21lbnRlZCBtYnVmcyBhcmUgYXR0 YWNoZWQgdG8gb3JpZ2luYWwKPj4gPj4gPj4gPj4gbWJ1ZiB3aGljaCBjYW4ndCBiZSBmcmVlZCB3 aGVuIGl0IGlzIGV4dGVybmFsLiBUaGUgaXNzdWUKPj4gPj4gPj4gPj4gaXMgZnJlZV9jYiBkb2Vz bid0IGtub3cgb3JpZ2luYWwgbWJ1ZiBhbmQgZG9lc24ndCBmcmVlCj4+ID4+ID4+ID4+IGl0IHdo ZW4gcmVmY250IG9mIHNoaW5mbyBpcyAwLgo+PiA+PiA+PiA+PiAKPj4gPj4gPj4gPj4gT3JpZ2lu YWwgbWJ1ZiBjYW4gYmUgZnJlZWQgYnkgcnRlX3BrdG1idWZfZnJlZSBzZWdtZW50ZWQKPj4gPj4g Pj4gPj4gbWJ1ZnMgb3IgYnkgcnRlX3BrdG1idWZfZnJlZSBvcmlnaW5hbCBtYnVmLiBUd28ga2lu ZCBvZgo+PiA+PiA+PiA+PiBjYXNlcyBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgYmVoYXZpb3JzLiBm cmVlX2NiIHdvbid0Cj4+ID4+ID4+ID4+IGV4cGxpY2l0bHkgY2FsbCBydGVfcGt0bWJ1Zl9mcmVl IHRvIGZyZWUgb3JpZ2luYWwgbWJ1Zgo+PiA+PiA+PiA+PiBpZiBpdCBpcyBmcmVlZCBieSBydGVf cGt0bWJ1Zl9mcmVlIG9yaWdpbmFsIG1idWYsIGJ1dCBpdAo+PiA+PiA+PiA+PiBoYXMgdG8gY2Fs bCBydGVfcGt0bWJ1Zl9mcmVlIHRvIGZyZWUgb3JpZ2luYWwgbWJ1ZiBpZiBpdAo+PiA+PiA+PiA+ PiBpcyBmcmVlZCBieSBydGVfcGt0bWJ1Zl9mcmVlIHNlZ21lbnRlZCBtYnVmcy4KPj4gPj4gPj4g Pj4gCj4+ID4+ID4+ID4+IEluIG9yZGVyIHRvIGZpeCB0aGlzIGlzc3VlLCBmcmVlX2NiIGludGVy ZmFjZSBoYXMgdG8gYmVlbgo+PiA+PiA+PiA+PiBjaGFuZ2VkLCBfX3J0ZV9wa3RtYnVmX2ZyZWVf ZXh0YnVmIG11c3QgZGVsaXZlciBjYWxsZWQKPj4gPj4gPj4gPj4gbWJ1ZiBwb2ludGVyIHRvIGZy ZWVfY2IsIGFyZ3VtZW50IG9wYXF1ZSBjYW4gYmUgZGVmaW5lZAo+PiA+PiA+PiA+PiBhcyBhIGN1 c3RvbSBzdHJ1Y3QgYnkgdXNlciwgaXQgY2FuIGluY2x1ZGVzIG9yaWdpbmFsIG1idWYKPj4gPj4g Pj4gPj4gcG9pbnRlciwgdXNlci1kZWZpbmVkIGZyZWVfY2IgY2FuIGNvbXBhcmUgY2FsbGVyIG1i dWYgd2l0aAo+PiA+PiA+PiA+PiBtYnVmIGluIG9wYXF1ZSBzdHJ1Y3QsIGZyZWVfY2Igc2hvdWxk IGZyZWUgb3JpZ2luYWwgbWJ1Zgo+PiA+PiA+PiA+PiBpZiB0aGV5IGFyZSBub3Qgc2FtZSwgdGhp cyBjb3JyZXNwb25kcyB0byBydGVfcGt0bWJ1Zl9mcmVlCj4+ID4+ID4+ID4+IHNlZ21lbnRlZCBt YnVmcyBjYXNlLCBvdGhlcndpc2UsIGZyZWVfY2Igd29uJ3QgZnJlZSBvcmlnaW5hbAo+PiA+PiA+ PiA+PiBtYnVmIGJlY2F1c2UgdGhlIGNhbGxlciBleHBsaWNpdGx5IGNhbGxlZCBydGVfcGt0bWJ1 Zl9mcmVlCj4+ID4+ID4+ID4+IHRvIGZyZWUgaXQuCj4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBI ZXJlIGlzIHBzZWR1byBjb2RlIHRvIHNob3cgdHdvIGtpbmQgb2YgY2FzZXMuCj4+ID4+ID4+ID4+ IAo+PiA+PiA+PiA+PiBjYXNlIDEuIHJ0ZV9wa3RtYnVmX2ZyZWUgc2VnbWVudGVkIG1idWZzCj4+ ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBuYl90eCA9IHJ0ZV9nc29fc2VnbWVudChvcmlnaW5hbF9t YnVmLCAvKiBvcmlnaW5hbCBtYnVmICovCj4+ID4+ID4+ID4+ICAgICAgICAgICAgICAgICAgICAg ICAmZ3NvX2N0eCwKPj4gPj4gPj4gPj4gICAgICAgICAgICAgICAgICAgICAgIC8qIHNlZ21lbnRl ZCBtYnVmICovCj4+ID4+ID4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHJ0ZV9t YnVmICoqKSZnc29fbWJ1ZnMsCj4+ID4+ID4+ID4+ICAgICAgICAgICAgICAgICAgICAgICBNQVhf R1NPX01CVUZTKTsKPj4gPj4gPj4gPgo+PiA+PiA+PiA+SSdtIHNvcnJ5IGJ1dCBpdCBpcyBub3Qg dmVyeSBjbGVhciB0byBtZSB3aGF0IG9wZXJhdGlvbnMgYXJlIGRvbmUgYnkKPj4gPj4gPj4gPnJ0 ZV9nc29fc2VnbWVudCgpLgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5JbiB0aGUgY3VycmVudCBjb2Rl LCBJIG9ubHkgc2VlIGNhbGxzIHRvIHJ0ZV9wa3RtYnVmX2F0dGFjaCgpLAo+PiA+PiA+PiA+d2hp Y2ggZG8gbm90IGRlYWwgd2l0aCBleHRlcm5hbCBidWZmZXJzLiBBbSBJIG1pc3Npbmcgc29tZXRo aW5nPwo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5BcmUgeW91IGFibGUgdG8gc2hvdyB0aGUgaXNzdWUg b25seSB3aXRoIG1idWYgZnVuY3Rpb25zPyBJdCB3b3VsZAo+PiA+PiA+PiA+YmUgaGVscGZ1bCB0 byB1bmRlcnN0YW5kIHdoYXQgZG9lcyBub3Qgd29yay4KPj4gPj4gPj4gPgo+PiA+PiA+PiA+Cj4+ ID4+ID4+ID5UaGFua3MsCj4+ID4+ID4+ID5PbGl2aWVyCj4+ID4+ID4+ID4KPj4gPj4gPj4gT2xp dmVyLCB0aGFuayB5b3UgZm9yIGNvbW1lbnQsIGxldCBtZSBzaG93IHlvdSB3aHkgaXQgZG9lc24n dCB3b3JrIGZvciBteSB1c2UgY2FzZS4gIEluIE9WUyBEUERLLCBWTSB1c2VzIHZob3N0dXNlcmNs aWVudCB0byBzZW5kIGxhcmdlIHBhY2tldHMgd2hvc2Ugc2l6ZSBpcyBhYm91dCA2NEsgYmVjYXVz ZSB3ZSBlbmFibGVkIFRTTyAmIFVGTywgdGhlc2UgbGFyZ2UgcGFja2V0cyB1c2UgcnRlX21idWZz IGFsbG9jYXRlZCBieSBEUERLIHZpcnRpb19uZXQgZnVuY3Rpb24gCj4+ID4+ID4+IHZpcnRpb19k ZXZfcGt0bWJ1Zl9hbGxvYygpIChpbiBmaWxlIGxpYi9saWJydGVfdmhvc3QvdmlydGlvX25ldC5j LiBQbGVhc2UgcmVmZXIgdG8gW1BBVENIIFYxIDMvM10sIEkgY2hhbmdlZCBmcmVlX2NiIGFzIGJl bG93LCB0aGVzZSBwYWNrZXRzIHVzZSB0aGUgc2FtZSBhbGxvY2F0ZSBmdW5jdGlvbiBhbmQgdGhl IHNhbWUgZnJlZV9jYiBubyBtYXR0ZXIgdGhleSBhcmUgVENQIHBhY2tldCBvciBVRFAgcGFja2V0 cywgaW4gY2FzZSBvZiBWWExBTiBUU08sIG1vc3QgTklDcyBjYW4ndCBzdXBwb3J0IGlubmVyIFVE UCBmcmFnbWVudCBvZmZsb2FkLCBzbyBPVlMgRFBESyBoYXMgdG8gZG8gaXQgYnkgc29mdHdhcmUs IGZvciBVRFAgY2FzZSwgdGhlIG9yaWdpbmFsIHJ0ZV9tYnVmIG9ubHkgY2FuIGJlIGZyZWVkIGJ5 IHNlZ21lbnRlZCBydGVfbWJ1ZnMgd2hpY2ggYXJlIG91dHB1dCBwYWNrZXRzIG9mIHJ0ZV9nc29f c2VnbWVudCwgaS5lLiB0aGUgb3JpZ2luYWwgcnRlX21idWYgb25seSBjYW4gZnJlZWQgYnkgZnJl ZV9jYiwgeW91IGNhbiBzZWUsIGl0IGV4cGxpY2l0bHkgY2FsbGVkIHJ0ZV9wa3RtYnVmX2ZyZWUo YXJnLT5tYnVmKSwgdGhlIGNvbmRpdGlvbiBzdGF0ZW1lbnQgImlmIChjYWxsZXJfbSAhPSBhcmct Pm1idWYpIiBpcyB0cnVlIGZvciB0aGlzIGNhc2UsIHRoaXMgaGFzIG5vIHByb2JsZW0sIGJ1dCBm b3IgVENQIGNhc2UsIHRoZSBvcmlnaW5hbCBtYnVmIGlzIGRlbGl2ZXJlZCB0byBydGVfZXRoX3R4 X2J1cnN0KCkgYnV0IG5vdCBzZWdtZW50ZWQgcnRlX21idWZzIG91dHB1dCBieSBydGVfZ3NvX3Nl Z21lbnQsIFBNRCBkcml2ZXIgd2lsbCBjYWxsIHJ0ZV9wa3RtYnVmX2ZyZWUob3JpZ2luYWxfcnRl X21idWYpIGJ1dCBub3QgcnRlX3BrdG1idWZfZnJlZShzZWdtZW50ZWRfcnRlX21idWZzKSwgdGhl IHNhbWUgZnJlZV9jYiB3aWxsIGJlIGNhbGxlZCwgdGhhdCBtZWFucyBvcmlnaW5hbF9ydGVfbWJ1 ZiB3aWxsIGJlIGZyZWVkIHR3aWNlLCB5b3Uga25vdyB3aGF0IHdpbGwgaGFwcGVuLCB0aGlzIGlz IGp1c3QgdGhlIGlzc3VlIEknbSBmaXhpbmcuIEkgYnJpbmcgaW4gY2FsbGVyX20gYXJndW1lbnQs IGl0IGNhbiBoZWxwIHdvcmsgYXJvdW5kIHRoaXMgYmVjYXVzZSBjYWxsZXJfbSBpcyBhcmctPm1i dWYgYW5kIHRoZSBjb25kaXRpb24gc3RhdGVtZW50ICJpZiAoY2FsbGVyX20gIT0gYXJnLT5tYnVm KSIgaXMgZmFsc2UsIHlvdSBjYW4ndCBmaXggaXQgd2l0aG91dCB0aGUgY2hhbmdlIHRoaXMgcGF0 Y2ggc2VyaWVzIGRpZC4KPj4gPj4gPgo+PiA+PiA+SSdtIHNpbGwgbm90IHN1cmUgdG8gZ2V0IHlv dXIgaXNzdWUuIFBsZWFzZSwgaWYgeW91IGhhdmUgYSBzaW1wbGUgdGVzdAo+PiA+PiA+Y2FzZSB1 c2luZyBvbmx5IG1idWZzIGZ1bmN0aW9ucyAod2l0aG91dCB2aXJ0aW8sIGdzbywgLi4uKSwgaXQg d291bGQgYmUKPj4gPj4gPnZlcnkgaGVscGZ1bCBiZWNhdXNlIHdlIHdpbGwgYmUgc3VyZSB0aGF0 IHdlIGFyZSB0YWxraW5nIGFib3V0IHRoZSBzYW1lCj4+ID4+ID50aGluZy4gSW4gY2FzZSB0aGVy ZSBpcyBhbiBpc3N1ZSwgaXQgY2FuIGVhc2lseSBiZWNvbWUgYSB1bml0IHRlc3QuCj4+ID4+IAo+ PiA+PiBPbGl2ZXIsIEkgdGhpbmsgeW91IGRvbid0IGdldCB0aGUgcG9pbnQsIGZyZWUgb3BlcmF0 aW9uIGNhbid0IGJlIGNvbnRyb2xsZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiwgCj4+ID4+ IGl0IGlzIGRvbmUgYnkgUE1EIGRyaXZlciBhbmQgdHJpZ2dlcmVkIGJ5IHJ0ZV9ldGhfdHhfYnVy c3QsIEkgaGF2ZSBzaG93biBwc2V1ZG8gY29kZSwKPj4gPj4gcnRlX2dzb19zZWdtZW50IGp1c3Qg c2VnbWVudHMgYSBsYXJnZSBtYnVmIHRvIG11bHRpcGxlIG1idWZzLCBpdCB3b24ndCBzZW5kIHRo ZW0sIHRoZSBhcHBsaWNhdGlvbgo+PiA+PiB3aWxsIGNhbGwgcnRlX2V0aF90eF9idXJzdCB0byBz ZW5kIHRoZW0gZmluYWxseS4KPj4gPj4KPj4gPj4gPgo+PiA+PiA+VGhhdCBzYWlkLCBJIGxvb2tl ZCBhdCB2aG9zdCBtYnVmIGFsbG9jYXRpb24gYW5kIGdzbyBzZWdtZW50YXRpb24sIGFuZAo+PiA+ PiA+SSBmb3VuZCBzb21lIHN0cmFuZ2UgdGhpbmdzOgo+PiA+PiA+Cj4+ID4+ID4xLyBJbiB2aXJ0 aW9fZGV2X2V4dGJ1Zl9hbGxvYygpLCBhbmQgSSB0aGVyZSBhcmUgMiBwYXRocyB0byBjcmVhdGUg dGhlCj4+ID4+ID4gICBleHQgbWJ1Zi4KPj4gPj4gPgo+PiA+PiA+ICAgYS8gVGhlIGZpcnN0IG9u ZSBzdG9yZXMgdGhlIHNoaW5mbyBzdHJ1Y3QgaW4gdGhlIG1idWYsIGJhc2ljYWxseQo+PiA+PiA+ ICAgICAgbGlrZSB0aGlzOgo+PiA+PiA+Cj4+ID4+ID4JcGt0ID0gcnRlX3BrdG1idWZfYWxsb2Mo bXApOwo+PiA+PiA+CXNoaW5mbyA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3QgcnRlX21i dWZfZXh0X3NoYXJlZF9pbmZvICopOwo+PiA+PiA+CWJ1ZiA9IHJ0ZV9tYWxsb2MoTlVMTCwgYnVm X2xlbiwgUlRFX0NBQ0hFX0xJTkVfU0laRSk7Cj4+ID4+ID4Jc2hpbmZvLT5mcmVlX2NiID0gdmly dGlvX2Rldl9leHRidWZfZnJlZTsKPj4gPj4gPglzaGluZm8tPmZjYl9vcGFxdWUgPSBidWY7Cj4+ ID4+ID4JcnRlX21idWZfZXh0X3JlZmNudF9zZXQoc2hpbmZvLCAxKTsKPj4gPj4gPgo+PiA+PiA+ ICAgICAgSSBkb24ndCB0aGluayBpdCBpcyBhIGdvb2QgaWRlYSwgYmVjYXVzZSB0aGVyZSBpcyBu byBndWFyYW50ZWUgdGhhdAo+PiA+PiA+ICAgICAgdGhlIG1idWYgd29uJ3QgYmUgZnJlZWQgYmVm b3JlIHRoZSBidWZmZXIuIEZvciBpbnN0YW5jZSwgZG9pbmcKPj4gPj4gPiAgICAgIHRoaXMgd2ls bCBwcm9iYWJseSBmYWlsOgo+PiA+PiA+Cj4+ID4+ID4JcGt0MiA9IHJ0ZV9wa3RtYnVmX2FsbG9j KG1wKTsKPj4gPj4gPglydGVfcGt0bWJ1Zl9hdHRhY2gocGt0MiwgcGt0KTsKPj4gPj4gPglydGVf cGt0bWJ1Zl9mcmVlKHBrdCk7ICAvKiBwa3QgaXMgZnJlZWQsIGJ1dCBpdCBjb250YWlucyBzaGlu Zm8gISAqLwo+PiA+PiAKPj4gPj4gcGt0IGlzIGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIEkg Y2FuIGNvbnRyb2wsIHNvIEkgY2FuIGNvbnRyb2wgaXQgd2hlcmUgaXQgd2lsbCBiZSBmcmVlZCwg cmlnaHQ/Cj4+ID4KPj4gPlRoaXMgZXhhbXBsZSBzaG93cyB0aGF0IG1idWZzIGFsbG9jYXRlZCBs aWtlIHRoaXMgYnkgdGhlIHZob3N0Cj4+ID5kcml2ZXIgYXJlIG5vdCBjb25zdHJ1Y3RlZCBjb3Jy ZWN0bHkuIElmIGFuIGFwcGxpY2F0aW9uIGF0dGFjaCBhIG5ldwo+PiA+cGFja2V0IChwa3QyKSB0 byBpdCBhbmQgZnJlZXMgdGhlIG9yaWdpbmFsIG9uZSAocGt0KSwgaXQgbWF5IHJlc3VsdCBpbiBh Cj4+ID5tZW1vcnkgY29ycnVwdGlvbi4KPj4gPgo+PiA+T2YgY291cnNlLCB0byBiZSB0ZXN0ZWQg YW5kIGNvbmZpcm1lZC4KPj4gCj4+IE5vLCBhdHRhY2ggd2lsbCBpbmNyZWFzZSByZWZjbnQgb2Yg c2hpbmZvLCBmcmVlX2NiIG9ubHkgaXMgY2FsbGVkIHdoZW4gIHJlZmNudCBvZiBzaGluZm8gaXMg ZGVjcmVhc2VkIHRvCj4+IDAsIGlzbid0IGl0Pwo+Cj5XaGVuIHBrdCB3aWxsIGJlIGZyZWVkLCBp dCB3aWxsIGRlY3JlbWVudCB0aGUgc2hpbmZvIHJlZmNudCwgYW5kCj5hZnRlciBpdCB3aWxsIGJl IDEuIFNvIHRoZSBidWZmZXIgd29uJ3QgYmUgZnJlZWQuIEFmdGVyIHRoYXQsIHRoZQo+bWJ1ZiBw a3Qgd2lsbCBiZSBkZXRhY2hlZCwgYW5kIHdpbGwgcmV0dXJuIHRvIHRoZSBtYnVmIHBvb2wuIEl0 IG1lYW5zCj5pdCBjYW4gYmUgcmVhbGxvY2F0ZWQsIGFuZCB0aGUgbmV4dCB1c2VyIGNhbiBvdmVy d3JpdGUgc2hpbmZvIHdoaWNoCj5pcyBzdGlsbCBzdG9yZWQgaW4gdGhlIG1idWYgZGF0YS4KCkkg dGhpbmsgdGhpcyBpcyBhbiBpc3N1ZSBvZiBEUERLIGl0c2VsZiwgaWYgZXh0ZXJuYWwgYnVmZmVy IGluIHNoaW5mbyBpcyBmcmVlZCwgc2hpbmZvIHNob3VsZCBiZSBzZXQgdG8gTlVMTCwgaWYgdXNl ciB3aWxsCm92ZXJ3cml0ZSBpdCwgaGUvc2hlIHNob3VsZCB1c2UgdGhlIHNhbWUgd2F5IGFzIGEg bmV3IGV4dGVybmFsIGJ1ZmZlciBpcyBhdHRhY2hlZC4gCgo+Cj5JIGRpZCBhIHRlc3QgdG8gc2hv dyBpdCwgc2VlOgo+aHR0cDovL2dpdC5kcm9pZHMtY29ycC5vcmcvP3A9ZHBkay5naXQ7YT1jb21t aXRkaWZmO2g9YTYxNzQ5NGVlYjAxZmYKPgo+SWYgeW91IHJ1biB0aGUgbWJ1ZiBhdXRvdGVzdCwg aXQgc2VnZmF1bHRzLgoKSSB0aGluayB5b3VyIHRlc3QgaXMgd3JvbmcsIHlvdSdyZSBjaGFuZ2lu ZyBzaGluZm8gKHdoaWNoIGlzIGJlaW5nIHVzZWQpIGluIHdyb25nIHdheSwgaWYgZnJlZV9iYyBp cyBOVUxMLCBpdCB3aWxsIGJlIGludmFsaWQuCgpzdGF0aWMgaW5saW5lIHZvaWQKcnRlX3BrdG1i dWZfYXR0YWNoX2V4dGJ1ZihzdHJ1Y3QgcnRlX21idWYgKm0sIHZvaWQgKmJ1Zl9hZGRyLAogICAg ICAgIHJ0ZV9pb3ZhX3QgYnVmX2lvdmEsIHVpbnQxNl90IGJ1Zl9sZW4sCiAgICAgICAgc3RydWN0 IHJ0ZV9tYnVmX2V4dF9zaGFyZWRfaW5mbyAqc2hpbmZvKQp7CiAgICAgICAgLyogbWJ1ZiBzaG91 bGQgbm90IGJlIHJlYWQtb25seSAqLwogICAgICAgIFJURV9BU1NFUlQoUlRFX01CVUZfRElSRUNU KG0pICYmIHJ0ZV9tYnVmX3JlZmNudF9yZWFkKG0pID09IDEpOwogICAgICAgIFJURV9BU1NFUlQo c2hpbmZvLT5mcmVlX2NiICE9IE5VTEwpOwoKRm9yIGFueSBzaGluZm8gb3BlcmF0aW9uLCB5b3Ug c2hvdWxkIGRvIGl0IGJ5IHJ0ZV9wa3RtYnVmX2F0dGFjaF9leHRidWYsIHlvdSBjYW4ndCBjaGFu Z2UgaXQgYXQgd2lsbCBhZnRlciB0aGF0LgoKPgo+Cj4+IAo+PiA+Cj4+ID4+IAo+PiA+PiA+Cj4+ ID4+ID4gICAgICBUbyBkbyB0aGlzIHByb3Blcmx5LCB0aGUgbWJ1ZiByZWZjbnQgc2hvdWxkIGJl IGluY3JlYXNlZCwgYW5kCj4+ID4+ID4gICAgICB0aGUgbWJ1ZiBzaG91bGQgYmUgZnJlZWQgaW4g dGhlIGNhbGxiYWNrLiBCdXQgSSBkb24ndCB0aGluayBpdCdzCj4+ID4+ID4gICAgICB3b3J0aCBk b2luZyBpdCwgZ2l2ZW4gdGhlIHNlY29uZCBwYXRoIChiLykgbG9va3MgZ29vZCB0byBtZS4KPj4g Pj4gPgo+PiA+PiA+ICAgYi8gVGhlIHNlY29uZCBwYXRoIHN0b3JlcyB0aGUgc2hpbmZvIHN0cnVj dCBhdCB0aGUgZW5kIG9mIHRoZQo+PiA+PiA+ICAgICAgYWxsb2NhdGVkIGJ1ZmZlciwgbGlrZSB0 aGlzOgo+PiA+PiA+Cj4+ID4+ID4JcGt0ID0gcnRlX3BrdG1idWZfYWxsb2MobXApOwo+PiA+PiA+ CWJ1Zl9sZW4gKz0gc2l6ZW9mKCpzaGluZm8pICsgc2l6ZW9mKHVpbnRwdHJfdCk7Cj4+ID4+ID4J YnVmX2xlbiA9IFJURV9BTElHTl9DRUlMKHRvdGFsX2xlbiwgc2l6ZW9mKHVpbnRwdHJfdCkpOwo+ PiA+PiA+CWJ1ZiA9IHJ0ZV9tYWxsb2MoTlVMTCwgYnVmX2xlbiwgUlRFX0NBQ0hFX0xJTkVfU0la RSk7Cj4+ID4+ID4Jc2hpbmZvID0gcnRlX3BrdG1idWZfZXh0X3NoaW5mb19pbml0X2hlbHBlcihi dWYsICZidWZfbGVuLAo+PiA+PiA+CQkJCQkgICAgICB2aXJ0aW9fZGV2X2V4dGJ1Zl9mcmVlLCBi dWYpOwo+PiA+PiA+Cj4+ID4+ID4gICAgICBJIHRoaW5rIHRoaXMgaXMgY29ycmVjdCwgYmVjYXVz ZSB3ZSBoYXZlIHRoZSBndWFyYW50ZWUgdGhhdCBzaGluZm8KPj4gPj4gPiAgICAgIGV4aXN0cyBh cyBsb25nIGFzIHRoZSBidWZmZXIgZXhpc3RzLgo+PiA+PiAKPj4gPj4gV2hhdCBidWZmZXIgZG9l cyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB5b3UncmUgc2F5aW5nIGhlcmU/IFRoZSBpc3N1ZSB3ZSdy ZSBkaXNjdXNzaW5nIGhvdyB3ZSBjYW4KPj4gPj4gZnJlZSBvcmlnaW5hbCBtYnVmIHdoaWNoIG93 bnMgc2hpbmZvIGJ1ZmZlci4KPj4gPgo+PiA+SSBkb24ndCBnZXQgeW91ciBxdWVzdGlvbi4KPj4g Pgo+PiA+SSdtIGp1c3Qgc2F5aW5nIHRoYXQgdGhpcyBjb2RlIHBhdGggbG9va3MgY29ycmVjdCwg Y29tcGFyZWQgdG8KPj4gPnRoZSBwcmV2aW91cyBvbmUuCj4+IAo+PiBJIHRoaW5rIHlvdSdyZSBj aGFsbGVuZ2luZyBwcmluY2lwbGUgb2YgZXh0ZXJuYWwgbWJ1ZiwgdGhhdCBpc24ndCB0aGUgdGhp bmcgSSBhZGRyZXNzLgo+Cj5JJ20gbm90IGNoYWxsZW5naW5nIGFueXRoaW5nLCBJJ20gc2F5aW5n IHRoZXJlIGlzIGEgYnVnIGluIHRoaXMgY29kZSwKPmFuZCB0aGUgdW5pdCB0ZXN0IGFib3ZlIHRl bmRzIHRvIGNvbmZpcm0gaXQuCgpJZiBpdCBpcyBidWcsIHlvdSBjYW4gcG9zdCBhIHBhdGNoIHRv IGZpeCBpdCwgIGl0IGlzbid0IHJlbGF0ZWQgd2l0aCBteSBwYXRjaGVzLiBCdXQgaW4gbXkgb3Bp bmlvbiwgeW91IGRvbid0CnVzZSBpdCBpbiBjb3JyZWN0IHdheSwgSSBkb24ndCB0aGluayBpdCBp cyBhIGJ1Zy4KCj4KPgo+PiAKPj4gPgo+PiA+PiAKPj4gPj4gPgo+PiA+PiA+Mi8gaW4gcnRlX2dz b19zZWdtZW50KCksIHRoZXJlIGlzIGEgbG9vcCBsaWtlIHRoaXM6Cj4+ID4+ID4KPj4gPj4gPgl3 aGlsZSAocGt0X3NlZykgewo+PiA+PiA+CQlydGVfbWJ1Zl9yZWZjbnRfdXBkYXRlKHBrdF9zZWcs IC0xKTsKPj4gPj4gPgkJcGt0X3NlZyA9IHBrdF9zZWctPm5leHQ7Cj4+ID4+ID4JfQo+PiA+PiA+ Cj4+ID4+ID4gICBZb3UgY2hhbmdlIGl0IHRvIHRha2UgaW4gYWNjb3VudCB0aGUgcmVmY250IGZv ciBleHQgbWJ1ZnMuCj4+ID4+ID4KPj4gPj4gPiAgIEkgbWF5IGhhdmUgbWlzc2VkIHNvbWV0aGlu ZyBidXQgSSB3b25kZXIgd2h5IGl0IGlzIG5vdCBzaW1wbHk6Cj4+ID4+ID4KPj4gPj4gPglydGVf cGt0bWJ1Zl9mcmVlKHBrdF9zZWcpOwo+PiA+PiA+Cj4+ID4+ID4gICBJdCB3aWxsIGRlY3JlYXNl IHRoZSBwcm9wZXIgcmVmY250LCBhbmQgZnJlZSB0aGUgbWJ1ZnMgaWYgdGhleQo+PiA+PiA+ICAg YXJlIG5vdCB1c2VkLgo+PiA+PiAKPj4gPj4gQWdhaW4sIHJ0ZV9nc29fc2VnbWVudCBqdXN0IGRl Y3JlYXNlcyByZWZjbnQgYnkgb25lLCB0aGlzIHdpbGwgZW5zdXJlIHRoZSBsYXN0IHNlZ21lbnRl ZCAKPj4gPj4gbWJ1ZiBmcmVlIHdpbGwgdHJpZ2dlciBmcmVlaW5nIG9yaWdpbmFsIG1idWYgKG9u bHkgZnJlZV9jYiBjYW4gZG8gdGhpcykuCj4+ID4KPj4gPnJ0ZV9wa3RtYnVmX2ZyZWUoKSB3aWxs IGFsc28gZGVjZXJhc2UgdGhlIHJlZmNudCwgYW5kIGZyZWUgdGhlIHJlc291cmNlcwo+PiA+d2hl biB0aGUgcmVmY250IHJlYWNoZXMgMC4KPj4gPgo+PiA+SXQgaGFzIHNvbWUgYWR2YW50YWdlcyBj b21wYXJlZCB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgb2YgYWxsCj4+ID5zZWdt ZW50czoKPj4gPgo+PiA+LSBubyBuZWVkIHRvIGl0ZXJhdGUgdGhlIHNlZ21lbnRzLCB0aGVyZSBp cyBvbmx5IG9uZSBmdW5jdGlvbiBjYWxsCj4+ID4tIG5vIG5lZWQgdG8gaGF2ZSBhIHNwZWNpYWwg Y2FzZSBmb3IgZXh0IG1idWZzIGxpa2UgeW91IGRpZCBpbiB5b3VyIHBhdGNoCj4+ID4tIGl0IG1h eSBiZSBzYWZlciwgaW4gY2FzZSBzb21lIHNlZ21lbnRzIGhhdmUgYSByZWZjbnQgPT0gMSwgYmVj YXVzZQo+PiA+ICByZXNvdXJjZXMgd2lsbCBiZSBmcmVlZC4KPj4gCj4+IEZvciBleHRlcm5hbCBt YnVmLCBhdHRhY2ggb25seSBpbmNyZWFzZXMgcmVmY250IG9mIHNoaW5mbywgcmVmY250IG9mIG1i dWYgd29uJ3QgYmUgdG91Y2hlZC4gRm9yIG5vcm1hbAo+PiBtYnVmLCBhdHRhY2ggb25seSBpbmNy ZWFzZSByZWZjbnQgb2YgbWJ1Ziwgbm8gc2hpbmZvIHRoZXJlLCBubyByZWZjbnQgb2Ygc2hpbmZv IGluY3JlYXNlZC4KPgo+SSBzdXBwb3NlIHJ0ZV9nc29fc2VnbWVudCgpIGNhbiB0YWtlIGFueSBt YnVmIHR5cGUgYXMgaW5wdXQ6IHN0YW5kYXJkCj5tYnVmLCBpbmRpcmVjdCBtYnVmLCBleHQgbWJ1 Ziwgb3IgZXZlbiBhIG1idWYgY2hhaW5nIGNvbnRhaW5pbmcgc2VnbWVudHMgb2YKPmRpZmZlcmVu dCB0eXBlcy4KPgo+Rm9yIGluc3RhbmNlLCBpZiB5b3UgcGFzcyBhIGNoYWluIG9mIDIgbWJ1ZnM6 Cj4tIHRoZSBmaXJzdCBvbmUgaXMgYSBkaXJlY3QgbWJ1ZiBjb250YWluaW5nIHRoZSBJUC9UQ1Ag aGVhZGVycyAob3JpZ19oZHIpCj4tIHRoZSBzZWNvbmQgb24gaXMgYSBtYnVmIHBvaW50aW5nIHRv IGFuIGV4dCBidWZmZXIgKG9yaWdfcGF5bG9hZCkKPgo+SSBleHBlY3QgdGhhdCB0aGUgcmVzdWx0 aW5nIG1idWYgYWZ0ZXIgY2FsbGluZyBnc28gY29udGFpbnMgYSBsaXN0IG9mIG1idWZzCj5saWtl IHRoaXM6Cj4tIGEgZmlyc3Qgc2VnbWVudCBjb250YWluaW5nIHRoZSBJUC9UQ1AgaGVhZGVycyAo bmV3X2hkcikKPi0gYSBwYXlsb2FkIHNlZ21lbnQgcG9pbnRpbmcgb24gdGhlIHNhbWUgZXh0IGJ1 ZmZlcgo+Cj5JbiB0aGVvcnksIHRoZXJlIGlzIG5vIHJlYXNvbiB0aGF0IG9yaWdfaGRyIHNob3Vs ZCBiZSByZWZlcmVuY2VkIGJ5Cj5hbm90aGVyIG5ldyBtYnVmLCBiZWNhdXNlIGl0IG9ubHkgY29u dGFpbnMgaGVhZGVycyAobm8gZGF0YSkuIElmIHRoYXQncwo+dGhlIGNhc2UsIGl0cyByZWZjbnQg aXMgMSwgYW5kIGRlY3JlYXNpbmcgaXQgdG8gMCB3aXRob3V0IGZyZWVpbmcgaXQKPmlzIGEgYnVn LgoKRm9yIHRoaXMgdXNlciBzY2VuYXJpbywgb3JpZ19tIGlzIG93bmVyIG9mIGV4dGVybmFsIGJ1 ZmZlciwgc21hbGwgc2VnbWVudGVkIG1idWZzIHJlZmVyZW5jZQppdCwgeW91IHNob3VsZG4ndCBm cmVlIG9yaWdfbSBiZWZvcmUgYWxsIGF0dGFjaGVkIHNlZ21lbnRlZCBtYnVmcyBhcmUgZnJlZWQs IGlzbid0IGl0PwoKPgo+QW55d2F5LCB0aGVyZSBpcyBtYXliZSBubyBpc3N1ZSBpbiB0aGF0IGNh c2UsIGJ1dCBJIHdhcyBqdXN0IHN1Z2dlc3RpbmcKPnRoYXQgdXNpbmcgcnRlX3BrdG1idWZfZnJl ZSgpIGlzIGVhc2llciB0byByZWFkLCBhbmQgc2FmZXIgdGhhbiBtYW51YWxseQo+ZGVjcmVhc2lu ZyB0aGUgcmVmY250IG9mIGVhY2ggc2VnbWVudC4KPgo+Cj4+ID4+ID5BZ2Fpbiwgc29ycnkgaWYg dGhpcyBpcyBub3QgdGhlIGlzc3VlIHlvdXIgYXJlIHJlZmVycmluZyB0bywgYnV0Cj4+ID4+ID5p biB0aGlzIGNhc2UgSSByZWFsbHkgdGhpbmsgdGhhdCBoYXZpbmcgYSBzaW1wbGUgZXhhbXBsZSBj b2RlIHRoYXQKPj4gPj4gPnNob3dzIHRoZSBpc3N1ZSB3b3VsZCBoZWxwLgo+PiA+PiAKPj4gPj4g T2xpdmVyLCBteSBzdGF0ZW1lbnQgaW4gdGhlIHBhdGNoIEkgc2VudCBvdXQgaGFzIHBzZXVkbyBj b2RlIHRvIHNob3cgdGhpcy4gIEkgZG9uJ3QgdGhpbmsgYSBzaW1wbGUKPj4gPj4gdW5pdCB0ZXN0 IGNhbiBzaG93IGl0Lgo+PiA+Cj4+ID5JIGRvbid0IHNlZSB3aHkuIFRoZSBQTURzIGFuZCB0aGUg bGlicmFyaWVzIHVzZSB0aGUgbWJ1ZiBmdW5jdGlvbnMsIHdoeQo+PiA+YSB1bml0IHRlc3QgY291 bGRuJ3QgY2FsbCB0aGUgc2FtZSBmdW5jdGlvbnM/Cj4+ID4KPj4gPj4gTGV0IG1lIHN1bW1hcml6 ZSBpdCBoZXJlIGFnYWluLiBGb3Igb3JpZ2luYWwgbWJ1ZiwgdGhlcmUgYXJlIHR3byBjYXNlcyBm cmVlaW5nCj4+ID4+IGl0LCBjYXNlIG9uZSBpcyBQTUQgZHJpdmVyIGNhbGxzIGZyZWUgYWdhaW5z dCBzZWdtZW50ZWQgbWJ1ZnMsIGxhc3Qgc2VnbWVudGVkIG1idWYgZnJlZSB3aWxsIHRyaWdnZXIK Pj4gPj4gZnJlZV9jYiBjYWxsIHdoaWNoIHdpbGwgZnJlZSBvcmlnaW5hbCBsYXJnZSAmIGV4dGVu ZGVkIG1idWYuCj4+ID4KPj4gPk9LCj4+ID4KPj4gPj4gQ2FzZSB0d28gaXMgUE1EIGRyaXZlciB3 aWxsIGNhbGwgZnJlZSBhZ2FpbnN0Cj4+ID4+IG9yaWdpbmFsIG1idWYsIHRoYXQgYWxzbyB3aWxs IGNhbGwgZnJlZV9jYiB0byBmcmVlIGF0dGFjaGVkIGV4dGVuZGVkIGJ1ZmZlci4KPj4gPgo+PiA+ T0sKPj4gPgo+PiA+QW5kIHdoYXQgbWFrZXMgdGhhdCBjYXNlIDEgb3IgY2FzZSAyIGlzIGV4ZWN1 dGVkPwo+PiA+Cj4+ID4+IEluIGNhc2Ugb25lIGZyZWVfY2IgbXVzdCBjYWxsCj4+ID4+IHJ0ZV9w a3RtYnVmX2ZyZWUgb3RoZXJ3aXNlIG5vYm9keSB3aWxsIGZyZWUgb3JpZ2luYWwgbGFyZ2UgJiBl eHRlbmRlZCBtYnVmLCBpbiBjYXNlIHR3byBmcmVlX2NiIGNhbid0IAo+PiA+PiBjYWxsIHJ0ZV9w a3RtYnVmX2ZyZWUgYmVjYXVzZSB0aGUgY2FsbGVyIGNhbGxpbmcgaXQgaXMganVzdCBydGVfcGt0 bWJ1Zl9mcmVlIHdlIG5lZWQuIFRoYXQgaXMgdG8gc2F5LCB5b3UKPj4gPj4gbXVzdCB1c2UgdGhl IHNhbWUgZnJlZV9jYiB0byBoYW5kbGUgdGhlc2UgdHdvIGNhc2VzLCB0aGlzIGlzIG15IGlzc3Vl IGFuZCB0aGUgcG9pbnQgeW91IGRvbid0IGdldC4KPj4gPgo+PiA+SSB0aGluayB0aGVyZSBpcyBu byBuZWVkIHRvIGNoYW5nZSB0aGUgZnJlZV9jYiBBUEkuIEl0IHNob3VsZCB3b3JrIGxpa2UKPj4g PnRoaXM6Cj4+ID4KPj4gPi0gdmlydGlvIGNyZWF0ZXMgdGhlIG9yaWdpbmFsIGV4dGVybmFsIG1i dWYgKG9yaWdfbSkKPj4gPi0gZ3NvIHdpbGwgY3JlYXRlIGEgbmV3IG1idWYgcmVmZXJlbmNpbmcg dGhlIGV4dGVybmFsIGJ1ZmZlciAobmV3X20pCj4+ID4KPj4gPkF0IHRoaXMgcG9pbnQsIHRoZSBz aGluZm8gaGFzIGEgcmVmY250IG9mIDIuIFRoZSBsYXJnZSBidWZmZXIgd2lsbCBiZQo+PiA+ZnJl ZWQgYXMgc29vbiBhcyBydGVfcGt0bWJ1Zl9mcmVlKCkgaXMgY2FsbGVkIG9uIG9yaWdfbSBhbmQg bmV3X20sCj4+ID53aGF0ZXZlciB0aGUgb3JkZXIuCj4+ID4KPj4gPlJlZ2FyZHMsCj4+ID5PbGl2 aWVyCj4+IAo+PiBPbGl2ZXIsIHRoZSByZWFzb24gaXQgd29ya3MgaXMgSSBjaGFuZ2VkIGZyZWVf Y2IgQVBJLCBjYXNlIDEgZG9lc24ndCBrbm93IG9yaWdfbSwgaG93IHlvdSBtYWtlIGl0IGZyZWUg b3JpZ19tIGluIGZyZWVfY2IuCj4+IFRoZSBpbnRlbnRpb24gSSBjaGFuZ2UgZnJlZV9jYiBpcyB0 byBsZXQgaXQga25vdyBvcmlnX20sIEkgc2F3IE9WUyBEUERLIHJhbiBvdXQgb3V0IGJ1ZmZlcnMg YW5kIG9yaWdfbSBpc24ndCBmcmVlZCwgdGhhdCBpcyB3aHkKPj4gSSB3YW50IHRvIGJyaW5nIGlu IHRoaXMgdG8gZml4IHRoZSBpc3N1ZS4gQWdhaW4sIGluIGNhc2UgMSwgbm9ib2R5IGV4cGxpY2l0 bHkgY2FsbHMgcmV0X3BrdG1idWZfZnJlZShvcmlnX20pIGV4Y2VwdCBmcmVlX2NiIEkgY2hhbmdl ZC4KPgo+SWYgbm9ib2R5IGNhbGxzIHJldF9wa3RtYnVmX2ZyZWUob3JpZ19tKSwgaXQgaXMgYSBw cm9ibGVtLgo+VGhlIGZyZWVfY2IgaXMgdG8gZnJlZSB0aGUgYnVmZmVyLCBub3QgdGhlIG1idWYu Cj4KPlRvIG1lLCBpdCBzaG91bGQgd29yayBsaWtlIHRoaXM6Cj4KPjEtIHZpcnRpbyBjcmVhdGVz IGEgbWJ1ZiBhdHRhY2hlZCB0byB0aGUgZXh0IGJ1ZmZlciAodGhlIHNoaW5mbyBwbGFjZW1lbnQK PiAgIGJ1ZyBzaG91bGQgYmUgZml4ZWQpCj4yLSBnc28gY3JlYXRlIG1idWZzIHRoYXQgcmVmZXJl bmNlIHRoZSB0aGUgc2FtZSBleHQgYnVmIChieSBhdHRhY2hpbmcgdGhlCj4gICBuZXcgbWJ1ZikK PjMtIGdzbyBtdXN0IGZyZWUgdGhlIG9yaWdpbmFsIG1idWYKClRoaXMgaXMgaW1wb3NzaWJsZSwg c2VnbWVudGVkIG1idWZzIGFyZSByZWZlcmVuY2luZyBleHRlcm5hbCBidWZmZXIgaW4gb3JpZ2lu YWwgbWJ1ZiwKaG93IGRvIHlvdSBmcmVlIGl0PyBBcyBJIHNhaWQgcnRlX2dzb19zZWdtZW50IGhh cyBubyB3YXkgdG8gZnJlZSBpdCwgcGxlYXNlIHRlbGwgbWUgYSB3YXkgaWYKeW91IGtub3cgaG93 IHRvIGRvIHRoaXMuCgo+NC0gdGhlIFBNRCB0cmFuc21pdHMgdGhlIG5ldyBtYnVmcywgYW5kIGZy ZWVzIHRoZW0KPgo+V2hhdGV2ZXIgMy0gb3IgNC0gaXMgZXhlY3V0ZWQgZmlyc3QsIGF0IHRoZSBl bmQgd2UgYXJlIHN1cmUgdGhhdDoKPi0gYWxsIG1idWZzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhl IHBvb2wKPi0gdGhlIGxpbmVhciBidWZmZXIgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSByZWZjbnQg cmVhY2hlcyAwLgo+Cj5JZiB0aGlzIGlzIHN0aWxsIHVuY2xlYXIsIHBsZWFzZSwgd3JpdGUgYSB1 bml0IHRlc3QgbGlrZSBJIGRpZAo+YWJvdmUgdG8gc2hvdyB5b3VyIGlzc3VlLgo+Cj5SZWdhcmRz LAo+T2xpdmllcgo+CgpUaGUgaXNzdWUgaXMgaW4gIjMtIGdzbyBtdXN0IGZyZWUgdGhlIG9yaWdp bmFsIG1idWYiLCBydGVfcGt0bWJ1Zl9mcmVlKHNlZ21lbnRlZF9tYnVzKSBjYW4ndCBkbyBpdCwK cnRlX2dzb19zZWdtZW50IGlzIGltcG9zc2libGUgdG8gZG8gaXQsIG9ubHkgZmVhc2libGUgcG9p bnQgaXMgZnJlZV9jYiwgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBoYXZlCmEgYmV0dGVyIHdh eSB0byBmcmVlIG9yaWdpbmFsIG1idWYgYW5kIGRvbid0IGltcGFjdCBvbiBzZWdtZW50ZWQgbWJ1 ZnMgaW4gUE1ELiBNeSBwb2ludCBpcyB5b3UgbXVzdApoYXZlIGEgcGxhY2UgdG8gY2FsbCBydGVf cGt0bWJ1Zl9mcmVlKHJvZ2luX20pIGV4cGxpY2l0bHksIG90aGVyd2lzZSBpdCBpcyBpbXBvc3Np YmxlICB0byByZXR1cm4gaXQgdG8gbWVtb3J5CnBvb2wsIHBsZWFzZSBwb2ludCBvdXQgIHdoZXJl IGl0IGNhbiBiZSBjYWxsZWQgaW4gbXkgdXNlciBzY2VuYXJpby4gSSBkb24ndCBjYXJlIGhvdyBp dCBpcyBkb25lLCBJIGp1c3QgY2FyZSBpdCBjYW4KZml4IG15IGlzc3VlLCBwbGVhc2UgZG9uJ3Qg aGVzaXRhdGUgYW5kIHNlbmQgbWUgYSBwYXRjaCBpZiB5b3UgY2FuLCB0aGFua3MgYSBsb3QuCgo+ Cj4KPj4gZnJlZV9jYiBtdXN0IGhhbmRsZSBjYXNlIDEgYW5kIGNhc2UgMiBpbiB0aGUgc2FtZSBj b2RlLCBmb3IgY2FzZSAxLCBjYWxsZXJfbSBpcyBzZWdtZW50ZWQgbmV3X20sIGZvciBjYXNlIDIs IGNhbGxlcl9tIGlzIG9yaWdfbS4KPj4gCj4+IGxvb3AgaW4gcnRlX2dzb19zZWdlbWVudCBpcyBo YW5kbGluZyBvcmlnaW5hbCBtYnVmICh0aGlzIG1idWYgaXMgbXVsdGktbWJ1ZiBhbmQgaW5jbHVk ZXMgbXVsdGlwbGUgbWJ1ZnMgd2hpY2ggYXJlIGxpbmtlZCBieSBuZXh0Cj4+IHBvaW50ZXIpLCBp dCBpc24ndCBhIHByb2JsZW0gYXQgYWxsLgo+PiAKPj4gUGxlYXNlIHNob3cgbWUgY29kZSBob3cg eW91IGNhbiBmaXggbXkgaXNzdWUgaWYgeW91IGRvbid0IGNoYW5nZSBmcmVlX2NiLCB0aGFuayB5 b3UuCj4+IAo+PiBzdHJ1Y3Qgc2hpbmZvX2FyZyB7Cj4+ICAgICAgICB2b2lkICpidWY7Cj4+ICAg ICAgICBzdHJ1Y3QgcnRlX21idWYgKm1idWY7Cj4+IH07Cj4+IAo+PiB2aXJ0aW9fZGV2X2V4dGJ1 Zl9mcmVlKHN0cnVjdCBydGVfbWJ1ZiAqY2FsbGVyX20sIHZvaWQgKm9wYXF1ZSkKPj4gewo+PiAg ICAgICAgc3RydWN0IHNoaW5mb19hcmcgKmFyZyA9IChzdHJ1Y3Qgc2hpbmZvX2FyZyAqKW9wYXF1 ZTsKPj4gCj4+ICAgICAgICBydGVfZnJlZShhcmctPmJ1Zik7Cj4+ICAgICAgICBpZiAoY2FsbGVy X20gIT0gYXJnLT5tYnVmKQo+PiAgICAgICAgICAgICAgICBydGVfcGt0bWJ1Zl9mcmVlKGFyZy0+ bWJ1Zik7Cj4+ICAgICAgICBydGVfZnJlZShhcmcpOwo+PiB9CgoK