Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Dec 2011 14:47:13 -0600
From:      Alan Cox <alc@rice.edu>
To:        Sean Bruno <seanbru@yahoo-inc.com>
Cc:        "xen@freebsd.org" <xen@freebsd.org>
Subject:   Re: PV i386 patch
Message-ID:  <4EF245D1.2050503@rice.edu>
In-Reply-To: <1324412718.12783.10.camel@hitfishpass-lx.corp.yahoo.com>
References:  <4EEB9CCE.6090701@rice.edu> <1324169806.3093.3.camel@hitfishpass-lx.corp.yahoo.com> <4EED4982.3080208@freebsd.org> <1324339762.3093.14.camel@hitfishpass-lx.corp.yahoo.com> <4EF04F3C.9010309@rice.edu> <1324387685.3093.28.camel@hitfishpass-lx.corp.yahoo.com> <4EF0D8D7.2060503@rice.edu> <4EF0EC1A.4010604@freebsd.org> <1324412718.12783.10.camel@hitfishpass-lx.corp.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------010503070403030001090606
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Can you please try the attached patch?  I'm trying to reduce the number 
of differences between the native and Xen pmap implementations.

Alan


--------------010503070403030001090606
Content-Type: text/plain;
 name="native_vs_xen.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="native_vs_xen.diff"

LS0tIGkzODYvaTM4Ni9wbWFwLmMJMjAxMS0xMi0yMSAxMzowNDoxNy4wMDAwMDAwMDAgLTA2
MDAKKysrIGkzODYveGVuL3BtYXAuYwkyMDExLTEyLTIxIDEzOjA0OjQ4LjAwMDAwMDAwMCAt
MDYwMApAQCAtNSw3ICs1LDcgQEAKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKGMpIDE5OTQgRGF2aWQgR3JlZW5tYW4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCBBbGFuIEwuIENveCA8YWxjQGNzLnJpY2Uu
ZWR1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IEFsYW4gTC4gQ294IDxhbGNAY3MucmljZS5l
ZHU+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29kZSBpcyBkZXJp
dmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKQEAgLTc1LDcg
Kzc1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZy
ZWVCU0Q6IGhlYWQvc3lzL2kzODYvaTM4Ni9wbWFwLmMgMjI4NTEzIDIwMTEtMTItMTQgMjM6
NTc6NDdaIGFsYyAkIik7CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL2kzODYveGVu
L3BtYXAuYyAyMjg3NDYgMjAxMS0xMi0yMCAyMDoxNjoxMlogYWxjICQiKTsKIAogLyoKICAq
CU1hbmFnZXMgcGh5c2ljYWwgYWRkcmVzcyBtYXBzLgpAQCAtMTM4LDcgKzEzOCw2IEBACiAj
aW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CiAjaW5jbHVkZSA8dm0vdm1fcGFnZW91dC5oPgog
I2luY2x1ZGUgPHZtL3ZtX3BhZ2VyLmg+Ci0jaW5jbHVkZSA8dm0vdm1fcmVzZXJ2Lmg+CiAj
aW5jbHVkZSA8dm0vdW1hLmg+CiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPgpAQCAtMTU0
LDYgKzE1MywxMiBAQAogI2luY2x1ZGUgPG1hY2hpbmUveGJveC5oPgogI2VuZGlmCiAKKyNp
bmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9oeXBlcnZpc29y
Lmg+CisjaW5jbHVkZSA8bWFjaGluZS94ZW4vaHlwZXJjYWxsLmg+CisjaW5jbHVkZSA8bWFj
aGluZS94ZW4veGVudmFyLmg+CisjaW5jbHVkZSA8bWFjaGluZS94ZW4veGVuZnVuYy5oPgor
CiAjaWYgIWRlZmluZWQoQ1BVX0RJU0FCTEVfU1NFKSAmJiBkZWZpbmVkKEk2ODZfQ1BVKQog
I2RlZmluZSBDUFVfRU5BQkxFX1NTRQogI2VuZGlmCkBAIC0xNjIsNiArMTY3LDggQEAKICNk
ZWZpbmUgUE1BUF9TSFBHUEVSUFJPQyAyMDAKICNlbmRpZgogCisjZGVmaW5lIERJQUdOT1NU
SUMKKwogI2lmICFkZWZpbmVkKERJQUdOT1NUSUMpCiAjaWZkZWYgX19HTlVDX0dOVV9JTkxJ
TkVfXwogI2RlZmluZSBQTUFQX0lOTElORQlfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVf
XykpIGlubGluZQpAQCAtMTc5LDkgKzE4Niw2IEBACiAjZGVmaW5lIFBWX1NUQVQoeCkJZG8g
eyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUJcGFfaW5kZXgocGEpCSgocGEpID4+
IFBEUlNISUZUKQotI2RlZmluZQlwYV90b19wdmgocGEpCSgmcHZfdGFibGVbcGFfaW5kZXgo
cGEpXSkKLQogLyoKICAqIEdldCBQREVzIGFuZCBQVEVzIGZvciB1c2VyL2tlcm5lbCBhZGRy
ZXNzIHNwYWNlCiAgKi8KQEAgLTE5NCwxMCArMTk4LDEzIEBACiAjZGVmaW5lIHBtYXBfcHRl
X3UocHRlKQkJKCgqKGludCAqKXB0ZSAmIFBHX0EpICE9IDApCiAjZGVmaW5lIHBtYXBfcHRl
X3YocHRlKQkJKCgqKGludCAqKXB0ZSAmIFBHX1YpICE9IDApCiAKLSNkZWZpbmUgcG1hcF9w
dGVfc2V0X3cocHRlLCB2KQkoKHYpID8gYXRvbWljX3NldF9pbnQoKHVfaW50ICopKHB0ZSks
IFBHX1cpIDogXAotICAgIGF0b21pY19jbGVhcl9pbnQoKHVfaW50ICopKHB0ZSksIFBHX1cp
KQogI2RlZmluZSBwbWFwX3B0ZV9zZXRfcHJvdChwdGUsIHYpICgoKihpbnQgKilwdGUgJj0g
flBHX1BST1QpLCAoKihpbnQgKilwdGUgfD0gKHYpKSkKIAorI2RlZmluZSBIQU1GSVNURURf
TE9DS0lORworI2lmZGVmIEhBTUZJU1RFRF9MT0NLSU5HCitzdGF0aWMgc3RydWN0IG10eCBj
cmVhdGVkZWxldGVfbG9jazsKKyNlbmRpZgorCiBzdHJ1Y3QgcG1hcCBrZXJuZWxfcG1hcF9z
dG9yZTsKIExJU1RfSEVBRChwbWFwbGlzdCwgcG1hcCk7CiBzdGF0aWMgc3RydWN0IHBtYXBs
aXN0IGFsbHBtYXBzOwpAQCAtMjA4LDM0ICsyMTUsMjIgQEAKIGludCBwZ2VmbGFnID0gMDsJ
CS8qIFBHX0cgb3ItaW4gKi8KIGludCBwc2VmbGFnID0gMDsJCS8qIFBHX1BTIG9yLWluICov
CiAKLXN0YXRpYyBpbnQgbmtwdCA9IE5LUFQ7Ci12bV9vZmZzZXRfdCBrZXJuZWxfdm1fZW5k
ID0gS0VSTkJBU0UgKyBOS1BUICogTkJQRFI7CitpbnQgbmtwdDsKK3ZtX29mZnNldF90IGtl
cm5lbF92bV9lbmQ7CiBleHRlcm4gdV9pbnQzMl90IEtFUk5lbmQ7Ci1leHRlcm4gdV9pbnQz
Ml90IEtQVHBoeXM7CiAKICNpZmRlZiBQQUUKIHB0X2VudHJ5X3QgcGdfbng7Ci1zdGF0aWMg
dW1hX3pvbmVfdCBwZHB0em9uZTsKICNlbmRpZgogCiBzdGF0aWMgU1lTQ1RMX05PREUoX3Zt
LCBPSURfQVVUTywgcG1hcCwgQ1RMRkxBR19SRCwgMCwgIlZNL3BtYXAgcGFyYW1ldGVycyIp
OwogCi1zdGF0aWMgaW50IHBhdF93b3JrcyA9IDE7Ci1TWVNDVExfSU5UKF92bV9wbWFwLCBP
SURfQVVUTywgcGF0X3dvcmtzLCBDVExGTEFHX1JELCAmcGF0X3dvcmtzLCAxLAotICAgICJJ
cyBwYWdlIGF0dHJpYnV0ZSB0YWJsZSBmdWxseSBmdW5jdGlvbmFsPyIpOwotCi1zdGF0aWMg
aW50IHBnX3BzX2VuYWJsZWQgPSAxOwotU1lTQ1RMX0lOVChfdm1fcG1hcCwgT0lEX0FVVE8s
IHBnX3BzX2VuYWJsZWQsIENUTEZMQUdfUkRUVU4sICZwZ19wc19lbmFibGVkLCAwLAotICAg
ICJBcmUgbGFyZ2UgcGFnZSBtYXBwaW5ncyBlbmFibGVkPyIpOwotCi0jZGVmaW5lCVBBVF9J
TkRFWF9TSVpFCTgKLXN0YXRpYyBpbnQgcGF0X2luZGV4W1BBVF9JTkRFWF9TSVpFXTsJLyog
Y2FjaGUgbW9kZSB0byBQQVQgaW5kZXggY29udmVyc2lvbiAqLworc3RhdGljIGludCBwYXRf
d29ya3M7CQkJLyogSXMgcGFnZSBhdHRyaWJ1dGUgdGFibGUgc2FuZT8gKi8KIAogLyoKICAq
IERhdGEgZm9yIHRoZSBwdiBlbnRyeSBhbGxvY2F0aW9uIG1lY2hhbmlzbQogICovCiBzdGF0
aWMgaW50IHB2X2VudHJ5X2NvdW50ID0gMCwgcHZfZW50cnlfbWF4ID0gMCwgcHZfZW50cnlf
aGlnaF93YXRlciA9IDA7Ci1zdGF0aWMgc3RydWN0IG1kX3BhZ2UgKnB2X3RhYmxlOwogc3Rh
dGljIGludCBzaHBncGVycHJvYyA9IFBNQVBfU0hQR1BFUlBST0M7CiAKIHN0cnVjdCBwdl9j
aHVuayAqcHZfY2h1bmtiYXNlOwkJLyogS1ZBIGJsb2NrIGZvciBwdl9jaHVua3MgKi8KQEAg
LTI1MywxMCArMjQ4LDggQEAKIAljYWRkcl90CUNBRERSMjsKIH07CiBzdGF0aWMgc3RydWN0
IHN5c21hcHMgc3lzbWFwc19wY3B1W01BWENQVV07Ci1wdF9lbnRyeV90ICpDTUFQMSA9IDA7
CiBzdGF0aWMgcHRfZW50cnlfdCAqQ01BUDM7Ci1zdGF0aWMgcGRfZW50cnlfdCAqS1BURDsK
LWNhZGRyX3QgQ0FERFIxID0gMCwgcHR2bW1hcCA9IDA7CitjYWRkcl90IHB0dm1tYXAgPSAw
Owogc3RhdGljIGNhZGRyX3QgQ0FERFIzOwogc3RydWN0IG1zZ2J1ZiAqbXNnYnVmcCA9IDA7
CiAKQEAgLTI4Niw0NyArMjc5LDIyIEBACiAKIHN0YXRpYyB2b2lkCWZyZWVfcHZfZW50cnko
cG1hcF90IHBtYXAsIHB2X2VudHJ5X3QgcHYpOwogc3RhdGljIHB2X2VudHJ5X3QgZ2V0X3B2
X2VudHJ5KHBtYXBfdCBsb2NrZWRfcG1hcCwgaW50IHRyeSk7Ci1zdGF0aWMgdm9pZAlwbWFw
X3B2X2RlbW90ZV9wZGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90
IHBhKTsKLXN0YXRpYyBib29sZWFuX3QgcG1hcF9wdl9pbnNlcnRfcGRlKHBtYXBfdCBwbWFw
LCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBwYSk7Ci1zdGF0aWMgdm9pZAlwbWFwX3B2
X3Byb21vdGVfcGRlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBw
YSk7CiBzdGF0aWMgdm9pZAlwbWFwX3B2aF9mcmVlKHN0cnVjdCBtZF9wYWdlICpwdmgsIHBt
YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSk7CiBzdGF0aWMgcHZfZW50cnlfdCBwbWFwX3B2
aF9yZW1vdmUoc3RydWN0IG1kX3BhZ2UgKnB2aCwgcG1hcF90IHBtYXAsCiAJCSAgICB2bV9v
ZmZzZXRfdCB2YSk7Ci1zdGF0aWMgaW50CXBtYXBfcHZoX3dpcmVkX21hcHBpbmdzKHN0cnVj
dCBtZF9wYWdlICpwdmgsIGludCBjb3VudCk7CiAKLXN0YXRpYyBib29sZWFuX3QgcG1hcF9k
ZW1vdGVfcGRlKHBtYXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZGUsIHZtX29mZnNldF90IHZh
KTsKLXN0YXRpYyBib29sZWFuX3QgcG1hcF9lbnRlcl9wZGUocG1hcF90IHBtYXAsIHZtX29m
ZnNldF90IHZhLCB2bV9wYWdlX3QgbSwKLSAgICB2bV9wcm90X3QgcHJvdCk7Ci1zdGF0aWMg
dm1fcGFnZV90IHBtYXBfZW50ZXJfcXVpY2tfbG9ja2VkKHBtYXBfdCBwbWFwLCB2bV9vZmZz
ZXRfdCB2YSwKK3N0YXRpYyB2bV9wYWdlX3QgcG1hcF9lbnRlcl9xdWlja19sb2NrZWQobXVs
dGljYWxsX2VudHJ5X3QgKiptY2wsIGludCAqY291bnQsIHBtYXBfdCBwbWFwLCB2bV9vZmZz
ZXRfdCB2YSwKICAgICB2bV9wYWdlX3QgbSwgdm1fcHJvdF90IHByb3QsIHZtX3BhZ2VfdCBt
cHRlKTsKIHN0YXRpYyB2b2lkIHBtYXBfZmx1c2hfcGFnZSh2bV9wYWdlX3QgbSk7Ci1zdGF0
aWMgdm9pZCBwbWFwX2luc2VydF9wdF9wYWdlKHBtYXBfdCBwbWFwLCB2bV9wYWdlX3QgbXB0
ZSk7Ci1zdGF0aWMgdm9pZCBwbWFwX2ZpbGxfcHRwKHB0X2VudHJ5X3QgKmZpcnN0cHRlLCBw
dF9lbnRyeV90IG5ld3B0ZSk7Ci1zdGF0aWMgYm9vbGVhbl90IHBtYXBfaXNfbW9kaWZpZWRf
cHZoKHN0cnVjdCBtZF9wYWdlICpwdmgpOwotc3RhdGljIGJvb2xlYW5fdCBwbWFwX2lzX3Jl
ZmVyZW5jZWRfcHZoKHN0cnVjdCBtZF9wYWdlICpwdmgpOwogc3RhdGljIHZvaWQgcG1hcF9r
ZW50ZXJfYXR0cih2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBwYSwgaW50IG1vZGUpOwot
c3RhdGljIHZvaWQgcG1hcF9rZW50ZXJfcGRlKHZtX29mZnNldF90IHZhLCBwZF9lbnRyeV90
IG5ld3BkZSk7Ci1zdGF0aWMgdm1fcGFnZV90IHBtYXBfbG9va3VwX3B0X3BhZ2UocG1hcF90
IHBtYXAsIHZtX29mZnNldF90IHZhKTsKLXN0YXRpYyB2b2lkIHBtYXBfcGRlX2F0dHIocGRf
ZW50cnlfdCAqcGRlLCBpbnQgY2FjaGVfYml0cyk7Ci1zdGF0aWMgdm9pZCBwbWFwX3Byb21v
dGVfcGRlKHBtYXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZGUsIHZtX29mZnNldF90IHZhKTsK
LXN0YXRpYyBib29sZWFuX3QgcG1hcF9wcm90ZWN0X3BkZShwbWFwX3QgcG1hcCwgcGRfZW50
cnlfdCAqcGRlLCB2bV9vZmZzZXRfdCBzdmEsCi0gICAgdm1fcHJvdF90IHByb3QpOwotc3Rh
dGljIHZvaWQgcG1hcF9wdGVfYXR0cihwdF9lbnRyeV90ICpwdGUsIGludCBjYWNoZV9iaXRz
KTsKLXN0YXRpYyB2b2lkIHBtYXBfcmVtb3ZlX3BkZShwbWFwX3QgcG1hcCwgcGRfZW50cnlf
dCAqcGRxLCB2bV9vZmZzZXRfdCBzdmEsCi0gICAgdm1fcGFnZV90ICpmcmVlKTsKIHN0YXRp
YyBpbnQgcG1hcF9yZW1vdmVfcHRlKHBtYXBfdCBwbWFwLCBwdF9lbnRyeV90ICpwdHEsIHZt
X29mZnNldF90IHN2YSwKICAgICB2bV9wYWdlX3QgKmZyZWUpOwotc3RhdGljIHZvaWQgcG1h
cF9yZW1vdmVfcHRfcGFnZShwbWFwX3QgcG1hcCwgdm1fcGFnZV90IG1wdGUpOwogc3RhdGlj
IHZvaWQgcG1hcF9yZW1vdmVfcGFnZShzdHJ1Y3QgcG1hcCAqcG1hcCwgdm1fb2Zmc2V0X3Qg
dmEsCiAgICAgdm1fcGFnZV90ICpmcmVlKTsKIHN0YXRpYyB2b2lkIHBtYXBfcmVtb3ZlX2Vu
dHJ5KHN0cnVjdCBwbWFwICpwbWFwLCB2bV9wYWdlX3QgbSwKIAkJCQkJdm1fb2Zmc2V0X3Qg
dmEpOwotc3RhdGljIHZvaWQgcG1hcF9pbnNlcnRfZW50cnkocG1hcF90IHBtYXAsIHZtX29m
ZnNldF90IHZhLCB2bV9wYWdlX3QgbSk7CiBzdGF0aWMgYm9vbGVhbl90IHBtYXBfdHJ5X2lu
c2VydF9wdl9lbnRyeShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsCiAgICAgdm1fcGFn
ZV90IG0pOwotc3RhdGljIHZvaWQgcG1hcF91cGRhdGVfcGRlKHBtYXBfdCBwbWFwLCB2bV9v
ZmZzZXRfdCB2YSwgcGRfZW50cnlfdCAqcGRlLAotICAgIHBkX2VudHJ5X3QgbmV3cGRlKTsK
LXN0YXRpYyB2b2lkIHBtYXBfdXBkYXRlX3BkZV9pbnZhbGlkYXRlKHZtX29mZnNldF90IHZh
LCBwZF9lbnRyeV90IG5ld3BkZSk7CiAKIHN0YXRpYyB2bV9wYWdlX3QgcG1hcF9hbGxvY3B0
ZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIGludCBmbGFncyk7CiAKQEAgLTMzNSwx
MCArMzAzLDcgQEAKIHN0YXRpYyBwdF9lbnRyeV90ICpwbWFwX3B0ZV9xdWljayhwbWFwX3Qg
cG1hcCwgdm1fb2Zmc2V0X3QgdmEpOwogc3RhdGljIHZvaWQgcG1hcF9wdGVfcmVsZWFzZShw
dF9lbnRyeV90ICpwdGUpOwogc3RhdGljIGludCBwbWFwX3VudXNlX3B0KHBtYXBfdCwgdm1f
b2Zmc2V0X3QsIHZtX3BhZ2VfdCAqKTsKLSNpZmRlZiBQQUUKLXN0YXRpYyB2b2lkICpwbWFw
X3BkcHRfYWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50IGJ5dGVzLCB1X2ludDhfdCAqZmxh
Z3MsIGludCB3YWl0KTsKLSNlbmRpZgotc3RhdGljIHZvaWQgcG1hcF9zZXRfcGcodm9pZCk7
CitzdGF0aWMgYm9vbGVhbl90IHBtYXBfaXNfcHJlZmF1bHRhYmxlX2xvY2tlZChwbWFwX3Qg
cG1hcCwgdm1fb2Zmc2V0X3QgYWRkcik7CiAKIHN0YXRpYyBfX2lubGluZSB2b2lkIHBhZ2V6
ZXJvKHZvaWQgKnBhZ2UpOwogCkBAIC0zNTIsNiArMzE3LDM2IEBACiAgKi8KIENUQVNTRVJU
KEtFUk5CQVNFICUgKDEgPDwgMjQpID09IDApOwogCit2b2lkIAorcGRfc2V0KHN0cnVjdCBw
bWFwICpwbWFwLCBpbnQgcHRlcGluZGV4LCB2bV9wYWRkcl90IHZhbCwgaW50IHR5cGUpCit7
CisJdm1fcGFkZHJfdCBwZGlyX21hID0gdnRvbWFjaCgmcG1hcC0+cG1fcGRpcltwdGVwaW5k
ZXhdKTsKKwkKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNIX1BEX1NFVF9WQToKKyNpZiAw
CQkKKwkJeGVuX3F1ZXVlX3B0X3VwZGF0ZShzaGFkb3dfcGRpcl9tYSwKKwkJCQkgICAgeHBt
YXBfcHRvbSh2YWwgJiB+KFBHX1JXKSkpOworI2VuZGlmCQkKKwkJeGVuX3F1ZXVlX3B0X3Vw
ZGF0ZShwZGlyX21hLAorCQkJCSAgICB4cG1hcF9wdG9tKHZhbCkpOyAJCisJCWJyZWFrOwor
CWNhc2UgU0hfUERfU0VUX1ZBX01BOgorI2lmIDAJCQorCQl4ZW5fcXVldWVfcHRfdXBkYXRl
KHNoYWRvd19wZGlyX21hLAorCQkJCSAgICB2YWwgJiB+KFBHX1JXKSk7CisjZW5kaWYJCQor
CQl4ZW5fcXVldWVfcHRfdXBkYXRlKHBkaXJfbWEsIHZhbCk7IAkKKwkJYnJlYWs7CisJY2Fz
ZSBTSF9QRF9TRVRfVkFfQ0xFQVI6CisjaWYgMAorCQl4ZW5fcXVldWVfcHRfdXBkYXRlKHNo
YWRvd19wZGlyX21hLCAwKTsKKyNlbmRpZgkJCisJCXhlbl9xdWV1ZV9wdF91cGRhdGUocGRp
cl9tYSwgMCk7IAkKKwkJYnJlYWs7CisJfQorfQorCiAvKgogICoJQm9vdHN0cmFwIHRoZSBz
eXN0ZW0gZW5vdWdoIHRvIHJ1biB3aXRoIHZpcnR1YWwgbWVtb3J5LgogICoKQEAgLTM4OSwy
MSArMzg0LDE1IEBACiAjaWZkZWYgUEFFCiAJa2VybmVsX3BtYXAtPnBtX3BkcHQgPSAocGRw
dF9lbnRyeV90ICopIChLRVJOQkFTRSArICh1X2ludClJZGxlUERQVCk7CiAjZW5kaWYKLQlr
ZXJuZWxfcG1hcC0+cG1fcm9vdCA9IE5VTEw7CiAJQ1BVX0ZJTEwoJmtlcm5lbF9wbWFwLT5w
bV9hY3RpdmUpOwkvKiBkb24ndCBhbGxvdyBkZWFjdGl2YXRpb24gKi8KIAlUQUlMUV9JTklU
KCZrZXJuZWxfcG1hcC0+cG1fcHZjaHVuayk7CiAJTElTVF9JTklUKCZhbGxwbWFwcyk7Ci0K
LQkvKgotCSAqIFJlcXVlc3QgYSBzcGluIG11dGV4IHNvIHRoYXQgY2hhbmdlcyB0byBhbGxw
bWFwcyBjYW5ub3QgYmUKLQkgKiBwcmVlbXB0ZWQgYnkgc21wX3JlbmRlenZvdXNfY3B1cygp
LiAgT3RoZXJ3aXNlLAotCSAqIHBtYXBfdXBkYXRlX3BkZV9rZXJuZWwoKSBjb3VsZCBhY2Nl
c3MgYWxscG1hcHMgd2hpbGUgaXQgaXMKLQkgKiBiZWluZyBjaGFuZ2VkLgotCSAqLwogCW10
eF9pbml0KCZhbGxwbWFwc19sb2NrLCAiYWxscG1hcHMiLCBOVUxMLCBNVFhfU1BJTik7CiAJ
bXR4X2xvY2tfc3BpbigmYWxscG1hcHNfbG9jayk7CiAJTElTVF9JTlNFUlRfSEVBRCgmYWxs
cG1hcHMsIGtlcm5lbF9wbWFwLCBwbV9saXN0KTsKIAltdHhfdW5sb2NrX3NwaW4oJmFsbHBt
YXBzX2xvY2spOworCWlmIChua3B0ID09IDApCisJCW5rcHQgPSBOS1BUOwogCiAJLyoKIAkg
KiBSZXNlcnZlIHNvbWUgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMvVkEgc3BhY2UgZm9y
IHRlbXBvcmFyeQpAQCAtNDI0LDkgKzQxMywxMSBAQAogCQltdHhfaW5pdCgmc3lzbWFwcy0+
bG9jaywgIlNZU01BUFMiLCBOVUxMLCBNVFhfREVGKTsKIAkJU1lTTUFQKGNhZGRyX3QsIHN5
c21hcHMtPkNNQVAxLCBzeXNtYXBzLT5DQUREUjEsIDEpCiAJCVNZU01BUChjYWRkcl90LCBz
eXNtYXBzLT5DTUFQMiwgc3lzbWFwcy0+Q0FERFIyLCAxKQorCQlQVF9TRVRfTUEoc3lzbWFw
cy0+Q0FERFIxLCAwKTsKKwkJUFRfU0VUX01BKHN5c21hcHMtPkNBRERSMiwgMCk7CiAJfQot
CVNZU01BUChjYWRkcl90LCBDTUFQMSwgQ0FERFIxLCAxKQogCVNZU01BUChjYWRkcl90LCBD
TUFQMywgQ0FERFIzLCAxKQorCVBUX1NFVF9NQShDQUREUjMsIDApOwogCiAJLyoKIAkgKiBD
cmFzaGR1bXAgbWFwcy4KQEAgLTQ0NCwyNSArNDM1LDYgQEAKIAlTWVNNQVAoc3RydWN0IG1z
Z2J1ZiAqLCB1bnVzZWQsIG1zZ2J1ZnAsIGF0b3Aocm91bmRfcGFnZShtc2didWZzaXplKSkp
CiAKIAkvKgotCSAqIEtQVG1hcCBpcyB1c2VkIGJ5IHBtYXBfa2V4dHJhY3QoKS4KLQkgKgot
CSAqIEtQVG1hcCBpcyBmaXJzdCBpbml0aWFsaXplZCBieSBsb2NvcmUuICBIb3dldmVyLCB0
aGF0IGluaXRpYWwKLQkgKiBLUFRtYXAgY2FuIG9ubHkgc3VwcG9ydCBOS1BUIHBhZ2UgdGFi
bGUgcGFnZXMuICBIZXJlLCBhIGxhcmdlcgotCSAqIEtQVG1hcCBpcyBjcmVhdGVkIHRoYXQg
Y2FuIHN1cHBvcnQgS1ZBX1BBR0VTIHBhZ2UgdGFibGUgcGFnZXMuCi0JICovCi0JU1lTTUFQ
KHB0X2VudHJ5X3QgKiwgS1BURCwgS1BUbWFwLCBLVkFfUEFHRVMpCi0KLQlmb3IgKGkgPSAw
OyBpIDwgTktQVDsgaSsrKQotCQlLUFREW2ldID0gKEtQVHBoeXMgKyAoaSA8PCBQQUdFX1NI
SUZUKSkgfCBwZ2VmbGFnIHwgUEdfUlcgfCBQR19WOwotCi0JLyoKLQkgKiBBZGp1c3QgdGhl
IHN0YXJ0IG9mIHRoZSBLUFREIGFuZCBLUFRtYXAgc28gdGhhdCB0aGUgaW1wbGVtZW50YXRp
b24KLQkgKiBvZiBwbWFwX2tleHRyYWN0KCkgYW5kIHBtYXBfZ3Jvd2tlcm5lbCgpIGNhbiBi
ZSBtYWRlIHNpbXBsZXIuCi0JICovCi0JS1BURCAtPSBLUFRESTsKLQlLUFRtYXAgLT0gaTM4
Nl9idG9wKEtQVERJIDw8IFBEUlNISUZUKTsKLQotCS8qCiAJICogcHRlbWFwIGlzIHVzZWQg
Zm9yIHBtYXBfcHRlX3F1aWNrCiAJICovCiAJU1lTTUFQKHB0X2VudHJ5X3QgKiwgUE1BUDEs
IFBBRERSMSwgMSkKQEAgLTQ3Nyw2ICs0NDksMTAgQEAKIAkgKiBwaHlzaWNhbCBtZW1vcnkg
cmVnaW9uIHRoYXQgaXMgdXNlZCBieSB0aGUgQUNQSSB3YWtldXAgY29kZS4gIFRoaXMKIAkg
KiBtYXBwaW5nIG11c3Qgbm90IGhhdmUgUEdfRyBzZXQuIAogCSAqLworI2lmbmRlZiBYRU4K
KwkvKgorCSAqIGxlYXZlIGhlcmUgZGVsaWJlcmF0ZWx5IHRvIHNob3cgdGhhdCB0aGlzIGlz
IG5vdCBzdXBwb3J0ZWQKKwkgKi8KICNpZmRlZiBYQk9YCiAJLyogRklYTUU6IFRoaXMgaXMg
Z3Jvc3MsIGJ1dCBuZWVkZWQgZm9yIHRoZSBYQk9YLiBTaW5jZSB3ZSBhcmUgaW4gc3VjaAog
CSAqIGFuIGVhcmx5IHN0YWRpdW0sIHdlIGNhbm5vdCB5ZXQgbmVhdGx5IG1hcCB2aWRlbyBt
ZW1vcnkgLi4uIDotKApAQCAtNDkxLDYgKzQ2NywxMSBAQAogCiAJLyogVHVybiBvbiBQR19H
IG9uIGtlcm5lbCBwYWdlKHMpICovCiAJcG1hcF9zZXRfcGcoKTsKKyNlbmRpZgorCisjaWZk
ZWYgSEFNRklTVEVEX0xPQ0tJTkcKKwltdHhfaW5pdCgmY3JlYXRlZGVsZXRlX2xvY2ssICJw
bWFwIGNyZWF0ZS9kZWxldGUiLCBOVUxMLCBNVFhfREVGKTsKKyNlbmRpZgogfQogCiAvKgpA
QCAtNDk5LDEzMiArNDgwLDQzIEBACiB2b2lkCiBwbWFwX2luaXRfcGF0KHZvaWQpCiB7Ci0J
aW50IHBhdF90YWJsZVtQQVRfSU5ERVhfU0laRV07CiAJdWludDY0X3QgcGF0X21zcjsKLQl1
X2xvbmcgY3IwLCBjcjQ7Ci0JaW50IGk7Ci0KLQkvKiBTZXQgZGVmYXVsdCBQQVQgaW5kZXgg
dGFibGUuICovCi0JZm9yIChpID0gMDsgaSA8IFBBVF9JTkRFWF9TSVpFOyBpKyspCi0JCXBh
dF90YWJsZVtpXSA9IC0xOwotCXBhdF90YWJsZVtQQVRfV1JJVEVfQkFDS10gPSAwOwotCXBh
dF90YWJsZVtQQVRfV1JJVEVfVEhST1VHSF0gPSAxOwotCXBhdF90YWJsZVtQQVRfVU5DQUNI
RUFCTEVdID0gMzsKLQlwYXRfdGFibGVbUEFUX1dSSVRFX0NPTUJJTklOR10gPSAzOwotCXBh
dF90YWJsZVtQQVRfV1JJVEVfUFJPVEVDVEVEXSA9IDM7Ci0JcGF0X3RhYmxlW1BBVF9VTkNB
Q0hFRF0gPSAzOwogCiAJLyogQmFpbCBpZiB0aGlzIENQVSBkb2Vzbid0IGltcGxlbWVudCBQ
QVQuICovCi0JaWYgKChjcHVfZmVhdHVyZSAmIENQVUlEX1BBVCkgPT0gMCkgewotCQlmb3Ig
KGkgPSAwOyBpIDwgUEFUX0lOREVYX1NJWkU7IGkrKykKLQkJCXBhdF9pbmRleFtpXSA9IHBh
dF90YWJsZVtpXTsKLQkJcGF0X3dvcmtzID0gMDsKKwlpZiAoIShjcHVfZmVhdHVyZSAmIENQ
VUlEX1BBVCkpCiAJCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIER1ZSB0byBzb21lIEludGVs
IGVycmF0YSwgd2UgY2FuIG9ubHkgc2FmZWx5IHVzZSB0aGUgbG93ZXIgNAotCSAqIFBBVCBl
bnRyaWVzLgotCSAqCi0JICogICBJbnRlbCBQZW50aXVtIElJSSBQcm9jZXNzb3IgU3BlY2lm
aWNhdGlvbiBVcGRhdGUKLQkgKiBFcnJhdGEgRS4yNyAoVXBwZXIgRm91ciBQQVQgRW50cmll
cyBOb3QgVXNhYmxlIFdpdGggTW9kZSBCCi0JICogb3IgTW9kZSBDIFBhZ2luZykKLQkgKgot
CSAqICAgSW50ZWwgUGVudGl1bSBJViAgUHJvY2Vzc29yIFNwZWNpZmljYXRpb24gVXBkYXRl
Ci0JICogRXJyYXRhIE40NiAoUEFUIEluZGV4IE1TQiBNYXkgQmUgQ2FsY3VsYXRlZCBJbmNv
cnJlY3RseSkKLQkgKi8KLQlpZiAoY3B1X3ZlbmRvcl9pZCA9PSBDUFVfVkVORE9SX0lOVEVM
ICYmCi0JICAgICEoQ1BVSURfVE9fRkFNSUxZKGNwdV9pZCkgPT0gNiAmJiBDUFVJRF9UT19N
T0RFTChjcHVfaWQpID49IDB4ZSkpCi0JCXBhdF93b3JrcyA9IDA7CiAKLQkvKiBJbml0aWFs
aXplIGRlZmF1bHQgUEFUIGVudHJpZXMuICovCi0JcGF0X21zciA9IFBBVF9WQUxVRSgwLCBQ
QVRfV1JJVEVfQkFDSykgfAotCSAgICBQQVRfVkFMVUUoMSwgUEFUX1dSSVRFX1RIUk9VR0gp
IHwKLQkgICAgUEFUX1ZBTFVFKDIsIFBBVF9VTkNBQ0hFRCkgfAotCSAgICBQQVRfVkFMVUUo
MywgUEFUX1VOQ0FDSEVBQkxFKSB8Ci0JICAgIFBBVF9WQUxVRSg0LCBQQVRfV1JJVEVfQkFD
SykgfAotCSAgICBQQVRfVkFMVUUoNSwgUEFUX1dSSVRFX1RIUk9VR0gpIHwKLQkgICAgUEFU
X1ZBTFVFKDYsIFBBVF9VTkNBQ0hFRCkgfAotCSAgICBQQVRfVkFMVUUoNywgUEFUX1VOQ0FD
SEVBQkxFKTsKLQotCWlmIChwYXRfd29ya3MpIHsKKwlpZiAoY3B1X3ZlbmRvcl9pZCAhPSBD
UFVfVkVORE9SX0lOVEVMIHx8CisJICAgIChDUFVJRF9UT19GQU1JTFkoY3B1X2lkKSA9PSA2
ICYmIENQVUlEX1RPX01PREVMKGNwdV9pZCkgPj0gMHhlKSkgewogCQkvKgotCQkgKiBMZWF2
ZSB0aGUgaW5kaWNlcyAwLTMgYXQgdGhlIGRlZmF1bHQgb2YgV0IsIFdULCBVQy0sIGFuZCBV
Qy4KLQkJICogUHJvZ3JhbSA1IGFuZCA2IGFzIFdQIGFuZCBXQy4KLQkJICogTGVhdmUgNCBh
bmQgNyBhcyBXQiBhbmQgVUMuCisJCSAqIExlYXZlIHRoZSBpbmRpY2VzIDAtMyBhdCB0aGUg
ZGVmYXVsdCBvZiBXQiwgV1QsIFVDLCBhbmQgVUMtLgorCQkgKiBQcm9ncmFtIDQgYW5kIDUg
YXMgV1AgYW5kIFdDLgorCQkgKiBMZWF2ZSA2IGFuZCA3IGFzIFVDIGFuZCBVQy0uCiAJCSAq
LwotCQlwYXRfbXNyICY9IH4oUEFUX01BU0soNSkgfCBQQVRfTUFTSyg2KSk7Ci0JCXBhdF9t
c3IgfD0gUEFUX1ZBTFVFKDUsIFBBVF9XUklURV9QUk9URUNURUQpIHwKLQkJICAgIFBBVF9W
QUxVRSg2LCBQQVRfV1JJVEVfQ09NQklOSU5HKTsKLQkJcGF0X3RhYmxlW1BBVF9VTkNBQ0hF
RF0gPSAyOwotCQlwYXRfdGFibGVbUEFUX1dSSVRFX1BST1RFQ1RFRF0gPSA1OwotCQlwYXRf
dGFibGVbUEFUX1dSSVRFX0NPTUJJTklOR10gPSA2OworCQlwYXRfbXNyID0gcmRtc3IoTVNS
X1BBVCk7CisJCXBhdF9tc3IgJj0gfihQQVRfTUFTSyg0KSB8IFBBVF9NQVNLKDUpKTsKKwkJ
cGF0X21zciB8PSBQQVRfVkFMVUUoNCwgUEFUX1dSSVRFX1BST1RFQ1RFRCkgfAorCQkgICAg
UEFUX1ZBTFVFKDUsIFBBVF9XUklURV9DT01CSU5JTkcpOworCQlwYXRfd29ya3MgPSAxOwog
CX0gZWxzZSB7CiAJCS8qCi0JCSAqIEp1c3QgcmVwbGFjZSBQQVQgSW5kZXggMiB3aXRoIFdD
IGluc3RlYWQgb2YgVUMtLgorCQkgKiBEdWUgdG8gc29tZSBJbnRlbCBlcnJhdGEsIHdlIGNh
biBvbmx5IHNhZmVseSB1c2UgdGhlIGxvd2VyIDQKKwkJICogUEFUIGVudHJpZXMuICBUaHVz
LCBqdXN0IHJlcGxhY2UgUEFUIEluZGV4IDIgd2l0aCBXQyBpbnN0ZWFkCisJCSAqIG9mIFVD
LS4KKwkJICoKKwkJICogICBJbnRlbCBQZW50aXVtIElJSSBQcm9jZXNzb3IgU3BlY2lmaWNh
dGlvbiBVcGRhdGUKKwkJICogRXJyYXRhIEUuMjcgKFVwcGVyIEZvdXIgUEFUIEVudHJpZXMg
Tm90IFVzYWJsZSBXaXRoIE1vZGUgQgorCQkgKiBvciBNb2RlIEMgUGFnaW5nKQorCQkgKgor
CQkgKiAgIEludGVsIFBlbnRpdW0gSVYgIFByb2Nlc3NvciBTcGVjaWZpY2F0aW9uIFVwZGF0
ZQorCQkgKiBFcnJhdGEgTjQ2IChQQVQgSW5kZXggTVNCIE1heSBCZSBDYWxjdWxhdGVkIElu
Y29ycmVjdGx5KQogCQkgKi8KKwkJcGF0X21zciA9IHJkbXNyKE1TUl9QQVQpOwogCQlwYXRf
bXNyICY9IH5QQVRfTUFTSygyKTsKIAkJcGF0X21zciB8PSBQQVRfVkFMVUUoMiwgUEFUX1dS
SVRFX0NPTUJJTklORyk7Ci0JCXBhdF90YWJsZVtQQVRfV1JJVEVfQ09NQklOSU5HXSA9IDI7
CisJCXBhdF93b3JrcyA9IDA7CiAJfQotCi0JLyogRGlzYWJsZSBQR0UuICovCi0JY3I0ID0g
cmNyNCgpOwotCWxvYWRfY3I0KGNyNCAmIH5DUjRfUEdFKTsKLQotCS8qIERpc2FibGUgY2Fj
aGVzIChDRCA9IDEsIE5XID0gMCkuICovCi0JY3IwID0gcmNyMCgpOwotCWxvYWRfY3IwKChj
cjAgJiB+Q1IwX05XKSB8IENSMF9DRCk7Ci0KLQkvKiBGbHVzaGVzIGNhY2hlcyBhbmQgVExC
cy4gKi8KLQl3YmludmQoKTsKLQlpbnZsdGxiKCk7Ci0KLQkvKiBVcGRhdGUgUEFUIGFuZCBp
bmRleCB0YWJsZS4gKi8KIAl3cm1zcihNU1JfUEFULCBwYXRfbXNyKTsKLQlmb3IgKGkgPSAw
OyBpIDwgUEFUX0lOREVYX1NJWkU7IGkrKykKLQkJcGF0X2luZGV4W2ldID0gcGF0X3RhYmxl
W2ldOwotCi0JLyogRmx1c2ggY2FjaGVzIGFuZCBUTEJzIGFnYWluLiAqLwotCXdiaW52ZCgp
OwotCWludmx0bGIoKTsKLQotCS8qIFJlc3RvcmUgY2FjaGVzIGFuZCBQR0UuICovCi0JbG9h
ZF9jcjAoY3IwKTsKLQlsb2FkX2NyNChjcjQpOwotfQotCi0vKgotICogU2V0IFBHX0cgb24g
a2VybmVsIHBhZ2VzLiAgT25seSB0aGUgQlNQIGNhbGxzIHRoaXMgd2hlbiBTTVAgaXMgdHVy
bmVkIG9uLgotICovCi1zdGF0aWMgdm9pZAotcG1hcF9zZXRfcGcodm9pZCkKLXsKLQlwdF9l
bnRyeV90ICpwdGU7Ci0Jdm1fb2Zmc2V0X3QgdmEsIGVuZHZhOwotCi0JaWYgKHBnZWZsYWcg
PT0gMCkKLQkJcmV0dXJuOwotCi0JZW5kdmEgPSBLRVJOQkFTRSArIEtFUk5lbmQ7Ci0KLQlp
ZiAocHNlZmxhZykgewotCQl2YSA9IEtFUk5CQVNFICsgS0VSTkxPQUQ7Ci0JCXdoaWxlICh2
YSAgPCBlbmR2YSkgewotCQkJcGRpcl9wZGUoUFRELCB2YSkgfD0gcGdlZmxhZzsKLQkJCWlu
dmx0bGIoKTsJLyogUGxheSBpdCBzYWZlLCBpbnZsdGxiKCkgZXZlcnkgdGltZSAqLwotCQkJ
dmEgKz0gTkJQRFI7Ci0JCX0KLQl9IGVsc2UgewotCQl2YSA9ICh2bV9vZmZzZXRfdClidGV4
dDsKLQkJd2hpbGUgKHZhIDwgZW5kdmEpIHsKLQkJCXB0ZSA9IHZ0b3B0ZSh2YSk7Ci0JCQlp
ZiAoKnB0ZSkKLQkJCQkqcHRlIHw9IHBnZWZsYWc7Ci0JCQlpbnZsdGxiKCk7CS8qIFBsYXkg
aXQgc2FmZSwgaW52bHRsYigpIGV2ZXJ5IHRpbWUgKi8KLQkJCXZhICs9IFBBR0VfU0laRTsK
LQkJfQotCX0KIH0KIAogLyoKQEAgLTYzOCwxOCArNTMwLDYgQEAKIAltLT5tZC5wYXRfbW9k
ZSA9IFBBVF9XUklURV9CQUNLOwogfQogCi0jaWZkZWYgUEFFCi1zdGF0aWMgdm9pZCAqCi1w
bWFwX3BkcHRfYWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50IGJ5dGVzLCB1X2ludDhfdCAq
ZmxhZ3MsIGludCB3YWl0KQotewotCi0JLyogSW5mb3JtIFVNQSB0aGF0IHRoaXMgYWxsb2Nh
dG9yIHVzZXMga2VybmVsX21hcC9vYmplY3QuICovCi0JKmZsYWdzID0gVU1BX1NMQUJfS0VS
TkVMOwotCXJldHVybiAoKHZvaWQgKilrbWVtX2FsbG9jX2NvbnRpZyhrZXJuZWxfbWFwLCBi
eXRlcywgd2FpdCwgMHgwVUxMLAotCSAgICAweGZmZmZmZmZmVUxMLCAxLCAwLCBWTV9NRU1B
VFRSX0RFRkFVTFQpKTsKLX0KLSNlbmRpZgotCiAvKgogICogQUJ1c2UgdGhlIHB0ZSBub2Rl
cyBmb3IgdW5tYXBwZWQga3ZhIHRvIHRocmVhZCBhIGt2YSBmcmVlbGlzdCB0aHJvdWdoLgog
ICogUmVxdWlyZW1lbnRzOgpAQCAtNjYyLDQzICs1NDIsNDggQEAKICAqICAtIEFzc3VtZXMg
YSB2bV9vZmZzZXRfdCB3aWxsIGZpdCBpbiBhIHB0ZSAodHJ1ZSBmb3IgaTM4NikuCiAgKiBC
ZWNhdXNlIFBHX1YgaXMgbmV2ZXIgc2V0LCB0aGVyZSBjYW4gYmUgbm8gbWFwcGluZ3MgdG8g
aW52YWxpZGF0ZS4KICAqLworc3RhdGljIGludCBwdGVsaXN0X2NvdW50ID0gMDsKIHN0YXRp
YyB2bV9vZmZzZXRfdAogcG1hcF9wdGVsaXN0X2FsbG9jKHZtX29mZnNldF90ICpoZWFkKQog
ewotCXB0X2VudHJ5X3QgKnB0ZTsKIAl2bV9vZmZzZXRfdCB2YTsKLQotCXZhID0gKmhlYWQ7
Ci0JaWYgKHZhID09IDApCi0JCXJldHVybiAodmEpOwkvKiBPdXQgb2YgbWVtb3J5ICovCi0J
cHRlID0gdnRvcHRlKHZhKTsKLQkqaGVhZCA9ICpwdGU7Ci0JaWYgKCpoZWFkICYgUEdfVikK
LQkJcGFuaWMoInBtYXBfcHRlbGlzdF9hbGxvYzogdmEgd2l0aCBQR19WIHNldCEiKTsKLQkq
cHRlID0gMDsKKwl2bV9vZmZzZXRfdCAqcGhlYWQgPSAodm1fb2Zmc2V0X3QgKikqaGVhZDsK
KwkKKwlpZiAocHRlbGlzdF9jb3VudCA9PSAwKSB7CisJCXByaW50Zigib3V0IG9mIG1lbW9y
eSEhISEhIVxuIik7CisJCXJldHVybiAoMCk7CS8qIE91dCBvZiBtZW1vcnkgKi8KKwl9CisJ
cHRlbGlzdF9jb3VudC0tOworCXZhID0gcGhlYWRbcHRlbGlzdF9jb3VudF07CiAJcmV0dXJu
ICh2YSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBwbWFwX3B0ZWxpc3RfZnJlZSh2bV9vZmZzZXRf
dCAqaGVhZCwgdm1fb2Zmc2V0X3QgdmEpCiB7Ci0JcHRfZW50cnlfdCAqcHRlOworCXZtX29m
ZnNldF90ICpwaGVhZCA9ICh2bV9vZmZzZXRfdCAqKSpoZWFkOwogCi0JaWYgKHZhICYgUEdf
VikKLQkJcGFuaWMoInBtYXBfcHRlbGlzdF9mcmVlOiBmcmVlaW5nIHZhIHdpdGggUEdfViBz
ZXQhIik7Ci0JcHRlID0gdnRvcHRlKHZhKTsKLQkqcHRlID0gKmhlYWQ7CQkvKiB2aXJ0dWFs
ISBQR19WIGlzIDAgdGhvdWdoICovCi0JKmhlYWQgPSB2YTsKKwlwaGVhZFtwdGVsaXN0X2Nv
dW50KytdID0gdmE7CiB9CiAKIHN0YXRpYyB2b2lkCiBwbWFwX3B0ZWxpc3RfaW5pdCh2bV9v
ZmZzZXRfdCAqaGVhZCwgdm9pZCAqYmFzZSwgaW50IG5wYWdlcykKIHsKLQlpbnQgaTsKKwlp
bnQgaSwgbnN0YWNrcGFnZXM7CiAJdm1fb2Zmc2V0X3QgdmE7CisJdm1fcGFnZV90IG07CisJ
CisJbnN0YWNrcGFnZXMgPSAobnBhZ2VzICsgUEFHRV9TSVpFL3NpemVvZih2bV9vZmZzZXRf
dCkgLSAxKS8gKFBBR0VfU0laRS9zaXplb2Yodm1fb2Zmc2V0X3QpKTsKKwlmb3IgKGkgPSAw
OyBpIDwgbnN0YWNrcGFnZXM7IGkrKykgeworCQl2YSA9ICh2bV9vZmZzZXRfdCliYXNlICsg
aSAqIFBBR0VfU0laRTsKKwkJbSA9IHZtX3BhZ2VfYWxsb2MoTlVMTCwgaSwKKwkJICAgIFZN
X0FMTE9DX05PUk1BTCB8IFZNX0FMTE9DX05PT0JKIHwgVk1fQUxMT0NfV0lSRUQgfAorCQkg
ICAgVk1fQUxMT0NfWkVSTyk7CisJCXBtYXBfcWVudGVyKHZhLCAmbSwgMSk7CisJfQogCi0J
KmhlYWQgPSAwOwotCWZvciAoaSA9IG5wYWdlcyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJKmhl
YWQgPSAodm1fb2Zmc2V0X3QpYmFzZTsKKwlmb3IgKGkgPSBucGFnZXMgLSAxOyBpID49IG5z
dGFja3BhZ2VzOyBpLS0pIHsKIAkJdmEgPSAodm1fb2Zmc2V0X3QpYmFzZSArIGkgKiBQQUdF
X1NJWkU7CiAJCXBtYXBfcHRlbGlzdF9mcmVlKGhlYWQsIHZhKTsKIAl9CkBAIC03MTMsMjIg
KzU5OCw2IEBACiB2b2lkCiBwbWFwX2luaXQodm9pZCkKIHsKLQl2bV9wYWdlX3QgbXB0ZTsK
LQl2bV9zaXplX3QgczsKLQlpbnQgaSwgcHZfbnBnOwotCi0JLyoKLQkgKiBJbml0aWFsaXpl
IHRoZSB2bSBwYWdlIGFycmF5IGVudHJpZXMgZm9yIHRoZSBrZXJuZWwgcG1hcCdzCi0JICog
cGFnZSB0YWJsZSBwYWdlcy4KLQkgKi8gCi0JZm9yIChpID0gMDsgaSA8IE5LUFQ7IGkrKykg
ewotCQltcHRlID0gUEhZU19UT19WTV9QQUdFKEtQVHBoeXMgKyAoaSA8PCBQQUdFX1NISUZU
KSk7Ci0JCUtBU1NFUlQobXB0ZSA+PSB2bV9wYWdlX2FycmF5ICYmCi0JCSAgICBtcHRlIDwg
JnZtX3BhZ2VfYXJyYXlbdm1fcGFnZV9hcnJheV9zaXplXSwKLQkJICAgICgicG1hcF9pbml0
OiBwYWdlIHRhYmxlIHBhZ2UgaXMgb3V0IG9mIHJhbmdlIikpOwotCQltcHRlLT5waW5kZXgg
PSBpICsgS1BUREk7Ci0JCW1wdGUtPnBoeXNfYWRkciA9IEtQVHBoeXMgKyAoaSA8PCBQQUdF
X1NISUZUKTsKLQl9CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGFkZHJlc3Mgc3BhY2Ug
KHpvbmUpIGZvciB0aGUgcHYgZW50cmllcy4gIFNldCBhCkBAIC03NDEsNTQgKzYxMCwxMiBA
QAogCXB2X2VudHJ5X21heCA9IHJvdW5kdXAocHZfZW50cnlfbWF4LCBfTlBDUFYpOwogCXB2
X2VudHJ5X2hpZ2hfd2F0ZXIgPSA5ICogKHB2X2VudHJ5X21heCAvIDEwKTsKIAotCS8qCi0J
ICogSWYgdGhlIGtlcm5lbCBpcyBydW5uaW5nIGluIGEgdmlydHVhbCBtYWNoaW5lIG9uIGFu
IEFNRCBGYW1pbHkgMTBoCi0JICogcHJvY2Vzc29yLCB0aGVuIGl0IG11c3QgYXNzdW1lIHRo
YXQgTUNBIGlzIGVuYWJsZWQgYnkgdGhlIHZpcnR1YWwKLQkgKiBtYWNoaW5lIG1vbml0b3Iu
Ci0JICovCi0JaWYgKHZtX2d1ZXN0ID09IFZNX0dVRVNUX1ZNICYmIGNwdV92ZW5kb3JfaWQg
PT0gQ1BVX1ZFTkRPUl9BTUQgJiYKLQkgICAgQ1BVSURfVE9fRkFNSUxZKGNwdV9pZCkgPT0g
MHgxMCkKLQkJd29ya2Fyb3VuZF9lcnJhdHVtMzgzID0gMTsKLQotCS8qCi0JICogQXJlIGxh
cmdlIHBhZ2UgbWFwcGluZ3Mgc3VwcG9ydGVkIGFuZCBlbmFibGVkPwotCSAqLwotCVRVTkFC
TEVfSU5UX0ZFVENIKCJ2bS5wbWFwLnBnX3BzX2VuYWJsZWQiLCAmcGdfcHNfZW5hYmxlZCk7
Ci0JaWYgKHBzZWZsYWcgPT0gMCkKLQkJcGdfcHNfZW5hYmxlZCA9IDA7Ci0JZWxzZSBpZiAo
cGdfcHNfZW5hYmxlZCkgewotCQlLQVNTRVJUKE1BWFBBR0VTSVpFUyA+IDEgJiYgcGFnZXNp
emVzWzFdID09IDAsCi0JCSAgICAoInBtYXBfaW5pdDogY2FuJ3QgYXNzaWduIHRvIHBhZ2Vz
aXplc1sxXSIpKTsKLQkJcGFnZXNpemVzWzFdID0gTkJQRFI7Ci0JfQotCi0JLyoKLQkgKiBD
YWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHB2IGhlYWQgdGFibGUgZm9yIHN1cGVycGFnZXMu
Ci0JICovCi0JZm9yIChpID0gMDsgcGh5c19hdmFpbFtpICsgMV07IGkgKz0gMik7Ci0JcHZf
bnBnID0gcm91bmRfNG1wYWdlKHBoeXNfYXZhaWxbKGkgLSAyKSArIDFdKSAvIE5CUERSOwot
Ci0JLyoKLQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBwdiBoZWFkIHRhYmxlIGZvciBz
dXBlcnBhZ2VzLgotCSAqLwotCXMgPSAodm1fc2l6ZV90KShwdl9ucGcgKiBzaXplb2Yoc3Ry
dWN0IG1kX3BhZ2UpKTsKLQlzID0gcm91bmRfcGFnZShzKTsKLQlwdl90YWJsZSA9IChzdHJ1
Y3QgbWRfcGFnZSAqKWttZW1fYWxsb2Moa2VybmVsX21hcCwgcyk7Ci0JZm9yIChpID0gMDsg
aSA8IHB2X25wZzsgaSsrKQotCQlUQUlMUV9JTklUKCZwdl90YWJsZVtpXS5wdl9saXN0KTsK
LQogCXB2X21heGNodW5rcyA9IE1BWChwdl9lbnRyeV9tYXggLyBfTlBDUFYsIG1heHByb2Mp
OwogCXB2X2NodW5rYmFzZSA9IChzdHJ1Y3QgcHZfY2h1bmsgKilrbWVtX2FsbG9jX25vZmF1
bHQoa2VybmVsX21hcCwKIAkgICAgUEFHRV9TSVpFICogcHZfbWF4Y2h1bmtzKTsKIAlpZiAo
cHZfY2h1bmtiYXNlID09IE5VTEwpCiAJCXBhbmljKCJwbWFwX2luaXQ6IG5vdCBlbm91Z2gg
a3ZtIGZvciBwdiBjaHVua3MiKTsKIAlwbWFwX3B0ZWxpc3RfaW5pdCgmcHZfdmFmcmVlLCBw
dl9jaHVua2Jhc2UsIHB2X21heGNodW5rcyk7Ci0jaWZkZWYgUEFFCi0JcGRwdHpvbmUgPSB1
bWFfemNyZWF0ZSgiUERQVCIsIE5QR1BURCAqIHNpemVvZihwZHB0X2VudHJ5X3QpLCBOVUxM
LAotCSAgICBOVUxMLCBOVUxMLCBOVUxMLCAoTlBHUFREICogc2l6ZW9mKHBkcHRfZW50cnlf
dCkpIC0gMSwKLQkgICAgVU1BX1pPTkVfVk0gfCBVTUFfWk9ORV9OT0ZSRUUpOwotCXVtYV96
b25lX3NldF9hbGxvY2YocGRwdHpvbmUsIHBtYXBfcGRwdF9hbGxvY2YpOwotI2VuZGlmCiB9
CiAKIApAQCAtODAwLDIyICs2MjcsMTAgQEAKIHN0YXRpYyBTWVNDVExfTk9ERShfdm1fcG1h
cCwgT0lEX0FVVE8sIHBkZSwgQ1RMRkxBR19SRCwgMCwKICAgICAiMi80TUIgcGFnZSBtYXBw
aW5nIGNvdW50ZXJzIik7CiAKLXN0YXRpYyB1X2xvbmcgcG1hcF9wZGVfZGVtb3Rpb25zOwot
U1lTQ1RMX1VMT05HKF92bV9wbWFwX3BkZSwgT0lEX0FVVE8sIGRlbW90aW9ucywgQ1RMRkxB
R19SRCwKLSAgICAmcG1hcF9wZGVfZGVtb3Rpb25zLCAwLCAiMi80TUIgcGFnZSBkZW1vdGlv
bnMiKTsKLQogc3RhdGljIHVfbG9uZyBwbWFwX3BkZV9tYXBwaW5nczsKIFNZU0NUTF9VTE9O
Ryhfdm1fcG1hcF9wZGUsIE9JRF9BVVRPLCBtYXBwaW5ncywgQ1RMRkxBR19SRCwKICAgICAm
cG1hcF9wZGVfbWFwcGluZ3MsIDAsICIyLzRNQiBwYWdlIG1hcHBpbmdzIik7CiAKLXN0YXRp
YyB1X2xvbmcgcG1hcF9wZGVfcF9mYWlsdXJlczsKLVNZU0NUTF9VTE9ORyhfdm1fcG1hcF9w
ZGUsIE9JRF9BVVRPLCBwX2ZhaWx1cmVzLCBDVExGTEFHX1JELAotICAgICZwbWFwX3BkZV9w
X2ZhaWx1cmVzLCAwLCAiMi80TUIgcGFnZSBwcm9tb3Rpb24gZmFpbHVyZXMiKTsKLQotc3Rh
dGljIHVfbG9uZyBwbWFwX3BkZV9wcm9tb3Rpb25zOwotU1lTQ1RMX1VMT05HKF92bV9wbWFw
X3BkZSwgT0lEX0FVVE8sIHByb21vdGlvbnMsIENUTEZMQUdfUkQsCi0gICAgJnBtYXBfcGRl
X3Byb21vdGlvbnMsIDAsICIyLzRNQiBwYWdlIHByb21vdGlvbnMiKTsKLQogLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTG93IGxl
dmVsIGhlbHBlciByb3V0aW5lcy4uLi4uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODI3LDkwICs2NDIsODEgQEAKIGludAog
cG1hcF9jYWNoZV9iaXRzKGludCBtb2RlLCBib29sZWFuX3QgaXNfcGRlKQogewotCWludCBj
YWNoZV9iaXRzLCBwYXRfZmxhZywgcGF0X2lkeDsKLQotCWlmIChtb2RlIDwgMCB8fCBtb2Rl
ID49IFBBVF9JTkRFWF9TSVpFIHx8IHBhdF9pbmRleFttb2RlXSA8IDApCi0JCXBhbmljKCJV
bmtub3duIGNhY2hpbmcgbW9kZSAlZFxuIiwgbW9kZSk7CisJaW50IHBhdF9mbGFnLCBwYXRf
aW5kZXgsIGNhY2hlX2JpdHM7CiAKIAkvKiBUaGUgUEFUIGJpdCBpcyBkaWZmZXJlbnQgZm9y
IFBURSdzIGFuZCBQREUncy4gKi8KIAlwYXRfZmxhZyA9IGlzX3BkZSA/IFBHX1BERV9QQVQg
OiBQR19QVEVfUEFUOwogCisJLyogSWYgd2UgZG9uJ3Qgc3VwcG9ydCBQQVQsIG1hcCBleHRl
bmRlZCBtb2RlcyB0byBvbGRlciBvbmVzLiAqLworCWlmICghKGNwdV9mZWF0dXJlICYgQ1BV
SURfUEFUKSkgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBQQVRfVU5DQUNIRUFCTEU6
CisJCWNhc2UgUEFUX1dSSVRFX1RIUk9VR0g6CisJCWNhc2UgUEFUX1dSSVRFX0JBQ0s6CisJ
CQlicmVhazsKKwkJY2FzZSBQQVRfVU5DQUNIRUQ6CisJCWNhc2UgUEFUX1dSSVRFX0NPTUJJ
TklORzoKKwkJY2FzZSBQQVRfV1JJVEVfUFJPVEVDVEVEOgorCQkJbW9kZSA9IFBBVF9VTkNB
Q0hFQUJMRTsKKwkJCWJyZWFrOworCQl9CisJfQorCQogCS8qIE1hcCB0aGUgY2FjaGluZyBt
b2RlIHRvIGEgUEFUIGluZGV4LiAqLwotCXBhdF9pZHggPSBwYXRfaW5kZXhbbW9kZV07CisJ
aWYgKHBhdF93b3JrcykgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJCWNhc2UgUEFUX1VOQ0FD
SEVBQkxFOgorCQkJCXBhdF9pbmRleCA9IDM7CisJCQkJYnJlYWs7CisJCQljYXNlIFBBVF9X
UklURV9USFJPVUdIOgorCQkJCXBhdF9pbmRleCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNl
IFBBVF9XUklURV9CQUNLOgorCQkJCXBhdF9pbmRleCA9IDA7CisJCQkJYnJlYWs7CisJCQlj
YXNlIFBBVF9VTkNBQ0hFRDoKKwkJCQlwYXRfaW5kZXggPSAyOworCQkJCWJyZWFrOworCQkJ
Y2FzZSBQQVRfV1JJVEVfQ09NQklOSU5HOgorCQkJCXBhdF9pbmRleCA9IDU7CisJCQkJYnJl
YWs7CisJCQljYXNlIFBBVF9XUklURV9QUk9URUNURUQ6CisJCQkJcGF0X2luZGV4ID0gNDsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcGFuaWMoIlVua25vd24gY2FjaGluZyBt
b2RlICVkXG4iLCBtb2RlKTsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAobW9kZSkgewor
CQkJY2FzZSBQQVRfVU5DQUNIRUQ6CisJCQljYXNlIFBBVF9VTkNBQ0hFQUJMRToKKwkJCWNh
c2UgUEFUX1dSSVRFX1BST1RFQ1RFRDoKKwkJCQlwYXRfaW5kZXggPSAzOworCQkJCWJyZWFr
OworCQkJY2FzZSBQQVRfV1JJVEVfVEhST1VHSDoKKwkJCQlwYXRfaW5kZXggPSAxOworCQkJ
CWJyZWFrOworCQkJY2FzZSBQQVRfV1JJVEVfQkFDSzoKKwkJCQlwYXRfaW5kZXggPSAwOwor
CQkJCWJyZWFrOworCQkJY2FzZSBQQVRfV1JJVEVfQ09NQklOSU5HOgorCQkJCXBhdF9pbmRl
eCA9IDI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXBhbmljKCJVbmtub3duIGNh
Y2hpbmcgbW9kZSAlZFxuIiwgbW9kZSk7CisJCX0KKwl9CQogCiAJLyogTWFwIHRoZSAzLWJp
dCBpbmRleCB2YWx1ZSBpbnRvIHRoZSBQQVQsIFBDRCwgYW5kIFBXVCBiaXRzLiAqLwogCWNh
Y2hlX2JpdHMgPSAwOwotCWlmIChwYXRfaWR4ICYgMHg0KQorCWlmIChwYXRfaW5kZXggJiAw
eDQpCiAJCWNhY2hlX2JpdHMgfD0gcGF0X2ZsYWc7Ci0JaWYgKHBhdF9pZHggJiAweDIpCisJ
aWYgKHBhdF9pbmRleCAmIDB4MikKIAkJY2FjaGVfYml0cyB8PSBQR19OQ19QQ0Q7Ci0JaWYg
KHBhdF9pZHggJiAweDEpCisJaWYgKHBhdF9pbmRleCAmIDB4MSkKIAkJY2FjaGVfYml0cyB8
PSBQR19OQ19QV1Q7CiAJcmV0dXJuIChjYWNoZV9iaXRzKTsKIH0KLQotLyoKLSAqIFRoZSBj
YWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIFRMQiBjb25zaXN0ZW5jeS4K
LSAqLwotc3RhdGljIHZvaWQKLXBtYXBfa2VudGVyX3BkZSh2bV9vZmZzZXRfdCB2YSwgcGRf
ZW50cnlfdCBuZXdwZGUpCi17Ci0JcGRfZW50cnlfdCAqcGRlOwotCXBtYXBfdCBwbWFwOwot
CWJvb2xlYW5fdCBQVERfdXBkYXRlZDsKLQotCVBURF91cGRhdGVkID0gRkFMU0U7Ci0JbXR4
X2xvY2tfc3BpbigmYWxscG1hcHNfbG9jayk7Ci0JTElTVF9GT1JFQUNIKHBtYXAsICZhbGxw
bWFwcywgcG1fbGlzdCkgewotCQlpZiAoKHBtYXAtPnBtX3BkaXJbUFREUFRESV0gJiBQR19G
UkFNRSkgPT0gKFBURHBkZVswXSAmCi0JCSAgICBQR19GUkFNRSkpCi0JCQlQVERfdXBkYXRl
ZCA9IFRSVUU7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAsIHZhKTsKLQkJcGRlX3N0b3JlKHBk
ZSwgbmV3cGRlKTsKLQl9Ci0JbXR4X3VubG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKLQlL
QVNTRVJUKFBURF91cGRhdGVkLAotCSAgICAoInBtYXBfa2VudGVyX3BkZTogY3VycmVudCBw
YWdlIHRhYmxlIGlzIG5vdCBpbiBhbGxwbWFwcyIpKTsKLX0KLQotLyoKLSAqIEFmdGVyIGNo
YW5naW5nIHRoZSBwYWdlIHNpemUgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNz
IGluIHRoZSBwYWdlCi0gKiB0YWJsZSwgZmx1c2ggdGhlIGNvcnJlc3BvbmRpbmcgZW50cmll
cyBmcm9tIHRoZSBwcm9jZXNzb3IncyBUTEIuICBPbmx5IHRoZQotICogY2FsbGluZyBwcm9j
ZXNzb3IncyBUTEIgaXMgYWZmZWN0ZWQuCi0gKgotICogVGhlIGNhbGxpbmcgdGhyZWFkIG11
c3QgYmUgcGlubmVkIHRvIGEgcHJvY2Vzc29yLgotICovCi1zdGF0aWMgdm9pZAotcG1hcF91
cGRhdGVfcGRlX2ludmFsaWRhdGUodm1fb2Zmc2V0X3QgdmEsIHBkX2VudHJ5X3QgbmV3cGRl
KQotewotCXVfbG9uZyBjcjQ7Ci0KLQlpZiAoKG5ld3BkZSAmIFBHX1BTKSA9PSAwKQotCQkv
KiBEZW1vdGlvbjogZmx1c2ggYSBzcGVjaWZpYyAyTUIgcGFnZSBtYXBwaW5nLiAqLwotCQlp
bnZscGcodmEpOwotCWVsc2UgaWYgKChuZXdwZGUgJiBQR19HKSA9PSAwKQotCQkvKgotCQkg
KiBQcm9tb3Rpb246IGZsdXNoIGV2ZXJ5IDRLQiBwYWdlIG1hcHBpbmcgZnJvbSB0aGUgVExC
Ci0JCSAqIGJlY2F1c2UgdGhlcmUgYXJlIHRvbyBtYW55IHRvIGZsdXNoIGluZGl2aWR1YWxs
eS4KLQkJICovCi0JCWludmx0bGIoKTsKLQllbHNlIHsKLQkJLyoKLQkJICogUHJvbW90aW9u
OiBmbHVzaCBldmVyeSA0S0IgcGFnZSBtYXBwaW5nIGZyb20gdGhlIFRMQiwKLQkJICogaW5j
bHVkaW5nIGFueSBnbG9iYWwgKFBHX0cpIG1hcHBpbmdzLgotCQkgKi8KLQkJY3I0ID0gcmNy
NCgpOwotCQlsb2FkX2NyNChjcjQgJiB+Q1I0X1BHRSk7Ci0JCS8qCi0JCSAqIEFsdGhvdWdo
IHByZWVtcHRpb24gYXQgdGhpcyBwb2ludCBjb3VsZCBiZSBkZXRyaW1lbnRhbCB0bwotCQkg
KiBwZXJmb3JtYW5jZSwgaXQgd291bGQgbm90IGxlYWQgdG8gYW4gZXJyb3IuICBQR19HIGlz
IHNpbXBseQotCQkgKiBpZ25vcmVkIGlmIENSNC5QR0UgaXMgY2xlYXIuICBNb3Jlb3Zlciwg
aW4gY2FzZSB0aGlzIGJsb2NrCi0JCSAqIGlzIHJlLWVudGVyZWQsIHRoZSBsb2FkX2NyNCgp
IGVpdGhlciBhYm92ZSBvciBiZWxvdyB3aWxsCi0JCSAqIG1vZGlmeSBDUjQuUEdFIGZsdXNo
aW5nIHRoZSBUTEIuCi0JCSAqLwotCQlsb2FkX2NyNChjcjQgfCBDUjRfUEdFKTsKLQl9Ci19
CiAjaWZkZWYgU01QCiAvKgogICogRm9yIFNNUCwgdGhlc2UgZnVuY3Rpb25zIGhhdmUgdG8g
dXNlIHRoZSBJUEkgbWVjaGFuaXNtIGZvciBjb2hlcmVuY2UuCkBAIC05MzcsNiArNzQzLDkg
QEAKIAljcHVzZXRfdCBvdGhlcl9jcHVzOwogCXVfaW50IGNwdWlkOwogCisJQ1RSMihLVFJf
UE1BUCwgInBtYXBfaW52YWxpZGF0ZV9wYWdlOiBwbWFwPSVwIHZhPTB4JXgiLAorCSAgICBw
bWFwLCB2YSk7CisJCiAJc2NoZWRfcGluKCk7CiAJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXAg
fHwgIUNQVV9DTVAoJnBtYXAtPnBtX2FjdGl2ZSwgJmFsbF9jcHVzKSkgewogCQlpbnZscGco
dmEpOwpAQCAtOTUyLDYgKzc2MSw3IEBACiAJCQlzbXBfbWFza2VkX2ludmxwZyhvdGhlcl9j
cHVzLCB2YSk7CiAJfQogCXNjaGVkX3VucGluKCk7CisJUFRfVVBEQVRFU19GTFVTSCgpOwog
fQogCiB2b2lkCkBAIC05NjEsNiArNzcxLDkgQEAKIAl2bV9vZmZzZXRfdCBhZGRyOwogCXVf
aW50IGNwdWlkOwogCisJQ1RSMyhLVFJfUE1BUCwgInBtYXBfaW52YWxpZGF0ZV9wYWdlOiBw
bWFwPSVwIGV2YT0weCV4IHN2YT0weCV4IiwKKwkgICAgcG1hcCwgc3ZhLCBldmEpOworCiAJ
c2NoZWRfcGluKCk7CiAJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXAgfHwgIUNQVV9DTVAoJnBt
YXAtPnBtX2FjdGl2ZSwgJmFsbF9jcHVzKSkgewogCQlmb3IgKGFkZHIgPSBzdmE7IGFkZHIg
PCBldmE7IGFkZHIgKz0gUEFHRV9TSVpFKQpAQCAtOTc4LDYgKzc5MSw3IEBACiAJCQlzbXBf
bWFza2VkX2ludmxwZ19yYW5nZShvdGhlcl9jcHVzLCBzdmEsIGV2YSk7CiAJfQogCXNjaGVk
X3VucGluKCk7CisJUFRfVVBEQVRFU19GTFVTSCgpOwogfQogCiB2b2lkCkBAIC05ODYsNiAr
ODAwLDggQEAKIAljcHVzZXRfdCBvdGhlcl9jcHVzOwogCXVfaW50IGNwdWlkOwogCisJQ1RS
MShLVFJfUE1BUCwgInBtYXBfaW52YWxpZGF0ZV9wYWdlOiBwbWFwPSVwIiwgcG1hcCk7CisK
IAlzY2hlZF9waW4oKTsKIAlpZiAocG1hcCA9PSBrZXJuZWxfcG1hcCB8fCAhQ1BVX0NNUCgm
cG1hcC0+cG1fYWN0aXZlLCAmYWxsX2NwdXMpKSB7CiAJCWludmx0bGIoKTsKQEAgLTEwMTIs
OTggKzgyOCw2IEBACiAJc21wX2NhY2hlX2ZsdXNoKCk7CiAJc2NoZWRfdW5waW4oKTsKIH0K
LQotc3RydWN0IHBkZV9hY3Rpb24gewotCWNwdXNldF90IGludmFsaWRhdGU7CS8qIHByb2Nl
c3NvcnMgdGhhdCBpbnZhbGlkYXRlIHRoZWlyIFRMQiAqLwotCXZtX29mZnNldF90IHZhOwot
CXBkX2VudHJ5X3QgKnBkZTsKLQlwZF9lbnRyeV90IG5ld3BkZTsKLQl1X2ludCBzdG9yZTsJ
CS8qIHByb2Nlc3NvciB0aGF0IHVwZGF0ZXMgdGhlIFBERSAqLwotfTsKLQotc3RhdGljIHZv
aWQKLXBtYXBfdXBkYXRlX3BkZV9rZXJuZWwodm9pZCAqYXJnKQotewotCXN0cnVjdCBwZGVf
YWN0aW9uICphY3QgPSBhcmc7Ci0JcGRfZW50cnlfdCAqcGRlOwotCXBtYXBfdCBwbWFwOwot
Ci0JaWYgKGFjdC0+c3RvcmUgPT0gUENQVV9HRVQoY3B1aWQpKSB7Ci0KLQkJLyoKLQkJICog
RWxzZXdoZXJlLCB0aGlzIG9wZXJhdGlvbiByZXF1aXJlcyBhbGxwbWFwc19sb2NrIGZvcgot
CQkgKiBzeW5jaHJvbml6YXRpb24uICBIZXJlLCBpdCBkb2VzIG5vdCBiZWNhdXNlIGl0IGlz
IGJlaW5nCi0JCSAqIHBlcmZvcm1lZCBpbiB0aGUgY29udGV4dCBvZiBhbiBhbGxfY3B1cyBy
ZW5kZXp2b3VzLgotCQkgKi8KLQkJTElTVF9GT1JFQUNIKHBtYXAsICZhbGxwbWFwcywgcG1f
bGlzdCkgewotCQkJcGRlID0gcG1hcF9wZGUocG1hcCwgYWN0LT52YSk7Ci0JCQlwZGVfc3Rv
cmUocGRlLCBhY3QtPm5ld3BkZSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wbWFw
X3VwZGF0ZV9wZGVfdXNlcih2b2lkICphcmcpCi17Ci0Jc3RydWN0IHBkZV9hY3Rpb24gKmFj
dCA9IGFyZzsKLQotCWlmIChhY3QtPnN0b3JlID09IFBDUFVfR0VUKGNwdWlkKSkKLQkJcGRl
X3N0b3JlKGFjdC0+cGRlLCBhY3QtPm5ld3BkZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wbWFw
X3VwZGF0ZV9wZGVfdGVhcmRvd24odm9pZCAqYXJnKQotewotCXN0cnVjdCBwZGVfYWN0aW9u
ICphY3QgPSBhcmc7Ci0KLQlpZiAoQ1BVX0lTU0VUKFBDUFVfR0VUKGNwdWlkKSwgJmFjdC0+
aW52YWxpZGF0ZSkpCi0JCXBtYXBfdXBkYXRlX3BkZV9pbnZhbGlkYXRlKGFjdC0+dmEsIGFj
dC0+bmV3cGRlKTsKLX0KLQotLyoKLSAqIENoYW5nZSB0aGUgcGFnZSBzaXplIGZvciB0aGUg
c3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyBpbiBhIHdheSB0aGF0Ci0gKiBwcmV2ZW50cyBh
bnkgcG9zc2liaWxpdHkgb2YgdGhlIFRMQiBldmVyIGhhdmluZyB0d28gZW50cmllcyB0aGF0
IG1hcCB0aGUKLSAqIHNhbWUgdmlydHVhbCBhZGRyZXNzIHVzaW5nIGRpZmZlcmVudCBwYWdl
IHNpemVzLiAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQKLSAqIHdvcmthcm91bmQgZm9yIEVy
cmF0dW0gMzgzIG9uIEFNRCBGYW1pbHkgMTBoIHByb2Nlc3NvcnMuICBJdCBwcmV2ZW50cyBh
Ci0gKiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBmb3IgYSBUTEIgc3RhdGUgdGhhdCBpcyBp
bXByb3Blcmx5IGRpYWdub3NlZCBhcyBhCi0gKiBoYXJkd2FyZSBlcnJvci4KLSAqLwotc3Rh
dGljIHZvaWQKLXBtYXBfdXBkYXRlX3BkZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEs
IHBkX2VudHJ5X3QgKnBkZSwgcGRfZW50cnlfdCBuZXdwZGUpCi17Ci0Jc3RydWN0IHBkZV9h
Y3Rpb24gYWN0OwotCWNwdXNldF90IGFjdGl2ZSwgb3RoZXJfY3B1czsKLQl1X2ludCBjcHVp
ZDsKLQotCXNjaGVkX3BpbigpOwotCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOwotCW90aGVy
X2NwdXMgPSBhbGxfY3B1czsKLQlDUFVfQ0xSKGNwdWlkLCAmb3RoZXJfY3B1cyk7Ci0JaWYg
KHBtYXAgPT0ga2VybmVsX3BtYXApCi0JCWFjdGl2ZSA9IGFsbF9jcHVzOwotCWVsc2UKLQkJ
YWN0aXZlID0gcG1hcC0+cG1fYWN0aXZlOwotCWlmIChDUFVfT1ZFUkxBUCgmYWN0aXZlLCAm
b3RoZXJfY3B1cykpIHsKLQkJYWN0LnN0b3JlID0gY3B1aWQ7Ci0JCWFjdC5pbnZhbGlkYXRl
ID0gYWN0aXZlOwotCQlhY3QudmEgPSB2YTsKLQkJYWN0LnBkZSA9IHBkZTsKLQkJYWN0Lm5l
d3BkZSA9IG5ld3BkZTsKLQkJQ1BVX1NFVChjcHVpZCwgJmFjdGl2ZSk7Ci0JCXNtcF9yZW5k
ZXp2b3VzX2NwdXMoYWN0aXZlLAotCQkgICAgc21wX25vX3JlbmRldm91c19iYXJyaWVyLCBw
bWFwID09IGtlcm5lbF9wbWFwID8KLQkJICAgIHBtYXBfdXBkYXRlX3BkZV9rZXJuZWwgOiBw
bWFwX3VwZGF0ZV9wZGVfdXNlciwKLQkJICAgIHBtYXBfdXBkYXRlX3BkZV90ZWFyZG93biwg
JmFjdCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXApCi0JCQlwbWFw
X2tlbnRlcl9wZGUodmEsIG5ld3BkZSk7Ci0JCWVsc2UKLQkJCXBkZV9zdG9yZShwZGUsIG5l
d3BkZSk7Ci0JCWlmIChDUFVfSVNTRVQoY3B1aWQsICZhY3RpdmUpKQotCQkJcG1hcF91cGRh
dGVfcGRlX2ludmFsaWRhdGUodmEsIG5ld3BkZSk7Ci0JfQotCXNjaGVkX3VucGluKCk7Ci19
CiAjZWxzZSAvKiAhU01QICovCiAvKgogICogTm9ybWFsLCBub24tU01QLCA0ODYrIGludmFs
aWRhdGlvbiBmdW5jdGlvbnMuCkBAIC0xMTEyLDkgKzgzNiwxMiBAQAogUE1BUF9JTkxJTkUg
dm9pZAogcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZh
KQogeworCUNUUjIoS1RSX1BNQVAsICJwbWFwX2ludmFsaWRhdGVfcGFnZTogcG1hcD0lcCB2
YT0weCV4IiwKKwkgICAgcG1hcCwgdmEpOwogCiAJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXAg
fHwgIUNQVV9FTVBUWSgmcG1hcC0+cG1fYWN0aXZlKSkKIAkJaW52bHBnKHZhKTsKKwlQVF9V
UERBVEVTX0ZMVVNIKCk7CiB9CiAKIFBNQVBfSU5MSU5FIHZvaWQKQEAgLTExMjIsMTUgKzg0
OSwyMiBAQAogewogCXZtX29mZnNldF90IGFkZHI7CiAKKwlpZiAoZXZhIC0gc3ZhID4gUEFH
RV9TSVpFKQorCQlDVFIzKEtUUl9QTUFQLCAicG1hcF9pbnZhbGlkYXRlX3JhbmdlOiBwbWFw
PSVwIHN2YT0weCV4IGV2YT0weCV4IiwKKwkJICAgIHBtYXAsIHN2YSwgZXZhKTsKKwogCWlm
IChwbWFwID09IGtlcm5lbF9wbWFwIHx8ICFDUFVfRU1QVFkoJnBtYXAtPnBtX2FjdGl2ZSkp
CiAJCWZvciAoYWRkciA9IHN2YTsgYWRkciA8IGV2YTsgYWRkciArPSBQQUdFX1NJWkUpCiAJ
CQlpbnZscGcoYWRkcik7CisJUFRfVVBEQVRFU19GTFVTSCgpOwogfQogCiBQTUFQX0lOTElO
RSB2b2lkCiBwbWFwX2ludmFsaWRhdGVfYWxsKHBtYXBfdCBwbWFwKQogewogCisJQ1RSMShL
VFJfUE1BUCwgInBtYXBfaW52YWxpZGF0ZV9hbGw6IHBtYXA9JXAiLCBwbWFwKTsKKwkKIAlp
ZiAocG1hcCA9PSBrZXJuZWxfcG1hcCB8fCAhQ1BVX0VNUFRZKCZwbWFwLT5wbV9hY3RpdmUp
KQogCQlpbnZsdGxiKCk7CiB9CkBAIC0xMTQxLDE4ICs4NzUsNiBAQAogCiAJd2JpbnZkKCk7
CiB9Ci0KLXN0YXRpYyB2b2lkCi1wbWFwX3VwZGF0ZV9wZGUocG1hcF90IHBtYXAsIHZtX29m
ZnNldF90IHZhLCBwZF9lbnRyeV90ICpwZGUsIHBkX2VudHJ5X3QgbmV3cGRlKQotewotCi0J
aWYgKHBtYXAgPT0ga2VybmVsX3BtYXApCi0JCXBtYXBfa2VudGVyX3BkZSh2YSwgbmV3cGRl
KTsKLQllbHNlCi0JCXBkZV9zdG9yZShwZGUsIG5ld3BkZSk7Ci0JaWYgKHBtYXAgPT0ga2Vy
bmVsX3BtYXAgfHwgIUNQVV9FTVBUWSgmcG1hcC0+cG1fYWN0aXZlKSkKLQkJcG1hcF91cGRh
dGVfcGRlX2ludmFsaWRhdGUodmEsIG5ld3BkZSk7Ci19CiAjZW5kaWYgLyogIVNNUCAqLwog
CiAjZGVmaW5lCVBNQVBfQ0xGTFVTSF9USFJFU0hPTEQJKDIgKiAxMDI0ICogMTAyNCkKQEAg
LTEyNDIsOCArOTY0LDExIEBACiAJCW10eF9sb2NrKCZQTUFQMm11dGV4KTsKIAkJbmV3cGYg
PSAqcGRlICYgUEdfRlJBTUU7CiAJCWlmICgoKlBNQVAyICYgUEdfRlJBTUUpICE9IG5ld3Bm
KSB7Ci0JCQkqUE1BUDIgPSBuZXdwZiB8IFBHX1JXIHwgUEdfViB8IFBHX0EgfCBQR19NOwot
CQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2Uoa2VybmVsX3BtYXAsICh2bV9vZmZzZXRfdClQQURE
UjIpOworCQkJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOworCQkJUFRfU0VUX01BKFBBRERSMiwg
bmV3cGYgfCBQR19WIHwgUEdfQSB8IFBHX00pOworCQkJdm1fcGFnZV91bmxvY2tfcXVldWVz
KCk7CisJCQlDVFIzKEtUUl9QTUFQLCAicG1hcF9wdGU6IHBtYXA9JXAgdmE9MHgleCBuZXdw
dGU9MHglMDh4IiwKKwkJCSAgICBwbWFwLCB2YSwgKCpQTUFQMiAmIDB4ZmZmZmZmZmYpKTsK
IAkJfQogCQlyZXR1cm4gKFBBRERSMiArIChpMzg2X2J0b3AodmEpICYgKE5QVEVQRyAtIDEp
KSk7CiAJfQpAQCAtMTI1OCw4ICs5ODMsMTQgQEAKIHBtYXBfcHRlX3JlbGVhc2UocHRfZW50
cnlfdCAqcHRlKQogewogCi0JaWYgKChwdF9lbnRyeV90ICopKCh2bV9vZmZzZXRfdClwdGUg
JiB+UEFHRV9NQVNLKSA9PSBQQUREUjIpCisJaWYgKChwdF9lbnRyeV90ICopKCh2bV9vZmZz
ZXRfdClwdGUgJiB+UEFHRV9NQVNLKSA9PSBQQUREUjIpIHsKKwkJQ1RSMShLVFJfUE1BUCwg
InBtYXBfcHRlX3JlbGVhc2U6IHB0ZT0weCVqeCIsCisJCSAgICAqUE1BUDIpOworCQl2bV9w
YWdlX2xvY2tfcXVldWVzKCk7CisJCVBUX1NFVF9WQShQTUFQMiwgMCwgVFJVRSk7CisJCXZt
X3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogCQltdHhfdW5sb2NrKCZQTUFQMm11dGV4KTsKKwl9
CiB9CiAKIHN0YXRpYyBfX2lubGluZSB2b2lkCkBAIC0xMjY3LDYgKzk5OCw3IEBACiB7CiAK
IAlpbnZscGcoKHVfaW50KWNhZGRyKTsKKwlQVF9VUERBVEVTX0ZMVVNIKCk7CiB9CiAKIC8q
CkBAIC0xMjk2LDExICsxMDI4LDEzIEBACiAJCUtBU1NFUlQoY3VydGhyZWFkLT50ZF9waW5u
ZWQgPiAwLCAoImN1cnRocmVhZCBub3QgcGlubmVkIikpOwogCQluZXdwZiA9ICpwZGUgJiBQ
R19GUkFNRTsKIAkJaWYgKCgqUE1BUDEgJiBQR19GUkFNRSkgIT0gbmV3cGYpIHsKLQkJCSpQ
TUFQMSA9IG5ld3BmIHwgUEdfUlcgfCBQR19WIHwgUEdfQSB8IFBHX007CisJCQlQVF9TRVRf
TUEoUEFERFIxLCBuZXdwZiB8IFBHX1YgfCBQR19BIHwgUEdfTSk7CisJCQlDVFIzKEtUUl9Q
TUFQLCAicG1hcF9wdGVfcXVpY2s6IHBtYXA9JXAgdmE9MHgleCBuZXdwdGU9MHglMDh4IiwK
KwkJCSAgICBwbWFwLCB2YSwgKHVfbG9uZykqUE1BUDEpOworCQkJCiAjaWZkZWYgU01QCiAJ
CQlQTUFQMWNwdSA9IFBDUFVfR0VUKGNwdWlkKTsKICNlbmRpZgotCQkJaW52bGNhZGRyKFBB
RERSMSk7CiAJCQlQTUFQMWNoYW5nZWQrKzsKIAkJfSBlbHNlCiAjaWZkZWYgU01QCkBAIC0x
MzI4LDE4ICsxMDYyLDUwIEBACiAJdm1fcGFkZHJfdCBydHZhbDsKIAlwdF9lbnRyeV90ICpw
dGU7CiAJcGRfZW50cnlfdCBwZGU7CisJcHRfZW50cnlfdCBwdGV2YWw7CiAKIAlydHZhbCA9
IDA7CiAJUE1BUF9MT0NLKHBtYXApOwogCXBkZSA9IHBtYXAtPnBtX3BkaXJbdmEgPj4gUERS
U0hJRlRdOwogCWlmIChwZGUgIT0gMCkgewotCQlpZiAoKHBkZSAmIFBHX1BTKSAhPSAwKQot
CQkJcnR2YWwgPSAocGRlICYgUEdfUFNfRlJBTUUpIHwgKHZhICYgUERSTUFTSyk7Ci0JCWVs
c2UgewotCQkJcHRlID0gcG1hcF9wdGUocG1hcCwgdmEpOwotCQkJcnR2YWwgPSAoKnB0ZSAm
IFBHX0ZSQU1FKSB8ICh2YSAmIFBBR0VfTUFTSyk7Ci0JCQlwbWFwX3B0ZV9yZWxlYXNlKHB0
ZSk7CisJCWlmICgocGRlICYgUEdfUFMpICE9IDApIHsKKwkJCXJ0dmFsID0geHBtYXBfbXRv
cChwZGUgJiBQR19QU19GUkFNRSkgfCAodmEgJiBQRFJNQVNLKTsKKwkJCVBNQVBfVU5MT0NL
KHBtYXApOworCQkJcmV0dXJuIHJ0dmFsOworCQl9CisJCXB0ZSA9IHBtYXBfcHRlKHBtYXAs
IHZhKTsKKwkJcHRldmFsID0gKnB0ZSA/IHhwbWFwX210b3AoKnB0ZSkgOiAwOworCQlydHZh
bCA9IChwdGV2YWwgJiBQR19GUkFNRSkgfCAodmEgJiBQQUdFX01BU0spOworCQlwbWFwX3B0
ZV9yZWxlYXNlKHB0ZSk7CisJfQorCVBNQVBfVU5MT0NLKHBtYXApOworCXJldHVybiAocnR2
YWwpOworfQorCisvKgorICoJUm91dGluZToJcG1hcF9leHRyYWN0X21hCisgKglGdW5jdGlv
bjoKKyAqCQlMaWtlIHBtYXBfZXh0cmFjdCwgYnV0IHJldHVybnMgbWFjaGluZSBhZGRyZXNz
CisgKi8KK3ZtX3BhZGRyX3QgCitwbWFwX2V4dHJhY3RfbWEocG1hcF90IHBtYXAsIHZtX29m
ZnNldF90IHZhKQoreworCXZtX3BhZGRyX3QgcnR2YWw7CisJcHRfZW50cnlfdCAqcHRlOwor
CXBkX2VudHJ5X3QgcGRlOworCisJcnR2YWwgPSAwOworCVBNQVBfTE9DSyhwbWFwKTsKKwlw
ZGUgPSBwbWFwLT5wbV9wZGlyW3ZhID4+IFBEUlNISUZUXTsKKwlpZiAocGRlICE9IDApIHsK
KwkJaWYgKChwZGUgJiBQR19QUykgIT0gMCkgeworCQkJcnR2YWwgPSAocGRlICYgflBEUk1B
U0spIHwgKHZhICYgUERSTUFTSyk7CisJCQlQTUFQX1VOTE9DSyhwbWFwKTsKKwkJCXJldHVy
biBydHZhbDsKIAkJfQorCQlwdGUgPSBwbWFwX3B0ZShwbWFwLCB2YSk7CisJCXJ0dmFsID0g
KCpwdGUgJiBQR19GUkFNRSkgfCAodmEgJiBQQUdFX01BU0spOworCQlwbWFwX3B0ZV9yZWxl
YXNlKHB0ZSk7CiAJfQogCVBNQVBfVU5MT0NLKHBtYXApOwogCXJldHVybiAocnR2YWwpOwpA
QCAtMTM1Niw3ICsxMTIyLDcgQEAKIHBtYXBfZXh0cmFjdF9hbmRfaG9sZChwbWFwX3QgcG1h
cCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3Byb3RfdCBwcm90KQogewogCXBkX2VudHJ5X3QgcGRl
OwotCXB0X2VudHJ5X3QgcHRlLCAqcHRlcDsKKwlwdF9lbnRyeV90IHB0ZTsKIAl2bV9wYWdl
X3QgbTsKIAl2bV9wYWRkcl90IHBhOwogCkBAIC0xMzY0LDcgKzExMzAsNyBAQAogCW0gPSBO
VUxMOwogCVBNQVBfTE9DSyhwbWFwKTsKIHJldHJ5OgotCXBkZSA9ICpwbWFwX3BkZShwbWFw
LCB2YSk7CisJcGRlID0gUFRfR0VUKHBtYXBfcGRlKHBtYXAsIHZhKSk7CiAJaWYgKHBkZSAh
PSAwKSB7CiAJCWlmIChwZGUgJiBQR19QUykgewogCQkJaWYgKChwZGUgJiBQR19SVykgfHwg
KHByb3QgJiBWTV9QUk9UX1dSSVRFKSA9PSAwKSB7CkBAIC0xMzc2LDE2ICsxMTQyLDE4IEBA
CiAJCQkJdm1fcGFnZV9ob2xkKG0pOwogCQkJfQogCQl9IGVsc2UgewotCQkJcHRlcCA9IHBt
YXBfcHRlKHBtYXAsIHZhKTsKLQkJCXB0ZSA9ICpwdGVwOwotCQkJcG1hcF9wdGVfcmVsZWFz
ZShwdGVwKTsKLQkJCWlmIChwdGUgIT0gMCAmJgorCQkJc2NoZWRfcGluKCk7CisJCQlwdGUg
PSBQVF9HRVQocG1hcF9wdGVfcXVpY2socG1hcCwgdmEpKTsKKwkJCWlmICgqUE1BUDEpCisJ
CQkJUFRfU0VUX01BKFBBRERSMSwgMCk7CisJCQlpZiAoKHB0ZSAmIFBHX1YpICYmCiAJCQkg
ICAgKChwdGUgJiBQR19SVykgfHwgKHByb3QgJiBWTV9QUk9UX1dSSVRFKSA9PSAwKSkgewog
CQkJCWlmICh2bV9wYWdlX3BhX3RyeXJlbG9jayhwbWFwLCBwdGUgJiBQR19GUkFNRSwgJnBh
KSkKIAkJCQkJZ290byByZXRyeTsKIAkJCQltID0gUEhZU19UT19WTV9QQUdFKHB0ZSAmIFBH
X0ZSQU1FKTsKIAkJCQl2bV9wYWdlX2hvbGQobSk7CiAJCQl9CisJCQlzY2hlZF91bnBpbigp
OwogCQl9CiAJfQogCVBBX1VOTE9DS19DT05EKHBhKTsKQEAgLTE0MDMsMjIgKzExNzEsMjcg
QEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGJlZm9yZSBwbWFwX2Jvb3Rz
dHJhcCgpIGlzIGNhbGxlZC4KICAqLwotUE1BUF9JTkxJTkUgdm9pZCAKK3ZvaWQgCiBwbWFw
X2tlbnRlcih2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBwYSkKIHsKKworCVBUX1NFVF9N
QSh2YSwgeHBtYXBfcHRvbShwYSl8IFBHX1JXIHwgUEdfViB8IHBnZWZsYWcpOworfQorCit2
b2lkIAorcG1hcF9rZW50ZXJfbWEodm1fb2Zmc2V0X3QgdmEsIHZtX3BhZGRyX3QgbWEpCit7
CiAJcHRfZW50cnlfdCAqcHRlOwogCiAJcHRlID0gdnRvcHRlKHZhKTsKLQlwdGVfc3RvcmUo
cHRlLCBwYSB8IFBHX1JXIHwgUEdfViB8IHBnZWZsYWcpOworCXB0ZV9zdG9yZV9tYShwdGUs
IG1hIHwgUEdfUlcgfCBQR19WIHwgcGdlZmxhZyk7CiB9CiAKIHN0YXRpYyBfX2lubGluZSB2
b2lkCiBwbWFwX2tlbnRlcl9hdHRyKHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90IHBhLCBp
bnQgbW9kZSkKIHsKLQlwdF9lbnRyeV90ICpwdGU7CiAKLQlwdGUgPSB2dG9wdGUodmEpOwot
CXB0ZV9zdG9yZShwdGUsIHBhIHwgUEdfUlcgfCBQR19WIHwgcGdlZmxhZyB8IHBtYXBfY2Fj
aGVfYml0cyhtb2RlLCAwKSk7CisJUFRfU0VUX01BKHZhLCBwYSB8IFBHX1JXIHwgUEdfViB8
IHBnZWZsYWcgfCBwbWFwX2NhY2hlX2JpdHMobW9kZSwgMCkpOwogfQogCiAvKgpAQCAtMTQz
Myw3ICsxMjA2LDcgQEAKIAlwdF9lbnRyeV90ICpwdGU7CiAKIAlwdGUgPSB2dG9wdGUodmEp
OwotCXB0ZV9jbGVhcihwdGUpOworCVBUX0NMRUFSX1ZBKHB0ZSwgRkFMU0UpOwogfQogCiAv
KgpAQCAtMTQ1Miw0MCArMTIyNSwxNCBAQAogcG1hcF9tYXAodm1fb2Zmc2V0X3QgKnZpcnQs
IHZtX3BhZGRyX3Qgc3RhcnQsIHZtX3BhZGRyX3QgZW5kLCBpbnQgcHJvdCkKIHsKIAl2bV9v
ZmZzZXRfdCB2YSwgc3ZhOwotCXZtX3BhZGRyX3Qgc3VwZXJwYWdlX29mZnNldDsKLQlwZF9l
bnRyeV90IG5ld3BkZTsKIAotCXZhID0gKnZpcnQ7Ci0JLyoKLQkgKiBEb2VzIHRoZSBwaHlz
aWNhbCBhZGRyZXNzIHJhbmdlJ3Mgc2l6ZSBhbmQgYWxpZ25tZW50IHBlcm1pdCBhdAotCSAq
IGxlYXN0IG9uZSBzdXBlcnBhZ2UgbWFwcGluZyB0byBiZSBjcmVhdGVkPwotCSAqLyAKLQlz
dXBlcnBhZ2Vfb2Zmc2V0ID0gc3RhcnQgJiBQRFJNQVNLOwotCWlmICgoZW5kIC0gc3RhcnQp
IC0gKChOQlBEUiAtIHN1cGVycGFnZV9vZmZzZXQpICYgUERSTUFTSykgPj0gTkJQRFIpIHsK
LQkJLyoKLQkJICogSW5jcmVhc2UgdGhlIHN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBzbyB0
aGF0IGl0cyBhbGlnbm1lbnQKLQkJICogZG9lcyBub3QgcHJlY2x1ZGUgdGhlIHVzZSBvZiBz
dXBlcnBhZ2UgbWFwcGluZ3MuCi0JCSAqLwotCQlpZiAoKHZhICYgUERSTUFTSykgPCBzdXBl
cnBhZ2Vfb2Zmc2V0KQotCQkJdmEgPSAodmEgJiB+UERSTUFTSykgKyBzdXBlcnBhZ2Vfb2Zm
c2V0OwotCQllbHNlIGlmICgodmEgJiBQRFJNQVNLKSA+IHN1cGVycGFnZV9vZmZzZXQpCi0J
CQl2YSA9ICgodmEgKyBQRFJNQVNLKSAmIH5QRFJNQVNLKSArIHN1cGVycGFnZV9vZmZzZXQ7
Ci0JfQotCXN2YSA9IHZhOworCXZhID0gc3ZhID0gKnZpcnQ7CisJQ1RSNChLVFJfUE1BUCwg
InBtYXBfbWFwOiB2YT0weCV4IHN0YXJ0PTB4JWp4IGVuZD0weCVqeCBwcm90PTB4JXgiLAor
CSAgICB2YSwgc3RhcnQsIGVuZCwgcHJvdCk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0J
CWlmICgoc3RhcnQgJiBQRFJNQVNLKSA9PSAwICYmIGVuZCAtIHN0YXJ0ID49IE5CUERSICYm
Ci0JCSAgICBwc2VmbGFnKSB7Ci0JCQlLQVNTRVJUKCh2YSAmIFBEUk1BU0spID09IDAsCi0J
CQkgICAgKCJwbWFwX21hcDogbWlzYWxpZ25lZCB2YSAlI3giLCB2YSkpOwotCQkJbmV3cGRl
ID0gc3RhcnQgfCBQR19QUyB8IHBnZWZsYWcgfCBQR19SVyB8IFBHX1Y7Ci0JCQlwbWFwX2tl
bnRlcl9wZGUodmEsIG5ld3BkZSk7Ci0JCQl2YSArPSBOQlBEUjsKLQkJCXN0YXJ0ICs9IE5C
UERSOwotCQl9IGVsc2UgewotCQkJcG1hcF9rZW50ZXIodmEsIHN0YXJ0KTsKLQkJCXZhICs9
IFBBR0VfU0laRTsKLQkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJfQorCQlwbWFwX2tlbnRl
cih2YSwgc3RhcnQpOworCQl2YSArPSBQQUdFX1NJWkU7CisJCXN0YXJ0ICs9IFBBR0VfU0la
RTsKIAl9CiAJcG1hcF9pbnZhbGlkYXRlX3JhbmdlKGtlcm5lbF9wbWFwLCBzdmEsIHZhKTsK
IAkqdmlydCA9IHZhOwpAQCAtMTUwNSwyNCArMTI1Miw0NyBAQAogdm9pZAogcG1hcF9xZW50
ZXIodm1fb2Zmc2V0X3Qgc3ZhLCB2bV9wYWdlX3QgKm1hLCBpbnQgY291bnQpCiB7Ci0JcHRf
ZW50cnlfdCAqZW5kcHRlLCBvbGRwdGUsIHBhLCAqcHRlOwotCXZtX3BhZ2VfdCBtOworCXB0
X2VudHJ5X3QgKmVuZHB0ZSwgKnB0ZTsKKwl2bV9wYWRkcl90IHBhOworCXZtX29mZnNldF90
IHZhID0gc3ZhOworCWludCBtY2xjb3VudCA9IDA7CisJbXVsdGljYWxsX2VudHJ5X3QgbWNs
WzE2XTsKKwltdWx0aWNhbGxfZW50cnlfdCAqbWNscCA9IG1jbDsKKwlpbnQgZXJyb3I7CiAK
LQlvbGRwdGUgPSAwOworCUNUUjIoS1RSX1BNQVAsICJwbWFwX3FlbnRlcjpzdmE9MHgleCBj
b3VudD0lZCIsIHZhLCBjb3VudCk7CiAJcHRlID0gdnRvcHRlKHN2YSk7CiAJZW5kcHRlID0g
cHRlICsgY291bnQ7CiAJd2hpbGUgKHB0ZSA8IGVuZHB0ZSkgewotCQltID0gKm1hKys7Ci0J
CXBhID0gVk1fUEFHRV9UT19QSFlTKG0pIHwgcG1hcF9jYWNoZV9iaXRzKG0tPm1kLnBhdF9t
b2RlLCAwKTsKLQkJaWYgKCgqcHRlICYgKFBHX0ZSQU1FIHwgUEdfUFRFX0NBQ0hFKSkgIT0g
cGEpIHsKLQkJCW9sZHB0ZSB8PSAqcHRlOwotCQkJcHRlX3N0b3JlKHB0ZSwgcGEgfCBwZ2Vm
bGFnIHwgUEdfUlcgfCBQR19WKTsKLQkJfQotCQlwdGUrKzsKKwkJcGEgPSBWTV9QQUdFX1RP
X01BQ0goKm1hKSB8IHBnZWZsYWcgfCBQR19SVyB8IFBHX1YgfCBQR19NIHwgUEdfQTsKKwor
CQltY2xwLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZzsKKwkJbWNscC0+
YXJnc1swXSA9IHZhOworCQltY2xwLT5hcmdzWzFdID0gKHVpbnQzMl90KShwYSAmIDB4ZmZm
ZmZmZmYpOworCQltY2xwLT5hcmdzWzJdID0gKHVpbnQzMl90KShwYSA+PiAzMik7CisJCW1j
bHAtPmFyZ3NbM10gPSAoKnB0ZSAmIFBHX1YpID8gVVZNRl9JTlZMUEd8VVZNRl9BTEwgOiAw
OworCQorCQl2YSArPSBQQUdFX1NJWkU7CisJCXB0ZSsrOworCQltYSsrOworCQltY2xwKys7
CisJCW1jbGNvdW50Kys7CisJCWlmIChtY2xjb3VudCA9PSAxNikgeworCQkJZXJyb3IgPSBI
WVBFUlZJU09SX211bHRpY2FsbChtY2wsIG1jbGNvdW50KTsKKwkJCW1jbHAgPSBtY2w7CisJ
CQltY2xjb3VudCA9IDA7CisJCQlLQVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2Fs
bCAlZCIsIGVycm9yKSk7CisJCX0JCQorCX0KKwlpZiAobWNsY291bnQpIHsKKwkJZXJyb3Ig
PSBIWVBFUlZJU09SX211bHRpY2FsbChtY2wsIG1jbGNvdW50KTsKKwkJS0FTU0VSVChlcnJv
ciA9PSAwLCAoImJhZCBtdWx0aWNhbGwgJWQiLCBlcnJvcikpOwogCX0KLQlpZiAoX19wcmVk
aWN0X2ZhbHNlKChvbGRwdGUgJiBQR19WKSAhPSAwKSkKLQkJcG1hcF9pbnZhbGlkYXRlX3Jh
bmdlKGtlcm5lbF9wbWFwLCBzdmEsIHN2YSArIGNvdW50ICoKLQkJICAgIFBBR0VfU0laRSk7
CisJCisjaWZkZWYgSU5WQVJJQU5UUworCWZvciAocHRlID0gdnRvcHRlKHN2YSksIG1jbGNv
dW50ID0gMDsgbWNsY291bnQgPCBjb3VudDsgbWNsY291bnQrKywgcHRlKyspCisJCUtBU1NF
UlQoKnB0ZSwgKCJwdGUgbm90IHNldCBmb3IgdmE9MHgleCIsIHN2YSArIG1jbGNvdW50KlBB
R0VfU0laRSkpOworI2VuZGlmCQogfQogCiAvKgpAQCAtMTUzNSwxMiArMTMwNSwxOCBAQAog
ewogCXZtX29mZnNldF90IHZhOwogCisJQ1RSMihLVFJfUE1BUCwgInBtYXBfcXJlbW92ZTog
c3ZhPTB4JXggY291bnQ9JWQiLCBzdmEsIGNvdW50KTsKIAl2YSA9IHN2YTsKKwl2bV9wYWdl
X2xvY2tfcXVldWVzKCk7CisJY3JpdGljYWxfZW50ZXIoKTsKIAl3aGlsZSAoY291bnQtLSA+
IDApIHsKIAkJcG1hcF9rcmVtb3ZlKHZhKTsKIAkJdmEgKz0gUEFHRV9TSVpFOwogCX0KKwlQ
VF9VUERBVEVTX0ZMVVNIKCk7CiAJcG1hcF9pbnZhbGlkYXRlX3JhbmdlKGtlcm5lbF9wbWFw
LCBzdmEsIHZhKTsKKwljcml0aWNhbF9leGl0KCk7CisJdm1fcGFnZV91bmxvY2tfcXVldWVz
KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKQEAgLTE1NTQsMTAxICsxMzMwLDggQEAKIAl3aGlsZSAoZnJlZSAhPSBOVUxM
KSB7CiAJCW0gPSBmcmVlOwogCQlmcmVlID0gbS0+cmlnaHQ7Ci0JCS8qIFByZXNlcnZlIHRo
ZSBwYWdlJ3MgUEdfWkVSTyBzZXR0aW5nLiAqLwotCQl2bV9wYWdlX2ZyZWVfdG9xKG0pOwot
CX0KLX0KLQotLyoKLSAqIFNjaGVkdWxlIHRoZSBzcGVjaWZpZWQgdW51c2VkIHBhZ2UgdGFi
bGUgcGFnZSB0byBiZSBmcmVlZC4gIFNwZWNpZmljYWxseSwKLSAqIGFkZCB0aGUgcGFnZSB0
byB0aGUgc3BlY2lmaWVkIGxpc3Qgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHJlbGVhc2VkIHRv
IHRoZQotICogcGh5c2ljYWwgbWVtb3J5IG1hbmFnZXIgYWZ0ZXIgdGhlIFRMQiBoYXMgYmVl
biB1cGRhdGVkLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotcG1hcF9hZGRfZGVsYXll
ZF9mcmVlX2xpc3Qodm1fcGFnZV90IG0sIHZtX3BhZ2VfdCAqZnJlZSwgYm9vbGVhbl90IHNl
dF9QR19aRVJPKQotewotCi0JaWYgKHNldF9QR19aRVJPKQotCQltLT5mbGFncyB8PSBQR19a
RVJPOwotCWVsc2UKLQkJbS0+ZmxhZ3MgJj0gflBHX1pFUk87Ci0JbS0+cmlnaHQgPSAqZnJl
ZTsKLQkqZnJlZSA9IG07Ci19Ci0KLS8qCi0gKiBJbnNlcnRzIHRoZSBzcGVjaWZpZWQgcGFn
ZSB0YWJsZSBwYWdlIGludG8gdGhlIHNwZWNpZmllZCBwbWFwJ3MgY29sbGVjdGlvbgotICog
b2YgaWRsZSBwYWdlIHRhYmxlIHBhZ2VzLiAgRWFjaCBvZiBhIHBtYXAncyBwYWdlIHRhYmxl
IHBhZ2VzIGlzIHJlc3BvbnNpYmxlCi0gKiBmb3IgbWFwcGluZyBhIGRpc3RpbmN0IHJhbmdl
IG9mIHZpcnR1YWwgYWRkcmVzc2VzLiAgVGhlIHBtYXAncyBjb2xsZWN0aW9uIGlzCi0gKiBv
cmRlcmVkIGJ5IHRoaXMgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICovCi1zdGF0aWMgdm9p
ZAotcG1hcF9pbnNlcnRfcHRfcGFnZShwbWFwX3QgcG1hcCwgdm1fcGFnZV90IG1wdGUpCi17
Ci0Jdm1fcGFnZV90IHJvb3Q7Ci0KLQlQTUFQX0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVE
KTsKLQlyb290ID0gcG1hcC0+cG1fcm9vdDsKLQlpZiAocm9vdCA9PSBOVUxMKSB7Ci0JCW1w
dGUtPmxlZnQgPSBOVUxMOwotCQltcHRlLT5yaWdodCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJ
cm9vdCA9IHZtX3BhZ2Vfc3BsYXkobXB0ZS0+cGluZGV4LCByb290KTsKLQkJaWYgKG1wdGUt
PnBpbmRleCA8IHJvb3QtPnBpbmRleCkgewotCQkJbXB0ZS0+bGVmdCA9IHJvb3QtPmxlZnQ7
Ci0JCQltcHRlLT5yaWdodCA9IHJvb3Q7Ci0JCQlyb290LT5sZWZ0ID0gTlVMTDsKLQkJfSBl
bHNlIGlmIChtcHRlLT5waW5kZXggPT0gcm9vdC0+cGluZGV4KQotCQkJcGFuaWMoInBtYXBf
aW5zZXJ0X3B0X3BhZ2U6IHBpbmRleCBhbHJlYWR5IGluc2VydGVkIik7Ci0JCWVsc2Ugewot
CQkJbXB0ZS0+cmlnaHQgPSByb290LT5yaWdodDsKLQkJCW1wdGUtPmxlZnQgPSByb290Owot
CQkJcm9vdC0+cmlnaHQgPSBOVUxMOwotCQl9Ci0JfQotCXBtYXAtPnBtX3Jvb3QgPSBtcHRl
OwotfQotCi0vKgotICogTG9va3MgZm9yIGEgcGFnZSB0YWJsZSBwYWdlIG1hcHBpbmcgdGhl
IHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlCi0gKiBzcGVjaWZpZWQgcG1hcCdz
IGNvbGxlY3Rpb24gb2YgaWRsZSBwYWdlIHRhYmxlIHBhZ2VzLiAgUmV0dXJucyBOVUxMIGlm
IHRoZXJlCi0gKiBpcyBubyBwYWdlIHRhYmxlIHBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUg
c3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcy4KLSAqLwotc3RhdGljIHZtX3BhZ2VfdAotcG1h
cF9sb29rdXBfcHRfcGFnZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEpCi17Ci0Jdm1f
cGFnZV90IG1wdGU7Ci0Jdm1fcGluZGV4X3QgcGluZGV4ID0gdmEgPj4gUERSU0hJRlQ7Ci0K
LQlQTUFQX0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQlpZiAoKG1wdGUgPSBwbWFw
LT5wbV9yb290KSAhPSBOVUxMICYmIG1wdGUtPnBpbmRleCAhPSBwaW5kZXgpIHsKLQkJbXB0
ZSA9IHZtX3BhZ2Vfc3BsYXkocGluZGV4LCBtcHRlKTsKLQkJaWYgKChwbWFwLT5wbV9yb290
ID0gbXB0ZSktPnBpbmRleCAhPSBwaW5kZXgpCi0JCQltcHRlID0gTlVMTDsKLQl9Ci0JcmV0
dXJuIChtcHRlKTsKLX0KLQotLyoKLSAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBwYWdlIHRh
YmxlIHBhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHBtYXAncyBjb2xsZWN0aW9uCi0gKiBvZiBp
ZGxlIHBhZ2UgdGFibGUgcGFnZXMuICBUaGUgc3BlY2lmaWVkIHBhZ2UgdGFibGUgcGFnZSBt
dXN0IGJlIGEgbWVtYmVyIG9mCi0gKiB0aGUgcG1hcCdzIGNvbGxlY3Rpb24uCi0gKi8KLXN0
YXRpYyB2b2lkCi1wbWFwX3JlbW92ZV9wdF9wYWdlKHBtYXBfdCBwbWFwLCB2bV9wYWdlX3Qg
bXB0ZSkKLXsKLQl2bV9wYWdlX3Qgcm9vdDsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1hcCwg
TUFfT1dORUQpOwotCWlmIChtcHRlICE9IHBtYXAtPnBtX3Jvb3QpCi0JCXZtX3BhZ2Vfc3Bs
YXkobXB0ZS0+cGluZGV4LCBwbWFwLT5wbV9yb290KTsKLQlpZiAobXB0ZS0+bGVmdCA9PSBO
VUxMKQotCQlyb290ID0gbXB0ZS0+cmlnaHQ7Ci0JZWxzZSB7Ci0JCXJvb3QgPSB2bV9wYWdl
X3NwbGF5KG1wdGUtPnBpbmRleCwgbXB0ZS0+bGVmdCk7Ci0JCXJvb3QtPnJpZ2h0ID0gbXB0
ZS0+cmlnaHQ7CisJCXZtX3BhZ2VfZnJlZV96ZXJvKG0pOwogCX0KLQlwbWFwLT5wbV9yb290
ID0gcm9vdDsKIH0KIAogLyoKQEAgLTE2NzEsMTAgKzEzNTQsMTYgQEAKIHsKIAl2bV9vZmZz
ZXRfdCBwdGV2YTsKIAorCVBUX1VQREFURVNfRkxVU0goKTsKIAkvKgogCSAqIHVubWFwIHRo
ZSBwYWdlIHRhYmxlIHBhZ2UKIAkgKi8KLQlwbWFwLT5wbV9wZGlyW20tPnBpbmRleF0gPSAw
OworCXhlbl9wdF91bnBpbihwbWFwLT5wbV9wZGlyW20tPnBpbmRleF0pOworCS8qCisJICog
cGFnZSAqbWlnaHQqIGNvbnRhaW4gcmVzaWR1YWwgbWFwcGluZyA6LS8gIAorCSAqLworCVBE
X0NMRUFSX1ZBKHBtYXAsIG0tPnBpbmRleCwgVFJVRSk7CisJcG1hcF96ZXJvX3BhZ2UobSk7
CiAJLS1wbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudDsKIAogCS8qCkBAIC0xNjk1LDcg
KzEzODQsOCBAQAogCSAqIFB1dCBwYWdlIG9uIGEgbGlzdCBzbyB0aGF0IGl0IGlzIHJlbGVh
c2VkIGFmdGVyCiAJICogKkFMTCogVExCIHNob290ZG93biBpcyBkb25lCiAJICovCi0JcG1h
cF9hZGRfZGVsYXllZF9mcmVlX2xpc3QobSwgZnJlZSwgVFJVRSk7CisJbS0+cmlnaHQgPSAq
ZnJlZTsKKwkqZnJlZSA9IG07CiAKIAlyZXR1cm4gKDEpOwogfQpAQCAtMTcxMiw3ICsxNDAy
LDcgQEAKIAogCWlmICh2YSA+PSBWTV9NQVhVU0VSX0FERFJFU1MpCiAJCXJldHVybiAoMCk7
Ci0JcHRlcGRlID0gKnBtYXBfcGRlKHBtYXAsIHZhKTsKKwlwdGVwZGUgPSBQVF9HRVQocG1h
cF9wZGUocG1hcCwgdmEpKTsKIAltcHRlID0gUEhZU19UT19WTV9QQUdFKHB0ZXBkZSAmIFBH
X0ZSQU1FKTsKIAlyZXR1cm4gKHBtYXBfdW53aXJlX3B0ZV9ob2xkKHBtYXAsIG1wdGUsIGZy
ZWUpKTsKIH0KQEAgLTE3MzQsNyArMTQyNCw2IEBACiAjaWZkZWYgUEFFCiAJcG1hcC0+cG1f
cGRwdCA9IChwZHB0X2VudHJ5X3QgKikoS0VSTkJBU0UgKyAodm1fb2Zmc2V0X3QpSWRsZVBE
UFQpOwogI2VuZGlmCi0JcG1hcC0+cG1fcm9vdCA9IE5VTEw7CiAJQ1BVX1pFUk8oJnBtYXAt
PnBtX2FjdGl2ZSk7CiAJUENQVV9TRVQoY3VycG1hcCwgcG1hcCk7CiAJVEFJTFFfSU5JVCgm
cG1hcC0+cG1fcHZjaHVuayk7CkBAIC0xNzQ4LDEwICsxNDM3LDE0IEBACiBpbnQKIHBtYXBf
cGluaXQocG1hcF90IHBtYXApCiB7Ci0Jdm1fcGFnZV90IG0sIHB0ZHBnW05QR1BURF07Ci0J
dm1fcGFkZHJfdCBwYTsKKwl2bV9wYWdlX3QgbSwgcHRkcGdbTlBHUFREICsgMV07CisJaW50
IG5wZ3B0ZCA9IE5QR1BURCArIDE7CiAJaW50IGk7CiAKKyNpZmRlZiBIQU1GSVNURURfTE9D
S0lORworCW10eF9sb2NrKCZjcmVhdGVkZWxldGVfbG9jayk7CisjZW5kaWYKKwogCVBNQVBf
TE9DS19JTklUKHBtYXApOwogCiAJLyoKQEAgLTE3NjMsMjUgKzE0NTYsMjAgQEAKIAkJICAg
IE5CUFREKTsKIAkJaWYgKHBtYXAtPnBtX3BkaXIgPT0gTlVMTCkgewogCQkJUE1BUF9MT0NL
X0RFU1RST1kocG1hcCk7CisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcKKwkJCW10eF91bmxv
Y2soJmNyZWF0ZWRlbGV0ZV9sb2NrKTsKKyNlbmRpZgogCQkJcmV0dXJuICgwKTsKIAkJfQog
I2lmZGVmIFBBRQotCQlwbWFwLT5wbV9wZHB0ID0gdW1hX3phbGxvYyhwZHB0em9uZSwgTV9X
QUlUT0sgfCBNX1pFUk8pOwotCQlLQVNTRVJUKCgodm1fb2Zmc2V0X3QpcG1hcC0+cG1fcGRw
dCAmCi0JCSAgICAoKE5QR1BURCAqIHNpemVvZihwZHB0X2VudHJ5X3QpKSAtIDEpKSA9PSAw
LAotCQkgICAgKCJwbWFwX3Bpbml0OiBwZHB0IG1pc2FsaWduZWQiKSk7Ci0JCUtBU1NFUlQo
cG1hcF9rZXh0cmFjdCgodm1fb2Zmc2V0X3QpcG1hcC0+cG1fcGRwdCkgPCAoNFVMTDw8MzAp
LAotCQkgICAgKCJwbWFwX3Bpbml0OiBwZHB0IGFib3ZlIDRnIikpOworCQlwbWFwLT5wbV9w
ZHB0ID0gKHBkX2VudHJ5X3QgKilrbWVtX2FsbG9jX25vZmF1bHQoa2VybmVsX21hcCwgMSk7
CiAjZW5kaWYKLQkJcG1hcC0+cG1fcm9vdCA9IE5VTEw7CiAJfQotCUtBU1NFUlQocG1hcC0+
cG1fcm9vdCA9PSBOVUxMLAotCSAgICAoInBtYXBfcGluaXQ6IHBtYXAgaGFzIHJlc2VydmVk
IHBhZ2UgdGFibGUgcGFnZShzKSIpKTsKIAogCS8qCiAJICogYWxsb2NhdGUgdGhlIHBhZ2Ug
ZGlyZWN0b3J5IHBhZ2UocykKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOykgewor
CWZvciAoaSA9IDA7IGkgPCBucGdwdGQ7KSB7CiAJCW0gPSB2bV9wYWdlX2FsbG9jKE5VTEws
IDAsIFZNX0FMTE9DX05PUk1BTCB8IFZNX0FMTE9DX05PT0JKIHwKIAkJICAgIFZNX0FMTE9D
X1dJUkVEIHwgVk1fQUxMT0NfWkVSTyk7CiAJCWlmIChtID09IE5VTEwpCkBAIC0xODAzLDE5
ICsxNDkxLDQ5IEBACiAJYmNvcHkoUFREICsgS1BUREksIHBtYXAtPnBtX3BkaXIgKyBLUFRE
SSwgbmtwdCAqIHNpemVvZihwZF9lbnRyeV90KSk7CiAJbXR4X3VubG9ja19zcGluKCZhbGxw
bWFwc19sb2NrKTsKIAotCS8qIGluc3RhbGwgc2VsZi1yZWZlcmVudGlhbCBhZGRyZXNzIG1h
cHBpbmcgZW50cnkocykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspIHsKLQkJ
cGEgPSBWTV9QQUdFX1RPX1BIWVMocHRkcGdbaV0pOwotCQlwbWFwLT5wbV9wZGlyW1BURFBU
REkgKyBpXSA9IHBhIHwgUEdfViB8IFBHX1JXIHwgUEdfQSB8IFBHX007CiAjaWZkZWYgUEFF
Ci0JCXBtYXAtPnBtX3BkcHRbaV0gPSBwYSB8IFBHX1Y7CisJcG1hcF9xZW50ZXIoKHZtX29m
ZnNldF90KXBtYXAtPnBtX3BkcHQsICZwdGRwZ1tOUEdQVERdLCAxKTsKKwlpZiAoKHB0ZHBn
W05QR1BURF0tPmZsYWdzICYgUEdfWkVSTykgPT0gMCkKKwkJYnplcm8ocG1hcC0+cG1fcGRw
dCwgUEFHRV9TSVpFKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspIHsKKwkJdm1f
cGFkZHJfdCBtYTsKKwkJCisJCW1hID0gVk1fUEFHRV9UT19NQUNIKHB0ZHBnW2ldKTsKKwkJ
cG1hcC0+cG1fcGRwdFtpXSA9IG1hIHwgUEdfVjsKKworCX0KKyNlbmRpZgkKKwlmb3IgKGkg
PSAwOyBpIDwgTlBHUFREOyBpKyspIHsKKwkJcHRfZW50cnlfdCAqcGQ7CisJCXZtX3BhZGRy
X3QgbWE7CisJCQorCQltYSA9IFZNX1BBR0VfVE9fTUFDSChwdGRwZ1tpXSk7CisJCXBkID0g
cG1hcC0+cG1fcGRpciArIChpICogTlBERVBHKTsKKwkJUFRfU0VUX01BKHBkLCAqdnRvcHRl
KCh2bV9vZmZzZXRfdClwZCkgJiB+KFBHX018UEdfQXxQR19VfFBHX1JXKSk7CisjaWYgMAkJ
CisJCXhlbl9wZ2RfcGluKG1hKTsKKyNlbmRpZgkJCisJfQorCQorI2lmZGVmIFBBRQkKKwlQ
VF9TRVRfTUEocG1hcC0+cG1fcGRwdCwgKnZ0b3B0ZSgodm1fb2Zmc2V0X3QpcG1hcC0+cG1f
cGRwdCkgJiB+UEdfUlcpOwogI2VuZGlmCisJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOworCXhl
bl9mbHVzaF9xdWV1ZSgpOworCXhlbl9wZ2RwdF9waW4oVk1fUEFHRV9UT19NQUNIKHB0ZHBn
W05QR1BURF0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspIHsKKwkJdm1fcGFk
ZHJfdCBtYSA9IFZNX1BBR0VfVE9fTUFDSChwdGRwZ1tpXSk7CisJCVBUX1NFVF9WQV9NQSgm
cG1hcC0+cG1fcGRpcltQVERQVERJICsgaV0sIG1hIHwgUEdfViB8IFBHX0EsIEZBTFNFKTsK
IAl9Ci0KKwl4ZW5fZmx1c2hfcXVldWUoKTsKKwl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsK
IAlDUFVfWkVSTygmcG1hcC0+cG1fYWN0aXZlKTsKIAlUQUlMUV9JTklUKCZwbWFwLT5wbV9w
dmNodW5rKTsKIAliemVybygmcG1hcC0+cG1fc3RhdHMsIHNpemVvZiBwbWFwLT5wbV9zdGF0
cyk7CiAKKyNpZmRlZiBIQU1GSVNURURfTE9DS0lORworCW10eF91bmxvY2soJmNyZWF0ZWRl
bGV0ZV9sb2NrKTsKKyNlbmRpZgogCXJldHVybiAoMSk7CiB9CiAKQEAgLTE4MjYsNyArMTU0
NCw3IEBACiBzdGF0aWMgdm1fcGFnZV90CiBfcG1hcF9hbGxvY3B0ZShwbWFwX3QgcG1hcCwg
dV9pbnQgcHRlcGluZGV4LCBpbnQgZmxhZ3MpCiB7Ci0Jdm1fcGFkZHJfdCBwdGVwYTsKKwl2
bV9wYWRkcl90IHB0ZW1hOwogCXZtX3BhZ2VfdCBtOwogCiAJS0FTU0VSVCgoZmxhZ3MgJiAo
TV9OT1dBSVQgfCBNX1dBSVRPSykpID09IE1fTk9XQUlUIHx8CkBAIC0xODYyLDEwICsxNTgw
LDEzIEBACiAKIAlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCsrOwogCi0JcHRlcGEg
PSBWTV9QQUdFX1RPX1BIWVMobSk7Ci0JcG1hcC0+cG1fcGRpcltwdGVwaW5kZXhdID0KLQkJ
KHBkX2VudHJ5X3QpIChwdGVwYSB8IFBHX1UgfCBQR19SVyB8IFBHX1YgfCBQR19BIHwgUEdf
TSk7Ci0KKwlwdGVtYSA9IFZNX1BBR0VfVE9fTUFDSChtKTsKKwl4ZW5fcHRfcGluKHB0ZW1h
KTsKKwlQVF9TRVRfVkFfTUEoJnBtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSwKKwkJKHB0ZW1h
IHwgUEdfVSB8IFBHX1JXIHwgUEdfViB8IFBHX0EgfCBQR19NKSwgVFJVRSk7CisJCisJS0FT
U0VSVChwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF0sCisJICAgICgiX3BtYXBfYWxsb2NwdGU6
IHB0ZXBpbmRleD0lZCBkaWQgbm90IGdldCBtYXBwZWQiLCBwdGVwaW5kZXgpKTsKIAlyZXR1
cm4gKG0pOwogfQogCkBAIC0xODczLDcgKzE1OTQsNyBAQAogcG1hcF9hbGxvY3B0ZShwbWFw
X3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIGludCBmbGFncykKIHsKIAl1X2ludCBwdGVwaW5k
ZXg7Ci0JcGRfZW50cnlfdCBwdGVwYTsKKwlwZF9lbnRyeV90IHB0ZW1hOwogCXZtX3BhZ2Vf
dCBtOwogCiAJS0FTU0VSVCgoZmxhZ3MgJiAoTV9OT1dBSVQgfCBNX1dBSVRPSykpID09IE1f
Tk9XQUlUIHx8CkBAIC0xODg4LDMyICsxNjA5LDQxIEBACiAJLyoKIAkgKiBHZXQgdGhlIHBh
Z2UgZGlyZWN0b3J5IGVudHJ5CiAJICovCi0JcHRlcGEgPSBwbWFwLT5wbV9wZGlyW3B0ZXBp
bmRleF07CisJcHRlbWEgPSBwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF07CiAKIAkvKgogCSAq
IFRoaXMgc3VwcG9ydHMgc3dpdGNoaW5nIGZyb20gYSA0TUIgcGFnZSB0byBhCiAJICogbm9y
bWFsIDRLIHBhZ2UuCiAJICovCi0JaWYgKHB0ZXBhICYgUEdfUFMpIHsKLQkJKHZvaWQpcG1h
cF9kZW1vdGVfcGRlKHBtYXAsICZwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF0sIHZhKTsKLQkJ
cHRlcGEgPSBwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF07CisJaWYgKHB0ZW1hICYgUEdfUFMp
IHsKKwkJLyoKKwkJICogWFhYIAorCQkgKi8KKwkJcG1hcC0+cG1fcGRpcltwdGVwaW5kZXhd
ID0gMDsKKwkJcHRlbWEgPSAwOworCQlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCAt
PSBOQlBEUiAvIFBBR0VfU0laRTsKKwkJcG1hcF9pbnZhbGlkYXRlX2FsbChrZXJuZWxfcG1h
cCk7CiAJfQogCiAJLyoKIAkgKiBJZiB0aGUgcGFnZSB0YWJsZSBwYWdlIGlzIG1hcHBlZCwg
d2UganVzdCBpbmNyZW1lbnQgdGhlCiAJICogaG9sZCBjb3VudCwgYW5kIGFjdGl2YXRlIGl0
LgogCSAqLwotCWlmIChwdGVwYSkgewotCQltID0gUEhZU19UT19WTV9QQUdFKHB0ZXBhICYg
UEdfRlJBTUUpOworCWlmIChwdGVtYSAmIFBHX1YpIHsKKwkJbSA9IFBIWVNfVE9fVk1fUEFH
RSh4cG1hcF9tdG9wKHB0ZW1hKSAmIFBHX0ZSQU1FKTsKIAkJbS0+d2lyZV9jb3VudCsrOwog
CX0gZWxzZSB7CiAJCS8qCiAJCSAqIEhlcmUgaWYgdGhlIHB0ZSBwYWdlIGlzbid0IG1hcHBl
ZCwgb3IgaWYgaXQgaGFzCiAJCSAqIGJlZW4gZGVhbGxvY2F0ZWQuIAogCQkgKi8KKwkJQ1RS
MyhLVFJfUE1BUCwgInBtYXBfYWxsb2NwdGU6IHBtYXA9JXAgdmE9MHglMDh4IGZsYWdzPTB4
JXgiLAorCQkgICAgcG1hcCwgdmEsIGZsYWdzKTsKIAkJbSA9IF9wbWFwX2FsbG9jcHRlKHBt
YXAsIHB0ZXBpbmRleCwgZmxhZ3MpOwogCQlpZiAobSA9PSBOVUxMICYmIChmbGFncyAmIE1f
V0FJVE9LKSkKIAkJCWdvdG8gcmV0cnk7CisKKwkJS0FTU0VSVChwbWFwLT5wbV9wZGlyW3B0
ZXBpbmRleF0sICgicHRlcGluZGV4PSVkIGRpZCBub3QgZ2V0IG1hcHBlZCIsIHB0ZXBpbmRl
eCkpOwogCX0KIAlyZXR1cm4gKG0pOwogfQpAQCAtMjAzMywxNCArMTc2MywyMyBAQAogdm9p
ZAogcG1hcF9yZWxlYXNlKHBtYXBfdCBwbWFwKQogewotCXZtX3BhZ2VfdCBtLCBwdGRwZ1tO
UEdQVERdOworCXZtX3BhZ2VfdCBtLCBwdGRwZ1syKk5QR1BURCsxXTsKKwl2bV9wYWRkcl90
IG1hOwogCWludCBpOworI2lmZGVmIFBBRQkKKwlpbnQgbnBncHRkID0gTlBHUFREICsgMTsK
KyNlbHNlCisJaW50IG5wZ3B0ZCA9IE5QR1BURDsKKyNlbmRpZgogCiAJS0FTU0VSVChwbWFw
LT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCA9PSAwLAogCSAgICAoInBtYXBfcmVsZWFzZTog
cG1hcCByZXNpZGVudCBjb3VudCAlbGQgIT0gMCIsCiAJICAgIHBtYXAtPnBtX3N0YXRzLnJl
c2lkZW50X2NvdW50KSk7Ci0JS0FTU0VSVChwbWFwLT5wbV9yb290ID09IE5VTEwsCi0JICAg
ICgicG1hcF9yZWxlYXNlOiBwbWFwIGhhcyByZXNlcnZlZCBwYWdlIHRhYmxlIHBhZ2Uocyki
KSk7CisJUFRfVVBEQVRFU19GTFVTSCgpOworCisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcK
KwltdHhfbG9jaygmY3JlYXRlZGVsZXRlX2xvY2spOworI2VuZGlmCiAKIAlwbWFwX2xhenlm
aXgocG1hcCk7CiAJbXR4X2xvY2tfc3BpbigmYWxscG1hcHNfbG9jayk7CkBAIC0yMDQ4LDI1
ICsxNzg3LDM5IEBACiAJbXR4X3VubG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKIAogCWZv
ciAoaSA9IDA7IGkgPCBOUEdQVEQ7IGkrKykKLQkJcHRkcGdbaV0gPSBQSFlTX1RPX1ZNX1BB
R0UocG1hcC0+cG1fcGRpcltQVERQVERJICsgaV0gJgotCQkgICAgUEdfRlJBTUUpOwotCi0J
Ynplcm8ocG1hcC0+cG1fcGRpciArIFBURFBUREksIChua3B0ICsgTlBHUFREKSAqCi0JICAg
IHNpemVvZigqcG1hcC0+cG1fcGRpcikpOwotCisJCXB0ZHBnW2ldID0gUEhZU19UT19WTV9Q
QUdFKHZ0b3BoeXMocG1hcC0+cG1fcGRpciArIChpKk5QREVQRykpICYgUEdfRlJBTUUpOwog
CXBtYXBfcXJlbW92ZSgodm1fb2Zmc2V0X3QpcG1hcC0+cG1fcGRpciwgTlBHUFREKTsKKyNp
ZmRlZiBQQUUKKwlwdGRwZ1tOUEdQVERdID0gUEhZU19UT19WTV9QQUdFKHZ0b3BoeXMocG1h
cC0+cG1fcGRwdCkpOworI2VuZGlmCQogCi0JZm9yIChpID0gMDsgaSA8IE5QR1BURDsgaSsr
KSB7CisJZm9yIChpID0gMDsgaSA8IG5wZ3B0ZDsgaSsrKSB7CiAJCW0gPSBwdGRwZ1tpXTsK
KwkJbWEgPSBWTV9QQUdFX1RPX01BQ0gobSk7CisJCS8qIHVucGlubmluZyBMMSBhbmQgTDIg
dHJlYXRlZCB0aGUgc2FtZSAqLworI2lmIDAKKyAgICAgICAgICAgICAgICB4ZW5fcGdkX3Vu
cGluKG1hKTsKKyNlbHNlCisJCWlmIChpID09IE5QR1BURCkKKwkgICAgICAgICAgICAgICAg
eGVuX3BnZF91bnBpbihtYSk7CisjZW5kaWYKICNpZmRlZiBQQUUKLQkJS0FTU0VSVChWTV9Q
QUdFX1RPX1BIWVMobSkgPT0gKHBtYXAtPnBtX3BkcHRbaV0gJiBQR19GUkFNRSksCi0JCSAg
ICAoInBtYXBfcmVsZWFzZTogZ290IHdyb25nIHB0ZCBwYWdlIikpOworCQlpZiAoaSA8IE5Q
R1BURCkKKwkJCUtBU1NFUlQoVk1fUEFHRV9UT19NQUNIKG0pID09IChwbWFwLT5wbV9wZHB0
W2ldICYgUEdfRlJBTUUpLAorCQkJICAgICgicG1hcF9yZWxlYXNlOiBnb3Qgd3JvbmcgcHRk
IHBhZ2UiKSk7CiAjZW5kaWYKIAkJbS0+d2lyZV9jb3VudC0tOwogCQlhdG9taWNfc3VidHJh
Y3RfaW50KCZjbnQudl93aXJlX2NvdW50LCAxKTsKLQkJdm1fcGFnZV9mcmVlX3plcm8obSk7
CisJCXZtX3BhZ2VfZnJlZShtKTsKIAl9CisjaWZkZWYgUEFFCisJcG1hcF9xcmVtb3ZlKCh2
bV9vZmZzZXRfdClwbWFwLT5wbV9wZHB0LCAxKTsKKyNlbmRpZgogCVBNQVBfTE9DS19ERVNU
Uk9ZKHBtYXApOworCisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcKKwltdHhfdW5sb2NrKCZj
cmVhdGVkZWxldGVfbG9jayk7CisjZW5kaWYKIH0KIAwKIHN0YXRpYyBpbnQKQEAgLTIwOTUs
MTEgKzE4NDgsMjQgQEAKIHZvaWQKIHBtYXBfZ3Jvd2tlcm5lbCh2bV9vZmZzZXRfdCBhZGRy
KQogeworCXN0cnVjdCBwbWFwICpwbWFwOwogCXZtX3BhZGRyX3QgcHRwcGFkZHI7CiAJdm1f
cGFnZV90IG5rcGc7CiAJcGRfZW50cnlfdCBuZXdwZGlyOwogCiAJbXR4X2Fzc2VydCgma2Vy
bmVsX21hcC0+c3lzdGVtX210eCwgTUFfT1dORUQpOworCWlmIChrZXJuZWxfdm1fZW5kID09
IDApIHsKKwkJa2VybmVsX3ZtX2VuZCA9IEtFUk5CQVNFOworCQlua3B0ID0gMDsKKwkJd2hp
bGUgKHBkaXJfcGRlKFBURCwga2VybmVsX3ZtX2VuZCkpIHsKKwkJCWtlcm5lbF92bV9lbmQg
PSAoa2VybmVsX3ZtX2VuZCArIFBBR0VfU0laRSAqIE5QVEVQRykgJiB+KFBBR0VfU0laRSAq
IE5QVEVQRyAtIDEpOworCQkJbmtwdCsrOworCQkJaWYgKGtlcm5lbF92bV9lbmQgLSAxID49
IGtlcm5lbF9tYXAtPm1heF9vZmZzZXQpIHsKKwkJCQlrZXJuZWxfdm1fZW5kID0ga2VybmVs
X21hcC0+bWF4X29mZnNldDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAlhZGRyID0g
cm91bmR1cDIoYWRkciwgTkJQRFIpOwogCWlmIChhZGRyIC0gMSA+PSBrZXJuZWxfbWFwLT5t
YXhfb2Zmc2V0KQogCQlhZGRyID0ga2VybmVsX21hcC0+bWF4X29mZnNldDsKQEAgLTIxMjUs
OSArMTg5MSwxNSBAQAogCQkJcG1hcF96ZXJvX3BhZ2UobmtwZyk7CiAJCXB0cHBhZGRyID0g
Vk1fUEFHRV9UT19QSFlTKG5rcGcpOwogCQluZXdwZGlyID0gKHBkX2VudHJ5X3QpIChwdHBw
YWRkciB8IFBHX1YgfCBQR19SVyB8IFBHX0EgfCBQR19NKTsKLQkJcGRpcl9wZGUoS1BURCwg
a2VybmVsX3ZtX2VuZCkgPSBwZ2VmbGFnIHwgbmV3cGRpcjsKKwkJdm1fcGFnZV9sb2NrX3F1
ZXVlcygpOworCQlQRF9TRVRfVkEoa2VybmVsX3BtYXAsIChrZXJuZWxfdm1fZW5kID4+IFBE
UlNISUZUKSwgbmV3cGRpciwgVFJVRSk7CisJCW10eF9sb2NrX3NwaW4oJmFsbHBtYXBzX2xv
Y2spOworCQlMSVNUX0ZPUkVBQ0gocG1hcCwgJmFsbHBtYXBzLCBwbV9saXN0KQorCQkJUERf
U0VUX1ZBKHBtYXAsIChrZXJuZWxfdm1fZW5kID4+IFBEUlNISUZUKSwgbmV3cGRpciwgVFJV
RSk7CisKKwkJbXR4X3VubG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKKwkJdm1fcGFnZV91
bmxvY2tfcXVldWVzKCk7CiAKLQkJcG1hcF9rZW50ZXJfcGRlKGtlcm5lbF92bV9lbmQsIG5l
d3BkaXIpOwogCQlrZXJuZWxfdm1fZW5kID0gKGtlcm5lbF92bV9lbmQgKyBOQlBEUikgJiB+
UERSTUFTSzsKIAkJaWYgKGtlcm5lbF92bV9lbmQgLSAxID49IGtlcm5lbF9tYXAtPm1heF9v
ZmZzZXQpIHsKIAkJCWtlcm5lbF92bV9lbmQgPSBrZXJuZWxfbWFwLT5tYXhfb2Zmc2V0OwpA
QCAtMjIwNSw3ICsxOTc3LDYgQEAKIHN0YXRpYyB2b2lkCiBwbWFwX2NvbGxlY3QocG1hcF90
IGxvY2tlZF9wbWFwLCBzdHJ1Y3QgdnBncXVldWVzICp2cHEpCiB7Ci0JcGRfZW50cnlfdCAq
cGRlOwogCXBtYXBfdCBwbWFwOwogCXB0X2VudHJ5X3QgKnB0ZSwgdHB0ZTsKIAlwdl9lbnRy
eV90IG5leHRfcHYsIHB2OwpAQCAtMjIyNSw5ICsxOTk2LDYgQEAKIAkJCWVsc2UgaWYgKHBt
YXAgIT0gbG9ja2VkX3BtYXAgJiYgIVBNQVBfVFJZTE9DSyhwbWFwKSkKIAkJCQljb250aW51
ZTsKIAkJCXBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50LS07Ci0JCQlwZGUgPSBwbWFw
X3BkZShwbWFwLCB2YSk7Ci0JCQlLQVNTRVJUKCgqcGRlICYgUEdfUFMpID09IDAsICgicG1h
cF9jb2xsZWN0OiBmb3VuZCIKLQkJCSAgICAiIGEgNG1wYWdlIGluIHBhZ2UgJXAncyBwdiBs
aXN0IiwgbSkpOwogCQkJcHRlID0gcG1hcF9wdGVfcXVpY2socG1hcCwgdmEpOwogCQkJdHB0
ZSA9IHB0ZV9sb2FkX2NsZWFyKHB0ZSk7CiAJCQlLQVNTRVJUKCh0cHRlICYgUEdfVykgPT0g
MCwKQEAgLTIyNDUsOCArMjAxMyw3IEBACiAJCQlpZiAocG1hcCAhPSBsb2NrZWRfcG1hcCkK
IAkJCQlQTUFQX1VOTE9DSyhwbWFwKTsKIAkJfQotCQlpZiAoVEFJTFFfRU1QVFkoJm0tPm1k
LnB2X2xpc3QpICYmCi0JCSAgICBUQUlMUV9FTVBUWSgmcGFfdG9fcHZoKFZNX1BBR0VfVE9f
UEhZUyhtKSktPnB2X2xpc3QpKQorCQlpZiAoVEFJTFFfRU1QVFkoJm0tPm1kLnB2X2xpc3Qp
KQogCQkJdm1fcGFnZV9hZmxhZ19jbGVhcihtLCBQR0FfV1JJVEVBQkxFKTsKIAl9CiAJc2No
ZWRfdW5waW4oKTsKQEAgLTIzNzMsNiArMjE0MCw4IEBACiAJUFZfU1RBVChwY19jaHVua19h
bGxvY3MrKyk7CiAJcGMgPSAoc3RydWN0IHB2X2NodW5rICopcG1hcF9wdGVsaXN0X2FsbG9j
KCZwdl92YWZyZWUpOwogCXBtYXBfcWVudGVyKCh2bV9vZmZzZXRfdClwYywgJm0sIDEpOwor
CWlmICgobS0+ZmxhZ3MgJiBQR19aRVJPKSA9PSAwKQorCQlwYWdlemVybyhwYyk7CiAJcGMt
PnBjX3BtYXAgPSBwbWFwOwogCXBjLT5wY19tYXBbMF0gPSBwY19mcmVlbWFza1swXSAmIH4x
dWw7CS8qIHByZWFsbG9jYXRlZCBiaXQgMCAqLwogCWZvciAoZmllbGQgPSAxOyBmaWVsZCA8
IF9OUENNOyBmaWVsZCsrKQpAQCAtMjM5OSw3MyArMjE2OCw2IEBACiB9CiAKIHN0YXRpYyB2
b2lkCi1wbWFwX3B2X2RlbW90ZV9wZGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2
bV9wYWRkcl90IHBhKQotewotCXN0cnVjdCBtZF9wYWdlICpwdmg7Ci0JcHZfZW50cnlfdCBw
djsKLQl2bV9vZmZzZXRfdCB2YV9sYXN0OwotCXZtX3BhZ2VfdCBtOwotCi0JbXR4X2Fzc2Vy
dCgmdm1fcGFnZV9xdWV1ZV9tdHgsIE1BX09XTkVEKTsKLQlLQVNTRVJUKChwYSAmIFBEUk1B
U0spID09IDAsCi0JICAgICgicG1hcF9wdl9kZW1vdGVfcGRlOiBwYSBpcyBub3QgNG1wYWdl
IGFsaWduZWQiKSk7Ci0KLQkvKgotCSAqIFRyYW5zZmVyIHRoZSA0bXBhZ2UncyBwdiBlbnRy
eSBmb3IgdGhpcyBtYXBwaW5nIHRvIHRoZSBmaXJzdAotCSAqIHBhZ2UncyBwdiBsaXN0Lgot
CSAqLwotCXB2aCA9IHBhX3RvX3B2aChwYSk7Ci0JdmEgPSB0cnVuY180bXBhZ2UodmEpOwot
CXB2ID0gcG1hcF9wdmhfcmVtb3ZlKHB2aCwgcG1hcCwgdmEpOwotCUtBU1NFUlQocHYgIT0g
TlVMTCwgKCJwbWFwX3B2X2RlbW90ZV9wZGU6IHB2IG5vdCBmb3VuZCIpKTsKLQltID0gUEhZ
U19UT19WTV9QQUdFKHBhKTsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmbS0+bWQucHZfbGlzdCwg
cHYsIHB2X2xpc3QpOwotCS8qIEluc3RhbnRpYXRlIHRoZSByZW1haW5pbmcgTlBURVBHIC0g
MSBwdiBlbnRyaWVzLiAqLwotCXZhX2xhc3QgPSB2YSArIE5CUERSIC0gUEFHRV9TSVpFOwot
CWRvIHsKLQkJbSsrOwotCQlLQVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSA9
PSAwLAotCQkgICAgKCJwbWFwX3B2X2RlbW90ZV9wZGU6IHBhZ2UgJXAgaXMgbm90IG1hbmFn
ZWQiLCBtKSk7Ci0JCXZhICs9IFBBR0VfU0laRTsKLQkJcG1hcF9pbnNlcnRfZW50cnkocG1h
cCwgdmEsIG0pOwotCX0gd2hpbGUgKHZhIDwgdmFfbGFzdCk7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1wbWFwX3B2X3Byb21vdGVfcGRlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1f
cGFkZHJfdCBwYSkKLXsKLQlzdHJ1Y3QgbWRfcGFnZSAqcHZoOwotCXB2X2VudHJ5X3QgcHY7
Ci0Jdm1fb2Zmc2V0X3QgdmFfbGFzdDsKLQl2bV9wYWdlX3QgbTsKLQotCW10eF9hc3NlcnQo
JnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7Ci0JS0FTU0VSVCgocGEgJiBQRFJNQVNL
KSA9PSAwLAotCSAgICAoInBtYXBfcHZfcHJvbW90ZV9wZGU6IHBhIGlzIG5vdCA0bXBhZ2Ug
YWxpZ25lZCIpKTsKLQotCS8qCi0JICogVHJhbnNmZXIgdGhlIGZpcnN0IHBhZ2UncyBwdiBl
bnRyeSBmb3IgdGhpcyBtYXBwaW5nIHRvIHRoZQotCSAqIDRtcGFnZSdzIHB2IGxpc3QuICBB
c2lkZSBmcm9tIGF2b2lkaW5nIHRoZSBjb3N0IG9mIGEgY2FsbAotCSAqIHRvIGdldF9wdl9l
bnRyeSgpLCBhIHRyYW5zZmVyIGF2b2lkcyB0aGUgcG9zc2liaWxpdHkgdGhhdAotCSAqIGdl
dF9wdl9lbnRyeSgpIGNhbGxzIHBtYXBfY29sbGVjdCgpIGFuZCB0aGF0IHBtYXBfY29sbGVj
dCgpCi0JICogcmVtb3ZlcyBvbmUgb2YgdGhlIG1hcHBpbmdzIHRoYXQgaXMgYmVpbmcgcHJv
bW90ZWQuCi0JICovCi0JbSA9IFBIWVNfVE9fVk1fUEFHRShwYSk7Ci0JdmEgPSB0cnVuY180
bXBhZ2UodmEpOwotCXB2ID0gcG1hcF9wdmhfcmVtb3ZlKCZtLT5tZCwgcG1hcCwgdmEpOwot
CUtBU1NFUlQocHYgIT0gTlVMTCwgKCJwbWFwX3B2X3Byb21vdGVfcGRlOiBwdiBub3QgZm91
bmQiKSk7Ci0JcHZoID0gcGFfdG9fcHZoKHBhKTsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmcHZo
LT5wdl9saXN0LCBwdiwgcHZfbGlzdCk7Ci0JLyogRnJlZSB0aGUgcmVtYWluaW5nIE5QVEVQ
RyAtIDEgcHYgZW50cmllcy4gKi8KLQl2YV9sYXN0ID0gdmEgKyBOQlBEUiAtIFBBR0VfU0la
RTsKLQlkbyB7Ci0JCW0rKzsKLQkJdmEgKz0gUEFHRV9TSVpFOwotCQlwbWFwX3B2aF9mcmVl
KCZtLT5tZCwgcG1hcCwgdmEpOwotCX0gd2hpbGUgKHZhIDwgdmFfbGFzdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkCiBwbWFwX3B2aF9mcmVlKHN0cnVjdCBtZF9wYWdlICpwdmgsIHBtYXBfdCBw
bWFwLCB2bV9vZmZzZXRfdCB2YSkKIHsKIAlwdl9lbnRyeV90IHB2OwpAQCAtMjQ3OCwzMSAr
MjE4MCwxMSBAQAogc3RhdGljIHZvaWQKIHBtYXBfcmVtb3ZlX2VudHJ5KHBtYXBfdCBwbWFw
LCB2bV9wYWdlX3QgbSwgdm1fb2Zmc2V0X3QgdmEpCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2
aDsKIAogCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7CiAJcG1h
cF9wdmhfZnJlZSgmbS0+bWQsIHBtYXAsIHZhKTsKLQlpZiAoVEFJTFFfRU1QVFkoJm0tPm1k
LnB2X2xpc3QpKSB7Ci0JCXB2aCA9IHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpOwot
CQlpZiAoVEFJTFFfRU1QVFkoJnB2aC0+cHZfbGlzdCkpCi0JCQl2bV9wYWdlX2FmbGFnX2Ns
ZWFyKG0sIFBHQV9XUklURUFCTEUpOwotCX0KLX0KLQotLyoKLSAqIENyZWF0ZSBhIHB2IGVu
dHJ5IGZvciBwYWdlIGF0IHBhIGZvcgotICogKHBtYXAsIHZhKS4KLSAqLwotc3RhdGljIHZv
aWQKLXBtYXBfaW5zZXJ0X2VudHJ5KHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1f
cGFnZV90IG0pCi17Ci0JcHZfZW50cnlfdCBwdjsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1h
cCwgTUFfT1dORUQpOwotCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05F
RCk7Ci0JcHYgPSBnZXRfcHZfZW50cnkocG1hcCwgRkFMU0UpOwotCXB2LT5wdl92YSA9IHZh
OwotCVRBSUxRX0lOU0VSVF9UQUlMKCZtLT5tZC5wdl9saXN0LCBwdiwgcHZfbGlzdCk7CisJ
aWYgKFRBSUxRX0VNUFRZKCZtLT5tZC5wdl9saXN0KSkKKwkJdm1fcGFnZV9hZmxhZ19jbGVh
cihtLCBQR0FfV1JJVEVBQkxFKTsKIH0KIAogLyoKQEAgLTI1MjUsMjQzICsyMjA3LDYgQEAK
IH0KIAogLyoKLSAqIENyZWF0ZSB0aGUgcHYgZW50cmllcyBmb3IgZWFjaCBvZiB0aGUgcGFn
ZXMgd2l0aGluIGEgc3VwZXJwYWdlLgotICovCi1zdGF0aWMgYm9vbGVhbl90Ci1wbWFwX3B2
X2luc2VydF9wZGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90IHBh
KQotewotCXN0cnVjdCBtZF9wYWdlICpwdmg7Ci0JcHZfZW50cnlfdCBwdjsKLQotCW10eF9h
c3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7Ci0JaWYgKHB2X2VudHJ5X2Nv
dW50IDwgcHZfZW50cnlfaGlnaF93YXRlciAmJiAKLQkgICAgKHB2ID0gZ2V0X3B2X2VudHJ5
KHBtYXAsIFRSVUUpKSAhPSBOVUxMKSB7Ci0JCXB2LT5wdl92YSA9IHZhOwotCQlwdmggPSBw
YV90b19wdmgocGEpOwotCQlUQUlMUV9JTlNFUlRfVEFJTCgmcHZoLT5wdl9saXN0LCBwdiwg
cHZfbGlzdCk7Ci0JCXJldHVybiAoVFJVRSk7Ci0JfSBlbHNlCi0JCXJldHVybiAoRkFMU0Up
OwotfQotCi0vKgotICogRmlsbHMgYSBwYWdlIHRhYmxlIHBhZ2Ugd2l0aCBtYXBwaW5ncyB0
byBjb25zZWN1dGl2ZSBwaHlzaWNhbCBwYWdlcy4KLSAqLwotc3RhdGljIHZvaWQKLXBtYXBf
ZmlsbF9wdHAocHRfZW50cnlfdCAqZmlyc3RwdGUsIHB0X2VudHJ5X3QgbmV3cHRlKQotewot
CXB0X2VudHJ5X3QgKnB0ZTsKLQotCWZvciAocHRlID0gZmlyc3RwdGU7IHB0ZSA8IGZpcnN0
cHRlICsgTlBURVBHOyBwdGUrKykgewotCQkqcHRlID0gbmV3cHRlOwkKLQkJbmV3cHRlICs9
IFBBR0VfU0laRTsKLQl9Ci19Ci0KLS8qCi0gKiBUcmllcyB0byBkZW1vdGUgYSAyLSBvciA0
TUIgcGFnZSBtYXBwaW5nLiAgSWYgZGVtb3Rpb24gZmFpbHMsIHRoZQotICogMi0gb3IgNE1C
IHBhZ2UgbWFwcGluZyBpcyBpbnZhbGlkYXRlZC4KLSAqLwotc3RhdGljIGJvb2xlYW5fdAot
cG1hcF9kZW1vdGVfcGRlKHBtYXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZGUsIHZtX29mZnNl
dF90IHZhKQotewotCXBkX2VudHJ5X3QgbmV3cGRlLCBvbGRwZGU7Ci0JcHRfZW50cnlfdCAq
Zmlyc3RwdGUsIG5ld3B0ZTsKLQl2bV9wYWRkcl90IG1wdGVwYTsKLQl2bV9wYWdlX3QgZnJl
ZSwgbXB0ZTsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1hcCwgTUFfT1dORUQpOwotCW9sZHBk
ZSA9ICpwZGU7Ci0JS0FTU0VSVCgob2xkcGRlICYgKFBHX1BTIHwgUEdfVikpID09IChQR19Q
UyB8IFBHX1YpLAotCSAgICAoInBtYXBfZGVtb3RlX3BkZTogb2xkcGRlIGlzIG1pc3Npbmcg
UEdfUFMgYW5kL29yIFBHX1YiKSk7Ci0JbXB0ZSA9IHBtYXBfbG9va3VwX3B0X3BhZ2UocG1h
cCwgdmEpOwotCWlmIChtcHRlICE9IE5VTEwpCi0JCXBtYXBfcmVtb3ZlX3B0X3BhZ2UocG1h
cCwgbXB0ZSk7Ci0JZWxzZSB7Ci0JCUtBU1NFUlQoKG9sZHBkZSAmIFBHX1cpID09IDAsCi0J
CSAgICAoInBtYXBfZGVtb3RlX3BkZTogcGFnZSB0YWJsZSBwYWdlIGZvciBhIHdpcmVkIG1h
cHBpbmciCi0JCSAgICAiIGlzIG1pc3NpbmciKSk7Ci0KLQkJLyoKLQkJICogSW52YWxpZGF0
ZSB0aGUgMi0gb3IgNE1CIHBhZ2UgbWFwcGluZyBhbmQgcmV0dXJuCi0JCSAqICJmYWlsdXJl
IiBpZiB0aGUgbWFwcGluZyB3YXMgbmV2ZXIgYWNjZXNzZWQgb3IgdGhlCi0JCSAqIGFsbG9j
YXRpb24gb2YgdGhlIG5ldyBwYWdlIHRhYmxlIHBhZ2UgZmFpbHMuCi0JCSAqLwotCQlpZiAo
KG9sZHBkZSAmIFBHX0EpID09IDAgfHwgKG1wdGUgPSB2bV9wYWdlX2FsbG9jKE5VTEwsCi0J
CSAgICB2YSA+PiBQRFJTSElGVCwgVk1fQUxMT0NfTk9PQkogfCBWTV9BTExPQ19OT1JNQUwg
fAotCQkgICAgVk1fQUxMT0NfV0lSRUQpKSA9PSBOVUxMKSB7Ci0JCQlmcmVlID0gTlVMTDsK
LQkJCXBtYXBfcmVtb3ZlX3BkZShwbWFwLCBwZGUsIHRydW5jXzRtcGFnZSh2YSksICZmcmVl
KTsKLQkJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKHBtYXAsIHRydW5jXzRtcGFnZSh2YSkpOwot
CQkJcG1hcF9mcmVlX3plcm9fcGFnZXMoZnJlZSk7Ci0JCQlDVFIyKEtUUl9QTUFQLCAicG1h
cF9kZW1vdGVfcGRlOiBmYWlsdXJlIGZvciB2YSAlI3giCi0JCQkgICAgIiBpbiBwbWFwICVw
IiwgdmEsIHBtYXApOwotCQkJcmV0dXJuIChGQUxTRSk7Ci0JCX0KLQkJaWYgKHZhIDwgVk1f
TUFYVVNFUl9BRERSRVNTKQotCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQrKzsK
LQl9Ci0JbXB0ZXBhID0gVk1fUEFHRV9UT19QSFlTKG1wdGUpOwotCi0JLyoKLQkgKiBJZiB0
aGUgcGFnZSBtYXBwaW5nIGlzIGluIHRoZSBrZXJuZWwncyBhZGRyZXNzIHNwYWNlLCB0aGVu
IHRoZQotCSAqIEtQVG1hcCBjYW4gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHBhZ2UgdGFibGUg
cGFnZS4gIE90aGVyd2lzZSwKLQkgKiB0ZW1wb3JhcmlseSBtYXAgdGhlIHBhZ2UgdGFibGUg
cGFnZSAobXB0ZSkgaW50byB0aGUga2VybmVsJ3MKLQkgKiBhZGRyZXNzIHNwYWNlIGF0IGVp
dGhlciBQQUREUjEgb3IgUEFERFIyLiAKLQkgKi8KLQlpZiAodmEgPj0gS0VSTkJBU0UpCi0J
CWZpcnN0cHRlID0gJktQVG1hcFtpMzg2X2J0b3AodHJ1bmNfNG1wYWdlKHZhKSldOwotCWVs
c2UgaWYgKGN1cnRocmVhZC0+dGRfcGlubmVkID4gMCAmJiBtdHhfb3duZWQoJnZtX3BhZ2Vf
cXVldWVfbXR4KSkgewotCQlpZiAoKCpQTUFQMSAmIFBHX0ZSQU1FKSAhPSBtcHRlcGEpIHsK
LQkJCSpQTUFQMSA9IG1wdGVwYSB8IFBHX1JXIHwgUEdfViB8IFBHX0EgfCBQR19NOwotI2lm
ZGVmIFNNUAotCQkJUE1BUDFjcHUgPSBQQ1BVX0dFVChjcHVpZCk7Ci0jZW5kaWYKLQkJCWlu
dmxjYWRkcihQQUREUjEpOwotCQkJUE1BUDFjaGFuZ2VkKys7Ci0JCX0gZWxzZQotI2lmZGVm
IFNNUAotCQlpZiAoUE1BUDFjcHUgIT0gUENQVV9HRVQoY3B1aWQpKSB7Ci0JCQlQTUFQMWNw
dSA9IFBDUFVfR0VUKGNwdWlkKTsKLQkJCWludmxjYWRkcihQQUREUjEpOwotCQkJUE1BUDFj
aGFuZ2VkY3B1Kys7Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlQTUFQMXVuY2hhbmdlZCsrOwot
CQlmaXJzdHB0ZSA9IFBBRERSMTsKLQl9IGVsc2UgewotCQltdHhfbG9jaygmUE1BUDJtdXRl
eCk7Ci0JCWlmICgoKlBNQVAyICYgUEdfRlJBTUUpICE9IG1wdGVwYSkgewotCQkJKlBNQVAy
ID0gbXB0ZXBhIHwgUEdfUlcgfCBQR19WIHwgUEdfQSB8IFBHX007Ci0JCQlwbWFwX2ludmFs
aWRhdGVfcGFnZShrZXJuZWxfcG1hcCwgKHZtX29mZnNldF90KVBBRERSMik7Ci0JCX0KLQkJ
Zmlyc3RwdGUgPSBQQUREUjI7Ci0JfQotCW5ld3BkZSA9IG1wdGVwYSB8IFBHX00gfCBQR19B
IHwgKG9sZHBkZSAmIFBHX1UpIHwgUEdfUlcgfCBQR19WOwotCUtBU1NFUlQoKG9sZHBkZSAm
IFBHX0EpICE9IDAsCi0JICAgICgicG1hcF9kZW1vdGVfcGRlOiBvbGRwZGUgaXMgbWlzc2lu
ZyBQR19BIikpOwotCUtBU1NFUlQoKG9sZHBkZSAmIChQR19NIHwgUEdfUlcpKSAhPSBQR19S
VywKLQkgICAgKCJwbWFwX2RlbW90ZV9wZGU6IG9sZHBkZSBpcyBtaXNzaW5nIFBHX00iKSk7
Ci0JbmV3cHRlID0gb2xkcGRlICYgflBHX1BTOwotCWlmICgobmV3cHRlICYgUEdfUERFX1BB
VCkgIT0gMCkKLQkJbmV3cHRlIF49IFBHX1BERV9QQVQgfCBQR19QVEVfUEFUOwotCi0JLyoK
LQkgKiBJZiB0aGUgcGFnZSB0YWJsZSBwYWdlIGlzIG5ldywgaW5pdGlhbGl6ZSBpdC4KLQkg
Ki8KLQlpZiAobXB0ZS0+d2lyZV9jb3VudCA9PSAxKSB7Ci0JCW1wdGUtPndpcmVfY291bnQg
PSBOUFRFUEc7Ci0JCXBtYXBfZmlsbF9wdHAoZmlyc3RwdGUsIG5ld3B0ZSk7Ci0JfQotCUtB
U1NFUlQoKCpmaXJzdHB0ZSAmIFBHX0ZSQU1FKSA9PSAobmV3cHRlICYgUEdfRlJBTUUpLAot
CSAgICAoInBtYXBfZGVtb3RlX3BkZTogZmlyc3RwdGUgYW5kIG5ld3B0ZSBtYXAgZGlmZmVy
ZW50IHBoeXNpY2FsIgotCSAgICAiIGFkZHJlc3NlcyIpKTsKLQotCS8qCi0JICogSWYgdGhl
IG1hcHBpbmcgaGFzIGNoYW5nZWQgYXR0cmlidXRlcywgdXBkYXRlIHRoZSBwYWdlIHRhYmxl
Ci0JICogZW50cmllcy4KLQkgKi8gCi0JaWYgKCgqZmlyc3RwdGUgJiBQR19QVEVfUFJPTU9U
RSkgIT0gKG5ld3B0ZSAmIFBHX1BURV9QUk9NT1RFKSkKLQkJcG1hcF9maWxsX3B0cChmaXJz
dHB0ZSwgbmV3cHRlKTsKLQkKLQkvKgotCSAqIERlbW90ZSB0aGUgbWFwcGluZy4gIFRoaXMg
cG1hcCBpcyBsb2NrZWQuICBUaGUgb2xkIFBERSBoYXMKLQkgKiBQR19BIHNldC4gIElmIHRo
ZSBvbGQgUERFIGhhcyBQR19SVyBzZXQsIGl0IGFsc28gaGFzIFBHX00KLQkgKiBzZXQuICBU
aHVzLCB0aGVyZSBpcyBubyBkYW5nZXIgb2YgYSByYWNlIHdpdGggYW5vdGhlcgotCSAqIHBy
b2Nlc3NvciBjaGFuZ2luZyB0aGUgc2V0dGluZyBvZiBQR19BIGFuZC9vciBQR19NIGJldHdl
ZW4KLQkgKiB0aGUgcmVhZCBhYm92ZSBhbmQgdGhlIHN0b3JlIGJlbG93LiAKLQkgKi8KLQlp
ZiAod29ya2Fyb3VuZF9lcnJhdHVtMzgzKQotCQlwbWFwX3VwZGF0ZV9wZGUocG1hcCwgdmEs
IHBkZSwgbmV3cGRlKTsKLQllbHNlIGlmIChwbWFwID09IGtlcm5lbF9wbWFwKQotCQlwbWFw
X2tlbnRlcl9wZGUodmEsIG5ld3BkZSk7Ci0JZWxzZQotCQlwZGVfc3RvcmUocGRlLCBuZXdw
ZGUpOwkKLQlpZiAoZmlyc3RwdGUgPT0gUEFERFIyKQotCQltdHhfdW5sb2NrKCZQTUFQMm11
dGV4KTsKLQotCS8qCi0JICogSW52YWxpZGF0ZSB0aGUgcmVjdXJzaXZlIG1hcHBpbmcgb2Yg
dGhlIHBhZ2UgdGFibGUgcGFnZS4KLQkgKi8KLQlwbWFwX2ludmFsaWRhdGVfcGFnZShwbWFw
LCAodm1fb2Zmc2V0X3QpdnRvcHRlKHZhKSk7Ci0KLQkvKgotCSAqIERlbW90ZSB0aGUgcHYg
ZW50cnkuICBUaGlzIGRlcGVuZHMgb24gdGhlIGVhcmxpZXIgZGVtb3Rpb24KLQkgKiBvZiB0
aGUgbWFwcGluZy4gIFNwZWNpZmljYWxseSwgdGhlIChyZSljcmVhdGlvbiBvZiBhIHBlci0K
LQkgKiBwYWdlIHB2IGVudHJ5IG1pZ2h0IHRyaWdnZXIgdGhlIGV4ZWN1dGlvbiBvZiBwbWFw
X2NvbGxlY3QoKSwKLQkgKiB3aGljaCBtaWdodCByZWNsYWltIGEgbmV3bHkgKHJlKWNyZWF0
ZWQgcGVyLXBhZ2UgcHYgZW50cnkKLQkgKiBhbmQgZGVzdHJveSB0aGUgYXNzb2NpYXRlZCBt
YXBwaW5nLiAgSW4gb3JkZXIgdG8gZGVzdHJveQotCSAqIHRoZSBtYXBwaW5nLCB0aGUgUERF
IG11c3QgaGF2ZSBhbHJlYWR5IGNoYW5nZWQgZnJvbSBtYXBwaW5nCi0JICogdGhlIDJtcGFn
ZSB0byByZWZlcmVuY2luZyB0aGUgcGFnZSB0YWJsZSBwYWdlLgotCSAqLwotCWlmICgob2xk
cGRlICYgUEdfTUFOQUdFRCkgIT0gMCkKLQkJcG1hcF9wdl9kZW1vdGVfcGRlKHBtYXAsIHZh
LCBvbGRwZGUgJiBQR19QU19GUkFNRSk7Ci0KLQlwbWFwX3BkZV9kZW1vdGlvbnMrKzsKLQlD
VFIyKEtUUl9QTUFQLCAicG1hcF9kZW1vdGVfcGRlOiBzdWNjZXNzIGZvciB2YSAlI3giCi0J
ICAgICIgaW4gcG1hcCAlcCIsIHZhLCBwbWFwKTsKLQlyZXR1cm4gKFRSVUUpOwotfQotCi0v
KgotICogcG1hcF9yZW1vdmVfcGRlOiBkbyB0aGUgdGhpbmdzIHRvIHVubWFwIGEgc3VwZXJw
YWdlIGluIGEgcHJvY2VzcwotICovCi1zdGF0aWMgdm9pZAotcG1hcF9yZW1vdmVfcGRlKHBt
YXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZHEsIHZtX29mZnNldF90IHN2YSwKLSAgICB2bV9w
YWdlX3QgKmZyZWUpCi17Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKLQlwZF9lbnRyeV90IG9s
ZHBkZTsKLQl2bV9vZmZzZXRfdCBldmEsIHZhOwotCXZtX3BhZ2VfdCBtLCBtcHRlOwotCi0J
UE1BUF9MT0NLX0FTU0VSVChwbWFwLCBNQV9PV05FRCk7Ci0JS0FTU0VSVCgoc3ZhICYgUERS
TUFTSykgPT0gMCwKLQkgICAgKCJwbWFwX3JlbW92ZV9wZGU6IHN2YSBpcyBub3QgNG1wYWdl
IGFsaWduZWQiKSk7Ci0Jb2xkcGRlID0gcHRlX2xvYWRfY2xlYXIocGRxKTsKLQlpZiAob2xk
cGRlICYgUEdfVykKLQkJcG1hcC0+cG1fc3RhdHMud2lyZWRfY291bnQgLT0gTkJQRFIgLyBQ
QUdFX1NJWkU7Ci0KLQkvKgotCSAqIE1hY2hpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbnZs
cGcsIGFsc28gZG9uJ3Qgc3VwcG9ydAotCSAqIFBHX0cuCi0JICovCi0JaWYgKG9sZHBkZSAm
IFBHX0cpCi0JCXBtYXBfaW52YWxpZGF0ZV9wYWdlKGtlcm5lbF9wbWFwLCBzdmEpOwotCXBt
YXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50IC09IE5CUERSIC8gUEFHRV9TSVpFOwotCWlm
IChvbGRwZGUgJiBQR19NQU5BR0VEKSB7Ci0JCXB2aCA9IHBhX3RvX3B2aChvbGRwZGUgJiBQ
R19QU19GUkFNRSk7Ci0JCXBtYXBfcHZoX2ZyZWUocHZoLCBwbWFwLCBzdmEpOwotCQlldmEg
PSBzdmEgKyBOQlBEUjsKLQkJZm9yICh2YSA9IHN2YSwgbSA9IFBIWVNfVE9fVk1fUEFHRShv
bGRwZGUgJiBQR19QU19GUkFNRSk7Ci0JCSAgICB2YSA8IGV2YTsgdmEgKz0gUEFHRV9TSVpF
LCBtKyspIHsKLQkJCWlmICgob2xkcGRlICYgKFBHX00gfCBQR19SVykpID09IChQR19NIHwg
UEdfUlcpKQotCQkJCXZtX3BhZ2VfZGlydHkobSk7Ci0JCQlpZiAob2xkcGRlICYgUEdfQSkK
LQkJCQl2bV9wYWdlX2FmbGFnX3NldChtLCBQR0FfUkVGRVJFTkNFRCk7Ci0JCQlpZiAoVEFJ
TFFfRU1QVFkoJm0tPm1kLnB2X2xpc3QpICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJnB2aC0+
cHZfbGlzdCkpCi0JCQkJdm1fcGFnZV9hZmxhZ19jbGVhcihtLCBQR0FfV1JJVEVBQkxFKTsK
LQkJfQotCX0KLQlpZiAocG1hcCA9PSBrZXJuZWxfcG1hcCkgewotCQlpZiAoIXBtYXBfZGVt
b3RlX3BkZShwbWFwLCBwZHEsIHN2YSkpCi0JCQlwYW5pYygicG1hcF9yZW1vdmVfcGRlOiBm
YWlsZWQgZGVtb3Rpb24iKTsKLQl9IGVsc2UgewotCQltcHRlID0gcG1hcF9sb29rdXBfcHRf
cGFnZShwbWFwLCBzdmEpOwotCQlpZiAobXB0ZSAhPSBOVUxMKSB7Ci0JCQlwbWFwX3JlbW92
ZV9wdF9wYWdlKHBtYXAsIG1wdGUpOwotCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291
bnQtLTsKLQkJCUtBU1NFUlQobXB0ZS0+d2lyZV9jb3VudCA9PSBOUFRFUEcsCi0JCQkgICAg
KCJwbWFwX3JlbW92ZV9wZGU6IHB0ZSBwYWdlIHdpcmUgY291bnQgZXJyb3IiKSk7Ci0JCQlt
cHRlLT53aXJlX2NvdW50ID0gMDsKLQkJCXBtYXBfYWRkX2RlbGF5ZWRfZnJlZV9saXN0KG1w
dGUsIGZyZWUsIEZBTFNFKTsKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNudC52X3dpcmVf
Y291bnQsIDEpOwotCQl9Ci0JfQotfQotCi0vKgogICogcG1hcF9yZW1vdmVfcHRlOiBkbyB0
aGUgdGhpbmdzIHRvIHVubWFwIGEgcGFnZSBpbiBhIHByb2Nlc3MKICAqLwogc3RhdGljIGlu
dApAQCAtMjc3MCw5ICsyMjE1LDEzIEBACiAJcHRfZW50cnlfdCBvbGRwdGU7CiAJdm1fcGFn
ZV90IG07CiAKKwlDVFIzKEtUUl9QTUFQLCAicG1hcF9yZW1vdmVfcHRlOiBwbWFwPSVwICpw
dHE9MHgleCB2YT0weCV4IiwKKwkgICAgcG1hcCwgKHVfbG9uZykqcHRxLCB2YSk7CisJCiAJ
bXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgsIE1BX09XTkVEKTsKIAlQTUFQX0xPQ0tf
QVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQlvbGRwdGUgPSBwdGVfbG9hZF9jbGVhcihwdHEp
OworCW9sZHB0ZSA9ICpwdHE7CisJUFRfU0VUX1ZBX01BKHB0cSwgMCwgVFJVRSk7CiAJaWYg
KG9sZHB0ZSAmIFBHX1cpCiAJCXBtYXAtPnBtX3N0YXRzLndpcmVkX2NvdW50IC09IDE7CiAJ
LyoKQEAgLTI3ODMsNyArMjIzMiw3IEBACiAJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKGtlcm5l
bF9wbWFwLCB2YSk7CiAJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQgLT0gMTsKIAlp
ZiAob2xkcHRlICYgUEdfTUFOQUdFRCkgewotCQltID0gUEhZU19UT19WTV9QQUdFKG9sZHB0
ZSAmIFBHX0ZSQU1FKTsKKwkJbSA9IFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9tdG9wKG9sZHB0
ZSkgJiBQR19GUkFNRSk7CiAJCWlmICgob2xkcHRlICYgKFBHX00gfCBQR19SVykpID09IChQ
R19NIHwgUEdfUlcpKQogCQkJdm1fcGFnZV9kaXJ0eShtKTsKIAkJaWYgKG9sZHB0ZSAmIFBH
X0EpCkBAIC0yODAxLDEzICsyMjUwLDE5IEBACiB7CiAJcHRfZW50cnlfdCAqcHRlOwogCisJ
Q1RSMihLVFJfUE1BUCwgInBtYXBfcmVtb3ZlX3BhZ2U6IHBtYXA9JXAgdmE9MHgleCIsCisJ
ICAgIHBtYXAsIHZhKTsKKwkKIAltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX210eCwgTUFf
T1dORUQpOwogCUtBU1NFUlQoY3VydGhyZWFkLT50ZF9waW5uZWQgPiAwLCAoImN1cnRocmVh
ZCBub3QgcGlubmVkIikpOwogCVBNQVBfTE9DS19BU1NFUlQocG1hcCwgTUFfT1dORUQpOwot
CWlmICgocHRlID0gcG1hcF9wdGVfcXVpY2socG1hcCwgdmEpKSA9PSBOVUxMIHx8ICpwdGUg
PT0gMCkKKwlpZiAoKHB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHZhKSkgPT0gTlVMTCB8
fCAoKnB0ZSAmIFBHX1YpID09IDApCiAJCXJldHVybjsKIAlwbWFwX3JlbW92ZV9wdGUocG1h
cCwgcHRlLCB2YSwgZnJlZSk7CiAJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwgdmEpOwor
CWlmICgqUE1BUDEpCisJCVBUX1NFVF9NQShQQUREUjEsIDApOworCiB9CiAKIC8qCkBAIC0y
ODI1LDYgKzIyODAsOSBAQAogCXZtX3BhZ2VfdCBmcmVlID0gTlVMTDsKIAlpbnQgYW55dmFs
aWQ7CiAKKwlDVFIzKEtUUl9QTUFQLCAicG1hcF9yZW1vdmU6IHBtYXA9JXAgc3ZhPTB4JXgg
ZXZhPTB4JXgiLAorCSAgICBwbWFwLCBzdmEsIGV2YSk7CisKIAkvKgogCSAqIFBlcmZvcm0g
YW4gdW5zeW5jaHJvbml6ZWQgcmVhZC4gIFRoaXMgaXMsIGhvd2V2ZXIsIHNhZmUuCiAJICov
CkBAIC0yODU1LDggKzIzMTMsNiBAQAogCQkgKiBDYWxjdWxhdGUgaW5kZXggZm9yIG5leHQg
cGFnZSB0YWJsZS4KIAkJICovCiAJCXBkbnh0ID0gKHN2YSArIE5CUERSKSAmIH5QRFJNQVNL
OwotCQlpZiAocGRueHQgPCBzdmEpCi0JCQlwZG54dCA9IGV2YTsKIAkJaWYgKHBtYXAtPnBt
X3N0YXRzLnJlc2lkZW50X2NvdW50ID09IDApCiAJCQlicmVhazsKIApAQCAtMjg3NCwyNSAr
MjMzMCwxMCBAQAogCQkgKiBDaGVjayBmb3IgbGFyZ2UgcGFnZS4KIAkJICovCiAJCWlmICgo
cHRwYWRkciAmIFBHX1BTKSAhPSAwKSB7Ci0JCQkvKgotCQkJICogQXJlIHdlIHJlbW92aW5n
IHRoZSBlbnRpcmUgbGFyZ2UgcGFnZT8gIElmIG5vdCwKLQkJCSAqIGRlbW90ZSB0aGUgbWFw
cGluZyBhbmQgZmFsbCB0aHJvdWdoLgotCQkJICovCi0JCQlpZiAoc3ZhICsgTkJQRFIgPT0g
cGRueHQgJiYgZXZhID49IHBkbnh0KSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGUgVExCIGVudHJ5
IGZvciBhIFBHX0cgbWFwcGluZyBpcwotCQkJCSAqIGludmFsaWRhdGVkIGJ5IHBtYXBfcmVt
b3ZlX3BkZSgpLgotCQkJCSAqLwotCQkJCWlmICgocHRwYWRkciAmIFBHX0cpID09IDApCi0J
CQkJCWFueXZhbGlkID0gMTsKLQkJCQlwbWFwX3JlbW92ZV9wZGUocG1hcCwKLQkJCQkgICAg
JnBtYXAtPnBtX3BkaXJbcGRpcmluZGV4XSwgc3ZhLCAmZnJlZSk7Ci0JCQkJY29udGludWU7
Ci0JCQl9IGVsc2UgaWYgKCFwbWFwX2RlbW90ZV9wZGUocG1hcCwKLQkJCSAgICAmcG1hcC0+
cG1fcGRpcltwZGlyaW5kZXhdLCBzdmEpKSB7Ci0JCQkJLyogVGhlIGxhcmdlIHBhZ2UgbWFw
cGluZyB3YXMgZGVzdHJveWVkLiAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQkJUERfQ0xF
QVJfVkEocG1hcCwgcGRpcmluZGV4LCBUUlVFKTsKKwkJCXBtYXAtPnBtX3N0YXRzLnJlc2lk
ZW50X2NvdW50IC09IE5CUERSIC8gUEFHRV9TSVpFOworCQkJYW55dmFsaWQgPSAxOworCQkJ
Y29udGludWU7CiAJCX0KIAogCQkvKgpAQCAtMjkwNSw3ICsyMzQ2LDcgQEAKIAogCQlmb3Ig
KHB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHN2YSk7IHN2YSAhPSBwZG54dDsgcHRlKyss
CiAJCSAgICBzdmEgKz0gUEFHRV9TSVpFKSB7Ci0JCQlpZiAoKnB0ZSA9PSAwKQorCQkJaWYg
KCgqcHRlICYgUEdfVikgPT0gMCkKIAkJCQljb250aW51ZTsKIAogCQkJLyoKQEAgLTI5MTgs
MTAgKzIzNTksMTMgQEAKIAkJCQlicmVhazsKIAkJfQogCX0KKwlQVF9VUERBVEVTX0ZMVVNI
KCk7CisJaWYgKCpQTUFQMSkKKwkJUFRfU0VUX1ZBX01BKFBNQVAxLCAwLCBUUlVFKTsKIG91
dDoKLQlzY2hlZF91bnBpbigpOwogCWlmIChhbnl2YWxpZCkKIAkJcG1hcF9pbnZhbGlkYXRl
X2FsbChwbWFwKTsKKwlzY2hlZF91bnBpbigpOwogCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygp
OwogCVBNQVBfVU5MT0NLKHBtYXApOwogCXBtYXBfZnJlZV96ZXJvX3BhZ2VzKGZyZWUpOwpA
QCAtMjk0MywxMiArMjM4Nyw5IEBACiB2b2lkCiBwbWFwX3JlbW92ZV9hbGwodm1fcGFnZV90
IG0pCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKIAlwdl9lbnRyeV90IHB2OwogCXBtYXBf
dCBwbWFwOwogCXB0X2VudHJ5X3QgKnB0ZSwgdHB0ZTsKLQlwZF9lbnRyeV90ICpwZGU7Ci0J
dm1fb2Zmc2V0X3QgdmE7CiAJdm1fcGFnZV90IGZyZWU7CiAKIAlLQVNTRVJUKChtLT5vZmxh
Z3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAwLApAQCAtMjk1NiwyNCArMjM5NywxMyBAQAogCWZy
ZWUgPSBOVUxMOwogCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlzY2hlZF9waW4oKTsKLQlw
dmggPSBwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKTsKLQl3aGlsZSAoKHB2ID0gVEFJ
TFFfRklSU1QoJnB2aC0+cHZfbGlzdCkpICE9IE5VTEwpIHsKLQkJdmEgPSBwdi0+cHZfdmE7
Ci0JCXBtYXAgPSBQVl9QTUFQKHB2KTsKLQkJUE1BUF9MT0NLKHBtYXApOwotCQlwZGUgPSBw
bWFwX3BkZShwbWFwLCB2YSk7Ci0JCSh2b2lkKXBtYXBfZGVtb3RlX3BkZShwbWFwLCBwZGUs
IHZhKTsKLQkJUE1BUF9VTkxPQ0socG1hcCk7Ci0JfQogCXdoaWxlICgocHYgPSBUQUlMUV9G
SVJTVCgmbS0+bWQucHZfbGlzdCkpICE9IE5VTEwpIHsKIAkJcG1hcCA9IFBWX1BNQVAocHYp
OwogCQlQTUFQX0xPQ0socG1hcCk7CiAJCXBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50
LS07Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAsIHB2LT5wdl92YSk7Ci0JCUtBU1NFUlQoKCpw
ZGUgJiBQR19QUykgPT0gMCwgKCJwbWFwX3JlbW92ZV9hbGw6IGZvdW5kIgotCQkgICAgIiBh
IDRtcGFnZSBpbiBwYWdlICVwJ3MgcHYgbGlzdCIsIG0pKTsKIAkJcHRlID0gcG1hcF9wdGVf
cXVpY2socG1hcCwgcHYtPnB2X3ZhKTsKLQkJdHB0ZSA9IHB0ZV9sb2FkX2NsZWFyKHB0ZSk7
CisJCXRwdGUgPSAqcHRlOworCQlQVF9TRVRfVkFfTUEocHRlLCAwLCBUUlVFKTsKIAkJaWYg
KHRwdGUgJiBQR19XKQogCQkJcG1hcC0+cG1fc3RhdHMud2lyZWRfY291bnQtLTsKIAkJaWYg
KHRwdGUgJiBQR19BKQpAQCAtMjk5MSw1MyArMjQyMSwxNSBAQAogCQlQTUFQX1VOTE9DSyhw
bWFwKTsKIAl9CiAJdm1fcGFnZV9hZmxhZ19jbGVhcihtLCBQR0FfV1JJVEVBQkxFKTsKKwlQ
VF9VUERBVEVTX0ZMVVNIKCk7CisJaWYgKCpQTUFQMSkKKwkJUFRfU0VUX01BKFBBRERSMSwg
MCk7CiAJc2NoZWRfdW5waW4oKTsKIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKIAlwbWFw
X2ZyZWVfemVyb19wYWdlcyhmcmVlKTsKIH0KIAogLyoKLSAqIHBtYXBfcHJvdGVjdF9wZGU6
IGRvIHRoZSB0aGluZ3MgdG8gcHJvdGVjdCBhIDRtcGFnZSBpbiBhIHByb2Nlc3MKLSAqLwot
c3RhdGljIGJvb2xlYW5fdAotcG1hcF9wcm90ZWN0X3BkZShwbWFwX3QgcG1hcCwgcGRfZW50
cnlfdCAqcGRlLCB2bV9vZmZzZXRfdCBzdmEsIHZtX3Byb3RfdCBwcm90KQotewotCXBkX2Vu
dHJ5X3QgbmV3cGRlLCBvbGRwZGU7Ci0Jdm1fb2Zmc2V0X3QgZXZhLCB2YTsKLQl2bV9wYWdl
X3QgbTsKLQlib29sZWFuX3QgYW55Y2hhbmdlZDsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1h
cCwgTUFfT1dORUQpOwotCUtBU1NFUlQoKHN2YSAmIFBEUk1BU0spID09IDAsCi0JICAgICgi
cG1hcF9wcm90ZWN0X3BkZTogc3ZhIGlzIG5vdCA0bXBhZ2UgYWxpZ25lZCIpKTsKLQlhbnlj
aGFuZ2VkID0gRkFMU0U7Ci1yZXRyeToKLQlvbGRwZGUgPSBuZXdwZGUgPSAqcGRlOwotCWlm
IChvbGRwZGUgJiBQR19NQU5BR0VEKSB7Ci0JCWV2YSA9IHN2YSArIE5CUERSOwotCQlmb3Ig
KHZhID0gc3ZhLCBtID0gUEhZU19UT19WTV9QQUdFKG9sZHBkZSAmIFBHX1BTX0ZSQU1FKTsK
LQkJICAgIHZhIDwgZXZhOyB2YSArPSBQQUdFX1NJWkUsIG0rKykKLQkJCWlmICgob2xkcGRl
ICYgKFBHX00gfCBQR19SVykpID09IChQR19NIHwgUEdfUlcpKQotCQkJCXZtX3BhZ2VfZGly
dHkobSk7Ci0JfQotCWlmICgocHJvdCAmIFZNX1BST1RfV1JJVEUpID09IDApCi0JCW5ld3Bk
ZSAmPSB+KFBHX1JXIHwgUEdfTSk7Ci0jaWZkZWYgUEFFCi0JaWYgKChwcm90ICYgVk1fUFJP
VF9FWEVDVVRFKSA9PSAwKQotCQluZXdwZGUgfD0gcGdfbng7Ci0jZW5kaWYKLQlpZiAobmV3
cGRlICE9IG9sZHBkZSkgewotCQlpZiAoIXBkZV9jbXBzZXQocGRlLCBvbGRwZGUsIG5ld3Bk
ZSkpCi0JCQlnb3RvIHJldHJ5OwotCQlpZiAob2xkcGRlICYgUEdfRykKLQkJCXBtYXBfaW52
YWxpZGF0ZV9wYWdlKHBtYXAsIHN2YSk7Ci0JCWVsc2UKLQkJCWFueWNoYW5nZWQgPSBUUlVF
OwotCX0KLQlyZXR1cm4gKGFueWNoYW5nZWQpOwotfQotCi0vKgogICoJU2V0IHRoZSBwaHlz
aWNhbCBwcm90ZWN0aW9uIG9uIHRoZQogICoJc3BlY2lmaWVkIHJhbmdlIG9mIHRoaXMgbWFw
IGFzIHJlcXVlc3RlZC4KICAqLwpAQCAtMzA0OSw2ICsyNDQxLDkgQEAKIAlwdF9lbnRyeV90
ICpwdGU7CiAJaW50IGFueWNoYW5nZWQ7CiAKKwlDVFI0KEtUUl9QTUFQLCAicG1hcF9wcm90
ZWN0OiBwbWFwPSVwIHN2YT0weCV4IGV2YT0weCV4IHByb3Q9MHgleCIsCisJICAgIHBtYXAs
IHN2YSwgZXZhLCBwcm90KTsKKwkKIAlpZiAoKHByb3QgJiBWTV9QUk9UX1JFQUQpID09IFZN
X1BST1RfTk9ORSkgewogCQlwbWFwX3JlbW92ZShwbWFwLCBzdmEsIGV2YSk7CiAJCXJldHVy
bjsKQEAgLTMwNzMsOCArMjQ2OCw2IEBACiAJCXVfaW50IHBkaXJpbmRleDsKIAogCQlwZG54
dCA9IChzdmEgKyBOQlBEUikgJiB+UERSTUFTSzsKLQkJaWYgKHBkbnh0IDwgc3ZhKQotCQkJ
cGRueHQgPSBldmE7CiAKIAkJcGRpcmluZGV4ID0gc3ZhID4+IFBEUlNISUZUOwogCQlwdHBh
ZGRyID0gcG1hcC0+cG1fcGRpcltwZGlyaW5kZXhdOwpAQCAtMzA5MCwyNCArMjQ4MywxNCBA
QAogCQkgKiBDaGVjayBmb3IgbGFyZ2UgcGFnZS4KIAkJICovCiAJCWlmICgocHRwYWRkciAm
IFBHX1BTKSAhPSAwKSB7Ci0JCQkvKgotCQkJICogQXJlIHdlIHByb3RlY3RpbmcgdGhlIGVu
dGlyZSBsYXJnZSBwYWdlPyAgSWYgbm90LAotCQkJICogZGVtb3RlIHRoZSBtYXBwaW5nIGFu
ZCBmYWxsIHRocm91Z2guCi0JCQkgKi8KLQkJCWlmIChzdmEgKyBOQlBEUiA9PSBwZG54dCAm
JiBldmEgPj0gcGRueHQpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBUTEIgZW50cnkgZm9yIGEg
UEdfRyBtYXBwaW5nIGlzCi0JCQkJICogaW52YWxpZGF0ZWQgYnkgcG1hcF9wcm90ZWN0X3Bk
ZSgpLgotCQkJCSAqLwotCQkJCWlmIChwbWFwX3Byb3RlY3RfcGRlKHBtYXAsCi0JCQkJICAg
ICZwbWFwLT5wbV9wZGlyW3BkaXJpbmRleF0sIHN2YSwgcHJvdCkpCi0JCQkJCWFueWNoYW5n
ZWQgPSAxOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICghcG1hcF9kZW1vdGVfcGRl
KHBtYXAsCi0JCQkgICAgJnBtYXAtPnBtX3BkaXJbcGRpcmluZGV4XSwgc3ZhKSkgewotCQkJ
CS8qIFRoZSBsYXJnZSBwYWdlIG1hcHBpbmcgd2FzIGRlc3Ryb3llZC4gKi8KLQkJCQljb250
aW51ZTsKLQkJCX0KKwkJCWlmICgocHJvdCAmIFZNX1BST1RfV1JJVEUpID09IDApCisJCQkJ
cG1hcC0+cG1fcGRpcltwZGlyaW5kZXhdICY9IH4oUEdfTXxQR19SVyk7CisjaWZkZWYgUEFF
CisJCQlpZiAoKHByb3QgJiBWTV9QUk9UX0VYRUNVVEUpID09IDApCisJCQkJcG1hcC0+cG1f
cGRpcltwZGlyaW5kZXhdIHw9IHBnX254OworI2VuZGlmCisJCQlhbnljaGFuZ2VkID0gMTsK
KwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKHBkbnh0ID4gZXZhKQpAQCAtMzEzMCw3ICsy
NTEzLDggQEAKIAkJCWlmICgocHJvdCAmIFZNX1BST1RfV1JJVEUpID09IDApIHsKIAkJCQlp
ZiAoKHBiaXRzICYgKFBHX01BTkFHRUQgfCBQR19NIHwgUEdfUlcpKSA9PQogCQkJCSAgICAo
UEdfTUFOQUdFRCB8IFBHX00gfCBQR19SVykpIHsKLQkJCQkJbSA9IFBIWVNfVE9fVk1fUEFH
RShwYml0cyAmIFBHX0ZSQU1FKTsKKwkJCQkJbSA9IFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9t
dG9wKHBiaXRzKSAmCisJCQkJCSAgICBQR19GUkFNRSk7CiAJCQkJCXZtX3BhZ2VfZGlydHko
bSk7CiAJCQkJfQogCQkJCXBiaXRzICY9IH4oUEdfUlcgfCBQR19NKTsKQEAgLTMxNDEsMTQg
KzI1MjUsMTAgQEAKICNlbmRpZgogCiAJCQlpZiAocGJpdHMgIT0gb2JpdHMpIHsKLSNpZmRl
ZiBQQUUKLQkJCQlpZiAoIWF0b21pY19jbXBzZXRfNjQocHRlLCBvYml0cywgcGJpdHMpKQor
CQkJCW9iaXRzID0gKnB0ZTsKKwkJCQlQVF9TRVRfVkFfTUEocHRlLCBwYml0cywgVFJVRSk7
CisJCQkJaWYgKCpwdGUgIT0gcGJpdHMpCiAJCQkJCWdvdG8gcmV0cnk7Ci0jZWxzZQotCQkJ
CWlmICghYXRvbWljX2NtcHNldF9pbnQoKHVfaW50ICopcHRlLCBvYml0cywKLQkJCQkgICAg
cGJpdHMpKQotCQkJCQlnb3RvIHJldHJ5OwotI2VuZGlmCiAJCQkJaWYgKG9iaXRzICYgUEdf
RykKIAkJCQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwgc3ZhKTsKIAkJCQllbHNlCkBA
IC0zMTU2LDE0NSArMjUzNiwxNyBAQAogCQkJfQogCQl9CiAJfQotCXNjaGVkX3VucGluKCk7
CisJUFRfVVBEQVRFU19GTFVTSCgpOworCWlmICgqUE1BUDEpCisJCVBUX1NFVF9WQV9NQShQ
TUFQMSwgMCwgVFJVRSk7CiAJaWYgKGFueWNoYW5nZWQpCiAJCXBtYXBfaW52YWxpZGF0ZV9h
bGwocG1hcCk7CisJc2NoZWRfdW5waW4oKTsKIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsK
IAlQTUFQX1VOTE9DSyhwbWFwKTsKIH0KIAogLyoKLSAqIFRyaWVzIHRvIHByb21vdGUgdGhl
IDUxMiBvciAxMDI0LCBjb250aWd1b3VzIDRLQiBwYWdlIG1hcHBpbmdzIHRoYXQgYXJlCi0g
KiB3aXRoaW4gYSBzaW5nbGUgcGFnZSB0YWJsZSBwYWdlIChQVFApIHRvIGEgc2luZ2xlIDIt
IG9yIDRNQiBwYWdlIG1hcHBpbmcuCi0gKiBGb3IgcHJvbW90aW9uIHRvIG9jY3VyLCB0d28g
Y29uZGl0aW9ucyBtdXN0IGJlIG1ldDogKDEpIHRoZSA0S0IgcGFnZQotICogbWFwcGluZ3Mg
bXVzdCBtYXAgYWxpZ25lZCwgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkgYW5kICgyKSB0
aGUgNEtCIHBhZ2UKLSAqIG1hcHBpbmdzIG11c3QgaGF2ZSBpZGVudGljYWwgY2hhcmFjdGVy
aXN0aWNzLgotICoKLSAqIE1hbmFnZWQgKFBHX01BTkFHRUQpIG1hcHBpbmdzIHdpdGhpbiB0
aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UgYXJlIG5vdAotICogcHJvbW90ZWQuICBUaGUgcmVh
c29uIGlzIHRoYXQga2VybmVsIFBERXMgYXJlIHJlcGxpY2F0ZWQgaW4gZWFjaCBwbWFwIGJ1
dAotICogcG1hcF9jbGVhcl9wdGVzKCkgYW5kIHBtYXBfdHNfcmVmZXJlbmNlZCgpIG9ubHkg
cmVhZCB0aGUgUERFIGZyb20gdGhlIGtlcm5lbAotICogcG1hcC4KLSAqLwotc3RhdGljIHZv
aWQKLXBtYXBfcHJvbW90ZV9wZGUocG1hcF90IHBtYXAsIHBkX2VudHJ5X3QgKnBkZSwgdm1f
b2Zmc2V0X3QgdmEpCi17Ci0JcGRfZW50cnlfdCBuZXdwZGU7Ci0JcHRfZW50cnlfdCAqZmly
c3RwdGUsIG9sZHB0ZSwgcGEsICpwdGU7Ci0Jdm1fb2Zmc2V0X3Qgb2xkcHRldmE7Ci0Jdm1f
cGFnZV90IG1wdGU7Ci0KLQlQTUFQX0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQot
CS8qCi0JICogRXhhbWluZSB0aGUgZmlyc3QgUFRFIGluIHRoZSBzcGVjaWZpZWQgUFRQLiAg
QWJvcnQgaWYgdGhpcyBQVEUgaXMKLQkgKiBlaXRoZXIgaW52YWxpZCwgdW51c2VkLCBvciBk
b2VzIG5vdCBtYXAgdGhlIGZpcnN0IDRLQiBwaHlzaWNhbCBwYWdlCi0JICogd2l0aGluIGEg
Mi0gb3IgNE1CIHBhZ2UuCi0JICovCi0JZmlyc3RwdGUgPSBwbWFwX3B0ZV9xdWljayhwbWFw
LCB0cnVuY180bXBhZ2UodmEpKTsKLXNldHBkZToKLQluZXdwZGUgPSAqZmlyc3RwdGU7Ci0J
aWYgKChuZXdwZGUgJiAoKFBHX0ZSQU1FICYgUERSTUFTSykgfCBQR19BIHwgUEdfVikpICE9
IChQR19BIHwgUEdfVikpIHsKLQkJcG1hcF9wZGVfcF9mYWlsdXJlcysrOwotCQlDVFIyKEtU
Ul9QTUFQLCAicG1hcF9wcm9tb3RlX3BkZTogZmFpbHVyZSBmb3IgdmEgJSN4IgotCQkgICAg
IiBpbiBwbWFwICVwIiwgdmEsIHBtYXApOwotCQlyZXR1cm47Ci0JfQotCWlmICgoKmZpcnN0
cHRlICYgUEdfTUFOQUdFRCkgIT0gMCAmJiBwbWFwID09IGtlcm5lbF9wbWFwKSB7Ci0JCXBt
YXBfcGRlX3BfZmFpbHVyZXMrKzsKLQkJQ1RSMihLVFJfUE1BUCwgInBtYXBfcHJvbW90ZV9w
ZGU6IGZhaWx1cmUgZm9yIHZhICUjeCIKLQkJICAgICIgaW4gcG1hcCAlcCIsIHZhLCBwbWFw
KTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoKG5ld3BkZSAmIChQR19NIHwgUEdfUlcpKSA9PSBQ
R19SVykgewotCQkvKgotCQkgKiBXaGVuIFBHX00gaXMgYWxyZWFkeSBjbGVhciwgUEdfUlcg
Y2FuIGJlIGNsZWFyZWQgd2l0aG91dAotCQkgKiBhIFRMQiBpbnZhbGlkYXRpb24uCi0JCSAq
LwotCQlpZiAoIWF0b21pY19jbXBzZXRfaW50KCh1X2ludCAqKWZpcnN0cHRlLCBuZXdwZGUs
IG5ld3BkZSAmCi0JCSAgICB+UEdfUlcpKSAgCi0JCQlnb3RvIHNldHBkZTsKLQkJbmV3cGRl
ICY9IH5QR19SVzsKLQl9Ci0KLQkvKiAKLQkgKiBFeGFtaW5lIGVhY2ggb2YgdGhlIG90aGVy
IFBURXMgaW4gdGhlIHNwZWNpZmllZCBQVFAuICBBYm9ydCBpZiB0aGlzCi0JICogUFRFIG1h
cHMgYW4gdW5leHBlY3RlZCA0S0IgcGh5c2ljYWwgcGFnZSBvciBkb2VzIG5vdCBoYXZlIGlk
ZW50aWNhbAotCSAqIGNoYXJhY3RlcmlzdGljcyB0byB0aGUgZmlyc3QgUFRFLgotCSAqLwot
CXBhID0gKG5ld3BkZSAmIChQR19QU19GUkFNRSB8IFBHX0EgfCBQR19WKSkgKyBOQlBEUiAt
IFBBR0VfU0laRTsKLQlmb3IgKHB0ZSA9IGZpcnN0cHRlICsgTlBURVBHIC0gMTsgcHRlID4g
Zmlyc3RwdGU7IHB0ZS0tKSB7Ci1zZXRwdGU6Ci0JCW9sZHB0ZSA9ICpwdGU7Ci0JCWlmICgo
b2xkcHRlICYgKFBHX0ZSQU1FIHwgUEdfQSB8IFBHX1YpKSAhPSBwYSkgewotCQkJcG1hcF9w
ZGVfcF9mYWlsdXJlcysrOwotCQkJQ1RSMihLVFJfUE1BUCwgInBtYXBfcHJvbW90ZV9wZGU6
IGZhaWx1cmUgZm9yIHZhICUjeCIKLQkJCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7
Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKChvbGRwdGUgJiAoUEdfTSB8IFBHX1JXKSkgPT0g
UEdfUlcpIHsKLQkJCS8qCi0JCQkgKiBXaGVuIFBHX00gaXMgYWxyZWFkeSBjbGVhciwgUEdf
UlcgY2FuIGJlIGNsZWFyZWQKLQkJCSAqIHdpdGhvdXQgYSBUTEIgaW52YWxpZGF0aW9uLgot
CQkJICovCi0JCQlpZiAoIWF0b21pY19jbXBzZXRfaW50KCh1X2ludCAqKXB0ZSwgb2xkcHRl
LAotCQkJICAgIG9sZHB0ZSAmIH5QR19SVykpCi0JCQkJZ290byBzZXRwdGU7Ci0JCQlvbGRw
dGUgJj0gflBHX1JXOwotCQkJb2xkcHRldmEgPSAob2xkcHRlICYgUEdfRlJBTUUgJiBQRFJN
QVNLKSB8Ci0JCQkgICAgKHZhICYgflBEUk1BU0spOwotCQkJQ1RSMihLVFJfUE1BUCwgInBt
YXBfcHJvbW90ZV9wZGU6IHByb3RlY3QgZm9yIHZhICUjeCIKLQkJCSAgICAiIGluIHBtYXAg
JXAiLCBvbGRwdGV2YSwgcG1hcCk7Ci0JCX0KLQkJaWYgKChvbGRwdGUgJiBQR19QVEVfUFJP
TU9URSkgIT0gKG5ld3BkZSAmIFBHX1BURV9QUk9NT1RFKSkgewotCQkJcG1hcF9wZGVfcF9m
YWlsdXJlcysrOwotCQkJQ1RSMihLVFJfUE1BUCwgInBtYXBfcHJvbW90ZV9wZGU6IGZhaWx1
cmUgZm9yIHZhICUjeCIKLQkJCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJcGEgLT0gUEFHRV9TSVpFOwotCX0KLQotCS8qCi0JICogU2F2ZSB0
aGUgcGFnZSB0YWJsZSBwYWdlIGluIGl0cyBjdXJyZW50IHN0YXRlIHVudGlsIHRoZSBQREUK
LQkgKiBtYXBwaW5nIHRoZSBzdXBlcnBhZ2UgaXMgZGVtb3RlZCBieSBwbWFwX2RlbW90ZV9w
ZGUoKSBvcgotCSAqIGRlc3Ryb3llZCBieSBwbWFwX3JlbW92ZV9wZGUoKS4gCi0JICovCi0J
bXB0ZSA9IFBIWVNfVE9fVk1fUEFHRSgqcGRlICYgUEdfRlJBTUUpOwotCUtBU1NFUlQobXB0
ZSA+PSB2bV9wYWdlX2FycmF5ICYmCi0JICAgIG1wdGUgPCAmdm1fcGFnZV9hcnJheVt2bV9w
YWdlX2FycmF5X3NpemVdLAotCSAgICAoInBtYXBfcHJvbW90ZV9wZGU6IHBhZ2UgdGFibGUg
cGFnZSBpcyBvdXQgb2YgcmFuZ2UiKSk7Ci0JS0FTU0VSVChtcHRlLT5waW5kZXggPT0gdmEg
Pj4gUERSU0hJRlQsCi0JICAgICgicG1hcF9wcm9tb3RlX3BkZTogcGFnZSB0YWJsZSBwYWdl
J3MgcGluZGV4IGlzIHdyb25nIikpOwotCXBtYXBfaW5zZXJ0X3B0X3BhZ2UocG1hcCwgbXB0
ZSk7Ci0KLQkvKgotCSAqIFByb21vdGUgdGhlIHB2IGVudHJpZXMuCi0JICovCi0JaWYgKChu
ZXdwZGUgJiBQR19NQU5BR0VEKSAhPSAwKQotCQlwbWFwX3B2X3Byb21vdGVfcGRlKHBtYXAs
IHZhLCBuZXdwZGUgJiBQR19QU19GUkFNRSk7Ci0KLQkvKgotCSAqIFByb3BhZ2F0ZSB0aGUg
UEFUIGluZGV4IHRvIGl0cyBwcm9wZXIgcG9zaXRpb24uCi0JICovCi0JaWYgKChuZXdwZGUg
JiBQR19QVEVfUEFUKSAhPSAwKQotCQluZXdwZGUgXj0gUEdfUERFX1BBVCB8IFBHX1BURV9Q
QVQ7Ci0KLQkvKgotCSAqIE1hcCB0aGUgc3VwZXJwYWdlLgotCSAqLwotCWlmICh3b3JrYXJv
dW5kX2VycmF0dW0zODMpCi0JCXBtYXBfdXBkYXRlX3BkZShwbWFwLCB2YSwgcGRlLCBQR19Q
UyB8IG5ld3BkZSk7Ci0JZWxzZSBpZiAocG1hcCA9PSBrZXJuZWxfcG1hcCkKLQkJcG1hcF9r
ZW50ZXJfcGRlKHZhLCBQR19QUyB8IG5ld3BkZSk7Ci0JZWxzZQotCQlwZGVfc3RvcmUocGRl
LCBQR19QUyB8IG5ld3BkZSk7Ci0KLQlwbWFwX3BkZV9wcm9tb3Rpb25zKys7Ci0JQ1RSMihL
VFJfUE1BUCwgInBtYXBfcHJvbW90ZV9wZGU6IHN1Y2Nlc3MgZm9yIHZhICUjeCIKLQkgICAg
IiBpbiBwbWFwICVwIiwgdmEsIHBtYXApOwotfQotCi0vKgogICoJSW5zZXJ0IHRoZSBnaXZl
biBwaHlzaWNhbCBwYWdlIChwKSBhdAogICoJdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJl
c3MgKHYpIGluIHRoZQogICoJdGFyZ2V0IHBoeXNpY2FsIG1hcCB3aXRoIHRoZSBwcm90ZWN0
aW9uIHJlcXVlc3RlZC4KQEAgLTMzMTgsNiArMjU3MCw4IEBACiAJdm1fcGFnZV90IG1wdGUs
IG9tOwogCWJvb2xlYW5fdCBpbnZsdmE7CiAKKwlDVFI2KEtUUl9QTUFQLCAicG1hcF9lbnRl
cjogcG1hcD0lMDhwIHZhPTB4JTA4eCBhY2Nlc3M9MHgleCBtYT0weCUwOHggcHJvdD0weCV4
IHdpcmVkPSVkIiwKKwkgICAgcG1hcCwgdmEsIGFjY2VzcywgVk1fUEFHRV9UT19NQUNIKG0p
LCBwcm90LCB3aXJlZCk7CiAJdmEgPSB0cnVuY19wYWdlKHZhKTsKIAlLQVNTRVJUKHZhIDw9
IFZNX01BWF9LRVJORUxfQUREUkVTUywgKCJwbWFwX2VudGVyOiB0b29iaWciKSk7CiAJS0FT
U0VSVCh2YSA8IFVQVF9NSU5fQUREUkVTUyB8fCB2YSA+PSBVUFRfTUFYX0FERFJFU1MsCkBA
IC0zMzUxLDEyICsyNjA1LDIwIEBACiAJICovCiAJaWYgKHB0ZSA9PSBOVUxMKSB7CiAJCXBh
bmljKCJwbWFwX2VudGVyOiBpbnZhbGlkIHBhZ2UgZGlyZWN0b3J5IHBkaXI9JSNqeCwgdmE9
JSN4IiwKLQkJCSh1aW50bWF4X3QpcG1hcC0+cG1fcGRpcltQVERQVERJXSwgdmEpOworCQkJ
KHVpbnRtYXhfdClwbWFwLT5wbV9wZGlyW3ZhID4+IFBEUlNISUZUXSwgdmEpOwogCX0KIAog
CXBhID0gVk1fUEFHRV9UT19QSFlTKG0pOwogCW9tID0gTlVMTDsKKwlvcGEgPSBvcmlncHRl
ID0gMDsKKworI2lmIDAKKwlLQVNTRVJUKCgqcHRlICYgUEdfVikgfHwgKCpwdGUgPT0gMCks
ICgiYWRkcmVzcyBzZXQgYnV0IG5vdCB2YWxpZCBwdGU9JXAgKnB0ZT0weCUwMTZqeCIsCisJ
CXB0ZSwgKnB0ZSkpOworI2VuZGlmCiAJb3JpZ3B0ZSA9ICpwdGU7CisJaWYgKG9yaWdwdGUp
CisJCW9yaWdwdGUgPSB4cG1hcF9tdG9wKG9yaWdwdGUpOwogCW9wYSA9IG9yaWdwdGUgJiBQ
R19GUkFNRTsKIAogCS8qCkBAIC0zMzk5LDcgKzI2NjEsOSBAQAogCQlpZiAob3JpZ3B0ZSAm
IFBHX01BTkFHRUQpIHsKIAkJCW9tID0gUEhZU19UT19WTV9QQUdFKG9wYSk7CiAJCQlwdiA9
IHBtYXBfcHZoX3JlbW92ZSgmb20tPm1kLCBwbWFwLCB2YSk7Ci0JCX0KKwkJfSBlbHNlIGlm
ICh2YSA8IFZNX01BWFVTRVJfQUREUkVTUykgCisJCQlwcmludGYoInZhPTB4JXggaXMgdW5t
YW5hZ2VkIDotKCBcbiIsIHZhKTsKKwkJCQogCQlpZiAobXB0ZSAhPSBOVUxMKSB7CiAJCQlt
cHRlLT53aXJlX2NvdW50LS07CiAJCQlLQVNTRVJUKG1wdGUtPndpcmVfY291bnQgPiAwLApA
QCAtMzQzMyw3ICsyNjk3LDcgQEAKIAkvKgogCSAqIE5vdyB2YWxpZGF0ZSBtYXBwaW5nIHdp
dGggZGVzaXJlZCBwcm90ZWN0aW9uL3dpcmluZy4KIAkgKi8KLQluZXdwdGUgPSAocHRfZW50
cnlfdCkocGEgfCBwbWFwX2NhY2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDApIHwgUEdfVik7
CisJbmV3cHRlID0gKHB0X2VudHJ5X3QpKHBhIHwgUEdfVik7CiAJaWYgKChwcm90ICYgVk1f
UFJPVF9XUklURSkgIT0gMCkgewogCQluZXdwdGUgfD0gUEdfUlc7CiAJCWlmICgobmV3cHRl
ICYgUEdfTUFOQUdFRCkgIT0gMCkKQEAgLTM0NTAsMTcgKzI3MTQsMTYgQEAKIAlpZiAocG1h
cCA9PSBrZXJuZWxfcG1hcCkKIAkJbmV3cHRlIHw9IHBnZWZsYWc7CiAKKwljcml0aWNhbF9l
bnRlcigpOwogCS8qCiAJICogaWYgdGhlIG1hcHBpbmcgb3IgcGVybWlzc2lvbiBiaXRzIGFy
ZSBkaWZmZXJlbnQsIHdlIG5lZWQKIAkgKiB0byB1cGRhdGUgdGhlIHB0ZS4KIAkgKi8KIAlp
ZiAoKG9yaWdwdGUgJiB+KFBHX018UEdfQSkpICE9IG5ld3B0ZSkgewotCQluZXdwdGUgfD0g
UEdfQTsKLQkJaWYgKChhY2Nlc3MgJiBWTV9QUk9UX1dSSVRFKSAhPSAwKQotCQkJbmV3cHRl
IHw9IFBHX007Ci0JCWlmIChvcmlncHRlICYgUEdfVikgeworCQlpZiAob3JpZ3B0ZSkgewog
CQkJaW52bHZhID0gRkFMU0U7Ci0JCQlvcmlncHRlID0gcHRlX2xvYWRfc3RvcmUocHRlLCBu
ZXdwdGUpOworCQkJb3JpZ3B0ZSA9ICpwdGU7CisJCQlQVF9TRVRfVkEocHRlLCBuZXdwdGUg
fCBQR19BLCBGQUxTRSk7CiAJCQlpZiAob3JpZ3B0ZSAmIFBHX0EpIHsKIAkJCQlpZiAob3Jp
Z3B0ZSAmIFBHX01BTkFHRUQpCiAJCQkJCXZtX3BhZ2VfYWZsYWdfc2V0KG9tLCBQR0FfUkVG
RVJFTkNFRCk7CkBAIC0zNDc5LDg1ICsyNzQyLDI1IEBACiAJCQkJCWludmx2YSA9IFRSVUU7
CiAJCQl9CiAJCQlpZiAoKG9yaWdwdGUgJiBQR19NQU5BR0VEKSAhPSAwICYmCi0JCQkgICAg
VEFJTFFfRU1QVFkoJm9tLT5tZC5wdl9saXN0KSAmJgotCQkJICAgIFRBSUxRX0VNUFRZKCZw
YV90b19wdmgob3BhKS0+cHZfbGlzdCkpCisJCQkgICAgVEFJTFFfRU1QVFkoJm9tLT5tZC5w
dl9saXN0KSkKIAkJCQl2bV9wYWdlX2FmbGFnX2NsZWFyKG9tLCBQR0FfV1JJVEVBQkxFKTsK
IAkJCWlmIChpbnZsdmEpCiAJCQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwgdmEpOwot
CQl9IGVsc2UKLQkJCXB0ZV9zdG9yZShwdGUsIG5ld3B0ZSk7CisJCX0gZWxzZXsKKwkJCVBU
X1NFVF9WQShwdGUsIG5ld3B0ZSB8IFBHX0EsIEZBTFNFKTsKKwkJfQorCQkKIAl9Ci0KLQkv
KgotCSAqIElmIGJvdGggdGhlIHBhZ2UgdGFibGUgcGFnZSBhbmQgdGhlIHJlc2VydmF0aW9u
IGFyZSBmdWxseQotCSAqIHBvcHVsYXRlZCwgdGhlbiBhdHRlbXB0IHByb21vdGlvbi4KLQkg
Ki8KLQlpZiAoKG1wdGUgPT0gTlVMTCB8fCBtcHRlLT53aXJlX2NvdW50ID09IE5QVEVQRykg
JiYKLQkgICAgcGdfcHNfZW5hYmxlZCAmJiB2bV9yZXNlcnZfbGV2ZWxfaWZmdWxscG9wKG0p
ID09IDApCi0JCXBtYXBfcHJvbW90ZV9wZGUocG1hcCwgcGRlLCB2YSk7Ci0KKwlQVF9VUERB
VEVTX0ZMVVNIKCk7CisJY3JpdGljYWxfZXhpdCgpOworCWlmICgqUE1BUDEpCisJCVBUX1NF
VF9WQV9NQShQTUFQMSwgMCwgVFJVRSk7CiAJc2NoZWRfdW5waW4oKTsKIAl2bV9wYWdlX3Vu
bG9ja19xdWV1ZXMoKTsKIAlQTUFQX1VOTE9DSyhwbWFwKTsKIH0KIAogLyoKLSAqIFRyaWVz
IHRvIGNyZWF0ZSBhIDItIG9yIDRNQiBwYWdlIG1hcHBpbmcuICBSZXR1cm5zIFRSVUUgaWYg
c3VjY2Vzc2Z1bCBhbmQKLSAqIEZBTFNFIG90aGVyd2lzZS4gIEZhaWxzIGlmICgxKSBhIHBh
Z2UgdGFibGUgcGFnZSBjYW5ub3QgYmUgYWxsb2NhdGVkIHdpdGhvdXQKLSAqIGJsb2NraW5n
LCAoMikgYSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGF0IHRoZSBzcGVjaWZpZWQgdmlydHVh
bCBhZGRyZXNzLCBvcgotICogKDMpIGEgcHYgZW50cnkgY2Fubm90IGJlIGFsbG9jYXRlZCB3
aXRob3V0IHJlY2xhaW1pbmcgYW5vdGhlciBwdiBlbnRyeS4gCi0gKi8KLXN0YXRpYyBib29s
ZWFuX3QKLXBtYXBfZW50ZXJfcGRlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1f
cGFnZV90IG0sIHZtX3Byb3RfdCBwcm90KQotewotCXBkX2VudHJ5X3QgKnBkZSwgbmV3cGRl
OwotCi0JbXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgsIE1BX09XTkVEKTsKLQlQTUFQ
X0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQlwZGUgPSBwbWFwX3BkZShwbWFwLCB2
YSk7Ci0JaWYgKCpwZGUgIT0gMCkgewotCQlDVFIyKEtUUl9QTUFQLCAicG1hcF9lbnRlcl9w
ZGU6IGZhaWx1cmUgZm9yIHZhICUjbHgiCi0JCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1h
cCk7Ci0JCXJldHVybiAoRkFMU0UpOwotCX0KLQluZXdwZGUgPSBWTV9QQUdFX1RPX1BIWVMo
bSkgfCBwbWFwX2NhY2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDEpIHwKLQkgICAgUEdfUFMg
fCBQR19WOwotCWlmICgobS0+b2ZsYWdzICYgVlBPX1VOTUFOQUdFRCkgPT0gMCkgewotCQlu
ZXdwZGUgfD0gUEdfTUFOQUdFRDsKLQotCQkvKgotCQkgKiBBYm9ydCB0aGlzIG1hcHBpbmcg
aWYgaXRzIFBWIGVudHJ5IGNvdWxkIG5vdCBiZSBjcmVhdGVkLgotCQkgKi8KLQkJaWYgKCFw
bWFwX3B2X2luc2VydF9wZGUocG1hcCwgdmEsIFZNX1BBR0VfVE9fUEhZUyhtKSkpIHsKLQkJ
CUNUUjIoS1RSX1BNQVAsICJwbWFwX2VudGVyX3BkZTogZmFpbHVyZSBmb3IgdmEgJSNseCIK
LQkJCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7Ci0JCQlyZXR1cm4gKEZBTFNFKTsK
LQkJfQotCX0KLSNpZmRlZiBQQUUKLQlpZiAoKHByb3QgJiBWTV9QUk9UX0VYRUNVVEUpID09
IDApCi0JCW5ld3BkZSB8PSBwZ19ueDsKLSNlbmRpZgotCWlmICh2YSA8IFZNX01BWFVTRVJf
QUREUkVTUykKLQkJbmV3cGRlIHw9IFBHX1U7Ci0KLQkvKgotCSAqIEluY3JlbWVudCBjb3Vu
dGVycy4KLQkgKi8KLQlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCArPSBOQlBEUiAv
IFBBR0VfU0laRTsKLQotCS8qCi0JICogTWFwIHRoZSBzdXBlcnBhZ2UuCi0JICovCi0JcGRl
X3N0b3JlKHBkZSwgbmV3cGRlKTsKLQotCXBtYXBfcGRlX21hcHBpbmdzKys7Ci0JQ1RSMihL
VFJfUE1BUCwgInBtYXBfZW50ZXJfcGRlOiBzdWNjZXNzIGZvciB2YSAlI2x4IgotCSAgICAi
IGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7Ci0JcmV0dXJuIChUUlVFKTsKLX0KLQotLyoKICAq
IE1hcHMgYSBzZXF1ZW5jZSBvZiByZXNpZGVudCBwYWdlcyBiZWxvbmdpbmcgdG8gdGhlIHNh
bWUgb2JqZWN0LgogICogVGhlIHNlcXVlbmNlIGJlZ2lucyB3aXRoIHRoZSBnaXZlbiBwYWdl
IG1fc3RhcnQuICBUaGlzIHBhZ2UgaXMKICAqIG1hcHBlZCBhdCB0aGUgZ2l2ZW4gdmlydHVh
bCBhZGRyZXNzIHN0YXJ0LiAgRWFjaCBzdWJzZXF1ZW50IHBhZ2UgaXMKQEAgLTM1NzMsOSAr
Mjc3NiwxMSBAQAogcG1hcF9lbnRlcl9vYmplY3QocG1hcF90IHBtYXAsIHZtX29mZnNldF90
IHN0YXJ0LCB2bV9vZmZzZXRfdCBlbmQsCiAgICAgdm1fcGFnZV90IG1fc3RhcnQsIHZtX3By
b3RfdCBwcm90KQogewotCXZtX29mZnNldF90IHZhOwogCXZtX3BhZ2VfdCBtLCBtcHRlOwog
CXZtX3BpbmRleF90IGRpZmYsIHBzaXplOworCW11bHRpY2FsbF9lbnRyeV90IG1jbFsxNl07
CisJbXVsdGljYWxsX2VudHJ5X3QgKm1jbHAgPSBtY2w7CisJaW50IGVycm9yLCBjb3VudCA9
IDA7CiAKIAlWTV9PQkpFQ1RfTE9DS19BU1NFUlQobV9zdGFydC0+b2JqZWN0LCBNQV9PV05F
RCk7CiAJcHNpemUgPSBhdG9wKGVuZCAtIHN0YXJ0KTsKQEAgLTM1ODQsMTYgKzI3ODksMTkg
QEAKIAl2bV9wYWdlX2xvY2tfcXVldWVzKCk7CiAJUE1BUF9MT0NLKHBtYXApOwogCXdoaWxl
IChtICE9IE5VTEwgJiYgKGRpZmYgPSBtLT5waW5kZXggLSBtX3N0YXJ0LT5waW5kZXgpIDwg
cHNpemUpIHsKLQkJdmEgPSBzdGFydCArIHB0b2EoZGlmZik7Ci0JCWlmICgodmEgJiBQRFJN
QVNLKSA9PSAwICYmIHZhICsgTkJQRFIgPD0gZW5kICYmCi0JCSAgICAoVk1fUEFHRV9UT19Q
SFlTKG0pICYgUERSTUFTSykgPT0gMCAmJgotCQkgICAgcGdfcHNfZW5hYmxlZCAmJiB2bV9y
ZXNlcnZfbGV2ZWxfaWZmdWxscG9wKG0pID09IDAgJiYKLQkJICAgIHBtYXBfZW50ZXJfcGRl
KHBtYXAsIHZhLCBtLCBwcm90KSkKLQkJCW0gPSAmbVtOQlBEUiAvIFBBR0VfU0laRSAtIDFd
OwotCQllbHNlCi0JCQltcHRlID0gcG1hcF9lbnRlcl9xdWlja19sb2NrZWQocG1hcCwgdmEs
IG0sIHByb3QsCi0JCQkgICAgbXB0ZSk7CisJCW1wdGUgPSBwbWFwX2VudGVyX3F1aWNrX2xv
Y2tlZCgmbWNscCwgJmNvdW50LCBwbWFwLCBzdGFydCArIHB0b2EoZGlmZiksIG0sCisJCSAg
ICBwcm90LCBtcHRlKTsKIAkJbSA9IFRBSUxRX05FWFQobSwgbGlzdHEpOworCQlpZiAoY291
bnQgPT0gMTYpIHsKKwkJCWVycm9yID0gSFlQRVJWSVNPUl9tdWx0aWNhbGwobWNsLCBjb3Vu
dCk7CisJCQlLQVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2FsbCAlZCIsIGVycm9y
KSk7CisJCQltY2xwID0gbWNsOworCQkJY291bnQgPSAwOworCQl9CisJfQorCWlmIChjb3Vu
dCkgeworCQllcnJvciA9IEhZUEVSVklTT1JfbXVsdGljYWxsKG1jbCwgY291bnQpOworCQlL
QVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2FsbCAlZCIsIGVycm9yKSk7CiAJfQog
CXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogCVBNQVBfVU5MT0NLKHBtYXApOwpAQCAtMzYx
MSwyMSArMjgxOSw2MCBAQAogdm9pZAogcG1hcF9lbnRlcl9xdWljayhwbWFwX3QgcG1hcCwg
dm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCkKIHsKKwltdWx0
aWNhbGxfZW50cnlfdCBtY2wsICptY2xwOworCWludCBjb3VudCA9IDA7CisJbWNscCA9ICZt
Y2w7CiAKKwlDVFI0KEtUUl9QTUFQLCAicG1hcF9lbnRlcl9xdWljazogcG1hcD0lcCB2YT0w
eCV4IG09JXAgcHJvdD0weCV4IiwKKwkgICAgcG1hcCwgdmEsIG0sIHByb3QpOworCQogCXZt
X3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlQTUFQX0xPQ0socG1hcCk7Ci0JKHZvaWQpcG1hcF9l
bnRlcl9xdWlja19sb2NrZWQocG1hcCwgdmEsIG0sIHByb3QsIE5VTEwpOworCSh2b2lkKXBt
YXBfZW50ZXJfcXVpY2tfbG9ja2VkKCZtY2xwLCAmY291bnQsIHBtYXAsIHZhLCBtLCBwcm90
LCBOVUxMKTsKKwlpZiAoY291bnQpCisJCUhZUEVSVklTT1JfbXVsdGljYWxsKCZtY2wsIGNv
dW50KTsKIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKIAlQTUFQX1VOTE9DSyhwbWFwKTsK
IH0KIAorI2lmZGVmIG5vdHlldAordm9pZAorcG1hcF9lbnRlcl9xdWlja19yYW5nZShwbWFw
X3QgcG1hcCwgdm1fb2Zmc2V0X3QgKmFkZHJzLCB2bV9wYWdlX3QgKnBhZ2VzLCB2bV9wcm90
X3QgKnByb3RzLCBpbnQgY291bnQpCit7CisJaW50IGksIGVycm9yLCBpbmRleCA9IDA7CisJ
bXVsdGljYWxsX2VudHJ5X3QgbWNsWzE2XTsKKwltdWx0aWNhbGxfZW50cnlfdCAqbWNscCA9
IG1jbDsKKwkJCisJUE1BUF9MT0NLKHBtYXApOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrLCBhZGRycysrLCBwYWdlcysrLCBwcm90cysrKSB7CisJCWlmICghcG1hcF9pc19wcmVm
YXVsdGFibGVfbG9ja2VkKHBtYXAsICphZGRycykpCisJCQljb250aW51ZTsKKworCQkodm9p
ZCkgcG1hcF9lbnRlcl9xdWlja19sb2NrZWQoJm1jbHAsICZpbmRleCwgcG1hcCwgKmFkZHJz
LCAqcGFnZXMsICpwcm90cywgTlVMTCk7CisJCWlmIChpbmRleCA9PSAxNikgeworCQkJZXJy
b3IgPSBIWVBFUlZJU09SX211bHRpY2FsbChtY2wsIGluZGV4KTsKKwkJCW1jbHAgPSBtY2w7
CisJCQlpbmRleCA9IDA7CisJCQlLQVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2Fs
bCAlZCIsIGVycm9yKSk7CisJCX0KKwl9CisJaWYgKGluZGV4KSB7CisJCWVycm9yID0gSFlQ
RVJWSVNPUl9tdWx0aWNhbGwobWNsLCBpbmRleCk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCwg
KCJiYWQgbXVsdGljYWxsICVkIiwgZXJyb3IpKTsKKwl9CisJCisJUE1BUF9VTkxPQ0socG1h
cCk7Cit9CisjZW5kaWYKKwogc3RhdGljIHZtX3BhZ2VfdAotcG1hcF9lbnRlcl9xdWlja19s
b2NrZWQocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9wYWdlX3QgbSwKK3BtYXBf
ZW50ZXJfcXVpY2tfbG9ja2VkKG11bHRpY2FsbF9lbnRyeV90ICoqbWNscHAsIGludCAqY291
bnQsIHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sCiAgICAgdm1f
cHJvdF90IHByb3QsIHZtX3BhZ2VfdCBtcHRlKQogewogCXB0X2VudHJ5X3QgKnB0ZTsKIAl2
bV9wYWRkcl90IHBhOwogCXZtX3BhZ2VfdCBmcmVlOworCW11bHRpY2FsbF9lbnRyeV90ICpt
Y2wgPSAqbWNscHA7CiAKIAlLQVNTRVJUKHZhIDwga21pLmNsZWFuX3N2YSB8fCB2YSA+PSBr
bWkuY2xlYW5fZXZhIHx8CiAJICAgIChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSAhPSAw
LApAQCAtMzYzOSw3ICsyODg2LDcgQEAKIAkgKi8KIAlpZiAodmEgPCBWTV9NQVhVU0VSX0FE
RFJFU1MpIHsKIAkJdV9pbnQgcHRlcGluZGV4OwotCQlwZF9lbnRyeV90IHB0ZXBhOworCQlw
ZF9lbnRyeV90IHB0ZW1hOwogCiAJCS8qCiAJCSAqIENhbGN1bGF0ZSBwYWdldGFibGUgcGFn
ZSBpbmRleApAQCAtMzY1MSwxNiArMjg5OCwxNiBAQAogCQkJLyoKIAkJCSAqIEdldCB0aGUg
cGFnZSBkaXJlY3RvcnkgZW50cnkKIAkJCSAqLwotCQkJcHRlcGEgPSBwbWFwLT5wbV9wZGly
W3B0ZXBpbmRleF07CisJCQlwdGVtYSA9IHBtYXAtPnBtX3BkaXJbcHRlcGluZGV4XTsKIAog
CQkJLyoKIAkJCSAqIElmIHRoZSBwYWdlIHRhYmxlIHBhZ2UgaXMgbWFwcGVkLCB3ZSBqdXN0
IGluY3JlbWVudAogCQkJICogdGhlIGhvbGQgY291bnQsIGFuZCBhY3RpdmF0ZSBpdC4KIAkJ
CSAqLwotCQkJaWYgKHB0ZXBhKSB7Ci0JCQkJaWYgKHB0ZXBhICYgUEdfUFMpCi0JCQkJCXJl
dHVybiAoTlVMTCk7Ci0JCQkJbXB0ZSA9IFBIWVNfVE9fVk1fUEFHRShwdGVwYSAmIFBHX0ZS
QU1FKTsKKwkJCWlmIChwdGVtYSAmIFBHX1YpIHsKKwkJCQlpZiAocHRlbWEgJiBQR19QUykK
KwkJCQkJcGFuaWMoInBtYXBfZW50ZXJfcXVpY2s6IHVuZXhwZWN0ZWQgbWFwcGluZyBpbnRv
IDRNQiBwYWdlIik7CisJCQkJbXB0ZSA9IFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9tdG9wKHB0
ZW1hKSAmIFBHX0ZSQU1FKTsKIAkJCQltcHRlLT53aXJlX2NvdW50Kys7CiAJCQl9IGVsc2Ug
ewogCQkJCW1wdGUgPSBfcG1hcF9hbGxvY3B0ZShwbWFwLCBwdGVwaW5kZXgsCkBAIC0zNjc5
LDggKzI5MjYsOSBAQAogCSAqIHF1aWNrIGVudHJ5IGludG8gYW55IHBtYXAsIG9uZSB3b3Vs
ZCBsaWtlbHkgdXNlIHBtYXBfcHRlX3F1aWNrLgogCSAqIEJ1dCB0aGF0IGlzbid0IGFzIHF1
aWNrIGFzIHZ0b3B0ZS4KIAkgKi8KKwlLQVNTRVJUKHBtYXBfaXNfY3VycmVudChwbWFwKSwg
KCJlbnRlcmluZyBwYWdlcyBpbiBub24tY3VycmVudCBwbWFwIikpOwogCXB0ZSA9IHZ0b3B0
ZSh2YSk7Ci0JaWYgKCpwdGUpIHsKKwlpZiAoKnB0ZSAmIFBHX1YpIHsKIAkJaWYgKG1wdGUg
IT0gTlVMTCkgewogCQkJbXB0ZS0+d2lyZV9jb3VudC0tOwogCQkJbXB0ZSA9IE5VTEw7CkBA
IC0zNzEwLDEyICsyOTU4LDEzIEBACiAJICovCiAJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRf
Y291bnQrKzsKIAotCXBhID0gVk1fUEFHRV9UT19QSFlTKG0pIHwgcG1hcF9jYWNoZV9iaXRz
KG0tPm1kLnBhdF9tb2RlLCAwKTsKKwlwYSA9IFZNX1BBR0VfVE9fUEhZUyhtKTsKICNpZmRl
ZiBQQUUKIAlpZiAoKHByb3QgJiBWTV9QUk9UX0VYRUNVVEUpID09IDApCiAJCXBhIHw9IHBn
X254OwogI2VuZGlmCiAKKyNpZiAwCiAJLyoKIAkgKiBOb3cgdmFsaWRhdGUgbWFwcGluZyB3
aXRoIFJPIHByb3RlY3Rpb24KIAkgKi8KQEAgLTM3MjMsNiArMjk3MiwyMyBAQAogCQlwdGVf
c3RvcmUocHRlLCBwYSB8IFBHX1YgfCBQR19VKTsKIAllbHNlCiAJCXB0ZV9zdG9yZShwdGUs
IHBhIHwgUEdfViB8IFBHX1UgfCBQR19NQU5BR0VEKTsKKyNlbHNlCisJLyoKKwkgKiBOb3cg
dmFsaWRhdGUgbWFwcGluZyB3aXRoIFJPIHByb3RlY3Rpb24KKwkgKi8KKwlpZiAoKG0tPm9m
bGFncyAmIFZQT19VTk1BTkFHRUQpICE9IDApCisJCXBhID0gCXhwbWFwX3B0b20ocGEgfCBQ
R19WIHwgUEdfVSk7CisJZWxzZQorCQlwYSA9IHhwbWFwX3B0b20ocGEgfCBQR19WIHwgUEdf
VSB8IFBHX01BTkFHRUQpOworCisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFf
bWFwcGluZzsKKwltY2wtPmFyZ3NbMF0gPSB2YTsKKwltY2wtPmFyZ3NbMV0gPSAodWludDMy
X3QpKHBhICYgMHhmZmZmZmZmZik7CisJbWNsLT5hcmdzWzJdID0gKHVpbnQzMl90KShwYSA+
PiAzMik7CisJbWNsLT5hcmdzWzNdID0gMDsKKwkqbWNscHAgPSBtY2wgKyAxOworCSpjb3Vu
dCA9ICpjb3VudCArIDE7CisjZW5kaWYJCiAJcmV0dXJuIChtcHRlKTsKIH0KIApAQCAtMzcz
NCw5ICszMDAwLDEwIEBACiBwbWFwX2tlbnRlcl90ZW1wb3Jhcnkodm1fcGFkZHJfdCBwYSwg
aW50IGkpCiB7CiAJdm1fb2Zmc2V0X3QgdmE7CisJdm1fcGFkZHJfdCBtYSA9IHhwbWFwX3B0
b20ocGEpOwogCiAJdmEgPSAodm1fb2Zmc2V0X3QpY3Jhc2hkdW1wbWFwICsgKGkgKiBQQUdF
X1NJWkUpOwotCXBtYXBfa2VudGVyKHZhLCBwYSk7CisJUFRfU0VUX01BKHZhLCAobWEgJiB+
UEFHRV9NQVNLKSB8IFBHX1YgfCBwZ2VmbGFnKTsKIAlpbnZscGcodmEpOwogCXJldHVybiAo
KHZvaWQgKiljcmFzaGR1bXBtYXApOwogfQpAQCAtMzgyNCw0NiArMzA5MSwyNyBAQAogdm9p
ZAogcG1hcF9jaGFuZ2Vfd2lyaW5nKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgYm9v
bGVhbl90IHdpcmVkKQogewotCXBkX2VudHJ5X3QgKnBkZTsKIAlwdF9lbnRyeV90ICpwdGU7
Ci0JYm9vbGVhbl90IGFyZV9xdWV1ZXNfbG9ja2VkOwogCi0JYXJlX3F1ZXVlc19sb2NrZWQg
PSBGQUxTRTsKLXJldHJ5OgorCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlQTUFQX0xPQ0so
cG1hcCk7Ci0JcGRlID0gcG1hcF9wZGUocG1hcCwgdmEpOwotCWlmICgoKnBkZSAmIFBHX1BT
KSAhPSAwKSB7Ci0JCWlmICghd2lyZWQgIT0gKCgqcGRlICYgUEdfVykgPT0gMCkpIHsKLQkJ
CWlmICghYXJlX3F1ZXVlc19sb2NrZWQpIHsKLQkJCQlhcmVfcXVldWVzX2xvY2tlZCA9IFRS
VUU7Ci0JCQkJaWYgKCFtdHhfdHJ5bG9jaygmdm1fcGFnZV9xdWV1ZV9tdHgpKSB7Ci0JCQkJ
CVBNQVBfVU5MT0NLKHBtYXApOwotCQkJCQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7Ci0JCQkJ
CWdvdG8gcmV0cnk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCFwbWFwX2RlbW90ZV9wZGUocG1h
cCwgcGRlLCB2YSkpCi0JCQkJcGFuaWMoInBtYXBfY2hhbmdlX3dpcmluZzogZGVtb3Rpb24g
ZmFpbGVkIik7Ci0JCX0gZWxzZQotCQkJZ290byBvdXQ7Ci0JfQogCXB0ZSA9IHBtYXBfcHRl
KHBtYXAsIHZhKTsKIAotCWlmICh3aXJlZCAmJiAhcG1hcF9wdGVfdyhwdGUpKQorCWlmICh3
aXJlZCAmJiAhcG1hcF9wdGVfdyhwdGUpKSB7CisJCVBUX1NFVF9WQV9NQSgocHRlKSwgKihw
dGUpIHwgUEdfVywgVFJVRSk7CiAJCXBtYXAtPnBtX3N0YXRzLndpcmVkX2NvdW50Kys7Ci0J
ZWxzZSBpZiAoIXdpcmVkICYmIHBtYXBfcHRlX3cocHRlKSkKKwl9IGVsc2UgaWYgKCF3aXJl
ZCAmJiBwbWFwX3B0ZV93KHB0ZSkpIHsKKwkJUFRfU0VUX1ZBX01BKChwdGUpLCAqKHB0ZSkg
JiB+UEdfVywgVFJVRSk7CiAJCXBtYXAtPnBtX3N0YXRzLndpcmVkX2NvdW50LS07Ci0KKwl9
CisJCiAJLyoKIAkgKiBXaXJpbmcgaXMgbm90IGEgaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWMg
c28gdGhlcmUgaXMgbm8gbmVlZCB0bwogCSAqIGludmFsaWRhdGUgVExCLgogCSAqLwotCXBt
YXBfcHRlX3NldF93KHB0ZSwgd2lyZWQpOwogCXBtYXBfcHRlX3JlbGVhc2UocHRlKTsKLW91
dDoKLQlpZiAoYXJlX3F1ZXVlc19sb2NrZWQpCi0JCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygp
OwogCVBNQVBfVU5MT0NLKHBtYXApOworCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogfQog
CiAKQEAgLTM4ODgsOCArMzEzNiwxOSBAQAogCWlmIChkc3RfYWRkciAhPSBzcmNfYWRkcikK
IAkJcmV0dXJuOwogCi0JaWYgKCFwbWFwX2lzX2N1cnJlbnQoc3JjX3BtYXApKQorCWlmICgh
cG1hcF9pc19jdXJyZW50KHNyY19wbWFwKSkgeworCQlDVFIyKEtUUl9QTUFQLAorCQkgICAg
InBtYXBfY29weSwgc2tpcHBpbmc6IHBkaXJbUFREUFRESV09MHglanggUFREcGRlWzBdPTB4
JWp4IiwKKwkJICAgIChzcmNfcG1hcC0+cG1fcGRpcltQVERQVERJXSAmIFBHX0ZSQU1FKSwg
KFBURHBkZVswXSAmIFBHX0ZSQU1FKSk7CisJCQogCQlyZXR1cm47CisJfQorCUNUUjUoS1RS
X1BNQVAsICJwbWFwX2NvcHk6ICBkc3RfcG1hcD0lcCBzcmNfcG1hcD0lcCBkc3RfYWRkcj0w
eCV4IGxlbj0lZCBzcmNfYWRkcj0weCV4IiwKKwkgICAgZHN0X3BtYXAsIHNyY19wbWFwLCBk
c3RfYWRkciwgbGVuLCBzcmNfYWRkcik7CisJCisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcK
KwltdHhfbG9jaygmY3JlYXRlZGVsZXRlX2xvY2spOworI2VuZGlmCiAKIAl2bV9wYWdlX2xv
Y2tfcXVldWVzKCk7CiAJaWYgKGRzdF9wbWFwIDwgc3JjX3BtYXApIHsKQEAgLTM5MTAsMjEg
KzMxNjksMTUgQEAKIAkJICAgICgicG1hcF9jb3B5OiBpbnZhbGlkIHRvIHBtYXBfY29weSBw
YWdlIHRhYmxlcyIpKTsKIAogCQlwZG54dCA9IChhZGRyICsgTkJQRFIpICYgflBEUk1BU0s7
Ci0JCWlmIChwZG54dCA8IGFkZHIpCi0JCQlwZG54dCA9IGVuZF9hZGRyOwogCQlwdGVwaW5k
ZXggPSBhZGRyID4+IFBEUlNISUZUOwogCi0JCXNyY3B0ZXBhZGRyID0gc3JjX3BtYXAtPnBt
X3BkaXJbcHRlcGluZGV4XTsKKwkJc3JjcHRlcGFkZHIgPSBQVF9HRVQoJnNyY19wbWFwLT5w
bV9wZGlyW3B0ZXBpbmRleF0pOwogCQlpZiAoc3JjcHRlcGFkZHIgPT0gMCkKIAkJCWNvbnRp
bnVlOwogCQkJCiAJCWlmIChzcmNwdGVwYWRkciAmIFBHX1BTKSB7Ci0JCQlpZiAoZHN0X3Bt
YXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9PSAwICYmCi0JCQkgICAgKChzcmNwdGVwYWRkciAm
IFBHX01BTkFHRUQpID09IDAgfHwKLQkJCSAgICBwbWFwX3B2X2luc2VydF9wZGUoZHN0X3Bt
YXAsIGFkZHIsIHNyY3B0ZXBhZGRyICYKLQkJCSAgICBQR19QU19GUkFNRSkpKSB7Ci0JCQkJ
ZHN0X3BtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9IHNyY3B0ZXBhZGRyICYKLQkJCQkgICAg
flBHX1c7CisJCQlpZiAoZHN0X3BtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9PSAwKSB7CisJ
CQkJUERfU0VUX1ZBKGRzdF9wbWFwLCBwdGVwaW5kZXgsIHNyY3B0ZXBhZGRyICYgflBHX1cs
IFRSVUUpOwogCQkJCWRzdF9wbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCArPQogCQkJ
CSAgICBOQlBEUiAvIFBBR0VfU0laRTsKIAkJCX0KQEAgLTM5NTMsMTQgKzMyMDYsMTcgQEAK
IAkJCQlkc3RfcHRlID0gcG1hcF9wdGVfcXVpY2soZHN0X3BtYXAsIGFkZHIpOwogCQkJCWlm
ICgqZHN0X3B0ZSA9PSAwICYmCiAJCQkJICAgIHBtYXBfdHJ5X2luc2VydF9wdl9lbnRyeShk
c3RfcG1hcCwgYWRkciwKLQkJCQkgICAgUEhZU19UT19WTV9QQUdFKHB0ZXRlbXAgJiBQR19G
UkFNRSkpKSB7CisJCQkJICAgIFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9tdG9wKHB0ZXRlbXAp
ICYgUEdfRlJBTUUpKSkgewogCQkJCQkvKgogCQkJCQkgKiBDbGVhciB0aGUgd2lyZWQsIG1v
ZGlmaWVkLCBhbmQKIAkJCQkJICogYWNjZXNzZWQgKHJlZmVyZW5jZWQpIGJpdHMKIAkJCQkJ
ICogZHVyaW5nIHRoZSBjb3B5LgogCQkJCQkgKi8KLQkJCQkJKmRzdF9wdGUgPSBwdGV0ZW1w
ICYgfihQR19XIHwgUEdfTSB8Ci0JCQkJCSAgICBQR19BKTsKKwkJCQkJS0FTU0VSVChwdGV0
ZW1wICE9IDAsICgic3JjX3B0ZSBub3Qgc2V0IikpOworCQkJCQlQVF9TRVRfVkFfTUEoZHN0
X3B0ZSwgcHRldGVtcCAmIH4oUEdfVyB8IFBHX00gfCBQR19BKSwgVFJVRSAvKiBYWFggZGVi
dWcgKi8pOworCQkJCQlLQVNTRVJUKCpkc3RfcHRlID09IChwdGV0ZW1wICYgfihQR19XIHwg
UEdfTSB8IFBHX0EpKSwKKwkJCQkJICAgICgibm8gcG1hcCBjb3B5IGV4cGVjdGVkOiAweCVq
eCBzYXc6IDB4JWp4IiwKKwkJCQkJCXB0ZXRlbXAgJiAgfihQR19XIHwgUEdfTSB8IFBHX0Ep
LCAqZHN0X3B0ZSkpOwogCQkJCQlkc3RfcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQr
KzsKIAkgCQkJfSBlbHNlIHsKIAkJCQkJZnJlZSA9IE5VTEw7CkBAIC0zOTgwLDEwICszMjM2
LDE1IEBACiAJCX0KIAl9CiBvdXQ6CisJUFRfVVBEQVRFU19GTFVTSCgpOwogCXNjaGVkX3Vu
cGluKCk7CiAJdm1fcGFnZV91bmxvY2tfcXVldWVzKCk7CiAJUE1BUF9VTkxPQ0soc3JjX3Bt
YXApOwogCVBNQVBfVU5MT0NLKGRzdF9wbWFwKTsKKworI2lmZGVmIEhBTUZJU1RFRF9MT0NL
SU5HCisJbXR4X3VubG9jaygmY3JlYXRlZGVsZXRlX2xvY2spOworI2VuZGlmCiB9CQogCiBz
dGF0aWMgX19pbmxpbmUgdm9pZApAQCAtNDAxNiwxMSArMzI3Nyw5IEBACiAJaWYgKCpzeXNt
YXBzLT5DTUFQMikKIAkJcGFuaWMoInBtYXBfemVyb19wYWdlOiBDTUFQMiBidXN5Iik7CiAJ
c2NoZWRfcGluKCk7Ci0JKnN5c21hcHMtPkNNQVAyID0gUEdfViB8IFBHX1JXIHwgVk1fUEFH
RV9UT19QSFlTKG0pIHwgUEdfQSB8IFBHX00gfAotCSAgICBwbWFwX2NhY2hlX2JpdHMobS0+
bWQucGF0X21vZGUsIDApOwotCWludmxjYWRkcihzeXNtYXBzLT5DQUREUjIpOworCVBUX1NF
VF9NQShzeXNtYXBzLT5DQUREUjIsIFBHX1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fTUFDSCht
KSB8IFBHX0EgfCBQR19NKTsKIAlwYWdlemVybyhzeXNtYXBzLT5DQUREUjIpOwotCSpzeXNt
YXBzLT5DTUFQMiA9IDA7CisJUFRfU0VUX01BKHN5c21hcHMtPkNBRERSMiwgMCk7CiAJc2No
ZWRfdW5waW4oKTsKIAltdHhfdW5sb2NrKCZzeXNtYXBzLT5sb2NrKTsKIH0KQEAgLTQwNDEs
MTQgKzMzMDAsMTMgQEAKIAlpZiAoKnN5c21hcHMtPkNNQVAyKQogCQlwYW5pYygicG1hcF96
ZXJvX3BhZ2VfYXJlYTogQ01BUDIgYnVzeSIpOwogCXNjaGVkX3BpbigpOwotCSpzeXNtYXBz
LT5DTUFQMiA9IFBHX1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fUEhZUyhtKSB8IFBHX0EgfCBQ
R19NIHwKLQkgICAgcG1hcF9jYWNoZV9iaXRzKG0tPm1kLnBhdF9tb2RlLCAwKTsKLQlpbnZs
Y2FkZHIoc3lzbWFwcy0+Q0FERFIyKTsKKwlQVF9TRVRfTUEoc3lzbWFwcy0+Q0FERFIyLCBQ
R19WIHwgUEdfUlcgfCBWTV9QQUdFX1RPX01BQ0gobSkgfCBQR19BIHwgUEdfTSk7CisKIAlp
ZiAob2ZmID09IDAgJiYgc2l6ZSA9PSBQQUdFX1NJWkUpIAogCQlwYWdlemVybyhzeXNtYXBz
LT5DQUREUjIpOwogCWVsc2UKIAkJYnplcm8oKGNoYXIgKilzeXNtYXBzLT5DQUREUjIgKyBv
ZmYsIHNpemUpOwotCSpzeXNtYXBzLT5DTUFQMiA9IDA7CisJUFRfU0VUX01BKHN5c21hcHMt
PkNBRERSMiwgMCk7CiAJc2NoZWRfdW5waW4oKTsKIAltdHhfdW5sb2NrKCZzeXNtYXBzLT5s
b2NrKTsKIH0KQEAgLTQwNjYsMTEgKzMzMjQsOSBAQAogCWlmICgqQ01BUDMpCiAJCXBhbmlj
KCJwbWFwX3plcm9fcGFnZV9pZGxlOiBDTUFQMyBidXN5Iik7CiAJc2NoZWRfcGluKCk7Ci0J
KkNNQVAzID0gUEdfViB8IFBHX1JXIHwgVk1fUEFHRV9UT19QSFlTKG0pIHwgUEdfQSB8IFBH
X00gfAotCSAgICBwbWFwX2NhY2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDApOwotCWludmxj
YWRkcihDQUREUjMpOworCVBUX1NFVF9NQShDQUREUjMsIFBHX1YgfCBQR19SVyB8IFZNX1BB
R0VfVE9fTUFDSChtKSB8IFBHX0EgfCBQR19NKTsKIAlwYWdlemVybyhDQUREUjMpOwotCSpD
TUFQMyA9IDA7CisJUFRfU0VUX01BKENBRERSMywgMCk7CiAJc2NoZWRfdW5waW4oKTsKIH0K
IApAQCAtNDA5MiwxNSArMzM0OCwxMSBAQAogCWlmICgqc3lzbWFwcy0+Q01BUDIpCiAJCXBh
bmljKCJwbWFwX2NvcHlfcGFnZTogQ01BUDIgYnVzeSIpOwogCXNjaGVkX3BpbigpOwotCWlu
dmxwZygodV9pbnQpc3lzbWFwcy0+Q0FERFIxKTsKLQlpbnZscGcoKHVfaW50KXN5c21hcHMt
PkNBRERSMik7Ci0JKnN5c21hcHMtPkNNQVAxID0gUEdfViB8IFZNX1BBR0VfVE9fUEhZUyhz
cmMpIHwgUEdfQSB8Ci0JICAgIHBtYXBfY2FjaGVfYml0cyhzcmMtPm1kLnBhdF9tb2RlLCAw
KTsKLQkqc3lzbWFwcy0+Q01BUDIgPSBQR19WIHwgUEdfUlcgfCBWTV9QQUdFX1RPX1BIWVMo
ZHN0KSB8IFBHX0EgfCBQR19NIHwKLQkgICAgcG1hcF9jYWNoZV9iaXRzKGRzdC0+bWQucGF0
X21vZGUsIDApOworCVBUX1NFVF9NQShzeXNtYXBzLT5DQUREUjEsIFBHX1YgfCBWTV9QQUdF
X1RPX01BQ0goc3JjKSB8IFBHX0EpOworCVBUX1NFVF9NQShzeXNtYXBzLT5DQUREUjIsIFBH
X1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fTUFDSChkc3QpIHwgUEdfQSB8IFBHX00pOwogCWJj
b3B5KHN5c21hcHMtPkNBRERSMSwgc3lzbWFwcy0+Q0FERFIyLCBQQUdFX1NJWkUpOwotCSpz
eXNtYXBzLT5DTUFQMSA9IDA7Ci0JKnN5c21hcHMtPkNNQVAyID0gMDsKKwlQVF9TRVRfTUEo
c3lzbWFwcy0+Q0FERFIxLCAwKTsKKwlQVF9TRVRfTUEoc3lzbWFwcy0+Q0FERFIyLCAwKTsK
IAlzY2hlZF91bnBpbigpOwogCW10eF91bmxvY2soJnN5c21hcHMtPmxvY2spOwogfQpAQCAt
NDExNSw3ICszMzY3LDYgQEAKIGJvb2xlYW5fdAogcG1hcF9wYWdlX2V4aXN0c19xdWljayhw
bWFwX3QgcG1hcCwgdm1fcGFnZV90IG0pCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKIAlw
dl9lbnRyeV90IHB2OwogCWludCBsb29wcyA9IDA7CiAJYm9vbGVhbl90IHJ2OwpAQCAtNDEz
MywxOCArMzM4NCw2IEBACiAJCWlmIChsb29wcyA+PSAxNikKIAkJCWJyZWFrOwogCX0KLQlp
ZiAoIXJ2ICYmIGxvb3BzIDwgMTYpIHsKLQkJcHZoID0gcGFfdG9fcHZoKFZNX1BBR0VfVE9f
UEhZUyhtKSk7Ci0JCVRBSUxRX0ZPUkVBQ0gocHYsICZwdmgtPnB2X2xpc3QsIHB2X2xpc3Qp
IHsKLQkJCWlmIChQVl9QTUFQKHB2KSA9PSBwbWFwKSB7Ci0JCQkJcnYgPSBUUlVFOwotCQkJ
CWJyZWFrOwotCQkJfQotCQkJbG9vcHMrKzsKLQkJCWlmIChsb29wcyA+PSAxNikKLQkJCQli
cmVhazsKLQkJfQotCX0KIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKIAlyZXR1cm4gKHJ2
KTsKIH0KQEAgLTQxNTgsMzMgKzMzOTcsMTcgQEAKIGludAogcG1hcF9wYWdlX3dpcmVkX21h
cHBpbmdzKHZtX3BhZ2VfdCBtKQogeworCXB2X2VudHJ5X3QgcHY7CisJcHRfZW50cnlfdCAq
cHRlOworCXBtYXBfdCBwbWFwOwogCWludCBjb3VudDsKIAogCWNvdW50ID0gMDsKIAlpZiAo
KG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpICE9IDApCiAJCXJldHVybiAoY291bnQpOwog
CXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKLQljb3VudCA9IHBtYXBfcHZoX3dpcmVkX21hcHBp
bmdzKCZtLT5tZCwgY291bnQpOwotCWNvdW50ID0gcG1hcF9wdmhfd2lyZWRfbWFwcGluZ3Mo
cGFfdG9fcHZoKFZNX1BBR0VfVE9fUEhZUyhtKSksIGNvdW50KTsKLQl2bV9wYWdlX3VubG9j
a19xdWV1ZXMoKTsKLQlyZXR1cm4gKGNvdW50KTsKLX0KLQotLyoKLSAqCXBtYXBfcHZoX3dp
cmVkX21hcHBpbmdzOgotICoKLSAqCVJldHVybiB0aGUgdXBkYXRlZCBudW1iZXIgImNvdW50
IiBvZiBtYW5hZ2VkIG1hcHBpbmdzIHRoYXQgYXJlIHdpcmVkLgotICovCi1zdGF0aWMgaW50
Ci1wbWFwX3B2aF93aXJlZF9tYXBwaW5ncyhzdHJ1Y3QgbWRfcGFnZSAqcHZoLCBpbnQgY291
bnQpCi17Ci0JcG1hcF90IHBtYXA7Ci0JcHRfZW50cnlfdCAqcHRlOwotCXB2X2VudHJ5X3Qg
cHY7Ci0KLQltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX210eCwgTUFfT1dORUQpOwogCXNj
aGVkX3BpbigpOwotCVRBSUxRX0ZPUkVBQ0gocHYsICZwdmgtPnB2X2xpc3QsIHB2X2xpc3Qp
IHsKKwlUQUlMUV9GT1JFQUNIKHB2LCAmbS0+bWQucHZfbGlzdCwgcHZfbGlzdCkgewogCQlw
bWFwID0gUFZfUE1BUChwdik7CiAJCVBNQVBfTE9DSyhwbWFwKTsKIAkJcHRlID0gcG1hcF9w
dGVfcXVpY2socG1hcCwgcHYtPnB2X3ZhKTsKQEAgLTQxOTMsMjUgKzM0MTYsMjAgQEAKIAkJ
UE1BUF9VTkxPQ0socG1hcCk7CiAJfQogCXNjaGVkX3VucGluKCk7CisJdm1fcGFnZV91bmxv
Y2tfcXVldWVzKCk7CiAJcmV0dXJuIChjb3VudCk7CiB9CiAKIC8qCi0gKiBSZXR1cm5zIFRS
VUUgaWYgdGhlIGdpdmVuIHBhZ2UgaXMgbWFwcGVkIGluZGl2aWR1YWxseSBvciBhcyBwYXJ0
IG9mCi0gKiBhIDRtcGFnZS4gIE90aGVyd2lzZSwgcmV0dXJucyBGQUxTRS4KKyAqIFJldHVy
bnMgVFJVRSBpZiB0aGUgZ2l2ZW4gcGFnZSBpcyBtYXBwZWQuICBPdGhlcndpc2UsIHJldHVy
bnMgRkFMU0UuCiAgKi8KIGJvb2xlYW5fdAogcG1hcF9wYWdlX2lzX21hcHBlZCh2bV9wYWdl
X3QgbSkKIHsKLQlib29sZWFuX3QgcnY7CiAKIAlpZiAoKG0tPm9mbGFncyAmIFZQT19VTk1B
TkFHRUQpICE9IDApCiAJCXJldHVybiAoRkFMU0UpOwotCXZtX3BhZ2VfbG9ja19xdWV1ZXMo
KTsKLQlydiA9ICFUQUlMUV9FTVBUWSgmbS0+bWQucHZfbGlzdCkgfHwKLQkgICAgIVRBSUxR
X0VNUFRZKCZwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKS0+cHZfbGlzdCk7Ci0Jdm1f
cGFnZV91bmxvY2tfcXVldWVzKCk7Ci0JcmV0dXJuIChydik7CisJcmV0dXJuICghVEFJTFFf
RU1QVFkoJm0tPm1kLnB2X2xpc3QpKTsKIH0KIAogLyoKQEAgLTQyMjYsMjEgKzM0NDQsMjIg
QEAKIHBtYXBfcmVtb3ZlX3BhZ2VzKHBtYXBfdCBwbWFwKQogewogCXB0X2VudHJ5X3QgKnB0
ZSwgdHB0ZTsKLQl2bV9wYWdlX3QgZnJlZSA9IE5VTEw7Ci0Jdm1fcGFnZV90IG0sIG1wdGUs
IG10OworCXZtX3BhZ2VfdCBtLCBmcmVlID0gTlVMTDsKIAlwdl9lbnRyeV90IHB2OwotCXN0
cnVjdCBtZF9wYWdlICpwdmg7CiAJc3RydWN0IHB2X2NodW5rICpwYywgKm5wYzsKIAlpbnQg
ZmllbGQsIGlkeDsKIAlpbnQzMl90IGJpdDsKIAl1aW50MzJfdCBpbnVzZSwgYml0bWFzazsK
IAlpbnQgYWxsZnJlZTsKIAotCWlmIChwbWFwICE9IFBDUFVfR0VUKGN1cnBtYXApKSB7CisJ
Q1RSMShLVFJfUE1BUCwgInBtYXBfcmVtb3ZlX3BhZ2VzOiBwbWFwPSVwIiwgcG1hcCk7CisJ
CisJaWYgKHBtYXAgIT0gdm1zcGFjZV9wbWFwKGN1cnRocmVhZC0+dGRfcHJvYy0+cF92bXNw
YWNlKSkgewogCQlwcmludGYoIndhcm5pbmc6IHBtYXBfcmVtb3ZlX3BhZ2VzIGNhbGxlZCB3
aXRoIG5vbi1jdXJyZW50IHBtYXBcbiIpOwogCQlyZXR1cm47CiAJfQogCXZtX3BhZ2VfbG9j
a19xdWV1ZXMoKTsKKwlLQVNTRVJUKHBtYXBfaXNfY3VycmVudChwbWFwKSwgKCJyZW1vdmlu
ZyBwYWdlcyBmcm9tIG5vbi1jdXJyZW50IHBtYXAiKSk7CiAJUE1BUF9MT0NLKHBtYXApOwog
CXNjaGVkX3BpbigpOwogCVRBSUxRX0ZPUkVBQ0hfU0FGRShwYywgJnBtYXAtPnBtX3B2Y2h1
bmssIHBjX2xpc3QsIG5wYykgewpAQCAtNDI1NCwxMiArMzQ3Myw4IEBACiAJCQkJcHYgPSAm
cGMtPnBjX3B2ZW50cnlbaWR4XTsKIAkJCQlpbnVzZSAmPSB+Yml0bWFzazsKIAotCQkJCXB0
ZSA9IHBtYXBfcGRlKHBtYXAsIHB2LT5wdl92YSk7Ci0JCQkJdHB0ZSA9ICpwdGU7Ci0JCQkJ
aWYgKCh0cHRlICYgUEdfUFMpID09IDApIHsKLQkJCQkJcHRlID0gdnRvcHRlKHB2LT5wdl92
YSk7Ci0JCQkJCXRwdGUgPSAqcHRlICYgflBHX1BURV9QQVQ7Ci0JCQkJfQorCQkJCXB0ZSA9
IHZ0b3B0ZShwdi0+cHZfdmEpOworCQkJCXRwdGUgPSAqcHRlID8geHBtYXBfbXRvcCgqcHRl
KSA6IDA7CiAKIAkJCQlpZiAodHB0ZSA9PSAwKSB7CiAJCQkJCXByaW50ZigKQEAgLTQyODYs
NTUgKzM1MDEsMzAgQEAKIAkJCQkJKCJwbWFwX3JlbW92ZV9wYWdlczogYmFkIHRwdGUgJSNq
eCIsCiAJCQkJCSh1aW50bWF4X3QpdHB0ZSkpOwogCi0JCQkJcHRlX2NsZWFyKHB0ZSk7CiAK
KwkJCQlQVF9DTEVBUl9WQShwdGUsIEZBTFNFKTsKKwkJCQkKIAkJCQkvKgogCQkJCSAqIFVw
ZGF0ZSB0aGUgdm1fcGFnZV90IGNsZWFuL3JlZmVyZW5jZSBiaXRzLgogCQkJCSAqLwotCQkJ
CWlmICgodHB0ZSAmIChQR19NIHwgUEdfUlcpKSA9PSAoUEdfTSB8IFBHX1JXKSkgewotCQkJ
CQlpZiAoKHRwdGUgJiBQR19QUykgIT0gMCkgewotCQkJCQkJZm9yIChtdCA9IG07IG10IDwg
Jm1bTkJQRFIgLyBQQUdFX1NJWkVdOyBtdCsrKQotCQkJCQkJCXZtX3BhZ2VfZGlydHkobXQp
OwotCQkJCQl9IGVsc2UKLQkJCQkJCXZtX3BhZ2VfZGlydHkobSk7Ci0JCQkJfQorCQkJCWlm
ICh0cHRlICYgUEdfTSkKKwkJCQkJdm1fcGFnZV9kaXJ0eShtKTsKKworCQkJCVRBSUxRX1JF
TU9WRSgmbS0+bWQucHZfbGlzdCwgcHYsIHB2X2xpc3QpOworCQkJCWlmIChUQUlMUV9FTVBU
WSgmbS0+bWQucHZfbGlzdCkpCisJCQkJCXZtX3BhZ2VfYWZsYWdfY2xlYXIobSwgUEdBX1dS
SVRFQUJMRSk7CisKKwkJCQlwbWFwX3VudXNlX3B0KHBtYXAsIHB2LT5wdl92YSwgJmZyZWUp
OwogCiAJCQkJLyogTWFyayBmcmVlICovCiAJCQkJUFZfU1RBVChwdl9lbnRyeV9mcmVlcysr
KTsKIAkJCQlQVl9TVEFUKHB2X2VudHJ5X3NwYXJlKyspOwogCQkJCXB2X2VudHJ5X2NvdW50
LS07CiAJCQkJcGMtPnBjX21hcFtmaWVsZF0gfD0gYml0bWFzazsKLQkJCQlpZiAoKHRwdGUg
JiBQR19QUykgIT0gMCkgewotCQkJCQlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCAt
PSBOQlBEUiAvIFBBR0VfU0laRTsKLQkJCQkJcHZoID0gcGFfdG9fcHZoKHRwdGUgJiBQR19Q
U19GUkFNRSk7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmcHZoLT5wdl9saXN0LCBwdiwgcHZfbGlz
dCk7Ci0JCQkJCWlmIChUQUlMUV9FTVBUWSgmcHZoLT5wdl9saXN0KSkgewotCQkJCQkJZm9y
IChtdCA9IG07IG10IDwgJm1bTkJQRFIgLyBQQUdFX1NJWkVdOyBtdCsrKQotCQkJCQkJCWlm
IChUQUlMUV9FTVBUWSgmbXQtPm1kLnB2X2xpc3QpKQotCQkJCQkJCQl2bV9wYWdlX2FmbGFn
X2NsZWFyKG10LCBQR0FfV1JJVEVBQkxFKTsKLQkJCQkJfQotCQkJCQltcHRlID0gcG1hcF9s
b29rdXBfcHRfcGFnZShwbWFwLCBwdi0+cHZfdmEpOwotCQkJCQlpZiAobXB0ZSAhPSBOVUxM
KSB7Ci0JCQkJCQlwbWFwX3JlbW92ZV9wdF9wYWdlKHBtYXAsIG1wdGUpOwotCQkJCQkJcG1h
cC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQtLTsKLQkJCQkJCUtBU1NFUlQobXB0ZS0+d2ly
ZV9jb3VudCA9PSBOUFRFUEcsCi0JCQkJCQkgICAgKCJwbWFwX3JlbW92ZV9wYWdlczogcHRl
IHBhZ2Ugd2lyZSBjb3VudCBlcnJvciIpKTsKLQkJCQkJCW1wdGUtPndpcmVfY291bnQgPSAw
OwotCQkJCQkJcG1hcF9hZGRfZGVsYXllZF9mcmVlX2xpc3QobXB0ZSwgJmZyZWUsIEZBTFNF
KTsKLQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNudC52X3dpcmVfY291bnQsIDEpOwot
CQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291
bnQtLTsKLQkJCQkJVEFJTFFfUkVNT1ZFKCZtLT5tZC5wdl9saXN0LCBwdiwgcHZfbGlzdCk7
Ci0JCQkJCWlmIChUQUlMUV9FTVBUWSgmbS0+bWQucHZfbGlzdCkpIHsKLQkJCQkJCXB2aCA9
IHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpOwotCQkJCQkJaWYgKFRBSUxRX0VNUFRZ
KCZwdmgtPnB2X2xpc3QpKQotCQkJCQkJCXZtX3BhZ2VfYWZsYWdfY2xlYXIobSwgUEdBX1dS
SVRFQUJMRSk7Ci0JCQkJCX0KLQkJCQkJcG1hcF91bnVzZV9wdChwbWFwLCBwdi0+cHZfdmEs
ICZmcmVlKTsKLQkJCQl9CisJCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQtLTsJ
CQkKIAkJCX0KIAkJfQorCQlQVF9VUERBVEVTX0ZMVVNIKCk7CiAJCWlmIChhbGxmcmVlKSB7
CiAJCQlQVl9TVEFUKHB2X2VudHJ5X3NwYXJlIC09IF9OUENQVik7CiAJCQlQVl9TVEFUKHBj
X2NodW5rX2NvdW50LS0pOwpAQCAtNDM0Nyw2ICszNTM3LDEwIEBACiAJCQlwbWFwX3B0ZWxp
c3RfZnJlZSgmcHZfdmFmcmVlLCAodm1fb2Zmc2V0X3QpcGMpOwogCQl9CiAJfQorCVBUX1VQ
REFURVNfRkxVU0goKTsKKwlpZiAoKlBNQVAxKQorCQlQVF9TRVRfTUEoUEFERFIxLCAwKTsK
KwogCXNjaGVkX3VucGluKCk7CiAJcG1hcF9pbnZhbGlkYXRlX2FsbChwbWFwKTsKIAl2bV9w
YWdlX3VubG9ja19xdWV1ZXMoKTsKQEAgLTQzNjMsMTAgKzM1NTcsMTQgQEAKIGJvb2xlYW5f
dAogcG1hcF9pc19tb2RpZmllZCh2bV9wYWdlX3QgbSkKIHsKKwlwdl9lbnRyeV90IHB2Owor
CXB0X2VudHJ5X3QgKnB0ZTsKKwlwbWFwX3QgcG1hcDsKIAlib29sZWFuX3QgcnY7CiAKIAlL
QVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAwLAogCSAgICAoInBtYXBf
aXNfbW9kaWZpZWQ6IHBhZ2UgJXAgaXMgbm90IG1hbmFnZWQiLCBtKSk7CisJcnYgPSBGQUxT
RTsKIAogCS8qCiAJICogSWYgdGhlIHBhZ2UgaXMgbm90IFZQT19CVVNZLCB0aGVuIFBHQV9X
UklURUFCTEUgY2Fubm90IGJlCkBAIC00Mzc2LDQwICszNTc0LDIyIEBACiAJVk1fT0JKRUNU
X0xPQ0tfQVNTRVJUKG0tPm9iamVjdCwgTUFfT1dORUQpOwogCWlmICgobS0+b2ZsYWdzICYg
VlBPX0JVU1kpID09IDAgJiYKIAkgICAgKG0tPmFmbGFncyAmIFBHQV9XUklURUFCTEUpID09
IDApCi0JCXJldHVybiAoRkFMU0UpOworCQlyZXR1cm4gKHJ2KTsKIAl2bV9wYWdlX2xvY2tf
cXVldWVzKCk7Ci0JcnYgPSBwbWFwX2lzX21vZGlmaWVkX3B2aCgmbS0+bWQpIHx8Ci0JICAg
IHBtYXBfaXNfbW9kaWZpZWRfcHZoKHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpKTsK
LQl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKLQlyZXR1cm4gKHJ2KTsKLX0KLQotLyoKLSAq
IFJldHVybnMgVFJVRSBpZiBhbnkgb2YgdGhlIGdpdmVuIG1hcHBpbmdzIHdlcmUgdXNlZCB0
byBtb2RpZnkKLSAqIHBoeXNpY2FsIG1lbW9yeS4gIE90aGVyd2lzZSwgcmV0dXJucyBGQUxT
RS4gIEJvdGggcGFnZSBhbmQgMm1wYWdlCi0gKiBtYXBwaW5ncyBhcmUgc3VwcG9ydGVkLgot
ICovCi1zdGF0aWMgYm9vbGVhbl90Ci1wbWFwX2lzX21vZGlmaWVkX3B2aChzdHJ1Y3QgbWRf
cGFnZSAqcHZoKQotewotCXB2X2VudHJ5X3QgcHY7Ci0JcHRfZW50cnlfdCAqcHRlOwotCXBt
YXBfdCBwbWFwOwotCWJvb2xlYW5fdCBydjsKLQotCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVl
dWVfbXR4LCBNQV9PV05FRCk7Ci0JcnYgPSBGQUxTRTsKIAlzY2hlZF9waW4oKTsKLQlUQUlM
UV9GT1JFQUNIKHB2LCAmcHZoLT5wdl9saXN0LCBwdl9saXN0KSB7CisJVEFJTFFfRk9SRUFD
SChwdiwgJm0tPm1kLnB2X2xpc3QsIHB2X2xpc3QpIHsKIAkJcG1hcCA9IFBWX1BNQVAocHYp
OwogCQlQTUFQX0xPQ0socG1hcCk7CiAJCXB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHB2
LT5wdl92YSk7Ci0JCXJ2ID0gKCpwdGUgJiAoUEdfTSB8IFBHX1JXKSkgPT0gKFBHX00gfCBQ
R19SVyk7CisJCXJ2ID0gKCpwdGUgJiBQR19NKSAhPSAwOwogCQlQTUFQX1VOTE9DSyhwbWFw
KTsKIAkJaWYgKHJ2KQogCQkJYnJlYWs7CiAJfQorCWlmICgqUE1BUDEpCisJCVBUX1NFVF9N
QShQQUREUjEsIDApOwogCXNjaGVkX3VucGluKCk7CisJdm1fcGFnZV91bmxvY2tfcXVldWVz
KCk7CiAJcmV0dXJuIChydik7CiB9CiAKQEAgLTQ0MTksNjAgKzM1OTksNDYgQEAKICAqCVJl
dHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyBpcyBl
bGdpYmxlCiAgKglmb3IgcHJlZmF1bHQuCiAgKi8KLWJvb2xlYW5fdAotcG1hcF9pc19wcmVm
YXVsdGFibGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IGFkZHIpCitzdGF0aWMgYm9vbGVh
bl90CitwbWFwX2lzX3ByZWZhdWx0YWJsZV9sb2NrZWQocG1hcF90IHBtYXAsIHZtX29mZnNl
dF90IGFkZHIpCiB7Ci0JcGRfZW50cnlfdCAqcGRlOwogCXB0X2VudHJ5X3QgKnB0ZTsKLQli
b29sZWFuX3QgcnY7CisJYm9vbGVhbl90IHJ2ID0gRkFMU0U7CiAKLQlydiA9IEZBTFNFOwot
CVBNQVBfTE9DSyhwbWFwKTsKLQlwZGUgPSBwbWFwX3BkZShwbWFwLCBhZGRyKTsKLQlpZiAo
KnBkZSAhPSAwICYmICgqcGRlICYgUEdfUFMpID09IDApIHsKKwlyZXR1cm4gKHJ2KTsKKwkK
KwlpZiAocG1hcF9pc19jdXJyZW50KHBtYXApICYmICpwbWFwX3BkZShwbWFwLCBhZGRyKSkg
ewogCQlwdGUgPSB2dG9wdGUoYWRkcik7Ci0JCXJ2ID0gKnB0ZSA9PSAwOworCQlydiA9ICgq
cHRlID09IDApOwogCX0KLQlQTUFQX1VOTE9DSyhwbWFwKTsKIAlyZXR1cm4gKHJ2KTsKIH0K
IAotLyoKLSAqCXBtYXBfaXNfcmVmZXJlbmNlZDoKLSAqCi0gKglSZXR1cm4gd2hldGhlciBv
ciBub3QgdGhlIHNwZWNpZmllZCBwaHlzaWNhbCBwYWdlIHdhcyByZWZlcmVuY2VkCi0gKglp
biBhbnkgcGh5c2ljYWwgbWFwcy4KLSAqLwogYm9vbGVhbl90Ci1wbWFwX2lzX3JlZmVyZW5j
ZWQodm1fcGFnZV90IG0pCitwbWFwX2lzX3ByZWZhdWx0YWJsZShwbWFwX3QgcG1hcCwgdm1f
b2Zmc2V0X3QgYWRkcikKIHsKIAlib29sZWFuX3QgcnY7Ci0KLQlLQVNTRVJUKChtLT5vZmxh
Z3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAwLAotCSAgICAoInBtYXBfaXNfcmVmZXJlbmNlZDog
cGFnZSAlcCBpcyBub3QgbWFuYWdlZCIsIG0pKTsKLQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7
Ci0JcnYgPSBwbWFwX2lzX3JlZmVyZW5jZWRfcHZoKCZtLT5tZCkgfHwKLQkgICAgcG1hcF9p
c19yZWZlcmVuY2VkX3B2aChwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKSk7Ci0Jdm1f
cGFnZV91bmxvY2tfcXVldWVzKCk7CisJCisJUE1BUF9MT0NLKHBtYXApOworCXJ2ID0gcG1h
cF9pc19wcmVmYXVsdGFibGVfbG9ja2VkKHBtYXAsIGFkZHIpOworCVBNQVBfVU5MT0NLKHBt
YXApOwogCXJldHVybiAocnYpOwogfQogCi0vKgotICogUmV0dXJucyBUUlVFIGlmIGFueSBv
ZiB0aGUgZ2l2ZW4gbWFwcGluZ3Mgd2VyZSByZWZlcmVuY2VkIGFuZCBGQUxTRQotICogb3Ro
ZXJ3aXNlLiAgQm90aCBwYWdlIGFuZCA0bXBhZ2UgbWFwcGluZ3MgYXJlIHN1cHBvcnRlZC4K
LSAqLwotc3RhdGljIGJvb2xlYW5fdAotcG1hcF9pc19yZWZlcmVuY2VkX3B2aChzdHJ1Y3Qg
bWRfcGFnZSAqcHZoKQorYm9vbGVhbl90CitwbWFwX2lzX3JlZmVyZW5jZWQodm1fcGFnZV90
IG0pCiB7CiAJcHZfZW50cnlfdCBwdjsKIAlwdF9lbnRyeV90ICpwdGU7CiAJcG1hcF90IHBt
YXA7CiAJYm9vbGVhbl90IHJ2OwogCi0JbXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgs
IE1BX09XTkVEKTsKKwlLQVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAw
LAorCSAgICAoInBtYXBfaXNfcmVmZXJlbmNlZDogcGFnZSAlcCBpcyBub3QgbWFuYWdlZCIs
IG0pKTsKIAlydiA9IEZBTFNFOworCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlzY2hlZF9w
aW4oKTsKLQlUQUlMUV9GT1JFQUNIKHB2LCAmcHZoLT5wdl9saXN0LCBwdl9saXN0KSB7CisJ
VEFJTFFfRk9SRUFDSChwdiwgJm0tPm1kLnB2X2xpc3QsIHB2X2xpc3QpIHsKIAkJcG1hcCA9
IFBWX1BNQVAocHYpOwogCQlQTUFQX0xPQ0socG1hcCk7CiAJCXB0ZSA9IHBtYXBfcHRlX3F1
aWNrKHBtYXAsIHB2LT5wdl92YSk7CkBAIC00NDgxLDIyICszNjQ3LDUyIEBACiAJCWlmIChy
dikKIAkJCWJyZWFrOwogCX0KKwlpZiAoKlBNQVAxKQorCQlQVF9TRVRfTUEoUEFERFIxLCAw
KTsKIAlzY2hlZF91bnBpbigpOworCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogCXJldHVy
biAocnYpOwogfQogCit2b2lkCitwbWFwX21hcF9yZWFkb25seShwbWFwX3QgcG1hcCwgdm1f
b2Zmc2V0X3QgdmEsIGludCBsZW4pCit7CisJaW50IGksIG5wYWdlcyA9IHJvdW5kX3BhZ2Uo
bGVuKSA+PiBQQUdFX1NISUZUOworCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewor
CQlwdF9lbnRyeV90ICpwdGU7CisJCXB0ZSA9IHBtYXBfcHRlKHBtYXAsICh2bV9vZmZzZXRf
dCkodmEgKyBpKlBBR0VfU0laRSkpOworCQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7CisJCXB0
ZV9zdG9yZShwdGUsIHhwbWFwX210b3AoKnB0ZSAmIH4oUEdfUld8UEdfTSkpKTsKKwkJdm1f
cGFnZV91bmxvY2tfcXVldWVzKCk7CisJCVBNQVBfTUFSS19QUklWKHhwbWFwX210b3AoKnB0
ZSkpOworCQlwbWFwX3B0ZV9yZWxlYXNlKHB0ZSk7CisJfQorfQorCit2b2lkCitwbWFwX21h
cF9yZWFkd3JpdGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCBpbnQgbGVuKQorewor
CWludCBpLCBucGFnZXMgPSByb3VuZF9wYWdlKGxlbikgPj4gUEFHRV9TSElGVDsKKwlmb3Ig
KGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJcHRfZW50cnlfdCAqcHRlOworCQlwdGUg
PSBwbWFwX3B0ZShwbWFwLCAodm1fb2Zmc2V0X3QpKHZhICsgaSpQQUdFX1NJWkUpKTsKKwkJ
UE1BUF9NQVJLX1VOUFJJVih4cG1hcF9tdG9wKCpwdGUpKTsKKwkJdm1fcGFnZV9sb2NrX3F1
ZXVlcygpOworCQlwdGVfc3RvcmUocHRlLCB4cG1hcF9tdG9wKCpwdGUpIHwgKFBHX1JXfFBH
X00pKTsKKwkJdm1fcGFnZV91bmxvY2tfcXVldWVzKCk7CisJCXBtYXBfcHRlX3JlbGVhc2Uo
cHRlKTsKKwl9Cit9CisKIC8qCiAgKiBDbGVhciB0aGUgd3JpdGUgYW5kIG1vZGlmaWVkIGJp
dHMgaW4gZWFjaCBvZiB0aGUgZ2l2ZW4gcGFnZSdzIG1hcHBpbmdzLgogICovCiB2b2lkCiBw
bWFwX3JlbW92ZV93cml0ZSh2bV9wYWdlX3QgbSkKIHsKLQlzdHJ1Y3QgbWRfcGFnZSAqcHZo
OwotCXB2X2VudHJ5X3QgbmV4dF9wdiwgcHY7CisJcHZfZW50cnlfdCBwdjsKIAlwbWFwX3Qg
cG1hcDsKLQlwZF9lbnRyeV90ICpwZGU7CiAJcHRfZW50cnlfdCBvbGRwdGUsICpwdGU7Ci0J
dm1fb2Zmc2V0X3QgdmE7CiAKIAlLQVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VE
KSA9PSAwLAogCSAgICAoInBtYXBfcmVtb3ZlX3dyaXRlOiBwYWdlICVwIGlzIG5vdCBtYW5h
Z2VkIiwgbSkpOwpAQCAtNDUxMiwzNCArMzcwOCwyNCBAQAogCQlyZXR1cm47CiAJdm1fcGFn
ZV9sb2NrX3F1ZXVlcygpOwogCXNjaGVkX3BpbigpOwotCXB2aCA9IHBhX3RvX3B2aChWTV9Q
QUdFX1RPX1BIWVMobSkpOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShwdiwgJnB2aC0+cHZfbGlz
dCwgcHZfbGlzdCwgbmV4dF9wdikgewotCQl2YSA9IHB2LT5wdl92YTsKLQkJcG1hcCA9IFBW
X1BNQVAocHYpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAs
IHZhKTsKLQkJaWYgKCgqcGRlICYgUEdfUlcpICE9IDApCi0JCQkodm9pZClwbWFwX2RlbW90
ZV9wZGUocG1hcCwgcGRlLCB2YSk7Ci0JCVBNQVBfVU5MT0NLKHBtYXApOwotCX0KIAlUQUlM
UV9GT1JFQUNIKHB2LCAmbS0+bWQucHZfbGlzdCwgcHZfbGlzdCkgewogCQlwbWFwID0gUFZf
UE1BUChwdik7CiAJCVBNQVBfTE9DSyhwbWFwKTsKLQkJcGRlID0gcG1hcF9wZGUocG1hcCwg
cHYtPnB2X3ZhKTsKLQkJS0FTU0VSVCgoKnBkZSAmIFBHX1BTKSA9PSAwLCAoInBtYXBfY2xl
YXJfd3JpdGU6IGZvdW5kIgotCQkgICAgIiBhIDRtcGFnZSBpbiBwYWdlICVwJ3MgcHYgbGlz
dCIsIG0pKTsKIAkJcHRlID0gcG1hcF9wdGVfcXVpY2socG1hcCwgcHYtPnB2X3ZhKTsKIHJl
dHJ5OgogCQlvbGRwdGUgPSAqcHRlOwogCQlpZiAoKG9sZHB0ZSAmIFBHX1JXKSAhPSAwKSB7
CisJCQl2bV9wYWRkcl90IG5ld3B0ZSA9IG9sZHB0ZSAmIH4oUEdfUlcgfCBQR19NKTsKKwkJ
CQogCQkJLyoKIAkJCSAqIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIHB0ZSBpcyAzMiBvciA2
NCBiaXRzCiAJCQkgKiBpbiBzaXplLCBQR19SVyBhbmQgUEdfTSBhcmUgYW1vbmcgdGhlIGxl
YXN0CiAJCQkgKiBzaWduaWZpY2FudCAzMiBiaXRzLgogCQkJICovCi0JCQlpZiAoIWF0b21p
Y19jbXBzZXRfaW50KCh1X2ludCAqKXB0ZSwgb2xkcHRlLAotCQkJICAgIG9sZHB0ZSAmIH4o
UEdfUlcgfCBQR19NKSkpCisJCQlQVF9TRVRfVkFfTUEocHRlLCBuZXdwdGUsIFRSVUUpOwor
CQkJaWYgKCpwdGUgIT0gbmV3cHRlKQogCQkJCWdvdG8gcmV0cnk7CisJCQkKIAkJCWlmICgo
b2xkcHRlICYgUEdfTSkgIT0gMCkKIAkJCQl2bV9wYWdlX2RpcnR5KG0pOwogCQkJcG1hcF9p
bnZhbGlkYXRlX3BhZ2UocG1hcCwgcHYtPnB2X3ZhKTsKQEAgLTQ1NDcsNiArMzczMyw5IEBA
CiAJCVBNQVBfVU5MT0NLKHBtYXApOwogCX0KIAl2bV9wYWdlX2FmbGFnX2NsZWFyKG0sIFBH
QV9XUklURUFCTEUpOworCVBUX1VQREFURVNfRkxVU0goKTsKKwlpZiAoKlBNQVAxKQorCQlQ
VF9TRVRfTUEoUEFERFIxLCAwKTsKIAlzY2hlZF91bnBpbigpOwogCXZtX3BhZ2VfdW5sb2Nr
X3F1ZXVlcygpOwogfQpAQCAtNDU2Niw0OSArMzc1NSwxNSBAQAogaW50CiBwbWFwX3RzX3Jl
ZmVyZW5jZWQodm1fcGFnZV90IG0pCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKIAlwdl9l
bnRyeV90IHB2LCBwdmYsIHB2bjsKIAlwbWFwX3QgcG1hcDsKLQlwZF9lbnRyeV90IG9sZHBk
ZSwgKnBkZTsKIAlwdF9lbnRyeV90ICpwdGU7Ci0Jdm1fb2Zmc2V0X3QgdmE7CiAJaW50IHJ0
dmFsID0gMDsKIAogCUtBU1NFUlQoKG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpID09IDAs
CiAJICAgICgicG1hcF90c19yZWZlcmVuY2VkOiBwYWdlICVwIGlzIG5vdCBtYW5hZ2VkIiwg
bSkpOwotCXB2aCA9IHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpOwogCXZtX3BhZ2Vf
bG9ja19xdWV1ZXMoKTsKIAlzY2hlZF9waW4oKTsKLQlUQUlMUV9GT1JFQUNIX1NBRkUocHYs
ICZwdmgtPnB2X2xpc3QsIHB2X2xpc3QsIHB2bikgewotCQl2YSA9IHB2LT5wdl92YTsKLQkJ
cG1hcCA9IFBWX1BNQVAocHYpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBf
cGRlKHBtYXAsIHZhKTsKLQkJb2xkcGRlID0gKnBkZTsKLQkJaWYgKChvbGRwZGUgJiBQR19B
KSAhPSAwKSB7Ci0JCQlpZiAocG1hcF9kZW1vdGVfcGRlKHBtYXAsIHBkZSwgdmEpKSB7Ci0J
CQkJaWYgKChvbGRwZGUgJiBQR19XKSA9PSAwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFJlbW92
ZSB0aGUgbWFwcGluZyB0byBhIHNpbmdsZSBwYWdlCi0JCQkJCSAqIHNvIHRoYXQgYSBzdWJz
ZXF1ZW50IGFjY2VzcyBtYXkKLQkJCQkJICogcmVwcm9tb3RlLiAgU2luY2UgdGhlIHVuZGVy
bHlpbmcKLQkJCQkJICogcGFnZSB0YWJsZSBwYWdlIGlzIGZ1bGx5IHBvcHVsYXRlZCwKLQkJ
CQkJICogdGhpcyByZW1vdmFsIG5ldmVyIGZyZWVzIGEgcGFnZQotCQkJCQkgKiB0YWJsZSBw
YWdlLgotCQkJCQkgKi8KLQkJCQkJdmEgKz0gVk1fUEFHRV9UT19QSFlTKG0pIC0gKG9sZHBk
ZSAmCi0JCQkJCSAgICBQR19QU19GUkFNRSk7Ci0JCQkJCXBtYXBfcmVtb3ZlX3BhZ2UocG1h
cCwgdmEsIE5VTEwpOwotCQkJCQlydHZhbCsrOwotCQkJCQlpZiAocnR2YWwgPiA0KSB7Ci0J
CQkJCQlQTUFQX1VOTE9DSyhwbWFwKTsKLQkJCQkJCWdvdG8gb3V0OwotCQkJCQl9Ci0JCQkJ
fQotCQkJfQotCQl9Ci0JCVBNQVBfVU5MT0NLKHBtYXApOwotCX0KIAlpZiAoKHB2ID0gVEFJ
TFFfRklSU1QoJm0tPm1kLnB2X2xpc3QpKSAhPSBOVUxMKSB7CiAJCXB2ZiA9IHB2OwogCQlk
byB7CkBAIC00NjE3LDEyICszNzcyLDkgQEAKIAkJCVRBSUxRX0lOU0VSVF9UQUlMKCZtLT5t
ZC5wdl9saXN0LCBwdiwgcHZfbGlzdCk7CiAJCQlwbWFwID0gUFZfUE1BUChwdik7CiAJCQlQ
TUFQX0xPQ0socG1hcCk7Ci0JCQlwZGUgPSBwbWFwX3BkZShwbWFwLCBwdi0+cHZfdmEpOwot
CQkJS0FTU0VSVCgoKnBkZSAmIFBHX1BTKSA9PSAwLCAoInBtYXBfdHNfcmVmZXJlbmNlZDoi
Ci0JCQkgICAgIiBmb3VuZCBhIDRtcGFnZSBpbiBwYWdlICVwJ3MgcHYgbGlzdCIsIG0pKTsK
IAkJCXB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHB2LT5wdl92YSk7CiAJCQlpZiAoKCpw
dGUgJiBQR19BKSAhPSAwKSB7Ci0JCQkJYXRvbWljX2NsZWFyX2ludCgodV9pbnQgKilwdGUs
IFBHX0EpOworCQkJCVBUX1NFVF9WQV9NQShwdGUsICpwdGUgJiB+UEdfQSwgRkFMU0UpOwog
CQkJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKHBtYXAsIHB2LT5wdl92YSk7CiAJCQkJcnR2YWwr
KzsKIAkJCQlpZiAocnR2YWwgPiA0KQpAQCAtNDYzMSw3ICszNzgzLDkgQEAKIAkJCVBNQVBf
VU5MT0NLKHBtYXApOwogCQl9IHdoaWxlICgocHYgPSBwdm4pICE9IE5VTEwgJiYgcHYgIT0g
cHZmKTsKIAl9Ci1vdXQ6CisJUFRfVVBEQVRFU19GTFVTSCgpOworCWlmICgqUE1BUDEpCisJ
CVBUX1NFVF9NQShQQUREUjEsIDApOwogCXNjaGVkX3VucGluKCk7CiAJdm1fcGFnZV91bmxv
Y2tfcXVldWVzKCk7CiAJcmV0dXJuIChydHZhbCk7CkBAIC00NjQzLDEyICszNzk3LDkgQEAK
IHZvaWQKIHBtYXBfY2xlYXJfbW9kaWZ5KHZtX3BhZ2VfdCBtKQogewotCXN0cnVjdCBtZF9w
YWdlICpwdmg7Ci0JcHZfZW50cnlfdCBuZXh0X3B2LCBwdjsKKwlwdl9lbnRyeV90IHB2Owog
CXBtYXBfdCBwbWFwOwotCXBkX2VudHJ5X3Qgb2xkcGRlLCAqcGRlOwotCXB0X2VudHJ5X3Qg
b2xkcHRlLCAqcHRlOwotCXZtX29mZnNldF90IHZhOworCXB0X2VudHJ5X3QgKnB0ZTsKIAog
CUtBU1NFUlQoKG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpID09IDAsCiAJICAgICgicG1h
cF9jbGVhcl9tb2RpZnk6IHBhZ2UgJXAgaXMgbm90IG1hbmFnZWQiLCBtKSk7CkBAIC00NjY1
LDQ5ICszODE2LDkgQEAKIAkJcmV0dXJuOwogCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlz
Y2hlZF9waW4oKTsKLQlwdmggPSBwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKTsKLQlU
QUlMUV9GT1JFQUNIX1NBRkUocHYsICZwdmgtPnB2X2xpc3QsIHB2X2xpc3QsIG5leHRfcHYp
IHsKLQkJdmEgPSBwdi0+cHZfdmE7Ci0JCXBtYXAgPSBQVl9QTUFQKHB2KTsKLQkJUE1BUF9M
T0NLKHBtYXApOwotCQlwZGUgPSBwbWFwX3BkZShwbWFwLCB2YSk7Ci0JCW9sZHBkZSA9ICpw
ZGU7Ci0JCWlmICgob2xkcGRlICYgUEdfUlcpICE9IDApIHsKLQkJCWlmIChwbWFwX2RlbW90
ZV9wZGUocG1hcCwgcGRlLCB2YSkpIHsKLQkJCQlpZiAoKG9sZHBkZSAmIFBHX1cpID09IDAp
IHsKLQkJCQkJLyoKLQkJCQkJICogV3JpdGUgcHJvdGVjdCB0aGUgbWFwcGluZyB0byBhCi0J
CQkJCSAqIHNpbmdsZSBwYWdlIHNvIHRoYXQgYSBzdWJzZXF1ZW50Ci0JCQkJCSAqIHdyaXRl
IGFjY2VzcyBtYXkgcmVwcm9tb3RlLgotCQkJCQkgKi8KLQkJCQkJdmEgKz0gVk1fUEFHRV9U
T19QSFlTKG0pIC0gKG9sZHBkZSAmCi0JCQkJCSAgICBQR19QU19GUkFNRSk7Ci0JCQkJCXB0
ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHZhKTsKLQkJCQkJb2xkcHRlID0gKnB0ZTsKLQkJ
CQkJaWYgKChvbGRwdGUgJiBQR19WKSAhPSAwKSB7Ci0JCQkJCQkvKgotCQkJCQkJICogUmVn
YXJkbGVzcyBvZiB3aGV0aGVyIGEgcHRlIGlzIDMyIG9yIDY0IGJpdHMKLQkJCQkJCSAqIGlu
IHNpemUsIFBHX1JXIGFuZCBQR19NIGFyZSBhbW9uZyB0aGUgbGVhc3QKLQkJCQkJCSAqIHNp
Z25pZmljYW50IDMyIGJpdHMuCi0JCQkJCQkgKi8KLQkJCQkJCXdoaWxlICghYXRvbWljX2Nt
cHNldF9pbnQoKHVfaW50ICopcHRlLAotCQkJCQkJICAgIG9sZHB0ZSwKLQkJCQkJCSAgICBv
bGRwdGUgJiB+KFBHX00gfCBQR19SVykpKQotCQkJCQkJCW9sZHB0ZSA9ICpwdGU7Ci0JCQkJ
CQl2bV9wYWdlX2RpcnR5KG0pOwotCQkJCQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwg
dmEpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCVBNQVBfVU5MT0NLKHBtYXApOwot
CX0KIAlUQUlMUV9GT1JFQUNIKHB2LCAmbS0+bWQucHZfbGlzdCwgcHZfbGlzdCkgewogCQlw
bWFwID0gUFZfUE1BUChwdik7CiAJCVBNQVBfTE9DSyhwbWFwKTsKLQkJcGRlID0gcG1hcF9w
ZGUocG1hcCwgcHYtPnB2X3ZhKTsKLQkJS0FTU0VSVCgoKnBkZSAmIFBHX1BTKSA9PSAwLCAo
InBtYXBfY2xlYXJfbW9kaWZ5OiBmb3VuZCIKLQkJICAgICIgYSA0bXBhZ2UgaW4gcGFnZSAl
cCdzIHB2IGxpc3QiLCBtKSk7CiAJCXB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHB2LT5w
dl92YSk7CiAJCWlmICgoKnB0ZSAmIChQR19NIHwgUEdfUlcpKSA9PSAoUEdfTSB8IFBHX1JX
KSkgewogCQkJLyoKQEAgLTQ3MTUsNyArMzgyNiw3IEBACiAJCQkgKiBpbiBzaXplLCBQR19N
IGlzIGFtb25nIHRoZSBsZWFzdCBzaWduaWZpY2FudAogCQkJICogMzIgYml0cy4gCiAJCQkg
Ki8KLQkJCWF0b21pY19jbGVhcl9pbnQoKHVfaW50ICopcHRlLCBQR19NKTsKKwkJCVBUX1NF
VF9WQV9NQShwdGUsICpwdGUgJiB+UEdfTSwgRkFMU0UpOwogCQkJcG1hcF9pbnZhbGlkYXRl
X3BhZ2UocG1hcCwgcHYtPnB2X3ZhKTsKIAkJfQogCQlQTUFQX1VOTE9DSyhwbWFwKTsKQEAg
LTQ3MzIsNDYgKzM4NDMsMTcgQEAKIHZvaWQKIHBtYXBfY2xlYXJfcmVmZXJlbmNlKHZtX3Bh
Z2VfdCBtKQogewotCXN0cnVjdCBtZF9wYWdlICpwdmg7Ci0JcHZfZW50cnlfdCBuZXh0X3B2
LCBwdjsKKwlwdl9lbnRyeV90IHB2OwogCXBtYXBfdCBwbWFwOwotCXBkX2VudHJ5X3Qgb2xk
cGRlLCAqcGRlOwogCXB0X2VudHJ5X3QgKnB0ZTsKLQl2bV9vZmZzZXRfdCB2YTsKIAogCUtB
U1NFUlQoKG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpID09IDAsCiAJICAgICgicG1hcF9j
bGVhcl9yZWZlcmVuY2U6IHBhZ2UgJXAgaXMgbm90IG1hbmFnZWQiLCBtKSk7CiAJdm1fcGFn
ZV9sb2NrX3F1ZXVlcygpOwogCXNjaGVkX3BpbigpOwotCXB2aCA9IHBhX3RvX3B2aChWTV9Q
QUdFX1RPX1BIWVMobSkpOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShwdiwgJnB2aC0+cHZfbGlz
dCwgcHZfbGlzdCwgbmV4dF9wdikgewotCQl2YSA9IHB2LT5wdl92YTsKLQkJcG1hcCA9IFBW
X1BNQVAocHYpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAs
IHZhKTsKLQkJb2xkcGRlID0gKnBkZTsKLQkJaWYgKChvbGRwZGUgJiBQR19BKSAhPSAwKSB7
Ci0JCQlpZiAocG1hcF9kZW1vdGVfcGRlKHBtYXAsIHBkZSwgdmEpKSB7Ci0JCQkJLyoKLQkJ
CQkgKiBSZW1vdmUgdGhlIG1hcHBpbmcgdG8gYSBzaW5nbGUgcGFnZSBzbwotCQkJCSAqIHRo
YXQgYSBzdWJzZXF1ZW50IGFjY2VzcyBtYXkgcmVwcm9tb3RlLgotCQkJCSAqIFNpbmNlIHRo
ZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGUgcGFnZSBpcwotCQkJCSAqIGZ1bGx5IHBvcHVsYXRl
ZCwgdGhpcyByZW1vdmFsIG5ldmVyIGZyZWVzCi0JCQkJICogYSBwYWdlIHRhYmxlIHBhZ2Uu
Ci0JCQkJICovCi0JCQkJdmEgKz0gVk1fUEFHRV9UT19QSFlTKG0pIC0gKG9sZHBkZSAmCi0J
CQkJICAgIFBHX1BTX0ZSQU1FKTsKLQkJCQlwbWFwX3JlbW92ZV9wYWdlKHBtYXAsIHZhLCBO
VUxMKTsKLQkJCX0KLQkJfQotCQlQTUFQX1VOTE9DSyhwbWFwKTsKLQl9CiAJVEFJTFFfRk9S
RUFDSChwdiwgJm0tPm1kLnB2X2xpc3QsIHB2X2xpc3QpIHsKIAkJcG1hcCA9IFBWX1BNQVAo
cHYpOwogCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAsIHB2LT5w
dl92YSk7Ci0JCUtBU1NFUlQoKCpwZGUgJiBQR19QUykgPT0gMCwgKCJwbWFwX2NsZWFyX3Jl
ZmVyZW5jZTogZm91bmQiCi0JCSAgICAiIGEgNG1wYWdlIGluIHBhZ2UgJXAncyBwdiBsaXN0
IiwgbSkpOwogCQlwdGUgPSBwbWFwX3B0ZV9xdWljayhwbWFwLCBwdi0+cHZfdmEpOwogCQlp
ZiAoKCpwdGUgJiBQR19BKSAhPSAwKSB7CiAJCQkvKgpAQCAtNDc3OSw3ICszODYxLDcgQEAK
IAkJCSAqIGluIHNpemUsIFBHX0EgaXMgYW1vbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50CiAJ
CQkgKiAzMiBiaXRzLiAKIAkJCSAqLwotCQkJYXRvbWljX2NsZWFyX2ludCgodV9pbnQgKilw
dGUsIFBHX0EpOworCQkJUFRfU0VUX1ZBX01BKHB0ZSwgKnB0ZSAmIH5QR19BLCBGQUxTRSk7
CiAJCQlwbWFwX2ludmFsaWRhdGVfcGFnZShwbWFwLCBwdi0+cHZfdmEpOwogCQl9CiAJCVBN
QVBfVU5MT0NLKHBtYXApOwpAQCAtNDc5Miw0MCArMzg3NCw2IEBACiAgKiBNaXNjZWxsYW5l
b3VzIHN1cHBvcnQgcm91dGluZXMgZm9sbG93CiAgKi8KIAotLyogQWRqdXN0IHRoZSBjYWNo
ZSBtb2RlIGZvciBhIDRLQiBwYWdlIG1hcHBlZCB2aWEgYSBQVEUuICovCi1zdGF0aWMgX19p
bmxpbmUgdm9pZAotcG1hcF9wdGVfYXR0cihwdF9lbnRyeV90ICpwdGUsIGludCBjYWNoZV9i
aXRzKQotewotCXVfaW50IG9wdGUsIG5wdGU7Ci0KLQkvKgotCSAqIFRoZSBjYWNoZSBtb2Rl
IGJpdHMgYXJlIGFsbCBpbiB0aGUgbG93IDMyLWJpdHMgb2YgdGhlCi0JICogUFRFLCBzbyB3
ZSBjYW4ganVzdCBzcGluIG9uIHVwZGF0aW5nIHRoZSBsb3cgMzItYml0cy4KLQkgKi8KLQlk
byB7Ci0JCW9wdGUgPSAqKHVfaW50ICopcHRlOwotCQlucHRlID0gb3B0ZSAmIH5QR19QVEVf
Q0FDSEU7Ci0JCW5wdGUgfD0gY2FjaGVfYml0czsKLQl9IHdoaWxlIChucHRlICE9IG9wdGUg
JiYgIWF0b21pY19jbXBzZXRfaW50KCh1X2ludCAqKXB0ZSwgb3B0ZSwgbnB0ZSkpOwotfQot
Ci0vKiBBZGp1c3QgdGhlIGNhY2hlIG1vZGUgZm9yIGEgMi80TUIgcGFnZSBtYXBwZWQgdmlh
IGEgUERFLiAqLwotc3RhdGljIF9faW5saW5lIHZvaWQKLXBtYXBfcGRlX2F0dHIocGRfZW50
cnlfdCAqcGRlLCBpbnQgY2FjaGVfYml0cykKLXsKLQl1X2ludCBvcGRlLCBucGRlOwotCi0J
LyoKLQkgKiBUaGUgY2FjaGUgbW9kZSBiaXRzIGFyZSBhbGwgaW4gdGhlIGxvdyAzMi1iaXRz
IG9mIHRoZQotCSAqIFBERSwgc28gd2UgY2FuIGp1c3Qgc3BpbiBvbiB1cGRhdGluZyB0aGUg
bG93IDMyLWJpdHMuCi0JICovCi0JZG8gewotCQlvcGRlID0gKih1X2ludCAqKXBkZTsKLQkJ
bnBkZSA9IG9wZGUgJiB+UEdfUERFX0NBQ0hFOwotCQlucGRlIHw9IGNhY2hlX2JpdHM7Ci0J
fSB3aGlsZSAobnBkZSAhPSBvcGRlICYmICFhdG9taWNfY21wc2V0X2ludCgodV9pbnQgKilw
ZGUsIG9wZGUsIG5wZGUpKTsKLX0KLQogLyoKICAqIE1hcCBhIHNldCBvZiBwaHlzaWNhbCBt
ZW1vcnkgcGFnZXMgaW50byB0aGUga2VybmVsIHZpcnR1YWwKICAqIGFkZHJlc3Mgc3BhY2Uu
IFJldHVybiBhIHBvaW50ZXIgdG8gd2hlcmUgaXQgaXMgbWFwcGVkLiBUaGlzCkBAIC00ODgw
LDkgKzM5MjgsMTEgQEAKIAliYXNlID0gdHJ1bmNfcGFnZSh2YSk7CiAJb2Zmc2V0ID0gdmEg
JiBQQUdFX01BU0s7CiAJc2l6ZSA9IHJvdW5kdXAob2Zmc2V0ICsgc2l6ZSwgUEFHRV9TSVpF
KTsKKwljcml0aWNhbF9lbnRlcigpOwogCWZvciAodG1wdmEgPSBiYXNlOyB0bXB2YSA8IChi
YXNlICsgc2l6ZSk7IHRtcHZhICs9IFBBR0VfU0laRSkKIAkJcG1hcF9rcmVtb3ZlKHRtcHZh
KTsKIAlwbWFwX2ludmFsaWRhdGVfcmFuZ2Uoa2VybmVsX3BtYXAsIHZhLCB0bXB2YSk7CisJ
Y3JpdGljYWxfZXhpdCgpOwogCWttZW1fZnJlZShrZXJuZWxfbWFwLCBiYXNlLCBzaXplKTsK
IH0KIApAQCAtNDkzMCw4ICszOTgwLDkgQEAKIAkJaWYgKCpzeXNtYXBzLT5DTUFQMikKIAkJ
CXBhbmljKCJwbWFwX2ZsdXNoX3BhZ2U6IENNQVAyIGJ1c3kiKTsKIAkJc2NoZWRfcGluKCk7
Ci0JCSpzeXNtYXBzLT5DTUFQMiA9IFBHX1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fUEhZUyht
KSB8Ci0JCSAgICBQR19BIHwgUEdfTSB8IHBtYXBfY2FjaGVfYml0cyhtLT5tZC5wYXRfbW9k
ZSwgMCk7CisJCVBUX1NFVF9NQShzeXNtYXBzLT5DQUREUjIsIFBHX1YgfCBQR19SVyB8CisJ
CSAgICBWTV9QQUdFX1RPX01BQ0gobSkgfCBQR19BIHwgUEdfTSB8CisJCSAgICBwbWFwX2Nh
Y2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDApKTsKIAkJaW52bGNhZGRyKHN5c21hcHMtPkNB
RERSMik7CiAJCXN2YSA9ICh2bV9vZmZzZXRfdClzeXNtYXBzLT5DQUREUjI7CiAJCWV2YSA9
IHN2YSArIFBBR0VfU0laRTsKQEAgLTQ5NDUsNyArMzk5Niw3IEBACiAJCWZvciAoOyBzdmEg
PCBldmE7IHN2YSArPSBjcHVfY2xmbHVzaF9saW5lX3NpemUpCiAJCQljbGZsdXNoKHN2YSk7
CiAJCW1mZW5jZSgpOwotCQkqc3lzbWFwcy0+Q01BUDIgPSAwOworCQlQVF9TRVRfTUEoc3lz
bWFwcy0+Q0FERFIyLCAwKTsKIAkJc2NoZWRfdW5waW4oKTsKIAkJbXR4X3VubG9jaygmc3lz
bWFwcy0+bG9jayk7CiAJfSBlbHNlCkBAIC00OTY2LDkzICs0MDE3LDU0IEBACiBwbWFwX2No
YW5nZV9hdHRyKHZtX29mZnNldF90IHZhLCB2bV9zaXplX3Qgc2l6ZSwgaW50IG1vZGUpCiB7
CiAJdm1fb2Zmc2V0X3QgYmFzZSwgb2Zmc2V0LCB0bXB2YTsKLQlwZF9lbnRyeV90ICpwZGU7
CiAJcHRfZW50cnlfdCAqcHRlOwotCWludCBjYWNoZV9iaXRzX3B0ZSwgY2FjaGVfYml0c19w
ZGU7CisJdV9pbnQgb3B0ZSwgbnB0ZTsKKwlwZF9lbnRyeV90ICpwZGU7CiAJYm9vbGVhbl90
IGNoYW5nZWQ7CiAKIAliYXNlID0gdHJ1bmNfcGFnZSh2YSk7CiAJb2Zmc2V0ID0gdmEgJiBQ
QUdFX01BU0s7CiAJc2l6ZSA9IHJvdW5kdXAob2Zmc2V0ICsgc2l6ZSwgUEFHRV9TSVpFKTsK
IAotCS8qCi0JICogT25seSBzdXBwb3J0ZWQgb24ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2Vz
IGFib3ZlIHRoZSByZWN1cnNpdmUgbWFwLgotCSAqLwotCWlmIChiYXNlIDwgVk1fTUlOX0tF
Uk5FTF9BRERSRVNTKQorCS8qIE9ubHkgc3VwcG9ydGVkIG9uIGtlcm5lbCB2aXJ0dWFsIGFk
ZHJlc3Nlcy4gKi8KKwlpZiAoYmFzZSA8PSBWTV9NQVhVU0VSX0FERFJFU1MpCiAJCXJldHVy
biAoRUlOVkFMKTsKIAotCWNhY2hlX2JpdHNfcGRlID0gcG1hcF9jYWNoZV9iaXRzKG1vZGUs
IDEpOwotCWNhY2hlX2JpdHNfcHRlID0gcG1hcF9jYWNoZV9iaXRzKG1vZGUsIDApOwotCWNo
YW5nZWQgPSBGQUxTRTsKLQotCS8qCi0JICogUGFnZXMgdGhhdCBhcmVuJ3QgbWFwcGVkIGFy
ZW4ndCBzdXBwb3J0ZWQuICBBbHNvIGJyZWFrIGRvd24KLQkgKiAyLzRNQiBwYWdlcyBpbnRv
IDRLQiBwYWdlcyBpZiByZXF1aXJlZC4KLQkgKi8KLQlQTUFQX0xPQ0soa2VybmVsX3BtYXAp
OwotCWZvciAodG1wdmEgPSBiYXNlOyB0bXB2YSA8IGJhc2UgKyBzaXplOyApIHsKKwkvKiA0
TUIgcGFnZXMgYW5kIHBhZ2VzIHRoYXQgYXJlbid0IG1hcHBlZCBhcmVuJ3Qgc3VwcG9ydGVk
LiAqLworCWZvciAodG1wdmEgPSBiYXNlOyB0bXB2YSA8IChiYXNlICsgc2l6ZSk7IHRtcHZh
ICs9IFBBR0VfU0laRSkgewogCQlwZGUgPSBwbWFwX3BkZShrZXJuZWxfcG1hcCwgdG1wdmEp
OwotCQlpZiAoKnBkZSA9PSAwKSB7Ci0JCQlQTUFQX1VOTE9DSyhrZXJuZWxfcG1hcCk7CisJ
CWlmICgqcGRlICYgUEdfUFMpCiAJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLQkJaWYgKCpw
ZGUgJiBQR19QUykgewotCQkJLyoKLQkJCSAqIElmIHRoZSBjdXJyZW50IDIvNE1CIHBhZ2Ug
YWxyZWFkeSBoYXMKLQkJCSAqIHRoZSByZXF1aXJlZCBtZW1vcnkgdHlwZSwgdGhlbiB3ZSBu
ZWVkIG5vdAotCQkJICogZGVtb3RlIHRoaXMgcGFnZS4gIEp1c3QgaW5jcmVtZW50IHRtcHZh
IHRvCi0JCQkgKiB0aGUgbmV4dCAyLzRNQiBwYWdlIGZyYW1lLgotCQkJICovCi0JCQlpZiAo
KCpwZGUgJiBQR19QREVfQ0FDSEUpID09IGNhY2hlX2JpdHNfcGRlKSB7Ci0JCQkJdG1wdmEg
PSB0cnVuY180bXBhZ2UodG1wdmEpICsgTkJQRFI7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0K
LQkJCS8qCi0JCQkgKiBJZiB0aGUgY3VycmVudCBvZmZzZXQgYWxpZ25zIHdpdGggYSAyLzRN
QgotCQkJICogcGFnZSBmcmFtZSBhbmQgdGhlcmUgaXMgYXQgbGVhc3QgMi80TUIgbGVmdAot
CQkJICogd2l0aGluIHRoZSByYW5nZSwgdGhlbiB3ZSBuZWVkIG5vdCBicmVhawotCQkJICog
ZG93biB0aGlzIHBhZ2UgaW50byA0S0IgcGFnZXMuCi0JCQkgKi8KLQkJCWlmICgodG1wdmEg
JiBQRFJNQVNLKSA9PSAwICYmCi0JCQkgICAgdG1wdmEgKyBQRFJNQVNLIDwgYmFzZSArIHNp
emUpIHsKLQkJCQl0bXB2YSArPSBOQlBEUjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlm
ICghcG1hcF9kZW1vdGVfcGRlKGtlcm5lbF9wbWFwLCBwZGUsIHRtcHZhKSkgewotCQkJCVBN
QVBfVU5MT0NLKGtlcm5lbF9wbWFwKTsKLQkJCQlyZXR1cm4gKEVOT01FTSk7Ci0JCQl9Ci0J
CX0KLQkJcHRlID0gdnRvcHRlKHRtcHZhKTsKLQkJaWYgKCpwdGUgPT0gMCkgewotCQkJUE1B
UF9VTkxPQ0soa2VybmVsX3BtYXApOworCQlpZiAoKCpwZGUgJiBQR19WKSA9PSAwKQorCQkJ
cmV0dXJuIChFSU5WQUwpOworCQlwdGUgPSB2dG9wdGUodmEpOworCQlpZiAoKCpwdGUgJiBQ
R19WKSA9PSAwKQogCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCXRtcHZhICs9IFBBR0Vf
U0laRTsKIAl9Ci0JUE1BUF9VTkxPQ0soa2VybmVsX3BtYXApOworCisJY2hhbmdlZCA9IEZB
TFNFOwogCiAJLyoKLQkgKiBPaywgYWxsIHRoZSBwYWdlcyBleGlzdCwgc28gcnVuIHRocm91
Z2ggdGhlbSB1cGRhdGluZyB0aGVpcgotCSAqIGNhY2hlIG1vZGUgaWYgcmVxdWlyZWQuCisJ
ICogT2ssIGFsbCB0aGUgcGFnZXMgZXhpc3QgYW5kIGFyZSA0aywgc28gcnVuIHRocm91Z2gg
dGhlbSB1cGRhdGluZworCSAqIHRoZWlyIGNhY2hlIG1vZGUuCiAJICovCi0JZm9yICh0bXB2
YSA9IGJhc2U7IHRtcHZhIDwgYmFzZSArIHNpemU7ICkgewotCQlwZGUgPSBwbWFwX3BkZShr
ZXJuZWxfcG1hcCwgdG1wdmEpOwotCQlpZiAoKnBkZSAmIFBHX1BTKSB7Ci0JCQlpZiAoKCpw
ZGUgJiBQR19QREVfQ0FDSEUpICE9IGNhY2hlX2JpdHNfcGRlKSB7Ci0JCQkJcG1hcF9wZGVf
YXR0cihwZGUsIGNhY2hlX2JpdHNfcGRlKTsKLQkJCQljaGFuZ2VkID0gVFJVRTsKLQkJCX0K
LQkJCXRtcHZhID0gdHJ1bmNfNG1wYWdlKHRtcHZhKSArIE5CUERSOwotCQl9IGVsc2Ugewot
CQkJcHRlID0gdnRvcHRlKHRtcHZhKTsKLQkJCWlmICgoKnB0ZSAmIFBHX1BURV9DQUNIRSkg
IT0gY2FjaGVfYml0c19wdGUpIHsKLQkJCQlwbWFwX3B0ZV9hdHRyKHB0ZSwgY2FjaGVfYml0
c19wdGUpOwotCQkJCWNoYW5nZWQgPSBUUlVFOwotCQkJfQotCQkJdG1wdmEgKz0gUEFHRV9T
SVpFOwotCQl9CisJZm9yICh0bXB2YSA9IGJhc2U7IHNpemUgPiAwOyApIHsKKwkJcHRlID0g
dnRvcHRlKHRtcHZhKTsKKworCQkvKgorCQkgKiBUaGUgY2FjaGUgbW9kZSBiaXRzIGFyZSBh
bGwgaW4gdGhlIGxvdyAzMi1iaXRzIG9mIHRoZQorCQkgKiBQVEUsIHNvIHdlIGNhbiBqdXN0
IHNwaW4gb24gdXBkYXRpbmcgdGhlIGxvdyAzMi1iaXRzLgorCQkgKi8KKwkJZG8geworCQkJ
b3B0ZSA9ICoodV9pbnQgKilwdGU7CisJCQlucHRlID0gb3B0ZSAmIH4oUEdfUFRFX1BBVCB8
IFBHX05DX1BDRCB8IFBHX05DX1BXVCk7CisJCQlucHRlIHw9IHBtYXBfY2FjaGVfYml0cyht
b2RlLCAwKTsKKwkJCVBUX1NFVF9WQV9NQShwdGUsIG5wdGUsIFRSVUUpOworCQl9IHdoaWxl
IChucHRlICE9IG9wdGUgJiYgKCpwdGUgIT0gbnB0ZSkpOworCQlpZiAobnB0ZSAhPSBvcHRl
KQorCQkJY2hhbmdlZCA9IFRSVUU7CisJCXRtcHZhICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAt
PSBQQUdFX1NJWkU7CiAJfQogCiAJLyoKQEAgLTUwNzIsMzMgKzQwODQsMTYgQEAKIGludAog
cG1hcF9taW5jb3JlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCBhZGRyLCB2bV9wYWRkcl90
ICpsb2NrZWRfcGEpCiB7Ci0JcGRfZW50cnlfdCAqcGRlcDsKIAlwdF9lbnRyeV90ICpwdGVw
LCBwdGU7CiAJdm1fcGFkZHJfdCBwYTsKIAlpbnQgdmFsOwogCiAJUE1BUF9MT0NLKHBtYXAp
OwogcmV0cnk6Ci0JcGRlcCA9IHBtYXBfcGRlKHBtYXAsIGFkZHIpOwotCWlmICgqcGRlcCAh
PSAwKSB7Ci0JCWlmICgqcGRlcCAmIFBHX1BTKSB7Ci0JCQlwdGUgPSAqcGRlcDsKLQkJCS8q
IENvbXB1dGUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIDRLQiBwYWdlLiAqLwotCQkJ
cGEgPSAoKCpwZGVwICYgUEdfUFNfRlJBTUUpIHwgKGFkZHIgJiBQRFJNQVNLKSkgJgotCQkJ
ICAgIFBHX0ZSQU1FOwotCQkJdmFsID0gTUlOQ09SRV9TVVBFUjsKLQkJfSBlbHNlIHsKLQkJ
CXB0ZXAgPSBwbWFwX3B0ZShwbWFwLCBhZGRyKTsKLQkJCXB0ZSA9ICpwdGVwOwotCQkJcG1h
cF9wdGVfcmVsZWFzZShwdGVwKTsKLQkJCXBhID0gcHRlICYgUEdfRlJBTUU7Ci0JCQl2YWwg
PSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHRlID0gMDsKLQkJcGEgPSAwOwotCQl2YWwgPSAw
OwotCX0KKwlwdGVwID0gcG1hcF9wdGUocG1hcCwgYWRkcik7CisJcHRlID0gKHB0ZXAgIT0g
TlVMTCkgPyBQVF9HRVQocHRlcCkgOiAwOworCXBtYXBfcHRlX3JlbGVhc2UocHRlcCk7CisJ
dmFsID0gMDsKIAlpZiAoKHB0ZSAmIFBHX1YpICE9IDApIHsKIAkJdmFsIHw9IE1JTkNPUkVf
SU5DT1JFOwogCQlpZiAoKHB0ZSAmIChQR19NIHwgUEdfUlcpKSA9PSAoUEdfTSB8IFBHX1JX
KSkKQEAgLTUxMDksNiArNDEwNCw3IEBACiAJaWYgKCh2YWwgJiAoTUlOQ09SRV9NT0RJRklF
RF9PVEhFUiB8IE1JTkNPUkVfUkVGRVJFTkNFRF9PVEhFUikpICE9CiAJICAgIChNSU5DT1JF
X01PRElGSUVEX09USEVSIHwgTUlOQ09SRV9SRUZFUkVOQ0VEX09USEVSKSAmJgogCSAgICAo
cHRlICYgKFBHX01BTkFHRUQgfCBQR19WKSkgPT0gKFBHX01BTkFHRUQgfCBQR19WKSkgewor
CQlwYSA9IHB0ZSAmIFBHX0ZSQU1FOwogCQkvKiBFbnN1cmUgdGhhdCAiUEhZU19UT19WTV9Q
QUdFKHBhKS0+b2JqZWN0IiBkb2Vzbid0IGNoYW5nZS4gKi8KIAkJaWYgKHZtX3BhZ2VfcGFf
dHJ5cmVsb2NrKHBtYXAsIHBhLCBsb2NrZWRfcGEpKQogCQkJZ290byByZXRyeTsKQEAgLTUx
NDUsNiArNDE0MSw3IEBACiAJICogcG1hcF9hY3RpdmF0ZSBpcyBmb3IgdGhlIGN1cnJlbnQg
dGhyZWFkIG9uIHRoZSBjdXJyZW50IGNwdQogCSAqLwogCXRkLT50ZF9wY2ItPnBjYl9jcjMg
PSBjcjM7CisJUFRfVVBEQVRFU19GTFVTSCgpOwogCWxvYWRfY3IzKGNyMyk7CiAJUENQVV9T
RVQoY3VycG1hcCwgcG1hcCk7CiAJY3JpdGljYWxfZXhpdCgpOwpAQCAtNTE3OSw2ICs0MTc2
LDY3IEBACiAJCSphZGRyID0gKCgqYWRkciArIFBEUk1BU0spICYgflBEUk1BU0spICsgc3Vw
ZXJwYWdlX29mZnNldDsKIH0KIAordm9pZAorcG1hcF9zdXNwZW5kKCkKK3sKKwlwbWFwX3Qg
cG1hcDsKKwlpbnQgaSwgcGRpciwgb2Zmc2V0OworCXZtX3BhZGRyX3QgcGRpcm1hOworCW1t
dV91cGRhdGVfdCBtdVs0XTsKKworCS8qCisJICogV2UgbmVlZCB0byByZW1vdmUgdGhlIHJl
Y3Vyc2l2ZSBtYXBwaW5nIHN0cnVjdHVyZSBmcm9tIGFsbAorCSAqIG91ciBwbWFwcyBzbyB0
aGF0IFhlbiBkb2Vzbid0IGdldCBjb25mdXNlZCB3aGVuIGl0IHJlc3RvcmVzCisJICogdGhl
IHBhZ2UgdGFibGVzLiBUaGUgcmVjdXJzaXZlIG1hcCBsaXZlcyBhdCBwYWdlIGRpcmVjdG9y
eQorCSAqIGluZGV4IFBURFBUREkuIFdlIGFzc3VtZSB0aGF0IHRoZSBzdXNwZW5kIGNvZGUg
aGFzIHN0b3BwZWQKKwkgKiB0aGUgb3RoZXIgdmNwdXMgKGlmIGFueSkuCisJICovCisJTElT
VF9GT1JFQUNIKHBtYXAsICZhbGxwbWFwcywgcG1fbGlzdCkgeworCQlmb3IgKGkgPSAwOyBp
IDwgNDsgaSsrKSB7CisJCQkvKgorCQkJICogRmlndXJlIG91dCB3aGljaCBwYWdlIGRpcmVj
dG9yeSAoTDIpIHBhZ2UKKwkJCSAqIGNvbnRhaW5zIHRoaXMgYml0IG9mIHRoZSByZWN1cnNp
dmUgbWFwIGFuZAorCQkJICogdGhlIG9mZnNldCB3aXRoaW4gdGhhdCBwYWdlIG9mIHRoZSBt
YXAKKwkJCSAqIGVudHJ5CisJCQkgKi8KKwkJCXBkaXIgPSAoUFREUFRESSArIGkpIC8gTlBE
RVBHOworCQkJb2Zmc2V0ID0gKFBURFBUREkgKyBpKSAlIE5QREVQRzsKKwkJCXBkaXJtYSA9
IHBtYXAtPnBtX3BkcHRbcGRpcl0gJiBQR19GUkFNRTsKKwkJCW11W2ldLnB0ciA9IHBkaXJt
YSArIG9mZnNldCAqIHNpemVvZihwZF9lbnRyeV90KTsKKwkJCW11W2ldLnZhbCA9IDA7CisJ
CX0KKwkJSFlQRVJWSVNPUl9tbXVfdXBkYXRlKG11LCA0LCBOVUxMLCBET01JRF9TRUxGKTsK
Kwl9Cit9CisKK3ZvaWQKK3BtYXBfcmVzdW1lKCkKK3sKKwlwbWFwX3QgcG1hcDsKKwlpbnQg
aSwgcGRpciwgb2Zmc2V0OworCXZtX3BhZGRyX3QgcGRpcm1hOworCW1tdV91cGRhdGVfdCBt
dVs0XTsKKworCS8qCisJICogUmVzdG9yZSB0aGUgcmVjdXJzaXZlIG1hcCB0aGF0IHdlIHJl
bW92ZWQgb24gc3VzcGVuZC4KKwkgKi8KKwlMSVNUX0ZPUkVBQ0gocG1hcCwgJmFsbHBtYXBz
LCBwbV9saXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCS8qCisJCQkg
KiBGaWd1cmUgb3V0IHdoaWNoIHBhZ2UgZGlyZWN0b3J5IChMMikgcGFnZQorCQkJICogY29u
dGFpbnMgdGhpcyBiaXQgb2YgdGhlIHJlY3Vyc2l2ZSBtYXAgYW5kCisJCQkgKiB0aGUgb2Zm
c2V0IHdpdGhpbiB0aGF0IHBhZ2Ugb2YgdGhlIG1hcAorCQkJICogZW50cnkKKwkJCSAqLwor
CQkJcGRpciA9IChQVERQVERJICsgaSkgLyBOUERFUEc7CisJCQlvZmZzZXQgPSAoUFREUFRE
SSArIGkpICUgTlBERVBHOworCQkJcGRpcm1hID0gcG1hcC0+cG1fcGRwdFtwZGlyXSAmIFBH
X0ZSQU1FOworCQkJbXVbaV0ucHRyID0gcGRpcm1hICsgb2Zmc2V0ICogc2l6ZW9mKHBkX2Vu
dHJ5X3QpOworCQkJbXVbaV0udmFsID0gKHBtYXAtPnBtX3BkcHRbaV0gJiBQR19GUkFNRSkg
fCBQR19WOworCQl9CisJCUhZUEVSVklTT1JfbW11X3VwZGF0ZShtdSwgNCwgTlVMTCwgRE9N
SURfU0VMRik7CisJfQorfQogCiAjaWYgZGVmaW5lZChQTUFQX0RFQlVHKQogcG1hcF9waWRf
ZHVtcChpbnQgcGlkKQpAQCAtNTIxOCw3ICs0Mjc2LDcgQEAKIAkJCQkJCWlmIChwdGUgJiYg
cG1hcF9wdGVfdihwdGUpKSB7CiAJCQkJCQkJcHRfZW50cnlfdCBwYTsKIAkJCQkJCQl2bV9w
YWdlX3QgbTsKLQkJCQkJCQlwYSA9ICpwdGU7CisJCQkJCQkJcGEgPSBQVF9HRVQocHRlKTsK
IAkJCQkJCQltID0gUEhZU19UT19WTV9QQUdFKHBhICYgUEdfRlJBTUUpOwogCQkJCQkJCXBy
aW50ZigidmE6IDB4JXgsIHB0OiAweCV4LCBoOiAlZCwgdzogJWQsIGY6IDB4JXgiLAogCQkJ
CQkJCQl2YSwgcGEsIG0tPmhvbGRfY291bnQsIG0tPndpcmVfY291bnQsIG0tPmZsYWdzKTsK

--------------010503070403030001090606--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4EF245D1.2050503>