From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v8 06/13] drm/mediatek: Add HDMI support
Date: Mon, 4 Jan 2016 18:36:38 +0100
Message-ID: <1451929005-16372-7-git-send-email-p.zabel@pengutronix.de>
References: <1451929005-16372-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1451929005-16372-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp
dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1
YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0
aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR
aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw
LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2NzoKIC0gRmlsbCBFTEQg
aW5mbwogLSBGaXggZXJyb3IgbWVzc2FnZXMKIC0gUmVwbGFjZSBocGRfZXZlbnRfZGF0YSB3aXRo
IHRoZSBoZG1pIGVuY29kZXIgZGV2aWNlCiAtIFJlbmFtZSBNVDgxNzMgc3BlY2lmaWMgSERNSSBQ
SFkgZHJpdmVyLCBNVDI3MDEgaGFzIGEgZGlmZmVyZW50IFBIWS4KIC0gUmVnaXN0ZXIgdGhlIFBM
TCBpbiB0aGUgSERNSSBQSFkgbW9kdWxlIHdpdGggdGhlIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsu
CiAgIEl0cyBvdXRwdXQgaGRtaXR4X2RpZ19jdHMgaXMgcm91dGVkIGJhY2sgaW50byB0aGUgVE9Q
IGNsb2NrIG1vZHVsZS4KIC0gRm9sZCBjb250ZW50cyBvZiBwdWJsaWMgbXRrX2hkbWlfYXVkaW8u
aCBoZWFkZXIgaW50byBwcml2YXRlIG10a19oZG1pLmgKICAgaGVhZGVyLgotLS0KIGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9LY29uZmlnICAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jICAgICAgICAgICAgIHwgMjQ1ICsrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oICAgICAgICAgICAgIHwgIDI1ICsKIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgICAgfCAgIDEgKwogZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1faGRtaV9kcnYuYyAgICB8IDYxMCArKysrKysrKysr
KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgICAgICAgICAg
ICB8IDQ4MiArKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk
bWkuaCAgICAgICAgICAgIHwgMjMxICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2hkbWlfZGRjX2Rydi5jICAgIHwgMzYyICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19oZG1pX2h3LmMgICAgICAgICB8IDc1NyArKysrKysrKysrKysrKysrKysr
KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaCAgICAgICAgIHwg
IDc2ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3MuaCAgICAgICB8
IDIyMSArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9w
aHkuYyB8IDUwNiArKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMzUzMiBpbnNl
cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19jZWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
Y2VjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9oZG1pX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19oZG1pLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2hkbWkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfaGRtaV9kZGNfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2hkbWlfaHcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfaGRtaV9ody5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19oZG1pX3JlZ3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u
ZmlnCmluZGV4IGI3ZTA0MDQuLjgyOWFiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBA
IC0xMywzICsxMywxMCBAQCBjb25maWcgRFJNX01FRElBVEVLCiAJICBUaGUgbW9kdWxlIHdpbGwg
YmUgY2FsbGVkIG1lZGlhdGVrLWRybQogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1v
ZGUgc2V0dGluZyBhbmQKIAkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKworY29u
ZmlnIERSTV9NRURJQVRFS19IRE1JCisJdHJpc3RhdGUgIkRSTSBIRE1JIFN1cHBvcnQgZm9yIE1l
ZGlhdGVrIFNvQ3MiCisJZGVwZW5kcyBvbiBEUk1fTUVESUFURUsKKwlzZWxlY3QgR0VORVJJQ19Q
SFkKKwloZWxwCisJICBEUk0vS01TIEhETUkgZHJpdmVyIGZvciBNZWRpYXRlayBTb0NzCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggMjE4MDcxYy4uMmE4MWVlYiAxMDA2NDQKLS0tIGEv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9NYWtlZmlsZQpAQCAtMTEsMyArMTEsMTIgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRr
X2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19kcGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVL
KSArPSBtZWRpYXRlay1kcm0ubworCittZWRpYXRlay1kcm0taGRtaS1vYmpzIDo9IG10a19jZWMu
byBcCisJCQkgIG10a19kcm1faGRtaV9kcnYubyBcCisJCQkgIG10a19oZG1pLm8gXAorCQkJICBt
dGtfaGRtaV9kZGNfZHJ2Lm8gXAorCQkJICBtdGtfaGRtaV9ody5vIFwKKwkJCSAgbXRrX210ODE3
M19oZG1pX3BoeS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFURUtfSERNSSkgKz0gbWVkaWF0
ZWstZHJtLWhkbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19j
ZWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMzY0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1
QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxh
eS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+
CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfY2Vj
LmgiCisKKyNkZWZpbmUgVFJfQ09ORklHCQkweDAwCisjZGVmaW5lIENMRUFSX0NFQ19JUlEJCQlC
SVQoMTUpCisKKyNkZWZpbmUgQ0VDX0NLR0VOCQkweDA0CisjZGVmaW5lIENFQ18zMktfUEROCQkJ
QklUKDE5KQorI2RlZmluZSBQRE4JCQkJQklUKDE2KQorCisjZGVmaW5lIFJYX0VWRU5UCQkweDU0
CisjZGVmaW5lIEhETUlfUE9SRAkJCUJJVCgyNSkKKyNkZWZpbmUgSERNSV9IVFBMRwkJCUJJVCgy
NCkKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF9FTgkJQklUKDkpCisjZGVmaW5lIEhETUlfSFRQTEdf
SU5UX0VOCQlCSVQoOCkKKworI2RlZmluZSBSWF9HRU5fV0QJCTB4NTgKKyNkZWZpbmUgSERNSV9Q
T1JEX0lOVF8zMktfU1RBVFVTCUJJVCgyNikKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJLX1NUQVRV
UwkJQklUKDI1KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBVFVTCUJJVCgyNCkKKyNk
ZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfQ0xSCQlCSVQoMTgpCisjZGVmaW5lIFJYX0lOVF8zMktf
Q0xSCQkJQklUKDE3KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfQ0xSCQlCSVQoMTYpCisj
ZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX1NUQV9NQVNLCUJJVCgxMCkKKyNkZWZpbmUgUlhfUklT
Q19JTlRfMzJLX1NUQV9NQVNLCUJJVCg5KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RB
X01BU0sJQklUKDgpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX0VOCQlCSVQoMikKKyNkZWZp
bmUgUlhfSU5UXzMyS19FTgkJCUJJVCgxKQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfRU4J
CUJJVCgwKQorCisjZGVmaW5lIE5PUk1BTF9JTlRfQ1RSTAkJMHg1QworI2RlZmluZSBIRE1JX0hU
UExHX0lOVF9TVEEJCUJJVCgwKQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX1NUQQkJQklUKDEpCisj
ZGVmaW5lIEhETUlfSFRQTEdfSU5UX0NMUgkJQklUKDE2KQorI2RlZmluZSBIRE1JX1BPUkRfSU5U
X0NMUgkJQklUKDE3KQorI2RlZmluZSBIRE1JX0ZVTExfSU5UX0NMUgkJQklUKDIwKQorCitzdHJ1
Y3QgbXRrX2NlYyB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKmNsazsKKwlp
bnQgaXJxOworCWJvb2wgaHBkOworCXZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3Qg
ZGV2aWNlICpkZXYpOworCXN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2OworfTsKKworc3RhdGljIHZv
aWQgbXRrX2NlY19tYXNrKHN0cnVjdCBtdGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQs
CisJCQkgdW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJdTMyIHRtcCA9
IHJlYWRsKGNlYy0+cmVncyArIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSB2YWwgJiBtYXNr
OworCXdyaXRlbCh2YWwsIGNlYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3ZvaWQgbXRrX2NlY19z
ZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHZvaWQgKCpocGRfZXZlbnQp
KGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAqaGRt
aV9kZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor
CisJY2VjLT5oZG1pX2RldiA9IGhkbWlfZGV2OworCWNlYy0+aHBkX2V2ZW50ID0gaHBkX2V2ZW50
OworfQorCitib29sIG10a19jZWNfaHBkX2hpZ2goc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0
cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQg
c3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoY2VjLT5yZWdzICsgUlhfRVZFTlQpOworCisJcmV0
dXJuIChzdGF0dXMgJiAoSERNSV9QT1JEIHwgSERNSV9IVFBMRykpID09IChIRE1JX1BPUkQgfCBI
RE1JX0hUUExHKTsKK30KKworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK
KwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4g
Y2VjLT5pcnE7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShzdHJ1
Y3QgbXRrX2NlYyAqY2VjKQoreworCW10a19jZWNfbWFzayhjZWMsIENFQ19DS0dFTiwgMCwgUERO
KTsKKwltdGtfY2VjX21hc2soY2VjLCBDRUNfQ0tHRU4sIENFQ18zMktfUEROLCBDRUNfMzJLX1BE
Tik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19DTFIs
CisJCSAgICAgSERNSV9QT1JEX0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9H
RU5fV0QsIFJYX0lOVF8zMktfQ0xSLCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNl
YywgUlhfR0VOX1dELCBIRE1JX0hUUExHX0lOVF8zMktfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdf
SU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JE
X0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIFJYX0lOVF8z
MktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfSFRQTEdfSU5U
XzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lO
VF8zMktfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19F
Tik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hUUExHX0lOVF8zMktf
RU4pOworCisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIEhETUlfUE9SRF9JTlRfRU4sIEhE
TUlfUE9SRF9JTlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0VWRU5ULCBIRE1JX0hUUExH
X0lOVF9FTiwgSERNSV9IVFBMR19JTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2h0
cGxnX2lycV9kaXNhYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNl
YywgUlhfRVZFTlQsIDAsIEhETUlfUE9SRF9JTlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJY
X0VWRU5ULCAwLCBIRE1JX0hUUExHX0lOVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNf
Y2xlYXJfaHRwbGdfaXJxKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNl
YywgVFJfQ09ORklHLCBDTEVBUl9DRUNfSVJRLCBDTEVBUl9DRUNfSVJRKTsKKwltdGtfY2VjX21h
c2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIEhETUlfSFRQTEdfSU5UX0NMUiwKKwkJICAgICBIRE1J
X0hUUExHX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERN
SV9QT1JEX0lOVF9DTFIsCisJCSAgICAgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFz
ayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9GVUxMX0lOVF9DTFIsCisJCSAgICAgSERNSV9G
VUxMX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lO
VF8zMktfQ0xSLAorCQkgICAgIEhETUlfUE9SRF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNr
KGNlYywgUlhfR0VOX1dELCBSWF9JTlRfMzJLX0NMUiwgUlhfSU5UXzMyS19DTFIpOworCW10a19j
ZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUiwKKwkJICAgICBI
RE1JX0hUUExHX0lOVF8zMktfQ0xSKTsKKwl1ZGVsYXkoNSk7CisJbXRrX2NlY19tYXNrKGNlYywg
Tk9STUFMX0lOVF9DVFJMLCAwLCBIRE1JX0hUUExHX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhj
ZWMsIE5PUk1BTF9JTlRfQ1RSTCwgMCwgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFz
ayhjZWMsIFRSX0NPTkZJRywgMCwgQ0xFQVJfQ0VDX0lSUSk7CisJbXRrX2NlY19tYXNrKGNlYywg
Tk9STUFMX0lOVF9DVFJMLCAwLCBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNl
YywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhj
ZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJY
X0dFTl9XRCwgMCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7Cit9CisKK3N0YXRpYyBpcnFyZXR1
cm5fdCBtdGtfY2VjX2h0cGxnX2lzcl90aHJlYWQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0
cnVjdCBkZXZpY2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9k
cnZkYXRhKGRldik7CisJYm9vbCBocGQ7CisKKwltdGtfY2VjX2NsZWFyX2h0cGxnX2lycShjZWMp
OworCWhwZCA9IG10a19jZWNfaHBkX2hpZ2goZGV2KTsKKworCWlmIChjZWMtPmhwZCAhPSBocGQp
IHsKKwkJZGV2X2luZm8oZGV2LCAiaG90cGx1ZyBldmVudCEsY3VyIGhwZCA9ICVkLCBocGQgPSAl
ZFxuIiwKKwkJCSBjZWMtPmhwZCwgaHBkKTsKKwkJY2VjLT5ocGQgPSBocGQ7CisJCWlmIChjZWMt
PmhwZF9ldmVudCkKKwkJCWNlYy0+aHBkX2V2ZW50KGhwZCwgY2VjLT5oZG1pX2Rldik7CisJfQor
CXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtdGtfY2VjX3Byb2JlKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt
PmRldjsKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWlu
dCByZXQ7CisKKwljZWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNlYyksIEdGUF9LRVJO
RUwpOworCWlmICghY2VjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZk
YXRhKHBkZXYsIGNlYyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9S
RVNPVVJDRV9NRU0sIDApOworCWNlYy0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYs
IHJlcyk7CisJaWYgKElTX0VSUihjZWMtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoY2VjLT5y
ZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBjZWM6ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCWNlYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVM
TCk7CisJaWYgKElTX0VSUihjZWMtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPmNsayk7
CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOwor
CQlyZXR1cm4gcmV0OworCX0KKworCWNlYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAw
KTsKKwlpZiAoY2VjLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBj
ZWMgaXJxOiAlZFxuIiwgY2VjLT5pcnEpOworCQlyZXR1cm4gY2VjLT5pcnE7CisJfQorCisJcmV0
ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGNlYy0+aXJxLCBOVUxMLAorCQkJCQlt
dGtfY2VjX2h0cGxnX2lzcl90aHJlYWQsCisJCQkJCUlSUUZfU0hBUkVEIHwgSVJRRl9UUklHR0VS
X0xPVyB8CisJCQkJCUlSUUZfT05FU0hPVCwgImhkbWkgaHBkIiwgZGV2KTsKKwlpZiAocmV0KSB7
CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNlYyBpcnE6ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjZWMtPmNs
ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgY2VjIGNs
b2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdGtfY2VjX2h0cGxnX2ly
cV9lbmFibGUoY2VjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19jZWNfcmVt
b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNl
YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX2NlY19odHBsZ19pcnFfZGlz
YWJsZShjZWMpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZWMtPmNsayk7CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19jZWNfb2ZfaWRzW10g
PSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtY2VjIiwgfSwKKwl7fQorfTsK
Kworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlciA9IHsKKwkucHJvYmUgPSBt
dGtfY2VjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfY2VjX3JlbW92ZSwKKwkuZHJpdmVyID0gewor
CQkubmFtZSA9ICJtZWRpYXRlay1jZWMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfY2VjX29m
X2lkcywKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
Y2VjLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmU4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1
QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19DRUNfSAorI2RlZmluZSBfTVRLX0NFQ19ICisKK3N0
cnVjdCBkZXZpY2U7CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2Ug
KmRldiwKKwkJCSAgIHZvaWQgKCpob3RwbHVnX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmlj
ZSAqZGV2KSwKKwkJCSAgIHN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2KTsKK2Jvb2wgbXRrX2NlY19o
cGRfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZp
Y2UgKmRldik7CisKKyNlbmRpZiAvKiBfTVRLX0NFQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5jCmluZGV4IDhiMzA4MmYuLmZkYjI3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgv
b2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKKyNpbmNsdWRl
ICJtdGtfY2VjLmgiCiAjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCiAjaW5jbHVkZSAibXRrX2Ry
bV9kZHAuaCIKICNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1faGRtaV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41YzFlYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1faGRtaV9kcnYuYwpAQCAtMCwwICsxLDYxMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVk
aWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqLworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf
aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j
cnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGxpbnV4
L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o
PgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0
Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5o
PgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5o
PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgIm10a19jZWMu
aCIKKyNpbmNsdWRlICJtdGtfaGRtaS5oIgorI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisKK3N0
YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXRrX2hkbWlfY2xrX25hbWVzW01US19IRE1JX0NMS19D
T1VOVF0gPSB7CisJW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSA9ICJwaXhlbCIsCisJW01US19I
RE1JX0NMS19IRE1JX1BMTF0gPSAicGxsIiwKKwlbTVRLX0hETUlfQ0xLX0FVRF9CQ0xLXSA9ICJi
Y2xrIiwKKwlbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0gPSAic3BkaWYiLAorfTsKKworc3RhdGlj
IGNvbnN0IGVudW0gbXRrX2hkbWlfY2xrX2lkIG10a19oZG1pX2VuYWJsZV9jbG9ja3NbXSA9IHsK
KwlNVEtfSERNSV9DTEtfQVVEX0JDTEssCisJTVRLX0hETUlfQ0xLX0FVRF9TUERJRiwKK307CisK
K3N0YXRpYyBpbnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLAor
CQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp
IDwgQVJSQVlfU0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+Y2xrW2ld
ID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFtZXNbaV0p
OworCQlpZiAoSVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5j
bGtbaV0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jbGtfZW5h
YmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0g
Y2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwlp
ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWkt
PmNsa1tNVEtfSERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisK
KwlyZXR1cm4gMDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19I
RE1JX0NMS19BVURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19o
ZG1pX2Nsa19kaXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwljbGtfZGlz
YWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOworCWNsa19k
aXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0pOworfQor
CitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0KHN0cnVj
dCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0cnVjdCBt
dGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBtdGtf
aGRtaV9ocGRfaGlnaChoZG1pKSA/CisJICAgICAgIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVk
IDogY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlf
Y29ubl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtf
aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCW10a19jZWNfc2V0X2hw
ZF9ldmVudChoZG1pLT5jZWNfZGV2LCBOVUxMLCBOVUxMKTsKKworCWRybV9jb25uZWN0b3JfdW5y
ZWdpc3Rlcihjb25uKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubik7Cit9CisKK3N0YXRp
YyBpbnQgaGRtaV9jb25uX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwK
KwkJCQkgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCB2YWwpCit7CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfY29ubl9nZXRfbW9kZXMoc3RydWN0
IGRybV9jb25uZWN0b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9j
dHhfZnJvbV9jb25uKGNvbm4pOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQ7CisKKwlp
ZiAoIWhkbWktPmRkY19hZHB0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVkaWQgPSBkcm1fZ2V0
X2VkaWQoY29ubiwgaGRtaS0+ZGRjX2FkcHQpOworCWlmICghZWRpZCkKKwkJcmV0dXJuIC1FTk9E
RVY7CisKKwloZG1pLT5kdmlfbW9kZSA9ICFkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihlZGlkKTsK
KworCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsK
KworCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19l
bGQoY29ubiwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj
IGludCBtdGtfaGRtaV9jb25uX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4s
CisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtf
aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCWRldl9pbmZvKGhkbWkt
PmRldiwgInhyZXM9JWQsIHlyZXM9JWQsIHJlZnJlc2g9JWQsIGludGw9JWQgY2xvY2s9JWRcbiIs
CisJCSBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksIG1vZGUtPnZyZWZyZXNoLAorCQkg
ISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNsb2NrICog
MTAwMCk7CisKKwlpZiAoaGRtaS0+YnJpZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5
X21vZGUgYWRqdXN0ZWRfbW9kZTsKKworCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBt
b2RlKTsKKwkJaWYgKCFkcm1fYnJpZGdlX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1v
ZGUsCisJCQkJCSAgICZhZGp1c3RlZF9tb2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsKKwl9CisK
KwlpZiAobW9kZS0+Y2xvY2sgPj0gMjcwMDAgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPD0gMjk3MDAw
ICYmCisJICAgIG1vZGUtPmhkaXNwbGF5IDw9IDB4MWZmZiAmJgorCSAgICBtb2RlLT52ZGlzcGxh
eSA8PSAweDFmZmYpCisJCXJldHVybiBNT0RFX09LOworCisJcmV0dXJuIE1PREVfQkFEOworfQor
CitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfaGRtaV9jb25uX2Jlc3RfZW5jKHN0cnVj
dCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlf
Y3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBoZG1pLT5icmlkZ2UuZW5jb2RlcjsKK30K
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIG10a19oZG1pX2Nvbm5l
Y3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1z
LAorCS5kZXRlY3QgPSBoZG1pX2Nvbm5fZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBl
cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gaGRtaV9jb25uX2Rl
c3Ryb3ksCisJLnNldF9wcm9wZXJ0eSA9IGhkbWlfY29ubl9zZXRfcHJvcGVydHksCisJLnJlc2V0
ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRl
X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwku
YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJv
eV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf
ZnVuY3MKKwkJbXRrX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVz
ID0gbXRrX2hkbWlfY29ubl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSBtdGtfaGRtaV9jb25u
X21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IG10a19oZG1pX2Nvbm5fYmVzdF9lbmMsCit9
OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9ocGRfZXZlbnQoYm9vbCBocGQsIHN0cnVjdCBkZXZp
Y2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2
KTsKKworCWlmIChoZG1pICYmIGhkbWktPmJyaWRnZS5lbmNvZGVyICYmIGhkbWktPmJyaWRnZS5l
bmNvZGVyLT5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5icmlkZ2UuZW5j
b2Rlci0+ZGV2KTsKK30KKworLyoKKyAqIEJyaWRnZSBjYWxsYmFja3MKKyAqLworCitzdGF0aWMg
aW50IG10a19oZG1pX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sK
KwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOwor
CWludCByZXQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5lbmNvZGVyLT5k
ZXYsICZoZG1pLT5jb25uLAorCQkJCSAmbXRrX2hkbWlfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBE
Uk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5k
ZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3I6ICVkXG4iLCByZXQpOworCQlyZXR1
cm4gcmV0OworCX0KKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmhkbWktPmNvbm4sICZtdGtf
aGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWhkbWktPmNvbm4ucG9sbGVkID0gRFJN
X0NPTk5FQ1RPUl9QT0xMX0hQRDsKKwloZG1pLT5jb25uLmludGVybGFjZV9hbGxvd2VkID0gdHJ1
ZTsKKwloZG1pLT5jb25uLmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOworCisJcmV0ID0gZHJt
X2Nvbm5lY3Rvcl9yZWdpc3RlcigmaGRtaS0+Y29ubik7CisJaWYgKHJldCkgeworCQlkZXZfZXJy
KGhkbWktPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkXG4iLCByZXQpOwor
CQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j
b2RlcigmaGRtaS0+Y29ubiwKKwkJCQkJCWJyaWRnZS0+ZW5jb2Rlcik7CisJaWYgKHJldCkgewor
CQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gYXR0YWNoIGNvbm5lY3RvciB0byBl
bmNvZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoYnJpZGdlLT5u
ZXh0KSB7CisJCWJyaWRnZS0+bmV4dC0+ZW5jb2RlciA9IGJyaWRnZS0+ZW5jb2RlcjsKKwkJcmV0
ID0gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLT5kZXYsIGJyaWRnZS0+bmV4dCk7
CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gYXR0
YWNoIGV4dGVybmFsIGJyaWRnZTogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJ
fQorCisJbXRrX2NlY19zZXRfaHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIG10a19oZG1pX2hwZF9l
dmVudCwgaGRtaS0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBtdGtfaGRt
aV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCWNvbnN0
IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9t
b2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBt
dGtfaGRtaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0
cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwlw
aHlfcG93ZXJfb2ZmKGhkbWktPnBoeSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNs
a1tNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1p
LT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p
X2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRr
X2hkbWlfcG93ZXJfb2ZmKGhkbWkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2Vf
bW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCSAgICAgIHN0cnVjdCBkcm1f
ZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFk
anVzdGVkX21vZGUpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9i
cmlkZ2UoYnJpZGdlKTsKKworCWRldl9pbmZvKGhkbWktPmRldiwgImN1ciBpbmZvOiBuYW1lOiVz
LCBoZGlzcGxheTolZFxuIiwKKwkJIGFkanVzdGVkX21vZGUtPm5hbWUsIGFkanVzdGVkX21vZGUt
PmhkaXNwbGF5KTsKKwlkZXZfaW5mbyhoZG1pLT5kZXYsICJoc3luY19zdGFydDolZCxoc3luY19l
bmQ6JWQsIGh0b3RhbDolZCIsCisJCSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCwgYWRqdXN0
ZWRfbW9kZS0+aHN5bmNfZW5kLAorCQkgYWRqdXN0ZWRfbW9kZS0+aHRvdGFsKTsKKwlkZXZfaW5m
byhoZG1pLT5kZXYsICJoc2tldzolZCwgdmRpc3BsYXk6JWRcbiIsCisJCSBhZGp1c3RlZF9tb2Rl
LT5oc2tldywgYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpOworCWRldl9pbmZvKGhkbWktPmRldiwg
InZzeW5jX3N0YXJ0OiVkLCB2c3luY19lbmQ6JWQsIHZ0b3RhbDolZCIsCisJCSBhZGp1c3RlZF9t
b2RlLT52c3luY19zdGFydCwgYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kLAorCQkgYWRqdXN0ZWRf
bW9kZS0+dnRvdGFsKTsKKwlkZXZfaW5mbyhoZG1pLT5kZXYsICJ2c2NhbjolZCwgZmxhZzolZFxu
IiwKKwkJIGFkanVzdGVkX21vZGUtPnZzY2FuLCBhZGp1c3RlZF9tb2RlLT5mbGFncyk7CisKKwlk
cm1fbW9kZV9jb3B5KCZoZG1pLT5tb2RlLCBhZGp1c3RlZF9tb2RlKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkK
K3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2Up
OworCisJbXRrX2hkbWlfcG93ZXJfb24oaGRtaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p
X2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRrX2hkbWlf
b3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhkbWktPm1vZGUpOworCWNsa19wcmVwYXJl
X2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSk7CisJY2xrX3ByZXBhcmVf
ZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0pOworCXBoeV9wb3dlcl9v
bihoZG1pLT5waHkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mg
bXRrX2hkbWlfYnJpZGdlX2Z1bmNzID0geworCS5hdHRhY2ggPSBtdGtfaGRtaV9icmlkZ2VfYXR0
YWNoLAorCS5tb2RlX2ZpeHVwID0gbXRrX2hkbWlfYnJpZGdlX21vZGVfZml4dXAsCisJLmRpc2Fi
bGUgPSBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZSwKKwkucG9zdF9kaXNhYmxlID0gbXRrX2hkbWlf
YnJpZGdlX3Bvc3RfZGlzYWJsZSwKKwkubW9kZV9zZXQgPSBtdGtfaGRtaV9icmlkZ2VfbW9kZV9z
ZXQsCisJLnByZV9lbmFibGUgPSBtdGtfaGRtaV9icmlkZ2VfcHJlX2VuYWJsZSwKKwkuZW5hYmxl
ID0gbXRrX2hkbWlfYnJpZGdlX2VuYWJsZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZHRf
cGFyc2VfcGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgIHN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlz
dHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9k
ZSAqY2VjX25wLCAqcG9ydCwgKmVwLCAqcmVtb3RlLCAqaTJjX25wOworCXN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKmNlY19wZGV2OworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgcmVz
b3VyY2UgKm1lbTsKKwlpbnQgcmV0OworCisJaGRtaS0+Zmx0X25fNXZfZ3BpbyA9IG9mX2dldF9u
YW1lZF9ncGlvKG5wLCAiZmx0X25fNXYtZ3Bpb3MiLCAwKTsKKwlpZiAoaGRtaS0+Zmx0X25fNXZf
Z3BpbyA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGZsdF9uXzV2IGdwaW86
ICVkXG4iLAorCQkJaGRtaS0+Zmx0X25fNXZfZ3Bpbyk7CisJCXJldHVybiBoZG1pLT5mbHRfbl81
dl9ncGlvOworCX0KKworCXJldCA9IG10a19oZG1pX2dldF9hbGxfY2xrKGhkbWksIG5wKTsKKwlp
ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja3M6ICVkXG4iLCBy
ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRoZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERN
SSBob3RwbHVnIGRldGVjdGlvbiAqLworCWNlY19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2Rl
KG5wLT5wYXJlbnQsIE5VTEwsCisJCQkJCSAibWVkaWF0ZWssbXQ4MTczLWNlYyIpOworCWlmICgh
Y2VjX25wKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgQ0VDIG5vZGVcbiIpOwor
CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZWNfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25v
ZGUoY2VjX25wKTsKKwlpZiAoIWNlY19wZGV2KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiV2Fp
dGluZyBmb3IgQ0VDIGRldmljZSAlc1xuIiwKKwkJCWNlY19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0
dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCWhkbWktPmNlY19kZXYgPSAmY2VjX3BkZXYtPmRldjsK
KworCS8qCisJICogVGhlIG1lZGlhdGVrLHN5c2Nvbi1oZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEg
cGhhbmRsZSBsaW5rIHRvIHRoZQorCSAqIE1NU1lTX0NPTkZJRyBkZXZpY2UgYW5kIHRoZSByZWdp
c3RlciBvZmZzZXQgb2YgdGhlIEhETUlfU1lTX0NGRworCSAqIHJlZ2lzdGVycyBpdCBjb250YWlu
cy4KKwkgKi8KKwlyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAi
bWVkaWF0ZWssc3lzY29uLWhkbWkiKTsKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRl
eChucCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIiwgMSwKKwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0
KTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpCisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAo
cmV0KSB7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFp
bGVkIHRvIGdldCBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGRtaS0+c3lzX3JlZ21hcCA9IHJlZ21hcDsKKworCW1l
bSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRt
aS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUiho
ZG1pLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGhkbWlfc2hl
bGw6ICVsZFxuIiwKKwkJCVBUUl9FUlIoaGRtaS0+cmVncykpOworCQlyZXR1cm4gUFRSX0VSUiho
ZG1pLT5yZWdzKTsKKwl9CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQobnAsIDEp
OworCWlmICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBvcnQgbm9k
ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxkX2J5X25h
bWUocG9ydCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Np
bmcgZW5kcG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1lKTsKKwkJ
b2Zfbm9kZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChw
b3J0KTsKKworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOwor
CWlmICghcmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3IvYnJpZGdl
IG5vZGUgZm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVf
cHV0KGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsKKworCWlm
ICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3IiKSkgewor
CQloZG1pLT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOworCQlpZiAo
IWhkbWktPmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9yIGV4dGVy
bmFsIGJyaWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJuIC1FUFJP
QkVfREVGRVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJlbW90ZSwg
ImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5mdWxsX25h
bWUpOworCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zf
bm9kZV9wdXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNfYWRhcHRl
cl9ieV9ub2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQlyZXR1cm4g
LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IGhkbWlf
Zmx0X25fNXZfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IG10a19o
ZG1pICpoZG1pID0gYXJnOworCisJZGV2X2VycihoZG1pLT5kZXYsICJkZXRlY3RlZCA1diBwaW4g
ZXJyb3Igc3RhdHVzXG4iKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RybV9oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry
dWN0IG10a19oZG1pICpoZG1pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJ
aW50IHJldDsKKworCWhkbWkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhkbWkpLCBHRlBf
S0VSTkVMKTsKKwlpZiAoIWhkbWkpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRtaS0+ZGV2ID0g
ZGV2OworCisJcmV0ID0gbXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEoaGRtaSwgcGRldik7CisJaWYg
KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWhkbWktPmZsdF9uXzV2X2lycSA9IGdwaW9fdG9faXJx
KGhkbWktPmZsdF9uXzV2X2dwaW8pOworCWlmIChoZG1pLT5mbHRfbl81dl9pcnEgPCAwKSB7CisJ
CWRldl9lcnIoZGV2LCAiaGRtaS0+Zmx0X25fNXZfaXJxID0gJWRcbiIsCisJCQloZG1pLT5mbHRf
bl81dl9pcnEpOworCQlyZXR1cm4gaGRtaS0+Zmx0X25fNXZfaXJxOworCX0KKworCXJldCA9IGRl
dm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBoZG1pLT5mbHRfbl81dl9pcnEsCisJCQkJCU5V
TEwsIGhkbWlfZmx0X25fNXZfaXJxX3RocmVhZCwKKwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8
CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULAorCQkJCQkiaGRtaSBm
bHRfbl81diIsIGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
cmVnaXN0ZXIgaGRtaSBmbHRfbl81diBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gcmV0OworCX0K
KworCWhkbWktPnBoeSA9IGRldm1fcGh5X2dldChkZXYsICJoZG1pIik7CisJaWYgKElTX0VSUiho
ZG1pLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaS0+cGh5KTsKKwkJZGV2X2VycihkZXYs
ICJGYWlsZWQgdG8gZ2V0IEhETUkgUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZG1pKTsKKworCXJldCA9IG10a19oZG1p
X291dHB1dF9pbml0KGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gaW5pdGlhbGl6ZSBoZG1pIG91dHB1dFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaGRt
aS0+YnJpZGdlLmZ1bmNzID0gJm10a19oZG1pX2JyaWRnZV9mdW5jczsKKwloZG1pLT5icmlkZ2Uu
b2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXJldCA9IGRybV9icmlkZ2VfYWRkKCZoZG1p
LT5icmlkZ2UpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGJy
aWRnZSwgcmV0ID0gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRr
X2hkbWlfY2xrX2VuYWJsZV9hdWRpbyhoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2
LCAiRmFpbGVkIHRvIGVuYWJsZSBhdWRpbyBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVy
cl9icmlkZ2VfcmVtb3ZlOworCX0KKworCWRldl9pbmZvKGRldiwgIm1lZGlhdGVrIGhkbWkgcHJv
YmUgc3VjY2Vzc1xuIik7CisJcmV0dXJuIDA7CisKK2Vycl9icmlkZ2VfcmVtb3ZlOgorCWRybV9i
cmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp
bnQgbXRrX2RybV9oZG1pX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor
CXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJ
ZHJtX2JyaWRnZV9yZW1vdmUoJmhkbWktPmJyaWRnZSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVn
aXN0ZXIoaGRtaS0+YXVkaW9fcGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVM
TCk7CisJbXRrX2hkbWlfY2xrX2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJcmV0dXJuIDA7Cit9CisK
KyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc3VzcGVuZChzdHJ1
Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZk
YXRhKGRldik7CisKKwltdGtfaGRtaV9wb3dlcl9vZmYoaGRtaSk7CisJbXRrX2hkbWlfY2xrX2Rp
c2FibGVfYXVkaW8oaGRtaSk7CisJZGV2X2luZm8oZGV2LCAiaGRtaSBzdXNwZW5kIHN1Y2Nlc3Mh
XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9yZXN1bWUoc3RydWN0
IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0
YShkZXYpOworCWludCByZXQgPSAwOworCisJcmV0ID0gbXRrX2hkbWlfY2xrX2VuYWJsZV9hdWRp
byhoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiaGRtaSByZXN1bWUgZmFpbGVk
IVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbXRrX2hkbWlfcG93ZXJfb24oaGRtaSk7CisJ
bXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhkbWktPm1vZGUpOworCWRl
dl9pbmZvKGRldiwgImhkbWkgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNl
bmRpZgorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19oZG1pX3BtX29wcywKKwkJCSBtdGtf
aGRtaV9zdXNwZW5kLCBtdGtfaGRtaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m
X2RldmljZV9pZCBtdGtfZHJtX2hkbWlfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJt
ZWRpYXRlayxtdDgxNzMtaGRtaSIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv
cm1fZHJpdmVyIG10a19oZG1pX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHJtX2hkbWlfcHJv
YmUsCisJLnJlbW92ZSA9IG10a19kcm1faGRtaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5h
bWUgPSAibWVkaWF0ZWstZHJtLWhkbWkiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX2hk
bWlfb2ZfaWRzLAorCQkucG0gPSAmbXRrX2hkbWlfcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMg
c3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19oZG1pX2RyaXZlcnNbXSA9IHsKKwkm
bXRrX2hkbWlfcGh5X2RyaXZlciwKKwkmbXRrX2hkbWlfZGRjX2RyaXZlciwKKwkmbXRrX2NlY19k
cml2ZXIsCisJJm10a19oZG1pX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19o
ZG1pdHhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp
IDwgQVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRmb3Jt
X2RyaXZlcl9yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsK
KwkJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAg
ICAgbXRrX2hkbWlfZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsK
KwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0
Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKworCXJldHVybiBy
ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfaGRtaXR4X2V4aXQodm9pZCkKK3sKKwlp
bnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2hkbWlfZHJpdmVycykgLSAxOyBpID49
IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tp
XSk7Cit9CisKK21vZHVsZV9pbml0KG10a19oZG1pdHhfaW5pdCk7Cittb2R1bGVfZXhpdChtdGtf
aGRtaXR4X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr
LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBEcml2ZXIiKTsKK01P
RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyYmVhYgotLS0gL2Rldi9udWxsCisr
KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCkBAIC0wLDAgKzEsNDgyIEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmll
IFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy
IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5j
bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs
aW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19oZG1p
LmgiCisjaW5jbHVkZSAibXRrX2hkbWlfaHcuaCIKKworc3RhdGljIHU4IG10a19oZG1pX2F1ZF9n
ZXRfY2hubF9jb3VudChlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7
CisJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8xXzA6
CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzJfMDoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8xOgorCWNhc2Ug
SERNSV9BVURfQ0hBTl9UWVBFXzNfMDoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRE1JX0FVRF9DSEFO
X1RZUEVfM18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoKKwljYXNlIEhETUlfQVVE
X0NIQU5fVFlQRV8zXzBfTFJTOgorCQlyZXR1cm4gNDsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ
RV80XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8wOgorCWNhc2UgSERNSV9BVURfQ0hB
Tl9UWVBFXzNfMV9MUlM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlM6CisJCXJl
dHVybiA1OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToKKwljYXNlIEhETUlfQVVEX0NI
QU5fVFlQRV82XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xX0NMUlM6CisJY2FzZSBI
RE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9D
SDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFO
X1RZUEVfNl8wX0NIUjoKKwkJcmV0dXJuIDY7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8x
OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUzoKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV82XzFfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzZfMV9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSDoKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV83XzBfTFNSX1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTENfUkM6CisJ
Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzdfMF9MU0RfUlNEOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTOgorCWNhc2UgSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMF9DU19DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0g6CisJ
Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV83XzBfQ0hfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUjoKKwlj
YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzdfMF9MU1NfUlNTX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfOF8wX0xI
X1JIX0NTOgorCQlyZXR1cm4gNzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzE6CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzdfMV9MU1JfUlNSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MQ19SQzoKKwljYXNl
IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf
N18xX0xTRF9SU0Q6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1M6CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfN18xX0NTX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSDoKKwljYXNl
IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzdfMV9DSF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfQ0hSOgorCWNhc2Ug
SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf
N18xX0xTU19SU1NfTFNSX1JTUjoKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDI7
CisJfQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwgdTMyIGNsb2NrLAorCQkJCSAgICAgIGVudW0gaGRtaV9kaXNwbGF5X2Nv
bG9yX2RlcHRoIGRlcHRoKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQgcmV0OworCisJ
LyogVGhlIERQSSBkcml2ZXIgYWxyZWFkeSBzaG91bGQgaGF2ZSBzZXQgVFZEUExMIHRvIHRoZSBj
b3JyZWN0IHJhdGUgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+Y2xrW01US19IRE1JX0NM
S19IRE1JX1BMTF0sIGNsb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAi
RmFpbGVkIHRvIHNldCBQTEwgdG8gJXUgSHo6ICVkXG4iLCBjbG9jaywKKwkJCXJldCk7CisJCXJl
dHVybiByZXQ7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5jbGtbTVRLX0hETUlf
Q0xLX0hETUlfUExMXSk7CisKKwlpZiAoRElWX1JPVU5EX0NMT1NFU1QocmF0ZSwgMTAwMCkgIT0g
RElWX1JPVU5EX0NMT1NFU1QoY2xvY2ssIDEwMDApKQorCQlkZXZfd2FybihoZG1pLT5kZXYsICJX
YW50IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssCisJCQkgcmF0ZSk7CisJZWxzZQor
CQlkZXZfZGJnKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3QgJWx1IEh6XG4iLCBjbG9j
aywgcmF0ZSk7CisKKwltdGtfaGRtaV9od19jb25maWdfc3lzKGhkbWkpOworCW10a19oZG1pX2h3
X3NldF9kZWVwX2NvbG9yX21vZGUoaGRtaSwgZGVwdGgpOworCXJldHVybiAwOworfQorCitzdGF0
aWMgdm9pZCBtdGtfaGRtaV92aWRlb19zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwKKwkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCW10a19o
ZG1pX2h3X3Jlc2V0KGhkbWkpOworCW10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2UoaGRtaSwgdHJ1
ZSk7CisJbXRrX2hkbWlfaHdfd3JpdGVfaW50X21hc2soaGRtaSwgMHhmZik7CisJbXRrX2hkbWlf
aHdfZW5hYmxlX2R2aV9tb2RlKGhkbWksIGhkbWktPmR2aV9tb2RlKTsKKwltdGtfaGRtaV9od19u
Y3RzX2F1dG9fd3JpdGVfZW5hYmxlKGhkbWksIHRydWUpOworCisJbXRrX2hkbWlfaHdfbXNpY19z
ZXR0aW5nKGhkbWksIG1vZGUpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9lbmFibGVf
cGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlf
aHdfc2VuZF9hdWRfcGFja2V0KGhkbWksIGVuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg
Ym9vbCBvbikKK3sKKwltdGtfaGRtaV9od19uY3RzX2VuYWJsZShoZG1pLCBvbik7CisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX3NldF9pbnB1dChzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWkpCit7CisJdTggY2hhbl9jb3VudDsKKworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hh
bm5lbF9zd2FwKGhkbWksIEhETUlfQVVEX1NXQVBfTEZFX0NDKTsKKwltdGtfaGRtaV9od19hdWRf
cmF3X2RhdGFfZW5hYmxlKGhkbWksIHRydWUpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRf
aW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRiAmJgorCSAgICBoZG1pLT5hdWRfcGFy
YW0uYXVkX2NvZGVjID09IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNUKSB7CisJCW10a19oZG1p
X2h3X2F1ZF9zZXRfYml0X251bShoZG1pLAorCQkJCQkgICAgSERNSV9BVURJT19TQU1QTEVfU0la
RV8yNCk7CisJfSBlbHNlIGlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQgPT0KKwkJCUhE
TUlfSTJTX01PREVfTEpUXzI0QklUKSB7CisJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9
IEhETUlfSTJTX01PREVfTEpUXzE2QklUOworCX0KKworCW10a19oZG1pX2h3X2F1ZF9zZXRfaTJz
X2ZtdChoZG1pLAorCQkJCSAgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQpOworCW10a19o
ZG1pX2h3X2F1ZF9zZXRfYml0X251bShoZG1pLCBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0KTsK
KworCW10a19oZG1pX2h3X2F1ZF9zZXRfaGlnaF9iaXRyYXRlKGhkbWksIGZhbHNlKTsKKwltdGtf
aGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShoZG1pLCBmYWxzZSk7CisJbXRr
X2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoaGRtaSwgZmFsc2UpOworCisJaWYgKGhkbWktPmF1ZF9w
YXJhbS5hdWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRikgeworCQltdGtfaGRt
aV9od19hdWRfZHNkX2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCWlmIChoZG1pLT5hdWRfcGFyYW0u
YXVkX2NvZGVjID09CisJCQlIRE1JX0FVRElPX0NPRElOR19UWVBFX0RTVCkgeworCQkJbXRrX2hk
bWlfcGh5X2F1ZF9kc3Rfbm9ybWFsX2RvdWJsZV9lbmFibGUoaGRtaSwKKwkJCQkJCQkJICB0cnVl
KTsKKwkJCW10a19oZG1pX2h3X2F1ZF9kc3RfZW5hYmxlKGhkbWksIHRydWUpOworCQl9CisKKwkJ
Y2hhbl9jb3VudCA9IG10a19oZG1pX2F1ZF9nZXRfY2hubF9jb3VudAorCQkJCQkJIChIRE1JX0FV
RF9DSEFOX1RZUEVfMl8wKTsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfY2hhbl9udW0oaGRt
aSwKKwkJCQkJCSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wLAorCQkJCQkJIGNoYW5fY291bnQpOwor
CQltdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoaGRtaSwKKwkJCQkJICAgICAgIEhETUlf
QVVEX0lOUFVUX1NQRElGKTsKKwl9IGVsc2UgeworCQltdGtfaGRtaV9od19hdWRfZHNkX2VuYWJs
ZShoZG1pLCBmYWxzZSk7CisJCWNoYW5fY291bnQgPQorCQkJbXRrX2hkbWlfYXVkX2dldF9jaG5s
X2NvdW50KAorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9jaGFuX3R5cGUpOworCQltdGtf
aGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bSgKKwkJCWhkbWksCisJCQloZG1pLT5hdWRfcGFy
YW0uYXVkX2lucHV0X2NoYW5fdHlwZSwKKwkJCWNoYW5fY291bnQpOworCQltdGtfaGRtaV9od19h
dWRfc2V0X2lucHV0X3R5cGUoaGRtaSwKKwkJCQkJICAgICAgIEhETUlfQVVEX0lOUFVUX0kyUyk7
CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfc3JjKHN0
cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxh
eV9tb2RlKQoreworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCBmYWxzZSk7CisK
KwlpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX0ky
UykgeworCQlzd2l0Y2ggKGhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcykgeworCQljYXNlIEhE
TUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDoKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBM
RV9GUkVRVUVOQ1lfNDQxMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4
MDAwOgorCQljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV84ODIwMDoKKwkJY2FzZSBI
RE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfOTYwMDA6CisJCQltdGtfaGRtaV9od19hdWRfc3Jj
X29mZihoZG1pKTsKKwkJCS8qIG10a19oZG1pX2h3X2F1ZF9zcmNfZW5hYmxlKGhkbWksIGZhbHNl
KTsgKi8KKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsaygKKwkJCWhkbWksCisJCQloZG1pLT5h
dWRfcGFyYW0uYXVkX21jbGspOworCQkJbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZSho
ZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBl
bHNlIHsKKwkJc3dpdGNoIChoZG1pLT5hdWRfcGFyYW0uaWVjX2ZyYW1lX2ZzKSB7CisJCWNhc2Ug
SERNSV9JRUNfMzJLOgorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzID0KKwkJCSAgICBI
RE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfMzIwMDA7CisJCQltdGtfaGRtaV9od19hdWRfc3Jj
X29mZihoZG1pKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1pLAorCQkJCQkJIEhE
TUlfQVVEX01DTEtfMTI4RlMpOworCQkJbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZSho
ZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSBIRE1JX0lFQ180OEs6CisJCQloZG1pLT5h
dWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJICAgIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5D
WV80ODAwMDsKKwkJCW10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKGhkbWkpOworCQkJbXRrX2hkbWlf
aHdfYXVkX3NldF9tY2xrKGhkbWksCisJCQkJCQkgSERNSV9BVURfTUNMS18xMjhGUyk7CisJCQlt
dGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOwor
CQljYXNlIEhETUlfSUVDXzQ0SzoKKwkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJ
CQkgICAgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOworCQkJbXRrX2hkbWlfaHdf
YXVkX3NyY19vZmYoaGRtaSk7CisJCQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJ
CQkJCSBIRE1JX0FVRF9NQ0xLXzEyOEZTKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9l
bmFibGUoaGRtaSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJ
fQorCX0KKwltdGtfaGRtaV9od19hdWRfc2V0X25jdHMoaGRtaSwgaGRtaS0+ZGVwdGgsIGhkbWkt
PmF1ZF9wYXJhbS5hdWRfaGRtaV9mcywKKwkJCQkgZGlzcGxheV9tb2RlLT5jbG9jayk7CisKKwlt
dGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfY2hubF9zdGF0dXMoc3RydWN0IG10a19oZG1pICpoZG1p
KQoreworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoCisJCWhkbWksCisJICAg
aGRtaS0+YXVkX3BhcmFtLmhkbWlfbF9jaGFubmVsX3N0YXRlLAorCSAgIGhkbWktPmF1ZF9wYXJh
bS5oZG1pX3JfY2hhbm5lbF9zdGF0ZSwKKwkgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMp
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmln
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k
ZSAqZGlzcGxheV9tb2RlKQoreworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOwor
CW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIGZhbHNlKTsKKworCW10a19oZG1pX2F1
ZF9zZXRfaW5wdXQoaGRtaSk7CisJbXRrX2hkbWlfYXVkX3NldF9zcmMoaGRtaSwgZGlzcGxheV9t
b2RlKTsKKwltdGtfaGRtaV9hdWRfc2V0X2Nobmxfc3RhdHVzKGhkbWkpOworCisJdXNsZWVwX3Jh
bmdlKDUwLCAxMDApOworCisJbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKGhkbWksIHRydWUp
OworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIHRydWUpOworCW10a19oZG1pX2h3
X2F1ZF9tdXRlKGhkbWksIGZhbHNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9zZXR1cF9hdl9tdXRlX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRr
X2hkbWlfaHdfc2VuZF9hdl9tdXRlKGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50
IG10a19oZG1pX3NldHVwX2F2X3VubXV0ZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQor
eworCW10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKGhkbWkpOworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F2aV9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpo
ZG1pLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRt
aV9hdmlfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxN107CisJc3NpemVfdCBlcnI7CisK
KwllcnIgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwg
bW9kZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVk
IHRvIGdldCBBVkkgaW5mb2ZyYW1lIGZyb20gbW9kZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4g
ZXJyOworCX0KKworCWVyciA9IGhkbWlfYXZpX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYs
ICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlemRcbiIsIGVycik7CisJCXJldHVybiBl
cnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6
ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVw
X3NwZF9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQljb25zdCBjaGFyICp2
ZW5kb3IsCisJCQkJCWNvbnN0IGNoYXIgKnByb2R1Y3QpCit7CisJc3RydWN0IGhkbWlfc3BkX2lu
Zm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMjldOworCXNzaXplX3QgZXJyOworCisJZXJyID0g
aGRtaV9zcGRfaW5mb2ZyYW1lX2luaXQoJmZyYW1lLCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChl
cnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU1BE
IGluZm9mcmFtZTogJXpkXG4iLAorCQkJICAgICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwor
CWVyciA9IGhkbWlfc3BkX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8g
cGFjayBTRFAgaW5mb2ZyYW1lOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJ
bXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikp
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F1ZGlvX2luZm9m
cmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJc3RydWN0IGhkbWlfYXVkaW9faW5mb2Zy
YW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxNF07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1p
X2F1ZGlvX2luZm9mcmFtZV9pbml0KCZmcmFtZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vy
cihoZG1pLT5kZXYsICJGYWlsZWQgdG8gc2V0dXAgYXVkaW8gaW5mb2ZyYW1lOiAlemRcbiIsCisJ
CQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWZyYW1lLmNvZGluZ190eXBlID0gSERNSV9B
VURJT19DT0RJTkdfVFlQRV9TVFJFQU07CisJZnJhbWUuc2FtcGxlX2ZyZXF1ZW5jeSA9IEhETUlf
QVVESU9fU0FNUExFX0ZSRVFVRU5DWV9TVFJFQU07CisJZnJhbWUuc2FtcGxlX3NpemUgPSBIRE1J
X0FVRElPX1NBTVBMRV9TSVpFX1NUUkVBTTsKKwlmcmFtZS5jaGFubmVscyA9CisJICAgIG10a19o
ZG1pX2F1ZF9nZXRfY2hubF9jb3VudCgKKwkgICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9j
aGFuX3R5cGUpOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1
ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+
ZGV2LCAiRmFpbGVkIHRvIHBhY2sgYXVkaW8gaW5mb2ZyYW1lOiAlemRcbiIsCisJCQllcnIpOwor
CQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBi
dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSwKKwkJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBoZG1p
X3ZlbmRvcl9pbmZvZnJhbWUgZnJhbWU7CisJdTggYnVmZmVyWzEwXTsKKwlzc2l6ZV90IGVycjsK
KworCWVyciA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZy
YW1lLCBtb2RlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJIkZhaWxl
ZCB0byBnZXQgdmVuZG9yIGluZm9mcmFtZSBmcm9tIG1vZGU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0
dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3ZlbmRvcl9pbmZvZnJhbWVfcGFjaygmZnJhbWUs
IGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihoZG1pLT5k
ZXYsICJGYWlsZWQgdG8gcGFjayB2ZW5kb3IgaW5mb2ZyYW1lOiAlemRcbiIsCisJCQllcnIpOwor
CQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBi
dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19oZG1pX2hw
ZF9oaWdoKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZXR1cm4gaGRtaS0+Y2VjX2RldiA/
IG10a19jZWNfaHBkX2hpZ2goaGRtaS0+Y2VjX2RldikgOiBmYWxzZTsKK30KKworaW50IG10a19o
ZG1pX291dHB1dF9pbml0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgaGRtaV9h
dWRpb19wYXJhbSAqYXVkX3BhcmFtID0gJmhkbWktPmF1ZF9wYXJhbTsKKworCWlmIChoZG1pLT5p
bml0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhkbWktPmNzcCA9IEhETUlfQ09MT1JTUEFDRV9S
R0I7CisJaGRtaS0+ZGVwdGggPSBIRE1JX0RFRVBfQ09MT1JfMjRCSVRTOworCWhkbWktPm91dHB1
dCA9IHRydWU7CisJYXVkX3BhcmFtLT5hdWRfY29kZWMgPSBIRE1JX0FVRElPX0NPRElOR19UWVBF
X1BDTTsKKwlhdWRfcGFyYW0tPmF1ZF9oZG1pX2ZzID0gSERNSV9BVURJT19TQU1QTEVfRlJFUVVF
TkNZXzQ4MDAwOworCWF1ZF9wYXJhbS0+YXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBM
RV9TSVpFXzE2OworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X3R5cGUgPSBIRE1JX0FVRF9JTlBVVF9J
MlM7CisJYXVkX3BhcmFtLT5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOwor
CWF1ZF9wYXJhbS0+YXVkX21jbGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCWF1ZF9wYXJhbS0+
aWVjX2ZyYW1lX2ZzID0gSERNSV9JRUNfNDhLOworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X2NoYW5f
dHlwZSA9IEhETUlfQVVEX0NIQU5fVFlQRV8yXzA7CisJYXVkX3BhcmFtLT5oZG1pX2xfY2hhbm5l
bF9zdGF0ZVsyXSA9IDI7CisJYXVkX3BhcmFtLT5oZG1pX3JfY2hhbm5lbF9zdGF0ZVsyXSA9IDI7
CisJaGRtaS0+aW5pdCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfaGRtaV9w
b3dlcl9vbihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfbWFrZV9yZWdf
d3JpdGFibGUoaGRtaSwgdHJ1ZSk7CisJbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhk
bWksIHRydWUpOworfQorCit2b2lkIG10a19oZG1pX3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkpCit7CisJbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhkbWksIHRydWUpOwor
CW10a19oZG1pX2h3X21ha2VfcmVnX3dyaXRhYmxlKGhkbWksIGZhbHNlKTsKK30KKworaW50IG10
a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJ
CQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCByZXQ7CisKKwlp
ZiAoIWhkbWktPmluaXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJkb2Vzbid0IGluaXQgaGRt
aSBjb250cm9sIGNvbnRleHQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXRrX2hk
bWlfaHdfdmlkX2JsYWNrKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWks
IHRydWUpOworCW10a19oZG1pX3NldHVwX2F2X211dGVfcGFja2V0KGhkbWkpOworCXBoeV9wb3dl
cl9vZmYoaGRtaS0+cGh5KTsKKworCXJldCA9IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKGhk
bWksCisJCQkJCSBtb2RlLT5jbG9jayAqIDEwMDAsCisJCQkJCSBoZG1pLT5kZXB0aCk7CisJaWYg
KHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBzZXQgdnBsbDogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCW10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21v
ZGUoaGRtaSwgbW9kZSk7CisKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsKKwltdGtfaGRtaV9h
dWRfb3V0cHV0X2NvbmZpZyhoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX3NldHVwX2F1ZGlvX2lu
Zm9mcmFtZShoZG1pKTsKKwltdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKGhkbWksIG1vZGUp
OworCW10a19oZG1pX3NldHVwX3NwZF9pbmZvZnJhbWUoaGRtaSwgIm1lZGlhdGVrIiwgImNocm9t
ZWJvb2siKTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHXzNEX01BU0spCisJCW10
a19oZG1pX3NldHVwX3ZlbmRvcl9zcGVjaWZpY19pbmZvZnJhbWUoaGRtaSwgbW9kZSk7CisKKwlt
dGtfaGRtaV9od192aWRfYmxhY2soaGRtaSwgZmFsc2UpOworCW10a19oZG1pX2h3X2F1ZF9tdXRl
KGhkbWksIGZhbHNlKTsKKwltdGtfaGRtaV9zZXR1cF9hdl91bm11dGVfcGFja2V0KGhkbWkpOwor
CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2hkbWkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzJiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGpp
ZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfQ1RSTF9ICisjZGVmaW5lIF9NVEtf
SERNSV9DVFJMX0gKKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4
L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o
PgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBjbGs7CitzdHJ1Y3QgZGV2aWNl
Oworc3RydWN0IGRldmljZV9ub2RlOworc3RydWN0IGkyY19hZGFwdGVyOworc3RydWN0IHBsYXRm
b3JtX2RldmljZTsKK3N0cnVjdCBwaHk7CitzdHJ1Y3QgcmVnbWFwOworCitlbnVtIG10a19oZG1p
X2Nsa19pZCB7CisJTVRLX0hETUlfQ0xLX0hETUlfUElYRUwsCisJTVRLX0hETUlfQ0xLX0hETUlf
UExMLAorCU1US19IRE1JX0NMS19BVURfQkNMSywKKwlNVEtfSERNSV9DTEtfQVVEX1NQRElGLAor
CU1US19IRE1JX0NMS19DT1VOVAorfTsKKworZW51bSBoZG1pX2Rpc3BsYXlfY29sb3JfZGVwdGgg
eworCUhETUlfREVFUF9DT0xPUl8yNEJJVFMsCisJSERNSV9ERUVQX0NPTE9SXzMwQklUUywKKwlI
RE1JX0RFRVBfQ09MT1JfMzZCSVRTLAorCUhETUlfREVFUF9DT0xPUl80OEJJVFMsCit9OworCitl
bnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgeworCUhETUlfQVVEX0lOUFVUX0kyUyA9IDAsCisJSERN
SV9BVURfSU5QVVRfU1BESUYsCit9OworCitlbnVtIGhkbWlfYXVkX2kyc19mbXQgeworCUhETUlf
STJTX01PREVfUkpUXzI0QklUID0gMCwKKwlIRE1JX0kyU19NT0RFX1JKVF8xNkJJVCwKKwlIRE1J
X0kyU19NT0RFX0xKVF8yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8xNkJJVCwKKwlIRE1JX0ky
U19NT0RFX0kyU18yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0kyU18xNkJJVAorfTsKKworZW51bSBo
ZG1pX2F1ZF9tY2xrIHsKKwlIRE1JX0FVRF9NQ0xLXzEyOEZTLAorCUhETUlfQVVEX01DTEtfMTky
RlMsCisJSERNSV9BVURfTUNMS18yNTZGUywKKwlIRE1JX0FVRF9NQ0xLXzM4NEZTLAorCUhETUlf
QVVEX01DTEtfNTEyRlMsCisJSERNSV9BVURfTUNMS183NjhGUywKKwlIRE1JX0FVRF9NQ0xLXzEx
NTJGUywKK307CisKK2VudW0gaGRtaV9hdWRfaWVjX2ZyYW1lX3JhdGUgeworCUhETUlfSUVDXzMy
SyA9IDAsCisJSERNSV9JRUNfOTZLLAorCUhETUlfSUVDXzE5MkssCisJSERNSV9JRUNfNzY4SywK
KwlIRE1JX0lFQ180NEssCisJSERNSV9JRUNfODhLLAorCUhETUlfSUVDXzE3NkssCisJSERNSV9J
RUNfNzA1SywKKwlIRE1JX0lFQ18xNkssCisJSERNSV9JRUNfMjJLLAorCUhETUlfSUVDXzI0SywK
KwlIRE1JX0lFQ180OEssCit9OworCitlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSB7CisJSERN
SV9BVURfQ0hBTl9UWVBFXzFfMCA9IDAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMSwKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfMl8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8yXzEsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzNfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xLAorCUhETUlfQVVEX0NIQU5f
VFlQRV80XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf
NV8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMCwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzAsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzdfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18wX0xSUywKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfM18xX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlMsCisJ
SERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ1Ms
CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09I
LAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFf
TEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5f
VFlQRV83XzFfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19SVywKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfN18xX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNT
LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhTX1JIUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVf
N18xX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfT0gsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMV9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9PSCwKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfN18xX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NI
UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUiwKKwlIRE1JX0FVRF9D
SEFOX1RZUEVfNl8wX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0gsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzZfMF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIUiwKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfN18wX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUiwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JDLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBf
TFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU0RfUlNELAorCUhETUlfQVVEX0NIQU5f
VFlQRV83XzBfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIU19SSFMsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX09I
LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83
XzBfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9DSFIsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMF9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9S
U1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9MSF9SSF9DUywKKwlIRE1JX0FVRF9DSEFOX1RZ
UEVfVU5LTk9XTiA9IDB4RkYKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUg
eworCUhETUlfQVVEX1NXQVBfTFIsCisJSERNSV9BVURfU1dBUF9MRkVfQ0MsCisJSERNSV9BVURf
U1dBUF9MU1JTLAorCUhETUlfQVVEX1NXQVBfUkxTX1JSUywKKwlIRE1JX0FVRF9TV0FQX0xSX1NU
QVRVUywKK307CisKK3N0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIHsKKwllbnVtIGhkbWlfYXVkaW9f
Y29kaW5nX3R5cGUgYXVkX2NvZGVjOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5
IGF1ZF9oZG1pX2ZzOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBhdWRfc2FtcGVfc2l6
ZTsKKwllbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgYXVkX2lucHV0X3R5cGU7CisJZW51bSBoZG1p
X2F1ZF9pMnNfZm10IGF1ZF9pMnNfZm10OworCWVudW0gaGRtaV9hdWRfbWNsayBhdWRfbWNsazsK
KwllbnVtIGhkbWlfYXVkX2llY19mcmFtZV9yYXRlIGllY19mcmFtZV9mczsKKwllbnVtIGhkbWlf
YXVkX2NoYW5uZWxfdHlwZSBhdWRfaW5wdXRfY2hhbl90eXBlOworCXU4IGhkbWlfbF9jaGFubmVs
X3N0YXRlWzZdOworCXU4IGhkbWlfcl9jaGFubmVsX3N0YXRlWzZdOworfTsKKworc3RydWN0IG10
a19oZG1pIHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0
b3IgY29ubjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVj
dCBkZXZpY2UgKmNlY19kZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICpkZGNfYWRwdDsKKwlzdHJ1
Y3QgY2xrICpjbGtbTVRLX0hETUlfQ0xLX0NPVU5UXTsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJV
R19GUykKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzOworI2VuZGlmCisJc3RydWN0IHBsYXRmb3Jt
X2RldmljZSAqYXVkaW9fcGRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCWJv
b2wgZHZpX21vZGU7CisJaW50IGZsdF9uXzV2X2dwaW87CisJaW50IGZsdF9uXzV2X2lycTsKKwl1
MzIgbWluX2Nsb2NrOworCXUzMiBtYXhfY2xvY2s7CisJdTMyIG1heF9oZGlzcGxheTsKKwl1MzIg
bWF4X3ZkaXNwbGF5OworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7CisJc3RydWN0IHJlZ21h
cCAqc3lzX3JlZ21hcDsKKwl1bnNpZ25lZCBpbnQgc3lzX29mZnNldDsKKwl2b2lkIF9faW9tZW0g
KnJlZ3M7CisJYm9vbCBpbml0OworCWVudW0gaGRtaV9kaXNwbGF5X2NvbG9yX2RlcHRoIGRlcHRo
OworCWVudW0gaGRtaV9jb2xvcnNwYWNlIGNzcDsKKwlib29sIGF1ZGlvX2VuYWJsZTsKKwlib29s
IG91dHB1dDsKKwlzdHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSBhdWRfcGFyYW07Cit9OworCitzdGF0
aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9icmlkZ2Uoc3RydWN0IGRy
bV9icmlkZ2UgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgbXRrX2hkbWks
IGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19oZG1pICpoZG1pX2N0eF9m
cm9tX2Nvbm4oc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v
ZihjLCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOworfQorCitpbnQgbXRrX2hkbWlfb3V0cHV0X2lu
aXQoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK2ludCBtdGtfaGRtaV9ocGRfaGlnaChzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWkpOworaW50IG10a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0
cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt
b2RlKTsKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb24oc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3Zv
aWQgbXRrX2hkbWlfcG93ZXJfb2ZmKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisjaWYgZGVmaW5l
ZChDT05GSUdfREVCVUdfRlMpCitpbnQgbXRrX2RybV9oZG1pX2RlYnVnZnNfaW5pdChzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfZHJtX2hkbWlfZGVidWdmc19leGl0KHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSk7CisjZWxzZQoraW50IG10a19kcm1faGRtaV9kZWJ1Z2ZzX2luaXQoc3Ry
dWN0IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiAwOworfQorCit2b2lkIG10a19kcm1faGRt
aV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworfQorI2VuZGlmIC8qIENP
TkZJR19ERUJVR19GUyAqLworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfY2Vj
X2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2
ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyOwor
I2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfaGRtaV9kZGNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2hkbWlfZGRjX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIy
ZTU0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk
bWlfZGRjX2Rydi5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0
IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisj
aW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j
bHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxp
bnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9l
cnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51
eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4K
KyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+
CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2RlZmluZSBTSUYxX0NMT0sJCSgy
ODgpCisjZGVmaW5lIEREQ19ERENNQ1RMMAkJKDB4MCkKKyNkZWZpbmUgRERDTV9PRFJBSU4JCQlC
SVQoMzEpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9PRkZTRVQJCSgxNikKKyNkZWZpbmUgRERDTV9D
TEtfRElWX01BU0sJCSgweGZmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9DU19TVEFUVVMJCQlCSVQo
NCkKKyNkZWZpbmUgRERDTV9TQ0xfU1RBVEUJCQlCSVQoMykKKyNkZWZpbmUgRERDTV9TREFfU1RB
VEUJCQlCSVQoMikKKyNkZWZpbmUgRERDTV9TTTBFTgkJCUJJVCgxKQorI2RlZmluZSBERENNX1ND
TF9TVFJFQ0gJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01DVEwxCQkoMHg0KQorI2RlZmluZSBE
RENNX0FDS19PRkZTRVQJCQkoMTYpCisjZGVmaW5lIEREQ01fQUNLX01BU0sJCQkoMHhmZiA8PCAx
NikKKyNkZWZpbmUgRERDTV9QR0xFTl9PRkZTRVQJCSg4KQorI2RlZmluZSBERENNX1BHTEVOX01B
U0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIEREQ01fU0lGX01PREVfT0ZGU0VUCQkoNCkKKyNkZWZp
bmUgRERDTV9TSUZfTU9ERV9NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIEREQ01fU1RBUlQJCQko
MHgxKQorI2RlZmluZSBERENNX1dSSVRFX0RBVEEJCQkoMHgyKQorI2RlZmluZSBERENNX1NUT1AJ
CQkoMHgzKQorI2RlZmluZSBERENNX1JFQURfREFUQV9OT19BQ0sJCSgweDQpCisjZGVmaW5lIERE
Q01fUkVBRF9EQVRBX0FDSwkJKDB4NSkKKyNkZWZpbmUgRERDTV9UUkkJCQlCSVQoMCkKKyNkZWZp
bmUgRERDX0REQ01EMAkJKDB4OCkKKyNkZWZpbmUgRERDTV9EQVRBMwkJCSgweGZmIDw8IDI0KQor
I2RlZmluZSBERENNX0RBVEEyCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTEJCQko
MHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEEwCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgRERD
X0REQ01EMQkJKDB4YykKKyNkZWZpbmUgRERDTV9EQVRBNwkJCSgweGZmIDw8IDI0KQorI2RlZmlu
ZSBERENNX0RBVEE2CQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTUJCQkoMHhmZiA8
PCA4KQorI2RlZmluZSBERENNX0RBVEE0CQkJKDB4ZmYgPDwgMCkKKworc3RydWN0IG10a19oZG1p
X2kyYyB7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJc3RydWN0IGNsayAqY2xrOworCXZv
aWQgX19pb21lbSAqcmVnczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfc2V0X2JpdChz
dHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAg
dW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSB8
IHZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZl9j
bHJfYml0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJ
CSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXdyaXRlbChyZWFkbChpMmMtPnJlZ3MgKyBv
ZmZzZXQpICYgfnZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNpZl9iaXRfaXNfc2V0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQgaW50
IG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIChyZWFkbChpMmMt
PnJlZ3MgKyBvZmZzZXQpICYgdmFsKSA9PSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBz
aWZfd3JpdGVfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZz
ZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0LAorCQkJCSAg
dW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJdG1wID0gcmVhZGwo
aTJjLT5yZWdzICsgb2Zmc2V0KTsKKwl0bXAgJj0gfm1hc2s7CisJdG1wIHw9ICh2YWwgPDwgc2hp
ZnQpICYgbWFzazsKKwl3cml0ZWwodG1wLCBpMmMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0
aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaWZfcmVhZF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9pMmMg
KmkyYywKKwkJCQkJIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJ
CQkgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVybiAocmVhZGwoaTJjLT5yZWdzICsgb2Zm
c2V0KSAmIG1hc2spID4+IHNoaWZ0OworfQorCitzdGF0aWMgdm9pZCBkZGNtX3RyaWdnZXJfbW9k
ZShzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIGludCBtb2RlKQoreworCWludCB0aW1lb3V0ID0g
MjAgKiAxMDAwOworCisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDEsIEREQ01fU0lG
X01PREVfTUFTSywKKwkJICAgICAgIEREQ01fU0lGX01PREVfT0ZGU0VULCBtb2RlKTsKKwlzaWZf
c2V0X2JpdChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpOworCXdoaWxlIChzaWZfYml0X2lz
X3NldChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpKSB7CisJCXRpbWVvdXQgLT0gMjsKKwkJ
dWRlbGF5KDIpOworCQlpZiAodGltZW91dCA8PSAwKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0
aWMgaW50IG10a19oZG1pX2kyY19yZWFkX21zZyhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHN0
cnVjdCBpMmNfbXNnICptc2cpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTJjLT5hZGFwLmRl
di5wYXJlbnQ7CisJdTMyIHJlbWFpbl9jb3VudCwgYWNrX2NvdW50LCBhY2tfZmluYWwsIHJlYWRf
Y291bnQsIHRlbXBfY291bnQ7CisJdTMyIGluZGV4ID0gMDsKKwl1MzIgYWNrOworCWludCBpOwor
CisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUQVJUKTsKKwlzaWZfd3JpdGVfbWFzayhp
MmMsIEREQ19ERENNRDAsIDB4ZmYsIDAsIChtc2ctPmFkZHIgPDwgMSkgfCAweDAxKTsKKwlzaWZf
d3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLCBERENNX1BHTEVO
X09GRlNFVCwKKwkJICAgICAgIDB4MDApOworCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9X
UklURV9EQVRBKTsKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENN
X0FDS19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gMHgleFxu
IiwgYWNrKTsKKwlpZiAoYWNrICE9IDB4MDEpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNrIGVy
ciFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJlbWFpbl9jb3VudCA9IG1zZy0+bGVu
OworCWFja19jb3VudCA9IChtc2ctPmxlbiAtIDEpIC8gODsKKwlhY2tfZmluYWwgPSAwOworCisJ
d2hpbGUgKHJlbWFpbl9jb3VudCA+IDApIHsKKwkJaWYgKGFja19jb3VudCA+IDApIHsKKwkJCXJl
YWRfY291bnQgPSA4OworCQkJYWNrX2ZpbmFsID0gMDsKKwkJCWFja19jb3VudC0tOworCQl9IGVs
c2UgeworCQkJcmVhZF9jb3VudCA9IHJlbWFpbl9jb3VudDsKKwkJCWFja19maW5hbCA9IDE7CisJ
CX0KKworCQlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNL
LAorCQkJICAgICAgIEREQ01fUEdMRU5fT0ZGU0VULCByZWFkX2NvdW50IC0gMSk7CisJCWRkY21f
dHJpZ2dlcl9tb2RlKGkyYywgKGFja19maW5hbCA9PSAxKSA/CisJCQkJICBERENNX1JFQURfREFU
QV9OT19BQ0sgOgorCQkJCSAgRERDTV9SRUFEX0RBVEFfQUNLKTsKKworCQlhY2sgPSBzaWZfcmVh
ZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLAorCQkJCSAgICBERENNX0FD
S19PRkZTRVQpOworCQl0ZW1wX2NvdW50ID0gMDsKKwkJd2hpbGUgKCgoYWNrICYgKDEgPDwgdGVt
cF9jb3VudCkpICE9IDApICYmICh0ZW1wX2NvdW50IDwgOCkpCisJCQl0ZW1wX2NvdW50Kys7CisJ
CWlmICgoKGFja19maW5hbCA9PSAxKSAmJiAodGVtcF9jb3VudCAhPSAocmVhZF9jb3VudCAtIDEp
KSkgfHwKKwkJICAgICgoYWNrX2ZpbmFsID09IDApICYmICh0ZW1wX2NvdW50ICE9IHJlYWRfY291
bnQpKSkgeworCQkJZGV2X2VycihkZXYsICJBZGRyZXNzIE5BQ0shIEFDSygweCV4KVxuIiwgYWNr
KTsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChpID0gcmVhZF9jb3VudDsgaSA+PSAxOyBpLS0p
IHsKKwkJCWludCBzaGlmdDsKKwkJCWludCBvZmZzZXQ7CisKKwkJCWlmIChpID4gNCkgeworCQkJ
CW9mZnNldCA9IEREQ19ERENNRDE7CisJCQkJc2hpZnQgPSAoaSAtIDUpICogODsKKwkJCX0gZWxz
ZSB7CisJCQkJb2Zmc2V0ID0gRERDX0REQ01EMDsKKwkJCQlzaGlmdCA9IChpIC0gMSkgKiA4Owor
CQkJfQorCisJCQltc2ctPmJ1ZltpbmRleCArIGkgLSAxXSA9IHNpZl9yZWFkX21hc2soaTJjLCBv
ZmZzZXQsCisJCQkJCQkJCTB4ZmYgPDwgc2hpZnQsCisJCQkJCQkJCXNoaWZ0KTsKKwkJfQorCisJ
CXJlbWFpbl9jb3VudCAtPSByZWFkX2NvdW50OworCQlpbmRleCArPSByZWFkX2NvdW50OworCX0K
KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2kyY193cml0ZV9tc2coc3Ry
dWN0IG10a19oZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCXN0cnVjdCBk
ZXZpY2UgKmRldiA9IGkyYy0+YWRhcC5kZXYucGFyZW50OworCXUzMiBhY2s7CisKKwlkZGNtX3Ry
aWdnZXJfbW9kZShpMmMsIEREQ01fU1RBUlQpOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0RE
Q01EMCwgRERDTV9EQVRBMCwgMCwgbXNnLT5hZGRyIDw8IDEpOworCXNpZl93cml0ZV9tYXNrKGky
YywgRERDX0REQ01EMCwgRERDTV9EQVRBMSwgOCwgbXNnLT5idWZbMF0pOworCXNpZl93cml0ZV9t
YXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX1BHTEVOX01BU0ssIEREQ01fUEdMRU5fT0ZGU0VU
LAorCQkgICAgICAgMHgxKTsKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fV1JJVEVfREFU
QSk7CisKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19N
QVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gJWRcbiIsIGFjayk7
CisKKwlpZiAoYWNrICE9IDB4MDMpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNrIGVyciFcbiIp
OworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVj
dCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYyA9
IGFkYXB0ZXItPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5kZXYu
cGFyZW50OworCWludCByZXQ7CisJaW50IGk7CisKKwlpZiAoIWkyYykgeworCQlkZXZfZXJyKGRl
diwgImludmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2lm
X3NldF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU0NMX1NUUkVDSCk7CisJc2lmX3NldF9i
aXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU00wRU4pOworCXNpZl9jbHJfYml0KGkyYywgRERD
X0REQ01DVEwwLCBERENNX09EUkFJTik7CisKKwlpZiAoc2lmX2JpdF9pc19zZXQoaTJjLCBERENf
RERDTUNUTDEsIEREQ01fVFJJKSkgeworCQlkZXZfZXJyKGRldiwgImRkYyBsaW5lIGlzIGJ1c3kh
XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19E
RENNQ1RMMCwgRERDTV9DTEtfRElWX01BU0ssCisJCSAgICAgICBERENNX0NMS19ESVZfT0ZGU0VU
LCBTSUYxX0NMT0spOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXN0cnVjdCBp
MmNfbXNnICptc2cgPSAmbXNnc1tpXTsKKworCQlkZXZfZGJnKGRldiwgImkyYyBtc2csIGFkcjow
eCV4LCBmbGFnczolZCwgbGVuIDoweCV4XG4iLAorCQkJbXNnLT5hZGRyLCBtc2ctPmZsYWdzLCBt
c2ctPmxlbik7CisKKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldCA9IG10a19o
ZG1pX2kyY19yZWFkX21zZyhpMmMsIG1zZyk7CisJCWVsc2UKKwkJCXJldCA9IG10a19oZG1pX2ky
Y193cml0ZV9tc2coaTJjLCBtc2cpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8geGZlcl9lbmQ7
CisJfQorCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUT1ApOworCisJcmV0dXJuIGk7
CisKK3hmZXJfZW5kOgorCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9TVE9QKTsKKwlkZXZf
ZXJyKGRldiwgImRkYyBmYWlsZWQhXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMy
IG10a19oZG1pX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1
cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0
IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG10a19oZG1pX2kyY19hbGdvcml0aG0gPSB7CisJLm1hc3Rl
cl94ZmVyID0gbXRrX2hkbWlfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBtdGtfaGRtaV9p
MmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3Byb2JlKHN0cnVjdCBwbGF0
Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK
KwlzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmM7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50
IHJldDsKKworCWkyYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgbXRrX2hkbWlf
aTJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmMpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJj
LT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGRjLWkyYyIpOworCWlmIChJU19FUlIoaTJjLT5j
bGspKSB7CisJCWRldl9lcnIoZGV2LCAiZ2V0IGRkY19jbGsgZmFpbGVkIDogJXAgLFxuIiwgaTJj
LT5jbGspOworCQlyZXR1cm4gUFRSX0VSUihpMmMtPmNsayk7CisJfQorCisJbWVtID0gcGxhdGZv
cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpMmMtPnJlZ3MgPSBk
ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGkyYy0+
cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJnZXQgbWVtb3J5IHNvdXJjZSBmYWlsIVxuIik7CisJ
CXJldHVybiBQVFJfRVJSKGkyYy0+cmVncyk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5h
YmxlKGkyYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZW5hYmxlIGRkYyBj
bGsgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RybGNweShpMmMtPmFkYXAu
bmFtZSwgIm1lZGlhdGVrLWhkbWktaTJjIiwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSk7CisJaTJj
LT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJjLT5hZGFwLmFsZ28gPSAmbXRrX2hkbWlf
aTJjX2FsZ29yaXRobTsKKwlpMmMtPmFkYXAucmV0cmllcyA9IDM7CisJaTJjLT5hZGFwLmRldi5v
Zl9ub2RlID0gZGV2LT5vZl9ub2RlOworCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7CisJaTJj
LT5hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJcmV0ID0gaTJjX2FkZF9hZGFwdGVy
KCZpMmMtPmFkYXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv
IGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9CisK
KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMpOworCisJZGV2X2RiZyhkZXYsICJpMmMt
PmFkYXA6ICVwXG4iLCAmaTJjLT5hZGFwKTsKKwlkZXZfZGJnKGRldiwgImkyYy0+Y2xrOiAlcFxu
IiwgaTJjLT5jbGspOworCWRldl9kYmcoZGV2LCAicGh5c2ljYWwgYWRyOiAweCVsbHgsIGVuZDog
MHglbGx4XG4iLCBtZW0tPnN0YXJ0LAorCQltZW0tPmVuZCk7CisKKwlyZXR1cm4gMDsKKworZXJy
X2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJcmV0dXJu
IHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19oZG1pX2kyYyAqaTJjID0gcGxhdGZvcm1f
Z2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOwor
CWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg
Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9pMmNfbWF0Y2hbXSA9IHsKKwl7IC5j
b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLWRkYyIsIH0sCisJe30sCit9OworCitz
dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXIgPSB7CisJLnByb2JlID0g
bXRrX2hkbWlfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9pMmNfcmVtb3ZlLAorCS5k
cml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktZGRjIiwKKwkJLm9mX21hdGNoX3Rh
YmxlID0gbXRrX2hkbWlfaTJjX21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9SKCJKaWUg
UWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFU
ZWsgSERNSSBpMmMgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1n
aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYyBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc2NTIyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2hkbWlfaHcuYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsu
Y29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
LworI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisjaW5jbHVkZSAibXRrX2hkbWlfcmVncy5oIgor
I2luY2x1ZGUgIm10a19oZG1pLmgiCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl
IDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51
eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCitzdGF0aWMgdTMyIG10a19oZG1p
X3JlYWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByZWFk
bChoZG1pLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfd3JpdGUo
c3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXdyaXRlbCh2
YWwsIGhkbWktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNr
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2spCit7
CisJdTMyIHRtcCA9IG10a19oZG1pX3JlYWQoaGRtaSwgb2Zmc2V0KSAmIH5tYXNrOworCisJdG1w
IHw9ICh2YWwgJiBtYXNrKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBvZmZzZXQsIHRtcCk7Cit9
CisKK3N0YXRpYyBjb25zdCB1OCBQUkVESVZbM11bNF0gPSB7CisJezB4MCwgMHgwLCAweDAsIDB4
MH0sCS8qIDI3TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4
MSwgMHgxLCAweDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggVFhE
SVZbM11bNF0gPSB7CisJezB4MywgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4Miwg
MHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgwLCAweDAsIDB4MH0JLyogMTQ4
TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRkJLU0VMWzNdWzRdID0geworCXsweDEsIDB4
MSwgMHgxLCAweDF9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9LAkvKiA3NE1o
eiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNv
bnN0IHU4IEZCS0RJVlszXVs0XSA9IHsKKwl7MTksIDI0LCAyOSwgMTl9LAkvKiAyN01oeiAqLwor
CXsxOSwgMjQsIDE0LCAxOX0sCS8qIDc0TWh6ICovCisJezE5LCAyNCwgMTQsIDE5fQkvKiAxNDhN
aHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBESVZFTlszXVs0XSA9IHsKKwl7MHgyLCAweDEs
IDB4MSwgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfSwJLyogNzRNaHog
Ki8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z
dCB1OCBIVFBMTEJQWzNdWzRdID0geworCXsweGMsIDB4YywgMHg4LCAweGN9LAkvKiAyN01oeiAq
LworCXsweGMsIDB4ZiwgMHhmLCAweGN9LAkvKiA3NE1oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAw
eGN9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQkNbM11bNF0gPSB7
CisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4
Mn0sCS8qIDc0TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0JLyogMTQ4TWh6ICovCit9Owor
CitzdGF0aWMgY29uc3QgdTggSFRQTExCUlszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4MCwgMHgx
fSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgx
LCAweDIsIDB4MiwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKKyNkZWZpbmUgTkNUU19CWVRFUyAg
ICAgICAgICAweDA3CitzdGF0aWMgY29uc3QgdTggSERNSV9OQ1RTWzddWzldW05DVFNfQllURVNd
ID0geworCXt7MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsw
eDAwLCAweDAwLCAweGQyLCAweGYwLCAweDAwLCAweDEwLCAweDAwfSwKKwkgezB4MDAsIDB4MDMs
IDB4MzcsIDB4ZjksIDB4MDAsIDB4MmQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMSwgMHgyMiwgMHgw
YSwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsweDAwLCAweDA2LCAweDZmLCAweGYzLCAweDAwLCAw
eDJkLCAweDgwfSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDB9
LAorCSB7MHgwMCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsweDAw
LCAweDA2LCAweDZGLCAweEYzLCAweDAwLCAweDE2LCAweEMwfSwKKwkgezB4MDAsIDB4MDMsIDB4
NjYsIDB4MUUsIDB4MDAsIDB4MEMsIDB4MDB9CisJIH0sCisJe3sweDAwLCAweDAwLCAweDc1LCAw
eDMwLCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDAsIDB4ZWEsIDB4NjAsIDB4MDAs
IDB4MTgsIDB4ODB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg0NSwgMHhh
Y30sCisJIHsweDAwLCAweDAxLCAweDQyLCAweDQ0LCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4
MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4MjIsIDB4ZDZ9LAorCSB7MHgwMCwgMHgwMiwg
MHg4NCwgMHg4OCwgMHgwMCwgMHgxOCwgMHg4MH0sCisJIHsweDAwLCAweDAxLCAweGQ0LCAweGMw
LCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4
MTEsIDB4NkJ9LAorCSB7MHgwMCwgMHgwMywgMHhDNiwgMHhDQywgMHgwMCwgMHgxMiwgMHg2MH0K
KwkgfSwKKwl7ezB4MDAsIDB4MDAsIDB4NjksIDB4NzgsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7
MHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwMH0sCisJIHsweDAwLCAweDAy
LCAweDI1LCAweDUxLCAweDAwLCAweDJkLCAweDgwfSwKKwkgezB4MDAsIDB4MDEsIDB4MjIsIDB4
MGEsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7MHgwMCwgMHgwMiwgMHgyNSwgMHg1MSwgMHgwMCwg
MHgxNiwgMHhjMH0sCisJIHsweDAwLCAweDAyLCAweDQ0LCAweDE0LCAweDAwLCAweDE4LCAweDAw
fSwKKwkgezB4MDAsIDB4MDEsIDB4QTUsIDB4ZTAsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7MHgw
MCwgMHgwNCwgMHg0QSwgMHhBMiwgMHgwMCwgMHgxNiwgMHhDMH0sCisJIHsweDAwLCAweDAzLCAw
eEM2LCAweENDLCAweDAwLCAweDE0LCAweDAwfQorCSB9LAorCXt7MHgwMCwgMHgwMCwgMHg3NSwg
MHgzMCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAwLCAweGVhLCAweDYwLCAweDAw
LCAweDMxLCAweDAwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4OGIsIDB4
NTh9LAorCSB7MHgwMCwgMHgwMSwgMHg0MiwgMHg0NCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsw
eDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAwLCAweDQ1LCAweGFjfSwKKwkgezB4MDAsIDB4MDIs
IDB4ODQsIDB4ODgsIDB4MDAsIDB4MzEsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhkNCwgMHhj
MCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAwLCAw
eDIyLCAweEQ2fSwKKwkgezB4MDAsIDB4MDMsIDB4QzYsIDB4Q0MsIDB4MDAsIDB4MjQsIDB4QzB9
CisJIH0sCisJe3sweDAwLCAweDAwLCAweDY5LCAweDc4LCAweDAwLCAweDMwLCAweDAwfSwKKwkg
ezB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDB9LAorCSB7MHgwMCwgMHgw
MiwgMHgyNSwgMHg1MSwgMHgwMCwgMHg1YiwgMHgwMH0sCisJIHsweDAwLCAweDAxLCAweDIyLCAw
eDBhLCAweDAwLCAweDMwLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4MjUsIDB4NTEsIDB4MDAs
IDB4MmQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMiwgMHg0NCwgMHgxNCwgMHgwMCwgMHgzMCwgMHgw
MH0sCisJIHsweDAwLCAweDAxLCAweEE1LCAweGUwLCAweDAwLCAweDMwLCAweDAwfSwKKwkgezB4
MDAsIDB4MDQsIDB4NEEsIDB4QTIsIDB4MDAsIDB4MkQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMywg
MHhDNiwgMHhDQywgMHgwMCwgMHgyOCwgMHg4MH0KKwkgfSwKKwl7ezB4MDAsIDB4MDAsIDB4NzUs
IDB4MzAsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMCwgMHhlYSwgMHg2MCwgMHgw
MCwgMHg2MiwgMHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAxLCAweDE2LCAw
eGIwfSwKKwkgezB4MDAsIDB4MDEsIDB4NDIsIDB4NDQsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7
MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg4YiwgMHg1OH0sCisJIHsweDAwLCAweDAy
LCAweDg0LCAweDg4LCAweDAwLCAweDYyLCAweDAwfSwKKwkgezB4MDAsIDB4MDEsIDB4ZDQsIDB4
YzAsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwg
MHg0NSwgMHhBQ30sCisJIHsweDAwLCAweDAzLCAweEM2LCAweENDLCAweDAwLCAweDQ5LCAweDgw
fQorCSB9LAorCXt7MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHg2MCwgMHgwMH0sCisJ
IHsweDAwLCAweDAwLCAweGQyLCAweGYwLCAweDAwLCAweDYwLCAweDAwfSwKKwkgezB4MDAsIDB4
MDIsIDB4MjUsIDB4NTEsIDB4MDAsIDB4YjYsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHgyMiwg
MHgwYSwgMHgwMCwgMHg2MCwgMHgwMH0sCisJIHsweDAwLCAweDAyLCAweDI1LCAweDUxLCAweDAw
LCAweDViLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4NjAsIDB4
MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHg2MCwgMHgwMH0sCisJIHsw
eDAwLCAweDA0LCAweDRBLCAweEEyLCAweDAwLCAweDVCLCAweDAwfSwKKwkgezB4MDAsIDB4MDMs
IDB4QzYsIDB4Q0MsIDB4MDAsIDB4NTAsIDB4MDB9CisJIH0KK307CisKK3ZvaWQgbXRrX2hkbWlf
aHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgIGJvb2wgYmxhY2spCit7
CisJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURFT19DRkdfNCwgYmxhY2sgPyBHRU5fUkdCIDogTk9S
TUFMX1BBVEgsCisJCSAgICAgIFZJREVPX1NPVVJDRV9TRUwpOworfQorCit2b2lkIG10a19oZG1p
X2h3X21ha2VfcmVnX3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp
Cit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZz
ZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxlID8g
SERNSV9QQ0xLX0ZSRUVfUlVOIDogMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19y
ZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEhETUlfT04g
fCBBTkxHX09OLCBlbmFibGUgPyAoSERNSV9PTiB8IEFOTEdfT04pIDogMCk7Cit9CisKK3ZvaWQg
bXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9v
bCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWkt
PnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUkyUDBfRU4sIGVuYWJsZSA/
IDAgOiBIRE1JMlAwX0VOKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWksIGJvb2wgbXV0ZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9B
VURJT19DRkcsIG11dGUgPyBBVURJT19aRVJPIDogMCwgQVVESU9fWkVSTyk7Cit9CisKK3ZvaWQg
bXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRh
dGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZH
MUMsCisJCQkgICBIRE1JX1JTVCwgSERNSV9SU1QpOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1p
LT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBI
RE1JX1JTVCwgMCk7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMywgMCwgQ0ZHM19DT05U
Uk9MX1BBQ0tFVF9ERUxBWSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAs
IGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEFOTEdfT04sIEFOTEdf
T04pOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2Uoc3RydWN0IG10a19oZG1p
ICpoZG1pLCBib29sIGVuYWJsZV9ub3RpY2UpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxf
Q0ZHMiwgZW5hYmxlX25vdGljZSA/IENGRzJfTk9USUNFX0VOIDogMCwKKwkJICAgICAgQ0ZHMl9O
T1RJQ0VfRU4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKQoreworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS
TF9JTlRfTUFTSywgaW50X21hc2spOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9kdmlf
bW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21h
c2soaGRtaSwgR1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJIDogMCwgQ0ZHMV9EVkkpOworfQor
Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
IHU4ICpidWZmZXIsIHU4IGxlbikKK3sKKwl1MzIgY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwlpbnQg
aTsKKwl1OCAqZnJhbWVfZGF0YTsKKwl1OCBmcmFtZV90eXBlOworCXU4IGZyYW1lX3ZlcjsKKwl1
OCBmcmFtZV9sZW47CisJdTggY2hlY2tzdW07CisJaW50IGN0cmxfZnJhbWVfZW4gPSAwOworCisJ
ZnJhbWVfdHlwZSA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7CisJZnJhbWVfdmVyID0gKmJ1ZmZl
cjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9sZW4gPSAqYnVmZmVyOworCWJ1ZmZlciArPSAxOwor
CWNoZWNrc3VtID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9kYXRhID0gYnVmZmVy
OworCisJZGV2X2luZm8oaGRtaS0+ZGV2LAorCQkgImZyYW1lX3R5cGU6MHgleCxmcmFtZV92ZXI6
MHgleCxmcmFtZV9sZW46MHgleCxjaGVja3N1bToweCV4XG4iLAorCQkgZnJhbWVfdHlwZSwgZnJh
bWVfdmVyLCBmcmFtZV9sZW4sIGNoZWNrc3VtKTsKKworCXN3aXRjaCAoZnJhbWVfdHlwZSkgewor
CWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk6CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FW
SV9FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lORk9G
UkFNRV9UWVBFX1NQRDoKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxfU1BEX0VOOworCQljdHJsX3Jl
ZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86
CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FVRElPX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJM
OworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfVkVORE9SOgorCQljdHJsX2Zy
YW1lX2VuID0gVlNfRU47CisJCWN0cmxfcmVnID0gR1JMX0FDUF9JU1JDX0NUUkw7CisJCWJyZWFr
OworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWksIGN0cmxfcmVn
LCAwLCBjdHJsX2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZSTV9U
WVBFLCBmcmFtZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZSTV9WRVIs
IGZyYW1lX3Zlcik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fTE5HLCBmcmFt
ZV9sZW4pOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9QT1JULCBjaGVja3N1bSk7
CisJZm9yIChpID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfSUZNX1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRrX2hkbWlfbWFzayhoZG1pLCBj
dHJsX3JlZywgY3RybF9mcmFtZV9lbiwgY3RybF9mcmFtZV9lbik7Cit9CisKK3ZvaWQgbXRrX2hk
bWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp
Cit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfU0hJRlRfUjIsIGVuYWJsZSA/IDAgOiBBVURJ
T19QQUNLRVRfT0ZGLAorCQkgICAgICBBVURJT19QQUNLRVRfT0ZGKTsKK30KKwordm9pZCBtdGtf
aGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBfdXBk
YXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NG
RzIwLAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RFX09OLCAwKTsKKwltZGVsYXko
Mik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZz
ZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfT1VUX0ZJRk9fRU4gfCBNSExfTU9ERV9P
TiwgSERNSV9PVVRfRklGT19FTik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29s
b3JfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICBlbnVtIGhkbWlfZGlzcGxh
eV9jb2xvcl9kZXB0aCBkZXB0aCkKK3sKKwl1MzIgdmFsID0gMDsKKworCXN3aXRjaCAoZGVwdGgp
IHsKKwljYXNlIEhETUlfREVFUF9DT0xPUl8yNEJJVFM6CisJCXZhbCA9IENPTE9SXzhCSVRfTU9E
RTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfMzBCSVRTOgorCQl2YWwgPSBDT0xP
Ul8xMEJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBf
Q09MT1JfMzZCSVRTOgorCQl2YWwgPSBDT0xPUl8xMkJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsK
KwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfNDhCSVRTOgorCQl2YWwgPSBDT0xPUl8x
NkJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsID0g
Q09MT1JfOEJJVF9NT0RFOworCQlicmVhazsKKwl9CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRt
aS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJICAg
REVFUF9DT0xPUl9NT0RFX01BU0sgfCBERUVQX0NPTE9SX0VOLCB2YWwpOworfQorCit2b2lkIG10
a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hk
bWlfbWFzayhoZG1pLCBHUkxfQ0ZHNCwgMCwgQ1RSTF9BVk1VVEUpOworCW1kZWxheSgyKTsKKwlt
dGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDVFJMX0FWTVVURSwgQ1RSTF9BVk1VVEUpOwor
fQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9FTiwK
KwkJICAgICAgQ0ZHNF9BVl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworCW1kZWxh
eSgyKTsKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9TRVQs
CisJCSAgICAgIENGRzRfQVZfVU5NVVRFX0VOIHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKK30KKwor
dm9pZCBtdGtfaGRtaV9od19uY3RzX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wg
b24pCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkwsIG9uID8gMCA6IENUU19D
VFJMX1NPRlQsCisJCSAgICAgIENUU19DVFJMX1NPRlQpOworfQorCit2b2lkIG10a19oZG1pX2h3
X25jdHNfYXV0b193cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJs
ZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgZW5hYmxlID8gTkNUU19X
UklfQU5ZVElNRSA6IDAsCisJCSAgICAgIE5DVFNfV1JJX0FOWVRJTUUpOworfQorCit2b2lkIG10
a19oZG1pX2h3X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICAgICBz
dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdS
TF9DRkc0LCAwLCBDRkdfTUhMX01PREUpOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVf
RkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPT0gNzQyNTAgJiYKKwkgICAgbW9k
ZS0+dmRpc3BsYXkgPT0gMTA4MCkKKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgMCwg
TUhMX0RFX1NFTCk7CisJZWxzZQorCQltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCBNSExf
REVfU0VMLCBNSExfREVfU0VMKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5u
ZWxfc3dhcChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9j
aGFubmVsX3N3YXBfdHlwZSBzd2FwKQoreworCXU4IHN3YXBfYml0OworCisJc3dpdGNoIChzd2Fw
KSB7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xSOgorCQlzd2FwX2JpdCA9IExSX1NXQVA7CisJCWJy
ZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MRkVfQ0M6CisJCXN3YXBfYml0ID0gTEZFX0NDX1NX
QVA7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MU1JTOgorCQlzd2FwX2JpdCA9IExT
UlNfU1dBUDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX1JMU19SUlM6CisJCXN3YXBf
Yml0ID0gUkxTX1JSU19TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBfTFJfU1RB
VFVTOgorCQlzd2FwX2JpdCA9IExSX1NUQVRVU19TV0FQOworCQlicmVhazsKKwlkZWZhdWx0Ogor
CQlzd2FwX2JpdCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfbWFzayho
ZG1pLCBHUkxfQ0hfU1dBUCwgc3dhcF9iaXQsIDB4ZmYpOworfQorCit2b2lkIG10a19oZG1pX2h3
X2F1ZF9yYXdfZGF0YV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkK
K3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9NSVhfQ1RSTCwgZW5hYmxlID8gTUlYX0NUUkxf
RkxBVCA6IDAsCisJCSAgICAgIE1JWF9DVFJMX0ZMQVQpOworfQorCit2b2lkIG10a19oZG1pX2h3
X2F1ZF9zZXRfYml0X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJIGVudW0gaGRtaV9h
dWRpb19zYW1wbGVfc2l6ZSBiaXRfbnVtKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKGJpdF9u
dW0gPT0gSERNSV9BVURJT19TQU1QTEVfU0laRV8xNikKKwkJdmFsID0gQU9VVF8xNkJJVDsKKwll
bHNlIGlmIChiaXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjApCisJCXZhbCA9IEFP
VVRfMjBCSVQ7CisJZWxzZSBpZiAoYml0X251bSA9PSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0
KQorCQl2YWwgPSBBT1VUXzI0QklUOworCisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9VVF9C
TlVNX1NFTCwgdmFsLCAweDAzKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19m
bXQoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkX2kyc19mbXQgaTJz
X2ZtdCkKK3sKKwl1MzIgdmFsID0gMDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JM
X0NGRzApOworCXZhbCAmPSB+MHgzMzsKKworCXN3aXRjaCAoaTJzX2ZtdCkgeworCWNhc2UgSERN
SV9JMlNfTU9ERV9SSlRfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9SVEogfCBDRkcw
X0kyU19NT0RFXzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8xNkJJ
VDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX1JUSiB8IENGRzBfSTJTX01PREVfMTZCSVQpOwor
CQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzI0QklUOgorCQl2YWwgfD0gKENGRzBf
STJTX01PREVfTFRKIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJyZWFrOworCWNhc2UgSERN
SV9JMlNfTU9ERV9MSlRfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9MVEogfCBDRkcw
X0kyU19NT0RFXzE2QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX0kyU18yNEJJ
VDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfSTJTX01PREVfMjRCSVQpOwor
CQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzE2QklUOgorCQl2YWwgfD0gKENGRzBf
STJTX01PREVfSTJTIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6
CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZHMCwgdmFsKTsKK30K
Kwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2hpZ2hfYml0cmF0ZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRfQk5V
TV9TRUwsCisJCSAgICAgIGVuYWJsZSA/IEhJR0hfQklUX1JBVEVfUEFDS0VUX0FMSUdOIDogMCwK
KwkJICAgICAgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04pOworCW10a19oZG1pX21hc2soaGRt
aSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gSElHSF9CSVRfUkFURSA6IDAsCisJCSAgICAgIEhJ
R0hfQklUX1JBVEUpOworfQorCit2b2lkIG10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3Vi
bGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIGJvb2wgZW5hYmxl
KQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gRFNUX05P
Uk1BTF9ET1VCTEUgOiAwLAorCQkgICAgICBEU1RfTk9STUFMX0RPVUJMRSk7Cit9CisKK3ZvaWQg
bXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVu
YWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/IFNB
Q0RfRFNUIDogMCwgU0FDRF9EU1QpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc2RfZW5h
YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFz
ayhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBTQUNEX1NFTCA6IDAsIFNBQ0RfU0VMKTsK
K30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90
eXBlLAorCQkJCSAgICAgIHU4IGNoYW5uZWxfY291bnQpCit7CisJdTggdmFsXzEsIHZhbF8yLCB2
YWxfMywgdmFsXzQ7CisKKwlpZiAoY2hhbm5lbF9jb3VudCA9PSAyKSB7CisJCXZhbF8xID0gMHgw
NDsKKwkJdmFsXzIgPSAweDUwOworCX0gZWxzZSBpZiAoY2hhbm5lbF9jb3VudCA9PSAzIHx8IGNo
YW5uZWxfY291bnQgPT0gNCkgeworCQlpZiAoY2hhbm5lbF9jb3VudCA9PSA0ICYmCisJCSAgICAo
Y2hhbm5lbF90eXBlID09IEhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTIHx8CisJCSAgICBjaGFu
bmVsX3R5cGUgPT0gSERNSV9BVURfQ0hBTl9UWVBFXzRfMCkpIHsKKwkJCXZhbF8xID0gMHgxNDsK
KwkJfSBlbHNlIHsKKwkJCXZhbF8xID0gMHgwYzsKKwkJfQorCQl2YWxfMiA9IDB4NTA7CisJfSBl
bHNlIGlmIChjaGFubmVsX2NvdW50ID09IDYgfHwgY2hhbm5lbF9jb3VudCA9PSA1KSB7CisJCWlm
IChjaGFubmVsX2NvdW50ID09IDYgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FVRF9D
SEFOX1RZUEVfNV8xICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9UWVBF
XzRfMV9DTFJTKSB7CisJCQl2YWxfMSA9IDB4M2M7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0gZWxz
ZSB7CisJCQl2YWxfMSA9IDB4MWM7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0KKwl9IGVsc2UgaWYg
KGNoYW5uZWxfY291bnQgPT0gOCB8fCBjaGFubmVsX2NvdW50ID09IDcpIHsKKwkJdmFsXzEgPSAw
eDNjOworCQl2YWxfMiA9IDB4NTA7CisJfSBlbHNlIHsKKwkJdmFsXzEgPSAweDA0OworCQl2YWxf
MiA9IDB4NTA7CisJfQorCisJdmFsXzMgPSAweGM2OworCXZhbF80ID0gMHhmYTsKKworCW10a19o
ZG1pX3dyaXRlKGhkbWksIEdSTF9DSF9TVzAsIHZhbF8yKTsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfQ0hfU1cxLCB2YWxfMyk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NIX1NXMiwg
dmFsXzQpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfVVYsIHZhbF8xKTsKK30KKwor
dm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpoZG1p
LAorCQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSkKK3sKKwl1MzIg
dmFsID0gMDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzEpOworCWlmIChp
bnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX0kyUyAmJgorCSAgICAodmFsICYgQ0ZHMV9TUERJ
RikgPT0gQ0ZHMV9TUERJRikgeworCQl2YWwgJj0gfkNGRzFfU1BESUY7CisJfSBlbHNlIGlmIChp
bnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElGICYmCisJCSh2YWwgJiBDRkcxX1NQRElG
KSA9PSAwKSB7CisJCXZhbCB8PSBDRkcxX1NQRElGOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfQ0ZHMSwgdmFsKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxf
c3RhdHVzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJdTggKmxfY2hhbl9zdGF0dXMsIHU4
ICpyX2NoYW5fc3RhdHVzLAorCQkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeQor
CQkJCQlhdWRfaGRtaV9mcykKK3sKKwl1OCBsX3N0YXR1c1s1XTsKKwl1OCByX3N0YXR1c1s1XTsK
Kwl1OCB2YWwgPSAwOworCisJbF9zdGF0dXNbMF0gPSBsX2NoYW5fc3RhdHVzWzBdOworCWxfc3Rh
dHVzWzFdID0gbF9jaGFuX3N0YXR1c1sxXTsKKwlsX3N0YXR1c1syXSA9IGxfY2hhbl9zdGF0dXNb
Ml07CisJcl9zdGF0dXNbMF0gPSByX2NoYW5fc3RhdHVzWzBdOworCXJfc3RhdHVzWzFdID0gcl9j
aGFuX3N0YXR1c1sxXTsKKwlyX3N0YXR1c1syXSA9IHJfY2hhbl9zdGF0dXNbMl07CisKKwlsX3N0
YXR1c1swXSAmPSB+MHgwMjsKKwlyX3N0YXR1c1swXSAmPSB+MHgwMjsKKworCXZhbCA9IGxfY2hh
bl9zdGF0dXNbM10gJiAweGYwOworCXN3aXRjaCAoYXVkX2hkbWlfZnMpIHsKKwljYXNlIEhETUlf
QVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDoKKwkJdmFsIHw9IDB4MDM7CisJCWJyZWFrOwor
CWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOgorCQlicmVhazsKKwljYXNl
IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV84ODIwMDoKKwkJdmFsIHw9IDB4MDg7CisJCWJy
ZWFrOworCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzk2MDAwOgorCQl2YWwgfD0g
MHgwYTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA6
CisJCXZhbCB8PSAweDAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgfD0gMHgwMjsKKwkJ
YnJlYWs7CisJfQorCWxfc3RhdHVzWzNdID0gdmFsOworCXJfc3RhdHVzWzNdID0gdmFsOworCisJ
dmFsID0gbF9jaGFuX3N0YXR1c1s0XTsKKwl2YWwgfD0gKCh+KGxfc3RhdHVzWzNdICYgMHgwZikp
IDw8IDQpOworCWxfc3RhdHVzWzRdID0gdmFsOworCXJfc3RhdHVzWzRdID0gdmFsOworCisJdmFs
ID0gbF9zdGF0dXNbMF07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTAsIHZh
bCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzAsIHZhbCk7CisKKwl2YWwg
PSByX3N0YXR1c1swXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMCwgdmFs
KTsKKworCXZhbCA9IGxfc3RhdHVzWzFdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNf
Q19TVEExLCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18xLCB2YWwp
OworCisJdmFsID0gcl9zdGF0dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RB
VFVTXzEsIHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1syXTsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfSTJTX0NfU1RBMiwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFU
VVNfMiwgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhkbWks
IEdSTF9SX1NUQVRVU18yLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbM107CisJbXRrX2hkbWlf
d3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTMsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwg
R1JMX0xfU1RBVFVTXzMsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1szXTsKKwltdGtfaGRtaV93
cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMywgdmFsKTsKKworCXZhbCA9IGxfc3RhdHVzWzRdOwor
CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEE0LCB2YWwpOworCW10a19oZG1pX3dy
aXRlKGhkbWksIEdSTF9MX1NUQVRVU180LCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbNF07CisJ
bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzQsIHZhbCk7CisKKwlmb3IgKHZhbCA9
IDA7IHZhbCA8IDE5OyB2YWwrKykgeworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFU
VVNfNSArIHZhbCAqIDQsIDApOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNf
NSArIHZhbCAqIDQsIDApOworCX0KK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3JlZW5h
YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hk
bWlfcmVhZChoZG1pLCBHUkxfTUlYX0NUUkwpOworCWlmICh2YWwgJiBNSVhfQ1RSTF9TUkNfRU4p
IHsKKwkJdmFsICY9IH5NSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdS
TF9NSVhfQ1RSTCwgdmFsKTsKKwkJdXNsZWVwX3JhbmdlKDI1NSwgNTEyKTsKKwkJdmFsIHw9IE1J
WF9DVFJMX1NSQ19FTjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwp
OworCX0KK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX29mZihzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX01J
WF9DVFJMKTsKKwl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1NISUZUX0wx
LCAweDAwKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X21jbGsoc3RydWN0IG10a19o
ZG1pICpoZG1pLCBlbnVtIGhkbWlfYXVkX21jbGsgbWNsaykKK3sKKwl1MzIgdmFsOworCisJdmFs
ID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZHNSk7CisJdmFsICY9IENGRzVfQ0RfUkFUSU9f
TUFTSzsKKworCXN3aXRjaCAobWNsaykgeworCWNhc2UgSERNSV9BVURfTUNMS18xMjhGUzoKKwkJ
dmFsIHw9IENGRzVfRlMxMjg7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18yNTZGUzoK
KwkJdmFsIHw9IENGRzVfRlMyNTY7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18zODRG
UzoKKwkJdmFsIHw9IENGRzVfRlMzODQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS181
MTJGUzoKKwkJdmFsIHw9IENGRzVfRlM1MTI7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNM
S183NjhGUzoKKwkJdmFsIHw9IENGRzVfRlM3Njg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZh
bCB8PSBDRkc1X0ZTMjU2OworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM
X0NGRzUsIHZhbCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZShz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXUzMiB2YWw7CisKKwl2YWwg
PSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcyKTsKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0g
MHg4MDsKKwllbHNlCisJCXZhbCAmPSB+MHg4MDsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf
Q0ZHMiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZG9faGRtaV9od19hdWRfc2V0X25jdHMoc3Ry
dWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0
aCBkZXB0aCwKKwkJCQkgICAgZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kgZnJlcSwK
KwkJCQkgICAgaW50IHBpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbFtOQ1RTX0JZVEVTXTsKKwl1
bnNpZ25lZCBpbnQgdGVtcDsKKwlpbnQgaSA9IDA7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfTkNUUywgMCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10a19o
ZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQodmFsLCAwLCBzaXplb2YodmFs
KSk7CisKKwlpZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzI0QklUUykgeworCQlmb3IgKGkg
PSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKSB7CisJCQlpZiAoKGZyZXEgPCA4KSAmJiAocGl4IDwg
OSkpCisJCQkJdmFsW2ldID0gSERNSV9OQ1RTW2ZyZXEgLSAxXVtwaXhdW2ldOworCQl9CisJCXRl
bXAgPSAodmFsWzBdIDw8IDI0KSB8ICh2YWxbMV0gPDwgMTYpIHwKKwkJCSh2YWxbMl0gPDwgOCkg
fCAodmFsWzNdKTsJLyogQ1RTICovCisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IE5DVFNf
QllURVM7IGkrKykgeworCQkJaWYgKChmcmVxIDwgNykgJiYgKHBpeCA8IDkpKQorCQkJCXZhbFtp
XSA9IEhETUlfTkNUU1tmcmVxIC0gMV1bcGl4XVtpXTsKKwkJfQorCisJCXRlbXAgPQorCQkgICAg
KHZhbFswXSA8PCAyNCkgfCAodmFsWzFdIDw8IDE2KSB8ICh2YWxbMl0gPDwgOCkgfCAodmFsWzNd
KTsKKworCQlpZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzMwQklUUykKKwkJCXRlbXAgPSAo
dGVtcCA+PiAyKSAqIDU7CisJCWVsc2UgaWYgKGRlcHRoID09IEhETUlfREVFUF9DT0xPUl8zNkJJ
VFMpCisJCQl0ZW1wID0gKHRlbXAgPj4gMSkgKiAzOworCQllbHNlIGlmIChkZXB0aCA9PSBIRE1J
X0RFRVBfQ09MT1JfNDhCSVRTKQorCQkJdGVtcCA9ICh0ZW1wIDw8IDEpOworCisJCXZhbFswXSA9
ICh0ZW1wID4+IDI0KSAmIDB4ZmY7CisJCXZhbFsxXSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7CisJ
CXZhbFsyXSA9ICh0ZW1wID4+IDgpICYgMHhmZjsKKwkJdmFsWzNdID0gKHRlbXApICYgMHhmZjsK
Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQltdGtfaGRtaV93cml0
ZShoZG1pLCBHUkxfTkNUUywgdmFsW2ldKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0
X25jdHMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgZW51bSBoZG1pX2Rpc3BsYXlf
Y29sb3JfZGVwdGggZGVwdGgsCisJCQkgICAgICBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1
ZW5jeSBmcmVxLCBpbnQgY2xvY2spCit7CisJaW50IHBpeCA9IDA7CisKKwlzd2l0Y2ggKGNsb2Nr
KSB7CisJY2FzZSAyNzAwMDoKKwkJcGl4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSA3NDE3NToKKwkJ
cGl4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSA3NDI1MDoKKwkJcGl4ID0gMzsKKwkJYnJlYWs7CisJ
Y2FzZSAxNDgzNTA6CisJCXBpeCA9IDQ7CisJCWJyZWFrOworCWNhc2UgMTQ4NTAwOgorCQlwaXgg
PSA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaXggPSAwOworCQlicmVhazsKKwl9CisKKwlt
dGtfaGRtaV9tYXNrKGhkbWksIERVTU1ZXzMwNCwgQVVESU9fSTJTX05DVFNfU0VMXzY0LAorCQkg
ICAgICBBVURJT19JMlNfTkNUU19TRUwpOworCWRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWks
IGRlcHRoLCBmcmVxLCBwaXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19oZG1pX2h3LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VkODBhCi0tLSAvZGV2L251
bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmgKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRo
b3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfSFdfSAor
I2RlZmluZSBfTVRLX0hETUlfSFdfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNs
dWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKwordm9pZCBtdGtfaGRt
aV9od192aWRfYmxhY2soc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGJsYWNrKTsKK3ZvaWQg
bXRrX2hkbWlfaHdfYXVkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG11dGUpOwor
dm9pZCBtdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1
OCAqYnVmZmVyLCB1OCBsZW4pOwordm9pZCBtdGtfaGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoc3Ry
dWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7CitpbnQgbXRrX2hkbWlfaHdfc2V0X2Ns
b2NrKHN0cnVjdCBtdGtfaGRtaSAqaGN0eCwgdTMyIGNsb2NrKTsKK3ZvaWQgbXRrX2hkbWlfaHdf
Y29uZmlnX3N5cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19zZXRf
ZGVlcF9jb2xvcl9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIGVudW0gaGRt
aV9kaXNwbGF5X2NvbG9yX2RlcHRoIGRlcHRoKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl9t
dXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5t
dXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfZW5hYmxl
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBvbik7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9z
ZXRfY2hhbm5lbF9zd2FwKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVtIGhk
bWlfYXVkX2NoYW5uZWxfc3dhcF90eXBlIHN3YXApOwordm9pZCBtdGtfaGRtaV9od19hdWRfcmF3
X2RhdGFfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBt
dGtfaGRtaV9od19hdWRfc2V0X2JpdF9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBl
bnVtIGhkbWlfYXVkaW9fc2FtcGxlX3NpemUgYml0X251bSk7Cit2b2lkIG10a19oZG1pX2h3X2F1
ZF9zZXRfaGlnaF9iaXRyYXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwor
dm9pZCBtdGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksCisJCQkJCSAgICAgICBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3
X2F1ZF9kc3RfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9p
ZCBtdGtfaGRtaV9od19hdWRfZHNkX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wg
ZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSwKKwkJCQkgZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpOwordm9pZCBtdGtf
aGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJ
ICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAg
IHU4IGNoYW5uZWxfY291bnQpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUo
c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUg
aW5wdXRfdHlwZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoc3Ry
dWN0IG10a19oZG1pICpoZG1pLAorCQkJCQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJfY2hhbl9z
dGF1cywKKwkJCQkJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVkX2hk
bWlfZnMpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgZW51bSBoZG1pX2F1ZF9tY2xrIG1jbGspOwordm9pZCBtdGtfaGRt
aV9od19hdWRfc3JjX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9o
d19hdWRfc3JjX3JlZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1p
X2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJs
ZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
CisJCQkgICAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCwKKwkJCSAgICAg
IGVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5IGZyZXEsCisJCQkgICAgICBpbnQgY2xv
Y2spOworYm9vbCBtdGtfaGRtaV9od19pc19ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkp
Owordm9pZCBtdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1p
ICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksIGJvb2wgZW5hYmxlX25vdGljZSk7Cit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9t
YXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKTsKK3ZvaWQgbXRrX2hkbWlf
aHdfZW5hYmxlX2R2aV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwor
dm9pZCBtdGtfaGRtaV9od19uY3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19tc2ljX3NldHRpbmcoc3RydWN0
IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp
Owordm9pZCBtdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoc3RydWN0IG10a19oZG1pICpo
ZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2h0cGxnX2lycV9lbmFibGUoc3Ry
dWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfaHRwbGdfaXJxX2Rpc2FibGUo
c3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfY2xlYXJfaHRwbGdfaXJx
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisKKyNlbmRpZiAvKiBfTVRLX0hETUlfSFdfSCAqLwpk
aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3MuaCBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZGU3ZWUyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUu
cWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX1JFR1NfSAorI2RlZmluZSBfTVRLX0hE
TUlfUkVHU19ICisKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4CisjZGVmaW5lIEdSTF9JRk1f
UE9SVAkJMHgxODgKKyNkZWZpbmUgR1JMX0NIX1NXQVAJCTB4MTk4CisjZGVmaW5lIExSX1NXQVAJ
CQkJQklUKDApCisjZGVmaW5lIExGRV9DQ19TV0FQCQkJQklUKDEpCisjZGVmaW5lIExTUlNfU1dB
UAkJCUJJVCgyKQorI2RlZmluZSBSTFNfUlJTX1NXQVAJCQlCSVQoMykKKyNkZWZpbmUgTFJfU1RB
VFVTX1NXQVAJCQlCSVQoNCkKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTAJCTB4MTQwCisjZGVmaW5l
IEdSTF9JMlNfQ19TVEExCQkweDE0NAorI2RlZmluZSBHUkxfSTJTX0NfU1RBMgkJMHgxNDgKKyNk
ZWZpbmUgR1JMX0kyU19DX1NUQTMJCTB4MTRDCisjZGVmaW5lIEdSTF9JMlNfQ19TVEE0CQkweDE1
MAorI2RlZmluZSBHUkxfSTJTX1VWCQkweDE1NAorI2RlZmluZSBHUkxfQUNQX0lTUkNfQ1RSTAkw
eDE1OAorI2RlZmluZSBWU19FTgkJCQlCSVQoMCkKKyNkZWZpbmUgQUNQX0VOCQkJCUJJVCgxKQor
I2RlZmluZSBJU1JDMV9FTgkJCUJJVCgyKQorI2RlZmluZSBJU1JDMl9FTgkJCUJJVCgzKQorI2Rl
ZmluZSBHQU1VVF9FTgkJCUJJVCg0KQorI2RlZmluZSBHUkxfQ1RTX0NUUkwJCTB4MTYwCisjZGVm
aW5lIENUU19DVFJMX1NPRlQJCQlCSVQoMCkKKyNkZWZpbmUgR1JMX0lOVAkJCTB4MTQKKyNkZWZp
bmUgSU5UX01ESQkJCQlCSVQoMCkKKyNkZWZpbmUgSU5UX0hEQ1AJCQlCSVQoMSkKKyNkZWZpbmUg
SU5UX0ZJRk9fTwkJCUJJVCgyKQorI2RlZmluZSBJTlRfRklGT19VCQkJQklUKDMpCisjZGVmaW5l
IElOVF9JRk1fRVJSCQkJQklUKDQpCisjZGVmaW5lIElOVF9JTkZfRE9ORQkJCUJJVCg1KQorI2Rl
ZmluZSBJTlRfTkNUU19ET05FCQkJQklUKDYpCisjZGVmaW5lIElOVF9DVFJMX1BLVF9ET05FCQlC
SVQoNykKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4CisjZGVmaW5lIEdSTF9DVFJMCQkweDFD
CisjZGVmaW5lIENUUkxfR0VOX0VOCQkJQklUKDIpCisjZGVmaW5lIENUUkxfU1BEX0VOCQkJQklU
KDMpCisjZGVmaW5lIENUUkxfTVBFR19FTgkJCUJJVCg0KQorI2RlZmluZSBDVFJMX0FVRElPX0VO
CQkJQklUKDUpCisjZGVmaW5lIENUUkxfQVZJX0VOCQkJQklUKDYpCisjZGVmaW5lIENUUkxfQVZN
VVRFCQkJQklUKDcpCisjZGVmaW5lCUdSTF9TVEFUVVMJCTB4MjAKKyNkZWZpbmUgU1RBVFVTX0hU
UExHCQkJQklUKDApCisjZGVmaW5lIFNUQVRVU19QT1JECQkJQklUKDEpCisjZGVmaW5lIEdSTF9E
SVZOCQkweDE3MAorI2RlZmluZSBOQ1RTX1dSSV9BTllUSU1FCQlCSVQoNikKKyNkZWZpbmUgR1JM
X0FVRElPX0NGRwkJMHgxN0MKKyNkZWZpbmUgQVVESU9fWkVSTwkJCUJJVCgwKQorI2RlZmluZSBI
SUdIX0JJVF9SQVRFCQkJQklUKDEpCisjZGVmaW5lIFNBQ0RfRFNUCQkJQklUKDIpCisjZGVmaW5l
IERTVF9OT1JNQUxfRE9VQkxFCQlCSVQoMykKKyNkZWZpbmUgRFNEX0lOVgkJCQlCSVQoNCkKKyNk
ZWZpbmUgTFJfSU5WCQkJCUJJVCg1KQorI2RlZmluZSBMUl9NSVgJCQkJQklUKDYpCisjZGVmaW5l
IFNBQ0RfU0VMCQkJQklUKDcpCisjZGVmaW5lIEdSTF9OQ1RTCQkweDE4NAorI2RlZmluZSBHUkxf
Q0hfU1cwCQkweDE4QworI2RlZmluZSBHUkxfQ0hfU1cxCQkweDE5MAorI2RlZmluZSBHUkxfQ0hf
U1cyCQkweDE5NAorI2RlZmluZSBHUkxfSU5GT0ZSTV9WRVIJCTB4MTlDCisjZGVmaW5lIEdSTF9J
TkZPRlJNX1RZUEUJMHgxQTAKKyNkZWZpbmUgR1JMX0lORk9GUk1fTE5HCQkweDFBNAorI2RlZmlu
ZSBHUkxfTUlYX0NUUkwJCTB4MUI0CisjZGVmaW5lIE1JWF9DVFJMX1NSQ19FTgkJCUJJVCgwKQor
I2RlZmluZSBCWVBBU1NfVk9MVU1FCQkJQklUKDEpCisjZGVmaW5lIE1JWF9DVFJMX0ZMQVQJCQlC
SVQoNykKKyNkZWZpbmUgR1JMX0FPVVRfQk5VTV9TRUwJMHgxQzQKKyNkZWZpbmUgQU9VVF8yNEJJ
VAkJCTB4MDAKKyNkZWZpbmUgQU9VVF8yMEJJVAkJCTB4MDIKKyNkZWZpbmUgQU9VVF8xNkJJVAkJ
CTB4MDMKKyNkZWZpbmUgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04JKDB4MyA8PCA2KQorI2Rl
ZmluZSBHUkxfU0hJRlRfTDEJCTB4MUMwCisjZGVmaW5lIEdSTF9TSElGVF9SMgkJMHgxQjAKKyNk
ZWZpbmUgQVVESU9fUEFDS0VUX09GRgkJQklUKDYpCisjZGVmaW5lIEdSTF9DRkcwCQkweDI0Cisj
ZGVmaW5lIENGRzBfSTJTX01PREVfUlRKCQkweDEKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9MVEoJ
CTB4MAorI2RlZmluZSBDRkcwX0kyU19NT0RFX0kyUwkJMHgyCisjZGVmaW5lIENGRzBfSTJTX01P
REVfMjRCSVQJCTB4MDAKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV8xNkJJVAkJMHgxMAorI2RlZmlu
ZSBHUkxfQ0ZHMQkJMHgyOAorI2RlZmluZSBDRkcxX0VER19TRUwJCQlCSVQoMCkKKyNkZWZpbmUg
Q0ZHMV9TUERJRgkJCUJJVCgxKQorI2RlZmluZSBDRkcxX0RWSQkJCUJJVCgyKQorI2RlZmluZSBD
RkcxX0hEQ1BfREVCVUcJCQlCSVQoMykKKyNkZWZpbmUgR1JMX0NGRzIJCTB4MmMKKyNkZWZpbmUg
Q0ZHMl9OT1RJQ0VfRU4JCQlCSVQoNikKKyNkZWZpbmUgTUhMX0RFX1NFTAkJCUJJVCgzKQorI2Rl
ZmluZSBHUkxfQ0ZHMwkJMHgzMAorI2RlZmluZSBDRkczX0FFU19LRVlfSU5ERVhfTUFTSwkJMHgz
ZgorI2RlZmluZSBDRkczX0NPTlRST0xfUEFDS0VUX0RFTEFZCUJJVCg2KQorI2RlZmluZSBDRkcz
X0tTVl9MT0FEX1NUQVJUCQlCSVQoNykKKyNkZWZpbmUgR1JMX0NGRzQJCTB4MzQKKyNkZWZpbmUg
Q0ZHNF9BRVNfS0VZX0xPQUQJCUJJVCg0KQorI2RlZmluZSBDRkc0X0FWX1VOTVVURV9FTgkJQklU
KDUpCisjZGVmaW5lIENGRzRfQVZfVU5NVVRFX1NFVAkJQklUKDYpCisjZGVmaW5lIENGR19NSExf
TU9ERQkJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZHNQkJMHgzOAorI2RlZmluZSBDRkc1X0NEX1JB
VElPX01BU0sJMHg4RgorI2RlZmluZSBDRkc1X0ZTMTI4CQkJKDB4MSA8PCA0KQorI2RlZmluZSBD
Rkc1X0ZTMjU2CQkJKDB4MiA8PCA0KQorI2RlZmluZSBDRkc1X0ZTMzg0CQkJKDB4MyA8PCA0KQor
I2RlZmluZSBDRkc1X0ZTNTEyCQkJKDB4NCA8PCA0KQorI2RlZmluZSBDRkc1X0ZTNzY4CQkJKDB4
NiA8PCA0KQorI2RlZmluZSBEVU1NWV8zMDQJCTB4MzA0CisjZGVmaW5lIENITU9fU0VMCQkJKDB4
Mzw8MikKKyNkZWZpbmUgQ0hNMV9TRUwJCQkoMHgzPDw0KQorI2RlZmluZSBDSE0yX1NFTAkJCSgw
eDM8PDYpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTAkJQklUKDEpCisjZGVmaW5lIEFVRElP
X0kyU19OQ1RTX1NFTF82NAkJKDE8PDEpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTF8xMjgJ
CSgwPDwxKQorI2RlZmluZSBORVdfR0NQX0NUUkwJCQlCSVQoMCkKKyNkZWZpbmUgTkVXX0dDUF9D
VFJMX01FUkdFCQlCSVQoMCkKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzAJCTB4MjAwCisjZGVmaW5l
IEdSTF9MX1NUQVRVU18xCQkweDIwNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMgkJMHgyMDgKKyNk
ZWZpbmUgR1JMX0xfU1RBVFVTXzMJCTB4MjBjCisjZGVmaW5lIEdSTF9MX1NUQVRVU180CQkweDIx
MAorI2RlZmluZSBHUkxfTF9TVEFUVVNfNQkJMHgyMTQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzYJ
CTB4MjE4CisjZGVmaW5lIEdSTF9MX1NUQVRVU183CQkweDIxYworI2RlZmluZSBHUkxfTF9TVEFU
VVNfOAkJMHgyMjAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzkJCTB4MjI0CisjZGVmaW5lIEdSTF9M
X1NUQVRVU18xMAkJMHgyMjgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzExCQkweDIyYworI2RlZmlu
ZSBHUkxfTF9TVEFUVVNfMTIJCTB4MjMwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMwkJMHgyMzQK
KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE0CQkweDIzOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTUJ
CTB4MjNjCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xNgkJMHgyNDAKKyNkZWZpbmUgR1JMX0xfU1RB
VFVTXzE3CQkweDI0NAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTgJCTB4MjQ4CisjZGVmaW5lIEdS
TF9MX1NUQVRVU18xOQkJMHgyNGMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIwCQkweDI1MAorI2Rl
ZmluZSBHUkxfTF9TVEFUVVNfMjEJCTB4MjU0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMgkJMHgy
NTgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIzCQkweDI1YworI2RlZmluZSBHUkxfUl9TVEFUVVNf
MAkJMHgyNjAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEJCTB4MjY0CisjZGVmaW5lIEdSTF9SX1NU
QVRVU18yCQkweDI2OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMwkJMHgyNmMKKyNkZWZpbmUgR1JM
X1JfU1RBVFVTXzQJCTB4MjcwCisjZGVmaW5lIEdSTF9SX1NUQVRVU181CQkweDI3NAorI2RlZmlu
ZSBHUkxfUl9TVEFUVVNfNgkJMHgyNzgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzcJCTB4MjdjCisj
ZGVmaW5lIEdSTF9SX1NUQVRVU184CQkweDI4MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfOQkJMHgy
ODQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEwCQkweDI4OAorI2RlZmluZSBHUkxfUl9TVEFUVVNf
MTEJCTB4MjhjCisjZGVmaW5lIEdSTF9SX1NUQVRVU18xMgkJMHgyOTAKKyNkZWZpbmUgR1JMX1Jf
U1RBVFVTXzEzCQkweDI5NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTQJCTB4Mjk4CisjZGVmaW5l
IEdSTF9SX1NUQVRVU18xNQkJMHgyOWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE2CQkweDJhMAor
I2RlZmluZSBHUkxfUl9TVEFUVVNfMTcJCTB4MmE0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xOAkJ
MHgyYTgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE5CQkweDJhYworI2RlZmluZSBHUkxfUl9TVEFU
VVNfMjAJCTB4MmIwCisjZGVmaW5lIEdSTF9SX1NUQVRVU18yMQkJMHgyYjQKKyNkZWZpbmUgR1JM
X1JfU1RBVFVTXzIyCQkweDJiOAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMjMJCTB4MmJjCisjZGVm
aW5lIEdSTF9BQklTVF9DVFJMMAkJMHgyRDQKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwxCQkweDJE
OAorI2RlZmluZSBBQklTVF9FTgkJCUJJVCg3KQorI2RlZmluZSBBQklTVF9EQVRBX0ZNVAkJCSgw
eDcgPDwgMCkKKyNkZWZpbmUgVklERU9fQ0ZHXzAJCTB4MzgwCisjZGVmaW5lIFZJREVPX0NGR18x
CQkweDM4NAorI2RlZmluZSBWSURFT19DRkdfMgkJMHgzODgKKyNkZWZpbmUgVklERU9fQ0ZHXzMJ
CTB4MzhjCisjZGVmaW5lIFZJREVPX0NGR180CQkweDM5MAorI2RlZmluZSBWSURFT19TT1VSQ0Vf
U0VMCQlCSVQoNykKKyNkZWZpbmUgTk9STUFMX1BBVEgJCQkoMSA8PCA3KQorI2RlZmluZSBHRU5f
UkdCCQkJCSgwIDw8IDcpCisKKyNkZWZpbmUgSERNSV9TWVNfQ0ZHMUMJCTB4MDAwCisjZGVmaW5l
IEhETUlfT04JCQkJQklUKDApCisjZGVmaW5lIEhETUlfUlNUCQkJQklUKDEpCisjZGVmaW5lIEFO
TEdfT04JCQkJQklUKDIpCisjZGVmaW5lIENGRzEwX0RWSQkJCUJJVCgzKQorI2RlZmluZSBIRE1J
X1RTVAkJCUJJVCgzKQorI2RlZmluZSBTWVNfS0VZTUFTSzEJCQkoMHhmZiA8PCA4KQorI2RlZmlu
ZSBTWVNfS0VZTUFTSzIJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgQVVEX09VVFNZTkNfRU4JCQlC
SVQoMjQpCisjZGVmaW5lIEFVRF9PVVRTWU5DX1BSRV9FTgkJQklUKDI1KQorI2RlZmluZSBJMkNN
X09OCQkJCUJJVCgyNikKKyNkZWZpbmUgRTJQUk9NX1RZUEVfOEJJVAkJQklUKDI3KQorI2RlZmlu
ZSBNQ01fRTJQUk9NX09OCQkJQklUKDI4KQorI2RlZmluZSBFWFRfRTJQUk9NX09OCQkJQklUKDI5
KQorI2RlZmluZSBIVFBMR19QSU5fU0VMX09GRgkJQklUKDMwKQorI2RlZmluZSBBRVNfRUZVU0Vf
RU5BQkxFCQlCSVQoMzEpCisjZGVmaW5lIEhETUlfU1lTX0NGRzIwCQkweDAwNAorI2RlZmluZSBE
RUVQX0NPTE9SX01PREVfTUFTSwkJKDMgPDwgMSkKKyNkZWZpbmUgQ09MT1JfOEJJVF9NT0RFCQkJ
KDAgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTBCSVRfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgQ09M
T1JfMTJCSVRfTU9ERQkJKDIgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTZCSVRfTU9ERQkJKDMgPDwg
MSkKKyNkZWZpbmUgREVFUF9DT0xPUl9FTgkJCUJJVCgwKQorI2RlZmluZSBIRE1JX0FVRElPX1RF
U1RfU0VMCQlCSVQoOCkKKyNkZWZpbmUgSERNSTJQMF9FTgkJCUJJVCgxMSkKKyNkZWZpbmUgSERN
SV9PVVRfRklGT19FTgkJQklUKDE2KQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJ
VCgxNykKKyNkZWZpbmUgTUhMX01PREVfT04JCQlCSVQoMjgpCisjZGVmaW5lIE1ITF9QUF9NT0RF
CQkJQklUKDI5KQorI2RlZmluZSBNSExfU1lOQ19BVVRPX0VOCQlCSVQoMzApCisjZGVmaW5lIEhE
TUlfUENMS19GUkVFX1JVTgkJQklUKDMxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjhkYmNhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFp
dUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9j
bGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4
L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21v
ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0
Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEhETUlf
Q09OMAkJMHgwMAorI2RlZmluZSBSR19IRE1JVFhfUExMX0VOCQlCSVQoMzEpCisjZGVmaW5lIFJH
X0hETUlUWF9QTExfRkJLRElWCQkoMHg3ZiA8PCAyNCkKKyNkZWZpbmUgUExMX0ZCS0RJVl9TSElG
VAkJMjQKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9GQktTRUwJCSgweDMgPDwgMjIpCisjZGVmaW5l
IFBMTF9GQktTRUxfU0hJRlQJCTIyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfUFJFRElWCQkoMHgz
IDw8IDIwKQorI2RlZmluZSBQUkVESVZfU0hJRlQJCQkyMAorI2RlZmluZSBSR19IRE1JVFhfUExM
X1BPU0RJVgkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgUE9TRElWX1NISUZUCQkJMTgKKyNkZWZpbmUg
UkdfSERNSVRYX1BMTF9SU1RfRExZCQkoMHgzIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfUExM
X0lSCQkoMHhmIDw8IDEyKQorI2RlZmluZSBQTExfSVJfU0hJRlQJCQkxMgorI2RlZmluZSBSR19I
RE1JVFhfUExMX0lDCQkoMHhmIDw8IDgpCisjZGVmaW5lIFBMTF9JQ19TSElGVAkJCTgKKyNkZWZp
bmUgUkdfSERNSVRYX1BMTF9CUAkJKDB4ZiA8PCA0KQorI2RlZmluZSBQTExfQlBfU0hJRlQJCQk0
CisjZGVmaW5lIFJHX0hETUlUWF9QTExfQlIJCSgweDMgPDwgMikKKyNkZWZpbmUgUExMX0JSX1NI
SUZUCQkJMgorI2RlZmluZSBSR19IRE1JVFhfUExMX0JDCQkoMHgzIDw8IDApCisjZGVmaW5lIFBM
TF9CQ19TSElGVAkJCTAKKyNkZWZpbmUgSERNSV9DT04xCQkweDA0CisjZGVmaW5lIFJHX0hETUlU
WF9QTExfRElWRU4JCSgweDcgPDwgMjkpCisjZGVmaW5lIFBMTF9ESVZFTl9TSElGVAkJCTI5Cisj
ZGVmaW5lIFJHX0hETUlUWF9QTExfQVVUT0tfRU4JCUJJVCgyOCkKKyNkZWZpbmUgUkdfSERNSVRY
X1BMTF9BVVRPS19LRgkJKDB4MyA8PCAyNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19L
UwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19MT0FECUJJVCgyMykK
KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CQU5ECQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERN
SVRYX1BMTF9SRUZfU0VMCQlCSVQoMTUpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19FTgkJ
QklUKDE0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOCUJJVCgxMykKKyNkZWZp
bmUgUkdfSERNSVRYX1BMTF9UWERJVl9FTgkJQklUKDEyKQorI2RlZmluZSBSR19IRE1JVFhfUExM
X1RYRElWCQkoMHgzIDw8IDEwKQorI2RlZmluZSBQTExfVFhESVZfU0hJRlQJCQkxMAorI2RlZmlu
ZSBSR19IRE1JVFhfUExMX0xWUk9EX0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9N
T05WQ19FTgkJQklUKDgpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OQ0tfRU4JCUJJVCg3KQor
I2RlZmluZSBSR19IRE1JVFhfUExMX01PTlJFRl9FTgkJQklUKDYpCisjZGVmaW5lIFJHX0hETUlU
WF9QTExfVFNUX0VOCQlCSVQoNSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfQ0tfRU4JCUJJ
VCg0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RTVF9TRUwJCSgweGYgPDwgMCkKKyNkZWZpbmUg
SERNSV9DT04yCQkweDA4CisjZGVmaW5lIFJHU19IRE1JVFhfUExMX0FVVE9LX0JBTkQJKDB4N2Yg
PDwgOCkKKyNkZWZpbmUgUkdTX0hETUlUWF9QTExfQVVUT0tfRkFJTAlCSVQoMSkKKyNkZWZpbmUg
UkdfSERNSVRYX0VOX1RYX0NLTERPCQlCSVQoMCkKKyNkZWZpbmUgSERNSV9DT04zCQkweDBjCisj
ZGVmaW5lIFJHX0hETUlUWF9TRVJfRU4JCSgweGYgPDwgMjgpCisjZGVmaW5lIFJHX0hETUlUWF9Q
UkRfRU4JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSU1QX0VOCQkoMHhmIDw8
IDIwKQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0VOCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR19I
RE1JVFhfRFJWX0lNUF9FTgkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgRFJWX0lNUF9FTl9TSElGVAkJ
MTIKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0ZPUkNFCQlCSVQoMTApCisjZGVmaW5lIFJHX0hE
TUlUWF9NSExDS19QUElYX0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0VOCQlC
SVQoOCkKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9ESU5fU0VMCQkoMHhmIDw8IDQpCisjZGVmaW5l
IFJHX0hETUlUWF9TRVJfNVQxX0JJU1RfRU4JQklUKDMpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf
QklTVF9UT0cJCUJJVCgyKQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9UT0cJCUJJVCgxKQor
I2RlZmluZSBSR19IRE1JVFhfU0VSX0NMS0RJR19JTlYJQklUKDApCisjZGVmaW5lIEhETUlfQ09O
NAkJMHgxMAorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0NMSwkJKDB4ZiA8PCAyNCkKKyNk
ZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERN
SVRYX1BSRF9JQklBU19EMQkJKDB4ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFT
X0QwCQkoMHhmIDw8IDApCisjZGVmaW5lIFBSRF9JQklBU19DTEtfU0hJRlQJCTI0CisjZGVmaW5l
IFBSRF9JQklBU19EMl9TSElGVAkJMTYKKyNkZWZpbmUgUFJEX0lCSUFTX0QxX1NISUZUCQk4Cisj
ZGVmaW5lIFBSRF9JQklBU19EMF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjUJCTB4MTQKKyNk
ZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19I
RE1JVFhfRFJWX0lCSUFTX0QyCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9J
QklBU19EMQkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMAkJKDB4
M2YgPDwgMCkKKyNkZWZpbmUgRFJWX0lCSUFTX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lC
SUFTX0QyX1NISUZUCQkxNgorI2RlZmluZSBEUlZfSUJJQVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUg
RFJWX0lCSUFTX0QwX1NISUZUCQkwCisjZGVmaW5lIEhETUlfQ09ONgkJMHgxOAorI2RlZmluZSBS
R19IRE1JVFhfRFJWX0lNUF9DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJW
X0lNUF9EMgkJKDB4M2YgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QxCQkoMHgz
ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9EMAkJKDB4M2YgPDwgMCkKKyNkZWZp
bmUgRFJWX0lNUF9DTEtfU0hJRlQJCTI0CisjZGVmaW5lIERSVl9JTVBfRDJfU0hJRlQJCTE2Cisj
ZGVmaW5lIERSVl9JTVBfRDFfU0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lNUF9EMF9TSElGVAkJMAor
I2RlZmluZSBIRE1JX0NPTjcJCTB4MWMKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0RSVl9JQklB
UwkoMHgxZiA8PCAyNykKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9ESU4JCSgweDNmZiA8PCAxNikK
KyNkZWZpbmUgUkdfSERNSVRYX0NITERDX1RTVAkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdfSERN
SVRYX0NITENLX1RTVAkJKDB4ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUkVTRVJWRQkJKDB4
ZmYgPDwgMCkKKyNkZWZpbmUgSERNSV9DT044CQkweDIwCisjZGVmaW5lIFJHU19IRE1JVFhfMlQx
X0xFVgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdTX0hETUlUWF8yVDFfRURHCQkoMHhmIDw8IDEy
KQorI2RlZmluZSBSR1NfSERNSVRYXzVUMV9MRVYJCSgweGYgPDwgOCkKKyNkZWZpbmUgUkdTX0hE
TUlUWF81VDFfRURHCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHU19IRE1JVFhfUExVR19UU1QJCUJJ
VCgwKQorCitzdHJ1Y3QgbXRrX2hkbWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3Ry
dWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBjbGsgKnBsbDsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9o
dzsKKwl1bnNpZ25lZCBsb25nIHBsbF9yYXRlOworCXU4IGRydl9pbXBfY2xrOworCXU4IGRydl9p
bXBfZDI7CisJdTggZHJ2X2ltcF9kMTsKKwl1OCBkcnZfaW1wX2QwOworCXUzMiBpYmlhczsKKwl1
MzIgaWJpYXNfdXA7Cit9OworCitzdGF0aWMgY29uc3QgdTggUFJFRElWWzNdWzRdID0geworCXsw
eDAsIDB4MCwgMHgwLCAweDB9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkv
KiA3NE1oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3Rh
dGljIGNvbnN0IHU4IFRYRElWWzNdWzRdID0geworCXsweDMsIDB4MywgMHgzLCAweDJ9LAkvKiAy
N01oeiAqLworCXsweDIsIDB4MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwg
MHgwLCAweDB9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS1NFTFszXVs0
XSA9IHsKKwl7MHgxLCAweDEsIDB4MSwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDAsIDB4
MSwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfQkvKiAxNDhNaHogKi8K
K307CisKK3N0YXRpYyBjb25zdCB1OCBGQktESVZbM11bNF0gPSB7CisJezE5LCAyNCwgMjksIDE5
fSwJLyogMjdNaHogKi8KKwl7MTksIDI0LCAxNCwgMTl9LAkvKiA3NE1oeiAqLworCXsxOSwgMjQs
IDE0LCAxOX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRElWRU5bM11bNF0g
PSB7CisJezB4MiwgMHgxLCAweDEsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgyLCAweDIs
IDB4Mn0sCS8qIDc0TWh6ICovCisJezB4MiwgMHgyLCAweDIsIDB4Mn0JLyogMTQ4TWh6ICovCit9
OworCitzdGF0aWMgY29uc3QgdTggSFRQTExCUFszXVs0XSA9IHsKKwl7MHhjLCAweGMsIDB4OCwg
MHhjfSwJLyogMjdNaHogKi8KKwl7MHhjLCAweGYsIDB4ZiwgMHhjfSwJLyogNzRNaHogKi8KKwl7
MHhjLCAweGYsIDB4ZiwgMHhjfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBI
VFBMTEJDWzNdWzRdID0geworCXsweDIsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsw
eDIsIDB4MywgMHgzLCAweDJ9LAkvKiA3NE1oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9CS8q
IDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQlJbM11bNF0gPSB7CisJezB4
MSwgMHgxLCAweDAsIDB4MX0sCS8qIDI3TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0sCS8q
IDc0TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0
aWMgdm9pZCBtdGtfaGRtaV9waHlfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwg
dTMyIG9mZnNldCwKKwkJCSAgICAgIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiB0bXAgPSBy
ZWFkbChoZG1pX3BoeS0+cmVncyAgKyBvZmZzZXQpICYgfm1hc2s7CisKKwl0bXAgfD0gKHZhbCAm
IG1hc2spOworCXdyaXRlbCh0bXAsIGhkbWlfcGh5LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3Rh
dGljIGlubGluZSBzdHJ1Y3QgbXRrX2hkbWlfcGh5ICp0b19tdGtfaGRtaV9waHkoc3RydWN0IGNs
a19odyAqaHcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19oZG1pX3Bo
eSwgcGxsX2h3KTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9wbGxfcHJlcGFyZShzdHJ1Y3Qg
Y2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19o
ZG1pX3BoeShodyk7CisKKwlkZXZfZGJnKGhkbWlfcGh5LT5kZXYsICJwcmVwYXJlXG4iKTsKKwor
CW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQVVU
T0tfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQVVUT0tfRU4pOworCW10a19oZG1pX3BoeV9tYXNr
KGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1J
VFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywg
MCwgUkdfSERNSVRYX01ITENLX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERN
SV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQklBU19F
Tik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo
eSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExMX0VOLAorCQkJICBSR19IRE1JVFhfUExMX0VOKTsK
Kwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBI
RE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4sCisJCQkgIFJHX0hETUlUWF9QTExf
QklBU19MUEZfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJH
X0hETUlUWF9QTExfVFhESVZfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfVFhESVZfRU4pOworCisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BsbF91bnByZXBhcmUoc3RydWN0
IGNsa19odyAqaHcpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtf
aGRtaV9waHkoaHcpOworCisJZGV2X2RiZyhoZG1pX3BoeS0+ZGV2LCAicHJlcGFyZVxuIik7CisK
KwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExM
X1RYRElWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBS
R19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10
a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9QTExfRU4p
OworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHks
IEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9CSUFTX0VOKTsKKwltdGtfaGRtaV9waHlfbWFz
ayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJbXRrX2hk
bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9BVVRPS19F
Tik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9w
bGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkg
dW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1p
X3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisJdW5zaWduZWQgaW50IHByZV9kaXY7CisJdW5z
aWduZWQgaW50IGRpdjsKKworCWRldl9kYmcoaGRtaV9waHktPmRldiwgInNldCByYXRlIDogJWx1
LCBwYXJlbnQ6ICVsdVxuIiwgcmF0ZSwKKwkJcGFyZW50X3JhdGUpOworCisJaWYgKHJhdGUgPD0g
MjcwMDAwMDApIHsKKwkJcHJlX2RpdiA9IDA7CisJCWRpdiA9IDM7CisJfSBlbHNlIGlmIChyYXRl
IDw9IDc0MjUwMDAwKSB7CisJCXByZV9kaXYgPSAxOworCQlkaXYgPSAyOworCX0gZWxzZSB7CisJ
CXByZV9kaXYgPSAxOworCQlkaXYgPSAxOworCX0KKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlf
cGh5LCBIRE1JX0NPTjAsCisJCQkgIChwcmVfZGl2IDw8IFBSRURJVl9TSElGVCksCisJCQkgIFJH
X0hETUlUWF9QTExfUFJFRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9D
T04wLCBSR19IRE1JVFhfUExMX1BPU0RJViwKKwkJCSAgUkdfSERNSVRYX1BMTF9QT1NESVYpOwor
CW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkgICgweDEgPDwgUExM
X0lDX1NISUZUKSB8ICgweDEgPDwgUExMX0lSX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9J
QyB8IFJHX0hETUlUWF9QTExfSVIpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1J
X0NPTjEsCisJCQkgIChkaXYgPDwgUExMX1RYRElWX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BM
TF9UWERJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAg
KDB4MSA8PCBQTExfRkJLU0VMX1NISUZUKSB8ICgxOSA8PCBQTExfRkJLRElWX1NISUZUKSwKKwkJ
CSAgUkdfSERNSVRYX1BMTF9GQktTRUwgfCBSR19IRE1JVFhfUExMX0ZCS0RJVik7CisJbXRrX2hk
bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwKKwkJCSAgKDB4MiA8PCBQTExfRElWRU5f
U0hJRlQpLAorCQkJICBSR19IRE1JVFhfUExMX0RJVkVOKTsKKwltdGtfaGRtaV9waHlfbWFzayho
ZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoMHhjIDw8IFBMTF9CUF9TSElGVCkgfCAoMHgyIDw8
IFBMTF9CQ19TSElGVCkgfAorCQkJICAoMHgxIDw8IFBMTF9CUl9TSElGVCksCisJCQkgIFJHX0hE
TUlUWF9QTExfQlAgfCBSR19IRE1JVFhfUExMX0JDIHwKKwkJCSAgUkdfSERNSVRYX1BMTF9CUik7
CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1BS
RF9JTVBfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQsCisJCQkg
ICgweDMgPDwgUFJEX0lCSUFTX0NMS19TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19E
Ml9TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJICAoMHgz
IDw8IFBSRF9JQklBU19EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xLIHwK
KwkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNf
RDEgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QwKTsKKwltdGtfaGRtaV9waHlfbWFzayho
ZG1pX3BoeSwgSERNSV9DT04zLAorCQkJICAoMHgwIDw8IERSVl9JTVBfRU5fU0hJRlQpLAorCQkJ
ICBSR19IRE1JVFhfRFJWX0lNUF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhE
TUlfQ09ONiwKKwkJCSAgKGhkbWlfcGh5LT5kcnZfaW1wX2NsayA8PCBEUlZfSU1QX0NMS19TSElG
VCkgfAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfZDIgPDwgRFJWX0lNUF9EMl9TSElGVCkgfAor
CQkJICAoaGRtaV9waHktPmRydl9pbXBfZDEgPDwgRFJWX0lNUF9EMV9TSElGVCkgfAorCQkJICAo
aGRtaV9waHktPmRydl9pbXBfZDAgPDwgRFJWX0lNUF9EMF9TSElGVCksCisJCQkgIFJHX0hETUlU
WF9EUlZfSU1QX0NMSyB8IFJHX0hETUlUWF9EUlZfSU1QX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS
Vl9JTVBfRDEgfCBSR19IRE1JVFhfRFJWX0lNUF9EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt
aV9waHksIEhETUlfQ09ONSwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfQ0xL
X1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8
CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QxX1NISUZUKSB8CisJCQkgICho
ZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX0RS
Vl9JQklBU19DTEsgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS
Vl9JQklBU19EMSB8IFJHX0hETUlUWF9EUlZfSUJJQVNfRDApOworCXJldHVybiAwOworfQorCitz
dGF0aWMgbG9uZyBtdGtfaGRtaV9wbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5z
aWduZWQgbG9uZyByYXRlLAorCQl1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1
Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwloZG1p
X3BoeS0+cGxsX3JhdGUgPSByYXRlOworCWlmIChyYXRlIDw9IDc0MjUwMDAwKQorCQkqcGFyZW50
X3JhdGUgPSByYXRlOworCWVsc2UKKwkJKnBhcmVudF9yYXRlID0gcmF0ZSAvIDI7CisKKwlyZXR1
cm4gcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3JlY2FsY19y
YXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQorewor
CXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKwor
CXJldHVybiBoZG1pX3BoeS0+cGxsX3JhdGU7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBj
bGtfb3BzIG10a19oZG1pX3BsbF9vcHMgPSB7CisJLnByZXBhcmUgPSBtdGtfaGRtaV9wbGxfcHJl
cGFyZSwKKwkudW5wcmVwYXJlID0gbXRrX2hkbWlfcGxsX3VucHJlcGFyZSwKKwkuc2V0X3JhdGUg
PSBtdGtfaGRtaV9wbGxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBtdGtfaGRtaV9wbGxfcm91
bmRfcmF0ZSwKKwkucmVjYWxjX3JhdGUgPSBtdGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUsCit9Owor
CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlfZW5hYmxlX3RtZHMoc3RydWN0IG10a19oZG1pX3Bo
eSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywg
UkdfSERNSVRYX1NFUl9FTiwKKwkJCSAgUkdfSERNSVRYX1NFUl9FTik7CisJbXRrX2hkbWlfcGh5
X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX1BSRF9FTiwKKwkJCSAgUkdfSERN
SVRYX1BSRF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdf
SERNSVRYX0RSVl9FTiwKKwkJCSAgUkdfSERNSVRYX0RSVl9FTik7CisJdXNsZWVwX3JhbmdlKDEw
MCwgMTUwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhzdHJ1
Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkKK3sKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo
eSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfRFJWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayho
ZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfUFJEX0VOKTsKKwltdGtfaGRtaV9waHlf
bWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfU0VSX0VOKTsKK30KKworc3Rh
dGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVj
dCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJaW50IHJl
dDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoZG1pX3BoeS0+cGxsKTsKKwlpZiAocmV0
IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW10a19oZG1pX3BoeV9lbmFibGVfdG1kcyhoZG1pX3Bo
eSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2Zm
KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBo
eV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhoZG1pX3Bo
eSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWlfcGh5LT5wbGwpOworCisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dl
cl9vbiA9IG10a19oZG1pX3BoeV9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5
X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRr
X2hkbWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0
IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3Bo
eTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0
IGNoYXIgKnJlZl9jbGtfbmFtZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsK
KwkJLm9wcyA9ICZtdGtfaGRtaV9wbGxfb3BzLAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFy
ZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFn
cyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBDTEtfU0VUX1JBVEVfR0FURSwKKwl9OworCXN0cnVj
dCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJaW50IHJl
dDsKKworCWhkbWlfcGh5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoZG1pX3BoeSksIEdG
UF9LRVJORUwpOworCWlmICghaGRtaV9waHkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtID0g
cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pX3Bo
eS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUiho
ZG1pX3BoeS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cmVncyk7CisJCWRl
dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVkXG4iLCByZXQpOwor
CQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3Jl
ZiIpOworCWlmIChJU19FUlIocmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsK
KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBQTEwgcmVmZXJlbmNlIGNsb2Nr
OiAlZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9f
Y2xrX2dldF9uYW1lKHJlZl9jbGspOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmco
ZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQu
bmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBj
bG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhk
bWlfcGh5LT5wbGxfaHcuaW5pdCA9ICZjbGtfaW5pdDsKKwloZG1pX3BoeS0+cGxsID0gZGV2bV9j
bGtfcmVnaXN0ZXIoZGV2LCAmaGRtaV9waHktPnBsbF9odyk7CisJaWYgKElTX0VSUihoZG1pX3Bo
eS0+cGxsKSkgeworCQlyZXQgPSBQVFJfRVJSKGhkbWlfcGh5LT5wbGwpOworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byByZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVr
LGliaWFzIiwKKwkJCQkgICAmaGRtaV9waHktPmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlk
ZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25v
ZGUsICJtZWRpYXRlayxpYmlhc191cCIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJ
aWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlh
cyB1cDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAi
VXNpbmcgZGVmYXVsdCBUWCBEUlYgaW1wZWRhbmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+
ZHJ2X2ltcF9jbGsgPSAweDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1p
X3BoeS0+ZHJ2X2ltcF9kMSA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOwor
CisJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOwor
CWlmIChJU19FUlIocGh5KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERN
SSBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEo
cGh5LCBoZG1pX3BoeSk7CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9y
ZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCWlmIChJU19FUlIocGh5X3Byb3Zp
ZGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKworCWhkbWlfcGh5LT5kZXYg
PSBkZXY7CisJcmV0dXJuIG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtf
c3JjX3NpbXBsZV9nZXQsCisJCQkJICAgaGRtaV9waHktPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2hkbWlfcGh5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJl
dHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9w
aHlfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLXBo
eSIsIH0sCisJe30sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9k
cml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2hkbWlfcGh5X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtf
aGRtaV9waHlfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWkt
cGh5IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2hkbWlfcGh5X21hdGNoLAorCX0sCit9Owor
CitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVM
RV9ERVNDUklQVElPTigiTWVkaWFUZWsgTVQ4MTczIEhETUkgUEhZIERyaXZlciIpOworTU9EVUxF
X0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp
c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v
bGlzdGluZm8vZHJpLWRldmVsCg==