From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v12 04/14] drm/mediatek: Add DPI sub driver
Date: Tue, 1 Mar 2016 16:20:20 +0100
Message-ID: <1456845630-2786-5-git-send-email-p.zabel@pengutronix.de>
References: <1456845630-2786-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: <1456845630-2786-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: linux-mediatek@lists.infradead.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpBZGQgRFBJIGNvbm5lY3Rvci9l
bmNvZGVyIHRvIHN1cHBvcnQgSERNSSBvdXRwdXQgdmlhIHRoZQphdHRhY2hlZCBIRE1JIGJyaWRn
ZS4KClNpZ25lZC1vZmYtYnk6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQt
b2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcGkuYyAgICAgIHwgNzU3ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5oICAgICAgfCAgODUg
KysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGlfcmVncy5oIHwgMjI4ICsrKysr
KysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICB8ICAgMSArCiBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgfCAgIDEgKwogNiBmaWxlcyBj
aGFuZ2VkLCAxMDc0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpX3JlZ3MuaAoKZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9NYWtlZmlsZQppbmRleCBlNzgxZGI1YS4uNWZjZjU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N
YWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8g
XAogCQkgIG10a19kcm1fZ2VtLm8gXAogCQkgIG10a19kcm1fcGxhbmUubyBcCiAJCSAgbXRrX2Rz
aS5vIFwKLQkJICBtdGtfbWlwaV90eC5vCisJCSAgbXRrX21pcGlfdHgubyBcCisJCSAgbXRrX2Rw
aS5vCiAKIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5jIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hZTgxOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcGkuYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRp
YVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1
ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJt
L2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUg
PGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgor
I2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNs
dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1
ZGUgIm10a19kcGkuaCIKKyNpbmNsdWRlICJtdGtfZHBpX3JlZ3MuaCIKKworZW51bSBtdGtfZHBp
X3BvbGFyaXR5IHsKKwlNVEtfRFBJX1BPTEFSSVRZX1JJU0lORywKKwlNVEtfRFBJX1BPTEFSSVRZ
X0ZBTExJTkcsCit9OworCitlbnVtIG10a19kcGlfcG93ZXJfY3RsIHsKKwlEUElfUE9XRVJfU1RB
UlQgPSBCSVQoMCksCisJRFBJX1BPV0VSX0VOQUJMRSA9IEJJVCgxKSwKKwlEUElfUE9XRVJfUkVT
VU1FID0gQklUKDIpLAorfTsKKworc3RydWN0IG10a19kcGlfcG9sYXJpdGllcyB7CisJZW51bSBt
dGtfZHBpX3BvbGFyaXR5IGRlX3BvbDsKKwllbnVtIG10a19kcGlfcG9sYXJpdHkgY2tfcG9sOwor
CWVudW0gbXRrX2RwaV9wb2xhcml0eSBoc3luY19wb2w7CisJZW51bSBtdGtfZHBpX3BvbGFyaXR5
IHZzeW5jX3BvbDsKK307CisKK3N0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0geworCXUzMiBzeW5j
X3dpZHRoOworCXUzMiBmcm9udF9wb3JjaDsKKwl1MzIgYmFja19wb3JjaDsKKwlib29sIHNoaWZ0
X2hhbGZfbGluZTsKK307CisKK3N0cnVjdCBtdGtfZHBpX3ljX2xpbWl0IHsKKwl1MTYgeV90b3A7
CisJdTE2IHlfYm90dG9tOworCXUxNiBjX3RvcDsKKwl1MTYgY19ib3R0b207Cit9OworCitzdGF0
aWMgdm9pZCBtdGtfZHBpX21hc2soc3RydWN0IG10a19kcGkgKmRwaSwgdTMyIG9mZnNldCwgdTMy
IHZhbCwgdTMyIG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRsKGRwaS0+cmVncyArIG9mZnNldCkg
JiB+bWFzazsKKworCXRtcCB8PSAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgZHBpLT5yZWdz
ICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9zd19yZXNldChzdHJ1Y3QgbXRr
X2RwaSAqZHBpLCBib29sIHJlc2V0KQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9SRVQsIHJl
c2V0ID8gUlNUIDogMCwgUlNUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9lbmFibGUoc3Ry
dWN0IG10a19kcGkgKmRwaSkKK3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfRU4sIEVOLCBFTik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfZGlzYWJsZShzdHJ1Y3QgbXRrX2RwaSAqZHBpKQor
eworCW10a19kcGlfbWFzayhkcGksIERQSV9FTiwgMCwgRU4pOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHBpX2NvbmZpZ19oc3luYyhzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSBzdHJ1Y3QgbXRr
X2RwaV9zeW5jX3BhcmFtICpzeW5jKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hX
SURUSCwKKwkJICAgICBzeW5jLT5zeW5jX3dpZHRoIDw8IEhQVywgSFBXX01BU0spOworCW10a19k
cGlfbWFzayhkcGksIERQSV9UR0VOX0hQT1JDSCwKKwkJICAgICBzeW5jLT5iYWNrX3BvcmNoIDw8
IEhCUCwgSEJQX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9UR0VOX0hQT1JDSCwgc3lu
Yy0+ZnJvbnRfcG9yY2ggPDwgSEZQLAorCQkgICAgIEhGUF9NQVNLKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RwaV9jb25maWdfdnN5bmMoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgc3RydWN0
IG10a19kcGlfc3luY19wYXJhbSAqc3luYywKKwkJCQkgdTMyIHdpZHRoX2FkZHIsIHUzMiBwb3Jj
aF9hZGRyKQoreworCW10a19kcGlfbWFzayhkcGksIHdpZHRoX2FkZHIsCisJCSAgICAgc3luYy0+
c3luY193aWR0aCA8PCBWU1lOQ19XSURUSF9TSElGVCwKKwkJICAgICBWU1lOQ19XSURUSF9NQVNL
KTsKKwltdGtfZHBpX21hc2soZHBpLCB3aWR0aF9hZGRyLAorCQkgICAgIHN5bmMtPnNoaWZ0X2hh
bGZfbGluZSA8PCBWU1lOQ19IQUxGX0xJTkVfU0hJRlQsCisJCSAgICAgVlNZTkNfSEFMRl9MSU5F
X01BU0spOworCW10a19kcGlfbWFzayhkcGksIHBvcmNoX2FkZHIsCisJCSAgICAgc3luYy0+YmFj
a19wb3JjaCA8PCBWU1lOQ19CQUNLX1BPUkNIX1NISUZULAorCQkgICAgIFZTWU5DX0JBQ0tfUE9S
Q0hfTUFTSyk7CisJbXRrX2RwaV9tYXNrKGRwaSwgcG9yY2hfYWRkciwKKwkJICAgICBzeW5jLT5m
cm9udF9wb3JjaCA8PCBWU1lOQ19GUk9OVF9QT1JDSF9TSElGVCwKKwkJICAgICBWU1lOQ19GUk9O
VF9QT1JDSF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5bmNfbG9k
ZChzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgICAgIHN0cnVjdCBtdGtfZHBpX3N5bmNfcGFy
YW0gKnN5bmMpCit7CisJbXRrX2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5jLCBEUElfVEdFTl9W
V0lEVEgsIERQSV9UR0VOX1ZQT1JDSCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmln
X3ZzeW5jX2xldmVuKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJICAgICAgIHN0cnVjdCBtdGtf
ZHBpX3N5bmNfcGFyYW0gKnN5bmMpCit7CisJbXRrX2RwaV9jb25maWdfdnN5bmMoZHBpLCBzeW5j
LCBEUElfVEdFTl9WV0lEVEhfTEVWRU4sCisJCQkgICAgIERQSV9UR0VOX1ZQT1JDSF9MRVZFTik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX3ZzeW5jX3JvZGQoc3RydWN0IG10a19k
cGkgKmRwaSwKKwkJCQkgICAgICBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtICpzeW5jKQorewor
CW10a19kcGlfY29uZmlnX3ZzeW5jKGRwaSwgc3luYywgRFBJX1RHRU5fVldJRFRIX1JPREQsCisJ
CQkgICAgIERQSV9UR0VOX1ZQT1JDSF9ST0REKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9j
b25maWdfdnN5bmNfcmV2ZW4oc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICAgICAgc3RydWN0
IG10a19kcGlfc3luY19wYXJhbSAqc3luYykKK3sKKwltdGtfZHBpX2NvbmZpZ192c3luYyhkcGks
IHN5bmMsIERQSV9UR0VOX1ZXSURUSF9SRVZFTiwKKwkJCSAgICAgRFBJX1RHRU5fVlBPUkNIX1JF
VkVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfcG9sKHN0cnVjdCBtdGtfZHBp
ICpkcGksCisJCQkgICAgICAgc3RydWN0IG10a19kcGlfcG9sYXJpdGllcyAqZHBpX3BvbCkKK3sK
Kwl1bnNpZ25lZCBpbnQgcG9sOworCisJcG9sID0gKGRwaV9wb2wtPmNrX3BvbCA9PSBNVEtfRFBJ
X1BPTEFSSVRZX1JJU0lORyA/IDAgOiBDS19QT0wpIHwKKwkgICAgICAoZHBpX3BvbC0+ZGVfcG9s
ID09IE1US19EUElfUE9MQVJJVFlfUklTSU5HID8gMCA6IERFX1BPTCkgfAorCSAgICAgIChkcGlf
cG9sLT5oc3luY19wb2wgPT0gTVRLX0RQSV9QT0xBUklUWV9SSVNJTkcgPyAwIDogSFNZTkNfUE9M
KSB8CisJICAgICAgKGRwaV9wb2wtPnZzeW5jX3BvbCA9PSBNVEtfRFBJX1BPTEFSSVRZX1JJU0lO
RyA/IDAgOiBWU1lOQ19QT0wpOworCW10a19kcGlfbWFzayhkcGksIERQSV9PVVRQVVRfU0VUVElO
RywgcG9sLAorCQkgICAgIENLX1BPTCB8IERFX1BPTCB8IEhTWU5DX1BPTCB8IFZTWU5DX1BPTCk7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnXzNkKHN0cnVjdCBtdGtfZHBpICpkcGks
IGJvb2wgZW5fM2QpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5fM2QgPyBUREZQ
X0VOIDogMCwgVERGUF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2ludGVy
ZmFjZShzdHJ1Y3QgbXRrX2RwaSAqZHBpLCBib29sIGludGVyKQoreworCW10a19kcGlfbWFzayhk
cGksIERQSV9DT04sIGludGVyID8gSU5UTF9FTiA6IDAsIElOVExfRU4pOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHBpX2NvbmZpZ19mYl9zaXplKHN0cnVjdCBtdGtfZHBpICpkcGksIHUzMiB3aWR0
aCwgdTMyIGhlaWdodCkKK3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfU0laRSwgd2lkdGggPDwg
SFNJWkUsIEhTSVpFX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9TSVpFLCBoZWlnaHQg
PDwgVlNJWkUsIFZTSVpFX01BU0spOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19j
aGFubmVsX2xpbWl0KHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCSBzdHJ1Y3QgbXRrX2RwaV95
Y19saW1pdCAqbGltaXQpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX1lfTElNSVQsIGxpbWl0
LT55X2JvdHRvbSA8PCBZX0xJTUlOVF9CT1QsCisJCSAgICAgWV9MSU1JTlRfQk9UX01BU0spOwor
CW10a19kcGlfbWFzayhkcGksIERQSV9ZX0xJTUlULCBsaW1pdC0+eV90b3AgPDwgWV9MSU1JTlRf
VE9QLAorCQkgICAgIFlfTElNSU5UX1RPUF9NQVNLKTsKKwltdGtfZHBpX21hc2soZHBpLCBEUElf
Q19MSU1JVCwgbGltaXQtPmNfYm90dG9tIDw8IENfTElNSVRfQk9ULAorCQkgICAgIENfTElNSVRf
Qk9UX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9DX0xJTUlULCBsaW1pdC0+Y190b3Ag
PDwgQ19MSU1JVF9UT1AsCisJCSAgICAgQ19MSU1JVF9UT1BfTUFTSyk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcGlfY29uZmlnX2JpdF9udW0oc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkgICBl
bnVtIG10a19kcGlfb3V0X2JpdF9udW0gbnVtKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG51
bSkgeworCWNhc2UgTVRLX0RQSV9PVVRfQklUX05VTV84QklUUzoKKwkJdmFsID0gT1VUX0JJVF84
OworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTBCSVRTOgorCQl2YWwgPSBP
VVRfQklUXzEwOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1fMTJCSVRTOgor
CQl2YWwgPSBPVVRfQklUXzEyOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX0JJVF9OVU1f
MTZCSVRTOgorCQl2YWwgPSBPVVRfQklUXzE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwg
PSBPVVRfQklUXzg7CisJCWJyZWFrOworCX0KKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVU
X1NFVFRJTkcsIHZhbCA8PCBPVVRfQklULAorCQkgICAgIE9VVF9CSVRfTUFTSyk7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX3ljX21hcChzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJ
CSAgZW51bSBtdGtfZHBpX291dF95Y19tYXAgbWFwKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2gg
KG1hcCkgeworCWNhc2UgTVRLX0RQSV9PVVRfWUNfTUFQX1JHQjoKKwkJdmFsID0gWUNfTUFQX1JH
QjsKKwkJYnJlYWs7CisJY2FzZSBNVEtfRFBJX09VVF9ZQ19NQVBfQ1lDWToKKwkJdmFsID0gWUNf
TUFQX0NZQ1k7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfWUNfTUFQX1lDWUM6CisJCXZh
bCA9IFlDX01BUF9ZQ1lDOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9DWToK
KwkJdmFsID0gWUNfTUFQX0NZOworCQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9Z
QzoKKwkJdmFsID0gWUNfTUFQX1lDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBZQ19N
QVBfUkdCOworCQlicmVhazsKKwl9CisKKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NF
VFRJTkcsIHZhbCA8PCBZQ19NQVAsIFlDX01BUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RwaV9jb25maWdfY2hhbm5lbF9zd2FwKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCWVudW0g
bXRrX2RwaV9vdXRfY2hhbm5lbF9zd2FwIHN3YXApCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAo
c3dhcCkgeworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JHQjoKKwkJdmFsID0gU1dB
UF9SR0I7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0dCUjoKKwkJ
dmFsID0gU1dBUF9HQlI7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQ
X0JSRzoKKwkJdmFsID0gU1dBUF9CUkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hB
Tk5FTF9TV0FQX1JCRzoKKwkJdmFsID0gU1dBUF9SQkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQ
SV9PVVRfQ0hBTk5FTF9TV0FQX0dSQjoKKwkJdmFsID0gU1dBUF9HUkI7CisJCWJyZWFrOworCWNh
c2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JHUjoKKwkJdmFsID0gU1dBUF9CR1I7CisJCWJy
ZWFrOworCWRlZmF1bHQ6CisJCXZhbCA9IFNXQVBfUkdCOworCQlicmVhazsKKwl9CisKKwltdGtf
ZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBDSF9TV0FQLCBDSF9TV0FQ
X01BU0spOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKHN0
cnVjdCBtdGtfZHBpICpkcGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQ
SV9DT04sIGVuYWJsZSA/IFlVVjQyMl9FTiA6IDAsIFlVVjQyMl9FTik7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcGlfY29uZmlnX2NzY19lbmFibGUoc3RydWN0IG10a19kcGkgKmRwaSwgYm9vbCBl
bmFibGUpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgZW5hYmxlID8gQ1NDX0VOQUJM
RSA6IDAsIENTQ19FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19zd2Fw
X2lucHV0KHN0cnVjdCBtdGtfZHBpICpkcGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFz
ayhkcGksIERQSV9DT04sIGVuYWJsZSA/IElOX1JCX1NXQVAgOiAwLCBJTl9SQl9TV0FQKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfMm5faF9mcmUoc3RydWN0IG10a19kcGkgKmRw
aSkKK3sKKwltdGtfZHBpX21hc2soZHBpLCBEUElfSF9GUkVfQ09OLCBIX0ZSRV8yTiwgSF9GUkVf
Mk4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoc3RydWN0
IG10a19kcGkgKmRwaSwKKwkJCQkJZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3JtYXQgZm9ybWF0
KQoreworCWlmICgoZm9ybWF0ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQ0NCkgfHwK
KwkgICAgKGZvcm1hdCA9PSBNVEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDRfRlVMTCkpIHsK
KwkJbXRrX2RwaV9jb25maWdfeXV2NDIyX2VuYWJsZShkcGksIGZhbHNlKTsKKwkJbXRrX2RwaV9j
b25maWdfY3NjX2VuYWJsZShkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0
KGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJ
X09VVF9DSEFOTkVMX1NXQVBfQkdSKTsKKwl9IGVsc2UgaWYgKChmb3JtYXQgPT0gTVRLX0RQSV9D
T0xPUl9GT1JNQVRfWUNCQ1JfNDIyKSB8fAorCQkgICAoZm9ybWF0ID09IE1US19EUElfQ09MT1Jf
Rk9STUFUX1lDQkNSXzQyMl9GVUxMKSkgeworCQltdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxl
KGRwaSwgdHJ1ZSk7CisJCW10a19kcGlfY29uZmlnX2NzY19lbmFibGUoZHBpLCB0cnVlKTsKKwkJ
bXRrX2RwaV9jb25maWdfc3dhcF9pbnB1dChkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19j
aGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCKTsKKwl9IGVsc2Ug
eworCQltdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBp
X2NvbmZpZ19jc2NfZW5hYmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lu
cHV0KGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtf
RFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlf
cG93ZXJfb2ZmKHN0cnVjdCBtdGtfZHBpICpkcGksIGVudW0gbXRrX2RwaV9wb3dlcl9jdGwgcGN0
bCkKK3sKKwlkcGktPnBvd2VyX2N0bCAmPSB+cGN0bDsKKworCWlmICgoZHBpLT5wb3dlcl9jdGwg
JiBEUElfUE9XRVJfU1RBUlQpIHx8CisJICAgICgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9XRVJf
RU5BQkxFKSAmJgorCSAgICAgKGRwaS0+cG93ZXJfY3RsICYgRFBJX1BPV0VSX1JFU1VNRSkpKQor
CQlyZXR1cm47CisKKwlpZiAoIWRwaS0+cG93ZXJfc3RhKQorCQlyZXR1cm47CisKKwltdGtfZHBp
X2Rpc2FibGUoZHBpKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHBpLT5waXhlbF9jbGspOwor
CWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9jbGspOworCWRwaS0+cG93ZXJfc3Rh
ID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9wb3dlcl9vbihzdHJ1Y3QgbXRrX2Rw
aSAqZHBpLCBlbnVtIG10a19kcGlfcG93ZXJfY3RsIHBjdGwpCit7CisJaW50IHJldDsKKworCWRw
aS0+cG93ZXJfY3RsIHw9IHBjdGw7CisKKwlpZiAoIShkcGktPnBvd2VyX2N0bCAmIERQSV9QT1dF
Ul9TVEFSVCkgJiYKKwkgICAgISgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9XRVJfRU5BQkxFKSAm
JgorCSAgICAgICgoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9XRVJfUkVTVU1FKSkpKQorCQlyZXR1
cm4gMDsKKworCWlmIChkcGktPnBvd2VyX3N0YSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjbGtf
cHJlcGFyZV9lbmFibGUoZHBpLT5lbmdpbmVfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo
ZHBpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9jazogJWRcbiIsIHJldCk7CisJ
CWdvdG8gZXJyX2VuZzsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHBpLT5waXhl
bF9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcGktPmRldiwgIkZhaWxlZCB0byBlbmFi
bGUgcGl4ZWwgY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waXhlbDsKKwl9CisKKwlt
dGtfZHBpX2VuYWJsZShkcGkpOworCWRwaS0+cG93ZXJfc3RhID0gdHJ1ZTsKKwlyZXR1cm4gMDsK
KworZXJyX3BpeGVsOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9jbGspOwor
ZXJyX2VuZzoKKwlkcGktPnBvd2VyX2N0bCAmPSB+cGN0bDsKKwlyZXR1cm4gcmV0OworfQorCitp
bnQgbXRrX2RwaV9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfZHBpICpkcGksIHN0cnVjdCBk
cm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfZHBpX3ljX2xpbWl0IGxpbWl0
OworCXN0cnVjdCBtdGtfZHBpX3BvbGFyaXRpZXMgZHBpX3BvbDsKKwlzdHJ1Y3QgbXRrX2RwaV9z
eW5jX3BhcmFtIGhzeW5jOworCXN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gdnN5bmNfbG9kZCA9
IHsgMCB9OworCXN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gdnN5bmNfbGV2ZW4gPSB7IDAgfTsK
KwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtIHZzeW5jX3JvZGQgPSB7IDAgfTsKKwlzdHJ1Y3Qg
bXRrX2RwaV9zeW5jX3BhcmFtIHZzeW5jX3JldmVuID0geyAwIH07CisJdW5zaWduZWQgbG9uZyBw
aXhfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIHBsbF9yYXRlOworCXVuc2lnbmVkIGludCBmYWN0b3I7
CisKKwlpZiAoIWRwaSkgeworCQlkZXZfZXJyKGRwaS0+ZGV2LCAiaW52YWxpZCBhcmd1bWVudFxu
Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBpeF9yYXRlID0gMTAwMFVMICogbW9kZS0+
Y2xvY2s7CisJaWYgKG1vZGUtPmNsb2NrIDw9IDc0MDAwKQorCQlmYWN0b3IgPSA4ICogMzsKKwll
bHNlCisJCWZhY3RvciA9IDQgKiAzOworCXBsbF9yYXRlID0gcGl4X3JhdGUgKiBmYWN0b3I7CisK
KwlkZXZfZGJnKGRwaS0+ZGV2LCAiV2FudCBQTEwgJWx1IEh6LCBwaXhlbCBjbG9jayAlbHUgSHpc
biIsCisJCXBsbF9yYXRlLCBwaXhfcmF0ZSk7CisKKwljbGtfc2V0X3JhdGUoZHBpLT50dmRfY2xr
LCBwbGxfcmF0ZSk7CisJcGxsX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHBpLT50dmRfY2xrKTsKKwor
CXBpeF9yYXRlID0gcGxsX3JhdGUgLyBmYWN0b3I7CisJY2xrX3NldF9yYXRlKGRwaS0+cGl4ZWxf
Y2xrLCBwaXhfcmF0ZSk7CisJcGl4X3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHBpLT5waXhlbF9jbGsp
OworCisJZGV2X2RiZyhkcGktPmRldiwgIkdvdCAgUExMICVsdSBIeiwgcGl4ZWwgY2xvY2sgJWx1
IEh6XG4iLAorCQlwbGxfcmF0ZSwgcGl4X3JhdGUpOworCisJbGltaXQuY19ib3R0b20gPSAweDAw
MTA7CisJbGltaXQuY190b3AgPSAweDBGRTA7CisJbGltaXQueV9ib3R0b20gPSAweDAwMTA7CisJ
bGltaXQueV90b3AgPSAweDBGRTA7CisKKwlkcGlfcG9sLmNrX3BvbCA9IE1US19EUElfUE9MQVJJ
VFlfRkFMTElORzsKKwlkcGlfcG9sLmRlX3BvbCA9IE1US19EUElfUE9MQVJJVFlfUklTSU5HOwor
CWRwaV9wb2wuaHN5bmNfcG9sID0gbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQyA/
CisJCQkgICAgTVRLX0RQSV9QT0xBUklUWV9GQUxMSU5HIDogTVRLX0RQSV9QT0xBUklUWV9SSVNJ
Tkc7CisJZHBpX3BvbC52c3luY19wb2wgPSBtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZT
WU5DID8KKwkJCSAgICBNVEtfRFBJX1BPTEFSSVRZX0ZBTExJTkcgOiBNVEtfRFBJX1BPTEFSSVRZ
X1JJU0lORzsKKworCWhzeW5jLnN5bmNfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5o
c3luY19zdGFydDsKKwloc3luYy5iYWNrX3BvcmNoID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5
bmNfZW5kOworCWhzeW5jLmZyb250X3BvcmNoID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5o
ZGlzcGxheTsKKwloc3luYy5zaGlmdF9oYWxmX2xpbmUgPSBmYWxzZTsKKworCXZzeW5jX2xvZGQu
c3luY193aWR0aCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZzeW5j
X2xvZGQuYmFja19wb3JjaCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKwl2c3lu
Y19sb2RkLmZyb250X3BvcmNoID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsK
Kwl2c3luY19sb2RkLnNoaWZ0X2hhbGZfbGluZSA9IGZhbHNlOworCisJaWYgKG1vZGUtPmZsYWdz
ICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+ZmxhZ3MgJiBEUk1fTU9E
RV9GTEFHXzNEX01BU0spIHsKKwkJdnN5bmNfbGV2ZW4gPSB2c3luY19sb2RkOworCQl2c3luY19y
b2RkID0gdnN5bmNfbG9kZDsKKwkJdnN5bmNfcmV2ZW4gPSB2c3luY19sb2RkOworCQl2c3luY19s
ZXZlbi5zaGlmdF9oYWxmX2xpbmUgPSB0cnVlOworCQl2c3luY19yZXZlbi5zaGlmdF9oYWxmX2xp
bmUgPSB0cnVlOworCX0gZWxzZSBpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVS
TEFDRSAmJgorCQkgICAhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR18zRF9NQVNLKSkgewor
CQl2c3luY19sZXZlbiA9IHZzeW5jX2xvZGQ7CisJCXZzeW5jX2xldmVuLnNoaWZ0X2hhbGZfbGlu
ZSA9IHRydWU7CisJfSBlbHNlIGlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRF
UkxBQ0UpICYmCisJCSAgIG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR18zRF9NQVNLKSB7CisJ
CXZzeW5jX3JvZGQgPSB2c3luY19sb2RkOworCX0KKwltdGtfZHBpX3N3X3Jlc2V0KGRwaSwgdHJ1
ZSk7CisJbXRrX2RwaV9jb25maWdfcG9sKGRwaSwgJmRwaV9wb2wpOworCisJbXRrX2RwaV9jb25m
aWdfaHN5bmMoZHBpLCAmaHN5bmMpOworCW10a19kcGlfY29uZmlnX3ZzeW5jX2xvZGQoZHBpLCAm
dnN5bmNfbG9kZCk7CisJbXRrX2RwaV9jb25maWdfdnN5bmNfcm9kZChkcGksICZ2c3luY19yb2Rk
KTsKKwltdGtfZHBpX2NvbmZpZ192c3luY19sZXZlbihkcGksICZ2c3luY19sZXZlbik7CisJbXRr
X2RwaV9jb25maWdfdnN5bmNfcmV2ZW4oZHBpLCAmdnN5bmNfcmV2ZW4pOworCisJbXRrX2RwaV9j
b25maWdfM2QoZHBpLCAhIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykpOwor
CW10a19kcGlfY29uZmlnX2ludGVyZmFjZShkcGksICEhKG1vZGUtPmZsYWdzICYKKwkJCQkJIERS
TV9NT0RFX0ZMQUdfSU5URVJMQUNFKSk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB
R19JTlRFUkxBQ0UpCisJCW10a19kcGlfY29uZmlnX2ZiX3NpemUoZHBpLCBtb2RlLT5oZGlzcGxh
eSwgbW9kZS0+dmRpc3BsYXkgLyAyKTsKKwllbHNlCisJCW10a19kcGlfY29uZmlnX2ZiX3NpemUo
ZHBpLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCisJbXRrX2RwaV9jb25maWdf
Y2hhbm5lbF9saW1pdChkcGksICZsaW1pdCk7CisJbXRrX2RwaV9jb25maWdfYml0X251bShkcGks
IGRwaS0+Yml0X251bSk7CisJbXRrX2RwaV9jb25maWdfY2hhbm5lbF9zd2FwKGRwaSwgZHBpLT5j
aGFubmVsX3N3YXApOworCW10a19kcGlfY29uZmlnX3ljX21hcChkcGksIGRwaS0+eWNfbWFwKTsK
KwltdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoZHBpLCBkcGktPmNvbG9yX2Zvcm1hdCk7CisJ
bXRrX2RwaV9jb25maWdfMm5faF9mcmUoZHBpKTsKKwltdGtfZHBpX3N3X3Jlc2V0KGRwaSwgZmFs
c2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfZW5jb2Rlcl9kZXN0
cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVw
KGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIG10
a19kcGlfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IG10a19kcGlfZW5jb2Rlcl9kZXN0
cm95LAorfTsKKworc3RhdGljIGJvb2wgbXRrX2RwaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0
IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs
YXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz
dGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfZW5j
b2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICBzdHJ1
Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9t
b2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBtdGtfZHBpX2Zy
b21fZW5jb2RlcihlbmNvZGVyKTsKKworCWRybV9tb2RlX2NvcHkoJmRwaS0+bW9kZSwgYWRqdXN0
ZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfZW5jb2Rlcl9kaXNhYmxlKHN0cnVj
dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gbXRrX2Rw
aV9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisKKwltdGtfZHBpX3Bvd2VyX29mZihkcGksIERQSV9Q
T1dFUl9FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2VuY29kZXJfZW5hYmxlKHN0
cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gbXRr
X2RwaV9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisKKwltdGtfZHBpX3Bvd2VyX29uKGRwaSwgRFBJ
X1BPV0VSX0VOQUJMRSk7CisJbXRrX2RwaV9zZXRfZGlzcGxheV9tb2RlKGRwaSwgJmRwaS0+bW9k
ZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNv
ZGVyICplbmNvZGVyLAorCQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJ
CQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgbXRrX2Rw
aV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IG10a19kcGlfZW5jb2Rl
cl9tb2RlX2ZpeHVwLAorCS5tb2RlX3NldCA9IG10a19kcGlfZW5jb2Rlcl9tb2RlX3NldCwKKwku
ZGlzYWJsZSA9IG10a19kcGlfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUgPSBtdGtfZHBpX2Vu
Y29kZXJfZW5hYmxlLAorCS5hdG9taWNfY2hlY2sgPSBtdGtfZHBpX2F0b21pY19jaGVjaywKK307
CisKK3N0YXRpYyB2b2lkIG10a19kcGlfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkK
K3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtf
ZHBpLCBkZHBfY29tcCk7CisKKwltdGtfZHBpX3Bvd2VyX29uKGRwaSwgRFBJX1BPV0VSX1NUQVJU
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXApCit7CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3Qg
bXRrX2RwaSwgZGRwX2NvbXApOworCisJbXRrX2RwaV9wb3dlcl9vZmYoZHBpLCBEUElfUE9XRVJf
U1RBUlQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtf
ZHBpX2Z1bmNzID0geworCS5zdGFydCA9IG10a19kcGlfc3RhcnQsCisJLnN0b3AgPSBtdGtfZHBp
X3N0b3AsCit9OworCitzdGF0aWMgaW50IG10a19kcGlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYs
IHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAq
ZHBpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYg
PSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2Rl
diwgJmRwaS0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFp
bGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1
bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9p
bml0KGRybV9kZXYsICZkcGktPmVuY29kZXIsICZtdGtfZHBpX2VuY29kZXJfZnVuY3MsCisJCQkg
ICAgICAgRFJNX01PREVfRU5DT0RFUl9UTURTLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGVjb2RlcjogJWRcbiIsIHJldCk7CisJCWdv
dG8gZXJyX3VucmVnaXN0ZXI7CisJfQorCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRwaS0+ZW5j
b2RlciwgJm10a19kcGlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJLyogQ3VycmVudGx5IERQ
STAgaXMgZml4ZWQgdG8gYmUgZHJpdmVuIGJ5IE9WTDEgKi8KKwlkcGktPmVuY29kZXIucG9zc2li
bGVfY3J0Y3MgPSBCSVQoMSk7CisKKwlkcGktPmVuY29kZXIuYnJpZGdlLT5lbmNvZGVyID0gJmRw
aS0+ZW5jb2RlcjsKKwlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChkcGktPmVuY29kZXIuZGV2LCBk
cGktPmVuY29kZXIuYnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk
IHRvIGF0dGFjaCBicmlkZ2U6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jbGVhbnVwOworCX0K
KworCWRwaS0+Yml0X251bSA9IE1US19EUElfT1VUX0JJVF9OVU1fOEJJVFM7CisJZHBpLT5jaGFu
bmVsX3N3YXAgPSBNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCOworCWRwaS0+eWNfbWFwID0g
TVRLX0RQSV9PVVRfWUNfTUFQX1JHQjsKKwlkcGktPmNvbG9yX2Zvcm1hdCA9IE1US19EUElfQ09M
T1JfRk9STUFUX1JHQjsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cDoKKwlkcm1fZW5jb2Rl
cl9jbGVhbnVwKCZkcGktPmVuY29kZXIpOworZXJyX3VucmVnaXN0ZXI6CisJbXRrX2RkcF9jb21w
X3VucmVnaXN0ZXIoZHJtX2RldiwgJmRwaS0+ZGRwX2NvbXApOworCXJldHVybiByZXQ7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kcGlfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl
dmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBp
ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBk
YXRhOworCisJZHJtX2VuY29kZXJfY2xlYW51cCgmZHBpLT5lbmNvZGVyKTsKKwltdGtfZGRwX2Nv
bXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmZHBpLT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZHBpX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQg
PSBtdGtfZHBpX2JpbmQsCisJLnVuYmluZCA9IG10a19kcGlfdW5iaW5kLAorfTsKKworc3RhdGlj
IGludCBtdGtfZHBpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry
dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpOworCXN0
cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXAsICpicmlkZ2Vfbm9k
ZSA9IE5VTEw7CisJaW50IGNvbXBfaWQ7CisJaW50IHJldDsKKworCWRwaSA9IGRldm1fa3phbGxv
YyhkZXYsIHNpemVvZigqZHBpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcGkpCisJCXJldHVybiAt
RU5PTUVNOworCisJZHBpLT5kZXYgPSBkZXY7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy
Y2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRwaS0+cmVncyA9IGRldm1faW9yZW1hcF9y
ZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihkcGktPnJlZ3MpKSB7CisJCXJldCA9IFBU
Ul9FUlIoZHBpLT5yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtZW0g
cmVzb3VyY2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRwaS0+ZW5naW5l
X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJlbmdpbmUiKTsKKwlpZiAoSVNfRVJSKGRwaS0+ZW5n
aW5lX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkcGktPmVuZ2luZV9jbGspOworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBnZXQgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwlkcGktPnBpeGVsX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbCIp
OworCWlmIChJU19FUlIoZHBpLT5waXhlbF9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHBpLT5w
aXhlbF9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcGl4ZWwgY2xvY2s6ICVk
XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRwaS0+dHZkX2NsayA9IGRldm1fY2xr
X2dldChkZXYsICJwbGwiKTsKKwlpZiAoSVNfRVJSKGRwaS0+dHZkX2NsaykpIHsKKwkJcmV0ID0g
UFRSX0VSUihkcGktPnR2ZF9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgdHZk
cGxsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcGktPmlycSA9
IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRwaS0+aXJxIDw9IDApIHsKKwkJZGV2
X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGlycTogJWRcbiIsIGRwaS0+aXJxKTsKKwkJcmV0dXJu
IC1FSU5WQUw7CisJfQorCisJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9m
X25vZGUsIE5VTEwpOworCWlmIChlcCkgeworCQlicmlkZ2Vfbm9kZSA9IG9mX2dyYXBoX2dldF9y
ZW1vdGVfcG9ydF9wYXJlbnQoZXApOworCQlvZl9ub2RlX3B1dChlcCk7CisJfQorCWlmICghYnJp
ZGdlX25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBicmlkZ2Ugbm9kZTog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiRm91bmQg
YnJpZGdlIG5vZGU6ICVzXG4iLCBicmlkZ2Vfbm9kZS0+ZnVsbF9uYW1lKTsKKworCWRwaS0+ZW5j
b2Rlci5icmlkZ2UgPSBvZl9kcm1fZmluZF9icmlkZ2UoYnJpZGdlX25vZGUpOworCW9mX25vZGVf
cHV0KGJyaWRnZV9ub2RlKTsKKwlpZiAoIWRwaS0+ZW5jb2Rlci5icmlkZ2UpCisJCXJldHVybiAt
RVBST0JFX0RFRkVSOworCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9u
b2RlLCBNVEtfRFBJKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJcmV0dXJuIGNvbXBf
aWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYtPm9mX25vZGUsICZk
cGktPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZHBpX2Z1bmNzKTsKKwlpZiAocmV0KSB7
CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxuIiwg
cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBk
cGkpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZHBpX2NvbXBvbmVudF9vcHMp
OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHBpLT5wb3dlcl9jdGwgfD0gRFBJ
X1BPV0VSX1JFU1VNRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kcGlfcmVt
b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRl
di0+ZGV2LCAmbXRrX2RwaV9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCisjaWZk
ZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19kcGlfc3VzcGVuZChzdHJ1Y3QgZGV2
aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp
OworCisJaWYgKElTX0VSUihkcGkpKSB7CisJCWRldl9pbmZvKGRldiwgImRwaSBzdXNwZW5kIGZh
aWxlZCFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcGkpOworCX0KKworCW10a19kcGlfcG93ZXJf
b2ZmKGRwaSwgRFBJX1BPV0VSX1JFU1VNRSk7CisKKwlkZXZfaW5mbyhkZXYsICJkcGkgc3VzcGVu
ZCBzdWNjZXNzIVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHBpX3Jl
c3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcGkgKmRwaSA9IGRldl9n
ZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlpZiAoSVNfRVJSKGRwaSkpIHsKKwkJZGV2
X2VycihkZXYsICJkcGkgcmVzdW1lIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcGkp
OworCX0KKworCXJldCA9IG10a19kcGlfcG93ZXJfb24oZHBpLCBEUElfUE9XRVJfUkVTVU1FKTsK
KwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZHBpIHJlc3VtZSBmYWlsZWQhXG4iKTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJkcGkgcmVzdW1lIHN1Y2Nlc3MhXG4i
KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyht
dGtfZHBpX3BtX29wcywgbXRrX2RwaV9zdXNwZW5kLCBtdGtfZHBpX3Jlc3VtZSk7CisKK3N0YXRp
YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kcGlfb2ZfaWRzW10gPSB7CisJeyAuY29t
cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgfSwKKwl7fQorfTsKKworc3RydWN0IHBs
YXRmb3JtX2RyaXZlciBtdGtfZHBpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHBpX3Byb2Jl
LAorCS5yZW1vdmUgPSBtdGtfZHBpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJt
ZWRpYXRlay1kcGkiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHBpX29mX2lkcywKKwkJLnBt
ID0gJm10a19kcGlfcG1fb3BzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcGkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhNDExNAotLS0gL2Rldi9udWxs
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmgKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpp
ZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g
MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0RQSV9ICisjZGVmaW5lIF9N
VEtfRFBJX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j
cnRjLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKK3N0cnVjdCBkZXZpY2U7
CitzdHJ1Y3QgY2xrOworCitlbnVtIG10a19kcGlfb3V0X2JpdF9udW0geworCU1US19EUElfT1VU
X0JJVF9OVU1fOEJJVFMsCisJTVRLX0RQSV9PVVRfQklUX05VTV8xMEJJVFMsCisJTVRLX0RQSV9P
VVRfQklUX05VTV8xMkJJVFMsCisJTVRLX0RQSV9PVVRfQklUX05VTV8xNkJJVFMKK307CisKK2Vu
dW0gbXRrX2RwaV9vdXRfeWNfbWFwIHsKKwlNVEtfRFBJX09VVF9ZQ19NQVBfUkdCLAorCU1US19E
UElfT1VUX1lDX01BUF9DWUNZLAorCU1US19EUElfT1VUX1lDX01BUF9ZQ1lDLAorCU1US19EUElf
T1VUX1lDX01BUF9DWSwKKwlNVEtfRFBJX09VVF9ZQ19NQVBfWUMKK307CisKK2VudW0gbXRrX2Rw
aV9vdXRfY2hhbm5lbF9zd2FwIHsKKwlNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCLAorCU1U
S19EUElfT1VUX0NIQU5ORUxfU1dBUF9HQlIsCisJTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JS
RywKKwlNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfUkJHLAorCU1US19EUElfT1VUX0NIQU5ORUxf
U1dBUF9HUkIsCisJTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JHUgorfTsKKworZW51bSBtdGtf
ZHBpX291dF9jb2xvcl9mb3JtYXQgeworCU1US19EUElfQ09MT1JfRk9STUFUX1JHQiwKKwlNVEtf
RFBJX0NPTE9SX0ZPUk1BVF9SR0JfRlVMTCwKKwlNVEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80
NDQsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1JfNDIyLAorCU1US19EUElfQ09MT1JfRk9S
TUFUX1hWX1lDQywKKwlNVEtfRFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDRfRlVMTCwKKwlNVEtf
RFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80MjJfRlVMTAorfTsKKworc3RydWN0IG10a19kcGkgewor
CXN0cnVjdCBtdGtfZGRwX2NvbXAgZGRwX2NvbXA7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29k
ZXI7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qg
Y2xrICplbmdpbmVfY2xrOworCXN0cnVjdCBjbGsgKnBpeGVsX2NsazsKKwlzdHJ1Y3QgY2xrICp0
dmRfY2xrOworCWludCBpcnE7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwllbnVt
IG10a19kcGlfb3V0X2NvbG9yX2Zvcm1hdCBjb2xvcl9mb3JtYXQ7CisJZW51bSBtdGtfZHBpX291
dF95Y19tYXAgeWNfbWFwOworCWVudW0gbXRrX2RwaV9vdXRfYml0X251bSBiaXRfbnVtOworCWVu
dW0gbXRrX2RwaV9vdXRfY2hhbm5lbF9zd2FwIGNoYW5uZWxfc3dhcDsKKwlib29sIHBvd2VyX3N0
YTsKKwl1OCBwb3dlcl9jdGw7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHBpICpt
dGtfZHBpX2Zyb21fZW5jb2RlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmUpCit7CisJcmV0dXJuIGNv
bnRhaW5lcl9vZihlLCBzdHJ1Y3QgbXRrX2RwaSwgZW5jb2Rlcik7Cit9CisKK2ludCBtdGtfZHBp
X3NldF9kaXNwbGF5X21vZGUoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCSAgICAgc3RydWN0IGRy
bV9kaXNwbGF5X21vZGUgKm1vZGUpOworCisjZW5kaWYgLyogX01US19EUElfSCAqLwpkaWZmIC0t
Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGlfcmVncy5oIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcGlfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjRiNmFkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RwaV9yZWdzLmgKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlh
dGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKi8KKyNpZm5kZWYgX19NVEtfRFBJX1JFR1NfSAorI2RlZmluZSBfX01US19EUElfUkVHU19I
CisKKyNkZWZpbmUgRFBJX0VOCQkJMHgwMAorI2RlZmluZSBFTgkJCQlCSVQoMCkKKworI2RlZmlu
ZSBEUElfUkVUCQkJMHgwNAorI2RlZmluZSBSU1QJCQkJQklUKDApCisKKyNkZWZpbmUgRFBJX0lO
VEVOCQkweDA4CisjZGVmaW5lIElOVF9WU1lOQ19FTgkJCUJJVCgwKQorI2RlZmluZSBJTlRfVkRF
X0VOCQkJQklUKDEpCisjZGVmaW5lIElOVF9VTkRFUkZMT1dfRU4JCUJJVCgyKQorCisjZGVmaW5l
IERQSV9JTlRTVEEJCTB4MEMKKyNkZWZpbmUgSU5UX1ZTWU5DX1NUQQkJCUJJVCgwKQorI2RlZmlu
ZSBJTlRfVkRFX1NUQQkJCUJJVCgxKQorI2RlZmluZSBJTlRfVU5ERVJGTE9XX1NUQQkJQklUKDIp
CisKKyNkZWZpbmUgRFBJX0NPTgkJCTB4MTAKKyNkZWZpbmUgQkdfRU5BQkxFCQkJQklUKDApCisj
ZGVmaW5lIElOX1JCX1NXQVAJCQlCSVQoMSkKKyNkZWZpbmUgSU5UTF9FTgkJCQlCSVQoMikKKyNk
ZWZpbmUgVERGUF9FTgkJCQlCSVQoMykKKyNkZWZpbmUgQ0xQRl9FTgkJCQlCSVQoNCkKKyNkZWZp
bmUgWVVWNDIyX0VOCQkJQklUKDUpCisjZGVmaW5lIENTQ19FTkFCTEUJCQlCSVQoNikKKyNkZWZp
bmUgUjYwMV9TRUwJCQlCSVQoNykKKyNkZWZpbmUgRU1CU1lOQ19FTgkJCUJJVCg4KQorI2RlZmlu
ZSBWU19MT0REX0VOCQkJQklUKDE2KQorI2RlZmluZSBWU19MRVZFTl9FTgkJCUJJVCgxNykKKyNk
ZWZpbmUgVlNfUk9ERF9FTgkJCUJJVCgxOCkKKyNkZWZpbmUgVlNfUkVWRU4JCQlCSVQoMTkpCisj
ZGVmaW5lIEZBS0VfREVfTE9ERAkJCUJJVCgyMCkKKyNkZWZpbmUgRkFLRV9ERV9MRVZFTgkJCUJJ
VCgyMSkKKyNkZWZpbmUgRkFLRV9ERV9ST0RECQkJQklUKDIyKQorI2RlZmluZSBGQUtFX0RFX1JF
VkVOCQkJQklUKDIzKQorCisjZGVmaW5lIERQSV9PVVRQVVRfU0VUVElORwkweDE0CisjZGVmaW5l
IENIX1NXQVAJCQkJMAorI2RlZmluZSBDSF9TV0FQX01BU0sJCQkoMHg3IDw8IDApCisjZGVmaW5l
IFNXQVBfUkdCCQkJMHgwMAorI2RlZmluZSBTV0FQX0dCUgkJCTB4MDEKKyNkZWZpbmUgU1dBUF9C
UkcJCQkweDAyCisjZGVmaW5lIFNXQVBfUkJHCQkJMHgwMworI2RlZmluZSBTV0FQX0dSQgkJCTB4
MDQKKyNkZWZpbmUgU1dBUF9CR1IJCQkweDA1CisjZGVmaW5lIEJJVF9TV0FQCQkJQklUKDMpCisj
ZGVmaW5lIEJfTUFTSwkJCQlCSVQoNCkKKyNkZWZpbmUgR19NQVNLCQkJCUJJVCg1KQorI2RlZmlu
ZSBSX01BU0sJCQkJQklUKDYpCisjZGVmaW5lIERFX01BU0sJCQkJQklUKDgpCisjZGVmaW5lIEhT
X01BU0sJCQkJQklUKDkpCisjZGVmaW5lIFZTX01BU0sJCQkJQklUKDEwKQorI2RlZmluZSBERV9Q
T0wJCQkJQklUKDEyKQorI2RlZmluZSBIU1lOQ19QT0wJCQlCSVQoMTMpCisjZGVmaW5lIFZTWU5D
X1BPTAkJCUJJVCgxNCkKKyNkZWZpbmUgQ0tfUE9MCQkJCUJJVCgxNSkKKyNkZWZpbmUgT0VOX09G
RgkJCQlCSVQoMTYpCisjZGVmaW5lIEVER0VfU0VMCQkJQklUKDE3KQorI2RlZmluZSBPVVRfQklU
CQkJCTE4CisjZGVmaW5lIE9VVF9CSVRfTUFTSwkJCSgweDMgPDwgMTgpCisjZGVmaW5lIE9VVF9C
SVRfOAkJCTB4MDAKKyNkZWZpbmUgT1VUX0JJVF8xMAkJCTB4MDEKKyNkZWZpbmUgT1VUX0JJVF8x
MgkJCTB4MDIKKyNkZWZpbmUgT1VUX0JJVF8xNgkJCTB4MDMKKyNkZWZpbmUgWUNfTUFQCQkJCTIw
CisjZGVmaW5lIFlDX01BUF9NQVNLCQkJKDB4NyA8PCAyMCkKKyNkZWZpbmUgWUNfTUFQX1JHQgkJ
CTB4MDAKKyNkZWZpbmUgWUNfTUFQX0NZQ1kJCQkweDA0CisjZGVmaW5lIFlDX01BUF9ZQ1lDCQkJ
MHgwNQorI2RlZmluZSBZQ19NQVBfQ1kJCQkweDA2CisjZGVmaW5lIFlDX01BUF9ZQwkJCTB4MDcK
KworI2RlZmluZSBEUElfU0laRQkJMHgxOAorI2RlZmluZSBIU0laRQkJCQkwCisjZGVmaW5lIEhT
SVpFX01BU0sJCQkoMHgxRkZGIDw8IDApCisjZGVmaW5lIFZTSVpFCQkJCTE2CisjZGVmaW5lIFZT
SVpFX01BU0sJCQkoMHgxRkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9ERFJfU0VUVElORwkJMHgx
QworI2RlZmluZSBERFJfRU4JCQkJQklUKDApCisjZGVmaW5lIERERFJfU0VMCQkJQklUKDEpCisj
ZGVmaW5lIEREUl80UEhBU0UJCQlCSVQoMikKKyNkZWZpbmUgRERSX1dJRFRICQkJKDB4MyA8PCA0
KQorI2RlZmluZSBERFJfUEFEX01PREUJCQkoMHgxIDw8IDgpCisKKyNkZWZpbmUgRFBJX1RHRU5f
SFdJRFRICQkweDIwCisjZGVmaW5lIEhQVwkJCQkwCisjZGVmaW5lIEhQV19NQVNLCQkJKDB4RkZG
IDw8IDApCisKKyNkZWZpbmUgRFBJX1RHRU5fSFBPUkNICQkweDI0CisjZGVmaW5lIEhCUAkJCQkw
CisjZGVmaW5lIEhCUF9NQVNLCQkJKDB4RkZGIDw8IDApCisjZGVmaW5lIEhGUAkJCQkxNgorI2Rl
ZmluZSBIRlBfTUFTSwkJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfVEdFTl9WV0lEVEgJ
CTB4MjgKKyNkZWZpbmUgRFBJX1RHRU5fVlBPUkNICQkweDJDCisKKyNkZWZpbmUgVlNZTkNfV0lE
VEhfU0hJRlQJCTAKKyNkZWZpbmUgVlNZTkNfV0lEVEhfTUFTSwkJKDB4RkZGIDw8IDApCisjZGVm
aW5lIFZTWU5DX0hBTEZfTElORV9TSElGVAkJMTYKKyNkZWZpbmUgVlNZTkNfSEFMRl9MSU5FX01B
U0sJCUJJVCgxNikKKyNkZWZpbmUgVlNZTkNfQkFDS19QT1JDSF9TSElGVAkJMAorI2RlZmluZSBW
U1lOQ19CQUNLX1BPUkNIX01BU0sJCSgweEZGRiA8PCAwKQorI2RlZmluZSBWU1lOQ19GUk9OVF9Q
T1JDSF9TSElGVAkJMTYKKyNkZWZpbmUgVlNZTkNfRlJPTlRfUE9SQ0hfTUFTSwkJKDB4RkZGIDw8
IDE2KQorCisjZGVmaW5lIERQSV9CR19IQ05UTAkJMHgzMAorI2RlZmluZSBCR19SSUdIVAkJCSgw
eDFGRkYgPDwgMCkKKyNkZWZpbmUgQkdfTEVGVAkJCQkoMHgxRkZGIDw8IDE2KQorCisjZGVmaW5l
IERQSV9CR19WQ05UTAkJMHgzNAorI2RlZmluZSBCR19CT1QJCQkJKDB4MUZGRiA8PCAwKQorI2Rl
ZmluZSBCR19UT1AJCQkJKDB4MUZGRiA8PCAxNikKKworI2RlZmluZSBEUElfQkdfQ09MT1IJCTB4
MzgKKyNkZWZpbmUgQkdfQgkJCQkoMHhGIDw8IDApCisjZGVmaW5lIEJHX0cJCQkJKDB4RiA8PCA4
KQorI2RlZmluZSBCR19SCQkJCSgweEYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0ZJRk9fQ1RMCQkw
eDNDCisjZGVmaW5lIEZJRk9fVkFMSURfU0VUCQkJKDB4MUYgPDwgMCkKKyNkZWZpbmUgRklGT19S
U1RfU0VMCQkJKDB4MSA8PCA4KQorCisjZGVmaW5lIERQSV9TVEFUVVMJCTB4NDAKKyNkZWZpbmUg
VkNPVU5URVIJCQkoMHgxRkZGIDw8IDApCisjZGVmaW5lIERQSV9CVVNZCQkJQklUKDE2KQorI2Rl
ZmluZSBPVVRFTgkJCQlCSVQoMTcpCisjZGVmaW5lIEZJRUxECQkJCUJJVCgyMCkKKyNkZWZpbmUg
VERMUgkJCQlCSVQoMjEpCisKKyNkZWZpbmUgRFBJX1RNT0RFCQkweDQ0CisjZGVmaW5lIERQSV9P
RU5fT04JCQlCSVQoMCkKKworI2RlZmluZSBEUElfQ0hFQ0tTVU0JCTB4NDgKKyNkZWZpbmUgRFBJ
X0NIRUNLU1VNX01BU0sJCSgweEZGRkZGRiA8PCAwKQorI2RlZmluZSBEUElfQ0hFQ0tTVU1fUkVB
RFkJCUJJVCgzMCkKKyNkZWZpbmUgRFBJX0NIRUNLU1VNX0VOCQkJQklUKDMxKQorCisjZGVmaW5l
IERQSV9EVU1NWQkJMHg1MAorI2RlZmluZSBEUElfRFVNTVlfTUFTSwkJCSgweEZGRkZGRkZGIDw8
IDApCisKKyNkZWZpbmUgRFBJX1RHRU5fVldJRFRIX0xFVkVOCTB4NjgKKyNkZWZpbmUgRFBJX1RH
RU5fVlBPUkNIX0xFVkVOCTB4NkMKKyNkZWZpbmUgRFBJX1RHRU5fVldJRFRIX1JPREQJMHg3MAor
I2RlZmluZSBEUElfVEdFTl9WUE9SQ0hfUk9ERAkweDc0CisjZGVmaW5lIERQSV9UR0VOX1ZXSURU
SF9SRVZFTgkweDc4CisjZGVmaW5lIERQSV9UR0VOX1ZQT1JDSF9SRVZFTgkweDdDCisKKyNkZWZp
bmUgRFBJX0VTQVZfVlRJTUlOR19MT0RECTB4ODAKKyNkZWZpbmUgRVNBVl9WT0ZTVF9MT0RECQkJ
KDB4RkZGIDw8IDApCisjZGVmaW5lIEVTQVZfVldJRF9MT0RECQkJKDB4RkZGIDw8IDE2KQorCisj
ZGVmaW5lIERQSV9FU0FWX1ZUSU1JTkdfTEVWRU4JMHg4NAorI2RlZmluZSBFU0FWX1ZPRlNUX0xF
VkVOCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9WV0lEX0xFVkVOCQkJKDB4RkZGIDw8IDE2
KQorCisjZGVmaW5lIERQSV9FU0FWX1ZUSU1JTkdfUk9ERAkweDg4CisjZGVmaW5lIEVTQVZfVk9G
U1RfUk9ERAkJCSgweEZGRiA8PCAwKQorI2RlZmluZSBFU0FWX1ZXSURfUk9ERAkJCSgweEZGRiA8
PCAxNikKKworI2RlZmluZSBEUElfRVNBVl9WVElNSU5HX1JFVkVOCTB4OEMKKyNkZWZpbmUgRVNB
Vl9WT0ZTVF9SRVZFTgkJKDB4RkZGIDw8IDApCisjZGVmaW5lIEVTQVZfVldJRF9SRVZFTgkJCSgw
eEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfRVNBVl9GVElNSU5HCTB4OTAKKyNkZWZpbmUgRVNB
Vl9GT0ZTVF9PREQJCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9GT0ZTVF9FVkVOCQkJKDB4
RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9DTFBGX1NFVFRJTkcJMHg5NAorI2RlZmluZSBDTFBG
X1RZUEUJCQkoMHgzIDw8IDApCisjZGVmaW5lIFJPVU5EX0VOCQkJQklUKDQpCisKKyNkZWZpbmUg
RFBJX1lfTElNSVQJCTB4OTgKKyNkZWZpbmUgWV9MSU1JTlRfQk9UCQkJMAorI2RlZmluZSBZX0xJ
TUlOVF9CT1RfTUFTSwkJKDB4RkZGIDw8IDApCisjZGVmaW5lIFlfTElNSU5UX1RPUAkJCTE2Cisj
ZGVmaW5lIFlfTElNSU5UX1RPUF9NQVNLCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0Nf
TElNSVQJCTB4OUMKKyNkZWZpbmUgQ19MSU1JVF9CT1QJCQkwCisjZGVmaW5lIENfTElNSVRfQk9U
X01BU0sJCSgweEZGRiA8PCAwKQorI2RlZmluZSBDX0xJTUlUX1RPUAkJCTE2CisjZGVmaW5lIENf
TElNSVRfVE9QX01BU0sJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfWVVWNDIyX1NFVFRJ
TkcJMHhBMAorI2RlZmluZSBVVl9TV0FQCQkJCUJJVCgwKQorI2RlZmluZSBDUl9ERUxTRUwJCQlC
SVQoNCkKKyNkZWZpbmUgQ0JfREVMU0VMCQkJQklUKDUpCisjZGVmaW5lIFlfREVMU0VMCQkJQklU
KDYpCisjZGVmaW5lIERFX0RFTFNFTAkJCUJJVCg3KQorCisjZGVmaW5lIERQSV9FTUJTWU5DX1NF
VFRJTkcJMHhBNAorI2RlZmluZSBFTUJTWU5DX1JfQ1JfRU4JCQlCSVQoMCkKKyNkZWZpbmUgRU1Q
U1lOQ19HX1lfRU4JCQlCSVQoMSkKKyNkZWZpbmUgRU1QU1lOQ19CX0NCX0VOCQkJQklUKDIpCisj
ZGVmaW5lIEVTQVZfRl9JTlYJCQlCSVQoNCkKKyNkZWZpbmUgRVNBVl9WX0lOVgkJCUJJVCg1KQor
I2RlZmluZSBFU0FWX0hfSU5WCQkJQklUKDYpCisjZGVmaW5lIEVTQVZfQ09ERV9NQU4JCQlCSVQo
OCkKKyNkZWZpbmUgVlNfT1VUX1NFTAkJCSgweDcgPDwgMTIpCisKKyNkZWZpbmUgRFBJX0VTQVZf
Q09ERV9TRVQwCTB4QTgKKyNkZWZpbmUgRVNBVl9DT0RFMAkJCSgweEZGRiA8PCAwKQorI2RlZmlu
ZSBFU0FWX0NPREUxCQkJKDB4RkZGIDw8IDE2KQorCisjZGVmaW5lIERQSV9FU0FWX0NPREVfU0VU
MQkweEFDCisjZGVmaW5lIEVTQVZfQ09ERTIJCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9D
T0RFM19NU0IJCQlCSVQoMTYpCisKKyNkZWZpbmUgRFBJX0hfRlJFX0NPTgkJMHhFMAorI2RlZmlu
ZSBIX0ZSRV8yTgkJCUJJVCgyNSkKKyNlbmRpZiAvKiBfX01US19EUElfUkVHU19IICovCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCmluZGV4IDRjNzdjMDAuLjhiYzlmNDggMTAw
NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01NDAsNiArNTQwLDcgQEAg
c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9
IHsKIAkmbXRrX2Rpc3BfcmRtYV9kcml2ZXIsCiAJJm10a19kc2lfZHJpdmVyLAogCSZtdGtfbWlw
aV90eF9kcml2ZXIsCisJJm10a19kcGlfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQg
bXRrX2RybV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmlu
ZGV4IDJjZDA0ZTAuLmIxMzQwZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry
di5oCkBAIC01MSw1ICs1MSw2IEBAIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19k
aXNwX292bF9kcml2ZXI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9y
ZG1hX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lfZHJpdmVy
OwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX21pcGlfdHhfZHJpdmVyOworZXh0
ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RwaV9kcml2ZXI7CiAKICNlbmRpZiAvKiBN
VEtfRFJNX0RSVl9IICovCi0tIAoyLjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu
ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz
dGluZm8vZHJpLWRldmVsCg==