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 B2FCCA04B5; Thu, 10 Sep 2020 11:31:58 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 812511C0D1; Thu, 10 Sep 2020 11:31:58 +0200 (CEST) Received: from m13134.mail.163.com (m13134.mail.163.com [220.181.13.134]) by dpdk.org (Postfix) with ESMTP id A7A111DB8 for ; Thu, 10 Sep 2020 11:31:54 +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=af0Ed AG97edutyqJuE6QWwJcoRA7ZrNQVvgr+q9SyRI=; b=jM5FD6ghl1+Ky2X5A6sWW JEjNoTpRNu+NPMcmOkInPGAPPDuNyPiJP9ChcL00UbuQ5sQ3jJddUOA/ucYg6niT YHtrYOtf7qRw5GK9U2LI3PR1eNMYgH8Xz26xqdVHVBgdVzfAi74kuySoo/1dHnlB N+zEmVHv81lRYyYqn6G17w= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr134 (Coremail) ; Thu, 10 Sep 2020 17:31:52 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Thu, 10 Sep 2020 17:31:52 +0800 (CST) From: yang_y_yi To: "Hu, Jiayu" Cc: "thomas@monjalon.net" , "dev@dpdk.org" , "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: <9dfa31fd84d847ccbd459e1b54eb32a5@intel.com> References: <20200904083740.71272-1-yang_y_yi@163.com> <20200904083740.71272-2-yang_y_yi@163.com> <20200908020516.GA68491@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> <3d73e64d.45c4.17471c10896.Coremail.yang_y_yi@163.com> <42e99430.5aa5.17472180a8e.Coremail.yang_y_yi@163.com> <9dfa31fd84d847ccbd459e1b54eb32a5@intel.com> X-CM-CTRLDATA: cAZNUWZvb3Rlcl9odG09MTM3MzM1OjU2 MIME-Version: 1.0 Message-ID: <3c7ccaac.5fda.174775b63e4.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: hsGowACXn2OI8llf4t92AA--.53582W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiEBGbi18YDDD2nwABsC 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 v4 1/2] gro: add UDP GRO support 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" VGhhbmtzIEppYXl1LCBJIGhhdmUgc2VudCBvdXQgdjUuCgoKQXQgMjAyMC0wOS0xMCAxMDo0Nzo0 MywgIkh1LCBKaWF5dSIgPGppYXl1Lmh1QGludGVsLmNvbT4gd3JvdGU6CgpObyBtb3JlIGNvbW1l bnRzIG9uIHRoaXMgcGF0Y2guCgogCgpUaGFua3MsCgpKaWF5dQoKIAoKRnJvbTogeWFuZ195X3lp IDx5YW5nX3lfeWlAMTYzLmNvbT4KU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgOSwgMjAyMCA1 OjAwIFBNClRvOiBIdSwgSmlheXUgPGppYXl1Lmh1QGludGVsLmNvbT4KQ2M6IHRob21hc0Btb25q YWxvbi5uZXQ7IGRldkBkcGRrLm9yZzsgeWFuZ3lpMDFAaW5zcHVyLmNvbQpTdWJqZWN0OiBSZTpS ZTogW2RwZGstZGV2XSBbUEFUQ0ggdjQgMS8yXSBncm86IGFkZCBVRFAgR1JPIHN1cHBvcnQKSW1w b3J0YW5jZTogSGlnaAoKIAoKVGhpcyBpcyBpbmNyZW1lbnRhbCBwYXRjaCB0byBmaXggeW91ciBu ZXcgY29tbWVudHMsIEknbGwgc2VuZCBvdXQgdjUgaWYgbm8gbW9yZSBjb21tZW50cyBoZXJlLgoK IAoKZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmMgYi9saWIvbGlicnRlX2dy by9ncm9fdWRwNC5jCgppbmRleCAyNTU4NGZkLi4wNjFlN2IwIDEwMDY0NAotLS0gYS9saWIvbGli cnRlX2dyby9ncm9fdWRwNC5jCisrKyBiL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmMKQEAgLTEw Nyw3ICsxMDcsNyBAQAogICAgICAgIHVpbnQzMl90IGl0ZW1faWR4OwoKICAgICAgICBpdGVtX2lk eCA9IGZpbmRfYW5fZW1wdHlfaXRlbSh0YmwpOwotICAgICAgIGlmIChpdGVtX2lkeCA9PSBJTlZB TElEX0FSUkFZX0lOREVYKQorICAgICAgIGlmICh1bmxpa2VseShpdGVtX2lkeCA9PSBJTlZBTElE X0FSUkFZX0lOREVYKSkKICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0FSUkFZX0lOREVY OwoKICAgICAgICB0YmwtPml0ZW1zW2l0ZW1faWR4XS5maXJzdHNlZyA9IHBrdDsKQEAgLTE2Myw3 ICsxNjMsNiBAQAogICAgICAgIGRzdC0+aXBfc3JjX2FkZHIgPSBzcmMtPmlwX3NyY19hZGRyOwog ICAgICAgIGRzdC0+aXBfZHN0X2FkZHIgPSBzcmMtPmlwX2RzdF9hZGRyOwogICAgICAgIGRzdC0+ aXBfaWQgPSBzcmMtPmlwX2lkOwotICAgICAgIGRzdC0+aXBfaWQgPSBzcmMtPmlwX2lkOwoKICAg ICAgICB0YmwtPmZsb3dzW2Zsb3dfaWR4XS5zdGFydF9pbmRleCA9IGl0ZW1faWR4OwogICAgICAg IHRibC0+Zmxvd19udW0rKzsKQEAgLTIyNiwxMCArMjI1LDE0IEBACiAgICAgICAgICogRG9uJ3Qg cHJvY2VzcyB0aGUgcGFja2V0IHdob3NlIHBheWxvYWQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvcgog ICAgICAgICAqIGVxdWFsIHRvIDAuCiAgICAgICAgICovCi0gICAgICAgaWYgKHBrdC0+cGt0X2xl biAtIGhkcl9sZW4gPD0gMCkKKyAgICAgICBpZiAocGt0LT5wa3RfbGVuIDw9IGhkcl9sZW4pCisg ICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICBpcF9kbCA9IHJ0ZV9iZV90b19jcHVf MTYoaXB2NF9oZHItPnRvdGFsX2xlbmd0aCk7CisgICAgICAgaWYgKGlwX2RsIDw9IHBrdC0+bDNf bGVuKQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwoKLSAgICAgICBpcF9kbCA9IHJ0ZV9iZV90 b19jcHVfMTYoaXB2NF9oZHItPnRvdGFsX2xlbmd0aCkgLSBwa3QtPmwzX2xlbjsKKyAgICAgICBp cF9kbCAtPSBwa3QtPmwzX2xlbjsKICAgICAgICBpcF9pZCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2 NF9oZHItPnBhY2tldF9pZCk7CiAgICAgICAgZnJhZ19vZmZzZXQgPSBydGVfYmVfdG9fY3B1XzE2 KGlwdjRfaGRyLT5mcmFnbWVudF9vZmZzZXQpOwogICAgICAgIGlzX2xhc3RfZnJhZyA9ICgoZnJh Z19vZmZzZXQgJiBSVEVfSVBWNF9IRFJfTUZfRkxBRykgPT0gMCkgPyAxIDogMDsKQEAgLTI2Myw3 ICsyNjYsNyBAQAogICAgICAgICAgICAgICAgaXRlbV9pZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJs LCBwa3QsIHN0YXJ0X3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJ RF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaXNfbGFzdF9mcmFnKTsKLSAgICAgICAgICAgICAgIGlmIChpdGVtX2lkeCA9PSBJTlZBTElE X0FSUkFZX0lOREVYKQorICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGl0ZW1faWR4ID09IElO VkFMSURfQVJSQVlfSU5ERVgpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAg ICAgICAgICAgICAgICBpZiAoaW5zZXJ0X25ld19mbG93KHRibCwgJmtleSwgaXRlbV9pZHgpID09 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCkgewpA QCAtMjg0LDcgKzI4Nyw3IEBACiAgICAgICAgY3VyX2lkeCA9IHRibC0+Zmxvd3NbaV0uc3RhcnRf aW5kZXg7CiAgICAgICAgcHJldl9pZHggPSBjdXJfaWR4OwogICAgICAgIGRvIHsKLSAgICAgICAg ICAgICAgIGNtcCA9IHVkcF9jaGVja19uZWlnaGJvcigmKHRibC0+aXRlbXNbY3VyX2lkeF0pLAor ICAgICAgICAgICAgICAgY21wID0gdWRwNF9jaGVja19uZWlnaGJvcigmKHRibC0+aXRlbXNbY3Vy X2lkeF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdfb2Zmc2V0LCBpcF9k bCwgMCk7CiAgICAgICAgICAgICAgICBpZiAoY21wKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IGlmIChtZXJnZV90d29fdWRwNF9wYWNrZXRzKCYodGJsLT5pdGVtc1tjdXJfaWR4XSksCkBAIC0z MTksNyArMzIyLDcgQEAKICAgICAgICAgICAgICAgIGl0ZW1faWR4ID0gaW5zZXJ0X25ld19pdGVt KHRibCwgcGt0LCBzdGFydF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElO VkFMSURfQVJSQVlfSU5ERVgsIGZyYWdfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlzX2xhc3RfZnJhZyk7Ci0gICAgICAgICAgICAgICBpZiAoaXRlbV9pZHggPT0gSU5W QUxJRF9BUlJBWV9JTkRFWCkKKyAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShpdGVtX2lkeCA9 PSBJTlZBTElEX0FSUkFZX0lOREVYKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x OwogICAgICAgICAgICAgICAgdGJsLT5pdGVtc1tpdGVtX2lkeF0ubmV4dF9wa3RfaWR4ID0gY3Vy X2lkeDsKICAgICAgICAgICAgICAgIHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBpdGVtX2lk eDsKQEAgLTM0OCwxMiArMzUxLDExIEBACiAgICAgICAgaXRlbV9pZHggPSB0YmwtPml0ZW1zW3N0 YXJ0X2lkeF0ubmV4dF9wa3RfaWR4OwogICAgICAgIHdoaWxlIChpdGVtX2lkeCAhPSBJTlZBTElE X0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICAgICBwa3QgPSB0YmwtPml0ZW1zW2l0ZW1faWR4 XS5maXJzdHNlZzsKLSAgICAgICAgICAgICAgIGhkcl9sZW4gPSBwa3QtPm91dGVyX2wyX2xlbiAr IHBrdC0+b3V0ZXJfbDNfbGVuICsgcGt0LT5sMl9sZW4gKwotICAgICAgICAgICAgICAgICAgICAg ICBwa3QtPmwzX2xlbjsKKyAgICAgICAgICAgICAgIGhkcl9sZW4gPSBwa3QtPmwyX2xlbiArIHBr dC0+bDNfbGVuOwogICAgICAgICAgICAgICAgaXBfZGwgPSBwa3QtPnBrdF9sZW4gLSBoZHJfbGVu OwogICAgICAgICAgICAgICAgZnJhZ19vZmZzZXQgPSB0YmwtPml0ZW1zW2l0ZW1faWR4XS5mcmFn X29mZnNldDsKICAgICAgICAgICAgICAgIGlzX2xhc3RfZnJhZyA9IHRibC0+aXRlbXNbaXRlbV9p ZHhdLmlzX2xhc3RfZnJhZzsKLSAgICAgICAgICAgICAgIGNtcCA9IHVkcF9jaGVja19uZWlnaGJv cigmKHRibC0+aXRlbXNbc3RhcnRfaWR4XSksCisgICAgICAgICAgICAgICBjbXAgPSB1ZHA0X2No ZWNrX25laWdoYm9yKCYodGJsLT5pdGVtc1tzdGFydF9pZHhdKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZyYWdfb2Zmc2V0LCBpcF9kbCwgMCk7CiAgICAgICAgICAg ICAgICBpZiAoY21wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZV90d29fdWRw NF9wYWNrZXRzKApAQCAtMzY0LDEyICszNjYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZBTElEX0FSUkFZX0lOREVYKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmwtPml0ZW1zW3N0YXJ0X2lkeF0ubmV4dF9w a3RfaWR4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGl0ZW1faWR4 OwotICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg ICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0 ZV9ncm8vZ3JvX3VkcDQuaCBiL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmgKaW5kZXggYmM2N2Vi MS4uMGEwNzhlNCAxMDA2NDQKLS0tIGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaAorKysgYi9s aWIvbGlicnRlX2dyby9ncm9fdWRwNC5oCkBAIC0yNDYsNyArMjQ2LDcgQEAgdWludDE2X3QgZ3Jv X3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goc3RydWN0IGdyb191ZHA0X3RibCAqdGJsLAogICogQ2hl Y2sgaWYgdHdvIFVEUC9JUHY0IHBhY2tldHMgYXJlIG5laWdoYm9ycy4KICAqLwogc3RhdGljIGlu bGluZSBpbnQKLXVkcF9jaGVja19uZWlnaGJvcihzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSAqaXRlbSwK K3VkcDRfY2hlY2tfbmVpZ2hib3Ioc3RydWN0IGdyb191ZHA0X2l0ZW0gKml0ZW0sCiAgICAgICAg ICAgICAgICB1aW50MTZfdCBmcmFnX29mZnNldCwKICAgICAgICAgICAgICAgIHVpbnQxNl90IGlw X2RsLAogICAgICAgICAgICAgICAgdWludDE2X3QgbDJfb2Zmc2V0KQoKIAoKIAoKIAoKIAoKIAoK CkF0IDIwMjAtMDktMDkgMTU6MjU6MTAsICJ5YW5nX3lfeWkiIDx5YW5nX3lfeWlAMTYzLmNvbT4g d3JvdGU6Cj4gCj4gCj5BdCAyMDIwLTA5LTA4IDEwOjA1OjE2LCAiSmlheXUgSHUiIDxqaWF5dS5o dUBpbnRlbC5jb20+IHdyb3RlOgo+PlNvbWUgY29tbWVudHMgYXJlIGlubGluZS4KPiAKPlRoYW5r cywgcmVwbGllcyBpbmxpbmUuCj4gCj4+IAo+PlRoYW5rcywKPj5KaWF5dQo+PiAKPj5PbiBGcmks IFNlcCAwNCwgMjAyMCBhdCAwNDozNzozOVBNICswODAwLCB5YW5nX3lfeWlAMTYzLmNvbSB3cm90 ZToKPj4+IEZyb206IFlpIFlhbmcgPHlhbmd5aTAxQGluc3B1ci5jb20+Cj4+PiAKPj4+IFVEUCBH Uk8gY2FuIGhlbHAgaW1wcm92ZSBWTS10by1WTSBVRFAgcGVyZm9ybWFuY2Ugd2hlbgo+Pj4gVk0g aXMgZW5hYmxlZCBVRk8gb3IgR1NPLCBHUk8gbXVzdCBiZSBzdXBwb3J0ZWQgaWYgR1NPCj4+PiBv ciBVRk8gaXMgZW5hYmxlZCwgb3RoZXJ3aXNlLCBwZXJmb3JtYW5jZSBnYWluIHdpbGwgYmUKPj4+ IGh1cnQuCj4+PiAKPj4+IFdpdGggdGhpcyBlbmFibGVkIGluIERQREssIE9WUyBEUERLIGNhbiBs ZXZlcmFnZSBpdAo+Pj4gdG8gaW1wcm92ZSBWTS10by1WTSBVRFAgcGVyZm9ybWFuY2UsIHRoaXMg d2lsbCBtYWtlCj4+PiBzdXJlIElQIGZyYWdtZW50cyB3aWxsIGJlIHJlYXNzZW1ibGVkIG9uY2Ug aXQgaXMKPj4+IHJlY2VpdmVkIGZyb20gcGh5c2ljYWwgTklDLiBJdCBpcyB2ZXJ5IGhlbHBmdWwg aW4gT1ZTCj4+PiBEUERLIFZMQU4gVFNPIGNhc2UuCj4+PiAKPj4+IFNpZ25lZC1vZmYtYnk6IFlp IFlhbmcgPHlhbmd5aTAxQGluc3B1ci5jb20+Cj4+PiAtLS0KPj4+ICBsaWIvbGlicnRlX2dyby9N YWtlZmlsZSAgICB8ICAgMSArCj4+PiAgbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYyAgfCA0MzAg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+PiAgbGliL2xp YnJ0ZV9ncm8vZ3JvX3VkcDQuaCAgfCAyODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK Pj4+ICBsaWIvbGlicnRlX2dyby9tZXNvbi5idWlsZCB8ICAgMiArLQo+Pj4gIGxpYi9saWJydGVf Z3JvL3J0ZV9ncm8uYyAgIHwgIDkzICsrKysrKysrLS0KPj4+ICBsaWIvbGlicnRlX2dyby9ydGVf Z3JvLmggICB8ICAgNSArLQo+Pj4gIDYgZmlsZXMgY2hhbmdlZCwgNzk2IGluc2VydGlvbnMoKyks IDE2IGRlbGV0aW9ucygtKQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX2dyby9n cm9fdWRwNC5jCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfZ3JvL2dyb191ZHA0 LmgKPj4+IAo+Pj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL01ha2VmaWxlIGIvbGliL2xp YnJ0ZV9ncm8vTWFrZWZpbGUKPj4+IGluZGV4IGU4NDg2ODcuLjQxZWMyOWUgMTAwNjQ0Cj4+PiAt LS0gYS9saWIvbGlicnRlX2dyby9NYWtlZmlsZQo+Pj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vTWFr ZWZpbGUKPj4+IEBAIC0xNSw2ICsxNSw3IEBAIEVYUE9SVF9NQVAgOj0gcnRlX2dyb192ZXJzaW9u Lm1hcAo+Pj4gICMgc291cmNlIGZpbGVzCj4+PiAgU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX0dS TykgKz0gcnRlX2dyby5jCj4+PiAgU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX0dSTykgKz0gZ3Jv X3RjcDQuYwo+Pj4gK1NSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9HUk8pICs9IGdyb191ZHA0LmMK Pj4+ICBTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfR1JPKSArPSBncm9fdnhsYW5fdGNwNC5jCj4+ PiAgCj4+PiAgIyBpbnN0YWxsIHRoaXMgaGVhZGVyIGZpbGUKPj4+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX2dyby9ncm9fdWRwNC5jIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYwo+Pj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLjI1NTg0ZmQKPj4+IC0tLSAvZGV2 L251bGwKPj4+ICsrKyBiL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmMKPj4+IEBAIC0wLDAgKzEs NDMwIEBACj4+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQo+Pj4g KyAqIENvcHlyaWdodChjKSAyMDIwIEluc3B1ciBDb3Jwb3JhdGlvbgo+Pj4gKyAqLwo+Pj4gKwo+ Pj4gKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+Cj4+PiArI2luY2x1ZGUgPHJ0ZV9tYnVmLmg+Cj4+ PiArI2luY2x1ZGUgPHJ0ZV9jeWNsZXMuaD4KPj4+ICsjaW5jbHVkZSA8cnRlX2V0aGRldi5oPgo+ Pj4gKwo+Pj4gKyNpbmNsdWRlICJncm9fdWRwNC5oIgo+Pj4gKwo+Pj4gK3ZvaWQgKgo+Pj4gK2dy b191ZHA0X3RibF9jcmVhdGUodWludDE2X3Qgc29ja2V0X2lkLAo+Pj4gKyAgICAgICAgIHVpbnQx Nl90IG1heF9mbG93X251bSwKPj4+ICsgICAgICAgICB1aW50MTZfdCBtYXhfaXRlbV9wZXJfZmxv dykKPj4+ICt7Cj4+PiArICBzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0Ymw7Cj4+PiArICBzaXplX3Qg c2l6ZTsKPj4+ICsgIHVpbnQzMl90IGVudHJpZXNfbnVtLCBpOwo+Pj4gKwo+Pj4gKyAgZW50cmll c19udW0gPSBtYXhfZmxvd19udW0gKiBtYXhfaXRlbV9wZXJfZmxvdzsKPj4+ICsgIGVudHJpZXNf bnVtID0gUlRFX01JTihlbnRyaWVzX251bSwgR1JPX1VEUDRfVEJMX01BWF9JVEVNX05VTSk7Cj4+ PiArCj4+PiArICBpZiAoZW50cmllc19udW0gPT0gMCkKPj4+ICsgICAgICAgICByZXR1cm4gTlVM TDsKPj4+ICsKPj4+ICsgIHRibCA9IHJ0ZV96bWFsbG9jX3NvY2tldChfX2Z1bmNfXywKPj4+ICsg ICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZ3JvX3VkcDRfdGJsKSwKPj4+ICsgICAgICAg ICAgICAgICAgIFJURV9DQUNIRV9MSU5FX1NJWkUsCj4+PiArICAgICAgICAgICAgICAgICBzb2Nr ZXRfaWQpOwo+Pj4gKyAgaWYgKHRibCA9PSBOVUxMKQo+Pj4gKyAgICAgICAgIHJldHVybiBOVUxM Owo+Pj4gKwo+Pj4gKyAgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSkgKiBlbnRy aWVzX251bTsKPj4+ICsgIHRibC0+aXRlbXMgPSBydGVfem1hbGxvY19zb2NrZXQoX19mdW5jX18s Cj4+PiArICAgICAgICAgICAgICAgICBzaXplLAo+Pj4gKyAgICAgICAgICAgICAgICAgUlRFX0NB Q0hFX0xJTkVfU0laRSwKPj4+ICsgICAgICAgICAgICAgICAgIHNvY2tldF9pZCk7Cj4+PiArICBp ZiAodGJsLT5pdGVtcyA9PSBOVUxMKSB7Cj4+PiArICAgICAgICAgcnRlX2ZyZWUodGJsKTsKPj4+ ICsgICAgICAgICByZXR1cm4gTlVMTDsKPj4+ICsgIH0KPj4+ICsgIHRibC0+bWF4X2l0ZW1fbnVt ID0gZW50cmllc19udW07Cj4+PiArCj4+PiArICBzaXplID0gc2l6ZW9mKHN0cnVjdCBncm9fdWRw NF9mbG93KSAqIGVudHJpZXNfbnVtOwo+Pj4gKyAgdGJsLT5mbG93cyA9IHJ0ZV96bWFsbG9jX3Nv Y2tldChfX2Z1bmNfXywKPj4+ICsgICAgICAgICAgICAgICAgIHNpemUsCj4+PiArICAgICAgICAg ICAgICAgICBSVEVfQ0FDSEVfTElORV9TSVpFLAo+Pj4gKyAgICAgICAgICAgICAgICAgc29ja2V0 X2lkKTsKPj4+ICsgIGlmICh0YmwtPmZsb3dzID09IE5VTEwpIHsKPj4+ICsgICAgICAgICBydGVf ZnJlZSh0YmwtPml0ZW1zKTsKPj4+ICsgICAgICAgICBydGVfZnJlZSh0YmwpOwo+Pj4gKyAgICAg ICAgIHJldHVybiBOVUxMOwo+Pj4gKyAgfQo+Pj4gKyAgLyogSU5WQUxJRF9BUlJBWV9JTkRFWCBp bmRpY2F0ZXMgYW4gZW1wdHkgZmxvdyAqLwo+Pj4gKyAgZm9yIChpID0gMDsgaSA8IGVudHJpZXNf bnVtOyBpKyspCj4+PiArICAgICAgICAgdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleCA9IElOVkFM SURfQVJSQVlfSU5ERVg7Cj4+PiArICB0YmwtPm1heF9mbG93X251bSA9IGVudHJpZXNfbnVtOwo+ Pj4gKwo+Pj4gKyAgcmV0dXJuIHRibDsKPj4+ICt9Cj4+PiArCj4+PiArdm9pZAo+Pj4gK2dyb191 ZHA0X3RibF9kZXN0cm95KHZvaWQgKnRibCkKPj4+ICt7Cj4+PiArICBzdHJ1Y3QgZ3JvX3VkcDRf dGJsICp1ZHBfdGJsID0gdGJsOwo+Pj4gKwo+Pj4gKyAgaWYgKHVkcF90YmwpIHsKPj4+ICsgICAg ICAgICBydGVfZnJlZSh1ZHBfdGJsLT5pdGVtcyk7Cj4+PiArICAgICAgICAgcnRlX2ZyZWUodWRw X3RibC0+Zmxvd3MpOwo+Pj4gKyAgfQo+Pj4gKyAgcnRlX2ZyZWUodWRwX3RibCk7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKPj4+ICtmaW5kX2FuX2VtcHR5X2l0ZW0o c3RydWN0IGdyb191ZHA0X3RibCAqdGJsKQo+Pj4gK3sKPj4+ICsgIHVpbnQzMl90IGk7Cj4+PiAr ICB1aW50MzJfdCBtYXhfaXRlbV9udW0gPSB0YmwtPm1heF9pdGVtX251bTsKPj4+ICsKPj4+ICsg IGZvciAoaSA9IDA7IGkgPCBtYXhfaXRlbV9udW07IGkrKykKPj4+ICsgICAgICAgICBpZiAodGJs LT5pdGVtc1tpXS5maXJzdHNlZyA9PSBOVUxMKQo+Pj4gKyAgICAgICAgICAgICAgICAgcmV0dXJu IGk7Cj4+PiArICByZXR1cm4gSU5WQUxJRF9BUlJBWV9JTkRFWDsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGlubGluZSB1aW50MzJfdAo+Pj4gK2ZpbmRfYW5fZW1wdHlfZmxvdyhzdHJ1Y3QgZ3Jv X3VkcDRfdGJsICp0YmwpCj4+PiArewo+Pj4gKyAgdWludDMyX3QgaTsKPj4+ICsgIHVpbnQzMl90 IG1heF9mbG93X251bSA9IHRibC0+bWF4X2Zsb3dfbnVtOwo+Pj4gKwo+Pj4gKyAgZm9yIChpID0g MDsgaSA8IG1heF9mbG93X251bTsgaSsrKQo+Pj4gKyAgICAgICAgIGlmICh0YmwtPmZsb3dzW2ld LnN0YXJ0X2luZGV4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+PiArICAgICAgICAgICAgICAg ICByZXR1cm4gaTsKPj4+ICsgIHJldHVybiBJTlZBTElEX0FSUkFZX0lOREVYOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90Cj4+PiAraW5zZXJ0X25ld19pdGVtKHN0cnVj dCBncm9fdWRwNF90YmwgKnRibCwKPj4+ICsgICAgICAgICBzdHJ1Y3QgcnRlX21idWYgKnBrdCwK Pj4+ICsgICAgICAgICB1aW50NjRfdCBzdGFydF90aW1lLAo+Pj4gKyAgICAgICAgIHVpbnQzMl90 IHByZXZfaWR4LAo+Pj4gKyAgICAgICAgIHVpbnQxNl90IGZyYWdfb2Zmc2V0LAo+Pj4gKyAgICAg ICAgIHVpbnQ4X3QgaXNfbGFzdF9mcmFnKQo+Pj4gK3sKPj4+ICsgIHVpbnQzMl90IGl0ZW1faWR4 Owo+Pj4gKwo+Pj4gKyAgaXRlbV9pZHggPSBmaW5kX2FuX2VtcHR5X2l0ZW0odGJsKTsKPj4+ICsg IGlmIChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQo+Pj4gKyAgICAgICAgIHJldHVy biBJTlZBTElEX0FSUkFZX0lOREVYOwo+Pj4gKwo+Pj4gKyAgdGJsLT5pdGVtc1tpdGVtX2lkeF0u Zmlyc3RzZWcgPSBwa3Q7Cj4+PiArICB0YmwtPml0ZW1zW2l0ZW1faWR4XS5sYXN0c2VnID0gcnRl X3BrdG1idWZfbGFzdHNlZyhwa3QpOwo+Pj4gKyAgdGJsLT5pdGVtc1tpdGVtX2lkeF0uc3RhcnRf dGltZSA9IHN0YXJ0X3RpbWU7Cj4+PiArICB0YmwtPml0ZW1zW2l0ZW1faWR4XS5uZXh0X3BrdF9p ZHggPSBJTlZBTElEX0FSUkFZX0lOREVYOwo+Pj4gKyAgdGJsLT5pdGVtc1tpdGVtX2lkeF0uZnJh Z19vZmZzZXQgPSBmcmFnX29mZnNldDsKPj4+ICsgIHRibC0+aXRlbXNbaXRlbV9pZHhdLmlzX2xh c3RfZnJhZyA9IGlzX2xhc3RfZnJhZzsKPj4+ICsgIHRibC0+aXRlbXNbaXRlbV9pZHhdLm5iX21l cmdlZCA9IDE7Cj4+PiArICB0YmwtPml0ZW1fbnVtKys7Cj4+PiArCj4+PiArICAvKiBpZiB0aGUg cHJldmlvdXMgcGFja2V0IGV4aXN0cywgY2hhaW4gdGhlbSB0b2dldGhlci4gKi8KPj4+ICsgIGlm IChwcmV2X2lkeCAhPSBJTlZBTElEX0FSUkFZX0lOREVYKSB7Cj4+PiArICAgICAgICAgdGJsLT5p dGVtc1tpdGVtX2lkeF0ubmV4dF9wa3RfaWR4ID0KPj4+ICsgICAgICAgICAgICAgICAgdGJsLT5p dGVtc1twcmV2X2lkeF0ubmV4dF9wa3RfaWR4Owo+Pj4gKyAgICAgICAgIHRibC0+aXRlbXNbcHJl dl9pZHhdLm5leHRfcGt0X2lkeCA9IGl0ZW1faWR4Owo+Pj4gKyAgfQo+Pj4gKwo+Pj4gKyAgcmV0 dXJuIGl0ZW1faWR4Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90Cj4+ PiArZGVsZXRlX2l0ZW0oc3RydWN0IGdyb191ZHA0X3RibCAqdGJsLCB1aW50MzJfdCBpdGVtX2lk eCwKPj4+ICsgICAgICAgICB1aW50MzJfdCBwcmV2X2l0ZW1faWR4KQo+Pj4gK3sKPj4+ICsgIHVp bnQzMl90IG5leHRfaWR4ID0gdGJsLT5pdGVtc1tpdGVtX2lkeF0ubmV4dF9wa3RfaWR4Owo+Pj4g Kwo+Pj4gKyAgLyogTlVMTCBpbmRpY2F0ZXMgYW4gZW1wdHkgaXRlbSAqLwo+Pj4gKyAgdGJsLT5p dGVtc1tpdGVtX2lkeF0uZmlyc3RzZWcgPSBOVUxMOwo+Pj4gKyAgdGJsLT5pdGVtX251bS0tOwo+ Pj4gKyAgaWYgKHByZXZfaXRlbV9pZHggIT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4+ICsgICAg ICAgICB0YmwtPml0ZW1zW3ByZXZfaXRlbV9pZHhdLm5leHRfcGt0X2lkeCA9IG5leHRfaWR4Owo+ Pj4gKwo+Pj4gKyAgcmV0dXJuIG5leHRfaWR4Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5s aW5lIHVpbnQzMl90Cj4+PiAraW5zZXJ0X25ld19mbG93KHN0cnVjdCBncm9fdWRwNF90YmwgKnRi bCwKPj4+ICsgICAgICAgICBzdHJ1Y3QgdWRwNF9mbG93X2tleSAqc3JjLAo+Pj4gKyAgICAgICAg IHVpbnQzMl90IGl0ZW1faWR4KQo+Pj4gK3sKPj4+ICsgIHN0cnVjdCB1ZHA0X2Zsb3dfa2V5ICpk c3Q7Cj4+PiArICB1aW50MzJfdCBmbG93X2lkeDsKPj4+ICsKPj4+ICsgIGZsb3dfaWR4ID0gZmlu ZF9hbl9lbXB0eV9mbG93KHRibCk7Cj4+PiArICBpZiAodW5saWtlbHkoZmxvd19pZHggPT0gSU5W QUxJRF9BUlJBWV9JTkRFWCkpCj4+PiArICAgICAgICAgcmV0dXJuIElOVkFMSURfQVJSQVlfSU5E RVg7Cj4+PiArCj4+PiArICBkc3QgPSAmKHRibC0+Zmxvd3NbZmxvd19pZHhdLmtleSk7Cj4+PiAr Cj4+PiArICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5ldGhfc2FkZHIpLCAmKGRzdC0+ZXRo X3NhZGRyKSk7Cj4+PiArICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5ldGhfZGFkZHIpLCAm KGRzdC0+ZXRoX2RhZGRyKSk7Cj4+PiArICBkc3QtPmlwX3NyY19hZGRyID0gc3JjLT5pcF9zcmNf YWRkcjsKPj4+ICsgIGRzdC0+aXBfZHN0X2FkZHIgPSBzcmMtPmlwX2RzdF9hZGRyOwo+Pj4gKyAg ZHN0LT5pcF9pZCA9IHNyYy0+aXBfaWQ7Cj4+PiArICBkc3QtPmlwX2lkID0gc3JjLT5pcF9pZDsK Pj4gCj4+RHVwbGljYXRlZCBjb2RlLgo+IAo+VGhhbmtzLCBnb29kIGNhdGNoLCB3aWxsIHJlbW92 ZSBpdC4KPiAKPj4gCj4+PiArCj4+PiArICB0YmwtPmZsb3dzW2Zsb3dfaWR4XS5zdGFydF9pbmRl eCA9IGl0ZW1faWR4Owo+Pj4gKyAgdGJsLT5mbG93X251bSsrOwo+Pj4gKwo+Pj4gKyAgcmV0dXJu IGZsb3dfaWR4Owo+Pj4gK30KPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIHVwZGF0ZSB0aGUgcGFja2V0 IGxlbmd0aCBmb3IgdGhlIGZsdXNoZWQgcGFja2V0Lgo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBpbmxp bmUgdm9pZAo+Pj4gK3VwZGF0ZV9oZWFkZXIoc3RydWN0IGdyb191ZHA0X2l0ZW0gKml0ZW0pCj4+ PiArewo+Pj4gKyAgc3RydWN0IHJ0ZV9pcHY0X2hkciAqaXB2NF9oZHI7Cj4+PiArICBzdHJ1Y3Qg cnRlX21idWYgKnBrdCA9IGl0ZW0tPmZpcnN0c2VnOwo+Pj4gKyAgdWludDE2X3QgZnJhZ19vZmZz ZXQ7Cj4+PiArCj4+PiArICBpcHY0X2hkciA9IChzdHJ1Y3QgcnRlX2lwdjRfaGRyICopKHJ0ZV9w a3RtYnVmX210b2QocGt0LCBjaGFyICopICsKPj4+ICsgICAgICAgICAgICAgICAgIHBrdC0+bDJf bGVuKTsKPj4+ICsgIGlwdjRfaGRyLT50b3RhbF9sZW5ndGggPSBydGVfY3B1X3RvX2JlXzE2KHBr dC0+cGt0X2xlbiAtCj4+PiArICAgICAgICAgICAgICAgICBwa3QtPmwyX2xlbik7Cj4+PiArCj4+ PiArICAvKiBDbGVhciBNRiBiaXQgaWYgaXQgaXMgbGFzdCBmcmFnbWVudCAqLwo+Pj4gKyAgaWYg KGl0ZW0tPmlzX2xhc3RfZnJhZykgewo+Pj4gKyAgICAgICAgIGZyYWdfb2Zmc2V0ID0gcnRlX2Jl X3RvX2NwdV8xNihpcHY0X2hkci0+ZnJhZ21lbnRfb2Zmc2V0KTsKPj4+ICsgICAgICAgICBpcHY0 X2hkci0+ZnJhZ21lbnRfb2Zmc2V0ID0KPj4+ICsgICAgICAgICAgICAgICAgIHJ0ZV9jcHVfdG9f YmVfMTYoZnJhZ19vZmZzZXQgJiB+UlRFX0lQVjRfSERSX01GX0ZMQUcpOwo+Pj4gKyAgfQo+Pj4g K30KPj4+ICsKPj4+ICtpbnQzMl90Cj4+PiArZ3JvX3VkcDRfcmVhc3NlbWJsZShzdHJ1Y3QgcnRl X21idWYgKnBrdCwKPj4+ICsgICAgICAgICBzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0YmwsCj4+PiAr ICAgICAgICAgdWludDY0X3Qgc3RhcnRfdGltZSkKPj4+ICt7Cj4+PiArICBzdHJ1Y3QgcnRlX2V0 aGVyX2hkciAqZXRoX2hkcjsKPj4+ICsgIHN0cnVjdCBydGVfaXB2NF9oZHIgKmlwdjRfaGRyOwo+ Pj4gKyAgdWludDE2X3QgaXBfZGw7Cj4+PiArICB1aW50MTZfdCBpcF9pZCwgaGRyX2xlbjsKPj4+ ICsgIHVpbnQxNl90IGZyYWdfb2Zmc2V0ID0gMDsKPj4+ICsgIHVpbnQ4X3QgaXNfbGFzdF9mcmFn Owo+Pj4gKwo+Pj4gKyAgc3RydWN0IHVkcDRfZmxvd19rZXkga2V5Owo+Pj4gKyAgdWludDMyX3Qg Y3VyX2lkeCwgcHJldl9pZHgsIGl0ZW1faWR4Owo+Pj4gKyAgdWludDMyX3QgaSwgbWF4X2Zsb3df bnVtLCByZW1haW5pbmdfZmxvd19udW07Cj4+PiArICBpbnQgY21wOwo+Pj4gKyAgdWludDhfdCBm aW5kOwo+Pj4gKwo+Pj4gKyAgZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3Qg cnRlX2V0aGVyX2hkciAqKTsKPj4+ICsgIGlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9oZHIg KikoKGNoYXIgKilldGhfaGRyICsgcGt0LT5sMl9sZW4pOwo+Pj4gKyAgaGRyX2xlbiA9IHBrdC0+ bDJfbGVuICsgcGt0LT5sM19sZW47Cj4+PiArCj4+PiArICAvKgo+Pj4gKyAgICogRG9uJ3QgcHJv Y2VzcyBub24tZnJhZ21lbnQgcGFja2V0Lgo+Pj4gKyAgICovCj4+PiArICBpZiAoIWlzX2lwdjRf ZnJhZ21lbnQoaXB2NF9oZHIpKQo+Pj4gKyAgICAgICAgIHJldHVybiAtMTsKPj4+ICsKPj4+ICsg IC8qCj4+PiArICAgKiBEb24ndCBwcm9jZXNzIHRoZSBwYWNrZXQgd2hvc2UgcGF5bG9hZCBsZW5n dGggaXMgbGVzcyB0aGFuIG9yCj4+PiArICAgKiBlcXVhbCB0byAwLgo+Pj4gKyAgICovCj4+PiAr ICBpZiAocGt0LT5wa3RfbGVuIC0gaGRyX2xlbiA8PSAwKQo+Pj4gKyAgICAgICAgIHJldHVybiAt MTsKPj4gCj4+SWYgaW5wdXQgcGFja2V0cyBhcmUgbWFsaWNpb3VzLCB3aG9zZSBtYnVmLT5wa3Rf bGVuIGlzIHNtYWxsZXIgdGhhbgo+PihtYnVmLT5sMl9sZW4rbWJ1Zi0+bDNfbGVuKSwgdGhlIGFi b3ZlIGNoZWNrIHdvdG4ndCB3b3JrIGNvcnJlY3RseSwKPj5hcyBpdHMgdmFsdWUgaXMgdWludDE2 X3QsIHdoaWNoIGlzIGFsd2F5cyBwb3NpdGl2ZS4KPiAKPkkgdHJpZWQgdGhlIGJlbG93IGNvZGUu Cj4gCj4kIGNhdCBhLmMKPiNpbmNsdWRlIAo+I2luY2x1ZGUgCj4gCj5pbnQgbWFpbigpCj57Cj4g ICAgdWludDE2X3QgYSA9IDEwOwo+ICAgIHVpbnQxNl90IGIgPSA4Owo+IAo+ICAgIGlmICgoYiAt IGEpIDwgMCkgewo+ICAgICAgICBwcmludGYoIiV1IDwgJXVcbiIsIGIgLCBhKTsKPiAgICB9Cj59 Cj4kIGdjYyBhLmMKPiQgLi9hLm91dAo+OCA8IDEwCj4kCj4gCj5JdCB3b3Jrcywgc28gSSB0aGlu ayBpdCBpcyBvaywgbmVydmVydGhlbGVzcywgSSdsbCBjaGFuZ2UgaXQgdG8gdGhlIGJlbG93IHRv IGF2b2lkIHlvdXIgY29uY2Vybi4KPiAKPmlmIChwa3QtPnBrdF9sZW4gPD0gaGRyX2xlbikKPiAK Pj4gCj4+PiArCj4+PiArICBpcF9kbCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPnRvdGFs X2xlbmd0aCkgLSBwa3QtPmwzX2xlbjsKPj4gCj4+U2FtZSBhcyBhYm92ZS4KPiAKPkkgdGhpbmsg ImlmIChwa3QtPnBrdF9sZW4gPD0gaGRyX2xlbikiIGNhbiBlbnN1cmUgaXBfZGwgd2lsbCBiZSBw b3NpdGl2ZSwgSSBjYW4gYWRkIG9uZSBtb3JlCj5jb25kaXRpb24gY2hlY2sgaGVyZSBpZiB5b3Ug d2FudAo+IAo+aWYgKHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPnRvdGFsX2xlbmd0aCkgPD0g bDNfbGVuKQo+ICAgICAgICByZXR1cm4gLTE7Cj4gCj5CdXQgSSB0aGluayBpdCBpcyB1bm5lY2Vz c2FyeSBoZXJlIGZvciBhIGxpdHRsZSBiaXQgcGVyZm9ybWFuY2UgYXMgeW91J3JlIGNhcmluZy4K PiAKPj4gCj4+PiArICBpcF9pZCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPnBhY2tldF9p ZCk7Cj4+PiArICBmcmFnX29mZnNldCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPmZyYWdt ZW50X29mZnNldCk7Cj4+PiArICBpc19sYXN0X2ZyYWcgPSAoKGZyYWdfb2Zmc2V0ICYgUlRFX0lQ VjRfSERSX01GX0ZMQUcpID09IDApID8gMSA6IDA7Cj4+PiArICBmcmFnX29mZnNldCA9ICh1aW50 MTZfdCkoZnJhZ19vZmZzZXQgJiBSVEVfSVBWNF9IRFJfT0ZGU0VUX01BU0spIDw8IDM7Cj4+PiAr Cj4+PiArICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoZXRoX2hkci0+c19hZGRyKSwgJihrZXkuZXRo X3NhZGRyKSk7Cj4+PiArICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoZXRoX2hkci0+ZF9hZGRyKSwg JihrZXkuZXRoX2RhZGRyKSk7Cj4+PiArICBrZXkuaXBfc3JjX2FkZHIgPSBpcHY0X2hkci0+c3Jj X2FkZHI7Cj4+PiArICBrZXkuaXBfZHN0X2FkZHIgPSBpcHY0X2hkci0+ZHN0X2FkZHI7Cj4+PiAr ICBrZXkuaXBfaWQgPSBpcF9pZDsKPj4+ICsKPj4+ICsgIC8qIFNlYXJjaCBmb3IgYSBtYXRjaGVk IGZsb3cuICovCj4+PiArICBtYXhfZmxvd19udW0gPSB0YmwtPm1heF9mbG93X251bTsKPj4+ICsg IHJlbWFpbmluZ19mbG93X251bSA9IHRibC0+Zmxvd19udW07Cj4+PiArICBmaW5kID0gMDsKPj4+ ICsgIGZvciAoaSA9IDA7IGkgPCBtYXhfZmxvd19udW0gJiYgcmVtYWluaW5nX2Zsb3dfbnVtOyBp KyspIHsKPj4+ICsgICAgICAgICBpZiAodGJsLT5mbG93c1tpXS5zdGFydF9pbmRleCAhPSBJTlZB TElEX0FSUkFZX0lOREVYKSB7Cj4+PiArICAgICAgICAgICAgICAgICBpZiAoaXNfc2FtZV91ZHA0 X2Zsb3codGJsLT5mbG93c1tpXS5rZXksIGtleSkpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgZmluZCA9IDE7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4g KyAgICAgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICAgICAgcmVtYWluaW5nX2Zsb3df bnVtLS07Cj4+PiArICAgICAgICAgfQo+Pj4gKyAgfQo+Pj4gKwo+Pj4gKyAgLyoKPj4+ICsgICAq IEZhaWwgdG8gZmluZCBhIG1hdGNoZWQgZmxvdy4gSW5zZXJ0IGEgbmV3IGZsb3cgYW5kIHN0b3Jl IHRoZQo+Pj4gKyAgICogcGFja2V0IGludG8gdGhlIGZsb3cuCj4+PiArICAgKi8KPj4+ICsgIGlm IChmaW5kID09IDApIHsKPj4+ICsgICAgICAgICBpdGVtX2lkeCA9IGluc2VydF9uZXdfaXRlbSh0 YmwsIHBrdCwgc3RhcnRfdGltZSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJ RF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg IGlzX2xhc3RfZnJhZyk7Cj4+PiArICAgICAgICAgaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJS QVlfSU5ERVgpCj4+PiArICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4+IAo+PkFkZGluZyB1 bmxpa2VseSBoZXJlIGNvdWxkIGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UsIElNTy4KPiAKPk5vIHBy b2JsZW0uCj4gCj4+IAo+Pj4gKyAgICAgICAgIGlmIChpbnNlcnRfbmV3X2Zsb3codGJsLCAma2V5 LCBpdGVtX2lkeCkgPT0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJB WV9JTkRFWCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgLyoKPj4+ICsgICAgICAgICAgICAgICAg ICAqIEZhaWwgdG8gaW5zZXJ0IGEgbmV3IGZsb3csIHNvIGRlbGV0ZSB0aGUKPj4+ICsgICAgICAg ICAgICAgICAgICAqIHN0b3JlZCBwYWNrZXQuCj4+PiArICAgICAgICAgICAgICAgICAgKi8KPj4+ ICsgICAgICAgICAgICAgICAgIGRlbGV0ZV9pdGVtKHRibCwgaXRlbV9pZHgsIElOVkFMSURfQVJS QVlfSU5ERVgpOwo+Pj4gKyAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+Pj4gKyAgICAgICAg IH0KPj4+ICsgICAgICAgICByZXR1cm4gMDsKPj4+ICsgIH0KPj4+ICsKPj4+ICsgIC8qCj4+PiAr ICAgKiBDaGVjayBhbGwgcGFja2V0cyBpbiB0aGUgZmxvdyBhbmQgdHJ5IHRvIGZpbmQgYSBuZWln aGJvciBmb3IKPj4+ICsgICAqIHRoZSBpbnB1dCBwYWNrZXQuCj4+PiArICAgKi8KPj4+ICsgIGN1 cl9pZHggPSB0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4Owo+Pj4gKyAgcHJldl9pZHggPSBjdXJf aWR4Owo+Pj4gKyAgZG8gewo+Pj4gKyAgICAgICAgIGNtcCA9IHVkcF9jaGVja19uZWlnaGJvcigm KHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBmcmFn X29mZnNldCwgaXBfZGwsIDApOwo+Pj4gKyAgICAgICAgIGlmIChjbXApIHsKPj4+ICsgICAgICAg ICAgICAgICAgIGlmIChtZXJnZV90d29fdWRwNF9wYWNrZXRzKCYodGJsLT5pdGVtc1tjdXJfaWR4 XSksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdCwgY21w LCBmcmFnX29mZnNldCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpc19sYXN0X2ZyYWcsIDApKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g MTsKPj4+ICsgICAgICAgICAgICAgICAgIC8qCj4+PiArICAgICAgICAgICAgICAgICAgKiBGYWls IHRvIG1lcmdlIHRoZSB0d28gcGFja2V0cywgYXMgdGhlIHBhY2tldAo+Pj4gKyAgICAgICAgICAg ICAgICAgICogbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IHZhbHVlLiBTdG9yZQo+Pj4g KyAgICAgICAgICAgICAgICAgICogdGhlIHBhY2tldCBpbnRvIHRoZSBmbG93Lgo+Pj4gKyAgICAg ICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0X25ld19pdGVt KHRibCwgcGt0LCBzdGFydF90aW1lLCBwcmV2X2lkeCwKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmcmFnX29mZnNldCwgaXNfbGFzdF9mcmFnKSA9PQo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+Pj4gKyAgICAgICAgICAgICAgICAg cmV0dXJuIDA7Cj4+PiArICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgIC8qIEVuc3VyZSBp bnNlcnRlZCBpdGVtcyBhcmUgb3JkZXJlZCBieSBmcmFnX29mZnNldCAqLwo+Pj4gKyAgICAgICAg IGlmIChmcmFnX29mZnNldAo+Pj4gKyAgICAgICAgICAgICAgICAgPCB0YmwtPml0ZW1zW2N1cl9p ZHhdLmZyYWdfb2Zmc2V0KSB7Cj4+PiArICAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAg ICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgcHJldl9pZHggPSBjdXJfaWR4Owo+Pj4gKyAgICAg ICAgIGN1cl9pZHggPSB0YmwtPml0ZW1zW2N1cl9pZHhdLm5leHRfcGt0X2lkeDsKPj4+ICsgIH0g d2hpbGUgKGN1cl9pZHggIT0gSU5WQUxJRF9BUlJBWV9JTkRFWCk7Cj4+PiArCj4+PiArICAvKiBG YWlsIHRvIGZpbmQgYSBuZWlnaGJvciwgc28gc3RvcmUgdGhlIHBhY2tldCBpbnRvIHRoZSBmbG93 LiAqLwo+Pj4gKyAgaWYgKGN1cl9pZHggPT0gdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleCkgewo+ Pj4gKyAgICAgICAgIC8qIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0IHBhY2tldCBvZiB0aGUg ZmxvdyAqLwo+Pj4gKyAgICAgICAgIGl0ZW1faWR4ID0gaW5zZXJ0X25ld19pdGVtKHRibCwgcGt0 LCBzdGFydF90aW1lLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBJTlZBTElEX0FSUkFZ X0lOREVYLCBmcmFnX29mZnNldCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbGFz dF9mcmFnKTsKPj4+ICsgICAgICAgICBpZiAoaXRlbV9pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRF WCkKPj4+ICsgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKPj4+ICsgICAgICAgICB0YmwtPml0 ZW1zW2l0ZW1faWR4XS5uZXh0X3BrdF9pZHggPSBjdXJfaWR4Owo+Pj4gKyAgICAgICAgIHRibC0+ Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBpdGVtX2lkeDsKPj4+ICsgIH0gZWxzZSB7Cj4+PiArICAg ICAgICAgaWYgKGluc2VydF9uZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwgcHJldl9pZHgs Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdfb2Zmc2V0LCBpc19sYXN0X2ZyYWcp Cj4+PiArICAgICAgICAgICAgICAgICA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQo+Pj4gKyAgICAg ICAgICAgICAgICAgcmV0dXJuIC0xOwo+Pj4gKyAgfQo+Pj4gKwo+Pj4gKyAgcmV0dXJuIDA7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQKPj4+ICtncm9fdWRwNF9tZXJnZV9pdGVtcyhzdHJ1 Y3QgZ3JvX3VkcDRfdGJsICp0YmwsCj4+PiArICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBz dGFydF9pZHgpCj4+PiArewo+Pj4gKyAgdWludDE2X3QgZnJhZ19vZmZzZXQ7Cj4+PiArICB1aW50 OF90IGlzX2xhc3RfZnJhZzsKPj4+ICsgIGludDE2X3QgaXBfZGw7Cj4+PiArICBzdHJ1Y3QgcnRl X21idWYgKnBrdDsKPj4+ICsgIGludCBjbXA7Cj4+PiArICB1aW50MzJfdCBpdGVtX2lkeDsKPj4+ ICsgIHVpbnQxNl90IGhkcl9sZW47Cj4+PiArCj4+PiArICBpdGVtX2lkeCA9IHRibC0+aXRlbXNb c3RhcnRfaWR4XS5uZXh0X3BrdF9pZHg7Cj4+PiArICB3aGlsZSAoaXRlbV9pZHggIT0gSU5WQUxJ RF9BUlJBWV9JTkRFWCkgewo+Pj4gKyAgICAgICAgIHBrdCA9IHRibC0+aXRlbXNbaXRlbV9pZHhd LmZpcnN0c2VnOwo+Pj4gKyAgICAgICAgIGhkcl9sZW4gPSBwa3QtPm91dGVyX2wyX2xlbiArIHBr dC0+b3V0ZXJfbDNfbGVuICsgcGt0LT5sMl9sZW4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgcGt0 LT5sM19sZW47Cj4+IAo+PkZvciBub24tdHVubmVsIHBhY2tldHMsIG1idWYtPm91dGVyX2wzL2wy X2xlbiBhcmUgbm90IGd1YXJhbnRlZWQgMC4KPj5JIHRoaW5rIGl0J3MgYmV0dGVyIHRvIHBhc3Mg b3V0ZXIgaGVhZGVyIGxlbmd0aCBhcyBhIHBhcmFtZXRlciBvZgo+Pmdyb191ZHA0X21lcmdlX2l0 ZW0oKSwgbGlrZSB1ZHBfY2hlY2tfbmVpZ2hib3IoKS4KPiAKPkZvciB1ZHAgR1JPLCB3ZSBjYW4g cmVtb3ZlIG91dGVyX2wzL2wyX2xlbiwgdGhleSBhcmUgbm9uc2Vuc2UuCj4gCj4+IAo+Pj4gKyAg ICAgICAgIGlwX2RsID0gcGt0LT5wa3RfbGVuIC0gaGRyX2xlbjsKPj4+ICsgICAgICAgICBmcmFn X29mZnNldCA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLmZyYWdfb2Zmc2V0Owo+Pj4gKyAgICAgICAg IGlzX2xhc3RfZnJhZyA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLmlzX2xhc3RfZnJhZzsKPj4+ICsg ICAgICAgICBjbXAgPSB1ZHBfY2hlY2tfbmVpZ2hib3IoJih0YmwtPml0ZW1zW3N0YXJ0X2lkeF0p LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ19vZmZzZXQsIGlwX2Rs LCAwKTsKPj4+ICsgICAgICAgICBpZiAoY21wKSB7Cj4+PiArICAgICAgICAgICAgICAgICBpZiAo bWVyZ2VfdHdvX3VkcDRfcGFja2V0cygKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYodGJsLT5pdGVtc1tzdGFydF9pZHhdKSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBrdCwgY21wLCBmcmFnX29mZnNldCwKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlzX2xhc3RfZnJhZywgMCkpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgaXRlbV9pZHggPSBkZWxldGVfaXRlbSh0YmwsIGl0ZW1faWR4LAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRF WCk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgdGJsLT5pdGVtc1tzdGFydF9pZHhdLm5l eHRfcGt0X2lkeAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpdGVtX2lk eDsKPj4+ICsgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAwOwo+Pj4gKyAgICAgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgIH0g ZWxzZSB7Cj4+PiArICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+ICsgICAgICAgICB9Cj4+ IAo+PkEgc2luZ2xlIGxpbmUgZG9lc24ndCBuZWVkIGJyYWNlcy4KPiAKPkdvdCBpdCwgd2lsbCBy ZW1vdmUgeyB9Cj4gCj4+IAo+Pj4gKyAgfQo+Pj4gKwo+Pj4gKyAgcmV0dXJuIDA7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3VpbnQxNl90Cj4+PiArZ3JvX3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goc3RydWN0 IGdyb191ZHA0X3RibCAqdGJsLAo+Pj4gKyAgICAgICAgIHVpbnQ2NF90IGZsdXNoX3RpbWVzdGFt cCwKPj4+ICsgICAgICAgICBzdHJ1Y3QgcnRlX21idWYgKipvdXQsCj4+PiArICAgICAgICAgdWlu dDE2X3QgbmJfb3V0KQo+Pj4gK3sKPj4+ICsgIHVpbnQxNl90IGsgPSAwOwo+Pj4gKyAgdWludDMy X3QgaSwgajsKPj4+ICsgIHVpbnQzMl90IG1heF9mbG93X251bSA9IHRibC0+bWF4X2Zsb3dfbnVt Owo+Pj4gKwo+Pj4gKyAgZm9yIChpID0gMDsgaSA8IG1heF9mbG93X251bTsgaSsrKSB7Cj4+PiAr ICAgICAgICAgaWYgKHVubGlrZWx5KHRibC0+Zmxvd19udW0gPT0gMCkpCj4+PiArICAgICAgICAg ICAgICAgICByZXR1cm4gazsKPj4+ICsKPj4+ICsgICAgICAgICBqID0gdGJsLT5mbG93c1tpXS5z dGFydF9pbmRleDsKPj4+ICsgICAgICAgICB3aGlsZSAoaiAhPSBJTlZBTElEX0FSUkFZX0lOREVY KSB7Cj4+PiArICAgICAgICAgICAgICAgICBpZiAodGJsLT5pdGVtc1tqXS5zdGFydF90aW1lIDw9 IGZsdXNoX3RpbWVzdGFtcCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBncm9fdWRw NF9tZXJnZV9pdGVtcyh0YmwsIGopOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBvdXRb aysrXSA9IHRibC0+aXRlbXNbal0uZmlyc3RzZWc7Cj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh0YmwtPml0ZW1zW2pdLm5iX21lcmdlZCA+IDEpCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1cGRhdGVfaGVhZGVyKCYodGJsLT5pdGVtc1tqXSkpOwo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAvKgo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg KiBEZWxldGUgdGhlIHBhY2tldCBhbmQgZ2V0IHRoZSBuZXh0Cj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAqIHBhY2tldCBpbiB0aGUgZmxvdy4KPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBkZWxldGVfaXRlbSh0 YmwsIGosIElOVkFMSURfQVJSQVlfSU5ERVgpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICB0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4ID0gajsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGogPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRibC0+Zmxvd19udW0tLTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHVubGlrZWx5KGsgPT0gbmJfb3V0KSkKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBrOwo+Pj4gKyAgICAgICAgICAgICAgICAgfSBlbHNl Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIC8qCj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAqIFRoZSBsZWZ0IHBhY2tldHMgaW4gdGhpcyBmbG93IHdvbid0IGJlCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAqIHRpbWVvdXQuIEdvIHRvIGNoZWNrIG90aGVyIGZsb3dz Lgo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICAgIH0KPj4+ICsgIH0KPj4+ICsgIHJldHVybiBr Owo+Pj4gK30KPj4+ICsKPj4+ICt1aW50MzJfdAo+Pj4gK2dyb191ZHA0X3RibF9wa3RfY291bnQo dm9pZCAqdGJsKQo+Pj4gK3sKPj4+ICsgIHN0cnVjdCBncm9fdWRwNF90YmwgKmdyb190YmwgPSB0 Ymw7Cj4+PiArCj4+PiArICBpZiAoZ3JvX3RibCkKPj4+ICsgICAgICAgICByZXR1cm4gZ3JvX3Ri bC0+aXRlbV9udW07Cj4+PiArCj4+PiArICByZXR1cm4gMDsKPj4+ICt9Cj4+PiBkaWZmIC0tZ2l0 IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaCBiL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmgK Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi5iYzY3ZWIxCj4+PiAt LS0gL2Rldi9udWxsCj4+PiArKysgYi9saWIvbGlicnRlX2dyby9ncm9fdWRwNC5oCj4+PiBAQCAt MCwwICsxLDI4MSBAQAo+Pj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1 c2UKPj4+ICsgKiBDb3B5cmlnaHQoYykgMjAyMCBJbnNwdXIgQ29ycG9yYXRpb24KPj4+ICsgKi8K Pj4+ICsKPj4+ICsjaWZuZGVmIF9HUk9fVURQNF9IXwo+Pj4gKyNkZWZpbmUgX0dST19VRFA0X0hf Cj4+PiArCj4+PiArI2luY2x1ZGUgPHJ0ZV9pcC5oPgo+Pj4gKyNpbmNsdWRlIDxydGVfdWRwLmg+ Cj4+PiArCj4+PiArI2RlZmluZSBJTlZBTElEX0FSUkFZX0lOREVYIDB4ZmZmZmZmZmZVTAo+Pj4g KyNkZWZpbmUgR1JPX1VEUDRfVEJMX01BWF9JVEVNX05VTSAoMTAyNFVMICogMTAyNFVMKQo+Pj4g Kwo+Pj4gKy8qCj4+PiArICogVGhlIG1heCBsZW5ndGggb2YgYSBJUHY0IHBhY2tldCwgd2hpY2gg aW5jbHVkZXMgdGhlIGxlbmd0aCBvZiB0aGUgTDMKPj4+ICsgKiBoZWFkZXIsIHRoZSBMNCBoZWFk ZXIgYW5kIHRoZSBkYXRhIHBheWxvYWQuCj4+PiArICovCj4+PiArI2RlZmluZSBNQVhfSVBWNF9Q S1RfTEVOR1RIIFVJTlQxNl9NQVgKPj4+ICsKPj4+ICsvKiBIZWFkZXIgZmllbGRzIHJlcHJlc2Vu dGluZyBhIFVEUC9JUHY0IGZsb3cgKi8KPj4+ICtzdHJ1Y3QgdWRwNF9mbG93X2tleSB7Cj4+PiAr ICBzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIgZXRoX3NhZGRyOwo+Pj4gKyAgc3RydWN0IHJ0ZV9ldGhl cl9hZGRyIGV0aF9kYWRkcjsKPj4+ICsgIHVpbnQzMl90IGlwX3NyY19hZGRyOwo+Pj4gKyAgdWlu dDMyX3QgaXBfZHN0X2FkZHI7Cj4+PiArCj4+PiArICAvKiBJUCBmcmFnbWVudCBmb3IgVURQIGRv ZXMgbm90IGNvbnRhaW4gVURQIGhlYWRlcgo+Pj4gKyAgICogZXhjZXB0IHRoZSBmaXJzdCBvbmUu IEJ1dCBJUCBJRCBtdXN0IGJlIHNhbWUuCj4+PiArICAgKi8KPj4+ICsgIHVpbnQxNl90IGlwX2lk Owo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IGdyb191ZHA0X2Zsb3cgewo+Pj4gKyAgc3RydWN0 IHVkcDRfZmxvd19rZXkga2V5Owo+Pj4gKyAgLyoKPj4+ICsgICAqIFRoZSBpbmRleCBvZiB0aGUg Zmlyc3QgcGFja2V0IGluIHRoZSBmbG93Lgo+Pj4gKyAgICogSU5WQUxJRF9BUlJBWV9JTkRFWCBp bmRpY2F0ZXMgYW4gZW1wdHkgZmxvdy4KPj4+ICsgICAqLwo+Pj4gKyAgdWludDMyX3Qgc3RhcnRf aW5kZXg7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSB7Cj4+PiArICAv Kgo+Pj4gKyAgICogVGhlIGZpcnN0IE1CVUYgc2VnbWVudCBvZiB0aGUgcGFja2V0LiBJZiB0aGUg dmFsdWUKPj4+ICsgICAqIGlzIE5VTEwsIGl0IG1lYW5zIHRoZSBpdGVtIGlzIGVtcHR5Lgo+Pj4g KyAgICovCj4+PiArICBzdHJ1Y3QgcnRlX21idWYgKmZpcnN0c2VnOwo+Pj4gKyAgLyogVGhlIGxh c3QgTUJVRiBzZWdtZW50IG9mIHRoZSBwYWNrZXQgKi8KPj4+ICsgIHN0cnVjdCBydGVfbWJ1ZiAq bGFzdHNlZzsKPj4+ICsgIC8qCj4+PiArICAgKiBUaGUgdGltZSB3aGVuIHRoZSBmaXJzdCBwYWNr ZXQgaXMgaW5zZXJ0ZWQgaW50byB0aGUgdGFibGUuCj4+PiArICAgKiBUaGlzIHZhbHVlIHdvbid0 IGJlIHVwZGF0ZWQsIGV2ZW4gaWYgdGhlIHBhY2tldCBpcyBtZXJnZWQKPj4+ICsgICAqIHdpdGgg b3RoZXIgcGFja2V0cy4KPj4+ICsgICAqLwo+Pj4gKyAgdWludDY0X3Qgc3RhcnRfdGltZTsKPj4+ ICsgIC8qCj4+PiArICAgKiBuZXh0X3BrdF9pZHggaXMgdXNlZCB0byBjaGFpbiB0aGUgcGFja2V0 cyB0aGF0Cj4+PiArICAgKiBhcmUgaW4gdGhlIHNhbWUgZmxvdyBidXQgY2FuJ3QgYmUgbWVyZ2Vk IHRvZ2V0aGVyCj4+PiArICAgKiAoZS5nLiBjYXVzZWQgYnkgcGFja2V0IHJlb3JkZXJpbmcpLgo+ Pj4gKyAgICovCj4+PiArICB1aW50MzJfdCBuZXh0X3BrdF9pZHg7Cj4+PiArICAvKiBvZmZzZXQg b2YgSVAgZnJhZ21lbnQgcGFja2V0ICovCj4+PiArICB1aW50MTZfdCBmcmFnX29mZnNldDsKPj4+ ICsgIC8qIGlzIGxhc3QgSVAgZnJhZ21lbnQ/ICovCj4+PiArICB1aW50OF90IGlzX2xhc3RfZnJh ZzsKPj4+ICsgIC8qIHRoZSBudW1iZXIgb2YgbWVyZ2VkIHBhY2tldHMgKi8KPj4+ICsgIHVpbnQx Nl90IG5iX21lcmdlZDsKPj4+ICt9Owo+Pj4gKwo+Pj4gKy8qCj4+PiArICogVURQL0lQdjQgcmVh c3NlbWJseSB0YWJsZSBzdHJ1Y3R1cmUuCj4+PiArICovCj4+PiArc3RydWN0IGdyb191ZHA0X3Ri bCB7Cj4+PiArICAvKiBpdGVtIGFycmF5ICovCj4+PiArICBzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSAq aXRlbXM7Cj4+PiArICAvKiBmbG93IGFycmF5ICovCj4+PiArICBzdHJ1Y3QgZ3JvX3VkcDRfZmxv dyAqZmxvd3M7Cj4+PiArICAvKiBjdXJyZW50IGl0ZW0gbnVtYmVyICovCj4+PiArICB1aW50MzJf dCBpdGVtX251bTsKPj4+ICsgIC8qIGN1cnJlbnQgZmxvdyBudW0gKi8KPj4+ICsgIHVpbnQzMl90 IGZsb3dfbnVtOwo+Pj4gKyAgLyogaXRlbSBhcnJheSBzaXplICovCj4+PiArICB1aW50MzJfdCBt YXhfaXRlbV9udW07Cj4+PiArICAvKiBmbG93IGFycmF5IHNpemUgKi8KPj4+ICsgIHVpbnQzMl90 IG1heF9mbG93X251bTsKPj4+ICt9Owo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIFRoaXMgZnVuY3Rp b24gY3JlYXRlcyBhIFVEUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUuCj4+PiArICoKPj4+ICsgKiBA cGFyYW0gc29ja2V0X2lkCj4+PiArICogIFNvY2tldCBpbmRleCBmb3IgYWxsb2NhdGluZyB0aGUg VURQL0lQdjQgcmVhc3NlbWJsZSB0YWJsZQo+Pj4gKyAqIEBwYXJhbSBtYXhfZmxvd19udW0KPj4+ ICsgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZsb3dzIGluIHRoZSBVRFAvSVB2NCBHUk8gdGFi bGUKPj4+ICsgKiBAcGFyYW0gbWF4X2l0ZW1fcGVyX2Zsb3cKPj4+ICsgKiAgVGhlIG1heGltdW0g bnVtYmVyIG9mIHBhY2tldHMgcGVyIGZsb3cKPj4+ICsgKgo+Pj4gKyAqIEByZXR1cm4KPj4+ICsg KiAgLSBSZXR1cm4gdGhlIHRhYmxlIHBvaW50ZXIgb24gc3VjY2Vzcy4KPj4+ICsgKiAgLSBSZXR1 cm4gTlVMTCBvbiBmYWlsdXJlLgo+Pj4gKyAqLwo+Pj4gK3ZvaWQgKmdyb191ZHA0X3RibF9jcmVh dGUodWludDE2X3Qgc29ja2V0X2lkLAo+Pj4gKyAgICAgICAgIHVpbnQxNl90IG1heF9mbG93X251 bSwKPj4+ICsgICAgICAgICB1aW50MTZfdCBtYXhfaXRlbV9wZXJfZmxvdyk7Cj4+PiArCj4+PiAr LyoqCj4+PiArICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhIFVEUC9JUHY0IHJlYXNzZW1ibHkg dGFibGUuCj4+PiArICoKPj4+ICsgKiBAcGFyYW0gdGJsCj4+PiArICogIFBvaW50ZXIgcG9pbnRp bmcgdG8gdGhlIFVEUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUuCj4+PiArICovCj4+PiArdm9pZCBn cm9fdWRwNF90YmxfZGVzdHJveSh2b2lkICp0YmwpOwo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIFRo aXMgZnVuY3Rpb24gbWVyZ2VzIGEgVURQL0lQdjQgcGFja2V0Lgo+Pj4gKyAqCj4+PiArICogVGhp cyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBpZiB0aGUgcGFja2V0IGhhcyBjb3JyZWN0IGNoZWNr c3VtcyBhbmQKPj4+ICsgKiBkb2VzIG5vdCByZS1jYWxjdWxhdGUgY2hlY2tzdW1zIGZvciB0aGUg bWVyZ2VkIHBhY2tldC4gSXQgcmV0dXJucyB0aGUKPj4+ICsgKiBwYWNrZXQgaWYgaXQgaXNuJ3Qg VURQIGZyYWdtZW50IG9yIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBzcGFjZSBpbgo+Pj4gKyAqIHRo ZSB0YWJsZS4KPj4+ICsgKgo+Pj4gKyAqIEBwYXJhbSBwa3QKPj4+ICsgKiAgUGFja2V0IHRvIHJl YXNzZW1ibGUKPj4+ICsgKiBAcGFyYW0gdGJsCj4+PiArICogIFBvaW50ZXIgcG9pbnRpbmcgdG8g dGhlIFVEUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUKPj4+ICsgKiBAc3RhcnRfdGltZQo+Pj4gKyAq ICBUaGUgdGltZSB3aGVuIHRoZSBwYWNrZXQgaXMgaW5zZXJ0ZWQgaW50byB0aGUgdGFibGUKPj4+ ICsgKgo+Pj4gKyAqIEByZXR1cm4KPj4+ICsgKiAgLSBSZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBp ZiB0aGUgcGFja2V0IGlzIG1lcmdlZC4KPj4+ICsgKiAgLSBSZXR1cm4gemVybyBpZiB0aGUgcGFj a2V0IGlzbid0IG1lcmdlZCBidXQgc3RvcmVkIGluIHRoZSB0YWJsZS4KPj4+ICsgKiAgLSBSZXR1 cm4gYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgaW52YWxpZCBwYXJhbWV0ZXJzIG9yIG5vIGF2YWlsYWJs ZQo+Pj4gKyAqICAgIHNwYWNlIGluIHRoZSB0YWJsZS4KPj4+ICsgKi8KPj4+ICtpbnQzMl90IGdy b191ZHA0X3JlYXNzZW1ibGUoc3RydWN0IHJ0ZV9tYnVmICpwa3QsCj4+PiArICAgICAgICAgc3Ry dWN0IGdyb191ZHA0X3RibCAqdGJsLAo+Pj4gKyAgICAgICAgIHVpbnQ2NF90IHN0YXJ0X3RpbWUp Owo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aW1lb3V0IHBh Y2tldHMgaW4gYSBVRFAvSVB2NCByZWFzc2VtYmx5IHRhYmxlLAo+Pj4gKyAqIGFuZCB3aXRob3V0 IHVwZGF0aW5nIGNoZWNrc3Vtcy4KPj4+ICsgKgo+Pj4gKyAqIEBwYXJhbSB0YmwKPj4+ICsgKiAg VURQL0lQdjQgcmVhc3NlbWJseSB0YWJsZSBwb2ludGVyCj4+PiArICogQHBhcmFtIGZsdXNoX3Rp bWVzdGFtcAo+Pj4gKyAqICBGbHVzaCBwYWNrZXRzIHdoaWNoIGFyZSBpbnNlcnRlZCBpbnRvIHRo ZSB0YWJsZSBiZWZvcmUgb3IgYXQgdGhlCj4+PiArICogIGZsdXNoX3RpbWVzdGFtcC4KPj4+ICsg KiBAcGFyYW0gb3V0Cj4+PiArICogIFBvaW50ZXIgYXJyYXkgdXNlZCB0byBrZWVwIGZsdXNoZWQg cGFja2V0cwo+Pj4gKyAqIEBwYXJhbSBuYl9vdXQKPj4+ICsgKiAgVGhlIGVsZW1lbnQgbnVtYmVy IGluICdvdXQnLiBJdCBhbHNvIGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mCj4+PiAr ICogIHBhY2tldHMgdGhhdCBjYW4gYmUgZmx1c2hlZCBmaW5hbGx5Lgo+Pj4gKyAqCj4+PiArICog QHJldHVybgo+Pj4gKyAqICBUaGUgbnVtYmVyIG9mIGZsdXNoZWQgcGFja2V0cwo+Pj4gKyAqLwo+ Pj4gK3VpbnQxNl90IGdyb191ZHA0X3RibF90aW1lb3V0X2ZsdXNoKHN0cnVjdCBncm9fdWRwNF90 YmwgKnRibCwKPj4+ICsgICAgICAgICB1aW50NjRfdCBmbHVzaF90aW1lc3RhbXAsCj4+PiArICAg ICAgICAgc3RydWN0IHJ0ZV9tYnVmICoqb3V0LAo+Pj4gKyAgICAgICAgIHVpbnQxNl90IG5iX291 dCk7Cj4+PiArCj4+PiArLyoqCj4+PiArICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1i ZXIgb2YgdGhlIHBhY2tldHMgaW4gYSBVRFAvSVB2NAo+Pj4gKyAqIHJlYXNzZW1ibHkgdGFibGUu Cj4+PiArICoKPj4+ICsgKiBAcGFyYW0gdGJsCj4+PiArICogIFVEUC9JUHY0IHJlYXNzZW1ibHkg dGFibGUgcG9pbnRlcgo+Pj4gKyAqCj4+PiArICogQHJldHVybgo+Pj4gKyAqICBUaGUgbnVtYmVy IG9mIHBhY2tldHMgaW4gdGhlIHRhYmxlCj4+PiArICovCj4+PiArdWludDMyX3QgZ3JvX3VkcDRf dGJsX3BrdF9jb3VudCh2b2lkICp0YmwpOwo+Pj4gKwo+Pj4gKy8qCj4+PiArICogQ2hlY2sgaWYg dHdvIFVEUC9JUHY0IHBhY2tldHMgYmVsb25nIHRvIHRoZSBzYW1lIGZsb3cuCj4+PiArICovCj4+ PiArc3RhdGljIGlubGluZSBpbnQKPj4+ICtpc19zYW1lX3VkcDRfZmxvdyhzdHJ1Y3QgdWRwNF9m bG93X2tleSBrMSwgc3RydWN0IHVkcDRfZmxvd19rZXkgazIpCj4+PiArewo+Pj4gKyAgcmV0dXJu IChydGVfaXNfc2FtZV9ldGhlcl9hZGRyKCZrMS5ldGhfc2FkZHIsICZrMi5ldGhfc2FkZHIpICYm Cj4+PiArICAgICAgICAgICAgICAgIHJ0ZV9pc19zYW1lX2V0aGVyX2FkZHIoJmsxLmV0aF9kYWRk ciwgJmsyLmV0aF9kYWRkcikgJiYKPj4+ICsgICAgICAgICAgICAgICAgIChrMS5pcF9zcmNfYWRk ciA9PSBrMi5pcF9zcmNfYWRkcikgJiYKPj4+ICsgICAgICAgICAgICAgICAgIChrMS5pcF9kc3Rf YWRkciA9PSBrMi5pcF9kc3RfYWRkcikgJiYKPj4+ICsgICAgICAgICAgICAgICAgIChrMS5pcF9p ZCA9PSBrMi5pcF9pZCkpOwo+Pj4gK30KPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIE1lcmdlIHR3byBV RFAvSVB2NCBwYWNrZXRzIHdpdGhvdXQgdXBkYXRpbmcgY2hlY2tzdW1zLgo+Pj4gKyAqIElmIGNt cCBpcyBsYXJnZXIgdGhhbiAwLCBhcHBlbmQgdGhlIG5ldyBwYWNrZXQgdG8gdGhlCj4+PiArICog b3JpZ2luYWwgcGFja2V0LiBPdGhlcndpc2UsIHByZS1wZW5kIHRoZSBuZXcgcGFja2V0IHRvCj4+ PiArICogdGhlIG9yaWdpbmFsIHBhY2tldC4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgaW5saW5lIGlu dAo+Pj4gK21lcmdlX3R3b191ZHA0X3BhY2tldHMoc3RydWN0IGdyb191ZHA0X2l0ZW0gKml0ZW0s Cj4+PiArICAgICAgICAgc3RydWN0IHJ0ZV9tYnVmICpwa3QsCj4+PiArICAgICAgICAgaW50IGNt cCwKPj4+ICsgICAgICAgICB1aW50MTZfdCBmcmFnX29mZnNldCwKPj4+ICsgICAgICAgICB1aW50 OF90IGlzX2xhc3RfZnJhZywKPj4+ICsgICAgICAgICB1aW50MTZfdCBsMl9vZmZzZXQpCj4+PiAr ewo+Pj4gKyAgc3RydWN0IHJ0ZV9tYnVmICpwa3RfaGVhZCwgKnBrdF90YWlsLCAqbGFzdHNlZzsK Pj4+ICsgIHVpbnQxNl90IGhkcl9sZW4sIGwyX2xlbjsKPj4+ICsgIHVpbnQzMl90IGlwX2xlbjsK Pj4+ICsKPj4+ICsgIGlmIChjbXAgPiAwKSB7Cj4+PiArICAgICAgICAgcGt0X2hlYWQgPSBpdGVt LT5maXJzdHNlZzsKPj4+ICsgICAgICAgICBwa3RfdGFpbCA9IHBrdDsKPj4+ICsgIH0gZWxzZSB7 Cj4+PiArICAgICAgICAgcGt0X2hlYWQgPSBwa3Q7Cj4+PiArICAgICAgICAgcGt0X3RhaWwgPSBp dGVtLT5maXJzdHNlZzsKPj4+ICsgIH0KPj4+ICsKPj4+ICsgIC8qIGNoZWNrIGlmIHRoZSBJUHY0 IHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXggdmFsdWUgKi8KPj4+ICsgIGhk cl9sZW4gPSBsMl9vZmZzZXQgKyBwa3RfaGVhZC0+bDJfbGVuICsgcGt0X2hlYWQtPmwzX2xlbjsK Pj4+ICsgIGwyX2xlbiA9IGwyX29mZnNldCA+IDAgPyBwa3RfaGVhZC0+b3V0ZXJfbDJfbGVuIDog cGt0X2hlYWQtPmwyX2xlbjsKPj4+ICsgIGlwX2xlbiA9IHBrdF9oZWFkLT5wa3RfbGVuIC0gbDJf bGVuCj4+PiArICAgICAgICAgICsgcGt0X3RhaWwtPnBrdF9sZW4gLSBoZHJfbGVuOwo+Pj4gKyAg aWYgKHVubGlrZWx5KGlwX2xlbiA+IE1BWF9JUFY0X1BLVF9MRU5HVEgpKQo+Pj4gKyAgICAgICAg IHJldHVybiAwOwo+Pj4gKwo+Pj4gKyAgLyogcmVtb3ZlIHRoZSBwYWNrZXQgaGVhZGVyIGZvciB0 aGUgdGFpbCBwYWNrZXQgKi8KPj4+ICsgIHJ0ZV9wa3RtYnVmX2Fkaihwa3RfdGFpbCwgaGRyX2xl bik7Cj4+PiArCj4+PiArICAvKiBjaGFpbiB0d28gcGFja2V0cyB0b2dldGhlciAqLwo+Pj4gKyAg aWYgKGNtcCA+IDApIHsKPj4+ICsgICAgICAgICBpdGVtLT5sYXN0c2VnLT5uZXh0ID0gcGt0Owo+ Pj4gKyAgICAgICAgIGl0ZW0tPmxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2VnKHBrdCk7Cj4+ PiArICB9IGVsc2Ugewo+Pj4gKyAgICAgICAgIGxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2Vn KHBrdCk7Cj4+PiArICAgICAgICAgbGFzdHNlZy0+bmV4dCA9IGl0ZW0tPmZpcnN0c2VnOwo+Pj4g KyAgICAgICAgIGl0ZW0tPmZpcnN0c2VnID0gcGt0Owo+Pj4gKyAgICAgICAgIGl0ZW0tPmZyYWdf b2Zmc2V0ID0gZnJhZ19vZmZzZXQ7Cj4+PiArICB9Cj4+PiArICBpdGVtLT5uYl9tZXJnZWQrKzsK Pj4+ICsgIGlmIChpc19sYXN0X2ZyYWcpCj4+PiArICAgICAgICAgaXRlbS0+aXNfbGFzdF9mcmFn ID0gaXNfbGFzdF9mcmFnOwo+Pj4gKwo+Pj4gKyAgLyogdXBkYXRlIE1CVUYgbWV0YWRhdGEgZm9y IHRoZSBtZXJnZWQgcGFja2V0ICovCj4+PiArICBwa3RfaGVhZC0+bmJfc2VncyArPSBwa3RfdGFp bC0+bmJfc2VnczsKPj4+ICsgIHBrdF9oZWFkLT5wa3RfbGVuICs9IHBrdF90YWlsLT5wa3RfbGVu Owo+Pj4gKwo+Pj4gKyAgcmV0dXJuIDE7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qCj4+PiArICogQ2hl Y2sgaWYgdHdvIFVEUC9JUHY0IHBhY2tldHMgYXJlIG5laWdoYm9ycy4KPj4+ICsgKi8KPj4+ICtz dGF0aWMgaW5saW5lIGludAo+Pj4gK3VkcF9jaGVja19uZWlnaGJvcihzdHJ1Y3QgZ3JvX3VkcDRf aXRlbSAqaXRlbSwKPj4+ICsgICAgICAgICB1aW50MTZfdCBmcmFnX29mZnNldCwKPj4+ICsgICAg ICAgICB1aW50MTZfdCBpcF9kbCwKPj4+ICsgICAgICAgICB1aW50MTZfdCBsMl9vZmZzZXQpCj4+ IAo+Pkl0J3MgYmV0dGVyIHRvIHJlbmFtZSB0aGUgZnVuY3Rpb24gYXMgdWRwNF9jaGVja19uZWln aGJvcigpLCBJTU8uCj4gCj5ObyBwcm9ibGVtCj4gCj4+IAo+Pj4gK3sKPj4+ICsgIHN0cnVjdCBy dGVfbWJ1ZiAqcGt0X29yaWcgPSBpdGVtLT5maXJzdHNlZzsKPj4+ICsgIHVpbnQxNl90IGxlbjsK Pj4+ICsKPj4+ICsgIC8qIGNoZWNrIGlmIHRoZSB0d28gcGFja2V0cyBhcmUgbmVpZ2hib3JzICov Cj4+PiArICBsZW4gPSBwa3Rfb3JpZy0+cGt0X2xlbiAtIGwyX29mZnNldCAtIHBrdF9vcmlnLT5s Ml9sZW4gLQo+Pj4gKyAgICAgICAgIHBrdF9vcmlnLT5sM19sZW47Cj4+PiArICBpZiAoZnJhZ19v ZmZzZXQgPT0gaXRlbS0+ZnJhZ19vZmZzZXQgKyBsZW4pCj4+PiArICAgICAgICAgLyogYXBwZW5k IHRoZSBuZXcgcGFja2V0ICovCj4+PiArICAgICAgICAgcmV0dXJuIDE7Cj4+PiArICBlbHNlIGlm IChmcmFnX29mZnNldCArIGlwX2RsID09IGl0ZW0tPmZyYWdfb2Zmc2V0KQo+Pj4gKyAgICAgICAg IC8qIHByZS1wZW5kIHRoZSBuZXcgcGFja2V0ICovCj4+PiArICAgICAgICAgcmV0dXJuIC0xOwo+ Pj4gKwo+Pj4gKyAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgaW50 Cj4+PiAraXNfaXB2NF9mcmFnbWVudChjb25zdCBzdHJ1Y3QgcnRlX2lwdjRfaGRyICpoZHIpCj4+ PiArewo+Pj4gKyAgdWludDE2X3QgZmxhZ19vZmZzZXQsIGlwX2ZsYWcsIGlwX29mczsKPj4+ICsK Pj4+ICsgIGZsYWdfb2Zmc2V0ID0gcnRlX2JlX3RvX2NwdV8xNihoZHItPmZyYWdtZW50X29mZnNl dCk7Cj4+PiArICBpcF9vZnMgPSAodWludDE2X3QpKGZsYWdfb2Zmc2V0ICYgUlRFX0lQVjRfSERS X09GRlNFVF9NQVNLKTsKPj4+ICsgIGlwX2ZsYWcgPSAodWludDE2X3QpKGZsYWdfb2Zmc2V0ICYg UlRFX0lQVjRfSERSX01GX0ZMQUcpOwo+Pj4gKwo+Pj4gKyAgcmV0dXJuIGlwX2ZsYWcgIT0gMCB8 fCBpcF9vZnMgICE9IDA7Cj4+PiArfQo+Pj4gKyNlbmRpZgo+Pj4gZGlmZiAtLWdpdCBhL2xpYi9s aWJydGVfZ3JvL21lc29uLmJ1aWxkIGIvbGliL2xpYnJ0ZV9ncm8vbWVzb24uYnVpbGQKPj4+IGlu ZGV4IDUwMTY2OGMuLjBkMThkYzIgMTAwNjQ0Cj4+PiAtLS0gYS9saWIvbGlicnRlX2dyby9tZXNv bi5idWlsZAo+Pj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vbWVzb24uYnVpbGQKPj4+IEBAIC0xLDYg KzEsNiBAQAo+Pj4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQo+Pj4g ICMgQ29weXJpZ2h0KGMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KPj4+ICAKPj4+IC1zb3VyY2Vz ID0gZmlsZXMoJ3J0ZV9ncm8uYycsICdncm9fdGNwNC5jJywgJ2dyb192eGxhbl90Y3A0LmMnKQo+ Pj4gK3NvdXJjZXMgPSBmaWxlcygncnRlX2dyby5jJywgJ2dyb190Y3A0LmMnLCAnZ3JvX3VkcDQu YycsICdncm9fdnhsYW5fdGNwNC5jJykKPj4+ICBoZWFkZXJzID0gZmlsZXMoJ3J0ZV9ncm8uaCcp Cj4+PiAgZGVwcyArPSBbJ2V0aGRldiddCj4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8v cnRlX2dyby5jIGIvbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5jCj4+PiBpbmRleCA2NjE4ZjRkLi5k MDk0MTI5IDEwMDY0NAo+Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5jCj4+PiArKysg Yi9saWIvbGlicnRlX2dyby9ydGVfZ3JvLmMKPj4+IEBAIC05LDYgKzksNyBAQAo+Pj4gIAo+Pj4g ICNpbmNsdWRlICJydGVfZ3JvLmgiCj4+PiAgI2luY2x1ZGUgImdyb190Y3A0LmgiCj4+PiArI2lu Y2x1ZGUgImdyb191ZHA0LmgiCj4+PiAgI2luY2x1ZGUgImdyb192eGxhbl90Y3A0LmgiCj4+PiAg Cj4+PiAgdHlwZWRlZiB2b2lkICooKmdyb190YmxfY3JlYXRlX2ZuKSh1aW50MTZfdCBzb2NrZXRf aWQsCj4+PiBAQCAtMTgsMTcgKzE5LDIzIEBACj4+PiAgdHlwZWRlZiB1aW50MzJfdCAoKmdyb190 YmxfcGt0X2NvdW50X2ZuKSh2b2lkICp0YmwpOwo+Pj4gIAo+Pj4gIHN0YXRpYyBncm9fdGJsX2Ny ZWF0ZV9mbiB0YmxfY3JlYXRlX2ZuW1JURV9HUk9fVFlQRV9NQVhfTlVNXSA9IHsKPj4+IC0gICAg ICAgICBncm9fdGNwNF90YmxfY3JlYXRlLCBncm9fdnhsYW5fdGNwNF90YmxfY3JlYXRlLCBOVUxM fTsKPj4+ICsgICAgICAgICBncm9fdGNwNF90YmxfY3JlYXRlLCBncm9fdnhsYW5fdGNwNF90Ymxf Y3JlYXRlLAo+Pj4gKyAgICAgICAgIGdyb191ZHA0X3RibF9jcmVhdGUsIE5VTEx9Owo+Pj4gIHN0 YXRpYyBncm9fdGJsX2Rlc3Ryb3lfZm4gdGJsX2Rlc3Ryb3lfZm5bUlRFX0dST19UWVBFX01BWF9O VU1dID0gewo+Pj4gICAgICAgICAgICAgICAgICAgZ3JvX3RjcDRfdGJsX2Rlc3Ryb3ksIGdyb192 eGxhbl90Y3A0X3RibF9kZXN0cm95LAo+Pj4gKyAgICAgICAgICAgICAgICAgZ3JvX3VkcDRfdGJs X2Rlc3Ryb3ksCj4+PiAgICAgICAgICAgICAgICAgICBOVUxMfTsKPj4+ICBzdGF0aWMgZ3JvX3Ri bF9wa3RfY291bnRfZm4gdGJsX3BrdF9jb3VudF9mbltSVEVfR1JPX1RZUEVfTUFYX05VTV0gPSB7 Cj4+PiAgICAgICAgICAgICAgICAgICBncm9fdGNwNF90YmxfcGt0X2NvdW50LCBncm9fdnhsYW5f dGNwNF90YmxfcGt0X2NvdW50LAo+Pj4gKyAgICAgICAgICAgICAgICAgZ3JvX3VkcDRfdGJsX3Br dF9jb3VudCwKPj4+ICAgICAgICAgICAgICAgICAgIE5VTEx9Owo+Pj4gIAo+Pj4gICNkZWZpbmUg SVNfSVBWNF9UQ1BfUEtUKHB0eXBlKSAoUlRFX0VUSF9JU19JUFY0X0hEUihwdHlwZSkgJiYgXAo+ Pj4gICAgICAgICAgICgocHR5cGUgJiBSVEVfUFRZUEVfTDRfVENQKSA9PSBSVEVfUFRZUEVfTDRf VENQKSkKPj4+ICAKPj4+ICsjZGVmaW5lIElTX0lQVjRfVURQX1BLVChwdHlwZSkgKFJURV9FVEhf SVNfSVBWNF9IRFIocHR5cGUpICYmIFwKPj4+ICsgICAgICAgICAoKHB0eXBlICYgUlRFX1BUWVBF X0w0X1VEUCkgPT0gUlRFX1BUWVBFX0w0X1VEUCkpCj4+PiArCj4+PiAgI2RlZmluZSBJU19JUFY0 X1ZYTEFOX1RDUDRfUEtUKHB0eXBlKSAoUlRFX0VUSF9JU19JUFY0X0hEUihwdHlwZSkgJiYgXAo+ Pj4gICAgICAgICAgICgocHR5cGUgJiBSVEVfUFRZUEVfTDRfVURQKSA9PSBSVEVfUFRZUEVfTDRf VURQKSAmJiBcCj4+PiAgICAgICAgICAgKChwdHlwZSAmIFJURV9QVFlQRV9UVU5ORUxfVlhMQU4p ID09IFwKPj4+IEBAIC00MCw2ICs0Nyw3IEBACj4+PiAgICAgICAgICAgICAgICBSVEVfUFRZUEVf SU5ORVJfTDNfSVBWNF9FWFQgfCBcCj4+PiAgICAgICAgICAgICAgICBSVEVfUFRZUEVfSU5ORVJf TDNfSVBWNF9FWFRfVU5LTk9XTikpICE9IDApKQo+Pj4gIAo+Pj4gKwo+Pj4gIC8qCj4+PiAgICog R1JPIGNvbnRleHQgc3RydWN0dXJlLiBJdCBrZWVwcyB0aGUgdGFibGUgc3RydWN0dXJlcywgd2hp Y2ggYXJlCj4+PiAgICogdXNlZCB0byBtZXJnZSBwYWNrZXRzLCBmb3IgZGlmZmVyZW50IEdSTyB0 eXBlcy4gQmVmb3JlIHVzaW5nCj4+PiBAQCAtMTIzLDIwICsxMzEsMjYgQEAgc3RydWN0IGdyb19j dHggewo+Pj4gICAgc3RydWN0IGdyb190Y3A0X2Zsb3cgdGNwX2Zsb3dzW1JURV9HUk9fTUFYX0JV UlNUX0lURU1fTlVNXTsKPj4+ICAgIHN0cnVjdCBncm9fdGNwNF9pdGVtIHRjcF9pdGVtc1tSVEVf R1JPX01BWF9CVVJTVF9JVEVNX05VTV0gPSB7ezB9IH07Cj4+PiAgCj4+PiAtICAvKiBBbGxvY2F0 ZSBhIHJlYXNzZW1ibHkgdGFibGUgZm9yIFZYTEFOIEdSTyAqLwo+Pj4gKyAgLyogYWxsb2NhdGUg YSByZWFzc2VtYmx5IHRhYmxlIGZvciBVRFAvSVB2NCBHUk8gKi8KPj4+ICsgIHN0cnVjdCBncm9f dWRwNF90YmwgdWRwX3RibDsKPj4+ICsgIHN0cnVjdCBncm9fdWRwNF9mbG93IHVkcF9mbG93c1tS VEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+PiArICBzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSB1 ZHBfaXRlbXNbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1dID0ge3swfSB9Owo+Pj4gKwo+Pj4g KyAgLyogQWxsb2NhdGUgYSByZWFzc2VtYmx5IHRhYmxlIGZvciBWWExBTiBUQ1AgR1JPICovCj4+ PiAgICBzdHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRfdGJsIHZ4bGFuX3RibDsKPj4+ICAgIHN0cnVjdCBn cm9fdnhsYW5fdGNwNF9mbG93IHZ4bGFuX2Zsb3dzW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVN XTsKPj4+IC0gIHN0cnVjdCBncm9fdnhsYW5fdGNwNF9pdGVtIHZ4bGFuX2l0ZW1zW1JURV9HUk9f TUFYX0JVUlNUX0lURU1fTlVNXSA9IHsKPj4+IC0gICAgICAgICB7ezB9LCAwLCAwfSB9Owo+Pj4g KyAgc3RydWN0IGdyb192eGxhbl90Y3A0X2l0ZW0gdnhsYW5faXRlbXNbUlRFX0dST19NQVhfQlVS U1RfSVRFTV9OVU1dCj4+PiArICAgICAgICAgICAgICAgICA9IHt7ezB9LCAwLCAwfSB9Owo+Pj4g IAo+Pj4gICAgc3RydWN0IHJ0ZV9tYnVmICp1bnByb2Nlc3NfcGt0c1tuYl9wa3RzXTsKPj4+ICAg IHVpbnQzMl90IGl0ZW1fbnVtOwo+Pj4gICAgaW50MzJfdCByZXQ7Cj4+PiAgICB1aW50MTZfdCBp LCB1bnByb2Nlc3NfbnVtID0gMCwgbmJfYWZ0ZXJfZ3JvID0gbmJfcGt0czsKPj4+IC0gIHVpbnQ4 X3QgZG9fdGNwNF9ncm8gPSAwLCBkb192eGxhbl9ncm8gPSAwOwo+Pj4gKyAgdWludDhfdCBkb190 Y3A0X2dybyA9IDAsIGRvX3Z4bGFuX2dybyA9IDAsIGRvX3VkcDRfZ3JvID0gMDsKPj4+ICAKPj4+ ICAgIGlmICh1bmxpa2VseSgocGFyYW0tPmdyb190eXBlcyAmIChSVEVfR1JPX0lQVjRfVlhMQU5f VENQX0lQVjQgfAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0dST19U Q1BfSVBWNCkpID09IDApKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRF X0dST19UQ1BfSVBWNCB8Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVf R1JPX1VEUF9JUFY0KSkgPT0gMCkpCj4+PiAgICAgICAgICAgcmV0dXJuIG5iX3BrdHM7Cj4+PiAg Cj4+PiAgICAvKiBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgKi8KPj4+IEBAIC0x NzAsNiArMTg0LDIwIEBAIHN0cnVjdCBncm9fY3R4IHsKPj4+ICAgICAgICAgICBkb190Y3A0X2dy byA9IDE7Cj4+PiAgICB9Cj4+PiAgCj4+PiArICBpZiAocGFyYW0tPmdyb190eXBlcyAmIFJURV9H Uk9fVURQX0lQVjQpIHsKPj4+ICsgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbV9udW07IGkr KykKPj4+ICsgICAgICAgICAgICAgICAgIHVkcF9mbG93c1tpXS5zdGFydF9pbmRleCA9IElOVkFM SURfQVJSQVlfSU5ERVg7Cj4+PiArCj4+PiArICAgICAgICAgdWRwX3RibC5mbG93cyA9IHVkcF9m bG93czsKPj4+ICsgICAgICAgICB1ZHBfdGJsLml0ZW1zID0gdWRwX2l0ZW1zOwo+Pj4gKyAgICAg ICAgIHVkcF90YmwuZmxvd19udW0gPSAwOwo+Pj4gKyAgICAgICAgIHVkcF90YmwuaXRlbV9udW0g PSAwOwo+Pj4gKyAgICAgICAgIHVkcF90YmwubWF4X2Zsb3dfbnVtID0gaXRlbV9udW07Cj4+PiAr ICAgICAgICAgdWRwX3RibC5tYXhfaXRlbV9udW0gPSBpdGVtX251bTsKPj4+ICsgICAgICAgICBk b191ZHA0X2dybyA9IDE7Cj4+PiArICB9Cj4+PiArCj4+PiArCj4+PiAgICBmb3IgKGkgPSAwOyBp IDwgbmJfcGt0czsgaSsrKSB7Cj4+PiAgICAgICAgICAgLyoKPj4+ICAgICAgICAgICAgKiBUaGUg dGltZXN0YW1wIGlzIGlnbm9yZWQsIHNpbmNlIGFsbCBwYWNrZXRzCj4+PiBAQCAtMTc3LDcgKzIw NSw4IEBAIHN0cnVjdCBncm9fY3R4IHsKPj4+ICAgICAgICAgICAgKi8KPj4+ICAgICAgICAgICBp ZiAoSVNfSVBWNF9WWExBTl9UQ1A0X1BLVChwa3RzW2ldLT5wYWNrZXRfdHlwZSkgJiYKPj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgZG9fdnhsYW5fZ3JvKSB7Cj4+PiAtICAgICAgICAgICAg ICAgICByZXQgPSBncm9fdnhsYW5fdGNwNF9yZWFzc2VtYmxlKHBrdHNbaV0sICZ2eGxhbl90Ymws IDApOwo+Pj4gKyAgICAgICAgICAgICAgICAgcmV0ID0gZ3JvX3Z4bGFuX3RjcDRfcmVhc3NlbWJs ZShwa3RzW2ldLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnZ4bGFuX3RibCwgMCk7Cj4+PiAgICAgICAgICAgICAgICAgICBpZiAocmV0ID4gMCkK Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWVyZ2Ugc3VjY2Vzc2Z1bGx5ICovCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2FmdGVyX2dyby0tOwo+Pj4gQEAgLTE5MSwy NyArMjIwLDQzIEBAIHN0cnVjdCBncm9fY3R4IHsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmJfYWZ0ZXJfZ3JvLS07Cj4+PiAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXQgPCAw KQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19u dW0rK10gPSBwa3RzW2ldOwo+Pj4gKyAgICAgICAgIH0gZWxzZSBpZiAoSVNfSVBWNF9VRFBfUEtU KHBrdHNbaV0tPnBhY2tldF90eXBlKSAmJgo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBk b191ZHA0X2dybykgewo+Pj4gKyAgICAgICAgICAgICAgICAgcmV0ID0gZ3JvX3VkcDRfcmVhc3Nl bWJsZShwa3RzW2ldLCAmdWRwX3RibCwgMCk7Cj4+PiArICAgICAgICAgICAgICAgICBpZiAocmV0 ID4gMCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc3VjY2Vzc2Z1bGx5 ICovCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2FmdGVyX2dyby0tOwo+Pj4gKyAg ICAgICAgICAgICAgICAgZWxzZSBpZiAocmV0IDwgMCkKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICB1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsKPj4+ICAgICAg ICAgICB9IGVsc2UKPj4+ICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc19wa3RzW3VucHJvY2Vz c19udW0rK10gPSBwa3RzW2ldOwo+Pj4gICAgfQo+Pj4gIAo+Pj4gLSAgaWYgKG5iX2FmdGVyX2dy byA8IG5iX3BrdHMpIHsKPj4+ICsgIGlmICgobmJfYWZ0ZXJfZ3JvIDwgbmJfcGt0cykKPj4+ICsg ICAgICAgICAgfHwgKHVucHJvY2Vzc19udW0gPCBuYl9wa3RzKSkgewo+PiAKPj5XaHkgbmVlZCB0 byBjaGVjayB1bnByb2Nlc3NfbnVtIGhlcmU/Cj4gCj5JbiB0aGUgY2FzZSB0aGF0IHBhY2tldCBp c24ndCBtZXJnZWQsIG5iX2FmdGVyX2dybyB3b24ndCBiZSBjaGFuZ2VkLCB3ZSBvbmx5IGNhbiB1 c2UgdW5wcm9jZXNzX251bSB0byBjaGVjaywgaXQgaXMgcG9zc2libGUgdG8gcmVhc3NtYmxlIHRo ZW0gc3VjY2Vzc2Z1bGx5IGluIGZsdXNoIHBoYXNlLgo+IAo+PiAKPj4+ICAgICAgICAgICBpID0g MDsKPj4+ICAgICAgICAgICAvKiBGbHVzaCBhbGwgcGFja2V0cyBmcm9tIHRoZSB0YWJsZXMgKi8K Pj4+ICAgICAgICAgICBpZiAoZG9fdnhsYW5fZ3JvKSB7Cj4+PiAgICAgICAgICAgICAgICAgICBp ID0gZ3JvX3Z4bGFuX3RjcDRfdGJsX3RpbWVvdXRfZmx1c2goJnZ4bGFuX3RibCwKPj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHBrdHMsIG5iX3BrdHMpOwo+Pj4gICAgICAg ICAgIH0KPj4+ICsKPj4+ICAgICAgICAgICBpZiAoZG9fdGNwNF9ncm8pIHsKPj4+ICAgICAgICAg ICAgICAgICAgIGkgKz0gZ3JvX3RjcDRfdGJsX3RpbWVvdXRfZmx1c2goJnRjcF90YmwsIDAsCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGt0c1tpXSwgbmJfcGt0cyAtIGkp Owo+Pj4gICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICBpZiAoZG9fdWRwNF9ncm8pIHsK Pj4+ICsgICAgICAgICAgICAgICAgIGkgKz0gZ3JvX3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goJnVk cF90YmwsIDAsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGt0c1tpXSwg bmJfcGt0cyAtIGkpOwo+Pj4gKyAgICAgICAgIH0KPj4+ICAgICAgICAgICAvKiBDb3B5IHVucHJv Y2Vzc2VkIHBhY2tldHMgKi8KPj4+ICAgICAgICAgICBpZiAodW5wcm9jZXNzX251bSA+IDApIHsK Pj4+ICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcGt0c1tpXSwgdW5wcm9jZXNzX3BrdHMsCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHJ0ZV9tYnVm ICopICoKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc19udW0p Owo+Pj4gICAgICAgICAgIH0KPj4+ICsgICAgICAgICBuYl9hZnRlcl9ncm8gPSBpICsgdW5wcm9j ZXNzX251bTsKPj4+ICAgIH0KPj4+ICAKPj4+ICAgIHJldHVybiBuYl9hZnRlcl9ncm87Cj4+PiAx LjguMy4xCj4gCj4gCgogCgog