From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v16 5/8] drm/mediatek: Add DPI sub driver
Date: Fri, 6 May 2016 15:05:51 +0200
Message-ID: <1462539954-26158-6-git-send-email-p.zabel@pengutronix.de>
References: <1462539954-26158-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: <1462539954-26158-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 , Stephen Boyd , 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 , Emil Velikov , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpBZGQgRFBJIGNvbm5lY3Rvci9l
bmNvZGVyIHRvIHN1cHBvcnQgSERNSSBvdXRwdXQgdmlhIHRoZQphdHRhY2hlZCBIRE1JIGJyaWRn
ZS4KClNpZ25lZC1vZmYtYnk6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQt
b2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdl
cyBzaW5jZSB2MTU6CiAtIE9yZGVyIG10a19kcm1fZHJpdmVycyBhbHBoYWJldGljYWxseQotLS0K
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICB8ICAgMyArLQogZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuYyAgICAgIHwgNzY5ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaV9yZWdzLmgg
fCAyMjggKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMg
IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICB8ICAgMSAr
CiA1IGZpbGVzIGNoYW5nZWQsIDEwMDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmMKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaV9yZWdzLmgKCmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggZTc4MWRiNWEuLjVmY2Y1OGUgMTAwNjQ0Ci0t
LSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBAIG1lZGlhdGVrLWRybS15IDo9IG10
a19kaXNwX292bC5vIFwKIAkJICBtdGtfZHJtX2dlbS5vIFwKIAkJICBtdGtfZHJtX3BsYW5lLm8g
XAogCQkgIG10a19kc2kubyBcCi0JCSAgbXRrX21pcGlfdHgubworCQkgIG10a19taXBpX3R4Lm8g
XAorCQkgIG10a19kcGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRl
ay1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuYyBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDA1Y2E3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHBpLmMKQEAgLTAsMCArMSw3NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlh
dGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKi8KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgor
I2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu
aD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y
bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dy
YXBoLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlw
ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgIm10a19kcGlfcmVncy5o
IgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworZW51bSBtdGtfZHBpX291dF9iaXRf
bnVtIHsKKwlNVEtfRFBJX09VVF9CSVRfTlVNXzhCSVRTLAorCU1US19EUElfT1VUX0JJVF9OVU1f
MTBCSVRTLAorCU1US19EUElfT1VUX0JJVF9OVU1fMTJCSVRTLAorCU1US19EUElfT1VUX0JJVF9O
VU1fMTZCSVRTCit9OworCitlbnVtIG10a19kcGlfb3V0X3ljX21hcCB7CisJTVRLX0RQSV9PVVRf
WUNfTUFQX1JHQiwKKwlNVEtfRFBJX09VVF9ZQ19NQVBfQ1lDWSwKKwlNVEtfRFBJX09VVF9ZQ19N
QVBfWUNZQywKKwlNVEtfRFBJX09VVF9ZQ19NQVBfQ1ksCisJTVRLX0RQSV9PVVRfWUNfTUFQX1lD
Cit9OworCitlbnVtIG10a19kcGlfb3V0X2NoYW5uZWxfc3dhcCB7CisJTVRLX0RQSV9PVVRfQ0hB
Tk5FTF9TV0FQX1JHQiwKKwlNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfR0JSLAorCU1US19EUElf
T1VUX0NIQU5ORUxfU1dBUF9CUkcsCisJTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JCRywKKwlN
VEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfR1JCLAorCU1US19EUElfT1VUX0NIQU5ORUxfU1dBUF9C
R1IKK307CisKK2VudW0gbXRrX2RwaV9vdXRfY29sb3JfZm9ybWF0IHsKKwlNVEtfRFBJX0NPTE9S
X0ZPUk1BVF9SR0IsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfUkdCX0ZVTEwsCisJTVRLX0RQSV9D
T0xPUl9GT1JNQVRfWUNCQ1JfNDQ0LAorCU1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQyMiwK
KwlNVEtfRFBJX0NPTE9SX0ZPUk1BVF9YVl9ZQ0MsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNC
Q1JfNDQ0X0ZVTEwsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1JfNDIyX0ZVTEwKK307CisK
K3N0cnVjdCBtdGtfZHBpIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wIGRkcF9jb21wOworCXN0cnVj
dCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgZGV2
aWNlICpkZXY7CisJc3RydWN0IGNsayAqZW5naW5lX2NsazsKKwlzdHJ1Y3QgY2xrICpwaXhlbF9j
bGs7CisJc3RydWN0IGNsayAqdHZkX2NsazsKKwlpbnQgaXJxOworCXN0cnVjdCBkcm1fZGlzcGxh
eV9tb2RlIG1vZGU7CisJZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3JtYXQgY29sb3JfZm9ybWF0
OworCWVudW0gbXRrX2RwaV9vdXRfeWNfbWFwIHljX21hcDsKKwllbnVtIG10a19kcGlfb3V0X2Jp
dF9udW0gYml0X251bTsKKwllbnVtIG10a19kcGlfb3V0X2NoYW5uZWxfc3dhcCBjaGFubmVsX3N3
YXA7CisJYm9vbCBwb3dlcl9zdGE7CisJdTggcG93ZXJfY3RsOworfTsKKworc3RhdGljIGlubGlu
ZSBzdHJ1Y3QgbXRrX2RwaSAqbXRrX2RwaV9mcm9tX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVy
ICplKQoreworCXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IG10a19kcGksIGVuY29kZXIp
OworfQorCitlbnVtIG10a19kcGlfcG9sYXJpdHkgeworCU1US19EUElfUE9MQVJJVFlfUklTSU5H
LAorCU1US19EUElfUE9MQVJJVFlfRkFMTElORywKK307CisKK2VudW0gbXRrX2RwaV9wb3dlcl9j
dGwgeworCURQSV9QT1dFUl9TVEFSVCA9IEJJVCgwKSwKKwlEUElfUE9XRVJfRU5BQkxFID0gQklU
KDEpLAorfTsKKworc3RydWN0IG10a19kcGlfcG9sYXJpdGllcyB7CisJZW51bSBtdGtfZHBpX3Bv
bGFyaXR5IGRlX3BvbDsKKwllbnVtIG10a19kcGlfcG9sYXJpdHkgY2tfcG9sOworCWVudW0gbXRr
X2RwaV9wb2xhcml0eSBoc3luY19wb2w7CisJZW51bSBtdGtfZHBpX3BvbGFyaXR5IHZzeW5jX3Bv
bDsKK307CisKK3N0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0geworCXUzMiBzeW5jX3dpZHRoOwor
CXUzMiBmcm9udF9wb3JjaDsKKwl1MzIgYmFja19wb3JjaDsKKwlib29sIHNoaWZ0X2hhbGZfbGlu
ZTsKK307CisKK3N0cnVjdCBtdGtfZHBpX3ljX2xpbWl0IHsKKwl1MTYgeV90b3A7CisJdTE2IHlf
Ym90dG9tOworCXUxNiBjX3RvcDsKKwl1MTYgY19ib3R0b207Cit9OworCitzdGF0aWMgdm9pZCBt
dGtfZHBpX21hc2soc3RydWN0IG10a19kcGkgKmRwaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMy
IG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRsKGRwaS0+cmVncyArIG9mZnNldCkgJiB+bWFzazsK
KworCXRtcCB8PSAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgZHBpLT5yZWdzICsgb2Zmc2V0
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9zd19yZXNldChzdHJ1Y3QgbXRrX2RwaSAqZHBp
LCBib29sIHJlc2V0KQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9SRVQsIHJlc2V0ID8gUlNU
IDogMCwgUlNUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9lbmFibGUoc3RydWN0IG10a19k
cGkgKmRwaSkKK3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfRU4sIEVOLCBFTik7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19kcGlfZGlzYWJsZShzdHJ1Y3QgbXRrX2RwaSAqZHBpKQoreworCW10a19k
cGlfbWFzayhkcGksIERQSV9FTiwgMCwgRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2Nv
bmZpZ19oc3luYyhzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSBzdHJ1Y3QgbXRrX2RwaV9zeW5j
X3BhcmFtICpzeW5jKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hXSURUSCwKKwkJ
ICAgICBzeW5jLT5zeW5jX3dpZHRoIDw8IEhQVywgSFBXX01BU0spOworCW10a19kcGlfbWFzayhk
cGksIERQSV9UR0VOX0hQT1JDSCwKKwkJICAgICBzeW5jLT5iYWNrX3BvcmNoIDw8IEhCUCwgSEJQ
X01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hQT1JDSCwgc3luYy0+ZnJvbnRf
cG9yY2ggPDwgSEZQLAorCQkgICAgIEhGUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rw
aV9jb25maWdfdnN5bmMoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgc3RydWN0IG10a19kcGlf
c3luY19wYXJhbSAqc3luYywKKwkJCQkgdTMyIHdpZHRoX2FkZHIsIHUzMiBwb3JjaF9hZGRyKQor
eworCW10a19kcGlfbWFzayhkcGksIHdpZHRoX2FkZHIsCisJCSAgICAgc3luYy0+c3luY193aWR0
aCA8PCBWU1lOQ19XSURUSF9TSElGVCwKKwkJICAgICBWU1lOQ19XSURUSF9NQVNLKTsKKwltdGtf
ZHBpX21hc2soZHBpLCB3aWR0aF9hZGRyLAorCQkgICAgIHN5bmMtPnNoaWZ0X2hhbGZfbGluZSA8
PCBWU1lOQ19IQUxGX0xJTkVfU0hJRlQsCisJCSAgICAgVlNZTkNfSEFMRl9MSU5FX01BU0spOwor
CW10a19kcGlfbWFzayhkcGksIHBvcmNoX2FkZHIsCisJCSAgICAgc3luYy0+YmFja19wb3JjaCA8
PCBWU1lOQ19CQUNLX1BPUkNIX1NISUZULAorCQkgICAgIFZTWU5DX0JBQ0tfUE9SQ0hfTUFTSyk7
CisJbXRrX2RwaV9tYXNrKGRwaSwgcG9yY2hfYWRkciwKKwkJICAgICBzeW5jLT5mcm9udF9wb3Jj
aCA8PCBWU1lOQ19GUk9OVF9QT1JDSF9TSElGVCwKKwkJICAgICBWU1lOQ19GUk9OVF9QT1JDSF9N
QVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5bmNfbG9kZChzdHJ1Y3Qg
bXRrX2RwaSAqZHBpLAorCQkJCSAgICAgIHN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gKnN5bmMp
Cit7CisJbXRrX2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5jLCBEUElfVEdFTl9WV0lEVEgsIERQ
SV9UR0VOX1ZQT1JDSCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX3ZzeW5jX2xl
dmVuKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJICAgICAgIHN0cnVjdCBtdGtfZHBpX3N5bmNf
cGFyYW0gKnN5bmMpCit7CisJbXRrX2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5jLCBEUElfVEdF
Tl9WV0lEVEhfTEVWRU4sCisJCQkgICAgIERQSV9UR0VOX1ZQT1JDSF9MRVZFTik7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX3ZzeW5jX3JvZGQoc3RydWN0IG10a19kcGkgKmRwaSwK
KwkJCQkgICAgICBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtICpzeW5jKQoreworCW10a19kcGlf
Y29uZmlnX3ZzeW5jKGRwaSwgc3luYywgRFBJX1RHRU5fVldJRFRIX1JPREQsCisJCQkgICAgIERQ
SV9UR0VOX1ZQT1JDSF9ST0REKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5
bmNfcmV2ZW4oc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICAgICAgc3RydWN0IG10a19kcGlf
c3luY19wYXJhbSAqc3luYykKK3sKKwltdGtfZHBpX2NvbmZpZ192c3luYyhkcGksIHN5bmMsIERQ
SV9UR0VOX1ZXSURUSF9SRVZFTiwKKwkJCSAgICAgRFBJX1RHRU5fVlBPUkNIX1JFVkVOKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfcG9sKHN0cnVjdCBtdGtfZHBpICpkcGksCisJ
CQkgICAgICAgc3RydWN0IG10a19kcGlfcG9sYXJpdGllcyAqZHBpX3BvbCkKK3sKKwl1bnNpZ25l
ZCBpbnQgcG9sOworCisJcG9sID0gKGRwaV9wb2wtPmNrX3BvbCA9PSBNVEtfRFBJX1BPTEFSSVRZ
X1JJU0lORyA/IDAgOiBDS19QT0wpIHwKKwkgICAgICAoZHBpX3BvbC0+ZGVfcG9sID09IE1US19E
UElfUE9MQVJJVFlfUklTSU5HID8gMCA6IERFX1BPTCkgfAorCSAgICAgIChkcGlfcG9sLT5oc3lu
Y19wb2wgPT0gTVRLX0RQSV9QT0xBUklUWV9SSVNJTkcgPyAwIDogSFNZTkNfUE9MKSB8CisJICAg
ICAgKGRwaV9wb2wtPnZzeW5jX3BvbCA9PSBNVEtfRFBJX1BPTEFSSVRZX1JJU0lORyA/IDAgOiBW
U1lOQ19QT0wpOworCW10a19kcGlfbWFzayhkcGksIERQSV9PVVRQVVRfU0VUVElORywgcG9sLAor
CQkgICAgIENLX1BPTCB8IERFX1BPTCB8IEhTWU5DX1BPTCB8IFZTWU5DX1BPTCk7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19kcGlfY29uZmlnXzNkKHN0cnVjdCBtdGtfZHBpICpkcGksIGJvb2wgZW5f
M2QpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5fM2QgPyBUREZQX0VOIDogMCwg
VERGUF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2ludGVyZmFjZShzdHJ1
Y3QgbXRrX2RwaSAqZHBpLCBib29sIGludGVyKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9D
T04sIGludGVyID8gSU5UTF9FTiA6IDAsIElOVExfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtf
ZHBpX2NvbmZpZ19mYl9zaXplKHN0cnVjdCBtdGtfZHBpICpkcGksIHUzMiB3aWR0aCwgdTMyIGhl
aWdodCkKK3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfU0laRSwgd2lkdGggPDwgSFNJWkUsIEhT
SVpFX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9TSVpFLCBoZWlnaHQgPDwgVlNJWkUs
IFZTSVpFX01BU0spOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19jaGFubmVsX2xp
bWl0KHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCSBzdHJ1Y3QgbXRrX2RwaV95Y19saW1pdCAq
bGltaXQpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX1lfTElNSVQsIGxpbWl0LT55X2JvdHRv
bSA8PCBZX0xJTUlOVF9CT1QsCisJCSAgICAgWV9MSU1JTlRfQk9UX01BU0spOworCW10a19kcGlf
bWFzayhkcGksIERQSV9ZX0xJTUlULCBsaW1pdC0+eV90b3AgPDwgWV9MSU1JTlRfVE9QLAorCQkg
ICAgIFlfTElNSU5UX1RPUF9NQVNLKTsKKwltdGtfZHBpX21hc2soZHBpLCBEUElfQ19MSU1JVCwg
bGltaXQtPmNfYm90dG9tIDw8IENfTElNSVRfQk9ULAorCQkgICAgIENfTElNSVRfQk9UX01BU0sp
OworCW10a19kcGlfbWFzayhkcGksIERQSV9DX0xJTUlULCBsaW1pdC0+Y190b3AgPDwgQ19MSU1J
VF9UT1AsCisJCSAgICAgQ19MSU1JVF9UT1BfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k
cGlfY29uZmlnX2JpdF9udW0oc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICBlbnVtIG10a19k
cGlfb3V0X2JpdF9udW0gbnVtKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG51bSkgeworCWNh
c2UgTVRLX0RQSV9PVVRfQklUX05VTV84QklUUzoKKwkJdmFsID0gT1VUX0JJVF84OworCQlicmVh
azsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTBCSVRTOgorCQl2YWwgPSBPVVRfQklUXzEw
OworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTJCSVRTOgorCQl2YWwgPSBP
VVRfQklUXzEyOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTZCSVRTOgor
CQl2YWwgPSBPVVRfQklUXzE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBPVVRfQklU
Xzg7CisJCWJyZWFrOworCX0KKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcs
IHZhbCA8PCBPVVRfQklULAorCQkgICAgIE9VVF9CSVRfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kcGlfY29uZmlnX3ljX21hcChzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgZW51bSBt
dGtfZHBpX291dF95Y19tYXAgbWFwKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG1hcCkgewor
CWNhc2UgTVRLX0RQSV9PVVRfWUNfTUFQX1JHQjoKKwkJdmFsID0gWUNfTUFQX1JHQjsKKwkJYnJl
YWs7CisJY2FzZSBNVEtfRFBJX09VVF9ZQ19NQVBfQ1lDWToKKwkJdmFsID0gWUNfTUFQX0NZQ1k7
CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfWUNfTUFQX1lDWUM6CisJCXZhbCA9IFlDX01B
UF9ZQ1lDOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9DWToKKwkJdmFsID0g
WUNfTUFQX0NZOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9ZQzoKKwkJdmFs
ID0gWUNfTUFQX1lDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBZQ19NQVBfUkdCOwor
CQlicmVhazsKKwl9CisKKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZh
bCA8PCBZQ19NQVAsIFlDX01BUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25m
aWdfY2hhbm5lbF9zd2FwKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCWVudW0gbXRrX2RwaV9v
dXRfY2hhbm5lbF9zd2FwIHN3YXApCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoc3dhcCkgewor
CWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JHQjoKKwkJdmFsID0gU1dBUF9SR0I7CisJ
CWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0dCUjoKKwkJdmFsID0gU1dB
UF9HQlI7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JSRzoKKwkJ
dmFsID0gU1dBUF9CUkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQ
X1JCRzoKKwkJdmFsID0gU1dBUF9SQkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hB
Tk5FTF9TV0FQX0dSQjoKKwkJdmFsID0gU1dBUF9HUkI7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQ
SV9PVVRfQ0hBTk5FTF9TV0FQX0JHUjoKKwkJdmFsID0gU1dBUF9CR1I7CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCXZhbCA9IFNXQVBfUkdCOworCQlicmVhazsKKwl9CisKKwltdGtfZHBpX21hc2so
ZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBDSF9TV0FQLCBDSF9TV0FQX01BU0spOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKHN0cnVjdCBtdGtf
ZHBpICpkcGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGVu
YWJsZSA/IFlVVjQyMl9FTiA6IDAsIFlVVjQyMl9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k
cGlfY29uZmlnX2NzY19lbmFibGUoc3RydWN0IG10a19kcGkgKmRwaSwgYm9vbCBlbmFibGUpCit7
CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5hYmxlID8gQ1NDX0VOQUJMRSA6IDAsIENT
Q19FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KHN0
cnVjdCBtdGtfZHBpICpkcGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQ
SV9DT04sIGVuYWJsZSA/IElOX1JCX1NXQVAgOiAwLCBJTl9SQl9TV0FQKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX2RwaV9jb25maWdfMm5faF9mcmUoc3RydWN0IG10a19kcGkgKmRwaSkKK3sKKwlt
dGtfZHBpX21hc2soZHBpLCBEUElfSF9GUkVfQ09OLCBIX0ZSRV8yTiwgSF9GUkVfMk4pOworfQor
CitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoc3RydWN0IG10a19kcGkg
KmRwaSwKKwkJCQkJZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3JtYXQgZm9ybWF0KQoreworCWlm
ICgoZm9ybWF0ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQ0NCkgfHwKKwkgICAgKGZv
cm1hdCA9PSBNVEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDRfRlVMTCkpIHsKKwkJbXRrX2Rw
aV9jb25maWdfeXV2NDIyX2VuYWJsZShkcGksIGZhbHNlKTsKKwkJbXRrX2RwaV9jb25maWdfY3Nj
X2VuYWJsZShkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwgZmFs
c2UpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFO
TkVMX1NXQVBfQkdSKTsKKwl9IGVsc2UgaWYgKChmb3JtYXQgPT0gTVRLX0RQSV9DT0xPUl9GT1JN
QVRfWUNCQ1JfNDIyKSB8fAorCQkgICAoZm9ybWF0ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lD
QkNSXzQyMl9GVUxMKSkgeworCQltdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKGRwaSwgdHJ1
ZSk7CisJCW10a19kcGlfY29uZmlnX2NzY19lbmFibGUoZHBpLCB0cnVlKTsKKwkJbXRrX2RwaV9j
b25maWdfc3dhcF9pbnB1dChkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3
YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCKTsKKwl9IGVsc2UgeworCQltdGtf
ZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19j
c2NfZW5hYmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwg
ZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9D
SEFOTkVMX1NXQVBfUkdCKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfcG93ZXJfb2Zm
KHN0cnVjdCBtdGtfZHBpICpkcGksIGVudW0gbXRrX2RwaV9wb3dlcl9jdGwgcGN0bCkKK3sKKwlk
cGktPnBvd2VyX2N0bCAmPSB+cGN0bDsKKworCWlmICgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9X
RVJfU1RBUlQpIHx8CisJICAgIChkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dFUl9FTkFCTEUpKQor
CQlyZXR1cm47CisKKwlpZiAoIWRwaS0+cG93ZXJfc3RhKQorCQlyZXR1cm47CisKKwltdGtfZHBp
X2Rpc2FibGUoZHBpKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHBpLT5waXhlbF9jbGspOwor
CWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9jbGspOworCWRwaS0+cG93ZXJfc3Rh
ID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9wb3dlcl9vbihzdHJ1Y3QgbXRrX2Rw
aSAqZHBpLCBlbnVtIG10a19kcGlfcG93ZXJfY3RsIHBjdGwpCit7CisJaW50IHJldDsKKworCWRw
aS0+cG93ZXJfY3RsIHw9IHBjdGw7CisKKwlpZiAoIShkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dF
Ul9TVEFSVCkgJiYKKwkgICAgIShkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dFUl9FTkFCTEUpKQor
CQlyZXR1cm4gMDsKKworCWlmIChkcGktPnBvd2VyX3N0YSkKKwkJcmV0dXJuIDA7CisKKwlyZXQg
PSBjbGtfcHJlcGFyZV9lbmFibGUoZHBpLT5lbmdpbmVfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRl
dl9lcnIoZHBpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9jazogJWRcbiIsIHJl
dCk7CisJCWdvdG8gZXJyX2VuZzsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHBp
LT5waXhlbF9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcGktPmRldiwgIkZhaWxlZCB0
byBlbmFibGUgcGl4ZWwgY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waXhlbDsKKwl9
CisKKwltdGtfZHBpX2VuYWJsZShkcGkpOworCWRwaS0+cG93ZXJfc3RhID0gdHJ1ZTsKKwlyZXR1
cm4gMDsKKworZXJyX3BpeGVsOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9j
bGspOworZXJyX2VuZzoKKwlkcGktPnBvd2VyX2N0bCAmPSB+cGN0bDsKKwlyZXR1cm4gcmV0Owor
fQorCitzdGF0aWMgaW50IG10a19kcGlfc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2RwaSAq
ZHBpLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3Qg
bXRrX2RwaV95Y19saW1pdCBsaW1pdDsKKwlzdHJ1Y3QgbXRrX2RwaV9wb2xhcml0aWVzIGRwaV9w
b2w7CisJc3RydWN0IG10a19kcGlfc3luY19wYXJhbSBoc3luYzsKKwlzdHJ1Y3QgbXRrX2RwaV9z
eW5jX3BhcmFtIHZzeW5jX2xvZGQgPSB7IDAgfTsKKwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFt
IHZzeW5jX2xldmVuID0geyAwIH07CisJc3RydWN0IG10a19kcGlfc3luY19wYXJhbSB2c3luY19y
b2RkID0geyAwIH07CisJc3RydWN0IG10a19kcGlfc3luY19wYXJhbSB2c3luY19yZXZlbiA9IHsg
MCB9OworCXVuc2lnbmVkIGxvbmcgcGl4X3JhdGU7CisJdW5zaWduZWQgbG9uZyBwbGxfcmF0ZTsK
Kwl1bnNpZ25lZCBpbnQgZmFjdG9yOworCisJaWYgKCFkcGkpIHsKKwkJZGV2X2VycihkcGktPmRl
diwgImludmFsaWQgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwaXhf
cmF0ZSA9IDEwMDBVTCAqIG1vZGUtPmNsb2NrOworCWlmIChtb2RlLT5jbG9jayA8PSA3NDAwMCkK
KwkJZmFjdG9yID0gOCAqIDM7CisJZWxzZQorCQlmYWN0b3IgPSA0ICogMzsKKwlwbGxfcmF0ZSA9
IHBpeF9yYXRlICogZmFjdG9yOworCisJZGV2X2RiZyhkcGktPmRldiwgIldhbnQgUExMICVsdSBI
eiwgcGl4ZWwgY2xvY2sgJWx1IEh6XG4iLAorCQlwbGxfcmF0ZSwgcGl4X3JhdGUpOworCisJY2xr
X3NldF9yYXRlKGRwaS0+dHZkX2NsaywgcGxsX3JhdGUpOworCXBsbF9yYXRlID0gY2xrX2dldF9y
YXRlKGRwaS0+dHZkX2Nsayk7CisKKwlwaXhfcmF0ZSA9IHBsbF9yYXRlIC8gZmFjdG9yOworCWNs
a19zZXRfcmF0ZShkcGktPnBpeGVsX2NsaywgcGl4X3JhdGUpOworCXBpeF9yYXRlID0gY2xrX2dl
dF9yYXRlKGRwaS0+cGl4ZWxfY2xrKTsKKworCWRldl9kYmcoZHBpLT5kZXYsICJHb3QgIFBMTCAl
bHUgSHosIHBpeGVsIGNsb2NrICVsdSBIelxuIiwKKwkJcGxsX3JhdGUsIHBpeF9yYXRlKTsKKwor
CWxpbWl0LmNfYm90dG9tID0gMHgwMDEwOworCWxpbWl0LmNfdG9wID0gMHgwRkUwOworCWxpbWl0
LnlfYm90dG9tID0gMHgwMDEwOworCWxpbWl0LnlfdG9wID0gMHgwRkUwOworCisJZHBpX3BvbC5j
a19wb2wgPSBNVEtfRFBJX1BPTEFSSVRZX0ZBTExJTkc7CisJZHBpX3BvbC5kZV9wb2wgPSBNVEtf
RFBJX1BPTEFSSVRZX1JJU0lORzsKKwlkcGlfcG9sLmhzeW5jX3BvbCA9IG1vZGUtPmZsYWdzICYg
RFJNX01PREVfRkxBR19QSFNZTkMgPworCQkJICAgIE1US19EUElfUE9MQVJJVFlfRkFMTElORyA6
IE1US19EUElfUE9MQVJJVFlfUklTSU5HOworCWRwaV9wb2wudnN5bmNfcG9sID0gbW9kZS0+Zmxh
Z3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQyA/CisJCQkgICAgTVRLX0RQSV9QT0xBUklUWV9GQUxM
SU5HIDogTVRLX0RQSV9QT0xBUklUWV9SSVNJTkc7CisKKwloc3luYy5zeW5jX3dpZHRoID0gbW9k
ZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaHN5bmMuYmFja19wb3JjaCA9IG1v
ZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKKwloc3luYy5mcm9udF9wb3JjaCA9IG1vZGUt
PmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXk7CisJaHN5bmMuc2hpZnRfaGFsZl9saW5lID0g
ZmFsc2U7CisKKwl2c3luY19sb2RkLnN5bmNfd2lkdGggPSBtb2RlLT52c3luY19lbmQgLSBtb2Rl
LT52c3luY19zdGFydDsKKwl2c3luY19sb2RkLmJhY2tfcG9yY2ggPSBtb2RlLT52dG90YWwgLSBt
b2RlLT52c3luY19lbmQ7CisJdnN5bmNfbG9kZC5mcm9udF9wb3JjaCA9IG1vZGUtPnZzeW5jX3N0
YXJ0IC0gbW9kZS0+dmRpc3BsYXk7CisJdnN5bmNfbG9kZC5zaGlmdF9oYWxmX2xpbmUgPSBmYWxz
ZTsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCisJICAg
IG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR18zRF9NQVNLKSB7CisJCXZzeW5jX2xldmVuID0g
dnN5bmNfbG9kZDsKKwkJdnN5bmNfcm9kZCA9IHZzeW5jX2xvZGQ7CisJCXZzeW5jX3JldmVuID0g
dnN5bmNfbG9kZDsKKwkJdnN5bmNfbGV2ZW4uc2hpZnRfaGFsZl9saW5lID0gdHJ1ZTsKKwkJdnN5
bmNfcmV2ZW4uc2hpZnRfaGFsZl9saW5lID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKG1vZGUtPmZsYWdz
ICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgJiYKKwkJICAgIShtb2RlLT5mbGFncyAmIERSTV9N
T0RFX0ZMQUdfM0RfTUFTSykpIHsKKwkJdnN5bmNfbGV2ZW4gPSB2c3luY19sb2RkOworCQl2c3lu
Y19sZXZlbi5zaGlmdF9oYWxmX2xpbmUgPSB0cnVlOworCX0gZWxzZSBpZiAoIShtb2RlLT5mbGFn
cyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSAmJgorCQkgICBtb2RlLT5mbGFncyAmIERSTV9N
T0RFX0ZMQUdfM0RfTUFTSykgeworCQl2c3luY19yb2RkID0gdnN5bmNfbG9kZDsKKwl9CisJbXRr
X2RwaV9zd19yZXNldChkcGksIHRydWUpOworCW10a19kcGlfY29uZmlnX3BvbChkcGksICZkcGlf
cG9sKTsKKworCW10a19kcGlfY29uZmlnX2hzeW5jKGRwaSwgJmhzeW5jKTsKKwltdGtfZHBpX2Nv
bmZpZ192c3luY19sb2RkKGRwaSwgJnZzeW5jX2xvZGQpOworCW10a19kcGlfY29uZmlnX3ZzeW5j
X3JvZGQoZHBpLCAmdnN5bmNfcm9kZCk7CisJbXRrX2RwaV9jb25maWdfdnN5bmNfbGV2ZW4oZHBp
LCAmdnN5bmNfbGV2ZW4pOworCW10a19kcGlfY29uZmlnX3ZzeW5jX3JldmVuKGRwaSwgJnZzeW5j
X3JldmVuKTsKKworCW10a19kcGlfY29uZmlnXzNkKGRwaSwgISEobW9kZS0+ZmxhZ3MgJiBEUk1f
TU9ERV9GTEFHXzNEX01BU0spKTsKKwltdGtfZHBpX2NvbmZpZ19pbnRlcmZhY2UoZHBpLCAhISht
b2RlLT5mbGFncyAmCisJCQkJCSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpOworCWlmIChtb2Rl
LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQorCQltdGtfZHBpX2NvbmZpZ19mYl9z
aXplKGRwaSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5IC8gMik7CisJZWxzZQorCQlt
dGtfZHBpX2NvbmZpZ19mYl9zaXplKGRwaSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5
KTsKKworCW10a19kcGlfY29uZmlnX2NoYW5uZWxfbGltaXQoZHBpLCAmbGltaXQpOworCW10a19k
cGlfY29uZmlnX2JpdF9udW0oZHBpLCBkcGktPmJpdF9udW0pOworCW10a19kcGlfY29uZmlnX2No
YW5uZWxfc3dhcChkcGksIGRwaS0+Y2hhbm5lbF9zd2FwKTsKKwltdGtfZHBpX2NvbmZpZ195Y19t
YXAoZHBpLCBkcGktPnljX21hcCk7CisJbXRrX2RwaV9jb25maWdfY29sb3JfZm9ybWF0KGRwaSwg
ZHBpLT5jb2xvcl9mb3JtYXQpOworCW10a19kcGlfY29uZmlnXzJuX2hfZnJlKGRwaSk7CisJbXRr
X2RwaV9zd19yZXNldChkcGksIGZhbHNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHBpX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7
CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj
dCBkcm1fZW5jb2Rlcl9mdW5jcyBtdGtfZHBpX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kg
PSBtdGtfZHBpX2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyBib29sIG10a19kcGlfZW5j
b2Rlcl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgICAg
Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBk
cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHBpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICpl
bmNvZGVyLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAg
ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgbXRr
X2RwaSAqZHBpID0gbXRrX2RwaV9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisKKwlkcm1fbW9kZV9j
b3B5KCZkcGktPm1vZGUsIGFkanVzdGVkX21vZGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBp
X2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0
IG10a19kcGkgKmRwaSA9IG10a19kcGlfZnJvbV9lbmNvZGVyKGVuY29kZXIpOworCisJbXRrX2Rw
aV9wb3dlcl9vZmYoZHBpLCBEUElfUE9XRVJfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RwaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3Ry
dWN0IG10a19kcGkgKmRwaSA9IG10a19kcGlfZnJvbV9lbmNvZGVyKGVuY29kZXIpOworCisJbXRr
X2RwaV9wb3dlcl9vbihkcGksIERQSV9QT1dFUl9FTkFCTEUpOworCW10a19kcGlfc2V0X2Rpc3Bs
YXlfbW9kZShkcGksICZkcGktPm1vZGUpOworfQorCitzdGF0aWMgaW50IG10a19kcGlfYXRvbWlj
X2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQlzdHJ1Y3QgZHJtX2NydGNf
c3RhdGUgKmNydGNfc3RhdGUsCisJCQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f
c3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29k
ZXJfaGVscGVyX2Z1bmNzIG10a19kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVf
Zml4dXAgPSBtdGtfZHBpX2VuY29kZXJfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSBtdGtfZHBp
X2VuY29kZXJfbW9kZV9zZXQsCisJLmRpc2FibGUgPSBtdGtfZHBpX2VuY29kZXJfZGlzYWJsZSwK
KwkuZW5hYmxlID0gbXRrX2RwaV9lbmNvZGVyX2VuYWJsZSwKKwkuYXRvbWljX2NoZWNrID0gbXRr
X2RwaV9hdG9taWNfY2hlY2ssCit9OworCitzdGF0aWMgdm9pZCBtdGtfZHBpX3N0YXJ0KHN0cnVj
dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGNvbnRhaW5l
cl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RwaSwgZGRwX2NvbXApOworCisJbXRrX2RwaV9wb3dlcl9v
bihkcGksIERQSV9QT1dFUl9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfc3RvcChz
dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBjb250
YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kcGksIGRkcF9jb21wKTsKKworCW10a19kcGlfcG93
ZXJfb2ZmKGRwaSwgRFBJX1BPV0VSX1NUQVJUKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBt
dGtfZGRwX2NvbXBfZnVuY3MgbXRrX2RwaV9mdW5jcyA9IHsKKwkuc3RhcnQgPSBtdGtfZHBpX3N0
YXJ0LAorCS5zdG9wID0gbXRrX2RwaV9zdG9wLAorfTsKKworc3RhdGljIGludCBtdGtfZHBpX2Jp
bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEp
Cit7CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVj
dCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRrX2Rk
cF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZkcGktPmRkcF9jb21wKTsKKwlpZiAocmV0IDwgMCkg
eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVkXG4i
LAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CisJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkcm1fZGV2LCAmZHBpLT5lbmNvZGVyLCAmbXRrX2Rw
aV9lbmNvZGVyX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7
CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRlY29k
ZXI6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCX0KKwlkcm1fZW5jb2Rl
cl9oZWxwZXJfYWRkKCZkcGktPmVuY29kZXIsICZtdGtfZHBpX2VuY29kZXJfaGVscGVyX2Z1bmNz
KTsKKworCS8qIEN1cnJlbnRseSBEUEkwIGlzIGZpeGVkIHRvIGJlIGRyaXZlbiBieSBPVkwxICov
CisJZHBpLT5lbmNvZGVyLnBvc3NpYmxlX2NydGNzID0gQklUKDEpOworCisJZHBpLT5lbmNvZGVy
LmJyaWRnZS0+ZW5jb2RlciA9ICZkcGktPmVuY29kZXI7CisJcmV0ID0gZHJtX2JyaWRnZV9hdHRh
Y2goZHBpLT5lbmNvZGVyLmRldiwgZHBpLT5lbmNvZGVyLmJyaWRnZSk7CisJaWYgKHJldCkgewor
CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhdHRhY2ggYnJpZGdlOiAlZFxuIiwgcmV0KTsKKwkJ
Z290byBlcnJfY2xlYW51cDsKKwl9CisKKwlkcGktPmJpdF9udW0gPSBNVEtfRFBJX09VVF9CSVRf
TlVNXzhCSVRTOworCWRwaS0+Y2hhbm5lbF9zd2FwID0gTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQ
X1JHQjsKKwlkcGktPnljX21hcCA9IE1US19EUElfT1VUX1lDX01BUF9SR0I7CisJZHBpLT5jb2xv
cl9mb3JtYXQgPSBNVEtfRFBJX0NPTE9SX0ZPUk1BVF9SR0I7CisKKwlyZXR1cm4gMDsKKworZXJy
X2NsZWFudXA6CisJZHJtX2VuY29kZXJfY2xlYW51cCgmZHBpLT5lbmNvZGVyKTsKK2Vycl91bnJl
Z2lzdGVyOgorCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZkcGktPmRkcF9jb21w
KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX3VuYmluZChzdHJ1Y3Qg
ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7
CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBk
cm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKworCWRybV9lbmNvZGVyX2NsZWFudXAoJmRwaS0+
ZW5jb2Rlcik7CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtX2RldiwgJmRwaS0+ZGRwX2Nv
bXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2RwaV9jb21w
b25lbnRfb3BzID0geworCS5iaW5kID0gbXRrX2RwaV9iaW5kLAorCS51bmJpbmQgPSBtdGtfZHBp
X3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f
ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3Ry
dWN0IG10a19kcGkgKmRwaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgZGV2aWNl
X25vZGUgKmVwLCAqYnJpZGdlX25vZGUgPSBOVUxMOworCWludCBjb21wX2lkOworCWludCByZXQ7
CisKKwlkcGkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwaSksIEdGUF9LRVJORUwpOwor
CWlmICghZHBpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRwaS0+ZGV2ID0gZGV2OworCisJbWVt
ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkcGkt
PnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoZHBp
LT5yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKGRwaS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAi
RmFpbGVkIHRvIGlvcmVtYXAgbWVtIHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl
dDsKKwl9CisKKwlkcGktPmVuZ2luZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZW5naW5lIik7
CisJaWYgKElTX0VSUihkcGktPmVuZ2luZV9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHBpLT5l
bmdpbmVfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGVuZ2luZSBjbG9jazog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHBpLT5waXhlbF9jbGsgPSBkZXZt
X2Nsa19nZXQoZGV2LCAicGl4ZWwiKTsKKwlpZiAoSVNfRVJSKGRwaS0+cGl4ZWxfY2xrKSkgewor
CQlyZXQgPSBQVFJfRVJSKGRwaS0+cGl4ZWxfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gZ2V0IHBpeGVsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlk
cGktPnR2ZF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsIik7CisJaWYgKElTX0VSUihkcGkt
PnR2ZF9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHBpLT50dmRfY2xrKTsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gZ2V0IHR2ZHBsbCBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiBy
ZXQ7CisJfQorCisJZHBpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChk
cGktPmlycSA8PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBpcnE6ICVkXG4i
LCBkcGktPmlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ3JhcGhfZ2V0
X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsKKwlpZiAoZXApIHsKKwkJYnJpZGdl
X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwKTsKKwkJb2Zfbm9kZV9w
dXQoZXApOworCX0KKwlpZiAoIWJyaWRnZV9ub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk
IHRvIGZpbmQgYnJpZGdlIG5vZGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZf
aW5mbyhkZXYsICJGb3VuZCBicmlkZ2Ugbm9kZTogJXNcbiIsIGJyaWRnZV9ub2RlLT5mdWxsX25h
bWUpOworCisJZHBpLT5lbmNvZGVyLmJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShicmlkZ2Vf
bm9kZSk7CisJb2Zfbm9kZV9wdXQoYnJpZGdlX25vZGUpOworCWlmICghZHBpLT5lbmNvZGVyLmJy
aWRnZSkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21w
X2dldF9pZChkZXYtPm9mX25vZGUsIE1US19EUEkpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlk
ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQp
OworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYs
IGRldi0+b2Zfbm9kZSwgJmRwaS0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kcGlfZnVu
Y3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBj
b21wb25lbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3Nl
dF9kcnZkYXRhKHBkZXYsIGRwaSk7CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10a19k
cGlfY29tcG9uZW50X29wcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0
byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHBpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2
aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kcGlfY29tcG9u
ZW50X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp
Y2VfaWQgbXRrX2RwaV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10
ODE3My1kcGkiLCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcGlf
ZHJpdmVyID0geworCS5wcm9iZSA9IG10a19kcGlfcHJvYmUsCisJLnJlbW92ZSA9IG10a19kcGlf
cmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWRwaSIsCisJCS5vZl9t
YXRjaF90YWJsZSA9IG10a19kcGlfb2ZfaWRzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcGlfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcGlfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRi
NmFkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rw
aV9yZWdzLmgKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVk
aWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5k
ZWYgX19NVEtfRFBJX1JFR1NfSAorI2RlZmluZSBfX01US19EUElfUkVHU19ICisKKyNkZWZpbmUg
RFBJX0VOCQkJMHgwMAorI2RlZmluZSBFTgkJCQlCSVQoMCkKKworI2RlZmluZSBEUElfUkVUCQkJ
MHgwNAorI2RlZmluZSBSU1QJCQkJQklUKDApCisKKyNkZWZpbmUgRFBJX0lOVEVOCQkweDA4Cisj
ZGVmaW5lIElOVF9WU1lOQ19FTgkJCUJJVCgwKQorI2RlZmluZSBJTlRfVkRFX0VOCQkJQklUKDEp
CisjZGVmaW5lIElOVF9VTkRFUkZMT1dfRU4JCUJJVCgyKQorCisjZGVmaW5lIERQSV9JTlRTVEEJ
CTB4MEMKKyNkZWZpbmUgSU5UX1ZTWU5DX1NUQQkJCUJJVCgwKQorI2RlZmluZSBJTlRfVkRFX1NU
QQkJCUJJVCgxKQorI2RlZmluZSBJTlRfVU5ERVJGTE9XX1NUQQkJQklUKDIpCisKKyNkZWZpbmUg
RFBJX0NPTgkJCTB4MTAKKyNkZWZpbmUgQkdfRU5BQkxFCQkJQklUKDApCisjZGVmaW5lIElOX1JC
X1NXQVAJCQlCSVQoMSkKKyNkZWZpbmUgSU5UTF9FTgkJCQlCSVQoMikKKyNkZWZpbmUgVERGUF9F
TgkJCQlCSVQoMykKKyNkZWZpbmUgQ0xQRl9FTgkJCQlCSVQoNCkKKyNkZWZpbmUgWVVWNDIyX0VO
CQkJQklUKDUpCisjZGVmaW5lIENTQ19FTkFCTEUJCQlCSVQoNikKKyNkZWZpbmUgUjYwMV9TRUwJ
CQlCSVQoNykKKyNkZWZpbmUgRU1CU1lOQ19FTgkJCUJJVCg4KQorI2RlZmluZSBWU19MT0REX0VO
CQkJQklUKDE2KQorI2RlZmluZSBWU19MRVZFTl9FTgkJCUJJVCgxNykKKyNkZWZpbmUgVlNfUk9E
RF9FTgkJCUJJVCgxOCkKKyNkZWZpbmUgVlNfUkVWRU4JCQlCSVQoMTkpCisjZGVmaW5lIEZBS0Vf
REVfTE9ERAkJCUJJVCgyMCkKKyNkZWZpbmUgRkFLRV9ERV9MRVZFTgkJCUJJVCgyMSkKKyNkZWZp
bmUgRkFLRV9ERV9ST0RECQkJQklUKDIyKQorI2RlZmluZSBGQUtFX0RFX1JFVkVOCQkJQklUKDIz
KQorCisjZGVmaW5lIERQSV9PVVRQVVRfU0VUVElORwkweDE0CisjZGVmaW5lIENIX1NXQVAJCQkJ
MAorI2RlZmluZSBDSF9TV0FQX01BU0sJCQkoMHg3IDw8IDApCisjZGVmaW5lIFNXQVBfUkdCCQkJ
MHgwMAorI2RlZmluZSBTV0FQX0dCUgkJCTB4MDEKKyNkZWZpbmUgU1dBUF9CUkcJCQkweDAyCisj
ZGVmaW5lIFNXQVBfUkJHCQkJMHgwMworI2RlZmluZSBTV0FQX0dSQgkJCTB4MDQKKyNkZWZpbmUg
U1dBUF9CR1IJCQkweDA1CisjZGVmaW5lIEJJVF9TV0FQCQkJQklUKDMpCisjZGVmaW5lIEJfTUFT
SwkJCQlCSVQoNCkKKyNkZWZpbmUgR19NQVNLCQkJCUJJVCg1KQorI2RlZmluZSBSX01BU0sJCQkJ
QklUKDYpCisjZGVmaW5lIERFX01BU0sJCQkJQklUKDgpCisjZGVmaW5lIEhTX01BU0sJCQkJQklU
KDkpCisjZGVmaW5lIFZTX01BU0sJCQkJQklUKDEwKQorI2RlZmluZSBERV9QT0wJCQkJQklUKDEy
KQorI2RlZmluZSBIU1lOQ19QT0wJCQlCSVQoMTMpCisjZGVmaW5lIFZTWU5DX1BPTAkJCUJJVCgx
NCkKKyNkZWZpbmUgQ0tfUE9MCQkJCUJJVCgxNSkKKyNkZWZpbmUgT0VOX09GRgkJCQlCSVQoMTYp
CisjZGVmaW5lIEVER0VfU0VMCQkJQklUKDE3KQorI2RlZmluZSBPVVRfQklUCQkJCTE4CisjZGVm
aW5lIE9VVF9CSVRfTUFTSwkJCSgweDMgPDwgMTgpCisjZGVmaW5lIE9VVF9CSVRfOAkJCTB4MDAK
KyNkZWZpbmUgT1VUX0JJVF8xMAkJCTB4MDEKKyNkZWZpbmUgT1VUX0JJVF8xMgkJCTB4MDIKKyNk
ZWZpbmUgT1VUX0JJVF8xNgkJCTB4MDMKKyNkZWZpbmUgWUNfTUFQCQkJCTIwCisjZGVmaW5lIFlD
X01BUF9NQVNLCQkJKDB4NyA8PCAyMCkKKyNkZWZpbmUgWUNfTUFQX1JHQgkJCTB4MDAKKyNkZWZp
bmUgWUNfTUFQX0NZQ1kJCQkweDA0CisjZGVmaW5lIFlDX01BUF9ZQ1lDCQkJMHgwNQorI2RlZmlu
ZSBZQ19NQVBfQ1kJCQkweDA2CisjZGVmaW5lIFlDX01BUF9ZQwkJCTB4MDcKKworI2RlZmluZSBE
UElfU0laRQkJMHgxOAorI2RlZmluZSBIU0laRQkJCQkwCisjZGVmaW5lIEhTSVpFX01BU0sJCQko
MHgxRkZGIDw8IDApCisjZGVmaW5lIFZTSVpFCQkJCTE2CisjZGVmaW5lIFZTSVpFX01BU0sJCQko
MHgxRkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9ERFJfU0VUVElORwkJMHgxQworI2RlZmluZSBE
RFJfRU4JCQkJQklUKDApCisjZGVmaW5lIERERFJfU0VMCQkJQklUKDEpCisjZGVmaW5lIEREUl80
UEhBU0UJCQlCSVQoMikKKyNkZWZpbmUgRERSX1dJRFRICQkJKDB4MyA8PCA0KQorI2RlZmluZSBE
RFJfUEFEX01PREUJCQkoMHgxIDw8IDgpCisKKyNkZWZpbmUgRFBJX1RHRU5fSFdJRFRICQkweDIw
CisjZGVmaW5lIEhQVwkJCQkwCisjZGVmaW5lIEhQV19NQVNLCQkJKDB4RkZGIDw8IDApCisKKyNk
ZWZpbmUgRFBJX1RHRU5fSFBPUkNICQkweDI0CisjZGVmaW5lIEhCUAkJCQkwCisjZGVmaW5lIEhC
UF9NQVNLCQkJKDB4RkZGIDw8IDApCisjZGVmaW5lIEhGUAkJCQkxNgorI2RlZmluZSBIRlBfTUFT
SwkJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfVEdFTl9WV0lEVEgJCTB4MjgKKyNkZWZp
bmUgRFBJX1RHRU5fVlBPUkNICQkweDJDCisKKyNkZWZpbmUgVlNZTkNfV0lEVEhfU0hJRlQJCTAK
KyNkZWZpbmUgVlNZTkNfV0lEVEhfTUFTSwkJKDB4RkZGIDw8IDApCisjZGVmaW5lIFZTWU5DX0hB
TEZfTElORV9TSElGVAkJMTYKKyNkZWZpbmUgVlNZTkNfSEFMRl9MSU5FX01BU0sJCUJJVCgxNikK
KyNkZWZpbmUgVlNZTkNfQkFDS19QT1JDSF9TSElGVAkJMAorI2RlZmluZSBWU1lOQ19CQUNLX1BP
UkNIX01BU0sJCSgweEZGRiA8PCAwKQorI2RlZmluZSBWU1lOQ19GUk9OVF9QT1JDSF9TSElGVAkJ
MTYKKyNkZWZpbmUgVlNZTkNfRlJPTlRfUE9SQ0hfTUFTSwkJKDB4RkZGIDw8IDE2KQorCisjZGVm
aW5lIERQSV9CR19IQ05UTAkJMHgzMAorI2RlZmluZSBCR19SSUdIVAkJCSgweDFGRkYgPDwgMCkK
KyNkZWZpbmUgQkdfTEVGVAkJCQkoMHgxRkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9CR19WQ05U
TAkJMHgzNAorI2RlZmluZSBCR19CT1QJCQkJKDB4MUZGRiA8PCAwKQorI2RlZmluZSBCR19UT1AJ
CQkJKDB4MUZGRiA8PCAxNikKKworI2RlZmluZSBEUElfQkdfQ09MT1IJCTB4MzgKKyNkZWZpbmUg
QkdfQgkJCQkoMHhGIDw8IDApCisjZGVmaW5lIEJHX0cJCQkJKDB4RiA8PCA4KQorI2RlZmluZSBC
R19SCQkJCSgweEYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0ZJRk9fQ1RMCQkweDNDCisjZGVmaW5l
IEZJRk9fVkFMSURfU0VUCQkJKDB4MUYgPDwgMCkKKyNkZWZpbmUgRklGT19SU1RfU0VMCQkJKDB4
MSA8PCA4KQorCisjZGVmaW5lIERQSV9TVEFUVVMJCTB4NDAKKyNkZWZpbmUgVkNPVU5URVIJCQko
MHgxRkZGIDw8IDApCisjZGVmaW5lIERQSV9CVVNZCQkJQklUKDE2KQorI2RlZmluZSBPVVRFTgkJ
CQlCSVQoMTcpCisjZGVmaW5lIEZJRUxECQkJCUJJVCgyMCkKKyNkZWZpbmUgVERMUgkJCQlCSVQo
MjEpCisKKyNkZWZpbmUgRFBJX1RNT0RFCQkweDQ0CisjZGVmaW5lIERQSV9PRU5fT04JCQlCSVQo
MCkKKworI2RlZmluZSBEUElfQ0hFQ0tTVU0JCTB4NDgKKyNkZWZpbmUgRFBJX0NIRUNLU1VNX01B
U0sJCSgweEZGRkZGRiA8PCAwKQorI2RlZmluZSBEUElfQ0hFQ0tTVU1fUkVBRFkJCUJJVCgzMCkK
KyNkZWZpbmUgRFBJX0NIRUNLU1VNX0VOCQkJQklUKDMxKQorCisjZGVmaW5lIERQSV9EVU1NWQkJ
MHg1MAorI2RlZmluZSBEUElfRFVNTVlfTUFTSwkJCSgweEZGRkZGRkZGIDw8IDApCisKKyNkZWZp
bmUgRFBJX1RHRU5fVldJRFRIX0xFVkVOCTB4NjgKKyNkZWZpbmUgRFBJX1RHRU5fVlBPUkNIX0xF
VkVOCTB4NkMKKyNkZWZpbmUgRFBJX1RHRU5fVldJRFRIX1JPREQJMHg3MAorI2RlZmluZSBEUElf
VEdFTl9WUE9SQ0hfUk9ERAkweDc0CisjZGVmaW5lIERQSV9UR0VOX1ZXSURUSF9SRVZFTgkweDc4
CisjZGVmaW5lIERQSV9UR0VOX1ZQT1JDSF9SRVZFTgkweDdDCisKKyNkZWZpbmUgRFBJX0VTQVZf
VlRJTUlOR19MT0RECTB4ODAKKyNkZWZpbmUgRVNBVl9WT0ZTVF9MT0RECQkJKDB4RkZGIDw8IDAp
CisjZGVmaW5lIEVTQVZfVldJRF9MT0RECQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9F
U0FWX1ZUSU1JTkdfTEVWRU4JMHg4NAorI2RlZmluZSBFU0FWX1ZPRlNUX0xFVkVOCQkoMHhGRkYg
PDwgMCkKKyNkZWZpbmUgRVNBVl9WV0lEX0xFVkVOCQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5l
IERQSV9FU0FWX1ZUSU1JTkdfUk9ERAkweDg4CisjZGVmaW5lIEVTQVZfVk9GU1RfUk9ERAkJCSgw
eEZGRiA8PCAwKQorI2RlZmluZSBFU0FWX1ZXSURfUk9ERAkJCSgweEZGRiA8PCAxNikKKworI2Rl
ZmluZSBEUElfRVNBVl9WVElNSU5HX1JFVkVOCTB4OEMKKyNkZWZpbmUgRVNBVl9WT0ZTVF9SRVZF
TgkJKDB4RkZGIDw8IDApCisjZGVmaW5lIEVTQVZfVldJRF9SRVZFTgkJCSgweEZGRiA8PCAxNikK
KworI2RlZmluZSBEUElfRVNBVl9GVElNSU5HCTB4OTAKKyNkZWZpbmUgRVNBVl9GT0ZTVF9PREQJ
CQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9GT0ZTVF9FVkVOCQkJKDB4RkZGIDw8IDE2KQor
CisjZGVmaW5lIERQSV9DTFBGX1NFVFRJTkcJMHg5NAorI2RlZmluZSBDTFBGX1RZUEUJCQkoMHgz
IDw8IDApCisjZGVmaW5lIFJPVU5EX0VOCQkJQklUKDQpCisKKyNkZWZpbmUgRFBJX1lfTElNSVQJ
CTB4OTgKKyNkZWZpbmUgWV9MSU1JTlRfQk9UCQkJMAorI2RlZmluZSBZX0xJTUlOVF9CT1RfTUFT
SwkJKDB4RkZGIDw8IDApCisjZGVmaW5lIFlfTElNSU5UX1RPUAkJCTE2CisjZGVmaW5lIFlfTElN
SU5UX1RPUF9NQVNLCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0NfTElNSVQJCTB4OUMK
KyNkZWZpbmUgQ19MSU1JVF9CT1QJCQkwCisjZGVmaW5lIENfTElNSVRfQk9UX01BU0sJCSgweEZG
RiA8PCAwKQorI2RlZmluZSBDX0xJTUlUX1RPUAkJCTE2CisjZGVmaW5lIENfTElNSVRfVE9QX01B
U0sJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfWVVWNDIyX1NFVFRJTkcJMHhBMAorI2Rl
ZmluZSBVVl9TV0FQCQkJCUJJVCgwKQorI2RlZmluZSBDUl9ERUxTRUwJCQlCSVQoNCkKKyNkZWZp
bmUgQ0JfREVMU0VMCQkJQklUKDUpCisjZGVmaW5lIFlfREVMU0VMCQkJQklUKDYpCisjZGVmaW5l
IERFX0RFTFNFTAkJCUJJVCg3KQorCisjZGVmaW5lIERQSV9FTUJTWU5DX1NFVFRJTkcJMHhBNAor
I2RlZmluZSBFTUJTWU5DX1JfQ1JfRU4JCQlCSVQoMCkKKyNkZWZpbmUgRU1QU1lOQ19HX1lfRU4J
CQlCSVQoMSkKKyNkZWZpbmUgRU1QU1lOQ19CX0NCX0VOCQkJQklUKDIpCisjZGVmaW5lIEVTQVZf
Rl9JTlYJCQlCSVQoNCkKKyNkZWZpbmUgRVNBVl9WX0lOVgkJCUJJVCg1KQorI2RlZmluZSBFU0FW
X0hfSU5WCQkJQklUKDYpCisjZGVmaW5lIEVTQVZfQ09ERV9NQU4JCQlCSVQoOCkKKyNkZWZpbmUg
VlNfT1VUX1NFTAkJCSgweDcgPDwgMTIpCisKKyNkZWZpbmUgRFBJX0VTQVZfQ09ERV9TRVQwCTB4
QTgKKyNkZWZpbmUgRVNBVl9DT0RFMAkJCSgweEZGRiA8PCAwKQorI2RlZmluZSBFU0FWX0NPREUx
CQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9FU0FWX0NPREVfU0VUMQkweEFDCisjZGVm
aW5lIEVTQVZfQ09ERTIJCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9DT0RFM19NU0IJCQlC
SVQoMTYpCisKKyNkZWZpbmUgRFBJX0hfRlJFX0NPTgkJMHhFMAorI2RlZmluZSBIX0ZSRV8yTgkJ
CUJJVCgyNSkKKyNlbmRpZiAvKiBfX01US19EUElfUkVHU19IICovCmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2Rydi5jCmluZGV4IDA4NzgyZDcuLjI3NzRjYmQgMTAwNjQ0Ci0tLSBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01MTYsNiArNTE2LDcgQEAgc3RhdGljIHN0cnVj
dCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKIAkmbXRrX2Rk
cF9kcml2ZXIsCiAJJm10a19kaXNwX292bF9kcml2ZXIsCiAJJm10a19kaXNwX3JkbWFfZHJpdmVy
LAorCSZtdGtfZHBpX2RyaXZlciwKIAkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCiAJJm10a19k
c2lfZHJpdmVyLAogCSZtdGtfbWlwaV90eF9kcml2ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2Rydi5oCmluZGV4IGFjNmM5MmIuLmFhOTM4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2Rydi5oCkBAIC01Myw2ICs1Myw3IEBAIHN0cnVjdCBtdGtfZHJtX3ByaXZh
dGUgewogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXI7CiBleHRl
cm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOwogZXh0ZXJuIHN0
cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CitleHRlcm4gc3RydWN0
IHBsYXRmb3JtX2RyaXZlciBtdGtfZHBpX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1f
ZHJpdmVyIG10a19kc2lfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRr
X21pcGlfdHhfZHJpdmVyOwogCi0tIAoyLjguMC5yYzMKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs
QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls
bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=