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 896BCA04C9; Mon, 14 Sep 2020 09:11:51 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5AAC9FFA; Mon, 14 Sep 2020 09:11:50 +0200 (CEST) Received: from m1362.mail.163.com (m1362.mail.163.com [220.181.13.62]) by dpdk.org (Postfix) with ESMTP id 93D56E07 for ; Mon, 14 Sep 2020 09:11:47 +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=njJd1 Rr5hBigOzUs1W6//4qZQfSHFSc3GHscO5NC7yM=; b=PMs4fjmfpF5K+1e5GbO6G pYuW4DM39hUmeExSMS1nYzZNbM5d6NN/RRG6uLHh0rd2vZRD+svNFDFWJUv1rANk cKSq0gAmLqDrIk45msAwZVrjgwe915Bd2ORxd0/hwEEZ/PC0iq1y1VSWPtedPNwx Zds3krLM1lC+fLOKWMi2wQ= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr62 (Coremail) ; Mon, 14 Sep 2020 15:11:42 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Mon, 14 Sep 2020 15:11:42 +0800 (CST) From: yang_y_yi To: "Jiayu Hu" Cc: thomas@monjalon.net, yangyi01@inspur.com, dev@dpdk.org 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: <20200914042126.GA15258@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> References: <20200910092914.120452-1-yang_y_yi@163.com> <20200910092914.120452-3-yang_y_yi@163.com> <20200911042416.GA46174@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> <1623572b.1b82.1748a63b63f.Coremail.yang_y_yi@163.com> <20200914042126.GA15258@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> X-CM-CTRLDATA: 7qtViWZvb3Rlcl9odG09MzI3NzI6NTY= MIME-Version: 1.0 Message-ID: <2b5b830.4a75.1748b748156.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: PsGowAD3_8euF19fV3x4AA--.32742W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiMx6fi1Xl6OroaQABsL 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 v5 2/2] gro: add VXLAN 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" CgoKVGhhbmtzIEppYXl1LCB3aWxsIGNoYW5nZSB0aGVtIHBlciB5b3VyIGNvbW1lbnRzLiBGb3Ig ZG91bWVudCBwYXJ0LCBpcyBzdWNoIGNoYW5nZSBvaz8KCgoKCgpkaWZmIC0tZ2l0IGEvZG9jL2d1 aWRlcy9wcm9nX2d1aWRlL2dlbmVyaWNfcmVjZWl2ZV9vZmZsb2FkX2xpYi5yc3QgYi9kb2MvZ3Vp ZGVzL3Byb2cKaW5kZXggNWIzZmI5MS4uOThhNWQyOSAxMDA2NDQKLS0tIGEvZG9jL2d1aWRlcy9w cm9nX2d1aWRlL2dlbmVyaWNfcmVjZWl2ZV9vZmZsb2FkX2xpYi5yc3QKKysrIGIvZG9jL2d1aWRl cy9wcm9nX2d1aWRlL2dlbmVyaWNfcmVjZWl2ZV9vZmZsb2FkX2xpYi5yc3QKQEAgLTMwLDkgKzMw LDkgQEAgYXNzdW1lcyB0aGUgcGFja2V0cyBhcmUgY29tcGxldGUgKGkuZS4sIE1GPT0wICYmIGZy YWdfb2ZmPT0wKSwgd2hlCiBmcmFnbWVudGF0aW9uIGlzIHBvc3NpYmxlIChpLmUuLCBERj09MCku IEFkZGl0aW9uYWxseSwgaXQgY29tcGxpZXMgUkZDCiA2ODY0IHRvIHByb2Nlc3MgdGhlIElQdjQg SUQgZmllbGQuCgotQ3VycmVudGx5LCB0aGUgR1JPIGxpYnJhcnkgcHJvdmlkZXMgR1JPIHN1cHBv cnRzIGZvciBUQ1AvSVB2NCBwYWNrZXRzIGFuZAotVnhMQU4gcGFja2V0cyB3aGljaCBjb250YWlu IGFuIG91dGVyIElQdjQgaGVhZGVyIGFuZCBhbiBpbm5lciBUQ1AvSVB2NAotcGFja2V0LgorQ3Vy cmVudGx5LCB0aGUgR1JPIGxpYnJhcnkgcHJvdmlkZXMgR1JPIHN1cHBvcnRzIGZvciBUQ1AvSVB2 NCBhbmQgVURQL0lQdjQKK3BhY2tldHMgYXMgd2VsbCBhcyBWeExBTiBwYWNrZXRzIHdoaWNoIGNv bnRhaW4gYW4gb3V0ZXIgSVB2NCBoZWFkZXIgYW5kIGFuCitpbm5lciBUQ1AvSVB2NCBvciBVRFAv SVB2NCBwYWNrZXQuCgogVHdvIFNldHMgb2YgQVBJCiAtLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdp dCBhL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjBfMTEucnN0IGIvZG9jL2d1aWRlcy9y ZWxfbm90ZXMvcmVsZWFzZV8yCmluZGV4IGRmMjI3YTEuLjI1ZTAzODcgMTAwNjQ0Ci0tLSBhL2Rv Yy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjBfMTEucnN0CisrKyBiL2RvYy9ndWlkZXMvcmVs X25vdGVzL3JlbGVhc2VfMjBfMTEucnN0CkBAIC01NSw2ICs1NSwxMiBAQCBOZXcgRmVhdHVyZXMK ICAgICAgQWxzbywgbWFrZSBzdXJlIHRvIHN0YXJ0IHRoZSBhY3R1YWwgdGV4dCBhdCB0aGUgbWFy Z2luLgogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CgorKiAqKkFkZCBVRFAvSVB2NCBHUk8gc3VwcG9ydCBmb3IgVnhMQU4gYW5kIG5v bi1WeExBTiBwYWNrZXRzLioqCisKKyAgQWRkIFVEUC9JUHY0IEdSTyBzdXBwb3J0IGZvciBWeExB TiBhbmQgbm9uLVZ4TEFOIHBhY2tldHMuIEZvcgorICBWeExBTiBwYWNrZXRzLCB0aGlzIGFkZHMg aW5uZXIgVURQL0lQdjQgc3VwcG9ydCwgZm9yIG5vbi1WeExBTgorICBwYWNrZXRzLCB0aGlzIGFk ZHMgVURQL0lQdjQgc3VwcG9ydC4KKwoKIFJlbW92ZWQgSXRlbXMKIC0tLS0tLS0tLS0tLS0KCgoK CgoKCgoKQXQgMjAyMC0wOS0xNCAxMjoyMToyNiwgIkppYXl1IEh1IiA8amlheXUuaHVAaW50ZWwu Y29tPiB3cm90ZToKPlJlcGxpZXMgYXJlIGlubGluZS4KPgo+QlRXLCB5b3UgbmVlZCB0byB1cGRh dGUgdGhlIHByb2dyYW1tZXIgZ3VpZGUKPmRvYy9ndWlkZXMvcHJvZ19ndWlkZS9nZW5lcmljX3Jl Y2VpdmVfb2ZmbG9hZF9saWIucnN0IGFuZAo+cmVsZWFzZSBub3RlIGRvYy9ndWlkZXMvcmVsX25v dGVzL3JlbGVhc2VfMjBfMTEucnN0Lgo+Cj5UaGFua3MsCj5KaWF5dQo+Cj5PbiBNb24sIFNlcCAx NCwgMjAyMCBhdCAxMDoxMzo0NEFNICswODAwLCB5YW5nX3lfeWkgd3JvdGU6Cj4+IEppYXl1LCB0 aGFuayB5b3Ugc28gbXVjaCwgcGxlYXNlIGNoZWNrIG15IHJlcGxpZXMgZm9yIHNvbWUgb2YgeW91 ciBjb21tZW50cywKPj4gaGVyZSBpcyBpbmNyZW1lbnRhbCBwYXRjaC4gSSBidWlsdCBpdCBieSBt ZXNvbiB0aGlzIHRpbWUgOi0pCj4+IAo+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3Jv X3Z4bGFuX3VkcDQuYyBiL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gaW5kZXgg OWU5ZGY3Mi4uMWZjZmFmMSAxMDA2NDQKPj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFu X3VkcDQuYwo+PiArKysgYi9saWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+IEBAIC0y MDMsNyArMjAzLDcgQEAKPj4gIH0KPj4gCj4+ICBzdGF0aWMgaW5saW5lIGludAo+PiAtdWRwX2No ZWNrX3Z4bGFuX25laWdoYm9yKHN0cnVjdCBncm9fdnhsYW5fdWRwNF9pdGVtICppdGVtLAo+PiAr dWRwNF9jaGVja192eGxhbl9uZWlnaGJvcihzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfaXRlbSAqaXRl bSwKPj4gICAgICAgICAgICAgICAgIHVpbnQxNl90IGZyYWdfb2Zmc2V0LAo+PiAgICAgICAgICAg ICAgICAgdWludDE2X3QgaXBfZGwpCj4+ICB7Cj4+IEBAIC0yMTMsNyArMjEzLDcgQEAKPj4gICAg ICAgICBpbnQgcmV0ID0gMDsKPj4gCj4+ICAgICAgICAgbDJfb2Zmc2V0ID0gcGt0LT5vdXRlcl9s Ml9sZW4gKyBwa3QtPm91dGVyX2wzX2xlbjsKPj4gLSAgICAgICBjbXAgPSB1ZHBfY2hlY2tfbmVp Z2hib3IoJml0ZW0tPmlubmVyX2l0ZW0sIGZyYWdfb2Zmc2V0LCBpcF9kbCwKPj4gKyAgICAgICBj bXAgPSB1ZHA0X2NoZWNrX25laWdoYm9yKCZpdGVtLT5pbm5lcl9pdGVtLCBmcmFnX29mZnNldCwg aXBfZGwsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsMl9vZmZz ZXQpOwo+PiAgICAgICAgIC8qIFZYTEFOIG91dGVyIElQIElEIGlzIG91dCBvZiBvcmRlciwgc28g ZG9uJ3QgdG91Y2ggaXQgYW5kCj4+ICAgICAgICAgICogZG9uJ3QgY29tcGFyZSBpdC4KPj4gQEAg LTM3OSw3ICszNzksNyBAQAo+PiAgICAgICAgICAgICAgICAgaXRlbV9pZHggPSBpbnNlcnRfbmV3 X2l0ZW0odGJsLCBwa3QsIHN0YXJ0X3RpbWUsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaXNfbGFzdF9mcmFnLCBvdXRlcl9pcF9pZCwgb3V0ZXJfaXNfYXRv bWljKTsKPj4gLSAgICAgICAgICAgICAgIGlmIChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lO REVYKQo+PiArICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGl0ZW1faWR4ID09IElOVkFMSURf QVJSQVlfSU5ERVgpKQo+PiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4+ICAg ICAgICAgICAgICAgICBpZiAoaW5zZXJ0X25ld19mbG93KHRibCwgJmtleSwgaXRlbV9pZHgpID09 Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCkg ewo+PiBAQCAtMzk3LDcgKzM5Nyw3IEBACj4+ICAgICAgICAgY3VyX2lkeCA9IHRibC0+Zmxvd3Nb aV0uc3RhcnRfaW5kZXg7Cj4+ICAgICAgICAgcHJldl9pZHggPSBjdXJfaWR4Owo+PiAgICAgICAg IGRvIHsKPj4gLSAgICAgICAgICAgICAgIGNtcCA9IHVkcF9jaGVja192eGxhbl9uZWlnaGJvcigm KHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+PiArICAgICAgICAgICAgICAgY21wID0gdWRwNF9jaGVj a192eGxhbl9uZWlnaGJvcigmKHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZyYWdfb2Zmc2V0LCBpcF9kbCk7Cj4+ICAgICAgICAgICAgICAg ICBpZiAoY21wKSB7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZV90d29fdnhs YW5fdWRwNF9wYWNrZXRzKAo+PiBAQCAtNDM2LDcgKzQzNiw3IEBACj4+ICAgICAgICAgICAgICAg ICBpdGVtX2lkeCA9IGluc2VydF9uZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwKPj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZBTElEX0FSUkFZX0lOREVYLCBmcmFnX29m ZnNldCwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19sYXN0X2ZyYWcsIG91 dGVyX2lwX2lkLCBvdXRlcl9pc19hdG9taWMpOwo+PiAtICAgICAgICAgICAgICAgaWYgKGl0ZW1f aWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+ICsgICAgICAgICAgICAgICBpZiAodW5saWtl bHkoaXRlbV9pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkpCj4+ICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKPj4gICAgICAgICAgICAgICAgIHRibC0+aXRlbXNbaXRlbV9pZHhd LmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4ID0gY3VyX2lkeDsKPj4gICAgICAgICAgICAgICAgIHRi bC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBpdGVtX2lkeDsKPj4gQEAgLTQ3MCw3ICs0NzAsNyBA QAo+PiAgICAgICAgICAgICAgICAgaXBfZGwgPSBwa3QtPnBrdF9sZW4gLSBoZHJfbGVuOwo+PiBk aWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuYyBiL2xpYi9saWJydGVf Z3JvL2dyb192eGxhbl91ZHA0LmMKPj4gaW5kZXggOWU5ZGY3Mi4uMWZjZmFmMSAxMDA2NDQKPj4g LS0tIGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuYwo+PiArKysgYi9saWIvbGlicnRl X2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+IEBAIC0yMDMsNyArMjAzLDcgQEAKPj4gIH0KPj4gCj4+ ICBzdGF0aWMgaW5saW5lIGludAo+PiAtdWRwX2NoZWNrX3Z4bGFuX25laWdoYm9yKHN0cnVjdCBn cm9fdnhsYW5fdWRwNF9pdGVtICppdGVtLAo+PiArdWRwNF9jaGVja192eGxhbl9uZWlnaGJvcihz dHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfaXRlbSAqaXRlbSwKPj4gICAgICAgICAgICAgICAgIHVpbnQx Nl90IGZyYWdfb2Zmc2V0LAo+PiAgICAgICAgICAgICAgICAgdWludDE2X3QgaXBfZGwpCj4+ICB7 Cj4+IEBAIC0yMTMsNyArMjEzLDcgQEAKPj4gICAgICAgICBpbnQgcmV0ID0gMDsKPj4gCj4+ICAg ICAgICAgbDJfb2Zmc2V0ID0gcGt0LT5vdXRlcl9sMl9sZW4gKyBwa3QtPm91dGVyX2wzX2xlbjsK Pj4gLSAgICAgICBjbXAgPSB1ZHBfY2hlY2tfbmVpZ2hib3IoJml0ZW0tPmlubmVyX2l0ZW0sIGZy YWdfb2Zmc2V0LCBpcF9kbCwKPj4gKyAgICAgICBjbXAgPSB1ZHA0X2NoZWNrX25laWdoYm9yKCZp dGVtLT5pbm5lcl9pdGVtLCBmcmFnX29mZnNldCwgaXBfZGwsCj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsMl9vZmZzZXQpOwo+PiAgICAgICAgIC8qIFZYTEFOIG91 dGVyIElQIElEIGlzIG91dCBvZiBvcmRlciwgc28gZG9uJ3QgdG91Y2ggaXQgYW5kCj4+ICAgICAg ICAgICogZG9uJ3QgY29tcGFyZSBpdC4KPj4gQEAgLTM3OSw3ICszNzksNyBAQAo+PiAgICAgICAg ICAgICAgICAgaXRlbV9pZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJsLCBwa3QsIHN0YXJ0X3RpbWUs Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCwg ZnJhZ19vZmZzZXQsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbGFzdF9m cmFnLCBvdXRlcl9pcF9pZCwgb3V0ZXJfaXNfYXRvbWljKTsKPj4gLSAgICAgICAgICAgICAgIGlm IChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQo+PiArICAgICAgICAgICAgICAgaWYg KHVubGlrZWx5KGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpKQo+PiAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4+ICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0X25l d19mbG93KHRibCwgJmtleSwgaXRlbV9pZHgpID09Cj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCkgewo+PiBAQCAtMzk3LDcgKzM5Nyw3IEBACj4+ ICAgICAgICAgY3VyX2lkeCA9IHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXg7Cj4+ICAgICAgICAg cHJldl9pZHggPSBjdXJfaWR4Owo+PiAgICAgICAgIGRvIHsKPj4gLSAgICAgICAgICAgICAgIGNt cCA9IHVkcF9jaGVja192eGxhbl9uZWlnaGJvcigmKHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+PiAr ICAgICAgICAgICAgICAgY21wID0gdWRwNF9jaGVja192eGxhbl9uZWlnaGJvcigmKHRibC0+aXRl bXNbY3VyX2lkeF0pLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdfb2Zm c2V0LCBpcF9kbCk7Cj4+ICAgICAgICAgICAgICAgICBpZiAoY21wKSB7Cj4+ICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChtZXJnZV90d29fdnhsYW5fdWRwNF9wYWNrZXRzKAo+PiBAQCAtNDM2 LDcgKzQzNiw3IEBACj4+ICAgICAgICAgICAgICAgICBpdGVtX2lkeCA9IGluc2VydF9uZXdfaXRl bSh0YmwsIHBrdCwgc3RhcnRfdGltZSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJTlZBTElEX0FSUkFZX0lOREVYLCBmcmFnX29mZnNldCwKPj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpc19sYXN0X2ZyYWcsIG91dGVyX2lwX2lkLCBvdXRlcl9pc19hdG9taWMp Owo+PiAtICAgICAgICAgICAgICAgaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgp Cj4+ICsgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoaXRlbV9pZHggPT0gSU5WQUxJRF9BUlJB WV9JTkRFWCkpCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKPj4gICAgICAg ICAgICAgICAgIHRibC0+aXRlbXNbaXRlbV9pZHhdLmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4ID0g Y3VyX2lkeDsKPj4gICAgICAgICAgICAgICAgIHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBp dGVtX2lkeDsKPj4gQEAgLTQ3MCw3ICs0NzAsNyBAQAo+PiAgICAgICAgICAgICAgICAgaXBfZGwg PSBwa3QtPnBrdF9sZW4gLSBoZHJfbGVuOwo+PiAgICAgICAgICAgICAgICAgZnJhZ19vZmZzZXQg PSB0YmwtPml0ZW1zW2l0ZW1faWR4XS5pbm5lcl9pdGVtLmZyYWdfb2Zmc2V0Owo+PiAgICAgICAg ICAgICAgICAgaXNfbGFzdF9mcmFnID0gdGJsLT5pdGVtc1tpdGVtX2lkeF0uaW5uZXJfaXRlbS5p c19sYXN0X2ZyYWc7Cj4+IC0gICAgICAgICAgICAgICBjbXAgPSB1ZHBfY2hlY2tfdnhsYW5fbmVp Z2hib3IoJih0YmwtPml0ZW1zW3N0YXJ0X2lkeF0pLAo+PiArICAgICAgICAgICAgICAgY21wID0g dWRwNF9jaGVja192eGxhbl9uZWlnaGJvcigmKHRibC0+aXRlbXNbc3RhcnRfaWR4XSksCj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnX29mZnNldCwgaXBfZGwp Owo+PiAgICAgICAgICAgICAgICAgaWYgKGNtcCkgewo+PiAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAobWVyZ2VfdHdvX3Z4bGFuX3VkcDRfcGFja2V0cygKPj4gQEAgLTQ4MSwxMiArNDgxLDEw IEBACj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCk7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGJsLT5pdGVtc1tzdGFydF9pZHhdLmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4Cj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGl0ZW1faWR4Owo+PiAtICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgICAgfSBlbHNlIHsKPj4gKyAg ICAgICAgICAgICAgIH0gZWxzZQo+PiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK Pj4gLSAgICAgICAgICAgICAgIH0KPj4gICAgICAgICB9Cj4+IAo+PiAgICAgICAgIHJldHVybiAw Owo+PiAKPj4gCj4+IEF0IDIwMjAtMDktMTEgMTI6MjQ6MTYsICJKaWF5dSBIdSIgPGppYXl1Lmh1 QGludGVsLmNvbT4gd3JvdGU6Cj4+ID5Tb21lIGNvbW1lbnRzIGFyZSBpbmxpbmUuCj4+ID4KPj4g PlRoYW5rcywKPj4gPkppYXl1Cj4+ID4KPj4gPk9uIFRodSwgU2VwIDEwLCAyMDIwIGF0IDA1OjI5 OjE0UE0gKzA4MDAsIHlhbmdfeV95aUAxNjMuY29tIHdyb3RlOgo+PiA+PiBGcm9tOiBZaSBZYW5n IDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiA+Pgo+PiA+PiBWWExBTiBVRFAgR1JPIGNhbiBoZWxw IGltcHJvdmUgVk0tdG8tVk0gVURQIHBlcmZvcm1hbmNlCj4+ID4+IHdoZW4gVk0gaXMgZW5hYmxl ZCBVRk8gb3IgR1NPLCBHUk8gbXVzdCBiZSBzdXBwb3J0ZWQgaWYKPj4gPj4gR1NPIG9yIFVGTyBp cyBlbmFibGVkLCBvdGhlcndpc2UsIHBlcmZvcm1hbmNlIGdhaW4gd2lsbAo+PiA+PiBiZSBodXJ0 Lgo+PiA+Pgo+PiA+PiBXaXRoIHRoaXMgZW5hYmxlZCBpbiBEUERLLCBPVlMgRFBESyBjYW4gbGV2 ZXJhZ2UgaXQgdG8KPj4gPj4gaW1wcm92ZSBWTS10by1WTSBVRFAgcGVyZm9ybWFuY2UsIHRoaXMg d2lsbCBtYWtlIHN1cmUKPj4gPj4gSVAgZnJhZ21lbnRzIHdpbGwgYmUgcmVhc3NlbWJsZWQgb25j ZSBpdCBpcyByZWNlaXZlZAo+PiA+PiBmcm9tIHBoeXNpY2FsIE5JQy4gSXQgaXMgdmVyeSBoZWxw ZnVsIGluIE9WUyBEUERLIFZYTEFOCj4+ID4+IFRTTyBjYXNlLgo+PiA+Pgo+PiA+PiBTaWduZWQt b2ZmLWJ5OiBZaSBZYW5nIDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiA+PiAtLS0KPj4gPj4gIGxp Yi9saWJydGVfZ3JvL2dyb191ZHA0LmggICAgICAgfCAgIDEgKwo+PiA+PiAgbGliL2xpYnJ0ZV9n cm8vZ3JvX3Z4bGFuX3VkcDQuYyB8IDU0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4+ID4+ICBsaWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5oIHwgMTUyICsr KysrKysrKysrCj4+ID4+ICBsaWIvbGlicnRlX2dyby9tZXNvbi5idWlsZCAgICAgIHwgICAyICst Cj4+ID4+ICBsaWIvbGlicnRlX2dyby9ydGVfZ3JvLmMgICAgICAgIHwgMTE1ICsrKysrKystLQo+ PiA+PiAgbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5oICAgICAgICB8ICAgMyArCj4+ID4+ICA2IGZp bGVzIGNoYW5nZWQsIDc5NCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKPj4gPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX2dyby9ncm9fdnhsYW5fdWRwNC5jCj4+ID4+ICBj cmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3VkcDQuaAo+PiA+Pgo+ PiA+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaCBiL2xpYi9saWJydGVf Z3JvL2dyb191ZHA0LmgKPj4gPj4gaW5kZXggMGEwNzhlNC4uZDM4YjM5MyAxMDA2NDQKPj4gPj4g LS0tIGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaAo+PiA+PiArKysgYi9saWIvbGlicnRlX2dy by9ncm9fdWRwNC5oCj4+ID4+IEBAIC03LDYgKzcsNyBAQAo+PiA+Pgo+PiA+PiAgI2luY2x1ZGUg PHJ0ZV9pcC5oPgo+PiA+PiAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4KPj4gPj4gKyNpbmNsdWRlIDxy dGVfdnhsYW4uaD4KPj4gPj4KPj4gPj4gICNkZWZpbmUgSU5WQUxJRF9BUlJBWV9JTkRFWCAweGZm ZmZmZmZmVUwKPj4gPj4gICNkZWZpbmUgR1JPX1VEUDRfVEJMX01BWF9JVEVNX05VTSAoMTAyNFVM ICogMTAyNFVMKQo+PiA+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3Z4bGFuX3Vk cDQuYyBiL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPj4gPj4gaW5kZXggMDAwMDAwMC4uOWU5ZGY3Mgo+PiA+PiAtLS0gL2Rldi9udWxs Cj4+ID4+ICsrKyBiL2xpYi9saWJydGVfZ3JvL2dyb192eGxhbl91ZHA0LmMKPj4gPj4gQEAgLTAs MCArMSw1NDggQEAKPj4gPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1 c2UKPj4gPj4gKyAqIENvcHlyaWdodChjKSAyMDIwIEluc3B1ciBDb3Jwb3JhdGlvbgo+PiA+PiAr ICovCj4+ID4+ICsKPj4gPj4gKwo+PiA+PiArCj4+ID4+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90 Cj4+ID4+ICtkZWxldGVfaXRlbShzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfdGJsICp0YmwsCj4+ID4+ ICsgICAgICAgICAgICB1aW50MzJfdCBpdGVtX2lkeCwKPj4gPj4gKyAgICAgICAgICAgIHVpbnQz Ml90IHByZXZfaXRlbV9pZHgpCj4+ID4+ICt7Cj4+ID4+ICsgICAgdWludDMyX3QgbmV4dF9pZHgg PSB0YmwtPml0ZW1zW2l0ZW1faWR4XS5pbm5lcl9pdGVtLm5leHRfcGt0X2lkeDsKPj4gPj4gKwo+ PiA+PiArICAgIC8qIE5VTEwgaW5kaWNhdGVzIGFuIGVtcHR5IGl0ZW0uICovCj4+ID4+ICsgICAg dGJsLT5pdGVtc1tpdGVtX2lkeF0uaW5uZXJfaXRlbS5maXJzdHNlZyA9IE5VTEw7Cj4+ID4+ICsg ICAgdGJsLT5pdGVtX251bS0tOwo+PiA+PiArICAgIGlmIChwcmV2X2l0ZW1faWR4ICE9IElOVkFM SURfQVJSQVlfSU5ERVgpCj4+ID4+ICsgICAgICAgICAgICB0YmwtPml0ZW1zW3ByZXZfaXRlbV9p ZHhdLmlubmVyX2l0ZW0ubmV4dF9wa3RfaWR4ID0gbmV4dF9pZHg7Cj4+ID4+ICsKPj4gPj4gKyAg ICByZXR1cm4gbmV4dF9pZHg7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4gK3N0YXRpYyBpbmxpbmUg dWludDMyX3QKPj4gPj4gK2luc2VydF9uZXdfZmxvdyhzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfdGJs ICp0YmwsCj4+ID4+ICsgICAgICAgICAgICBzdHJ1Y3QgdnhsYW5fdWRwNF9mbG93X2tleSAqc3Jj LAo+PiA+PiArICAgICAgICAgICAgdWludDMyX3QgaXRlbV9pZHgpCj4+ID4+ICt7Cj4+ID4+ICsg ICAgc3RydWN0IHZ4bGFuX3VkcDRfZmxvd19rZXkgKmRzdDsKPj4gPj4gKyAgICB1aW50MzJfdCBm bG93X2lkeDsKPj4gPj4gKwo+PiA+PiArICAgIGZsb3dfaWR4ID0gZmluZF9hbl9lbXB0eV9mbG93 KHRibCk7Cj4+ID4+ICsgICAgaWYgKHVubGlrZWx5KGZsb3dfaWR4ID09IElOVkFMSURfQVJSQVlf SU5ERVgpKQo+PiA+PiArICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfQVJSQVlfSU5ERVg7Cj4+ ID4+ICsKPj4gPj4gKyAgICBkc3QgPSAmKHRibC0+Zmxvd3NbZmxvd19pZHhdLmtleSk7Cj4+ID4+ ICsKPj4gPj4gKyAgICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5pbm5lcl9rZXkuZXRoX3Nh ZGRyKSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgJihkc3QtPmlubmVyX2tleS5ldGhfc2Fk ZHIpKTsKPj4gPj4gKyAgICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5pbm5lcl9rZXkuZXRo X2RhZGRyKSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgJihkc3QtPmlubmVyX2tleS5ldGhf ZGFkZHIpKTsKPj4gPj4gKyAgICBkc3QtPmlubmVyX2tleS5pcF9zcmNfYWRkciA9IHNyYy0+aW5u ZXJfa2V5LmlwX3NyY19hZGRyOwo+PiA+PiArICAgIGRzdC0+aW5uZXJfa2V5LmlwX2RzdF9hZGRy ID0gc3JjLT5pbm5lcl9rZXkuaXBfZHN0X2FkZHI7Cj4+ID4+ICsgICAgZHN0LT5pbm5lcl9rZXku aXBfaWQgPSBzcmMtPmlubmVyX2tleS5pcF9pZDsKPj4gPj4gKwo+PiA+PiArICAgIGRzdC0+dnhs YW5faGRyLnZ4X2ZsYWdzID0gc3JjLT52eGxhbl9oZHIudnhfZmxhZ3M7Cj4+ID4+ICsgICAgZHN0 LT52eGxhbl9oZHIudnhfdm5pID0gc3JjLT52eGxhbl9oZHIudnhfdm5pOwo+PiA+PiArICAgIHJ0 ZV9ldGhlcl9hZGRyX2NvcHkoJihzcmMtPm91dGVyX2V0aF9zYWRkciksICYoZHN0LT5vdXRlcl9l dGhfc2FkZHIpKTsKPj4gPj4gKyAgICBydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3JjLT5vdXRlcl9l dGhfZGFkZHIpLCAmKGRzdC0+b3V0ZXJfZXRoX2RhZGRyKSk7Cj4+ID4+ICsgICAgZHN0LT5vdXRl cl9pcF9zcmNfYWRkciA9IHNyYy0+b3V0ZXJfaXBfc3JjX2FkZHI7Cj4+ID4+ICsgICAgZHN0LT5v dXRlcl9pcF9kc3RfYWRkciA9IHNyYy0+b3V0ZXJfaXBfZHN0X2FkZHI7Cj4+ID4+ICsgICAgZHN0 LT5vdXRlcl9zcmNfcG9ydCA9IHNyYy0+b3V0ZXJfc3JjX3BvcnQ7Cj4+ID4+ICsgICAgZHN0LT5v dXRlcl9kc3RfcG9ydCA9IHNyYy0+b3V0ZXJfZHN0X3BvcnQ7Cj4+ID4+ICsKPj4gPj4gKyAgICB0 YmwtPmZsb3dzW2Zsb3dfaWR4XS5zdGFydF9pbmRleCA9IGl0ZW1faWR4Owo+PiA+PiArICAgIHRi bC0+Zmxvd19udW0rKzsKPj4gPj4gKwo+PiA+PiArICAgIHJldHVybiBmbG93X2lkeDsKPj4gPj4g K30KPj4gPj4gKwo+PiA+PiArc3RhdGljIGlubGluZSBpbnQKPj4gPj4gK2lzX3NhbWVfdnhsYW5f dWRwNF9mbG93KHN0cnVjdCB2eGxhbl91ZHA0X2Zsb3dfa2V5IGsxLAo+PiA+PiArICAgICAgICAg ICAgc3RydWN0IHZ4bGFuX3VkcDRfZmxvd19rZXkgazIpCj4+ID4+ICt7Cj4+ID4+ICsgICAgLyog c3JjIHBvcnQgaXMgY2hhbmdpbmcsIHNvIHNob3VsZG4ndCB1c2UgaXQgZm9yIGZsb3cgY2hlY2sg Ki8KPj4gPgo+PiA+QXMgSSBrbm93LCBmcmFnbWVudHMgb2YgYSB2eGxhbi91ZHAvaXB2NCBwYWNr ZXQgaGF2ZSBzYW1lIG91dGVyIHNvdXJjZQo+PiA+cG9ydC4gSW4gd2hhdCBjYXNlcyBvdXRlciBz b3VyY2UgcG9ydCB3aWxsIGNoYW5nZT8KPj4gCj4+IEluIE9WUywgdnhsYW4gdWRwIHNvdXJlIHBv cnQgaXMgY2FsY3VsYXRlZCBmcm9tIGlubmVyIHBhY2tldCBSU1MsIHNvIGZvciBVRFAgZnJhZ21l bnQsIFJTUyBvZiBmaXJzdCBwYWNrZXQgaXMKPj4gZGlmZmVyZW50IGZyb20gb3RoZXIgZnJhZ21l bnRzIGJlY2F1c2UgUlNTIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gNSB0dXBsZXMgKHNyYyBpcCwg c3JjIHBvcnQsIGRzdCBpcCwgZHN0IHBvcnQsCj4+IHByb3RvY29sIHR5cGUpLgo+PiAKPj4gb3Zz L2xpYi9uZXRkZXYtbmF0aXZlLXRubC5oOgo+PiAKPj4gc3RhdGljIGlubGluZSB1aW50MzJfdCAq Cj4+IGRwX3BhY2tldF9yc3NfcHRyKGNvbnN0IHN0cnVjdCBkcF9wYWNrZXQgKmIpCj4+IHsKPj4g ICAgIHJldHVybiBDT05TVF9DQVNUKHVpbnQzMl90ICosICZiLT5tYnVmLmhhc2gucnNzKTsKPj4g fQo+PiAKPj4gc3RhdGljIGlubGluZSB1aW50MzJfdAo+PiBkcF9wYWNrZXRfZ2V0X3Jzc19oYXNo KGNvbnN0IHN0cnVjdCBkcF9wYWNrZXQgKnApCj4+IHsKPj4gICAgIHJldHVybiAqZHBfcGFja2V0 X3Jzc19wdHIocCk7Cj4+IH0KPj4gCj4+IHN0YXRpYyBpbmxpbmUgb3ZzX2JlMTYKPj4gbmV0ZGV2 X3RubF9nZXRfc3JjX3BvcnQoc3RydWN0IGRwX3BhY2tldCAqcGFja2V0KQo+PiB7Cj4+ICAgICB1 aW50MzJfdCBoYXNoOwo+PiAKPj4gICAgIGhhc2ggPSBkcF9wYWNrZXRfZ2V0X3Jzc19oYXNoKHBh Y2tldCk7Cj4+IAo+PiAgICAgcmV0dXJuIGh0b25zKCgoKHVpbnQ2NF90KSBoYXNoICogKHRubF91 ZHBfcG9ydF9tYXggLSB0bmxfdWRwX3BvcnRfbWluKSkgPj4gMzIpICsKPj4gICAgICAgICAgICAg ICAgICB0bmxfdWRwX3BvcnRfbWluKTsKPj4gfQo+PiAKPj4gdm9pZAo+PiBuZXRkZXZfdG5sX3B1 c2hfdWRwX2hlYWRlcihjb25zdCBzdHJ1Y3QgbmV0ZGV2ICpuZXRkZXYgT1ZTX1VOVVNFRCwKPj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRwX3BhY2tldCAqcGFja2V0LAo+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2FjdGlvbl9wdXNoX3Ru bCAqZGF0YSkKPj4gewo+PiAgICAgc3RydWN0IHVkcF9oZWFkZXIgKnVkcDsKPj4gICAgIGludCBp cF90b3Rfc2l6ZTsKPj4gCj4+ICAgICB1ZHAgPSBuZXRkZXZfdG5sX3B1c2hfaXBfaGVhZGVyKHBh Y2tldCwgZGF0YS0+aGVhZGVyLCBkYXRhLT5oZWFkZXJfbGVuLCAmaXBfdG90X3NpemUpOwo+PiAK Pj4gICAgIC8qIHNldCB1ZHAgc3JjIHBvcnQgKi8KPj4gICAgIHVkcC0+dWRwX3NyYyA9IG5ldGRl dl90bmxfZ2V0X3NyY19wb3J0KHBhY2tldCk7Cj4+ICAgICB1ZHAtPnVkcF9sZW4gPSBodG9ucyhp cF90b3Rfc2l6ZSk7Cj4+IAo+PiAgICAgaWYgKHVkcC0+dWRwX2NzdW0pIHsKPj4gICAgICAgICBu ZXRkZXZfdG5sX2NhbGNfdWRwX2NzdW0odWRwLCBwYWNrZXQsIGlwX3RvdF9zaXplKTsKPj4gICAg IH0KPj4gfQo+PiAKPj4gVGhpcyBpcyBzcGVjaWFsIGZvciBFQ01QIHdoaWNoIG9ubHkgY2hlY2tz IG91dGVyIGhlYWRlciB0byBkaWZmZXJlbnRpYXRlIGRpZmZlcmVudCBmbG93cyAoaW5ubmVyIHBh Y2tldCkuIFRoZQo+PiBmaXJzdCBmcmFnbWVudCBvZiBvcmlnaW5hbCBpbm5lciBVRFAgaXMgY29u c2lkZXJlZCBhcyBkaWZmZXJlbnQgZmxvdyBmcm9tIG90aGVyIGZyYWdtZW50cy4KPj4gCj4+IEkg Zm91bmQgdGhpcyBieSBkZWJ1Z2dpbmcgYmVjdWFzZSB0aGUgc2FtZSBVRFAgdHJhZmZpYyBkaWQg Z2VuZXJhdGUgZGlmZmVyZW50IHZ4bGFuIFVEUCBzb3VyY2UgcG9ydC4KPj4gCj4KPllvdSBhcmUg cmlnaHQuIEkgY2hlY2tlZCBWeExBTiBSRkMgNzM0OCwgYW5kIG91dGVyIHNvdXJjZSBwb3J0IGlz Cj5jYWxjdWxhdGVkIGZyb20gaW5uZXIgcGFja2V0LiBJbiBPVlMgY2FzZSwgdGhlIGZpcnN0IGZy YWdtZW50Cj53aWxsIGhhdmUgZGlmZmVyZW50IG91dGVyIHNvdXJjZSBwb3J0IGNvbXBhcmVkIHdp dGggb3RoZXIgZnJhZ21lbnRzLgo+UGxlYXNlIGFkZCBzb21lIGNvbW1lbnRzIGluIHRoZSBjb2Rl IGZvciBwZW9wbGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQKPnRoZSBjb2RlLiBJbiBhZGRpdGlvbiwg bmVlZCB0byByZW1vdmUgb3V0ZXJfc3JjX3BvcnQgZnJvbSB0aGUgc3RydWN0dXJlCj52eGxhbl91 ZHA0X2Zsb3dfa2V5Lgo+Cj4+ID4KPj4gPj4gKyAgICByZXR1cm4gKHJ0ZV9pc19zYW1lX2V0aGVy X2FkZHIoJmsxLm91dGVyX2V0aF9zYWRkciwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZrMi5vdXRlcl9ldGhfc2FkZHIpICYmCj4+ID4+ICsgICAgICAgICAgICAg ICAgICAgIHJ0ZV9pc19zYW1lX2V0aGVyX2FkZHIoJmsxLm91dGVyX2V0aF9kYWRkciwKPj4gPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmazIub3V0ZXJfZXRoX2RhZGRyKSAmJgo+PiA+ PiArICAgICAgICAgICAgICAgICAgICAoazEub3V0ZXJfaXBfc3JjX2FkZHIgPT0gazIub3V0ZXJf aXBfc3JjX2FkZHIpICYmCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIChrMS5vdXRlcl9pcF9k c3RfYWRkciA9PSBrMi5vdXRlcl9pcF9kc3RfYWRkcikgJiYKPj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgKGsxLm91dGVyX2RzdF9wb3J0ID09IGsyLm91dGVyX2RzdF9wb3J0KSAmJgo+PiA+PiAr ICAgICAgICAgICAgICAgICAgICAoazEudnhsYW5faGRyLnZ4X2ZsYWdzID09IGsyLnZ4bGFuX2hk ci52eF9mbGFncykgJiYKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgKGsxLnZ4bGFuX2hkci52 eF92bmkgPT0gazIudnhsYW5faGRyLnZ4X3ZuaSkgJiYKPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgaXNfc2FtZV91ZHA0X2Zsb3coazEuaW5uZXJfa2V5LCBrMi5pbm5lcl9rZXkpKTsKPj4gPj4g K30KPj4gPj4gKwo+PiA+PiArc3RhdGljIGlubGluZSBpbnQKPj4gPj4gK3VkcF9jaGVja192eGxh bl9uZWlnaGJvcihzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfaXRlbSAqaXRlbSwKPj4gPj4gKyAgICAg ICAgICAgIHVpbnQxNl90IGZyYWdfb2Zmc2V0LAo+PiA+PiArICAgICAgICAgICAgdWludDE2X3Qg aXBfZGwpCj4+ID4KPj4gPkJldHRlciByZW5hbWUgaXQgYXMgdWRwNF9jaGVja192eGxhbl9uZWln aGJvci4KPj4gCj4+IE9rCj4+IAo+PiA+Cj4+ID4+ICt7Cj4+ID4+ICsgICAgc3RydWN0IHJ0ZV9t YnVmICpwa3QgPSBpdGVtLT5pbm5lcl9pdGVtLmZpcnN0c2VnOwo+PiA+PiArICAgIGludCBjbXA7 Cj4+ID4+ICsgICAgdWludDE2X3QgbDJfb2Zmc2V0Owo+PiA+PiArICAgIGludCByZXQgPSAwOwo+ PiA+PiArCj4+ID4+ICsgICAgbDJfb2Zmc2V0ID0gcGt0LT5vdXRlcl9sMl9sZW4gKyBwa3QtPm91 dGVyX2wzX2xlbjsKPj4gPj4gKyAgICBjbXAgPSB1ZHBfY2hlY2tfbmVpZ2hib3IoJml0ZW0tPmlu bmVyX2l0ZW0sIGZyYWdfb2Zmc2V0LCBpcF9kbCwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGwyX29mZnNldCk7Cj4+ID4KPj4gPldoeSBkb24ndCBjaGVjayBvdXRl ciBJUCBJRD8gSWYgb3V0ZXIgREYgYml0IGlzIG5vdCBzZXQsIGFsbCBmcmFnbWVudHMKPj4gPnNo b3VsZCBoYXZlIGluY3JlbWVudGFsIG91dGVyIElQIElEOyBpZiBERiBiaXQgaXMgc2V0LCB3ZSBk b24ndCBuZWVkCj4+ID50byBjaGVjayBvdXRlciBJUCBJRC4KPj4gCj4+IEJ5IGRlZmF1bHQsIE9W UyBzZXQgREYgZmxhZy4gSSBkb24ndCB0aGluayB3ZSBuZWVkIHRvIGNvbXBhcmUgb3V0ZXIgSVAg aWQgYmVjYXVzZSBpbm5lciBjaGVjawo+PiBpcyBlbm91Z2ggdG8gZGlmZmVyZW50aWF0ZSBpZiB0 aGV5IGFyZSBzYW1lIGZsb3csIGlzbid0IGl0Pwo+Cj5PVlMgaXMgb25lIG9mIHdvcmtsb2FkcyB1 c2luZyBEUERLLCBhbmQgd2UgY2FuIGFzc3VtZQo+b3RoZXIgY2FzZXMgaGF2ZSB0aGUgc2FtZSBk ZXNpZ24gYXMgT1ZTLiBJIHRoaW5rIElQIElECj5jaGVjayBpcyBuZWNlc3NhcnkuCj4KPj4gCj4+ ID4KPj4gPkluIGFkZGl0aW9uLCB1ZHBfY2hlY2tfbmVpZ2hib3IgaXMgcmVuYW1lZCwgYnV0IHlv dSBkaWRuJ3QgY2hhbmdlIGhlcmUuCj4+IAo+PiBGb3Jnb3QgdG8gYnVpbGQgaXQsIE1ha2VmaWxl IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBkcGRrIG1haW4gYnJhbmNoLCBidWlsZCBpc24ndCBzbyBj b252aW5pZW50LCB3aWxsCj4+IHVzZSBtZXNvbiBidWlsZCB0byBjaGVjayBpdCBmb3IgbmV4dCB2 ZXJzaW9uLgo+PiAKPj4gPgo+PiA+PiArICAgIC8qIFZYTEFOIG91dGVyIElQIElEIGlzIG91dCBv ZiBvcmRlciwgc28gZG9uJ3QgdG91Y2ggaXQgYW5kCj4+ID4+ICsgICAgICogZG9uJ3QgY29tcGFy ZSBpdC4KPj4gPj4gKyAgICAgKi8KPj4gPj4gKyAgICBpZiAoY21wID4gMCkKPj4gPj4gKyAgICAg ICAgICAgIC8qIEFwcGVuZCB0aGUgbmV3IHBhY2tldC4gKi8KPj4gPj4gKyAgICAgICAgICAgIHJl dCA9IDE7Cj4+ID4+ICsgICAgZWxzZSBpZiAoY21wIDwgMCkKPj4gPj4gKyAgICAgICAgICAgIC8q IFByZXBlbmQgdGhlIG5ldyBwYWNrZXQuICovCj4+ID4+ICsgICAgICAgICAgICByZXQgPSAtMTsK Pj4gPj4gKwo+PiA+PiArICAgIHJldHVybiByZXQ7Cj4+ID4+ICt9Cj4+ID4+ICsKPj4gPj4KPj4g Pj4gIC8qCj4+ID4+ICAgKiBHUk8gY29udGV4dCBzdHJ1Y3R1cmUuIEl0IGtlZXBzIHRoZSB0YWJs ZSBzdHJ1Y3R1cmVzLCB3aGljaCBhcmUKPj4gPj4gQEAgLTEzNywxOSArMTQ4LDI3IEBAIHN0cnVj dCBncm9fY3R4IHsKPj4gPj4gICAgICBzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSB1ZHBfaXRlbXNbUlRF X0dST19NQVhfQlVSU1RfSVRFTV9OVU1dID0ge3swfSB9Owo+PiA+Pgo+PiA+PiAgICAgIC8qIEFs bG9jYXRlIGEgcmVhc3NlbWJseSB0YWJsZSBmb3IgVlhMQU4gVENQIEdSTyAqLwo+PiA+PiAtICAg IHN0cnVjdCBncm9fdnhsYW5fdGNwNF90YmwgdnhsYW5fdGJsOwo+PiA+PiAtICAgIHN0cnVjdCBn cm9fdnhsYW5fdGNwNF9mbG93IHZ4bGFuX2Zsb3dzW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVN XTsKPj4gPj4gLSAgICBzdHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRfaXRlbSB2eGxhbl9pdGVtc1tSVEVf R1JPX01BWF9CVVJTVF9JVEVNX05VTV0KPj4gPj4gKyAgICBzdHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRf dGJsIHZ4bGFuX3RjcF90Ymw7Cj4+ID4+ICsgICAgc3RydWN0IGdyb192eGxhbl90Y3A0X2Zsb3cg dnhsYW5fdGNwX2Zsb3dzW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXTsKPj4gPj4gKyAgICBz dHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRfaXRlbSB2eGxhbl90Y3BfaXRlbXNbUlRFX0dST19NQVhfQlVS U1RfSVRFTV9OVU1dCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgID0ge3t7MH0sIDAsIDB9IH07 Cj4+ID4+ICsKPj4gPj4gKyAgICAvKiBBbGxvY2F0ZSBhIHJlYXNzZW1ibHkgdGFibGUgZm9yIFZY TEFOIFVEUCBHUk8gKi8KPj4gPj4gKyAgICBzdHJ1Y3QgZ3JvX3Z4bGFuX3VkcDRfdGJsIHZ4bGFu X3VkcF90Ymw7Cj4+ID4+ICsgICAgc3RydWN0IGdyb192eGxhbl91ZHA0X2Zsb3cgdnhsYW5fdWRw X2Zsb3dzW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXTsKPj4gPj4gKyAgICBzdHJ1Y3QgZ3Jv X3Z4bGFuX3VkcDRfaXRlbSB2eGxhbl91ZHBfaXRlbXNbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9O VU1dCj4+ID4+ICAgICAgICAgICAgICAgICAgICAgID0ge3t7MH0sIDAsIDB9IH07Cj4+ID4+Cj4+ ID4+ICAgICAgc3RydWN0IHJ0ZV9tYnVmICp1bnByb2Nlc3NfcGt0c1tuYl9wa3RzXTsKPj4gPj4g ICAgICB1aW50MzJfdCBpdGVtX251bTsKPj4gPj4gICAgICBpbnQzMl90IHJldDsKPj4gPj4gICAg ICB1aW50MTZfdCBpLCB1bnByb2Nlc3NfbnVtID0gMCwgbmJfYWZ0ZXJfZ3JvID0gbmJfcGt0czsK Pj4gPj4gLSAgICB1aW50OF90IGRvX3RjcDRfZ3JvID0gMCwgZG9fdnhsYW5fZ3JvID0gMCwgZG9f dWRwNF9ncm8gPSAwOwo+PiA+PiArICAgIHVpbnQ4X3QgZG9fdGNwNF9ncm8gPSAwLCBkb192eGxh bl90Y3BfZ3JvID0gMCwgZG9fdWRwNF9ncm8gPSAwLAo+PiA+PiArICAgICAgICAgICAgZG9fdnhs YW5fdWRwX2dybyA9IDA7Cj4+ID4+Cj4+ID4+ICAgICAgaWYgKHVubGlrZWx5KChwYXJhbS0+Z3Jv X3R5cGVzICYgKFJURV9HUk9fSVBWNF9WWExBTl9UQ1BfSVBWNCB8Cj4+ID4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfR1JPX1RDUF9JUFY0IHwKPj4gPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBW NCB8Cj4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfR1JPX1VE UF9JUFY0KSkgPT0gMCkpCj4+ID4+ICAgICAgICAgICAgICByZXR1cm4gbmJfcGt0czsKPj4gPj4K Pj4gPj4gQEAgLTE2MCwxNSArMTc5LDI4IEBAIHN0cnVjdCBncm9fY3R4IHsKPj4gPj4KPj4gPj4g ICAgICBpZiAocGFyYW0tPmdyb190eXBlcyAmIFJURV9HUk9fSVBWNF9WWExBTl9UQ1BfSVBWNCkg ewo+PiA+PiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1fbnVtOyBpKyspCj4+ID4+ IC0gICAgICAgICAgICAgICAgICAgIHZ4bGFuX2Zsb3dzW2ldLnN0YXJ0X2luZGV4ID0gSU5WQUxJ RF9BUlJBWV9JTkRFWDsKPj4gPj4gLQo+PiA+PiAtICAgICAgICAgICAgdnhsYW5fdGJsLmZsb3dz ID0gdnhsYW5fZmxvd3M7Cj4+ID4+IC0gICAgICAgICAgICB2eGxhbl90YmwuaXRlbXMgPSB2eGxh bl9pdGVtczsKPj4gPj4gLSAgICAgICAgICAgIHZ4bGFuX3RibC5mbG93X251bSA9IDA7Cj4+ID4+ IC0gICAgICAgICAgICB2eGxhbl90YmwuaXRlbV9udW0gPSAwOwo+PiA+PiAtICAgICAgICAgICAg dnhsYW5fdGJsLm1heF9mbG93X251bSA9IGl0ZW1fbnVtOwo+PiA+PiAtICAgICAgICAgICAgdnhs YW5fdGJsLm1heF9pdGVtX251bSA9IGl0ZW1fbnVtOwo+PiA+PiAtICAgICAgICAgICAgZG9fdnhs YW5fZ3JvID0gMTsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgdnhsYW5fdGNwX2Zsb3dzW2ld LnN0YXJ0X2luZGV4ID0gSU5WQUxJRF9BUlJBWV9JTkRFWDsKPj4gPj4gKwo+PiA+PiArICAgICAg ICAgICAgdnhsYW5fdGNwX3RibC5mbG93cyA9IHZ4bGFuX3RjcF9mbG93czsKPj4gPj4gKyAgICAg ICAgICAgIHZ4bGFuX3RjcF90YmwuaXRlbXMgPSB2eGxhbl90Y3BfaXRlbXM7Cj4+ID4+ICsgICAg ICAgICAgICB2eGxhbl90Y3BfdGJsLmZsb3dfbnVtID0gMDsKPj4gPj4gKyAgICAgICAgICAgIHZ4 bGFuX3RjcF90YmwuaXRlbV9udW0gPSAwOwo+PiA+PiArICAgICAgICAgICAgdnhsYW5fdGNwX3Ri bC5tYXhfZmxvd19udW0gPSBpdGVtX251bTsKPj4gPj4gKyAgICAgICAgICAgIHZ4bGFuX3RjcF90 YmwubWF4X2l0ZW1fbnVtID0gaXRlbV9udW07Cj4+ID4+ICsgICAgICAgICAgICBkb192eGxhbl90 Y3BfZ3JvID0gMTsKPj4gPj4gKyAgICB9Cj4+ID4+ICsKPj4gPj4gKyAgICBpZiAocGFyYW0tPmdy b190eXBlcyAmIFJURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBWNCkgewo+PiA+PiArICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IGl0ZW1fbnVtOyBpKyspCj4+ID4+ICsgICAgICAgICAgICAgICAg ICAgIHZ4bGFuX3VkcF9mbG93c1tpXS5zdGFydF9pbmRleCA9IElOVkFMSURfQVJSQVlfSU5ERVg7 Cj4+ID4+ICsKPj4gPj4gKyAgICAgICAgICAgIHZ4bGFuX3VkcF90YmwuZmxvd3MgPSB2eGxhbl91 ZHBfZmxvd3M7Cj4+ID4+ICsgICAgICAgICAgICB2eGxhbl91ZHBfdGJsLml0ZW1zID0gdnhsYW5f dWRwX2l0ZW1zOwo+PiA+PiArICAgICAgICAgICAgdnhsYW5fdWRwX3RibC5mbG93X251bSA9IDA7 Cj4+ID4+ICsgICAgICAgICAgICB2eGxhbl91ZHBfdGJsLml0ZW1fbnVtID0gMDsKPj4gPj4gKyAg ICAgICAgICAgIHZ4bGFuX3VkcF90YmwubWF4X2Zsb3dfbnVtID0gaXRlbV9udW07Cj4+ID4+ICsg ICAgICAgICAgICB2eGxhbl91ZHBfdGJsLm1heF9pdGVtX251bSA9IGl0ZW1fbnVtOwo+PiA+PiAr ICAgICAgICAgICAgZG9fdnhsYW5fdWRwX2dybyA9IDE7Cj4+ID4+ICAgICAgfQo+PiA+Pgo+PiA+ PiAgICAgIGlmIChwYXJhbS0+Z3JvX3R5cGVzICYgUlRFX0dST19UQ1BfSVBWNCkgewo+PiA+PiBA QCAtMjA0LDkgKzIzNiwxOCBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ID4+ICAgICAgICAgICAgICAg KiB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgdGFibGVzLgo+PiA+PiAgICAgICAgICAgICAgICov Cj4+ID4+ICAgICAgICAgICAgICBpZiAoSVNfSVBWNF9WWExBTl9UQ1A0X1BLVChwa3RzW2ldLT5w YWNrZXRfdHlwZSkgJiYKPj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192eGxh bl9ncm8pIHsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192eGxhbl90Y3Bf Z3JvKSB7Cj4+ID4+ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGdyb192eGxhbl90Y3A0X3Jl YXNzZW1ibGUocGt0c1tpXSwKPj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmdnhsYW5fdGJsLCAwKTsKPj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnhsYW5fdGNwX3RibCwgMCk7 Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPiAwKQo+PiA+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1lcmdlIHN1Y2Nlc3NmdWxseSAqLwo+PiA+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5iX2FmdGVyX2dyby0tOwo+PiA+PiArICAgICAgICAgICAg ICAgICAgICBlbHNlIGlmIChyZXQgPCAwKQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19udW0rK10gPSBwa3RzW2ldOwo+PiA+PiArICAg ICAgICAgICAgfSBlbHNlIGlmIChJU19JUFY0X1ZYTEFOX1VEUDRfUEtUKHBrdHNbaV0tPnBhY2tl dF90eXBlKSAmJgo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3Z4bGFuX3Vk cF9ncm8pIHsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gZ3JvX3Z4bGFuX3VkcDRf cmVhc3NlbWJsZShwa3RzW2ldLAo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ2eGxhbl91ZHBfdGJsLCAwKTsKPj4gPj4gICAgICAgICAg ICAgICAgICAgICAgaWYgKHJldCA+IDApCj4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTWVyZ2Ugc3VjY2Vzc2Z1bGx5ICovCj4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmJfYWZ0ZXJfZ3JvLS07Cj4+ID4+IEBAIC0yMzYsMTEgKzI3NywxNyBAQCBzdHJ1Y3Qg Z3JvX2N0eCB7Cj4+ID4+ICAgICAgICAgICAgICAgfHwgKHVucHJvY2Vzc19udW0gPCBuYl9wa3Rz KSkgewo+PiA+PiAgICAgICAgICAgICAgaSA9IDA7Cj4+ID4+ICAgICAgICAgICAgICAvKiBGbHVz aCBhbGwgcGFja2V0cyBmcm9tIHRoZSB0YWJsZXMgKi8KPj4gPj4gLSAgICAgICAgICAgIGlmIChk b192eGxhbl9ncm8pIHsKPj4gPj4gLSAgICAgICAgICAgICAgICAgICAgaSA9IGdyb192eGxhbl90 Y3A0X3RibF90aW1lb3V0X2ZsdXNoKCZ2eGxhbl90YmwsCj4+ID4+ICsgICAgICAgICAgICBpZiAo ZG9fdnhsYW5fdGNwX2dybykgewo+PiA+PiArICAgICAgICAgICAgICAgICAgICBpID0gZ3JvX3Z4 bGFuX3RjcDRfdGJsX3RpbWVvdXRfZmx1c2goJnZ4bGFuX3RjcF90YmwsCj4+ID4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwa3RzLCBuYl9wa3RzKTsKPj4gPj4gICAg ICAgICAgICAgIH0KPj4gPj4KPj4gPj4gKyAgICAgICAgICAgIGlmIChkb192eGxhbl91ZHBfZ3Jv KSB7Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgIGkgKz0gZ3JvX3Z4bGFuX3VkcDRfdGJsX3Rp bWVvdXRfZmx1c2goJnZ4bGFuX3VkcF90YmwsCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLCAmcGt0c1tpXSwgbmJfcGt0cyAtIGkpOwo+PiA+PiArCj4+ID4+ICsg ICAgICAgICAgICB9Cj4+ID4+ICsKPj4gPj4gICAgICAgICAgICAgIGlmIChkb190Y3A0X2dybykg ewo+PiA+PiAgICAgICAgICAgICAgICAgICAgICBpICs9IGdyb190Y3A0X3RibF90aW1lb3V0X2Zs dXNoKCZ0Y3BfdGJsLCAwLAo+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnBrdHNbaV0sIG5iX3BrdHMgLSBpKTsKPj4gPj4gQEAgLTI2OSwzMyArMzE2LDQyIEBAIHN0 cnVjdCBncm9fY3R4IHsKPj4gPj4gIHsKPj4gPj4gICAgICBzdHJ1Y3QgcnRlX21idWYgKnVucHJv Y2Vzc19wa3RzW25iX3BrdHNdOwo+PiA+PiAgICAgIHN0cnVjdCBncm9fY3R4ICpncm9fY3R4ID0g Y3R4Owo+PiA+PiAtICAgIHZvaWQgKnRjcF90YmwsICp1ZHBfdGJsLCAqdnhsYW5fdGJsOwo+PiA+ PiArICAgIHZvaWQgKnRjcF90YmwsICp1ZHBfdGJsLCAqdnhsYW5fdGNwX3RibCwgKnZ4bGFuX3Vk cF90Ymw7Cj4+ID4+ICAgICAgdWludDY0X3QgY3VycmVudF90aW1lOwo+PiA+PiAgICAgIHVpbnQx Nl90IGksIHVucHJvY2Vzc19udW0gPSAwOwo+PiA+PiAtICAgIHVpbnQ4X3QgZG9fdGNwNF9ncm8s IGRvX3Z4bGFuX2dybywgZG9fdWRwNF9ncm87Cj4+ID4+ICsgICAgdWludDhfdCBkb190Y3A0X2dy bywgZG9fdnhsYW5fdGNwX2dybywgZG9fdWRwNF9ncm8sIGRvX3Z4bGFuX3VkcF9ncm87Cj4+ID4+ Cj4+ID4+ICAgICAgaWYgKHVubGlrZWx5KChncm9fY3R4LT5ncm9fdHlwZXMgJiAoUlRFX0dST19J UFY0X1ZYTEFOX1RDUF9JUFY0IHwKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJURV9HUk9fVENQX0lQVjQgfAo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUlRFX0dST19JUFY0X1ZYTEFOX1VEUF9JUFY0IHwKPj4gPj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9HUk9fVURQX0lQVjQpKSA9PSAwKSkKPj4g Pj4gICAgICAgICAgICAgIHJldHVybiBuYl9wa3RzOwo+PiA+Pgo+PiA+PiAgICAgIHRjcF90Ymwg PSBncm9fY3R4LT50YmxzW1JURV9HUk9fVENQX0lQVjRfSU5ERVhdOwo+PiA+PiAtICAgIHZ4bGFu X3RibCA9IGdyb19jdHgtPnRibHNbUlRFX0dST19JUFY0X1ZYTEFOX1RDUF9JUFY0X0lOREVYXTsK Pj4gPj4gKyAgICB2eGxhbl90Y3BfdGJsID0gZ3JvX2N0eC0+dGJsc1tSVEVfR1JPX0lQVjRfVlhM QU5fVENQX0lQVjRfSU5ERVhdOwo+PiA+PiAgICAgIHVkcF90YmwgPSBncm9fY3R4LT50YmxzW1JU RV9HUk9fVURQX0lQVjRfSU5ERVhdOwo+PiA+PiArICAgIHZ4bGFuX3VkcF90YmwgPSBncm9fY3R4 LT50YmxzW1JURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBWNF9JTkRFWF07Cj4+ID4+Cj4+ID4+ICAg ICAgZG9fdGNwNF9ncm8gPSAoZ3JvX2N0eC0+Z3JvX3R5cGVzICYgUlRFX0dST19UQ1BfSVBWNCkg PT0KPj4gPj4gICAgICAgICAgICAgIFJURV9HUk9fVENQX0lQVjQ7Cj4+ID4+IC0gICAgZG9fdnhs YW5fZ3JvID0gKGdyb19jdHgtPmdyb190eXBlcyAmIFJURV9HUk9fSVBWNF9WWExBTl9UQ1BfSVBW NCkgPT0KPj4gPj4gKyAgICBkb192eGxhbl90Y3BfZ3JvID0gKGdyb19jdHgtPmdyb190eXBlcyAm IFJURV9HUk9fSVBWNF9WWExBTl9UQ1BfSVBWNCkgPT0KPj4gPj4gICAgICAgICAgICAgIFJURV9H Uk9fSVBWNF9WWExBTl9UQ1BfSVBWNDsKPj4gPj4gICAgICBkb191ZHA0X2dybyA9IChncm9fY3R4 LT5ncm9fdHlwZXMgJiBSVEVfR1JPX1VEUF9JUFY0KSA9PQo+PiA+PiAgICAgICAgICAgICAgUlRF X0dST19VRFBfSVBWNDsKPj4gPj4gKyAgICBkb192eGxhbl91ZHBfZ3JvID0gKGdyb19jdHgtPmdy b190eXBlcyAmIFJURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBWNCkgPT0KPj4gPj4gKyAgICAgICAg ICAgIFJURV9HUk9fSVBWNF9WWExBTl9VRFBfSVBWNDsKPj4gPj4KPj4gPj4gICAgICBjdXJyZW50 X3RpbWUgPSBydGVfcmR0c2MoKTsKPj4gPj4KPj4gPj4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmJf cGt0czsgaSsrKSB7Cj4+ID4+ICAgICAgICAgICAgICBpZiAoSVNfSVBWNF9WWExBTl9UQ1A0X1BL VChwa3RzW2ldLT5wYWNrZXRfdHlwZSkgJiYKPj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkb192eGxhbl9ncm8pIHsKPj4gPj4gLSAgICAgICAgICAgICAgICAgICAgaWYgKGdyb192 eGxhbl90Y3A0X3JlYXNzZW1ibGUocGt0c1tpXSwgdnhsYW5fdGJsLAo+PiA+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvX3Z4bGFuX3RjcF9ncm8pIHsKPj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgaWYgKGdyb192eGxhbl90Y3A0X3JlYXNzZW1ibGUocGt0c1tpXSwgdnhsYW5fdGNw X3RibCwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3VycmVudF90aW1lKSA8IDApCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5w cm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07Cj4+ID4+ICsgICAgICAgICAg ICB9IGVsc2UgaWYgKElTX0lQVjRfVlhMQU5fVURQNF9QS1QocGt0c1tpXS0+cGFja2V0X3R5cGUp ICYmCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdnhsYW5fdWRwX2dybykg ewo+PiA+PiArICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvX3Z4bGFuX3VkcDRfcmVhc3NlbWJs ZShwa3RzW2ldLCB2eGxhbl91ZHBfdGJsLAo+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3RpbWUpIDwgMCkKPj4gPj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tp XTsKPj4gPj4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoSVNfSVBWNF9UQ1BfUEtUKHBrdHNbaV0t PnBhY2tldF90eXBlKSAmJgo+PiA+PiBAQCAtMzQxLDYgKzM5NywxMyBAQCBzdHJ1Y3QgZ3JvX2N0 eCB7Cj4+ID4+ICAgICAgICAgICAgICBsZWZ0X25iX291dCA9IG1heF9uYl9vdXQgLSBudW07Cj4+ ID4+ICAgICAgfQo+PiA+Pgo+PiA+PiArICAgIGlmICgoZ3JvX3R5cGVzICYgUlRFX0dST19JUFY0 X1ZYTEFOX1VEUF9JUFY0KSAmJiBtYXhfbmJfb3V0ID4gMCkgewo+PiA+PiArICAgICAgICAgICAg bnVtICs9IGdyb192eGxhbl91ZHA0X3RibF90aW1lb3V0X2ZsdXNoKGdyb19jdHgtPnRibHNbCj4+ ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0dST19JUFY0X1ZYTEFOX1VEUF9J UFY0X0lOREVYXSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaF90aW1l c3RhbXAsICZvdXRbbnVtXSwgbGVmdF9uYl9vdXQpOwo+PiA+PiArICAgICAgICAgICAgbGVmdF9u Yl9vdXQgPSBtYXhfbmJfb3V0IC0gbnVtOwo+PiA+Cj4+ID5Eb24ndCBuZWVkIHRvIGNhbGN1bGF0 ZSBsZWZ0X25iX291dCBoZXJlLiBJbiB0aGUgcHJldmlvdXMgcGF0Y2gsIHlvdQo+PiA+YWxzbyBj YWxjdWxhdGUgaXQgZm9yIFVEUCBHUk8uIFBsZWFzZSByZW1vdmUgaXQgYm90aC4KPj4gCj4+IEkg dGhpbmsga2VlcGluZyBpdCBoZXJlIGlzbid0IGJhZCB0aGluZywgaWYgc29tZW9uZSB3aWxsIGFk ZCBhIG5ldyBHUk8gdHlwZSBoZXJlLCBoZS9zaGUgd29uJ3QgbWFrZSBhIG1pc3Rha2UuCj4KPkkg ZG9uJ3QgdGhpbmsgc28uIEl0J3MgdW5uZWNlc3NhcnkgZm9yIGN1cnJlbnQgZGVzaWduLgo+SWYg b3RoZXJzIHdhbnQgdG8gYWRkIG5ldyBHUk8gdHlwZXMsIHRoZXkgd2lsbCB3cml0ZQo+Y29ycmVj dCBjb2RlLgo+Cj4+IAo+PiA+Cj4+IAo+PiAKPj4gCj4+ICAKPj4gCg==