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 B505EA04DB; Thu, 15 Oct 2020 04:52:39 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E39611DBBD; Thu, 15 Oct 2020 04:52:37 +0200 (CEST) Received: from m136.mail.163.com (m136.mail.163.com [220.181.13.6]) by dpdk.org (Postfix) with ESMTP id C0FEC1B711 for ; Thu, 15 Oct 2020 04:52:35 +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=A1bpx +XWTXBSUtTq/evh/eOSdQyxWfxVnqcmO5d3tIc=; b=dmHSznrmVjPvyb2bDaHLd yQfJnOHlBC+n8TpR03PXXIpVczOq9rhCpKACfTuFVw9FGPgmF+w8Lawvhkp0Jdfs Zc4XbshKy4yFIHbiyeTViYkPbrRCywuIK1g+VCvy22zfM+BVcYZOcZYv8rMYmfli FVLzhmZqFFjTRwqM5ICMfY= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr6 (Coremail) ; Thu, 15 Oct 2020 10:52:03 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Thu, 15 Oct 2020 10:52:03 +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: 3 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <20201014135525.GS21395@platinum> References: <3cf82e61.145c.173b1ed87ce.Coremail.yang_y_yi@163.com> <20200803081139.GK5869@platinum> <7584d005.5305.173b3b3389f.Coremail.yang_y_yi@163.com> <20200803123425.GM5869@platinum> <7e80eaff.148a.173b71824b0.Coremail.yang_y_yi@163.com> <76308d9c.2b0b.174ce214814.Coremail.yang_y_yi@163.com> <20201007094821.GP21395@platinum> <95e7dd5.68f2.1750cc5aee0.Coremail.yang_y_yi@163.com> <20201009115525.GC21395@platinum> <6d9c1522.127d.1751032f37a.Coremail.yang_y_yi@163.com> <20201014135525.GS21395@platinum> X-CM-CTRLDATA: W6BOr2Zvb3Rlcl9odG09MzY4MTg6NTY= MIME-Version: 1.0 Message-ID: <7fbdac0a.1e80.1752a2bec91.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: BsGowADnc3BTuYdfN4eGAA--.14890W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/xtbB0g6+i1UMZIqUvQACs1 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" R290IGl0LCB0aGFua3MgYSBsb3QuCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkF0IDIwMjAtMTAtMTQg MjE6NTU6MjUsICJPbGl2aWVyIE1hdHoiIDxvbGl2aWVyLm1hdHpANndpbmQuY29tPiB3cm90ZToK PkhpLAo+Cj5PbiBTYXQsIE9jdCAxMCwgMjAyMCBhdCAwOTo0OTozNUFNICswODAwLCB5YW5nX3lf eWkgd3JvdGU6Cj4+IE9saXZpZXIsIHRoYW5rIHlvdSBzbyBtdWNoIGZvciBoZWxwaW5nIGZpZ3Vy ZSBvdXQgdGhpcywgaXQgZG9lcyB3b3JrCj4+IGFzIHRoZSBjb2RlIHlvdSBjaGFuZ2VkLCBzbyB3 ZSBjYW4gZml4IHRoZSBpc3N1ZSB3aXRob3V0IHRoaXMgcGF0Y2gKPj4gc2VyaWVzLiBNeSBxdWVz dGlvbiBpcyBjYW4gaXQgYWxzbyB3b3JrIGZvciBub3JtYWwgbWJ1ZiBvciBpbmRpcmVjdAo+PiBt YnVmPyAoSSBtZWFuIHBrdCBpcyBkaXJlY3QgbWJ1ZiBvciBpbmRpcmVjdCBtYnVmKQo+Cj5ZZXMs IGl0IHdvcmtzIGZvciBhbnkgbWJ1ZiB0eXBlIGZvciBwa3QgKGRpcmVjdCwgaW5kaXJlY3QsIGV4 dCkuCj4KPkhhcHB5IHRvIHNlZSBpdCBzb2x2ZXMgeW91ciBpc3N1ZSEKPgo+UmVnYXJkcywKPk9s aXZpZXIKPgo+Cj4KPj4gQXQgMjAyMC0xMC0wOSAxOTo1NToyNSwgIk9saXZpZXIgTWF0eiIgPG9s aXZpZXIubWF0ekA2d2luZC5jb20+IHdyb3RlOgo+PiA+SGksCj4+ID4KPj4gPk9uIEZyaSwgT2N0 IDA5LCAyMDIwIGF0IDA1OjUxOjIzUE0gKzA4MDAsIHlhbmdfeV95aSB3cm90ZToKPj4gPj4gT2xp dmllciwgdGhhbmsgeW91IHNvIG11Y2ggZm9yIHlvdXIgcmVwbHksIHlvdXIgcGF0Y2ggcG9zdCBm b3Igdmhvc3QgaGVscCBtZSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybiBiZXR0ZXIsIEkgdG90YWxs eSBhZ3JlZS4gRm9yIEdTTyBjYXNlLCBsZXQgbWUgc2hvdyB5b3UgYSBzaW1wbGUgY29kZSB0byBl eHBsYWluIG15IGlzc3VlLgo+PiA+PiAKPj4gPj4gCj4+ID4+IAo+PiA+PiAKPj4gPj4gCj4+ID4+ IHN0cnVjdCBydGVfbWJ1ZiAqcGt0ID0gcnRlX3BrdG1idWZfYWxsb2MobXApOwo+PiA+PiB2aXJ0 aW9fZGV2X2V4dGJ1Zl9hbGxvYyhwa3QsIGRhdGFfbGVuKQo+PiA+PiBzdHJ1Y3QgcnRlX21idWYg KiBwa3Rfc2VnMSA9IHJ0ZV9wa3RtYnVmX2FsbG9jKGluZGlyZWN0X3Bvb2wpOwo+PiA+PiAKPj4g Pj4gCj4+ID4+IHJ0ZV9wa3RtYnVmX2F0dGFjaChwa3Rfc2VnMSwgcGt0KTsKPj4gPj4gcnRlX21i dWZfZXh0X3JlZmNudF91cGRhdGUocGt0LCAtMSk7Cj4+ID4+IAo+PiA+PiBzdHJ1Y3QgcnRlX21i dWYgKiBwa3Rfc2VnMiA9IHJ0ZV9wa3RtYnVmX2FsbG9jKGluZGlyZWN0X3Bvb2wpOwo+PiA+PiBy dGVfcGt0bWJ1Zl9hdHRhY2gocGt0X3NlZzIsIHBrdCk7Cj4+ID4+IHJ0ZV9tYnVmX2V4dF9yZWZj bnRfdXBkYXRlKHBrdCwgLTEpOwo+PiA+PiBzdHJ1Y3QgcnRlX21idWYgKnBrdF9zZWdzWzJdID0g e3BrdF9zZWcxLCBwa3Rfc2VnMn07Cj4+ID4+IAo+PiA+PiBydGVfZXRoX3R4X2J1cnN0KGRldi0+ cG9ydF9pZCwgcWlkLCBwa3Rfc2VncywgMik7Cj4+ID4+IAo+PiA+PiAKPj4gPj4gSXMgaXQgYSBz aW1wbGUgdGVzdCB5b3UgZXhwZWN0PyBUaGUgaXNzdWUgaGVyZSBpcyBub2JvZHkgZXhwbGljaXRs eSBjYWxscwo+PiA+PiBydGVfcGt0bWJ1Zl9mcmVlKHBrdCksIHJ0ZV9wa3RtYnVmX2ZyZWUocGt0 X3NlZ1gpIGluIFBNRCBkcml2ZXIgd29uJ3QgZnJlZQo+PiA+PiAicGt0IiwgSXMgaXQgY2xlYXIg dG8geW91IG5vdz8KPj4gPgo+PiA+Cj4+ID5UaGFuayB5b3UgZm9yIHRoZSBzbWFsbCBjb2RlLiBZ ZXMsIHRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLgo+PiA+Cj4+ID5UaGUgcHJvcGVyIHdheSB0byBk byB0aGlzIGlzIHNvbWV0aGluZyBsaWtlIHRoaXM6Cj4+ID4KPj4gPgkvKiBjcmVhdGUgYSBtYnVm LCBhbmQgYXR0YWNoIGl0IHRvIGFuIGV4dGVybmFsIGJ1ZmZlciAqLwo+PiA+CXN0cnVjdCBydGVf bWJ1ZiAqcGt0ID0gcnRlX3BrdG1idWZfYWxsb2MobXApOwo+PiA+CXZpcnRpb19kZXZfZXh0YnVm X2FsbG9jKHBrdCwgZGF0YV9sZW4pCj4+ID4KPj4gPgkvKiBjcmVhdGUgYSBuZXcgbWJ1ZiwgYXR0 YWNoIGl0IHRvIHRoZSBwcmV2aW91cyBvbmU6IHRoZSByZXN1bHRpbmcKPj4gPgkgKiBtYnVmIGlz IGFsc28gYW4gImV4dGVybmFsIG1idWYiIChpcyBoYXMgdGhlIEVYVF9BVFRBQ0hFRF9NQlVGCj4+ ID4JICogZmxhZywgYW5kIGl0cyBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgZXh0IGJ1ZmZlci4KPj4g PgkgKiBTZWUgYW4gZXhhbXBsZSBoZXJlOiBodHRwczovL3d3dy5kcm9pZHMtY29ycC5vcmcvfnpl cjAvZXh0LW1idWYuc3ZnCj4+ID4JICovCj4+ID4Jc3RydWN0IHJ0ZV9tYnVmICpwa3Rfc2VnMSA9 IHJ0ZV9wa3RtYnVmX2FsbG9jKGluZGlyZWN0X3Bvb2wpOwo+PiA+CXJ0ZV9wa3RtYnVmX2F0dGFj aChwa3Rfc2VnMSwgcGt0KTsKPj4gPgo+PiA+CS8qIGRvIHRoZSBzYW1lIGFub3RoZXIgdGltZSAq Lwo+PiA+CXN0cnVjdCBydGVfbWJ1ZiAqcGt0X3NlZzIgPSBydGVfcGt0bWJ1Zl9hbGxvYyhpbmRp cmVjdF9wb29sKTsKPj4gPglydGVfcGt0bWJ1Zl9hdHRhY2gocGt0X3NlZzIsIHBrdCk7Cj4+ID4K Pj4gPgkvKiByZWxlYXNlIHRoZSBvcmlnaW5hbCBwa3QsIHdlIGRvbid0IG5lZWQgaXQgYW55bW9y ZSAqLwo+PiA+CXJ0ZV9wa3RtYnVmX2ZyZWUocGt0KTsKPj4gPgo+PiA+CS8qIHNlbmQgdGhlIG5l dyBzZWdtZW50cywgdGhleSB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBkcml2ZXIgb25jZQo+PiA+CSAq IFR4IGlzIGRvbmUuIFdoZW4gdGhlIGxhc3QgcGFja2V0IHJlZmVyZW5jaW5nIHRoZSBleHRlcm5h bCBidWZmZXIKPj4gPgkgKiBpcyBmcmVlZCwgdGhlIGZyZWUgY2FsbGJhY2sgb2YgdGhlIGJ1ZmZl ciB3aWxsIGJlIGludm9rZWQuICovCj4+ID4Jc3RydWN0IHJ0ZV9tYnVmICpwa3Rfc2Vnc1syXSA9 IHtwa3Rfc2VnMSwgcGt0X3NlZzJ9Owo+PiA+CXJ0ZV9ldGhfdHhfYnVyc3QoZGV2LT5wb3J0X2lk LCBxaWQsIHBrdF9zZWdzLCAyKTsKPj4gPgo+PiA+SG9wZSB0aGlzIGlzIGNsZWFyZXIgbm93Lgo+ PiA+Cj4+ID5SZWdhcmRzLAo+PiA+T2xpdmllcgo+PiA+Cj4+ID4KPj4gPj4gCj4+ID4+IAo+PiA+ PiAKPj4gPj4gCj4+ID4+IAo+PiA+PiAKPj4gPj4gCj4+ID4+IAo+PiA+PiAKPj4gPj4gCj4+ID4+ IAo+PiA+PiBBdCAyMDIwLTEwLTA3IDE3OjQ4OjIxLCAiT2xpdmllciBNYXR6IiA8b2xpdmllci5t YXR6QDZ3aW5kLmNvbT4gd3JvdGU6Cj4+ID4+ID5IaSwKPj4gPj4gPgo+PiA+PiA+T24gU3VuLCBT ZXAgMjcsIDIwMjAgYXQgMDE6NTU6MjFQTSArMDgwMCwgeWFuZ195X3lpIHdyb3RlOgo+PiA+PiA+ PiBQZXIgR1NPIHJlcXVpcmVtZW50LCB0aGlzIGlzIGEgbXVzdC1oYXZlIGNoYW5nZSwgSmlheXUs IGNhbiB5b3UgaGVscCByZXZpZXcKPj4gPj4gPj4gdGhpcyBzZXJpZXM/Cj4+ID4+ID4KPj4gPj4g PkkgY2FuJ3QgYWNrIHRoaXMgcGF0Y2ggdW50aWwgSSBoYXZlIGEgc2ltcGxlIGFuZCBjbGVhciB0 ZXN0IGNhc2UgKG9ubHkKPj4gPj4gPndpdGggbWJ1ZiBmdW5jdGlvbnMsIHdpdGhvdXQgR1NPIG9y IHZob3N0KSBzaG93aW5nIHRoZSBpc3N1ZSB3ZSBoYXZlCj4+ID4+ID50b2RheSB3aXRoIGN1cnJl bnQuCj4+ID4+ID4KPj4gPj4gPj4gT2xpdmllciwgaWYgeW91IHVzZWQgdGhlIG9sZCBpbnRlcmZh Y2UsIG1heWJlIHlvdSBuZWVkIHRvIGNoYW5nZSB5b3VyIGNvZGUgdG8KPj4gPj4gPj4gYWRhcHQg dGhpcywgSSBkb24ndCB0aGluayB3ZSBjYW4gaGF2ZSBhIGJldHRlciB3YXkgdG8gaGFuZGxlIEdT TyBjYXNlLgo+PiA+PiA+Cj4+ID4+ID5Tb3JyeSwgSSBkb24ndCBnZXQgeW91ciBwb2ludC4gV2hh dCBkbyBJIG5lZWQgdG8gY2hhbmdlIGluIHdoaWNoIGNvZGU/Cj4+ID4+ID4KPj4gPj4gPihzb21l IG1vcmUgY29tbWVudHMgYmVsb3cpCj4+ID4+ID4KPj4gPj4gPj4gQXQgMjAyMC0wOC0wNCAwOToz MToxOSwgInlhbmdfeV95aSIgPHlhbmdfeV95aUAxNjMuY29tPiB3cm90ZToKPj4gPj4gPj4gCj4+ ID4+ID4+IEF0IDIwMjAtMDgtMDMgMjA6MzQ6MjUsICJPbGl2aWVyIE1hdHoiIDxvbGl2aWVyLm1h dHpANndpbmQuY29tPiB3cm90ZToKPj4gPj4gPj4gPk9uIE1vbiwgQXVnIDAzLCAyMDIwIGF0IDA1 OjQyOjEzUE0gKzA4MDAsIHlhbmdfeV95aSB3cm90ZToKPj4gPj4gPj4gPj4gQXQgMjAyMC0wOC0w MyAxNjoxMTozOSwgIk9saXZpZXIgTWF0eiIgPG9saXZpZXIubWF0ekA2d2luZC5jb20+IHdyb3Rl Ogo+PiA+PiA+PiA+PiA+T24gTW9uLCBBdWcgMDMsIDIwMjAgYXQgMDk6MjY6NDBBTSArMDgwMCwg eWFuZ195X3lpIHdyb3RlOgo+PiA+PiA+PiA+PiA+PiBBdCAyMDIwLTA4LTAzIDA0OjI5OjA3LCAi T2xpdmllciBNYXR6IiA8b2xpdmllci5tYXR6QDZ3aW5kLmNvbT4gd3JvdGU6Cj4+ID4+ID4+ID4+ ID4+ID5IaSwKPj4gPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+PiA+T24gU3VuLCBBdWcgMDIs IDIwMjAgYXQgMDc6MTI6MzZBTSArMDgwMCwgeWFuZ195X3lpIHdyb3RlOgo+PiA+PiA+PiA+PiA+ PiA+PiAKPj4gPj4gPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+ID4+ID4+IEF0IDIwMjAtMDctMzEg MjM6MTU6NDMsICJPbGl2aWVyIE1hdHoiIDxvbGl2aWVyLm1hdHpANndpbmQuY29tPiB3cm90ZToK Pj4gPj4gPj4gPj4gPj4gPj4gPkhpLAo+PiA+PiA+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4+ ID4+ID5PbiBUaHUsIEp1bCAzMCwgMjAyMCBhdCAwODowODo1OVBNICswODAwLCB5YW5nX3lfeWlA MTYzLmNvbSB3cm90ZToKPj4gPj4gPj4gPj4gPj4gPj4gPj4gRnJvbTogWWkgWWFuZyA8eWFuZ3lp MDFAaW5zcHVyLmNvbT4KPj4gPj4gPj4gPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+ID4+ID4+ID4+ IEluIEdTTyBjYXNlLCBzZWdtZW50ZWQgbWJ1ZnMgYXJlIGF0dGFjaGVkIHRvIG9yaWdpbmFsCj4+ ID4+ID4+ID4+ID4+ID4+ID4+IG1idWYgd2hpY2ggY2FuJ3QgYmUgZnJlZWQgd2hlbiBpdCBpcyBl eHRlcm5hbC4gVGhlIGlzc3VlCj4+ID4+ID4+ID4+ID4+ID4+ID4+IGlzIGZyZWVfY2IgZG9lc24n dCBrbm93IG9yaWdpbmFsIG1idWYgYW5kIGRvZXNuJ3QgZnJlZQo+PiA+PiA+PiA+PiA+PiA+PiA+ PiBpdCB3aGVuIHJlZmNudCBvZiBzaGluZm8gaXMgMC4KPj4gPj4gPj4gPj4gPj4gPj4gPj4gCj4+ ID4+ID4+ID4+ID4+ID4+ID4+IE9yaWdpbmFsIG1idWYgY2FuIGJlIGZyZWVkIGJ5IHJ0ZV9wa3Rt YnVmX2ZyZWUgc2VnbWVudGVkCj4+ID4+ID4+ID4+ID4+ID4+ID4+IG1idWZzIG9yIGJ5IHJ0ZV9w a3RtYnVmX2ZyZWUgb3JpZ2luYWwgbWJ1Zi4gVHdvIGtpbmQgb2YKPj4gPj4gPj4gPj4gPj4gPj4g Pj4gY2FzZXMgc2hvdWxkIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9ycy4gZnJlZV9jYiB3b24ndAo+ PiA+PiA+PiA+PiA+PiA+PiA+PiBleHBsaWNpdGx5IGNhbGwgcnRlX3BrdG1idWZfZnJlZSB0byBm cmVlIG9yaWdpbmFsIG1idWYKPj4gPj4gPj4gPj4gPj4gPj4gPj4gaWYgaXQgaXMgZnJlZWQgYnkg cnRlX3BrdG1idWZfZnJlZSBvcmlnaW5hbCBtYnVmLCBidXQgaXQKPj4gPj4gPj4gPj4gPj4gPj4g Pj4gaGFzIHRvIGNhbGwgcnRlX3BrdG1idWZfZnJlZSB0byBmcmVlIG9yaWdpbmFsIG1idWYgaWYg aXQKPj4gPj4gPj4gPj4gPj4gPj4gPj4gaXMgZnJlZWQgYnkgcnRlX3BrdG1idWZfZnJlZSBzZWdt ZW50ZWQgbWJ1ZnMuCj4+ID4+ID4+ID4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiA+PiA+PiA+PiBJ biBvcmRlciB0byBmaXggdGhpcyBpc3N1ZSwgZnJlZV9jYiBpbnRlcmZhY2UgaGFzIHRvIGJlZW4K Pj4gPj4gPj4gPj4gPj4gPj4gPj4gY2hhbmdlZCwgX19ydGVfcGt0bWJ1Zl9mcmVlX2V4dGJ1ZiBt dXN0IGRlbGl2ZXIgY2FsbGVkCj4+ID4+ID4+ID4+ID4+ID4+ID4+IG1idWYgcG9pbnRlciB0byBm cmVlX2NiLCBhcmd1bWVudCBvcGFxdWUgY2FuIGJlIGRlZmluZWQKPj4gPj4gPj4gPj4gPj4gPj4g Pj4gYXMgYSBjdXN0b20gc3RydWN0IGJ5IHVzZXIsIGl0IGNhbiBpbmNsdWRlcyBvcmlnaW5hbCBt YnVmCj4+ID4+ID4+ID4+ID4+ID4+ID4+IHBvaW50ZXIsIHVzZXItZGVmaW5lZCBmcmVlX2NiIGNh biBjb21wYXJlIGNhbGxlciBtYnVmIHdpdGgKPj4gPj4gPj4gPj4gPj4gPj4gPj4gbWJ1ZiBpbiBv cGFxdWUgc3RydWN0LCBmcmVlX2NiIHNob3VsZCBmcmVlIG9yaWdpbmFsIG1idWYKPj4gPj4gPj4g Pj4gPj4gPj4gPj4gaWYgdGhleSBhcmUgbm90IHNhbWUsIHRoaXMgY29ycmVzcG9uZHMgdG8gcnRl X3BrdG1idWZfZnJlZQo+PiA+PiA+PiA+PiA+PiA+PiA+PiBzZWdtZW50ZWQgbWJ1ZnMgY2FzZSwg b3RoZXJ3aXNlLCBmcmVlX2NiIHdvbid0IGZyZWUgb3JpZ2luYWwKPj4gPj4gPj4gPj4gPj4gPj4g Pj4gbWJ1ZiBiZWNhdXNlIHRoZSBjYWxsZXIgZXhwbGljaXRseSBjYWxsZWQgcnRlX3BrdG1idWZf ZnJlZQo+PiA+PiA+PiA+PiA+PiA+PiA+PiB0byBmcmVlIGl0Lgo+PiA+PiA+PiA+PiA+PiA+PiA+ PiAKPj4gPj4gPj4gPj4gPj4gPj4gPj4gSGVyZSBpcyBwc2VkdW8gY29kZSB0byBzaG93IHR3byBr aW5kIG9mIGNhc2VzLgo+PiA+PiA+PiA+PiA+PiA+PiA+PiAKPj4gPj4gPj4gPj4gPj4gPj4gPj4g Y2FzZSAxLiBydGVfcGt0bWJ1Zl9mcmVlIHNlZ21lbnRlZCBtYnVmcwo+PiA+PiA+PiA+PiA+PiA+ PiA+PiAKPj4gPj4gPj4gPj4gPj4gPj4gPj4gbmJfdHggPSBydGVfZ3NvX3NlZ21lbnQob3JpZ2lu YWxfbWJ1ZiwgLyogb3JpZ2luYWwgbWJ1ZiAqLwo+PiA+PiA+PiA+PiA+PiA+PiA+PiAgICAgICAg ICAgICAgICAgICAgICAgJmdzb19jdHgsCj4+ID4+ID4+ID4+ID4+ID4+ID4+ICAgICAgICAgICAg ICAgICAgICAgICAvKiBzZWdtZW50ZWQgbWJ1ZiAqLwo+PiA+PiA+PiA+PiA+PiA+PiA+PiAgICAg ICAgICAgICAgICAgICAgICAgKHN0cnVjdCBydGVfbWJ1ZiAqKikmZ3NvX21idWZzLAo+PiA+PiA+ PiA+PiA+PiA+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgTUFYX0dTT19NQlVGUyk7Cj4+ID4+ ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPj4gPkknbSBzb3JyeSBidXQgaXQgaXMgbm90 IHZlcnkgY2xlYXIgdG8gbWUgd2hhdCBvcGVyYXRpb25zIGFyZSBkb25lIGJ5Cj4+ID4+ID4+ID4+ ID4+ID4+ID5ydGVfZ3NvX3NlZ21lbnQoKS4KPj4gPj4gPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+ PiA+PiA+PiA+SW4gdGhlIGN1cnJlbnQgY29kZSwgSSBvbmx5IHNlZSBjYWxscyB0byBydGVfcGt0 bWJ1Zl9hdHRhY2goKSwKPj4gPj4gPj4gPj4gPj4gPj4gPndoaWNoIGRvIG5vdCBkZWFsIHdpdGgg ZXh0ZXJuYWwgYnVmZmVycy4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8KPj4gPj4gPj4gPj4gPj4g Pj4gPgo+PiA+PiA+PiA+PiA+PiA+PiA+QXJlIHlvdSBhYmxlIHRvIHNob3cgdGhlIGlzc3VlIG9u bHkgd2l0aCBtYnVmIGZ1bmN0aW9ucz8gSXQgd291bGQKPj4gPj4gPj4gPj4gPj4gPj4gPmJlIGhl bHBmdWwgdG8gdW5kZXJzdGFuZCB3aGF0IGRvZXMgbm90IHdvcmsuCj4+ID4+ID4+ID4+ID4+ID4+ ID4KPj4gPj4gPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+PiA+PiA+VGhhbmtzLAo+PiA+PiA+ PiA+PiA+PiA+PiA+T2xpdmllcgo+PiA+PiA+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4+ID4+ IE9saXZlciwgdGhhbmsgeW91IGZvciBjb21tZW50LCBsZXQgbWUgc2hvdyB5b3Ugd2h5IGl0IGRv ZXNuJ3Qgd29yayBmb3IgbXkgdXNlIGNhc2UuICBJbiBPVlMgRFBESywgVk0gdXNlcyB2aG9zdHVz ZXJjbGllbnQgdG8gc2VuZCBsYXJnZSBwYWNrZXRzIHdob3NlIHNpemUgaXMgYWJvdXQgNjRLIGJl Y2F1c2Ugd2UgZW5hYmxlZCBUU08gJiBVRk8sIHRoZXNlIGxhcmdlIHBhY2tldHMgdXNlIHJ0ZV9t YnVmcyBhbGxvY2F0ZWQgYnkgRFBESyB2aXJ0aW9fbmV0IGZ1bmN0aW9uIAo+PiA+PiA+PiA+PiA+ PiA+PiB2aXJ0aW9fZGV2X3BrdG1idWZfYWxsb2MoKSAoaW4gZmlsZSBsaWIvbGlicnRlX3Zob3N0 L3ZpcnRpb19uZXQuYy4gUGxlYXNlIHJlZmVyIHRvIFtQQVRDSCBWMSAzLzNdLCBJIGNoYW5nZWQg ZnJlZV9jYiBhcyBiZWxvdywgdGhlc2UgcGFja2V0cyB1c2UgdGhlIHNhbWUgYWxsb2NhdGUgZnVu Y3Rpb24gYW5kIHRoZSBzYW1lIGZyZWVfY2Igbm8gbWF0dGVyIHRoZXkgYXJlIFRDUCBwYWNrZXQg b3IgVURQIHBhY2tldHMsIGluIGNhc2Ugb2YgVlhMQU4gVFNPLCBtb3N0IE5JQ3MgY2FuJ3Qgc3Vw cG9ydCBpbm5lciBVRFAgZnJhZ21lbnQgb2ZmbG9hZCwgc28gT1ZTIERQREsgaGFzIHRvIGRvIGl0 IGJ5IHNvZnR3YXJlLCBmb3IgVURQIGNhc2UsIHRoZSBvcmlnaW5hbCBydGVfbWJ1ZiBvbmx5IGNh biBiZSBmcmVlZCBieSBzZWdtZW50ZWQgcnRlX21idWZzIHdoaWNoIGFyZSBvdXRwdXQgcGFja2V0 cyBvZiBydGVfZ3NvX3NlZ21lbnQsIGkuZS4gdGhlIG9yaWdpbmFsIHJ0ZV9tYnVmIG9ubHkgY2Fu IGZyZWVkIGJ5IGZyZWVfY2IsIHlvdSBjYW4gc2VlLCBpdCBleHBsaWNpdGx5IGNhbGxlZCBydGVf cGt0bWJ1Zl9mcmVlKGFyZy0+bWJ1ZiksIHRoZSBjb25kaXRpb24gc3RhdGVtZW50ICJpZiAoY2Fs bGVyX20gIT0gYXJnLT5tYnVmKSIgaXMgdHJ1ZSBmb3IgdGhpcyBjYXNlLCB0aGlzIGhhcyBubyBw cm9ibGVtLCBidXQgZm9yIFRDUCBjYXNlLCB0aGUgb3JpZ2luYWwgbWJ1ZiBpcyBkZWxpdmVyZWQg dG8gcnRlX2V0aF90eF9idXJzdCgpIGJ1dCBub3Qgc2VnbWVudGVkIHJ0ZV9tYnVmcyBvdXRwdXQg YnkgcnRlX2dzb19zZWdtZW50LCBQTUQgZHJpdmVyIHdpbGwgY2FsbCBydGVfcGt0bWJ1Zl9mcmVl KG9yaWdpbmFsX3J0ZV9tYnVmKSBidXQgbm90IHJ0ZV9wa3RtYnVmX2ZyZWUoc2VnbWVudGVkX3J0 ZV9tYnVmcyksIHRoZSBzYW1lIGZyZWVfY2Igd2lsbCBiZSBjYWxsZWQsIHRoYXQgbWVhbnMgb3Jp Z2luYWxfcnRlX21idWYgd2lsbCBiZSBmcmVlZCB0d2ljZSwgeW91IGtub3cgd2hhdCB3aWxsIGhh cHBlbiwgdGhpcyBpcyBqdXN0IHRoZSBpc3N1ZSBJJ20gZml4aW5nLiBJIGJyaW5nIGluIGNhbGxl cl9tIGFyZ3VtZW50LCBpdCBjYW4gaGVscCB3b3JrIGFyb3VuZCB0aGlzIGJlY2F1c2UgY2FsbGVy X20gaXMgYXJnLT5tYnVmIGFuZCB0aGUgY29uZGl0aW9uIHN0YXRlbWVudCAiaWYgKGNhbGxlcl9t ICE9IGFyZy0+bWJ1ZikiIGlzIGZhbHNlLCB5b3UgY2FuJ3QgZml4IGl0IHdpdGhvdXQgdGhlIGNo YW5nZSB0aGlzIHBhdGNoIHNlcmllcyBkaWQuCj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4g Pj4gPkknbSBzaWxsIG5vdCBzdXJlIHRvIGdldCB5b3VyIGlzc3VlLiBQbGVhc2UsIGlmIHlvdSBo YXZlIGEgc2ltcGxlIHRlc3QKPj4gPj4gPj4gPj4gPj4gPmNhc2UgdXNpbmcgb25seSBtYnVmcyBm dW5jdGlvbnMgKHdpdGhvdXQgdmlydGlvLCBnc28sIC4uLiksIGl0IHdvdWxkIGJlCj4+ID4+ID4+ ID4+ID4+ID52ZXJ5IGhlbHBmdWwgYmVjYXVzZSB3ZSB3aWxsIGJlIHN1cmUgdGhhdCB3ZSBhcmUg dGFsa2luZyBhYm91dCB0aGUgc2FtZQo+PiA+PiA+PiA+PiA+PiA+dGhpbmcuIEluIGNhc2UgdGhl cmUgaXMgYW4gaXNzdWUsIGl0IGNhbiBlYXNpbHkgYmVjb21lIGEgdW5pdCB0ZXN0Lgo+PiA+PiA+ PiA+PiA+PiAKPj4gPj4gPj4gPj4gPj4gT2xpdmVyLCBJIHRoaW5rIHlvdSBkb24ndCBnZXQgdGhl IHBvaW50LCBmcmVlIG9wZXJhdGlvbiBjYW4ndCBiZSBjb250cm9sbGVkIGJ5IHRoZSBhcHBsaWNh dGlvbiBpdHNlbGYsIAo+PiA+PiA+PiA+PiA+PiBpdCBpcyBkb25lIGJ5IFBNRCBkcml2ZXIgYW5k IHRyaWdnZXJlZCBieSBydGVfZXRoX3R4X2J1cnN0LCBJIGhhdmUgc2hvd24gcHNldWRvIGNvZGUs Cj4+ID4+ID4+ID4+ID4+IHJ0ZV9nc29fc2VnbWVudCBqdXN0IHNlZ21lbnRzIGEgbGFyZ2UgbWJ1 ZiB0byBtdWx0aXBsZSBtYnVmcywgaXQgd29uJ3Qgc2VuZCB0aGVtLCB0aGUgYXBwbGljYXRpb24K Pj4gPj4gPj4gPj4gPj4gd2lsbCBjYWxsIHJ0ZV9ldGhfdHhfYnVyc3QgdG8gc2VuZCB0aGVtIGZp bmFsbHkuCj4+ID4+ID4+ID4+ID4+Cj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPlRo YXQgc2FpZCwgSSBsb29rZWQgYXQgdmhvc3QgbWJ1ZiBhbGxvY2F0aW9uIGFuZCBnc28gc2VnbWVu dGF0aW9uLCBhbmQKPj4gPj4gPj4gPj4gPj4gPkkgZm91bmQgc29tZSBzdHJhbmdlIHRoaW5nczoK Pj4gPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+PiA+MS8gSW4gdmlydGlvX2Rldl9leHRidWZf YWxsb2MoKSwgYW5kIEkgdGhlcmUgYXJlIDIgcGF0aHMgdG8gY3JlYXRlIHRoZQo+PiA+PiA+PiA+ PiA+PiA+ICAgZXh0IG1idWYuCj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPiAgIGEv IFRoZSBmaXJzdCBvbmUgc3RvcmVzIHRoZSBzaGluZm8gc3RydWN0IGluIHRoZSBtYnVmLCBiYXNp Y2FsbHkKPj4gPj4gPj4gPj4gPj4gPiAgICAgIGxpa2UgdGhpczoKPj4gPj4gPj4gPj4gPj4gPgo+ PiA+PiA+PiA+PiA+PiA+CXBrdCA9IHJ0ZV9wa3RtYnVmX2FsbG9jKG1wKTsKPj4gPj4gPj4gPj4g Pj4gPglzaGluZm8gPSBydGVfcGt0bWJ1Zl9tdG9kKHBrdCwgc3RydWN0IHJ0ZV9tYnVmX2V4dF9z aGFyZWRfaW5mbyAqKTsKPj4gPj4gPj4gPj4gPj4gPglidWYgPSBydGVfbWFsbG9jKE5VTEwsIGJ1 Zl9sZW4sIFJURV9DQUNIRV9MSU5FX1NJWkUpOwo+PiA+PiA+PiA+PiA+PiA+CXNoaW5mby0+ZnJl ZV9jYiA9IHZpcnRpb19kZXZfZXh0YnVmX2ZyZWU7Cj4+ID4+ID4+ID4+ID4+ID4Jc2hpbmZvLT5m Y2Jfb3BhcXVlID0gYnVmOwo+PiA+PiA+PiA+PiA+PiA+CXJ0ZV9tYnVmX2V4dF9yZWZjbnRfc2V0 KHNoaW5mbywgMSk7Cj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPiAgICAgIEkgZG9u J3QgdGhpbmsgaXQgaXMgYSBnb29kIGlkZWEsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVl IHRoYXQKPj4gPj4gPj4gPj4gPj4gPiAgICAgIHRoZSBtYnVmIHdvbid0IGJlIGZyZWVkIGJlZm9y ZSB0aGUgYnVmZmVyLiBGb3IgaW5zdGFuY2UsIGRvaW5nCj4+ID4+ID4+ID4+ID4+ID4gICAgICB0 aGlzIHdpbGwgcHJvYmFibHkgZmFpbDoKPj4gPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+PiA+ CXBrdDIgPSBydGVfcGt0bWJ1Zl9hbGxvYyhtcCk7Cj4+ID4+ID4+ID4+ID4+ID4JcnRlX3BrdG1i dWZfYXR0YWNoKHBrdDIsIHBrdCk7Cj4+ID4+ID4+ID4+ID4+ID4JcnRlX3BrdG1idWZfZnJlZShw a3QpOyAgLyogcGt0IGlzIGZyZWVkLCBidXQgaXQgY29udGFpbnMgc2hpbmZvICEgKi8KPj4gPj4g Pj4gPj4gPj4gCj4+ID4+ID4+ID4+ID4+IHBrdCBpcyBjcmVhdGVkIGJ5IHRoZSBhcHBsaWNhdGlv biBJIGNhbiBjb250cm9sLCBzbyBJIGNhbiBjb250cm9sIGl0IHdoZXJlIGl0IHdpbGwgYmUgZnJl ZWQsIHJpZ2h0Pwo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID5UaGlzIGV4YW1wbGUgc2hvd3Mg dGhhdCBtYnVmcyBhbGxvY2F0ZWQgbGlrZSB0aGlzIGJ5IHRoZSB2aG9zdAo+PiA+PiA+PiA+PiA+ ZHJpdmVyIGFyZSBub3QgY29uc3RydWN0ZWQgY29ycmVjdGx5LiBJZiBhbiBhcHBsaWNhdGlvbiBh dHRhY2ggYSBuZXcKPj4gPj4gPj4gPj4gPnBhY2tldCAocGt0MikgdG8gaXQgYW5kIGZyZWVzIHRo ZSBvcmlnaW5hbCBvbmUgKHBrdCksIGl0IG1heSByZXN1bHQgaW4gYQo+PiA+PiA+PiA+PiA+bWVt b3J5IGNvcnJ1cHRpb24uCj4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPk9mIGNvdXJzZSwgdG8g YmUgdGVzdGVkIGFuZCBjb25maXJtZWQuCj4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBObywgYXR0 YWNoIHdpbGwgaW5jcmVhc2UgcmVmY250IG9mIHNoaW5mbywgZnJlZV9jYiBvbmx5IGlzIGNhbGxl ZCB3aGVuICByZWZjbnQgb2Ygc2hpbmZvIGlzIGRlY3JlYXNlZCB0bwo+PiA+PiA+PiA+PiAwLCBp c24ndCBpdD8KPj4gPj4gPj4gPgo+PiA+PiA+PiA+V2hlbiBwa3Qgd2lsbCBiZSBmcmVlZCwgaXQg d2lsbCBkZWNyZW1lbnQgdGhlIHNoaW5mbyByZWZjbnQsIGFuZAo+PiA+PiA+PiA+YWZ0ZXIgaXQg d2lsbCBiZSAxLiBTbyB0aGUgYnVmZmVyIHdvbid0IGJlIGZyZWVkLiBBZnRlciB0aGF0LCB0aGUK Pj4gPj4gPj4gPm1idWYgcGt0IHdpbGwgYmUgZGV0YWNoZWQsIGFuZCB3aWxsIHJldHVybiB0byB0 aGUgbWJ1ZiBwb29sLiBJdCBtZWFucwo+PiA+PiA+PiA+aXQgY2FuIGJlIHJlYWxsb2NhdGVkLCBh bmQgdGhlIG5leHQgdXNlciBjYW4gb3ZlcndyaXRlIHNoaW5mbyB3aGljaAo+PiA+PiA+PiA+aXMg c3RpbGwgc3RvcmVkIGluIHRoZSBtYnVmIGRhdGEuCj4+ID4+ID4+IAo+PiA+PiA+PiBJIHRoaW5r IHRoaXMgaXMgYW4gaXNzdWUgb2YgRFBESyBpdHNlbGYsIGlmIGV4dGVybmFsIGJ1ZmZlciBpbiBz aGluZm8gaXMgZnJlZWQsIHNoaW5mbyBzaG91bGQgYmUgc2V0IHRvIE5VTEwsIGlmIHVzZXIgd2ls bAo+PiA+PiA+PiBvdmVyd3JpdGUgaXQsIGhlL3NoZSBzaG91bGQgdXNlIHRoZSBzYW1lIHdheSBh cyBhIG5ldyBleHRlcm5hbCBidWZmZXIgaXMgYXR0YWNoZWQuIAo+PiA+PiA+Cj4+ID4+ID5Obywg dGhlcmUgaXMgbm8gaXNzdWUgaW4gRFBESy4gVGhlIGxpZmV0aW1lIG9mIHNoaW5mbyBzaG91bGQg YmUgYXQgbGVhc3QKPj4gPj4gPnRoZSBzYW1lIHRoZSBsaWZldGltZSBvZiB0aGUgYnVmZmVyLiBJ ZiBzaGluZm8gaXMgc3RvcmVkIGluIGluaXRpYWwgbWJ1Zgo+PiA+PiA+KGNhbGxlZCAicGt0IiBp biB0aGUgZXhhbXBsZSBhYm92ZSksIHRoZSBtYnVmIGFuZCBzaGluZm8gY2FuIGJlIGZyZWVkIHdo aWxlCj4+ID4+ID50aGUgYnVmZmVyIGlzIHN0aWxsIGluIHVzZSBieSBhbm90aGVyIHBhY2tldC4K Pj4gPj4gPgo+PiA+PiA+PiA+SSBkaWQgYSB0ZXN0IHRvIHNob3cgaXQsIHNlZToKPj4gPj4gPj4g Pmh0dHA6Ly9naXQuZHJvaWRzLWNvcnAub3JnLz9wPWRwZGsuZ2l0O2E9Y29tbWl0ZGlmZjtoPWE2 MTc0OTRlZWIwMWZmCj4+ID4+ID4+ID4KPj4gPj4gPj4gPklmIHlvdSBydW4gdGhlIG1idWYgYXV0 b3Rlc3QsIGl0IHNlZ2ZhdWx0cy4KPj4gPj4gPj4gCj4+ID4+ID4+IEkgdGhpbmsgeW91ciB0ZXN0 IGlzIHdyb25nLCB5b3UncmUgY2hhbmdpbmcgc2hpbmZvICh3aGljaCBpcyBiZWluZyB1c2VkKSBp biB3cm9uZyB3YXksIGlmIGZyZWVfYmMgaXMgTlVMTCwgaXQgd2lsbCBiZSBpbnZhbGlkLgo+PiA+ PiA+Cj4+ID4+ID5JJ20gY2hhbmdpbmcgdGhlIGRhdGEgb2YgYSBuZXdseSBhbGxvY2F0ZWQgbWJ1 ZiwgaXQgaXMgcGVyZmVjdGx5IGxlZ2FsLgo+PiA+PiA+SSBoYXBwZW5zIHRoYXQgaXQgcG9pbnRz IHRoZSB0aGUgc2hpbmZvIHRoYXQgaXMgc3RpbGwgaW4gdXNlLgo+PiA+PiA+Cj4+ID4+ID4KPj4g Pj4gPj4gCj4+ID4+ID4+IHN0YXRpYyBpbmxpbmUgdm9pZAo+PiA+PiA+PiBydGVfcGt0bWJ1Zl9h dHRhY2hfZXh0YnVmKHN0cnVjdCBydGVfbWJ1ZiAqbSwgdm9pZCAqYnVmX2FkZHIsCj4+ID4+ID4+ ICAgICAgICAgcnRlX2lvdmFfdCBidWZfaW92YSwgdWludDE2X3QgYnVmX2xlbiwKPj4gPj4gPj4g ICAgICAgICBzdHJ1Y3QgcnRlX21idWZfZXh0X3NoYXJlZF9pbmZvICpzaGluZm8pCj4+ID4+ID4+ IHsKPj4gPj4gPj4gICAgICAgICAvKiBtYnVmIHNob3VsZCBub3QgYmUgcmVhZC1vbmx5ICovCj4+ ID4+ID4+ICAgICAgICAgUlRFX0FTU0VSVChSVEVfTUJVRl9ESVJFQ1QobSkgJiYgcnRlX21idWZf cmVmY250X3JlYWQobSkgPT0gMSk7Cj4+ID4+ID4+ICAgICAgICAgUlRFX0FTU0VSVChzaGluZm8t PmZyZWVfY2IgIT0gTlVMTCk7Cj4+ID4+ID4+IAo+PiA+PiA+PiBGb3IgYW55IHNoaW5mbyBvcGVy YXRpb24sIHlvdSBzaG91bGQgZG8gaXQgYnkgcnRlX3BrdG1idWZfYXR0YWNoX2V4dGJ1ZiwgeW91 IGNhbid0IGNoYW5nZSBpdCBhdCB3aWxsIGFmdGVyIHRoYXQuCj4+ID4+ID4+IAo+PiA+PiA+PiA+ Cj4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gCj4+ ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPiAgICAgIFRvIGRvIHRoaXMgcHJvcGVybHks IHRoZSBtYnVmIHJlZmNudCBzaG91bGQgYmUgaW5jcmVhc2VkLCBhbmQKPj4gPj4gPj4gPj4gPj4g PiAgICAgIHRoZSBtYnVmIHNob3VsZCBiZSBmcmVlZCBpbiB0aGUgY2FsbGJhY2suIEJ1dCBJIGRv bid0IHRoaW5rIGl0J3MKPj4gPj4gPj4gPj4gPj4gPiAgICAgIHdvcnRoIGRvaW5nIGl0LCBnaXZl biB0aGUgc2Vjb25kIHBhdGggKGIvKSBsb29rcyBnb29kIHRvIG1lLgo+PiA+PiA+PiA+PiA+PiA+ Cj4+ID4+ID4+ID4+ID4+ID4gICBiLyBUaGUgc2Vjb25kIHBhdGggc3RvcmVzIHRoZSBzaGluZm8g c3RydWN0IGF0IHRoZSBlbmQgb2YgdGhlCj4+ID4+ID4+ID4+ID4+ID4gICAgICBhbGxvY2F0ZWQg YnVmZmVyLCBsaWtlIHRoaXM6Cj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPglwa3Qg PSBydGVfcGt0bWJ1Zl9hbGxvYyhtcCk7Cj4+ID4+ID4+ID4+ID4+ID4JYnVmX2xlbiArPSBzaXpl b2YoKnNoaW5mbykgKyBzaXplb2YodWludHB0cl90KTsKPj4gPj4gPj4gPj4gPj4gPglidWZfbGVu ID0gUlRFX0FMSUdOX0NFSUwodG90YWxfbGVuLCBzaXplb2YodWludHB0cl90KSk7Cj4+ID4+ID4+ ID4+ID4+ID4JYnVmID0gcnRlX21hbGxvYyhOVUxMLCBidWZfbGVuLCBSVEVfQ0FDSEVfTElORV9T SVpFKTsKPj4gPj4gPj4gPj4gPj4gPglzaGluZm8gPSBydGVfcGt0bWJ1Zl9leHRfc2hpbmZvX2lu aXRfaGVscGVyKGJ1ZiwgJmJ1Zl9sZW4sCj4+ID4+ID4+ID4+ID4+ID4JCQkJCSAgICAgIHZpcnRp b19kZXZfZXh0YnVmX2ZyZWUsIGJ1Zik7Cj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4g PiAgICAgIEkgdGhpbmsgdGhpcyBpcyBjb3JyZWN0LCBiZWNhdXNlIHdlIGhhdmUgdGhlIGd1YXJh bnRlZSB0aGF0IHNoaW5mbwo+PiA+PiA+PiA+PiA+PiA+ICAgICAgZXhpc3RzIGFzIGxvbmcgYXMg dGhlIGJ1ZmZlciBleGlzdHMuCj4+ID4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiA+PiBXaGF0IGJ1 ZmZlciBkb2VzIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHlvdSdyZSBzYXlpbmcgaGVyZT8gVGhlIGlz c3VlIHdlJ3JlIGRpc2N1c3NpbmcgaG93IHdlIGNhbgo+PiA+PiA+PiA+PiA+PiBmcmVlIG9yaWdp bmFsIG1idWYgd2hpY2ggb3ducyBzaGluZm8gYnVmZmVyLgo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ ID4+ID5JIGRvbid0IGdldCB5b3VyIHF1ZXN0aW9uLgo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ ID5JJ20ganVzdCBzYXlpbmcgdGhhdCB0aGlzIGNvZGUgcGF0aCBsb29rcyBjb3JyZWN0LCBjb21w YXJlZCB0bwo+PiA+PiA+PiA+PiA+dGhlIHByZXZpb3VzIG9uZS4KPj4gPj4gPj4gPj4gCj4+ID4+ ID4+ID4+IEkgdGhpbmsgeW91J3JlIGNoYWxsZW5naW5nIHByaW5jaXBsZSBvZiBleHRlcm5hbCBt YnVmLCB0aGF0IGlzbid0IHRoZSB0aGluZyBJIGFkZHJlc3MuCj4+ID4+ID4+ID4KPj4gPj4gPj4g PkknbSBub3QgY2hhbGxlbmdpbmcgYW55dGhpbmcsIEknbSBzYXlpbmcgdGhlcmUgaXMgYSBidWcg aW4gdGhpcyBjb2RlLAo+PiA+PiA+PiA+YW5kIHRoZSB1bml0IHRlc3QgYWJvdmUgdGVuZHMgdG8g Y29uZmlybSBpdC4KPj4gPj4gPj4gCj4+ID4+ID4+IElmIGl0IGlzIGJ1ZywgeW91IGNhbiBwb3N0 IGEgcGF0Y2ggdG8gZml4IGl0LCAgaXQgaXNuJ3QgcmVsYXRlZCB3aXRoIG15IHBhdGNoZXMuIEJ1 dCBpbiBteSBvcGluaW9uLCB5b3UgZG9uJ3QKPj4gPj4gPj4gdXNlIGl0IGluIGNvcnJlY3Qgd2F5 LCBJIGRvbid0IHRoaW5rIGl0IGlzIGEgYnVnLgo+PiA+PiA+Cj4+ID4+ID5JJ2xsIHN1Ym1pdCBh IHBhdGNoIGZvciB0aGlzLgo+PiA+PiA+Cj4+ID4+ID5UaGUgcG9pbnQgaXMgeW91IGFyZSB0ZXN0 aW5nIEdTTyBvbiB0b3Agb2Ygd3JvbmdseS1jb25zdHJ1Y3RlZCBtYnVmcywgc28KPj4gPj4gPml0 IHdvdWxkIGJlIHNhZmVyIGZvciB5b3UgdG8gZml4IHRoaXMgYmVmb3JlIGRvaW5nIG1vcmUgdGVz dHMuCj4+ID4+ID4KPj4gPj4gPgo+PiA+PiA+PiA+PiA+PiA+Mi8gaW4gcnRlX2dzb19zZWdtZW50 KCksIHRoZXJlIGlzIGEgbG9vcCBsaWtlIHRoaXM6Cj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4g Pj4gPj4gPgl3aGlsZSAocGt0X3NlZykgewo+PiA+PiA+PiA+PiA+PiA+CQlydGVfbWJ1Zl9yZWZj bnRfdXBkYXRlKHBrdF9zZWcsIC0xKTsKPj4gPj4gPj4gPj4gPj4gPgkJcGt0X3NlZyA9IHBrdF9z ZWctPm5leHQ7Cj4+ID4+ID4+ID4+ID4+ID4JfQo+PiA+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ ID4+ID4gICBZb3UgY2hhbmdlIGl0IHRvIHRha2UgaW4gYWNjb3VudCB0aGUgcmVmY250IGZvciBl eHQgbWJ1ZnMuCj4+ID4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPiAgIEkgbWF5IGhhdmUg bWlzc2VkIHNvbWV0aGluZyBidXQgSSB3b25kZXIgd2h5IGl0IGlzIG5vdCBzaW1wbHk6Cj4+ID4+ ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPglydGVfcGt0bWJ1Zl9mcmVlKHBrdF9zZWcpOwo+ PiA+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID4+ID4gICBJdCB3aWxsIGRlY3JlYXNlIHRoZSBw cm9wZXIgcmVmY250LCBhbmQgZnJlZSB0aGUgbWJ1ZnMgaWYgdGhleQo+PiA+PiA+PiA+PiA+PiA+ ICAgYXJlIG5vdCB1c2VkLgo+PiA+PiA+PiA+PiA+PiAKPj4gPj4gPj4gPj4gPj4gQWdhaW4sIHJ0 ZV9nc29fc2VnbWVudCBqdXN0IGRlY3JlYXNlcyByZWZjbnQgYnkgb25lLCB0aGlzIHdpbGwgZW5z dXJlIHRoZSBsYXN0IHNlZ21lbnRlZCAKPj4gPj4gPj4gPj4gPj4gbWJ1ZiBmcmVlIHdpbGwgdHJp Z2dlciBmcmVlaW5nIG9yaWdpbmFsIG1idWYgKG9ubHkgZnJlZV9jYiBjYW4gZG8gdGhpcykuCj4+ ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPnJ0ZV9wa3RtYnVmX2ZyZWUoKSB3aWxsIGFsc28gZGVj ZXJhc2UgdGhlIHJlZmNudCwgYW5kIGZyZWUgdGhlIHJlc291cmNlcwo+PiA+PiA+PiA+PiA+d2hl biB0aGUgcmVmY250IHJlYWNoZXMgMC4KPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+SXQgaGFz IHNvbWUgYWR2YW50YWdlcyBjb21wYXJlZCB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50 ZXIgb2YgYWxsCj4+ID4+ID4+ID4+ID5zZWdtZW50czoKPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+ PiA+LSBubyBuZWVkIHRvIGl0ZXJhdGUgdGhlIHNlZ21lbnRzLCB0aGVyZSBpcyBvbmx5IG9uZSBm dW5jdGlvbiBjYWxsCj4+ID4+ID4+ID4+ID4tIG5vIG5lZWQgdG8gaGF2ZSBhIHNwZWNpYWwgY2Fz ZSBmb3IgZXh0IG1idWZzIGxpa2UgeW91IGRpZCBpbiB5b3VyIHBhdGNoCj4+ID4+ID4+ID4+ID4t IGl0IG1heSBiZSBzYWZlciwgaW4gY2FzZSBzb21lIHNlZ21lbnRzIGhhdmUgYSByZWZjbnQgPT0g MSwgYmVjYXVzZQo+PiA+PiA+PiA+PiA+ICByZXNvdXJjZXMgd2lsbCBiZSBmcmVlZC4KPj4gPj4g Pj4gPj4gCj4+ID4+ID4+ID4+IEZvciBleHRlcm5hbCBtYnVmLCBhdHRhY2ggb25seSBpbmNyZWFz ZXMgcmVmY250IG9mIHNoaW5mbywgcmVmY250IG9mIG1idWYgd29uJ3QgYmUgdG91Y2hlZC4gRm9y IG5vcm1hbAo+PiA+PiA+PiA+PiBtYnVmLCBhdHRhY2ggb25seSBpbmNyZWFzZSByZWZjbnQgb2Yg bWJ1Ziwgbm8gc2hpbmZvIHRoZXJlLCBubyByZWZjbnQgb2Ygc2hpbmZvIGluY3JlYXNlZC4KPj4g Pj4gPj4gPgo+PiA+PiA+PiA+SSBzdXBwb3NlIHJ0ZV9nc29fc2VnbWVudCgpIGNhbiB0YWtlIGFu eSBtYnVmIHR5cGUgYXMgaW5wdXQ6IHN0YW5kYXJkCj4+ID4+ID4+ID5tYnVmLCBpbmRpcmVjdCBt YnVmLCBleHQgbWJ1Ziwgb3IgZXZlbiBhIG1idWYgY2hhaW5nIGNvbnRhaW5pbmcgc2VnbWVudHMg b2YKPj4gPj4gPj4gPmRpZmZlcmVudCB0eXBlcy4KPj4gPj4gPj4gPgo+PiA+PiA+PiA+Rm9yIGlu c3RhbmNlLCBpZiB5b3UgcGFzcyBhIGNoYWluIG9mIDIgbWJ1ZnM6Cj4+ID4+ID4+ID4tIHRoZSBm aXJzdCBvbmUgaXMgYSBkaXJlY3QgbWJ1ZiBjb250YWluaW5nIHRoZSBJUC9UQ1AgaGVhZGVycyAo b3JpZ19oZHIpCj4+ID4+ID4+ID4tIHRoZSBzZWNvbmQgb24gaXMgYSBtYnVmIHBvaW50aW5nIHRv IGFuIGV4dCBidWZmZXIgKG9yaWdfcGF5bG9hZCkKPj4gPj4gPj4gPgo+PiA+PiA+PiA+SSBleHBl Y3QgdGhhdCB0aGUgcmVzdWx0aW5nIG1idWYgYWZ0ZXIgY2FsbGluZyBnc28gY29udGFpbnMgYSBs aXN0IG9mIG1idWZzCj4+ID4+ID4+ID5saWtlIHRoaXM6Cj4+ID4+ID4+ID4tIGEgZmlyc3Qgc2Vn bWVudCBjb250YWluaW5nIHRoZSBJUC9UQ1AgaGVhZGVycyAobmV3X2hkcikKPj4gPj4gPj4gPi0g YSBwYXlsb2FkIHNlZ21lbnQgcG9pbnRpbmcgb24gdGhlIHNhbWUgZXh0IGJ1ZmZlcgo+PiA+PiA+ PiA+Cj4+ID4+ID4+ID5JbiB0aGVvcnksIHRoZXJlIGlzIG5vIHJlYXNvbiB0aGF0IG9yaWdfaGRy IHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5Cj4+ID4+ID4+ID5hbm90aGVyIG5ldyBtYnVmLCBiZWNh dXNlIGl0IG9ubHkgY29udGFpbnMgaGVhZGVycyAobm8gZGF0YSkuIElmIHRoYXQncwo+PiA+PiA+ PiA+dGhlIGNhc2UsIGl0cyByZWZjbnQgaXMgMSwgYW5kIGRlY3JlYXNpbmcgaXQgdG8gMCB3aXRo b3V0IGZyZWVpbmcgaXQKPj4gPj4gPj4gPmlzIGEgYnVnLgo+PiA+PiA+PiAKPj4gPj4gPj4gRm9y IHRoaXMgdXNlciBzY2VuYXJpbywgb3JpZ19tIGlzIG93bmVyIG9mIGV4dGVybmFsIGJ1ZmZlciwg c21hbGwgc2VnbWVudGVkIG1idWZzIHJlZmVyZW5jZQo+PiA+PiA+PiBpdCwgeW91IHNob3VsZG4n dCBmcmVlIG9yaWdfbSBiZWZvcmUgYWxsIGF0dGFjaGVkIHNlZ21lbnRlZCBtYnVmcyBhcmUgZnJl ZWQsIGlzbid0IGl0Pwo+PiA+PiA+Cj4+ID4+ID5JbiB0aGlzIGNhc2UsIG9yaWdfaGRyIGhhcyB0 byBiZSBmcmVlZCBiZWNhdXNlIGl0IGlzIGEgZGlyZWN0IG1idWYgKG5vdAo+PiA+PiA+c2hhcmVk KS4KPj4gPj4gPlRoZSBidWZmZXIgcG9pbnRlZCBieSBvcmlnX3BheWxvYWQgd2lsbCBiZSBmcmVl ZCB3aGVuIGFsbCBuZXdseSBjcmVhdGVkCj4+ID4+ID5zZWdtZW50cyBhcmUgZnJlZWQuCj4+ID4+ ID4KPj4gPj4gPgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID5Bbnl3YXksIHRoZXJlIGlzIG1heWJlIG5v IGlzc3VlIGluIHRoYXQgY2FzZSwgYnV0IEkgd2FzIGp1c3Qgc3VnZ2VzdGluZwo+PiA+PiA+PiA+ dGhhdCB1c2luZyBydGVfcGt0bWJ1Zl9mcmVlKCkgaXMgZWFzaWVyIHRvIHJlYWQsIGFuZCBzYWZl ciB0aGFuIG1hbnVhbGx5Cj4+ID4+ID4+ID5kZWNyZWFzaW5nIHRoZSByZWZjbnQgb2YgZWFjaCBz ZWdtZW50Lgo+PiA+PiA+PiA+Cj4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4gPkFnYWluLCBzb3Jy eSBpZiB0aGlzIGlzIG5vdCB0aGUgaXNzdWUgeW91ciBhcmUgcmVmZXJyaW5nIHRvLCBidXQKPj4g Pj4gPj4gPj4gPj4gPmluIHRoaXMgY2FzZSBJIHJlYWxseSB0aGluayB0aGF0IGhhdmluZyBhIHNp bXBsZSBleGFtcGxlIGNvZGUgdGhhdAo+PiA+PiA+PiA+PiA+PiA+c2hvd3MgdGhlIGlzc3VlIHdv dWxkIGhlbHAuCj4+ID4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiA+PiBPbGl2ZXIsIG15IHN0YXRl bWVudCBpbiB0aGUgcGF0Y2ggSSBzZW50IG91dCBoYXMgcHNldWRvIGNvZGUgdG8gc2hvdyB0aGlz LiAgSSBkb24ndCB0aGluayBhIHNpbXBsZQo+PiA+PiA+PiA+PiA+PiB1bml0IHRlc3QgY2FuIHNo b3cgaXQuCj4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPkkgZG9uJ3Qgc2VlIHdoeS4gVGhlIFBN RHMgYW5kIHRoZSBsaWJyYXJpZXMgdXNlIHRoZSBtYnVmIGZ1bmN0aW9ucywgd2h5Cj4+ID4+ID4+ ID4+ID5hIHVuaXQgdGVzdCBjb3VsZG4ndCBjYWxsIHRoZSBzYW1lIGZ1bmN0aW9ucz8KPj4gPj4g Pj4gPj4gPgo+PiA+PiA+PiA+PiA+PiBMZXQgbWUgc3VtbWFyaXplIGl0IGhlcmUgYWdhaW4uIEZv ciBvcmlnaW5hbCBtYnVmLCB0aGVyZSBhcmUgdHdvIGNhc2VzIGZyZWVpbmcKPj4gPj4gPj4gPj4g Pj4gaXQsIGNhc2Ugb25lIGlzIFBNRCBkcml2ZXIgY2FsbHMgZnJlZSBhZ2FpbnN0IHNlZ21lbnRl ZCBtYnVmcywgbGFzdCBzZWdtZW50ZWQgbWJ1ZiBmcmVlIHdpbGwgdHJpZ2dlcgo+PiA+PiA+PiA+ PiA+PiBmcmVlX2NiIGNhbGwgd2hpY2ggd2lsbCBmcmVlIG9yaWdpbmFsIGxhcmdlICYgZXh0ZW5k ZWQgbWJ1Zi4KPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+T0sKPj4gPj4gPj4gPj4gPgo+PiA+ PiA+PiA+PiA+PiBDYXNlIHR3byBpcyBQTUQgZHJpdmVyIHdpbGwgY2FsbCBmcmVlIGFnYWluc3QK Pj4gPj4gPj4gPj4gPj4gb3JpZ2luYWwgbWJ1ZiwgdGhhdCBhbHNvIHdpbGwgY2FsbCBmcmVlX2Ni IHRvIGZyZWUgYXR0YWNoZWQgZXh0ZW5kZWQgYnVmZmVyLgo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ ID4+ID5PSwo+PiA+PiA+PiA+PiA+Cj4+ID4+ID4+ID4+ID5BbmQgd2hhdCBtYWtlcyB0aGF0IGNh c2UgMSBvciBjYXNlIDIgaXMgZXhlY3V0ZWQ/Cj4+ID4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gPj4g SW4gY2FzZSBvbmUgZnJlZV9jYiBtdXN0IGNhbGwKPj4gPj4gPj4gPj4gPj4gcnRlX3BrdG1idWZf ZnJlZSBvdGhlcndpc2Ugbm9ib2R5IHdpbGwgZnJlZSBvcmlnaW5hbCBsYXJnZSAmIGV4dGVuZGVk IG1idWYsIGluIGNhc2UgdHdvIGZyZWVfY2IgY2FuJ3QgCj4+ID4+ID4+ID4+ID4+IGNhbGwgcnRl X3BrdG1idWZfZnJlZSBiZWNhdXNlIHRoZSBjYWxsZXIgY2FsbGluZyBpdCBpcyBqdXN0IHJ0ZV9w a3RtYnVmX2ZyZWUgd2UgbmVlZC4gVGhhdCBpcyB0byBzYXksIHlvdQo+PiA+PiA+PiA+PiA+PiBt dXN0IHVzZSB0aGUgc2FtZSBmcmVlX2NiIHRvIGhhbmRsZSB0aGVzZSB0d28gY2FzZXMsIHRoaXMg aXMgbXkgaXNzdWUgYW5kIHRoZSBwb2ludCB5b3UgZG9uJ3QgZ2V0Lgo+PiA+PiA+PiA+PiA+Cj4+ ID4+ID4+ID4+ID5JIHRoaW5rIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBmcmVlX2Ni IEFQSS4gSXQgc2hvdWxkIHdvcmsgbGlrZQo+PiA+PiA+PiA+PiA+dGhpczoKPj4gPj4gPj4gPj4g Pgo+PiA+PiA+PiA+PiA+LSB2aXJ0aW8gY3JlYXRlcyB0aGUgb3JpZ2luYWwgZXh0ZXJuYWwgbWJ1 ZiAob3JpZ19tKQo+PiA+PiA+PiA+PiA+LSBnc28gd2lsbCBjcmVhdGUgYSBuZXcgbWJ1ZiByZWZl cmVuY2luZyB0aGUgZXh0ZXJuYWwgYnVmZmVyIChuZXdfbSkKPj4gPj4gPj4gPj4gPgo+PiA+PiA+ PiA+PiA+QXQgdGhpcyBwb2ludCwgdGhlIHNoaW5mbyBoYXMgYSByZWZjbnQgb2YgMi4gVGhlIGxh cmdlIGJ1ZmZlciB3aWxsIGJlCj4+ID4+ID4+ID4+ID5mcmVlZCBhcyBzb29uIGFzIHJ0ZV9wa3Rt YnVmX2ZyZWUoKSBpcyBjYWxsZWQgb24gb3JpZ19tIGFuZCBuZXdfbSwKPj4gPj4gPj4gPj4gPndo YXRldmVyIHRoZSBvcmRlci4KPj4gPj4gPj4gPj4gPgo+PiA+PiA+PiA+PiA+UmVnYXJkcywKPj4g Pj4gPj4gPj4gPk9saXZpZXIKPj4gPj4gPj4gPj4gCj4+ID4+ID4+ID4+IE9saXZlciwgdGhlIHJl YXNvbiBpdCB3b3JrcyBpcyBJIGNoYW5nZWQgZnJlZV9jYiBBUEksIGNhc2UgMSBkb2Vzbid0IGtu b3cgb3JpZ19tLCBob3cgeW91IG1ha2UgaXQgZnJlZSBvcmlnX20gaW4gZnJlZV9jYi4KPj4gPj4g Pj4gPj4gVGhlIGludGVudGlvbiBJIGNoYW5nZSBmcmVlX2NiIGlzIHRvIGxldCBpdCBrbm93IG9y aWdfbSwgSSBzYXcgT1ZTIERQREsgcmFuIG91dCBvdXQgYnVmZmVycyBhbmQgb3JpZ19tIGlzbid0 IGZyZWVkLCB0aGF0IGlzIHdoeQo+PiA+PiA+PiA+PiBJIHdhbnQgdG8gYnJpbmcgaW4gdGhpcyB0 byBmaXggdGhlIGlzc3VlLiBBZ2FpbiwgaW4gY2FzZSAxLCBub2JvZHkgZXhwbGljaXRseSBjYWxs cyByZXRfcGt0bWJ1Zl9mcmVlKG9yaWdfbSkgZXhjZXB0IGZyZWVfY2IgSSBjaGFuZ2VkLgo+PiA+ PiA+PiA+Cj4+ID4+ID4+ID5JZiBub2JvZHkgY2FsbHMgcmV0X3BrdG1idWZfZnJlZShvcmlnX20p LCBpdCBpcyBhIHByb2JsZW0uCj4+ID4+ID4+ID5UaGUgZnJlZV9jYiBpcyB0byBmcmVlIHRoZSBi dWZmZXIsIG5vdCB0aGUgbWJ1Zi4KPj4gPj4gPj4gPgo+PiA+PiA+PiA+VG8gbWUsIGl0IHNob3Vs ZCB3b3JrIGxpa2UgdGhpczoKPj4gPj4gPj4gPgo+PiA+PiA+PiA+MS0gdmlydGlvIGNyZWF0ZXMg YSBtYnVmIGF0dGFjaGVkIHRvIHRoZSBleHQgYnVmZmVyICh0aGUgc2hpbmZvIHBsYWNlbWVudAo+ PiA+PiA+PiA+ICAgYnVnIHNob3VsZCBiZSBmaXhlZCkKPj4gPj4gPj4gPjItIGdzbyBjcmVhdGUg bWJ1ZnMgdGhhdCByZWZlcmVuY2UgdGhlIHRoZSBzYW1lIGV4dCBidWYgKGJ5IGF0dGFjaGluZyB0 aGUKPj4gPj4gPj4gPiAgIG5ldyBtYnVmKQo+PiA+PiA+PiA+My0gZ3NvIG11c3QgZnJlZSB0aGUg b3JpZ2luYWwgbWJ1Zgo+PiA+PiA+PiAKPj4gPj4gPj4gVGhpcyBpcyBpbXBvc3NpYmxlLCBzZWdt ZW50ZWQgbWJ1ZnMgYXJlIHJlZmVyZW5jaW5nIGV4dGVybmFsIGJ1ZmZlciBpbiBvcmlnaW5hbCBt YnVmLAo+PiA+PiA+PiBob3cgZG8geW91IGZyZWUgaXQ/IEFzIEkgc2FpZCBydGVfZ3NvX3NlZ21l bnQgaGFzIG5vIHdheSB0byBmcmVlIGl0LCBwbGVhc2UgdGVsbCBtZSBhIHdheSBpZgo+PiA+PiA+ PiB5b3Uga25vdyBob3cgdG8gZG8gdGhpcy4KPj4gPj4gPgo+PiA+PiA+QXMgSSBzYWlkIGFib3Zl LCBjYWxsaW5nIHJ0ZV9tYnVmX2ZyZWUob3JpZ19tKSB3aWxsIGRlY3JlbWVudCB0aGUgcmVmZXJl bmNlCj4+ID4+ID5jb3VudGVycyBvbiBhbGwgc2VnbWVudHMuIFRoZSBzZWdtZW50cyB3aWxsIGJl IHJldHVybmVkIHRvIHRoZSBwb29sIGlmIHRoZQo+PiA+PiA+cmVmY250IHJlYWNoZXMgMC4KPj4g Pj4gPgo+PiA+PiA+PiAKPj4gPj4gPj4gPjQtIHRoZSBQTUQgdHJhbnNtaXRzIHRoZSBuZXcgbWJ1 ZnMsIGFuZCBmcmVlcyB0aGVtCj4+ID4+ID4+ID4KPj4gPj4gPj4gPldoYXRldmVyIDMtIG9yIDQt IGlzIGV4ZWN1dGVkIGZpcnN0LCBhdCB0aGUgZW5kIHdlIGFyZSBzdXJlIHRoYXQ6Cj4+ID4+ID4+ ID4tIGFsbCBtYnVmcyB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBwb29sCj4+ID4+ID4+ID4tIHRo ZSBsaW5lYXIgYnVmZmVyIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgcmVmY250IHJlYWNoZXMgMC4K Pj4gPj4gPj4gPgo+PiA+PiA+PiA+SWYgdGhpcyBpcyBzdGlsbCB1bmNsZWFyLCBwbGVhc2UsIHdy aXRlIGEgdW5pdCB0ZXN0IGxpa2UgSSBkaWQKPj4gPj4gPj4gPmFib3ZlIHRvIHNob3cgeW91ciBp c3N1ZS4KPj4gPj4gPj4gPgo+PiA+PiA+PiA+UmVnYXJkcywKPj4gPj4gPj4gPk9saXZpZXIKPj4g Pj4gPj4gPgo+PiA+PiA+PiAKPj4gPj4gPj4gVGhlIGlzc3VlIGlzIGluICIzLSBnc28gbXVzdCBm cmVlIHRoZSBvcmlnaW5hbCBtYnVmIiwgcnRlX3BrdG1idWZfZnJlZShzZWdtZW50ZWRfbWJ1cykg Y2FuJ3QgZG8gaXQsCj4+ID4+ID4+IHJ0ZV9nc29fc2VnbWVudCBpcyBpbXBvc3NpYmxlIHRvIGRv IGl0LCBvbmx5IGZlYXNpYmxlIHBvaW50IGlzIGZyZWVfY2IsIHBsZWFzZSBsZXQgbWUga25vdyBp ZiB5b3UgaGF2ZQo+PiA+PiA+PiBhIGJldHRlciB3YXkgdG8gZnJlZSBvcmlnaW5hbCBtYnVmIGFu ZCBkb24ndCBpbXBhY3Qgb24gc2VnbWVudGVkIG1idWZzIGluIFBNRC4gTXkgcG9pbnQgaXMgeW91 IG11c3QKPj4gPj4gPj4gaGF2ZSBhIHBsYWNlIHRvIGNhbGwgcnRlX3BrdG1idWZfZnJlZShyb2dp bl9tKSBleHBsaWNpdGx5LCBvdGhlcndpc2UgaXQgaXMgaW1wb3NzaWJsZSAgdG8gcmV0dXJuIGl0 IHRvIG1lbW9yeQo+PiA+PiA+PiBwb29sLCBwbGVhc2UgcG9pbnQgb3V0ICB3aGVyZSBpdCBjYW4g YmUgY2FsbGVkIGluIG15IHVzZXIgc2NlbmFyaW8uIEkgZG9uJ3QgY2FyZSBob3cgaXQgaXMgZG9u ZSwgSSBqdXN0IGNhcmUgaXQgY2FuCj4+ID4+ID4+IGZpeCBteSBpc3N1ZSwgcGxlYXNlIGRvbid0 IGhlc2l0YXRlIGFuZCBzZW5kIG1lIGEgcGF0Y2ggaWYgeW91IGNhbiwgdGhhbmtzIGEgbG90Lgo+ PiA+PiA+Cj4+ID4+ID5Tb3JyeSwgYnV0IEkgZG9uJ3Qgc2VlIGhvdyBJIGNhbiBiZSBjbGVhcmVy IHRvIHdoYXQgSSBleHBsYWluZWQKPj4gPj4gPmluIG15IHByZXZpb3VzIGFuc3dlci4KPj4gPj4g Pgo+PiA+PiA+UGxlYXNlLCAqcHJvdmlkZSBhIHNpbXBsZSB0ZXN0IGV4YW1wbGUqIHdpdGhvdXQg Z3NvL3Zob3N0LCBhbmQgSSBjYW4gaGVscAo+PiA+PiA+dG8gbWFrZSBpdCB3b3JrLgo+PiA+PiA+ Cj4+ID4+ID4KPj4gPj4gPlJlZ2FyZHMsCj4+ID4+ID5PbGl2aWVyCj4+ID4+ID4KPj4gPj4gPgo+ PiA+PiA+PiA+Cj4+ID4+ID4+ID4KPj4gPj4gPj4gPj4gZnJlZV9jYiBtdXN0IGhhbmRsZSBjYXNl IDEgYW5kIGNhc2UgMiBpbiB0aGUgc2FtZSBjb2RlLCBmb3IgY2FzZSAxLCBjYWxsZXJfbSBpcyBz ZWdtZW50ZWQgbmV3X20sIGZvciBjYXNlIDIsIGNhbGxlcl9tIGlzIG9yaWdfbS4KPj4gPj4gPj4g Pj4gCj4+ID4+ID4+ID4+IGxvb3AgaW4gcnRlX2dzb19zZWdlbWVudCBpcyBoYW5kbGluZyBvcmln aW5hbCBtYnVmICh0aGlzIG1idWYgaXMgbXVsdGktbWJ1ZiBhbmQgaW5jbHVkZXMgbXVsdGlwbGUg bWJ1ZnMgd2hpY2ggYXJlIGxpbmtlZCBieSBuZXh0Cj4+ID4+ID4+ID4+IHBvaW50ZXIpLCBpdCBp c24ndCBhIHByb2JsZW0gYXQgYWxsLgo+PiA+PiA+PiA+PiAKPj4gPj4gPj4gPj4gUGxlYXNlIHNo b3cgbWUgY29kZSBob3cgeW91IGNhbiBmaXggbXkgaXNzdWUgaWYgeW91IGRvbid0IGNoYW5nZSBm cmVlX2NiLCB0aGFuayB5b3UuCj4+ID4+ID4+ID4+IAo+PiA+PiA+PiA+PiBzdHJ1Y3Qgc2hpbmZv X2FyZyB7Cj4+ID4+ID4+ID4+ICAgICAgICB2b2lkICpidWY7Cj4+ID4+ID4+ID4+ICAgICAgICBz dHJ1Y3QgcnRlX21idWYgKm1idWY7Cj4+ID4+ID4+ID4+IH07Cj4+ID4+ID4+ID4+IAo+PiA+PiA+ PiA+PiB2aXJ0aW9fZGV2X2V4dGJ1Zl9mcmVlKHN0cnVjdCBydGVfbWJ1ZiAqY2FsbGVyX20sIHZv aWQgKm9wYXF1ZSkKPj4gPj4gPj4gPj4gewo+PiA+PiA+PiA+PiAgICAgICAgc3RydWN0IHNoaW5m b19hcmcgKmFyZyA9IChzdHJ1Y3Qgc2hpbmZvX2FyZyAqKW9wYXF1ZTsKPj4gPj4gPj4gPj4gCj4+ ID4+ID4+ID4+ICAgICAgICBydGVfZnJlZShhcmctPmJ1Zik7Cj4+ID4+ID4+ID4+ICAgICAgICBp ZiAoY2FsbGVyX20gIT0gYXJnLT5tYnVmKQo+PiA+PiA+PiA+PiAgICAgICAgICAgICAgICBydGVf cGt0bWJ1Zl9mcmVlKGFyZy0+bWJ1Zik7Cj4+ID4+ID4+ID4+ICAgICAgICBydGVfZnJlZShhcmcp Owo+PiA+PiA+PiA+PiB9Cg==