From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v14 4/8] drm/mediatek: Add DPI sub driver
Date: Mon, 11 Apr 2016 17:09:32 +0200
Message-ID: <1460387376-11799-5-git-send-email-p.zabel@pengutronix.de>
References: <1460387376-11799-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: <1460387376-11799-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
b2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotLQpDaGFuZ2Vz
IHNpbmNlIHYxMzoKIC0gUmVtb3ZlIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9ucwogLSBNZWxkIG10
a19kcGkuaCBpbnRvIG10a19kcGkuYwogLSBNYWtlIG10a19kcGlfc2V0X2Rpc3BsYXlfbW9kZSBz
dGF0aWMKIC0gRml4IG1pc3NpbmcgYnJpZGdlIG5vZGUgZXJyb3IgcGF0aAotLS0KIGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcGkuYyAgICAgIHwgNzY5ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaV9yZWdzLmggfCAyMjggKysr
KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgIHwgICAxICsK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICB8ICAgMSArCiA1IGZpbGVz
IGNoYW5nZWQsIDEwMDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaV9yZWdzLmgKCmRpZmYgLS1naXQg
YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvTWFrZWZpbGUKaW5kZXggZTc4MWRiNWEuLjVmY2Y1OGUgMTAwNjQ0Ci0tLSBhL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292
bC5vIFwKIAkJICBtdGtfZHJtX2dlbS5vIFwKIAkJICBtdGtfZHJtX3BsYW5lLm8gXAogCQkgIG10
a19kc2kubyBcCi0JCSAgbXRrX21pcGlfdHgubworCQkgIG10a19taXBpX3R4Lm8gXAorCQkgIG10
a19kcGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubwpk
aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDA1Y2E3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHBpLmMKQEAgLTAsMCArMSw3NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQg
TWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNp
bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUg
PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNs
dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu
aD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cisj
aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNp
bmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgIm10a19kcGlfcmVncy5oIgorI2luY2x1
ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworZW51bSBtdGtfZHBpX291dF9iaXRfbnVtIHsKKwlN
VEtfRFBJX09VVF9CSVRfTlVNXzhCSVRTLAorCU1US19EUElfT1VUX0JJVF9OVU1fMTBCSVRTLAor
CU1US19EUElfT1VUX0JJVF9OVU1fMTJCSVRTLAorCU1US19EUElfT1VUX0JJVF9OVU1fMTZCSVRT
Cit9OworCitlbnVtIG10a19kcGlfb3V0X3ljX21hcCB7CisJTVRLX0RQSV9PVVRfWUNfTUFQX1JH
QiwKKwlNVEtfRFBJX09VVF9ZQ19NQVBfQ1lDWSwKKwlNVEtfRFBJX09VVF9ZQ19NQVBfWUNZQywK
KwlNVEtfRFBJX09VVF9ZQ19NQVBfQ1ksCisJTVRLX0RQSV9PVVRfWUNfTUFQX1lDCit9OworCitl
bnVtIG10a19kcGlfb3V0X2NoYW5uZWxfc3dhcCB7CisJTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQ
X1JHQiwKKwlNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfR0JSLAorCU1US19EUElfT1VUX0NIQU5O
RUxfU1dBUF9CUkcsCisJTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JCRywKKwlNVEtfRFBJX09V
VF9DSEFOTkVMX1NXQVBfR1JCLAorCU1US19EUElfT1VUX0NIQU5ORUxfU1dBUF9CR1IKK307CisK
K2VudW0gbXRrX2RwaV9vdXRfY29sb3JfZm9ybWF0IHsKKwlNVEtfRFBJX0NPTE9SX0ZPUk1BVF9S
R0IsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfUkdCX0ZVTEwsCisJTVRLX0RQSV9DT0xPUl9GT1JN
QVRfWUNCQ1JfNDQ0LAorCU1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQyMiwKKwlNVEtfRFBJ
X0NPTE9SX0ZPUk1BVF9YVl9ZQ0MsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1JfNDQ0X0ZV
TEwsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1JfNDIyX0ZVTEwKK307CisKK3N0cnVjdCBt
dGtfZHBpIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wIGRkcF9jb21wOworCXN0cnVjdCBkcm1fZW5j
b2RlciBlbmNvZGVyOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7
CisJc3RydWN0IGNsayAqZW5naW5lX2NsazsKKwlzdHJ1Y3QgY2xrICpwaXhlbF9jbGs7CisJc3Ry
dWN0IGNsayAqdHZkX2NsazsKKwlpbnQgaXJxOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1v
ZGU7CisJZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3JtYXQgY29sb3JfZm9ybWF0OworCWVudW0g
bXRrX2RwaV9vdXRfeWNfbWFwIHljX21hcDsKKwllbnVtIG10a19kcGlfb3V0X2JpdF9udW0gYml0
X251bTsKKwllbnVtIG10a19kcGlfb3V0X2NoYW5uZWxfc3dhcCBjaGFubmVsX3N3YXA7CisJYm9v
bCBwb3dlcl9zdGE7CisJdTggcG93ZXJfY3RsOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg
bXRrX2RwaSAqbXRrX2RwaV9mcm9tX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICplKQorewor
CXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IG10a19kcGksIGVuY29kZXIpOworfQorCitl
bnVtIG10a19kcGlfcG9sYXJpdHkgeworCU1US19EUElfUE9MQVJJVFlfUklTSU5HLAorCU1US19E
UElfUE9MQVJJVFlfRkFMTElORywKK307CisKK2VudW0gbXRrX2RwaV9wb3dlcl9jdGwgeworCURQ
SV9QT1dFUl9TVEFSVCA9IEJJVCgwKSwKKwlEUElfUE9XRVJfRU5BQkxFID0gQklUKDEpLAorfTsK
Kworc3RydWN0IG10a19kcGlfcG9sYXJpdGllcyB7CisJZW51bSBtdGtfZHBpX3BvbGFyaXR5IGRl
X3BvbDsKKwllbnVtIG10a19kcGlfcG9sYXJpdHkgY2tfcG9sOworCWVudW0gbXRrX2RwaV9wb2xh
cml0eSBoc3luY19wb2w7CisJZW51bSBtdGtfZHBpX3BvbGFyaXR5IHZzeW5jX3BvbDsKK307CisK
K3N0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0geworCXUzMiBzeW5jX3dpZHRoOworCXUzMiBmcm9u
dF9wb3JjaDsKKwl1MzIgYmFja19wb3JjaDsKKwlib29sIHNoaWZ0X2hhbGZfbGluZTsKK307CisK
K3N0cnVjdCBtdGtfZHBpX3ljX2xpbWl0IHsKKwl1MTYgeV90b3A7CisJdTE2IHlfYm90dG9tOwor
CXUxNiBjX3RvcDsKKwl1MTYgY19ib3R0b207Cit9OworCitzdGF0aWMgdm9pZCBtdGtfZHBpX21h
c2soc3RydWN0IG10a19kcGkgKmRwaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2spCit7
CisJdTMyIHRtcCA9IHJlYWRsKGRwaS0+cmVncyArIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8
PSAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgZHBpLT5yZWdzICsgb2Zmc2V0KTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX2RwaV9zd19yZXNldChzdHJ1Y3QgbXRrX2RwaSAqZHBpLCBib29sIHJl
c2V0KQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9SRVQsIHJlc2V0ID8gUlNUIDogMCwgUlNU
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9lbmFibGUoc3RydWN0IG10a19kcGkgKmRwaSkK
K3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfRU4sIEVOLCBFTik7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kcGlfZGlzYWJsZShzdHJ1Y3QgbXRrX2RwaSAqZHBpKQoreworCW10a19kcGlfbWFzayhk
cGksIERQSV9FTiwgMCwgRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19oc3lu
YyhzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtICpz
eW5jKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hXSURUSCwKKwkJICAgICBzeW5j
LT5zeW5jX3dpZHRoIDw8IEhQVywgSFBXX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9U
R0VOX0hQT1JDSCwKKwkJICAgICBzeW5jLT5iYWNrX3BvcmNoIDw8IEhCUCwgSEJQX01BU0spOwor
CW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hQT1JDSCwgc3luYy0+ZnJvbnRfcG9yY2ggPDwg
SEZQLAorCQkgICAgIEhGUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdf
dnN5bmMoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgc3RydWN0IG10a19kcGlfc3luY19wYXJh
bSAqc3luYywKKwkJCQkgdTMyIHdpZHRoX2FkZHIsIHUzMiBwb3JjaF9hZGRyKQoreworCW10a19k
cGlfbWFzayhkcGksIHdpZHRoX2FkZHIsCisJCSAgICAgc3luYy0+c3luY193aWR0aCA8PCBWU1lO
Q19XSURUSF9TSElGVCwKKwkJICAgICBWU1lOQ19XSURUSF9NQVNLKTsKKwltdGtfZHBpX21hc2so
ZHBpLCB3aWR0aF9hZGRyLAorCQkgICAgIHN5bmMtPnNoaWZ0X2hhbGZfbGluZSA8PCBWU1lOQ19I
QUxGX0xJTkVfU0hJRlQsCisJCSAgICAgVlNZTkNfSEFMRl9MSU5FX01BU0spOworCW10a19kcGlf
bWFzayhkcGksIHBvcmNoX2FkZHIsCisJCSAgICAgc3luYy0+YmFja19wb3JjaCA8PCBWU1lOQ19C
QUNLX1BPUkNIX1NISUZULAorCQkgICAgIFZTWU5DX0JBQ0tfUE9SQ0hfTUFTSyk7CisJbXRrX2Rw
aV9tYXNrKGRwaSwgcG9yY2hfYWRkciwKKwkJICAgICBzeW5jLT5mcm9udF9wb3JjaCA8PCBWU1lO
Q19GUk9OVF9QT1JDSF9TSElGVCwKKwkJICAgICBWU1lOQ19GUk9OVF9QT1JDSF9NQVNLKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5bmNfbG9kZChzdHJ1Y3QgbXRrX2RwaSAq
ZHBpLAorCQkJCSAgICAgIHN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gKnN5bmMpCit7CisJbXRr
X2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5jLCBEUElfVEdFTl9WV0lEVEgsIERQSV9UR0VOX1ZQ
T1JDSCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX3ZzeW5jX2xldmVuKHN0cnVj
dCBtdGtfZHBpICpkcGksCisJCQkJICAgICAgIHN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gKnN5
bmMpCit7CisJbXRrX2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5jLCBEUElfVEdFTl9WV0lEVEhf
TEVWRU4sCisJCQkgICAgIERQSV9UR0VOX1ZQT1JDSF9MRVZFTik7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kcGlfY29uZmlnX3ZzeW5jX3JvZGQoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICAg
ICBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtICpzeW5jKQoreworCW10a19kcGlfY29uZmlnX3Zz
eW5jKGRwaSwgc3luYywgRFBJX1RHRU5fVldJRFRIX1JPREQsCisJCQkgICAgIERQSV9UR0VOX1ZQ
T1JDSF9ST0REKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5bmNfcmV2ZW4o
c3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICAgICAgc3RydWN0IG10a19kcGlfc3luY19wYXJh
bSAqc3luYykKK3sKKwltdGtfZHBpX2NvbmZpZ192c3luYyhkcGksIHN5bmMsIERQSV9UR0VOX1ZX
SURUSF9SRVZFTiwKKwkJCSAgICAgRFBJX1RHRU5fVlBPUkNIX1JFVkVOKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX2RwaV9jb25maWdfcG9sKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkgICAgICAg
c3RydWN0IG10a19kcGlfcG9sYXJpdGllcyAqZHBpX3BvbCkKK3sKKwl1bnNpZ25lZCBpbnQgcG9s
OworCisJcG9sID0gKGRwaV9wb2wtPmNrX3BvbCA9PSBNVEtfRFBJX1BPTEFSSVRZX1JJU0lORyA/
IDAgOiBDS19QT0wpIHwKKwkgICAgICAoZHBpX3BvbC0+ZGVfcG9sID09IE1US19EUElfUE9MQVJJ
VFlfUklTSU5HID8gMCA6IERFX1BPTCkgfAorCSAgICAgIChkcGlfcG9sLT5oc3luY19wb2wgPT0g
TVRLX0RQSV9QT0xBUklUWV9SSVNJTkcgPyAwIDogSFNZTkNfUE9MKSB8CisJICAgICAgKGRwaV9w
b2wtPnZzeW5jX3BvbCA9PSBNVEtfRFBJX1BPTEFSSVRZX1JJU0lORyA/IDAgOiBWU1lOQ19QT0wp
OworCW10a19kcGlfbWFzayhkcGksIERQSV9PVVRQVVRfU0VUVElORywgcG9sLAorCQkgICAgIENL
X1BPTCB8IERFX1BPTCB8IEhTWU5DX1BPTCB8IFZTWU5DX1BPTCk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kcGlfY29uZmlnXzNkKHN0cnVjdCBtdGtfZHBpICpkcGksIGJvb2wgZW5fM2QpCit7CisJ
bXRrX2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5fM2QgPyBUREZQX0VOIDogMCwgVERGUF9FTik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgbXRrX2Rw
aSAqZHBpLCBib29sIGludGVyKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGludGVy
ID8gSU5UTF9FTiA6IDAsIElOVExfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZp
Z19mYl9zaXplKHN0cnVjdCBtdGtfZHBpICpkcGksIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sK
KwltdGtfZHBpX21hc2soZHBpLCBEUElfU0laRSwgd2lkdGggPDwgSFNJWkUsIEhTSVpFX01BU0sp
OworCW10a19kcGlfbWFzayhkcGksIERQSV9TSVpFLCBoZWlnaHQgPDwgVlNJWkUsIFZTSVpFX01B
U0spOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19jaGFubmVsX2xpbWl0KHN0cnVj
dCBtdGtfZHBpICpkcGksCisJCQkJCSBzdHJ1Y3QgbXRrX2RwaV95Y19saW1pdCAqbGltaXQpCit7
CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX1lfTElNSVQsIGxpbWl0LT55X2JvdHRvbSA8PCBZX0xJ
TUlOVF9CT1QsCisJCSAgICAgWV9MSU1JTlRfQk9UX01BU0spOworCW10a19kcGlfbWFzayhkcGks
IERQSV9ZX0xJTUlULCBsaW1pdC0+eV90b3AgPDwgWV9MSU1JTlRfVE9QLAorCQkgICAgIFlfTElN
SU5UX1RPUF9NQVNLKTsKKwltdGtfZHBpX21hc2soZHBpLCBEUElfQ19MSU1JVCwgbGltaXQtPmNf
Ym90dG9tIDw8IENfTElNSVRfQk9ULAorCQkgICAgIENfTElNSVRfQk9UX01BU0spOworCW10a19k
cGlfbWFzayhkcGksIERQSV9DX0xJTUlULCBsaW1pdC0+Y190b3AgPDwgQ19MSU1JVF9UT1AsCisJ
CSAgICAgQ19MSU1JVF9UT1BfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmln
X2JpdF9udW0oc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICBlbnVtIG10a19kcGlfb3V0X2Jp
dF9udW0gbnVtKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG51bSkgeworCWNhc2UgTVRLX0RQ
SV9PVVRfQklUX05VTV84QklUUzoKKwkJdmFsID0gT1VUX0JJVF84OworCQlicmVhazsKKwljYXNl
IE1US19EUElfT1VUX0JJVF9OVU1fMTBCSVRTOgorCQl2YWwgPSBPVVRfQklUXzEwOworCQlicmVh
azsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTJCSVRTOgorCQl2YWwgPSBPVVRfQklUXzEy
OworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTZCSVRTOgorCQl2YWwgPSBP
VVRfQklUXzE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBPVVRfQklUXzg7CisJCWJy
ZWFrOworCX0KKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBP
VVRfQklULAorCQkgICAgIE9VVF9CSVRfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlf
Y29uZmlnX3ljX21hcChzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgZW51bSBtdGtfZHBpX291
dF95Y19tYXAgbWFwKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG1hcCkgeworCWNhc2UgTVRL
X0RQSV9PVVRfWUNfTUFQX1JHQjoKKwkJdmFsID0gWUNfTUFQX1JHQjsKKwkJYnJlYWs7CisJY2Fz
ZSBNVEtfRFBJX09VVF9ZQ19NQVBfQ1lDWToKKwkJdmFsID0gWUNfTUFQX0NZQ1k7CisJCWJyZWFr
OworCWNhc2UgTVRLX0RQSV9PVVRfWUNfTUFQX1lDWUM6CisJCXZhbCA9IFlDX01BUF9ZQ1lDOwor
CQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9DWToKKwkJdmFsID0gWUNfTUFQX0NZ
OworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9ZQzoKKwkJdmFsID0gWUNfTUFQ
X1lDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBZQ19NQVBfUkdCOworCQlicmVhazsK
Kwl9CisKKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBZQ19N
QVAsIFlDX01BUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfY2hhbm5l
bF9zd2FwKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCWVudW0gbXRrX2RwaV9vdXRfY2hhbm5l
bF9zd2FwIHN3YXApCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoc3dhcCkgeworCWNhc2UgTVRL
X0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JHQjoKKwkJdmFsID0gU1dBUF9SR0I7CisJCWJyZWFrOwor
CWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0dCUjoKKwkJdmFsID0gU1dBUF9HQlI7CisJ
CWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JSRzoKKwkJdmFsID0gU1dB
UF9CUkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JCRzoKKwkJ
dmFsID0gU1dBUF9SQkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQ
X0dSQjoKKwkJdmFsID0gU1dBUF9HUkI7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hB
Tk5FTF9TV0FQX0JHUjoKKwkJdmFsID0gU1dBUF9CR1I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CXZhbCA9IFNXQVBfUkdCOworCQlicmVhazsKKwl9CisKKwltdGtfZHBpX21hc2soZHBpLCBEUElf
T1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBDSF9TV0FQLCBDSF9TV0FQX01BU0spOworfQorCitzdGF0
aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKHN0cnVjdCBtdGtfZHBpICpkcGks
IGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGVuYWJsZSA/IFlV
VjQyMl9FTiA6IDAsIFlVVjQyMl9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmln
X2NzY19lbmFibGUoc3RydWN0IG10a19kcGkgKmRwaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2Rw
aV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5hYmxlID8gQ1NDX0VOQUJMRSA6IDAsIENTQ19FTkFCTEUp
OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KHN0cnVjdCBtdGtf
ZHBpICpkcGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGVu
YWJsZSA/IElOX1JCX1NXQVAgOiAwLCBJTl9SQl9TV0FQKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RwaV9jb25maWdfMm5faF9mcmUoc3RydWN0IG10a19kcGkgKmRwaSkKK3sKKwltdGtfZHBpX21h
c2soZHBpLCBEUElfSF9GUkVfQ09OLCBIX0ZSRV8yTiwgSF9GUkVfMk4pOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJ
CQkJZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3JtYXQgZm9ybWF0KQoreworCWlmICgoZm9ybWF0
ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQ0NCkgfHwKKwkgICAgKGZvcm1hdCA9PSBN
VEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDRfRlVMTCkpIHsKKwkJbXRrX2RwaV9jb25maWdf
eXV2NDIyX2VuYWJsZShkcGksIGZhbHNlKTsKKwkJbXRrX2RwaV9jb25maWdfY3NjX2VuYWJsZShk
cGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwgZmFsc2UpOworCQlt
dGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBf
QkdSKTsKKwl9IGVsc2UgaWYgKChmb3JtYXQgPT0gTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1Jf
NDIyKSB8fAorCQkgICAoZm9ybWF0ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQyMl9G
VUxMKSkgeworCQltdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKGRwaSwgdHJ1ZSk7CisJCW10
a19kcGlfY29uZmlnX2NzY19lbmFibGUoZHBpLCB0cnVlKTsKKwkJbXRrX2RwaV9jb25maWdfc3dh
cF9pbnB1dChkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBN
VEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCKTsKKwl9IGVsc2UgeworCQltdGtfZHBpX2NvbmZp
Z195dXY0MjJfZW5hYmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19jc2NfZW5hYmxl
KGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwgZmFsc2UpOwor
CQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVMX1NX
QVBfUkdCKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfcG93ZXJfb2ZmKHN0cnVjdCBt
dGtfZHBpICpkcGksIGVudW0gbXRrX2RwaV9wb3dlcl9jdGwgcGN0bCkKK3sKKwlkcGktPnBvd2Vy
X2N0bCAmPSB+cGN0bDsKKworCWlmICgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9XRVJfU1RBUlQp
IHx8CisJICAgIChkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dFUl9FTkFCTEUpKQorCQlyZXR1cm47
CisKKwlpZiAoIWRwaS0+cG93ZXJfc3RhKQorCQlyZXR1cm47CisKKwltdGtfZHBpX2Rpc2FibGUo
ZHBpKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHBpLT5waXhlbF9jbGspOworCWNsa19kaXNh
YmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9jbGspOworCWRwaS0+cG93ZXJfc3RhID0gZmFsc2U7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9wb3dlcl9vbihzdHJ1Y3QgbXRrX2RwaSAqZHBpLCBl
bnVtIG10a19kcGlfcG93ZXJfY3RsIHBjdGwpCit7CisJaW50IHJldDsKKworCWRwaS0+cG93ZXJf
Y3RsIHw9IHBjdGw7CisKKwlpZiAoIShkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dFUl9TVEFSVCkg
JiYKKwkgICAgIShkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dFUl9FTkFCTEUpKQorCQlyZXR1cm4g
MDsKKworCWlmIChkcGktPnBvd2VyX3N0YSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjbGtfcHJl
cGFyZV9lbmFibGUoZHBpLT5lbmdpbmVfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHBp
LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9jazogJWRcbiIsIHJldCk7CisJCWdv
dG8gZXJyX2VuZzsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHBpLT5waXhlbF9j
bGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcGktPmRldiwgIkZhaWxlZCB0byBlbmFibGUg
cGl4ZWwgY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waXhlbDsKKwl9CisKKwltdGtf
ZHBpX2VuYWJsZShkcGkpOworCWRwaS0+cG93ZXJfc3RhID0gdHJ1ZTsKKwlyZXR1cm4gMDsKKwor
ZXJyX3BpeGVsOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9jbGspOworZXJy
X2VuZzoKKwlkcGktPnBvd2VyX2N0bCAmPSB+cGN0bDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0
aWMgaW50IG10a19kcGlfc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJ
CSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbXRrX2RwaV95
Y19saW1pdCBsaW1pdDsKKwlzdHJ1Y3QgbXRrX2RwaV9wb2xhcml0aWVzIGRwaV9wb2w7CisJc3Ry
dWN0IG10a19kcGlfc3luY19wYXJhbSBoc3luYzsKKwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFt
IHZzeW5jX2xvZGQgPSB7IDAgfTsKKwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtIHZzeW5jX2xl
dmVuID0geyAwIH07CisJc3RydWN0IG10a19kcGlfc3luY19wYXJhbSB2c3luY19yb2RkID0geyAw
IH07CisJc3RydWN0IG10a19kcGlfc3luY19wYXJhbSB2c3luY19yZXZlbiA9IHsgMCB9OworCXVu
c2lnbmVkIGxvbmcgcGl4X3JhdGU7CisJdW5zaWduZWQgbG9uZyBwbGxfcmF0ZTsKKwl1bnNpZ25l
ZCBpbnQgZmFjdG9yOworCisJaWYgKCFkcGkpIHsKKwkJZGV2X2VycihkcGktPmRldiwgImludmFs
aWQgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwaXhfcmF0ZSA9IDEw
MDBVTCAqIG1vZGUtPmNsb2NrOworCWlmIChtb2RlLT5jbG9jayA8PSA3NDAwMCkKKwkJZmFjdG9y
ID0gOCAqIDM7CisJZWxzZQorCQlmYWN0b3IgPSA0ICogMzsKKwlwbGxfcmF0ZSA9IHBpeF9yYXRl
ICogZmFjdG9yOworCisJZGV2X2RiZyhkcGktPmRldiwgIldhbnQgUExMICVsdSBIeiwgcGl4ZWwg
Y2xvY2sgJWx1IEh6XG4iLAorCQlwbGxfcmF0ZSwgcGl4X3JhdGUpOworCisJY2xrX3NldF9yYXRl
KGRwaS0+dHZkX2NsaywgcGxsX3JhdGUpOworCXBsbF9yYXRlID0gY2xrX2dldF9yYXRlKGRwaS0+
dHZkX2Nsayk7CisKKwlwaXhfcmF0ZSA9IHBsbF9yYXRlIC8gZmFjdG9yOworCWNsa19zZXRfcmF0
ZShkcGktPnBpeGVsX2NsaywgcGl4X3JhdGUpOworCXBpeF9yYXRlID0gY2xrX2dldF9yYXRlKGRw
aS0+cGl4ZWxfY2xrKTsKKworCWRldl9kYmcoZHBpLT5kZXYsICJHb3QgIFBMTCAlbHUgSHosIHBp
eGVsIGNsb2NrICVsdSBIelxuIiwKKwkJcGxsX3JhdGUsIHBpeF9yYXRlKTsKKworCWxpbWl0LmNf
Ym90dG9tID0gMHgwMDEwOworCWxpbWl0LmNfdG9wID0gMHgwRkUwOworCWxpbWl0LnlfYm90dG9t
ID0gMHgwMDEwOworCWxpbWl0LnlfdG9wID0gMHgwRkUwOworCisJZHBpX3BvbC5ja19wb2wgPSBN
VEtfRFBJX1BPTEFSSVRZX0ZBTExJTkc7CisJZHBpX3BvbC5kZV9wb2wgPSBNVEtfRFBJX1BPTEFS
SVRZX1JJU0lORzsKKwlkcGlfcG9sLmhzeW5jX3BvbCA9IG1vZGUtPmZsYWdzICYgRFJNX01PREVf
RkxBR19QSFNZTkMgPworCQkJICAgIE1US19EUElfUE9MQVJJVFlfRkFMTElORyA6IE1US19EUElf
UE9MQVJJVFlfUklTSU5HOworCWRwaV9wb2wudnN5bmNfcG9sID0gbW9kZS0+ZmxhZ3MgJiBEUk1f
TU9ERV9GTEFHX1BWU1lOQyA/CisJCQkgICAgTVRLX0RQSV9QT0xBUklUWV9GQUxMSU5HIDogTVRL
X0RQSV9QT0xBUklUWV9SSVNJTkc7CisKKwloc3luYy5zeW5jX3dpZHRoID0gbW9kZS0+aHN5bmNf
ZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaHN5bmMuYmFja19wb3JjaCA9IG1vZGUtPmh0b3Rh
bCAtIG1vZGUtPmhzeW5jX2VuZDsKKwloc3luYy5mcm9udF9wb3JjaCA9IG1vZGUtPmhzeW5jX3N0
YXJ0IC0gbW9kZS0+aGRpc3BsYXk7CisJaHN5bmMuc2hpZnRfaGFsZl9saW5lID0gZmFsc2U7CisK
Kwl2c3luY19sb2RkLnN5bmNfd2lkdGggPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19z
dGFydDsKKwl2c3luY19sb2RkLmJhY2tfcG9yY2ggPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3lu
Y19lbmQ7CisJdnN5bmNfbG9kZC5mcm9udF9wb3JjaCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k
ZS0+dmRpc3BsYXk7CisJdnN5bmNfbG9kZC5zaGlmdF9oYWxmX2xpbmUgPSBmYWxzZTsKKworCWlm
IChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCisJICAgIG1vZGUtPmZs
YWdzICYgRFJNX01PREVfRkxBR18zRF9NQVNLKSB7CisJCXZzeW5jX2xldmVuID0gdnN5bmNfbG9k
ZDsKKwkJdnN5bmNfcm9kZCA9IHZzeW5jX2xvZGQ7CisJCXZzeW5jX3JldmVuID0gdnN5bmNfbG9k
ZDsKKwkJdnN5bmNfbGV2ZW4uc2hpZnRfaGFsZl9saW5lID0gdHJ1ZTsKKwkJdnN5bmNfcmV2ZW4u
c2hpZnRfaGFsZl9saW5lID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKG1vZGUtPmZsYWdzICYgRFJNX01P
REVfRkxBR19JTlRFUkxBQ0UgJiYKKwkJICAgIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdf
M0RfTUFTSykpIHsKKwkJdnN5bmNfbGV2ZW4gPSB2c3luY19sb2RkOworCQl2c3luY19sZXZlbi5z
aGlmdF9oYWxmX2xpbmUgPSB0cnVlOworCX0gZWxzZSBpZiAoIShtb2RlLT5mbGFncyAmIERSTV9N
T0RFX0ZMQUdfSU5URVJMQUNFKSAmJgorCQkgICBtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdf
M0RfTUFTSykgeworCQl2c3luY19yb2RkID0gdnN5bmNfbG9kZDsKKwl9CisJbXRrX2RwaV9zd19y
ZXNldChkcGksIHRydWUpOworCW10a19kcGlfY29uZmlnX3BvbChkcGksICZkcGlfcG9sKTsKKwor
CW10a19kcGlfY29uZmlnX2hzeW5jKGRwaSwgJmhzeW5jKTsKKwltdGtfZHBpX2NvbmZpZ192c3lu
Y19sb2RkKGRwaSwgJnZzeW5jX2xvZGQpOworCW10a19kcGlfY29uZmlnX3ZzeW5jX3JvZGQoZHBp
LCAmdnN5bmNfcm9kZCk7CisJbXRrX2RwaV9jb25maWdfdnN5bmNfbGV2ZW4oZHBpLCAmdnN5bmNf
bGV2ZW4pOworCW10a19kcGlfY29uZmlnX3ZzeW5jX3JldmVuKGRwaSwgJnZzeW5jX3JldmVuKTsK
KworCW10a19kcGlfY29uZmlnXzNkKGRwaSwgISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH
XzNEX01BU0spKTsKKwltdGtfZHBpX2NvbmZpZ19pbnRlcmZhY2UoZHBpLCAhIShtb2RlLT5mbGFn
cyAmCisJCQkJCSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpOworCWlmIChtb2RlLT5mbGFncyAm
IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQorCQltdGtfZHBpX2NvbmZpZ19mYl9zaXplKGRwaSwg
bW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5IC8gMik7CisJZWxzZQorCQltdGtfZHBpX2Nv
bmZpZ19mYl9zaXplKGRwaSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKworCW10
a19kcGlfY29uZmlnX2NoYW5uZWxfbGltaXQoZHBpLCAmbGltaXQpOworCW10a19kcGlfY29uZmln
X2JpdF9udW0oZHBpLCBkcGktPmJpdF9udW0pOworCW10a19kcGlfY29uZmlnX2NoYW5uZWxfc3dh
cChkcGksIGRwaS0+Y2hhbm5lbF9zd2FwKTsKKwltdGtfZHBpX2NvbmZpZ195Y19tYXAoZHBpLCBk
cGktPnljX21hcCk7CisJbXRrX2RwaV9jb25maWdfY29sb3JfZm9ybWF0KGRwaSwgZHBpLT5jb2xv
cl9mb3JtYXQpOworCW10a19kcGlfY29uZmlnXzJuX2hfZnJlKGRwaSk7CisJbXRrX2RwaV9zd19y
ZXNldChkcGksIGZhbHNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBp
X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2Vu
Y29kZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5j
b2Rlcl9mdW5jcyBtdGtfZHBpX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBtdGtfZHBp
X2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyBib29sIG10a19kcGlfZW5jb2Rlcl9tb2Rl
X2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgICAgY29uc3Qgc3Ry
dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxh
eV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHBpX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAor
CQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICBzdHJ1Y3Qg
ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBp
ID0gbXRrX2RwaV9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisKKwlkcm1fbW9kZV9jb3B5KCZkcGkt
Pm1vZGUsIGFkanVzdGVkX21vZGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2VuY29kZXJf
ZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kcGkg
KmRwaSA9IG10a19kcGlfZnJvbV9lbmNvZGVyKGVuY29kZXIpOworCisJbXRrX2RwaV9wb3dlcl9v
ZmYoZHBpLCBEUElfUE9XRVJfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9lbmNv
ZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19k
cGkgKmRwaSA9IG10a19kcGlfZnJvbV9lbmNvZGVyKGVuY29kZXIpOworCisJbXRrX2RwaV9wb3dl
cl9vbihkcGksIERQSV9QT1dFUl9FTkFCTEUpOworCW10a19kcGlfc2V0X2Rpc3BsYXlfbW9kZShk
cGksICZkcGktPm1vZGUpOworfQorCitzdGF0aWMgaW50IG10a19kcGlfYXRvbWljX2NoZWNrKHN0
cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy
dGNfc3RhdGUsCisJCQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVy
X2Z1bmNzIG10a19kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAgPSBt
dGtfZHBpX2VuY29kZXJfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSBtdGtfZHBpX2VuY29kZXJf
bW9kZV9zZXQsCisJLmRpc2FibGUgPSBtdGtfZHBpX2VuY29kZXJfZGlzYWJsZSwKKwkuZW5hYmxl
ID0gbXRrX2RwaV9lbmNvZGVyX2VuYWJsZSwKKwkuYXRvbWljX2NoZWNrID0gbXRrX2RwaV9hdG9t
aWNfY2hlY2ssCit9OworCitzdGF0aWMgdm9pZCBtdGtfZHBpX3N0YXJ0KHN0cnVjdCBtdGtfZGRw
X2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGNvbnRhaW5lcl9vZihjb21w
LCBzdHJ1Y3QgbXRrX2RwaSwgZGRwX2NvbXApOworCisJbXRrX2RwaV9wb3dlcl9vbihkcGksIERQ
SV9QT1dFUl9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfc3RvcChzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBjb250YWluZXJfb2Yo
Y29tcCwgc3RydWN0IG10a19kcGksIGRkcF9jb21wKTsKKworCW10a19kcGlfcG93ZXJfb2ZmKGRw
aSwgRFBJX1BPV0VSX1NUQVJUKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv
bXBfZnVuY3MgbXRrX2RwaV9mdW5jcyA9IHsKKwkuc3RhcnQgPSBtdGtfZHBpX3N0YXJ0LAorCS5z
dG9wID0gbXRrX2RwaV9zdG9wLAorfTsKKworc3RhdGljIGludCBtdGtfZHBpX2JpbmQoc3RydWN0
IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3Ry
dWN0IG10a19kcGkgKmRwaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2
aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRrX2RkcF9jb21wX3Jl
Z2lzdGVyKGRybV9kZXYsICZkcGktPmRkcF9jb21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2
LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g
ZHJtX2VuY29kZXJfaW5pdChkcm1fZGV2LCAmZHBpLT5lbmNvZGVyLCAmbXRrX2RwaV9lbmNvZGVy
X2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7CisJaWYgKHJl
dCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRlY29kZXI6ICVkXG4i
LCByZXQpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCX0KKwlkcm1fZW5jb2Rlcl9oZWxwZXJf
YWRkKCZkcGktPmVuY29kZXIsICZtdGtfZHBpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCS8q
IEN1cnJlbnRseSBEUEkwIGlzIGZpeGVkIHRvIGJlIGRyaXZlbiBieSBPVkwxICovCisJZHBpLT5l
bmNvZGVyLnBvc3NpYmxlX2NydGNzID0gQklUKDEpOworCisJZHBpLT5lbmNvZGVyLmJyaWRnZS0+
ZW5jb2RlciA9ICZkcGktPmVuY29kZXI7CisJcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goZHBpLT5l
bmNvZGVyLmRldiwgZHBpLT5lbmNvZGVyLmJyaWRnZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBhdHRhY2ggYnJpZGdlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJf
Y2xlYW51cDsKKwl9CisKKwlkcGktPmJpdF9udW0gPSBNVEtfRFBJX09VVF9CSVRfTlVNXzhCSVRT
OworCWRwaS0+Y2hhbm5lbF9zd2FwID0gTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JHQjsKKwlk
cGktPnljX21hcCA9IE1US19EUElfT1VUX1lDX01BUF9SR0I7CisJZHBpLT5jb2xvcl9mb3JtYXQg
PSBNVEtfRFBJX0NPTE9SX0ZPUk1BVF9SR0I7CisKKwlyZXR1cm4gMDsKKworZXJyX2NsZWFudXA6
CisJZHJtX2VuY29kZXJfY2xlYW51cCgmZHBpLT5lbmNvZGVyKTsKK2Vycl91bnJlZ2lzdGVyOgor
CW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZkcGktPmRkcF9jb21wKTsKKwlyZXR1
cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk
ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0
IG10a19kcGkgKmRwaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNl
ICpkcm1fZGV2ID0gZGF0YTsKKworCWRybV9lbmNvZGVyX2NsZWFudXAoJmRwaS0+ZW5jb2Rlcik7
CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtX2RldiwgJmRwaS0+ZGRwX2NvbXApOworfQor
CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2RwaV9jb21wb25lbnRfb3Bz
ID0geworCS5iaW5kID0gbXRrX2RwaV9iaW5kLAorCS51bmJpbmQgPSBtdGtfZHBpX3VuYmluZCwK
K307CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw
ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19k
cGkgKmRwaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVw
LCAqYnJpZGdlX25vZGUgPSBOVUxMOworCWludCBjb21wX2lkOworCWludCByZXQ7CisKKwlkcGkg
PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwaSksIEdGUF9LRVJORUwpOworCWlmICghZHBp
KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRwaS0+ZGV2ID0gZGV2OworCisJbWVtID0gcGxhdGZv
cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkcGktPnJlZ3MgPSBk
ZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoZHBpLT5yZWdzKSkg
eworCQlyZXQgPSBQVFJfRVJSKGRwaS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv
IGlvcmVtYXAgbWVtIHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK
KwlkcGktPmVuZ2luZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZW5naW5lIik7CisJaWYgKElT
X0VSUihkcGktPmVuZ2luZV9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHBpLT5lbmdpbmVfY2xr
KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGVuZ2luZSBjbG9jazogJWRcbiIsIHJl
dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHBpLT5waXhlbF9jbGsgPSBkZXZtX2Nsa19nZXQo
ZGV2LCAicGl4ZWwiKTsKKwlpZiAoSVNfRVJSKGRwaS0+cGl4ZWxfY2xrKSkgeworCQlyZXQgPSBQ
VFJfRVJSKGRwaS0+cGl4ZWxfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IHBp
eGVsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcGktPnR2ZF9j
bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsIik7CisJaWYgKElTX0VSUihkcGktPnR2ZF9jbGsp
KSB7CisJCXJldCA9IFBUUl9FUlIoZHBpLT50dmRfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gZ2V0IHR2ZHBsbCBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CisJZHBpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkcGktPmlycSA8
PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBpcnE6ICVkXG4iLCBkcGktPmly
cSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5k
cG9pbnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsKKwlpZiAoZXApIHsKKwkJYnJpZGdlX25vZGUgPSBv
Zl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwKTsKKwkJb2Zfbm9kZV9wdXQoZXApOwor
CX0KKwlpZiAoIWJyaWRnZV9ub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQg
YnJpZGdlIG5vZGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfaW5mbyhkZXYs
ICJGb3VuZCBicmlkZ2Ugbm9kZTogJXNcbiIsIGJyaWRnZV9ub2RlLT5mdWxsX25hbWUpOworCisJ
ZHBpLT5lbmNvZGVyLmJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShicmlkZ2Vfbm9kZSk7CisJ
b2Zfbm9kZV9wdXQoYnJpZGdlX25vZGUpOworCWlmICghZHBpLT5lbmNvZGVyLmJyaWRnZSkKKwkJ
cmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChk
ZXYtPm9mX25vZGUsIE1US19EUEkpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1
cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zf
bm9kZSwgJmRwaS0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kcGlfZnVuY3MpOworCWlm
IChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6
ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh
KHBkZXYsIGRwaSk7CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kcGlfY29tcG9u
ZW50X29wcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29t
cG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30K
Kworc3RhdGljIGludCBtdGtfZHBpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2
KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kcGlfY29tcG9uZW50X29wcyk7
CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr
X2RwaV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kcGki
LCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcGlfZHJpdmVyID0g
eworCS5wcm9iZSA9IG10a19kcGlfcHJvYmUsCisJLnJlbW92ZSA9IG10a19kcGlfcmVtb3ZlLAor
CS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWRwaSIsCisJCS5vZl9tYXRjaF90YWJs
ZSA9IG10a19kcGlfb2ZfaWRzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcGlfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cGlfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNmFkNDcKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaV9yZWdzLmgK
QEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5j
LgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19NVEtf
RFBJX1JFR1NfSAorI2RlZmluZSBfX01US19EUElfUkVHU19ICisKKyNkZWZpbmUgRFBJX0VOCQkJ
MHgwMAorI2RlZmluZSBFTgkJCQlCSVQoMCkKKworI2RlZmluZSBEUElfUkVUCQkJMHgwNAorI2Rl
ZmluZSBSU1QJCQkJQklUKDApCisKKyNkZWZpbmUgRFBJX0lOVEVOCQkweDA4CisjZGVmaW5lIElO
VF9WU1lOQ19FTgkJCUJJVCgwKQorI2RlZmluZSBJTlRfVkRFX0VOCQkJQklUKDEpCisjZGVmaW5l
IElOVF9VTkRFUkZMT1dfRU4JCUJJVCgyKQorCisjZGVmaW5lIERQSV9JTlRTVEEJCTB4MEMKKyNk
ZWZpbmUgSU5UX1ZTWU5DX1NUQQkJCUJJVCgwKQorI2RlZmluZSBJTlRfVkRFX1NUQQkJCUJJVCgx
KQorI2RlZmluZSBJTlRfVU5ERVJGTE9XX1NUQQkJQklUKDIpCisKKyNkZWZpbmUgRFBJX0NPTgkJ
CTB4MTAKKyNkZWZpbmUgQkdfRU5BQkxFCQkJQklUKDApCisjZGVmaW5lIElOX1JCX1NXQVAJCQlC
SVQoMSkKKyNkZWZpbmUgSU5UTF9FTgkJCQlCSVQoMikKKyNkZWZpbmUgVERGUF9FTgkJCQlCSVQo
MykKKyNkZWZpbmUgQ0xQRl9FTgkJCQlCSVQoNCkKKyNkZWZpbmUgWVVWNDIyX0VOCQkJQklUKDUp
CisjZGVmaW5lIENTQ19FTkFCTEUJCQlCSVQoNikKKyNkZWZpbmUgUjYwMV9TRUwJCQlCSVQoNykK
KyNkZWZpbmUgRU1CU1lOQ19FTgkJCUJJVCg4KQorI2RlZmluZSBWU19MT0REX0VOCQkJQklUKDE2
KQorI2RlZmluZSBWU19MRVZFTl9FTgkJCUJJVCgxNykKKyNkZWZpbmUgVlNfUk9ERF9FTgkJCUJJ
VCgxOCkKKyNkZWZpbmUgVlNfUkVWRU4JCQlCSVQoMTkpCisjZGVmaW5lIEZBS0VfREVfTE9ERAkJ
CUJJVCgyMCkKKyNkZWZpbmUgRkFLRV9ERV9MRVZFTgkJCUJJVCgyMSkKKyNkZWZpbmUgRkFLRV9E
RV9ST0RECQkJQklUKDIyKQorI2RlZmluZSBGQUtFX0RFX1JFVkVOCQkJQklUKDIzKQorCisjZGVm
aW5lIERQSV9PVVRQVVRfU0VUVElORwkweDE0CisjZGVmaW5lIENIX1NXQVAJCQkJMAorI2RlZmlu
ZSBDSF9TV0FQX01BU0sJCQkoMHg3IDw8IDApCisjZGVmaW5lIFNXQVBfUkdCCQkJMHgwMAorI2Rl
ZmluZSBTV0FQX0dCUgkJCTB4MDEKKyNkZWZpbmUgU1dBUF9CUkcJCQkweDAyCisjZGVmaW5lIFNX
QVBfUkJHCQkJMHgwMworI2RlZmluZSBTV0FQX0dSQgkJCTB4MDQKKyNkZWZpbmUgU1dBUF9CR1IJ
CQkweDA1CisjZGVmaW5lIEJJVF9TV0FQCQkJQklUKDMpCisjZGVmaW5lIEJfTUFTSwkJCQlCSVQo
NCkKKyNkZWZpbmUgR19NQVNLCQkJCUJJVCg1KQorI2RlZmluZSBSX01BU0sJCQkJQklUKDYpCisj
ZGVmaW5lIERFX01BU0sJCQkJQklUKDgpCisjZGVmaW5lIEhTX01BU0sJCQkJQklUKDkpCisjZGVm
aW5lIFZTX01BU0sJCQkJQklUKDEwKQorI2RlZmluZSBERV9QT0wJCQkJQklUKDEyKQorI2RlZmlu
ZSBIU1lOQ19QT0wJCQlCSVQoMTMpCisjZGVmaW5lIFZTWU5DX1BPTAkJCUJJVCgxNCkKKyNkZWZp
bmUgQ0tfUE9MCQkJCUJJVCgxNSkKKyNkZWZpbmUgT0VOX09GRgkJCQlCSVQoMTYpCisjZGVmaW5l
IEVER0VfU0VMCQkJQklUKDE3KQorI2RlZmluZSBPVVRfQklUCQkJCTE4CisjZGVmaW5lIE9VVF9C
SVRfTUFTSwkJCSgweDMgPDwgMTgpCisjZGVmaW5lIE9VVF9CSVRfOAkJCTB4MDAKKyNkZWZpbmUg
T1VUX0JJVF8xMAkJCTB4MDEKKyNkZWZpbmUgT1VUX0JJVF8xMgkJCTB4MDIKKyNkZWZpbmUgT1VU
X0JJVF8xNgkJCTB4MDMKKyNkZWZpbmUgWUNfTUFQCQkJCTIwCisjZGVmaW5lIFlDX01BUF9NQVNL
CQkJKDB4NyA8PCAyMCkKKyNkZWZpbmUgWUNfTUFQX1JHQgkJCTB4MDAKKyNkZWZpbmUgWUNfTUFQ
X0NZQ1kJCQkweDA0CisjZGVmaW5lIFlDX01BUF9ZQ1lDCQkJMHgwNQorI2RlZmluZSBZQ19NQVBf
Q1kJCQkweDA2CisjZGVmaW5lIFlDX01BUF9ZQwkJCTB4MDcKKworI2RlZmluZSBEUElfU0laRQkJ
MHgxOAorI2RlZmluZSBIU0laRQkJCQkwCisjZGVmaW5lIEhTSVpFX01BU0sJCQkoMHgxRkZGIDw8
IDApCisjZGVmaW5lIFZTSVpFCQkJCTE2CisjZGVmaW5lIFZTSVpFX01BU0sJCQkoMHgxRkZGIDw8
IDE2KQorCisjZGVmaW5lIERQSV9ERFJfU0VUVElORwkJMHgxQworI2RlZmluZSBERFJfRU4JCQkJ
QklUKDApCisjZGVmaW5lIERERFJfU0VMCQkJQklUKDEpCisjZGVmaW5lIEREUl80UEhBU0UJCQlC
SVQoMikKKyNkZWZpbmUgRERSX1dJRFRICQkJKDB4MyA8PCA0KQorI2RlZmluZSBERFJfUEFEX01P
REUJCQkoMHgxIDw8IDgpCisKKyNkZWZpbmUgRFBJX1RHRU5fSFdJRFRICQkweDIwCisjZGVmaW5l
IEhQVwkJCQkwCisjZGVmaW5lIEhQV19NQVNLCQkJKDB4RkZGIDw8IDApCisKKyNkZWZpbmUgRFBJ
X1RHRU5fSFBPUkNICQkweDI0CisjZGVmaW5lIEhCUAkJCQkwCisjZGVmaW5lIEhCUF9NQVNLCQkJ
KDB4RkZGIDw8IDApCisjZGVmaW5lIEhGUAkJCQkxNgorI2RlZmluZSBIRlBfTUFTSwkJCSgweEZG
RiA8PCAxNikKKworI2RlZmluZSBEUElfVEdFTl9WV0lEVEgJCTB4MjgKKyNkZWZpbmUgRFBJX1RH
RU5fVlBPUkNICQkweDJDCisKKyNkZWZpbmUgVlNZTkNfV0lEVEhfU0hJRlQJCTAKKyNkZWZpbmUg
VlNZTkNfV0lEVEhfTUFTSwkJKDB4RkZGIDw8IDApCisjZGVmaW5lIFZTWU5DX0hBTEZfTElORV9T
SElGVAkJMTYKKyNkZWZpbmUgVlNZTkNfSEFMRl9MSU5FX01BU0sJCUJJVCgxNikKKyNkZWZpbmUg
VlNZTkNfQkFDS19QT1JDSF9TSElGVAkJMAorI2RlZmluZSBWU1lOQ19CQUNLX1BPUkNIX01BU0sJ
CSgweEZGRiA8PCAwKQorI2RlZmluZSBWU1lOQ19GUk9OVF9QT1JDSF9TSElGVAkJMTYKKyNkZWZp
bmUgVlNZTkNfRlJPTlRfUE9SQ0hfTUFTSwkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9C
R19IQ05UTAkJMHgzMAorI2RlZmluZSBCR19SSUdIVAkJCSgweDFGRkYgPDwgMCkKKyNkZWZpbmUg
QkdfTEVGVAkJCQkoMHgxRkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9CR19WQ05UTAkJMHgzNAor
I2RlZmluZSBCR19CT1QJCQkJKDB4MUZGRiA8PCAwKQorI2RlZmluZSBCR19UT1AJCQkJKDB4MUZG
RiA8PCAxNikKKworI2RlZmluZSBEUElfQkdfQ09MT1IJCTB4MzgKKyNkZWZpbmUgQkdfQgkJCQko
MHhGIDw8IDApCisjZGVmaW5lIEJHX0cJCQkJKDB4RiA8PCA4KQorI2RlZmluZSBCR19SCQkJCSgw
eEYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0ZJRk9fQ1RMCQkweDNDCisjZGVmaW5lIEZJRk9fVkFM
SURfU0VUCQkJKDB4MUYgPDwgMCkKKyNkZWZpbmUgRklGT19SU1RfU0VMCQkJKDB4MSA8PCA4KQor
CisjZGVmaW5lIERQSV9TVEFUVVMJCTB4NDAKKyNkZWZpbmUgVkNPVU5URVIJCQkoMHgxRkZGIDw8
IDApCisjZGVmaW5lIERQSV9CVVNZCQkJQklUKDE2KQorI2RlZmluZSBPVVRFTgkJCQlCSVQoMTcp
CisjZGVmaW5lIEZJRUxECQkJCUJJVCgyMCkKKyNkZWZpbmUgVERMUgkJCQlCSVQoMjEpCisKKyNk
ZWZpbmUgRFBJX1RNT0RFCQkweDQ0CisjZGVmaW5lIERQSV9PRU5fT04JCQlCSVQoMCkKKworI2Rl
ZmluZSBEUElfQ0hFQ0tTVU0JCTB4NDgKKyNkZWZpbmUgRFBJX0NIRUNLU1VNX01BU0sJCSgweEZG
RkZGRiA8PCAwKQorI2RlZmluZSBEUElfQ0hFQ0tTVU1fUkVBRFkJCUJJVCgzMCkKKyNkZWZpbmUg
RFBJX0NIRUNLU1VNX0VOCQkJQklUKDMxKQorCisjZGVmaW5lIERQSV9EVU1NWQkJMHg1MAorI2Rl
ZmluZSBEUElfRFVNTVlfTUFTSwkJCSgweEZGRkZGRkZGIDw8IDApCisKKyNkZWZpbmUgRFBJX1RH
RU5fVldJRFRIX0xFVkVOCTB4NjgKKyNkZWZpbmUgRFBJX1RHRU5fVlBPUkNIX0xFVkVOCTB4NkMK
KyNkZWZpbmUgRFBJX1RHRU5fVldJRFRIX1JPREQJMHg3MAorI2RlZmluZSBEUElfVEdFTl9WUE9S
Q0hfUk9ERAkweDc0CisjZGVmaW5lIERQSV9UR0VOX1ZXSURUSF9SRVZFTgkweDc4CisjZGVmaW5l
IERQSV9UR0VOX1ZQT1JDSF9SRVZFTgkweDdDCisKKyNkZWZpbmUgRFBJX0VTQVZfVlRJTUlOR19M
T0RECTB4ODAKKyNkZWZpbmUgRVNBVl9WT0ZTVF9MT0RECQkJKDB4RkZGIDw8IDApCisjZGVmaW5l
IEVTQVZfVldJRF9MT0RECQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9FU0FWX1ZUSU1J
TkdfTEVWRU4JMHg4NAorI2RlZmluZSBFU0FWX1ZPRlNUX0xFVkVOCQkoMHhGRkYgPDwgMCkKKyNk
ZWZpbmUgRVNBVl9WV0lEX0xFVkVOCQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9FU0FW
X1ZUSU1JTkdfUk9ERAkweDg4CisjZGVmaW5lIEVTQVZfVk9GU1RfUk9ERAkJCSgweEZGRiA8PCAw
KQorI2RlZmluZSBFU0FWX1ZXSURfUk9ERAkJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElf
RVNBVl9WVElNSU5HX1JFVkVOCTB4OEMKKyNkZWZpbmUgRVNBVl9WT0ZTVF9SRVZFTgkJKDB4RkZG
IDw8IDApCisjZGVmaW5lIEVTQVZfVldJRF9SRVZFTgkJCSgweEZGRiA8PCAxNikKKworI2RlZmlu
ZSBEUElfRVNBVl9GVElNSU5HCTB4OTAKKyNkZWZpbmUgRVNBVl9GT0ZTVF9PREQJCQkoMHhGRkYg
PDwgMCkKKyNkZWZpbmUgRVNBVl9GT0ZTVF9FVkVOCQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5l
IERQSV9DTFBGX1NFVFRJTkcJMHg5NAorI2RlZmluZSBDTFBGX1RZUEUJCQkoMHgzIDw8IDApCisj
ZGVmaW5lIFJPVU5EX0VOCQkJQklUKDQpCisKKyNkZWZpbmUgRFBJX1lfTElNSVQJCTB4OTgKKyNk
ZWZpbmUgWV9MSU1JTlRfQk9UCQkJMAorI2RlZmluZSBZX0xJTUlOVF9CT1RfTUFTSwkJKDB4RkZG
IDw8IDApCisjZGVmaW5lIFlfTElNSU5UX1RPUAkJCTE2CisjZGVmaW5lIFlfTElNSU5UX1RPUF9N
QVNLCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0NfTElNSVQJCTB4OUMKKyNkZWZpbmUg
Q19MSU1JVF9CT1QJCQkwCisjZGVmaW5lIENfTElNSVRfQk9UX01BU0sJCSgweEZGRiA8PCAwKQor
I2RlZmluZSBDX0xJTUlUX1RPUAkJCTE2CisjZGVmaW5lIENfTElNSVRfVE9QX01BU0sJCSgweEZG
RiA8PCAxNikKKworI2RlZmluZSBEUElfWVVWNDIyX1NFVFRJTkcJMHhBMAorI2RlZmluZSBVVl9T
V0FQCQkJCUJJVCgwKQorI2RlZmluZSBDUl9ERUxTRUwJCQlCSVQoNCkKKyNkZWZpbmUgQ0JfREVM
U0VMCQkJQklUKDUpCisjZGVmaW5lIFlfREVMU0VMCQkJQklUKDYpCisjZGVmaW5lIERFX0RFTFNF
TAkJCUJJVCg3KQorCisjZGVmaW5lIERQSV9FTUJTWU5DX1NFVFRJTkcJMHhBNAorI2RlZmluZSBF
TUJTWU5DX1JfQ1JfRU4JCQlCSVQoMCkKKyNkZWZpbmUgRU1QU1lOQ19HX1lfRU4JCQlCSVQoMSkK
KyNkZWZpbmUgRU1QU1lOQ19CX0NCX0VOCQkJQklUKDIpCisjZGVmaW5lIEVTQVZfRl9JTlYJCQlC
SVQoNCkKKyNkZWZpbmUgRVNBVl9WX0lOVgkJCUJJVCg1KQorI2RlZmluZSBFU0FWX0hfSU5WCQkJ
QklUKDYpCisjZGVmaW5lIEVTQVZfQ09ERV9NQU4JCQlCSVQoOCkKKyNkZWZpbmUgVlNfT1VUX1NF
TAkJCSgweDcgPDwgMTIpCisKKyNkZWZpbmUgRFBJX0VTQVZfQ09ERV9TRVQwCTB4QTgKKyNkZWZp
bmUgRVNBVl9DT0RFMAkJCSgweEZGRiA8PCAwKQorI2RlZmluZSBFU0FWX0NPREUxCQkJKDB4RkZG
IDw8IDE2KQorCisjZGVmaW5lIERQSV9FU0FWX0NPREVfU0VUMQkweEFDCisjZGVmaW5lIEVTQVZf
Q09ERTIJCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9DT0RFM19NU0IJCQlCSVQoMTYpCisK
KyNkZWZpbmUgRFBJX0hfRlJFX0NPTgkJMHhFMAorI2RlZmluZSBIX0ZSRV8yTgkJCUJJVCgyNSkK
KyNlbmRpZiAvKiBfX01US19EUElfUkVHU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2Rydi5jCmluZGV4IGFiYjhmYmUuLjlhZjY1MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5jCkBAIC01MjUsNiArNTI1LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9y
bV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsKIAkmbXRrX2Rpc3BfcmRtYV9k
cml2ZXIsCiAJJm10a19kc2lfZHJpdmVyLAogCSZtdGtfbWlwaV90eF9kcml2ZXIsCisJJm10a19k
cGlfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmluZGV4IDFmMjJlYzQuLjg1N2QyY2Nm
YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKKysr
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKQEAgLTU0LDUgKzU0LDYg
QEAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKIGV4
dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX3JkbWFfZHJpdmVyOwogZXh0ZXJu
IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2ZXI7CiBleHRlcm4gc3RydWN0IHBs
YXRmb3JtX2RyaXZlciBtdGtfbWlwaV90eF9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3Jt
X2RyaXZlciBtdGtfZHBpX2RyaXZlcjsKIAogI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8KLS0g
CjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk
cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0
cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK