From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v12 03/14] drm/mediatek: Add DSI sub driver
Date: Tue, 1 Mar 2016 16:20:19 +0100
Message-ID: <1456845630-2786-4-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
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0KQ2hhbmdlcyBzaW5jZSB2MTA6CiAtIGFkZCBtaXBpIGRz
aSBob3N0IHRvIHBhc3MgdGhlIGRzaSBsYW5lIG51bWJlciwgdmlkZW8gZm9ybWF0LAogICBhbmQg
bW9kZV9mbGFnIHRvIGRzaS4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAg
ICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICB8ICAg
NCArLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgfCAgIDIgKwogZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggfCAgIDIgKwogZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kc2kuYyAgICAgfCA5NDIgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyB8IDQ4NyAr
KysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxNDM4IGluc2VydGlvbnMoKyksIDEg
ZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19taXBpX3R4LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZp
ZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDhkYWQ4OTIuLjBjNDlh
OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0zLDYgKzMsOCBAQCBjb25maWcgRFJN
X01FRElBVEVLCiAJZGVwZW5kcyBvbiBEUk0KIAlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwg
KEFSTSAmJiBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0IERS
TV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUwKIAlzZWxlY3QgSU9NTVVfRE1BCiAJc2VsZWN0
IE1US19TTUkKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFr
ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggZDRiZGU3Yy4u
ZTc4MWRiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTYsNiArNiw4IEBAIG1l
ZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKIAkJICBtdGtfZHJtX2Rydi5vIFwKIAkJ
ICBtdGtfZHJtX2ZiLm8gXAogCQkgIG10a19kcm1fZ2VtLm8gXAotCQkgIG10a19kcm1fcGxhbmUu
bworCQkgIG10a19kcm1fcGxhbmUubyBcCisJCSAgbXRrX2RzaS5vIFwKKwkJICBtdGtfbWlwaV90
eC5vCiAKIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCmluZGV4IGZjYWJmYWQuLjRjNzdjMDAgMTAw
NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01MzgsNiArNTM4LDggQEAg
c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9
IHsKIAkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCiAJJm10a19kaXNwX292bF9kcml2ZXIsCiAJ
Jm10a19kaXNwX3JkbWFfZHJpdmVyLAorCSZtdGtfZHNpX2RyaXZlciwKKwkmbXRrX21pcGlfdHhf
ZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmluZGV4IDdhNWNiMTcuLjJjZDA0ZTAgMTAw
NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC00OSw1ICs0OSw3IEBAIHN0
cnVjdCBtdGtfZHJtX3ByaXZhdGUgewogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt
dGtfZGlzcF9vdmxfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rp
c3BfcmRtYV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHNpX2Ry
aXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlcjsK
IAogI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2QzODkKLS0tIC9kZXYvbnVs
bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCkBAIC0wLDAgKzEsOTQy
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRy
bS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8
ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNp
bmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk
ZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxs
aW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVk
ZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgor
I2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t
cC5oIgorCisjZGVmaW5lIERTSV9WSURFT19GSUZPX0RFUFRICSgxOTIwIC8gNCkKKyNkZWZpbmUg
RFNJX0hPU1RfRklGT19ERVBUSAk2NAorCisjZGVmaW5lIERTSV9TVEFSVAkJMHgwMAorCisjZGVm
aW5lIERTSV9DT05fQ1RSTAkJMHgxMAorI2RlZmluZSBEU0lfUkVTRVQJCQlCSVQoMCkKKyNkZWZp
bmUgRFNJX0VOCQkJCUJJVCgxKQorCisjZGVmaW5lIERTSV9NT0RFX0NUUkwJCTB4MTQKKyNkZWZp
bmUgTU9ERQkJCQkoMykKKyNkZWZpbmUgQ01EX01PREUJCQkwCisjZGVmaW5lIFNZTkNfUFVMU0Vf
TU9ERQkJCTEKKyNkZWZpbmUgU1lOQ19FVkVOVF9NT0RFCQkJMgorI2RlZmluZSBCVVJTVF9NT0RF
CQkJMworI2RlZmluZSBGUk1fTU9ERQkJCUJJVCgxNikKKyNkZWZpbmUgTUlYX01PREUJCQlCSVQo
MTcpCisKKyNkZWZpbmUgRFNJX1RYUlhfQ1RSTAkJMHgxOAorI2RlZmluZSBWQ19OVU0JCQkJKDIg
PDwgMCkKKyNkZWZpbmUgTEFORV9OVU0JCQkoMHhmIDw8IDIpCisjZGVmaW5lIERJU19FT1QJCQkJ
QklUKDYpCisjZGVmaW5lIE5VTExfRU4JCQkJQklUKDcpCisjZGVmaW5lIFRFX0ZSRUVSVU4JCQlC
SVQoOCkKKyNkZWZpbmUgRVhUX1RFX0VOCQkJQklUKDkpCisjZGVmaW5lIEVYVF9URV9FREdFCQkJ
QklUKDEwKQorI2RlZmluZSBNQVhfUlROX1NJWkUJCQkoMHhmIDw8IDEyKQorI2RlZmluZSBIU1RY
X0NLTFBfRU4JCQlCSVQoMTYpCisKKyNkZWZpbmUgRFNJX1BTQ1RSTAkJMHgxYworI2RlZmluZSBE
U0lfUFNfV0MJCQkweDNmZmYKKyNkZWZpbmUgRFNJX1BTX1NFTAkJCSgzIDw8IDE2KQorI2RlZmlu
ZSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1CQkoMCA8PCAxNikKKyNkZWZpbmUgTE9PU0VMWV9QU18x
OEJJVF9SR0I2NjYJCSgxIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMThCSVRfUkdCNjY2CQko
MiA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzI0QklUX1JHQjg4OAkJKDMgPDwgMTYpCisKKyNk
ZWZpbmUgRFNJX1ZTQV9OTAkJMHgyMAorI2RlZmluZSBEU0lfVkJQX05MCQkweDI0CisjZGVmaW5l
IERTSV9WRlBfTkwJCTB4MjgKKyNkZWZpbmUgRFNJX1ZBQ1RfTkwJCTB4MkMKKyNkZWZpbmUgRFNJ
X0hTQV9XQwkJMHg1MAorI2RlZmluZSBEU0lfSEJQX1dDCQkweDU0CisjZGVmaW5lIERTSV9IRlBf
V0MJCTB4NTgKKworI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQKKworI2RlZmluZSBEU0lf
UEhZX0xDQ09OCQkweDEwNAorI2RlZmluZSBMQ19IU19UWF9FTgkJCUJJVCgwKQorI2RlZmluZSBM
Q19VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExDX1dBS0VVUF9FTgkJCUJJVCgyKQorCisjZGVm
aW5lIERTSV9QSFlfTEQwQ09OCQkweDEwOAorI2RlZmluZSBMRDBfSFNfVFhfRU4JCQlCSVQoMCkK
KyNkZWZpbmUgTEQwX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTEQwX1dBS0VVUF9FTgkJCUJJ
VCgyKQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjAJMHgxMTAKKyNkZWZpbmUgTFBYCQkJCSgw
eGZmIDw8IDApCisjZGVmaW5lIEhTX1BSUFIJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgSFNfWkVS
TwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgSFNfVFJBSUwJCQkoMHhmZiA8PCAyNCkKKworI2Rl
ZmluZSBEU0lfUEhZX1RJTUVDT04xCTB4MTE0CisjZGVmaW5lIFRBX0dPCQkJCSgweGZmIDw8IDAp
CisjZGVmaW5lIFRBX1NVUkUJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgVEFfR0VUCQkJCSgweGZm
IDw8IDE2KQorI2RlZmluZSBEQV9IU19FWElUCQkJKDB4ZmYgPDwgMjQpCisKKyNkZWZpbmUgRFNJ
X1BIWV9USU1FQ09OMgkweDExOAorI2RlZmluZSBDT05UX0RFVAkJCSgweGZmIDw8IDApCisjZGVm
aW5lIENMS19aRVJPCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIENMS19UUkFJTAkJCSgweGZmIDw8
IDI0KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjMJMHgxMWMKKyNkZWZpbmUgQ0xLX0hTX1BS
UFIJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBDTEtfSFNfUE9TVAkJCSgweGZmIDw8IDgpCisjZGVm
aW5lIENMS19IU19FWElUCQkJKDB4ZmYgPDwgMTYpCisKKyNkZWZpbmUgTlNfVE9fQ1lDTEUobiwg
YykgICAgKChuKSAvIChjKSArICgoKG4pICUgKGMpKSA/IDEgOiAwKSkKKworc3RydWN0IHBoeTsK
Kworc3RydWN0IG10a19kc2kgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAgZGRwX2NvbXA7CisJc3Ry
dWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGhvc3Q7CisJc3RydWN0IGRy
bV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubjsKKwlzdHJ1Y3Qg
ZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCXN0cnVjdCBw
aHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsKKworCXN0cnVjdCBjbGsgKmVuZ2luZV9j
bGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisJc3RydWN0IGNsayAqaHNfY2xrOworCisJ
dTMyIGRhdGFfcmF0ZTsKKworCXVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsKKwllbnVtIG1pcGlf
ZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWduZWQgaW50IGxhbmVzOworCXN0cnVjdCB2
aWRlb21vZGUgdm07CisJaW50IHJlZmNvdW50OworCWJvb2wgZW5hYmxlZDsKK307CisKK3N0YXRp
YyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVjdCBkcm1fZW5jb2Rl
ciAqZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCBtdGtfZHNpLCBlbmNvZGVy
KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqY29ubmVjdG9yX3RvX2RzaShz
dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVj
dCBtdGtfZHNpLCBjb25uKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqaG9z
dF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmgpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v
ZihoLCBzdHJ1Y3QgbXRrX2RzaSwgaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfbWFz
ayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIGRhdGEpCit7
CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1w
ICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgZHNpLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3Rh
dGljIHZvaWQgZHNpX3BoeV90aW1jb25maWcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIg
dGltY29uMCwgdGltY29uMSwgdGltY29uMiwgdGltY29uMzsKKwl1bnNpZ25lZCBpbnQgdWksIGN5
Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxweDsKKworCXVpID0gMTAwMCAvIGRzaS0+ZGF0YV9y
YXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0gODAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsK
KwlscHggPSA1OworCisJdGltY29uMCA9ICg4IDw8IDI0KSB8ICgweGEgPDwgMTYpIHwgKDB4NiA8
PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcgPDwgMjQpIHwgKDUgKiBscHggPDwgMTYpIHwgKCgz
ICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0ICogbHB4KTsKKwl0aW1jb24yID0gKChOU19UT19D
WUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4YSkgPDwgMjQpIHwKKwkJICAoTlNfVE9fQ1lDTEUo
MHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsKKwl0aW1jb24zID0gKDIgKiBscHgpIDw8IDE2IHwg
TlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBjeWNsZV90aW1lKSA8PCA4IHwKKwkJICAgTlNfVE9f
Q1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisKKwl3cml0ZWwodGltY29uMCwgZHNpLT5yZWdzICsg
RFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVsKHRpbWNvbjEsIGRzaS0+cmVncyArIERTSV9QSFlf
VElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24yLCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04y
KTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMyk7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRr
X2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lfRU4sIERTSV9FTik7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lf
bWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERT
SV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lfUkVTRVQpOworCW10a19kc2lfbWFzayhkc2ksIERT
SV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsKK30KKworc3RhdGljIGludCBtdGtfZHNpX3Bvd2Vy
b24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRl
djsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNpLT5yZWZjb3VudCAhPSAxKQorCQlyZXR1cm4gMDsK
KworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChwaXhlbF9jbG9jayAvIDEwMDApICogcGl4ZWxfZGlw
dGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVsX2Nsb2NrIHVuaXQgaXMgS2h6LCBkYXRhX3JhdGEg
dW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRlIDEwMDAuCisJICogbWlwaV9yYXRpbyBpcyBtaXBp
IGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5jZSB0aGUgcGl4ZWwgY2xrIGluIG1pcGkuCisJICog
d2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4KKwkgKi8KKwlkc2ktPmRhdGFfcmF0ZSA9IGRzaS0+
dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgxICogMTAwMCAqIDEwKTsKKworCXJldCA9IGNsa19z
ZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5kYXRhX3JhdGUgKiAxMDAwMDAwKTsKKwlpZiAocmV0
IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgZGF0YSByYXRlOiAlZFxuIiwg
cmV0KTsKKwkJZ290byBlcnJfcmVmY291bnQ7CisJfQorCisJcGh5X3Bvd2VyX29uKGRzaS0+cGh5
KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmVuZ2luZV9jbGspOworCWlmIChy
ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBlbmdpbmUgY2xvY2s6
ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waHlfcG93ZXJfb2ZmOworCX0KKworCXJldCA9IGNs
a19wcmVwYXJlX2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlk
ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCBjbG9jazogJWRcbiIsIHJldCk7
CisJCWdvdG8gZXJyX2Rpc2FibGVfZW5naW5lX2NsazsKKwl9CisKKwltdGtfZHNpX2VuYWJsZShk
c2kpOworCW10a19kc2lfcmVzZXQoZHNpKTsKKwlkc2lfcGh5X3RpbWNvbmZpZyhkc2kpOworCisJ
cmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX2VuZ2luZV9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVw
YXJlKGRzaS0+ZW5naW5lX2Nsayk7CitlcnJfcGh5X3Bvd2VyX29mZjoKKwlwaHlfcG93ZXJfb2Zm
KGRzaS0+cGh5KTsKK2Vycl9yZWZjb3VudDoKKwlkc2ktPnJlZmNvdW50LS07CisJcmV0dXJuIHJl
dDsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2Rz
aSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hTX1RYX0VO
LCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsK
K30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9sZWF2ZShzdHJ1Y3QgbXRrX2RzaSAq
ZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1VMUE1fRU4sIDAp
OworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VVUF9FTiwgTENfV0FL
RVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4s
IDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfZW50ZXIoc3RydWN0IG10
a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX0hT
X1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VMUE1f
RU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfbGVhdmUoc3RydWN0
IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQw
X1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfV0FL
RVVQX0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENP
TiwgTEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGRzaV9jbGtfaHNfc3RhdGUo
c3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzE7CisKKwl0bXBfcmVnMSA9IHJl
YWRsKGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOworCXJldHVybiAoKHRtcF9yZWcxICYgTENf
SFNfVFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBkc2lfY2xr
X2hzX21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9vbCBlbnRlcikKK3sKKwlpZiAoZW50ZXIg
JiYgIWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9M
Q0NPTiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsKKwllbHNlIGlmICghZW50ZXIgJiYgZHNp
X2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBM
Q19IU19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9kZShzdHJ1Y3QgbXRr
X2RzaSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENNRF9NT0RFOworCisJaWYgKGRzaS0+bW9k
ZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJdmlkX21vZGUgPSBTWU5DX1BVTFNF
X01PREU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JV
UlNUKSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZ
TkNfUFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9NT0RFOworCX0KKworCXdyaXRlbCh2aWRf
bW9kZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9w
c19jb250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgdmlkZW9tb2Rl
ICp2bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2JwcCwgcHNfd2M7CisJdTMyIHBzX2JwcF9t
b2RlOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1NjUpCisJCWRzaV9i
dWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBwID0gMzsKKworCXBzX3djID0gdm0tPmhh
Y3RpdmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9kZSA9IHBzX3djOworCisJc3dpdGNoIChk
c2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJcHNfYnBwX21vZGUg
fD0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRf
UkdCNjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlicmVh
azsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlwc19icHBfbW9kZSB8PSBM
T09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdC
NTY1OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlicmVhazsK
Kwl9CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+cmVncyArIERTSV9WQUNUX05MKTsKKwl3
cml0ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworCXdyaXRlbChwc193
YywgZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3J4
dHhfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBfcmVnOworCisJc3dp
dGNoIChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0bXBfcmVnID0gMSA8PCAyOworCQlicmVh
azsKKwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJ
dG1wX3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0bXBfcmVnID0gMHhmIDw8
IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7
CisJfQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9UWFJYX0NUUkwpOworfQor
CitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXVu
c2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMyIHRtcF9yZWc7CisKKwlzd2l0Y2ggKGRz
aS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl0bXBfcmVnID0gUEFD
S0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJ
Y2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBfcmVnID0gTE9PU0VMWV9QU18xOEJJVF9S
R0I2NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lf
Rk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMThCSVRfUkdCNjY2Owor
CQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1
NjU6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlkc2lfdG1wX2J1Zl9i
cHAgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzI0QklU
X1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJfQorCisJdG1wX3Jl
ZyArPSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1Zl9icHAgJiBEU0lfUFNfV0M7CisJd3Jp
dGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBk
c2lfY29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBp
bnQgaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFs
X2JhY2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0
ZTsKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCisJc3RydWN0IHZpZGVvbW9kZSAq
dm0gPSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1
KQorCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsK
KworCXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJlZ3MgKyBEU0lfVlNBX05MKTsKKwl3cml0
ZWwodm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkJQX05MKTsKKwl3cml0ZWwodm0t
PnZmcm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZGUF9OTCk7CisJd3JpdGVsKHZtLT52YWN0
aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisKKwlob3Jpem9udGFsX3N5bmNfYWN0aXZl
X2J5dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKworCWlmIChk
c2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCisJCWhvcml6
b250YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5oYmFja19wb3JjaCAqIGRzaV90bXBfYnVm
X2JwcCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPSAoKHZtLT5o
YmFja19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJCWRzaV90bXBfYnVmX2JwcCAtIDEwKTsK
KworCWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0gKHZtLT5oZnJvbnRfcG9yY2ggKiBkc2lf
dG1wX2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRl
LCBkc2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRhbF9iYWNrcG9yY2hf
Ynl0ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJd3JpdGVsKGhvcml6b250YWxfZnJvbnRw
b3JjaF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dDKTsKKworCWRzaV9wc19jb250cm9sKGRz
aSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3RhcnQoc3RydWN0IG10a19kc2kgKmRzaSkK
K3sKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKKwl3cml0ZWwoMSwgZHNpLT5y
ZWdzICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9wb3dlcm9mZihzdHJ1
Y3QgbXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09OKGRzaS0+cmVmY291bnQgPT0gMCkpCisJ
CXJldHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQgIT0gMCkKKwkJcmV0dXJuOworCisJZHNp
X2xhbmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNpX2Nsa191bHBfbW9kZV9lbnRlcihkc2kp
OworCisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp
LT5lbmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kaWdpdGFsX2Nsayk7
CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30KKworc3RhdGljIHZvaWQgbXRrX291dHB1
dF9kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCWlmIChk
c2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCWlmIChkcm1f
cGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0
dXAgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldCA9IG10a19kc2lf
cG93ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBv
d2VyIG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkc2lfcnh0eF9jb250cm9sKGRzaSk7
CisKKwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2xhbmUwX3VscF9tb2RlX2xl
YXZlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMCk7CisJZHNpX3NldF9tb2RlKGRzaSk7
CisKKwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJZHNpX2NvbmZpZ192ZG9fdGltaW5nKGRz
aSk7CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUoZHNpLCAxKTsKKwor
CW10a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlp
ZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYg
KGRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0
byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwltdGtfZHNp
X3Bvd2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQor
eworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95
ID0gbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgYm9vbCBtdGtfZHNpX2Vu
Y29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAg
IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgICBzdHJ1Y3Qg
ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAq
ZW5jb2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAg
ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0cnVjdCBtdGtfZHNp
ICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWRzaS0+dm0ucGl4ZWxjbG9jayA9
IGFkanVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3RpdmUgPSBhZGp1c3RlZC0+aGRpc3BsYXk7
CisJZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVkLT5odG90YWwgLSBhZGp1c3RlZC0+aHN5
bmNfZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0gYWRqdXN0ZWQtPmhzeW5jX3N0YXJ0IC0g
YWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5bmNfbGVuID0gYWRqdXN0ZWQtPmhzeW5j
X2VuZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKworCWRzaS0+dm0udmFjdGl2ZSA9IGFkanVz
dGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3BvcmNoID0gYWRqdXN0ZWQtPnZ0b3RhbCAt
IGFkanVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52ZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+
dnN5bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52c3luY19sZW4gPSBh
ZGp1c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0OworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp
Cit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJ
bXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Vu
Y29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRr
X2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtfb3V0cHV0X2RzaV9l
bmFibGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgbXRrX2Rz
aV9jb25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJv
b2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9y
ICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJ
ZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rz
aV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7
CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKwor
CXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgc3Ry
dWN0IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCXN0cnVj
dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNv
bm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAmZHNpLT5lbmNvZGVyOworfQor
CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBtdGtfZHNpX2Vu
Y29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gbXRrX2RzaV9lbmNvZGVyX21v
ZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0LAorCS5kaXNh
YmxlID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IG10a19kc2lfZW5jb2Rl
cl9lbmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mg
bXRrX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9j
b25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0LAorCS5m
aWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5k
ZXN0cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWlj
X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f
YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJv
eV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcworCW10a19k
c2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gbXRrX2RzaV9jb25u
ZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0
X2VuY29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fYXR0YWNoX2JyaWRnZShzdHJ1Y3Qg
ZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7
CisJaW50IHJldDsKKworCWlmICghYnJpZGdlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWVuY29k
ZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVuY29kZXIgPSBlbmNvZGVyOworCXJldCA9
IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwgYnJpZGdlKTsKKwlpZiAocmV0KSB7CisJ
CURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8gZHJtXG4iKTsKKwkJZW5jb2Rl
ci0+YnJpZGdlID0gTlVMTDsKKwkJYnJpZGdlLT5lbmNvZGVyID0gTlVMTDsKKwl9CisKKwlyZXR1
cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBk
cm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCXJl
dCA9IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVy
X2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKKwlpZiAocmV0
KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuY29kZXIgaW5pdCB0byBkcm1cbiIpOworCQly
ZXR1cm4gcmV0OworCX0KKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsICZt
dGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCS8qCisJICogQ3VycmVudGx5IGRpc3Bs
YXkgZGF0YSBwYXRocyBhcmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byBhIGNydGMgZWFjaC4KKwkg
KiBjcnRjIDAgaXMgT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0Ug
LT4gRFNJMAorCSAqLworCWRzaS0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9IDE7CisKKwkvKiBQ
cmUtZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYgdGhlcmUncyBhIGJyaWRnZSAqLworCXJl
dCA9IG10a19kcm1fYXR0YWNoX2JyaWRnZShkc2ktPmJyaWRnZSwgJmRzaS0+ZW5jb2Rlcik7CisJ
aWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwg
JmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05O
RUNUT1JfRFNJKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvbm5lY3Rv
ciBpbml0IHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2VuY29kZXJfY2xlYW51cDsKKwl9CisKKwlk
cm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2hl
bHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4p
OworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVy
IHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Nvbm5lY3Rvcl9jbGVhbnVwOworCX0KKworCWRzaS0+
Y29ubi5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFj
aF9lbmNvZGVyKCZkc2ktPmNvbm4sICZkc2ktPmVuY29kZXIpOworCisJaWYgKGRzaS0+cGFuZWwp
IHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJ
aWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIHBhbmVsIHRvIGRybVxu
Iik7CisJCQlnb3RvIGVycl9jb25uZWN0b3JfdW5yZWdpc3RlcjsKKwkJfQorCX0KKwlyZXR1cm4g
MDsKKworZXJyX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyOgorCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl
cigmZHNpLT5jb25uKTsKK2Vycl9jb25uZWN0b3JfY2xlYW51cDoKKwlkcm1fY29ubmVjdG9yX2Ns
ZWFudXAoJmRzaS0+Y29ubik7CitlcnJfZW5jb2Rlcl9jbGVhbnVwOgorCWRybV9lbmNvZGVyX2Ns
ZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlkcm1fZW5j
b2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCS8qIFNraXAgY29ubmVjdG9yIGNsZWFudXAg
aWYgY3JlYXRpb24gd2FzIGRlbGVnYXRlZCB0byB0aGUgYnJpZGdlICovCisJaWYgKGRzaS0+Y29u
bi5kZXYpIHsKKwkJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZkc2ktPmNvbm4pOworCQlkcm1f
Y29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtf
ZHNpX2RkcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtf
ZHNpICpkc2kgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kc2ksIGRkcF9jb21wKTsK
KworCW10a19kc2lfcG93ZXJvbihkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9z
dG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9
IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2RzaSwgZGRwX2NvbXApOworCisJbXRrX2Rz
aV9wb3dlcm9mZihkc2kpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m
dW5jcyBtdGtfZHNpX2Z1bmNzID0geworCS5zdGFydCA9IG10a19kc2lfZGRwX3N0YXJ0LAorCS5z
dG9wID0gbXRrX2RzaV9kZHBfc3RvcCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9ob3N0X2F0
dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9k
c2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9fZHNp
KGhvc3QpOworCisJZHNpLT5sYW5lcyA9IGRldmljZS0+bGFuZXM7CisJZHNpLT5mb3JtYXQgPSBk
ZXZpY2UtPmZvcm1hdDsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7CisK
KwlpZiAoZHNpLT5jb25uLmRldikKKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRzaS0+Y29u
bi5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9ob3N0X2RldGFj
aChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lf
ZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhv
c3QpOworCisJaWYgKGRzaS0+Y29ubi5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChk
c2ktPmNvbm4uZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1p
cGlfZHNpX2hvc3Rfb3BzIG10a19kc2lfb3BzID0geworCS5hdHRhY2ggPSBtdGtfZHNpX2hvc3Rf
YXR0YWNoLAorCS5kZXRhY2ggPSBtdGtfZHNpX2hvc3RfZGV0YWNoLAorfTsKKworc3RhdGljIGlu
dCBtdGtfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs
IHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0
YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXQg
PSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7CisJaWYgKHJldCA8
IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAl
ZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCXJldCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoJmRzaS0+aG9zdCk7CisJaWYgKHJl
dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgRFNJIGhvc3Q6ICVk
XG4iLCByZXQpOworCQlnb3RvIGVycl9kZHBfY29tcF91bnJlZ2lzdGVyOworCX0KKworCXJldCA9
IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKGRybSwgZHNpKTsKKwlpZiAocmV0KSB7CisJCURSTV9F
UlJPUigiRW5jb2RlciBjcmVhdGUgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXJy
X3VucmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVyOgorCW1pcGlf
ZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5ob3N0KTsKK2Vycl9kZHBfY29tcF91bnJlZ2lzdGVy
OgorCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCXJldHVy
biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRl
diwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg
ZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2dldF9k
cnZkYXRhKGRldik7CisKKwltdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoZHNpKTsKKwltaXBpX2Rz
aV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+aG9zdCk7CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIo
ZHJtLCAmZHNpLT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50
X29wcyBtdGtfZHNpX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQgPSBtdGtfZHNpX2JpbmQsCisJ
LnVuYmluZCA9IG10a19kc2lfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZHNpX3Byb2Jl
KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kc2kgKmRzaTsK
KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq
cmVtb3RlX25vZGUsICplbmRwb2ludDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGNv
bXBfaWQ7CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNp
KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJZHNpLT5o
b3N0Lm9wcyA9ICZtdGtfZHNpX29wczsKKwlkc2ktPmhvc3QuZGV2ID0gZGV2OworCisJZW5kcG9p
bnQgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOworCWlm
IChlbmRwb2ludCkgeworCQlyZW1vdGVfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9w
YXJlbnQoZW5kcG9pbnQpOworCQlpZiAoIXJlbW90ZV9ub2RlKSB7CisJCQlkZXZfZXJyKGRldiwg
Ik5vIHBhbmVsIGNvbm5lY3RlZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWRz
aS0+YnJpZGdlID0gb2ZfZHJtX2ZpbmRfYnJpZGdlKHJlbW90ZV9ub2RlKTsKKwkJZHNpLT5wYW5l
bCA9IG9mX2RybV9maW5kX3BhbmVsKHJlbW90ZV9ub2RlKTsKKwkJb2Zfbm9kZV9wdXQocmVtb3Rl
X25vZGUpOworCQlpZiAoIWRzaS0+YnJpZGdlICYmICFkc2ktPnBhbmVsKSB7CisJCQlkZXZfaW5m
byhkZXYsICJXYWl0aW5nIGZvciBicmlkZ2Ugb3IgcGFuZWwgZHJpdmVyXG4iKTsKKwkJCXJldHVy
biAtRVBST0JFX0RFRkVSOworCQl9CisJfQorCisJZHNpLT5lbmdpbmVfY2xrID0gZGV2bV9jbGtf
Z2V0KGRldiwgImVuZ2luZSIpOworCWlmIChJU19FUlIoZHNpLT5lbmdpbmVfY2xrKSkgeworCQly
ZXQgPSBQVFJfRVJSKGRzaS0+ZW5naW5lX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv
IGdldCBlbmdpbmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRz
aS0+ZGlnaXRhbF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGlnaXRhbCIpOworCWlmIChJU19F
UlIoZHNpLT5kaWdpdGFsX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmRpZ2l0YWxfY2xr
KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGRpZ2l0YWwgY2xvY2s6ICVkXG4iLCBy
ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+aHNfY2xrID0gZGV2bV9jbGtfZ2V0KGRl
diwgImhzIik7CisJaWYgKElTX0VSUihkc2ktPmhzX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihk
c2ktPmhzX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBocyBjbG9jazogJWRc
biIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNv
dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZHNpLT5yZWdzID0gZGV2bV9pb3JlbWFw
X3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkc2ktPnJlZ3MpKSB7CisJCXJldCA9
IFBUUl9FUlIoZHNpLT5yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBt
ZW1vcnk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+cGh5ID0gZGV2
bV9waHlfZ2V0KGRldiwgImRwaHkiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgeworCQlyZXQg
PSBQVFJfRVJSKGRzaS0+cGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1JUEkt
RFBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19k
ZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRFNJKTsKKwlpZiAoY29tcF9pZCA8IDAp
IHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBj
b21wX2lkKTsKKwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2lu
aXQoZGV2LCBkZXYtPm9mX25vZGUsICZkc2ktPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtf
ZHNpX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRp
YWxpemUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0
Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2kpOworCisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBk
ZXYtPmRldiwgJm10a19kc2lfY29tcG9uZW50X29wcyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rz
aV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2Rz
aSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9k
aXNhYmxlKGRzaSk7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RzaV9jb21wb25l
bnRfb3BzKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50
IG10a19kc2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kc2kg
KmRzaTsKKworCWRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX291dHB1dF9kc2lf
ZGlzYWJsZShkc2kpOworCURSTV9ERUJVR19EUklWRVIoImRzaSBzdXNwZW5kIHN1Y2Nlc3MhXG4i
KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kc2lfcmVzdW1lKHN0cnVjdCBk
ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2X2dldF9k
cnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9lbmFibGUoZHNpKTsKKwlEUk1fREVCVUdf
RFJJVkVSKCJkc2kgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKworCXJldHVybiAwOworfQorI2VuZGlm
CitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRrX2RzaV9wbV9vcHMsIG10a19kc2lfc3VzcGVu
ZCwgbXRrX2RzaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBt
dGtfZHNpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt
ZHNpIiB9LAorCXsgfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2
ZXIgPSB7CisJLnByb2JlID0gbXRrX2RzaV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2RzaV9yZW1v
dmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXRrLWRzaSIsCisJCS5vZl9tYXRjaF90YWJs
ZSA9IG10a19kc2lfb2ZfbWF0Y2gsCisJCS5wbSA9ICZtdGtfZHNpX3BtX29wcywKKwl9LAorfTsK
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjFlOGUzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg
YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1
ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j
bHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs
aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisKKyNk
ZWZpbmUgTUlQSVRYX0RTSV9DT04JCTB4MDAKKyNkZWZpbmUgUkdfRFNJX0xET0NPUkVfRU4JCUJJ
VCgwKQorI2RlZmluZSBSR19EU0lfQ0tHX0xET09VVF9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RT
SV9CQ0xLX1NFTAkJCSgzIDw8IDIpCisjZGVmaW5lIFJHX0RTSV9MRF9JRFhfU0VMCQkoNyA8PCA0
KQorI2RlZmluZSBSR19EU0lfUEhZQ0xLX1NFTAkJKDIgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX0RT
SUNMS19GUkVRX1NFTAkJQklUKDEwKQorI2RlZmluZSBSR19EU0lfTFBUWF9DTE1QX0VOCQlCSVQo
MTEpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9DTE9DS19MQU5FCTB4MDQKKyNkZWZpbmUgUkdfRFNJ
X0xOVENfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVENfQ0tMQU5FX0VOCQlC
SVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JUExVUzEJCUJJVCgyKQorI2RlZmluZSBS
R19EU0lfTE5UQ19MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhf
SU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBDRF9JUExVUwkJQklUKDUpCisj
ZGVmaW5lIFJHX0RTSV9MTlRDX0xQQ0RfSU1MVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5U
Q19SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUwCTB4
MDgKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ
X0xOVDBfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9JUExVUzEJ
CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5l
IFJHX0RTSV9MTlQwX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBD
RF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQQ0RfSU1JTlVTCQlCSVQoNikK
KyNkZWZpbmUgUkdfRFNJX0xOVDBfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElU
WF9EU0lfREFUQV9MQU5FMQkweDBjCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xET09VVF9FTgkJQklU
KDApCisjZGVmaW5lIFJHX0RTSV9MTlQxX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RT
SV9MTlQxX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JUExV
UzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UMV9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVm
aW5lIFJHX0RTSV9MTlQxX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMV9M
UENEX0lNSU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQxX1JUX0NPREUJCSgweGYgPDwg
OCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTIJMHgxMAorI2RlZmluZSBSR19EU0lf
TE5UMl9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMl9DS0xBTkVfRU4JCUJJ
VCgxKQorI2RlZmluZSBSR19EU0lfTE5UMl9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJH
X0RTSV9MTlQyX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9J
TUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UMl9MUENEX0lQTFVTCQlCSVQoNSkKKyNk
ZWZpbmUgUkdfRFNJX0xOVDJfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5U
Ml9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUzCTB4
MTQKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ
X0xOVDNfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9JUExVUzEJ
CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5l
IFJHX0RTSV9MTlQzX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBD
RF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQQ0RfSU1JTlVTCQlCSVQoNikK
KyNkZWZpbmUgUkdfRFNJX0xOVDNfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElU
WF9EU0lfVE9QX0NPTgkweDQwCisjZGVmaW5lIFJHX0RTSV9MTlRfSU5UUl9FTgkJQklUKDApCisj
ZGVmaW5lIFJHX0RTSV9MTlRfSFNfQklBU19FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlRf
SU1QX0NBTF9FTgkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlRfVEVTVE1PREVfRU4JCUJJVCgz
KQorI2RlZmluZSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERQkJKDB4ZiA8PCA0KQorI2RlZmluZSBS
R19EU0lfTE5UX0FJT19TRUwJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9QQURfVElFX0xPV19F
TgkJQklUKDExKQorI2RlZmluZSBSR19EU0lfREVCVUdfSU5QVVRfRU4JCUJJVCgxMikKKyNkZWZp
bmUgUkdfRFNJX1BSRVNFUlZFCQkJKDcgPDwgMTMpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9CR19D
T04JMHg0NAorI2RlZmluZSBSR19EU0lfQkdfQ09SRV9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RT
SV9CR19DS0VOCQkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9CR19ESVYJCQkoMHgzIDw8IDIpCisj
ZGVmaW5lIFJHX0RTSV9CR19GQVNUX0NIQVJHRQkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9WT1VU
X01TSwkJCSgweDNmZmZmIDw8IDUpCisjZGVmaW5lIFJHX0RTSV9WMTJfU0VMCQkJKDcgPDwgNSkK
KyNkZWZpbmUgUkdfRFNJX1YxMF9TRUwJCQkoNyA8PCA4KQorI2RlZmluZSBSR19EU0lfVjA3Ml9T
RUwJCQkoNyA8PCAxMSkKKyNkZWZpbmUgUkdfRFNJX1YwNF9TRUwJCQkoNyA8PCAxNCkKKyNkZWZp
bmUgUkdfRFNJX1YwMzJfU0VMCQkJKDcgPDwgMTcpCisjZGVmaW5lIFJHX0RTSV9WMDJfU0VMCQkJ
KDcgPDwgMjApCisjZGVmaW5lIFJHX0RTSV9CR19SMV9UUklNCQkoMHhmIDw8IDI0KQorI2RlZmlu
ZSBSR19EU0lfQkdfUjJfVFJJTQkJKDB4ZiA8PCAyOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1BM
TF9DT04wCTB4NTAKKyNkZWZpbmUgUkdfRFNJX01QUExMX1BMTF9FTgkJQklUKDApCisjZGVmaW5l
IFJHX0RTSV9NUFBMTF9ESVZfTVNLCQkoMHgxZmYgPDwgMSkKKyNkZWZpbmUgUkdfRFNJX01QUExM
X1BSRURJVgkJKDMgPDwgMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1RYRElWMAkJKDMgPDwgMykK
KyNkZWZpbmUgUkdfRFNJX01QUExMX1RYRElWMQkJKDMgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX01Q
UExMX1BPU0RJVgkJKDcgPDwgNykKKyNkZWZpbmUgUkdfRFNJX01QUExMX01PTlZDX0VOCQlCSVQo
MTApCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9NT05SRUZfRU4JCUJJVCgxMSkKKyNkZWZpbmUgUkdf
RFNJX01QUExMX1ZPRF9FTgkJQklUKDEyKQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjEJ
MHg1NAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTgkJQklUKDApCisjZGVmaW5lIFJH
X0RTSV9NUFBMTF9TRE1fU1NDX1BIX0lOSVQJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9T
RE1fU1NDX0VOCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfUFJECSgweGZm
ZmYgPDwgMTYpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMgkweDU4CisKKyNkZWZpbmUg
TUlQSVRYX0RTSV9QTExfUFdSCTB4NjgKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9QV1JfT04J
CUJJVCgwKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX0lTT19FTgkJQklUKDEpCisjZGVmaW5l
IFJHX0RTSV9NUFBMTF9TRE1fUFdSX0FDSwlCSVQoOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1NX
X0NUUkwJMHg4MAorI2RlZmluZSBTV19DVFJMX0VOCQkJQklUKDApCisKKyNkZWZpbmUgTUlQSVRY
X0RTSV9TV19DVFJMX0NPTjAJMHg4NAorI2RlZmluZSBTV19MTlRDX0xQVFhfUFJFX09FCQlCSVQo
MCkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX09FCQkJQklUKDEpCisjZGVmaW5lIFNXX0xOVENfTFBU
WF9QCQkJQklUKDIpCisjZGVmaW5lIFNXX0xOVENfTFBUWF9OCQkJQklUKDMpCisjZGVmaW5lIFNX
X0xOVENfSFNUWF9QUkVfT0UJCUJJVCg0KQorI2RlZmluZSBTV19MTlRDX0hTVFhfT0UJCQlCSVQo
NSkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX1pFUk9DTEsJCUJJVCg2KQorI2RlZmluZSBTV19MTlQw
X0xQVFhfUFJFX09FCQlCSVQoNykKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX09FCQkJQklUKDgpCisj
ZGVmaW5lIFNXX0xOVDBfTFBUWF9QCQkJQklUKDkpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9OCQkJ
QklUKDEwKQorI2RlZmluZSBTV19MTlQwX0hTVFhfUFJFX09FCQlCSVQoMTEpCisjZGVmaW5lIFNX
X0xOVDBfSFNUWF9PRQkJCUJJVCgxMikKKyNkZWZpbmUgU1dfTE5UMF9MUFJYX0VOCQkJQklUKDEz
KQorI2RlZmluZSBTV19MTlQxX0xQVFhfUFJFX09FCQlCSVQoMTQpCisjZGVmaW5lIFNXX0xOVDFf
TFBUWF9PRQkJCUJJVCgxNSkKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX1AJCQlCSVQoMTYpCisjZGVm
aW5lIFNXX0xOVDFfTFBUWF9OCQkJQklUKDE3KQorI2RlZmluZSBTV19MTlQxX0hTVFhfUFJFX09F
CQlCSVQoMTgpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9PRQkJCUJJVCgxOSkKKyNkZWZpbmUgU1df
TE5UMl9MUFRYX1BSRV9PRQkJQklUKDIwKQorI2RlZmluZSBTV19MTlQyX0xQVFhfT0UJCQlCSVQo
MjEpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9QCQkJQklUKDIyKQorI2RlZmluZSBTV19MTlQyX0xQ
VFhfTgkJCUJJVCgyMykKKyNkZWZpbmUgU1dfTE5UMl9IU1RYX1BSRV9PRQkJQklUKDI0KQorI2Rl
ZmluZSBTV19MTlQyX0hTVFhfT0UJCQlCSVQoMjUpCisKK3N0cnVjdCBtdGtfbWlwaV90eCB7CisJ
c3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqcmVnczsKKwl1bnNpZ25lZCBpbnQg
ZGF0YV9yYXRlOworCXN0cnVjdCBjbGtfaHcgcGxsX2h3OworCXN0cnVjdCBjbGsgKnBsbDsKK307
CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X21hc2soc3RydWN0IG10a19taXBpX3R4ICptaXBp
X3R4LCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywKKwkJCSAgICAgdTMyIGRhdGEpCit7CisJdTMyIHRl
bXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKKworCXdyaXRlbCgodGVtcCAmIH5t
YXNrKSB8IChkYXRhICYgbWFzayksIG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0
aWMgaW50IG10a19taXBpX3R4X3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0
cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19t
aXBpX3R4LAorCQkJCQkJICAgcGxsX2h3KTsKKwl1bnNpZ25lZCBpbnQgdHhkaXYsIHR4ZGl2MCwg
dHhkaXYxOworCXU2NCBwY3c7CisKKwlkZXZfZGJnKG1pcGlfdHgtPmRldiwgInByZXBhcmU6ICV1
IEh6XG4iLCBtaXBpX3R4LT5kYXRhX3JhdGUpOworCisJaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+
PSA1MDAwMDAwMDApIHsKKwkJdHhkaXYgPSAxOworCQl0eGRpdjAgPSAwOworCQl0eGRpdjEgPSAw
OworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDI1MDAwMDAwMCkgeworCQl0eGRp
diA9IDI7CisJCXR4ZGl2MCA9IDE7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4
LT5kYXRhX3JhdGUgPj0gMTI1MDAwMDAwKSB7CisJCXR4ZGl2ID0gNDsKKwkJdHhkaXYwID0gMjsK
KwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+IDYyMDAwMDAw
KSB7CisJCXR4ZGl2ID0gODsKKwkJdHhkaXYwID0gMjsKKwkJdHhkaXYxID0gMTsKKwl9IGVsc2Ug
aWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSA1MDAwMDAwMCkgeworCQl0eGRpdiA9IDE2OworCQl0
eGRpdjAgPSAyOworCQl0eGRpdjEgPSAyOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwor
CX0KKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkg
UkdfRFNJX1ZPVVRfTVNLIHwgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTiwKKwkJ
CSAoNCA8PCAyMCkgfCAoNCA8PCAxNykgfCAoNCA8PCAxNCkgfAorCQkJICg0IDw8IDExKSB8ICg0
IDw8IDgpIHwgKDQgPDwgNSkgfAorCQkJIFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVf
RU4pOworCisJdXNsZWVwX3JhbmdlKDMwLCAxMDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBp
X3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkgUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUgfCBS
R19EU0lfTE5UX0hTX0JJQVNfRU4sCisJCQkgKDggPDwgNCkgfCBSR19EU0lfTE5UX0hTX0JJQVNf
RU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NPTiwKKwkJCSBS
R19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOLAorCQkJIFJHX0RTSV9DS0df
TERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBp
X3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkgUkdfRFNJX01QUExMX1NETV9QV1JfT04gfCBS
R19EU0lfTVBQTExfU0RNX0lTT19FTiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTik7CisK
KwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9N
UFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJ
X1BMTF9DT04wLAorCQkJIFJHX0RTSV9NUFBMTF9UWERJVjAgfCBSR19EU0lfTVBQTExfVFhESVYx
IHwKKwkJCSBSR19EU0lfTVBQTExfUFJFRElWLAorCQkJICh0eGRpdjAgPDwgMykgfCAodHhkaXYx
IDw8IDUpKTsKKworCS8qCisJICogUExMIFBDVyBjb25maWcKKwkgKiBQQ1cgYml0IDI0fjMwID0g
aW50ZWdlciBwYXJ0IG9mIHBjdworCSAqIFBDVyBiaXQgMH4yMyA9IGZyYWN0aW9uYWwgcGFydCBv
ZiBwY3cKKwkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8oUmVmX2NsayoyKTsKKwkgKiBQb3N0
IERJViA9NCwgc28gbmVlZCBkYXRhX1JhdGUqNAorCSAqIFJlZl9jbGsgaXMgMjZNSHoKKwkgKi8K
KwlwY3cgPSAoKHU2NCltaXBpX3R4LT5kYXRhX3JhdGUgKiAyICogdHhkaXYpIDw8IDI0OworCXBj
dyAvPSAyNjAwMDAwMDsKKwl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQSVRYX0RTSV9Q
TExfQ09OMik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NP
TjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9GUkFfRU4sIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VO
KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwKKwkJ
CSBSR19EU0lfTVBQTExfUExMX0VOLCBSR19EU0lfTVBQTExfUExMX0VOKTsKKworCXVzbGVlcF9y
YW5nZSgyMCwgMTAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9Q
TExfQ09OMSwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1NTQ19FTiwgMCk7CisKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcGxsX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3
ICpodykKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBjb250YWluZXJfb2YoaHcs
IHN0cnVjdCBtdGtfbWlwaV90eCwKKwkJCQkJCSAgIHBsbF9odyk7CisKKwlkZXZfZGJnKG1pcGlf
dHgtPmRldiwgInVucHJlcGFyZVxuIik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J
UElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9QTExfRU4sIDApOworCisJbXRrX21pcGlf
dHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9QV1IsCisJCQkgUkdfRFNJX01QUExMX1NE
TV9JU09fRU4gfCBSR19EU0lfTVBQTExfU0RNX1BXUl9PTiwKKwkJCSBSR19EU0lfTVBQTExfU0RN
X0lTT19FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NP
TiwgUkdfRFNJX0xOVF9IU19CSUFTX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90
eCwgTUlQSVRYX0RTSV9DT04sCisJCQkgUkdfRFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERP
Q09SRV9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdf
Q09OLAorCQkJIFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4sIDApOworCisJbXRr
X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQTExf
RElWX01TSywgMCk7Cit9CisKK3N0YXRpYyBsb25nIG10a19taXBpX3R4X3BsbF9yb3VuZF9yYXRl
KHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgICAgIHVuc2ln
bmVkIGxvbmcgKnByYXRlKQoreworCXJldHVybiBjbGFtcF92YWwocmF0ZSwgNTAwMDAwMDAsIDEy
NTAwMDAwMDApOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZShzdHJ1
Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSAgICB1bnNpZ25lZCBsb25n
IHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IGNvbnRhaW5l
cl9vZihodywgc3RydWN0IG10a19taXBpX3R4LAorCQkJCQkJICAgcGxsX2h3KTsKKworCWRldl9k
YmcobWlwaV90eC0+ZGV2LCAic2V0IHJhdGU6ICVsdSBIelxuIiwgcmF0ZSk7CisKKwltaXBpX3R4
LT5kYXRhX3JhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBs
b25nIG10a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJ
CSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlw
aV90eCA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19taXBpX3R4LAorCQkJCQkJICAgcGxs
X2h3KTsKKwlyZXR1cm4gbWlwaV90eC0+ZGF0YV9yYXRlOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGNsa19vcHMgbXRrX21pcGlfdHhfcGxsX29wcyA9IHsKKwkucHJlcGFyZSA9IG10a19taXBp
X3R4X3BsbF9wcmVwYXJlLAorCS51bnByZXBhcmUgPSBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJl
LAorCS5yb3VuZF9yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRl
ID0gbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlLAorCS5yZWNhbGNfcmF0ZSA9IG10a19taXBpX3R4
X3BsbF9yZWNhbGNfcmF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb25f
c2lnbmFsKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgg
PSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQ
SVRYX0RTSV9DTE9DS19MQU5FLAorCQkJIFJHX0RTSV9MTlRDX0xET09VVF9FTiwgUkdfRFNJX0xO
VENfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFU
QV9MQU5FMCwKKwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIFJHX0RTSV9MTlQwX0xET09VVF9F
Tik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJ
CQkgUkdfRFNJX0xOVDFfTERPT1VUX0VOLCBSR19EU0lfTE5UMV9MRE9PVVRfRU4pOworCW10a19t
aXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUyLAorCQkJIFJHX0RTSV9M
TlQyX0xET09VVF9FTiwgUkdfRFNJX0xOVDJfTERPT1VUX0VOKTsKKwltdGtfbWlwaV90eF9tYXNr
KG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5UM19MRE9PVVRf
RU4sIFJHX0RTSV9MTlQzX0xET09VVF9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs
IE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX1BBRF9USUVfTE9XX0VOLCAwKTsKKworCXJldHVy
biAwOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBo
eSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5
KTsKKwlpbnQgcmV0OworCisJLyogUG93ZXIgdXAgY29yZSBhbmQgZW5hYmxlIFBMTCAqLworCXJl
dCA9IGNsa19wcmVwYXJlX2VuYWJsZShtaXBpX3R4LT5wbGwpOworCWlmIChyZXQgPCAwKQorCQly
ZXR1cm4gcmV0OworCisJLyogRW5hYmxlIERTSSBMYW5lIExETyBvdXRwdXRzLCBkaXNhYmxlIHBh
ZCB0aWUgbG93ICovCisJbXRrX21pcGlfdHhfcG93ZXJfb25fc2lnbmFsKHBoeSk7CisKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1
Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9k
cnZkYXRhKHBoeSk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9Q
X0NPTiwgUkdfRFNJX1BBRF9USUVfTE9XX0VOLAorCQkJIFJHX0RTSV9QQURfVElFX0xPV19FTik7
CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ0xPQ0tfTEFORSwKKwkJ
CSBSR19EU0lfTE5UQ19MRE9PVVRfRU4sIDApOworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwg
TUlQSVRYX0RTSV9EQVRBX0xBTkUwLAorCQkJIFJHX0RTSV9MTlQwX0xET09VVF9FTiwgMCk7CisJ
bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJCQkgUkdf
RFNJX0xOVDFfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU
WF9EU0lfREFUQV9MQU5FMiwKKwkJCSBSR19EU0lfTE5UMl9MRE9PVVRfRU4sIDApOworCW10a19t
aXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUzLAorCQkJIFJHX0RTSV9M
TlQzX0xET09VVF9FTiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb2Zm
KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlf
Z2V0X2RydmRhdGEocGh5KTsKKworCS8qIEVuYWJsZSBwYWQgdGllIGxvdywgZGlzYWJsZSBEU0kg
TGFuZSBMRE8gb3V0cHV0cyAqLworCW10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwocGh5KTsK
KworCS8qIERpc2FibGUgUExMIGFuZCBwb3dlciBkb3duIGNvcmUgKi8KKwljbGtfZGlzYWJsZV91
bnByZXBhcmUobWlwaV90eC0+cGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg
c3RydWN0IHBoeV9vcHMgbXRrX21pcGlfdHhfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19taXBp
X3R4X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYgPSBtdGtfbWlwaV90eF9wb3dlcl9vZmYsCisJLm93
bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Byb2JlKHN0
cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk
ZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHg7CisJc3RydWN0IHJlc291cmNl
ICptZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFyICpyZWZfY2xrX25hbWU7
CisJc3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5vcHMgPSAmbXRrX21pcGlf
dHhfcGxsX29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9uYW1lcyA9IChjb25z
dCBjaGFyICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVf
R0FURSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlf
cHJvdmlkZXI7CisJaW50IHJldDsKKworCW1pcGlfdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl
b2YoKm1pcGlfdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1pcGlfdHgpCisJCXJldHVybiAtRU5P
TUVNOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVN
LCAwKTsKKwltaXBpX3R4LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsK
KwlpZiAoSVNfRVJSKG1pcGlfdHgtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+
cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVk
XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQo
ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVm
X2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVk
XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRf
bmFtZShyZWZfY2xrKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zf
bm9kZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUpOwor
CWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0
cHV0LW5hbWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltaXBpX3R4LT5w
bGxfaHcuaW5pdCA9ICZjbGtfaW5pdDsKKwltaXBpX3R4LT5wbGwgPSBkZXZtX2Nsa19yZWdpc3Rl
cihkZXYsICZtaXBpX3R4LT5wbGxfaHcpOworCWlmIChJU19FUlIobWlwaV90eC0+cGxsKSkgewor
CQlyZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnBsbCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv
IHJlZ2lzdGVyIFBMTDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGh5ID0g
ZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19taXBpX3R4X29wcyk7CisJaWYgKElTX0VS
UihwaHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gY3JlYXRlIE1JUEkgRC1QSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlw
aHlfc2V0X2RydmRhdGEocGh5LCBtaXBpX3R4KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2Zf
cGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisJaWYgKElT
X0VSUihwaHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKwkJcmV0dXJuIHJl
dDsKKwl9CisKKwltaXBpX3R4LT5kZXYgPSBkZXY7CisKKwlyZXR1cm4gb2ZfY2xrX2FkZF9wcm92
aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwKKwkJCQkgICBtaXBpX3R4
LT5wbGwpOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3JlbW92ZShzdHJ1Y3QgcGxhdGZv
cm1fZGV2aWNlICpwZGV2KQoreworCW9mX2Nsa19kZWxfcHJvdmlkZXIocGRldi0+ZGV2Lm9mX25v
ZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBt
dGtfbWlwaV90eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTcz
LW1pcGktdHgiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlw
aV90eF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX21pcGlfdHhfcHJvYmUsCisJLnJlbW92ZSA9
IG10a19taXBpX3R4X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1t
aXBpLXR4IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX21pcGlfdHhfbWF0Y2gsCisJfSwKK307
Ci0tIAoyLjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn
Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs
Cg==