From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v14 3/8] drm/mediatek: Add DSI sub driver
Date: Mon, 11 Apr 2016 17:09:31 +0200
Message-ID: <1460387376-11799-4-git-send-email-p.zabel@pengutronix.de>
References: <1460387376-11799-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1460387376-11799-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0KQ2hhbmdlcyBzaW5jZSB2MTM6CiAtIENyZWF0ZSBjb25u
ZWN0b3IgaW4gc2VwYXJhdGUgZnVuY3Rpb24KIC0gUmVtb3ZlIHN1c3BlbmQvcmVzdW1lIGZ1bmN0
aW9ucwogLSBBZGQgbWlwaV90eF9zZXQvY2xlYXJfYml0cyBmdW5jdGlvbnMsIHJlbmFtZSBfbWFz
ayB0byBfdXBkYXRlX2JpdHMKIC0gQ29uc29saWRhdGUgZHVwbGljYXRlZCBSR19EU0lfTE5UW0Mw
MTIzNF0gcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL0tjb25maWcgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm
aWxlICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5j
IHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIHwgICAyICsK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgICAgIHwgOTI3ICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBp
X3R4LmMgfCA0NjMgKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMzk5IGluc2Vy
dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19taXBpX3R4LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDhk
YWQ4OTIuLjBjNDlhOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u
ZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0zLDYgKzMsOCBA
QCBjb25maWcgRFJNX01FRElBVEVLCiAJZGVwZW5kcyBvbiBEUk0KIAlkZXBlbmRzIG9uIEFSQ0hf
TUVESUFURUsgfHwgKEFSTSAmJiBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVS
CisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUwKIAlzZWxlY3QgSU9NTVVf
RE1BCiAJc2VsZWN0IE1US19TTUkKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5k
ZXggZDRiZGU3Yy4uZTc4MWRiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTYs
NiArNiw4IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKIAkJICBtdGtfZHJt
X2Rydi5vIFwKIAkJICBtdGtfZHJtX2ZiLm8gXAogCQkgIG10a19kcm1fZ2VtLm8gXAotCQkgIG10
a19kcm1fcGxhbmUubworCQkgIG10a19kcm1fcGxhbmUubyBcCisJCSAgbXRrX2RzaS5vIFwKKwkJ
ICBtdGtfbWlwaV90eC5vCiAKIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVr
LWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCmluZGV4IGY3NDllN2Eu
LmFiYjhmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry
di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCkBAIC01MjMs
NiArNTIzLDggQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJt
X2RyaXZlcnNbXSA9IHsKIAkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCiAJJm10a19kaXNwX292
bF9kcml2ZXIsCiAJJm10a19kaXNwX3JkbWFfZHJpdmVyLAorCSZtdGtfZHNpX2RyaXZlciwKKwkm
bXRrX21pcGlfdHhfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0
KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
aCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmluZGV4IGZiNjAwNTcu
LjFmMjJlYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry
di5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC01Miw1
ICs1Miw3IEBAIHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgewogCiBleHRlcm4gc3RydWN0IHBsYXRm
b3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9k
cml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl
ciBtdGtfZHNpX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBp
X3R4X2RyaXZlcjsKIAogI2VuZGlmIC8qIE1US19EUk1fRFJWX0ggKi8KZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZThmZjUK
LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCkBA
IC0wLDAgKzEsOTI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor
I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+
CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlw
aV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xr
Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K
KyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBo
Lmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt
X2RldmljZS5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSAibXRr
X2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERTSV9WSURFT19GSUZPX0RFUFRICSgxOTIwIC8g
NCkKKyNkZWZpbmUgRFNJX0hPU1RfRklGT19ERVBUSAk2NAorCisjZGVmaW5lIERTSV9TVEFSVAkJ
MHgwMAorCisjZGVmaW5lIERTSV9DT05fQ1RSTAkJMHgxMAorI2RlZmluZSBEU0lfUkVTRVQJCQlC
SVQoMCkKKyNkZWZpbmUgRFNJX0VOCQkJCUJJVCgxKQorCisjZGVmaW5lIERTSV9NT0RFX0NUUkwJ
CTB4MTQKKyNkZWZpbmUgTU9ERQkJCQkoMykKKyNkZWZpbmUgQ01EX01PREUJCQkwCisjZGVmaW5l
IFNZTkNfUFVMU0VfTU9ERQkJCTEKKyNkZWZpbmUgU1lOQ19FVkVOVF9NT0RFCQkJMgorI2RlZmlu
ZSBCVVJTVF9NT0RFCQkJMworI2RlZmluZSBGUk1fTU9ERQkJCUJJVCgxNikKKyNkZWZpbmUgTUlY
X01PREUJCQlCSVQoMTcpCisKKyNkZWZpbmUgRFNJX1RYUlhfQ1RSTAkJMHgxOAorI2RlZmluZSBW
Q19OVU0JCQkJKDIgPDwgMCkKKyNkZWZpbmUgTEFORV9OVU0JCQkoMHhmIDw8IDIpCisjZGVmaW5l
IERJU19FT1QJCQkJQklUKDYpCisjZGVmaW5lIE5VTExfRU4JCQkJQklUKDcpCisjZGVmaW5lIFRF
X0ZSRUVSVU4JCQlCSVQoOCkKKyNkZWZpbmUgRVhUX1RFX0VOCQkJQklUKDkpCisjZGVmaW5lIEVY
VF9URV9FREdFCQkJQklUKDEwKQorI2RlZmluZSBNQVhfUlROX1NJWkUJCQkoMHhmIDw8IDEyKQor
I2RlZmluZSBIU1RYX0NLTFBfRU4JCQlCSVQoMTYpCisKKyNkZWZpbmUgRFNJX1BTQ1RSTAkJMHgx
YworI2RlZmluZSBEU0lfUFNfV0MJCQkweDNmZmYKKyNkZWZpbmUgRFNJX1BTX1NFTAkJCSgzIDw8
IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1CQkoMCA8PCAxNikKKyNkZWZpbmUg
TE9PU0VMWV9QU18xOEJJVF9SR0I2NjYJCSgxIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMThC
SVRfUkdCNjY2CQkoMiA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzI0QklUX1JHQjg4OAkJKDMg
PDwgMTYpCisKKyNkZWZpbmUgRFNJX1ZTQV9OTAkJMHgyMAorI2RlZmluZSBEU0lfVkJQX05MCQkw
eDI0CisjZGVmaW5lIERTSV9WRlBfTkwJCTB4MjgKKyNkZWZpbmUgRFNJX1ZBQ1RfTkwJCTB4MkMK
KyNkZWZpbmUgRFNJX0hTQV9XQwkJMHg1MAorI2RlZmluZSBEU0lfSEJQX1dDCQkweDU0CisjZGVm
aW5lIERTSV9IRlBfV0MJCTB4NTgKKworI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQKKwor
I2RlZmluZSBEU0lfUEhZX0xDQ09OCQkweDEwNAorI2RlZmluZSBMQ19IU19UWF9FTgkJCUJJVCgw
KQorI2RlZmluZSBMQ19VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExDX1dBS0VVUF9FTgkJCUJJ
VCgyKQorCisjZGVmaW5lIERTSV9QSFlfTEQwQ09OCQkweDEwOAorI2RlZmluZSBMRDBfSFNfVFhf
RU4JCQlCSVQoMCkKKyNkZWZpbmUgTEQwX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTEQwX1dB
S0VVUF9FTgkJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjAJMHgxMTAKKyNkZWZp
bmUgTFBYCQkJCSgweGZmIDw8IDApCisjZGVmaW5lIEhTX1BSUFIJCQkJKDB4ZmYgPDwgOCkKKyNk
ZWZpbmUgSFNfWkVSTwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgSFNfVFJBSUwJCQkoMHhmZiA8
PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04xCTB4MTE0CisjZGVmaW5lIFRBX0dPCQkJ
CSgweGZmIDw8IDApCisjZGVmaW5lIFRBX1NVUkUJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgVEFf
R0VUCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBEQV9IU19FWElUCQkJKDB4ZmYgPDwgMjQpCisK
KyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMgkweDExOAorI2RlZmluZSBDT05UX0RFVAkJCSgweGZm
IDw8IDApCisjZGVmaW5lIENMS19aRVJPCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIENMS19UUkFJ
TAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjMJMHgxMWMKKyNkZWZp
bmUgQ0xLX0hTX1BSUFIJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBDTEtfSFNfUE9TVAkJCSgweGZm
IDw8IDgpCisjZGVmaW5lIENMS19IU19FWElUCQkJKDB4ZmYgPDwgMTYpCisKKyNkZWZpbmUgTlNf
VE9fQ1lDTEUobiwgYykgICAgKChuKSAvIChjKSArICgoKG4pICUgKGMpKSA/IDEgOiAwKSkKKwor
c3RydWN0IHBoeTsKKworc3RydWN0IG10a19kc2kgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAgZGRw
X2NvbXA7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGhvc3Q7
CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29u
bjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl
OworCXN0cnVjdCBwaHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsKKworCXN0cnVjdCBj
bGsgKmVuZ2luZV9jbGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisJc3RydWN0IGNsayAq
aHNfY2xrOworCisJdTMyIGRhdGFfcmF0ZTsKKworCXVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsK
KwllbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWduZWQgaW50IGxhbmVz
OworCXN0cnVjdCB2aWRlb21vZGUgdm07CisJaW50IHJlZmNvdW50OworCWJvb2wgZW5hYmxlZDsK
K307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVj
dCBkcm1fZW5jb2RlciAqZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCBtdGtf
ZHNpLCBlbmNvZGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RzaSAqY29ubmVj
dG9yX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVy
X29mKGMsIHN0cnVjdCBtdGtfZHNpLCBjb25uKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg
bXRrX2RzaSAqaG9zdF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QgKmgpCit7CisJcmV0dXJu
IGNvbnRhaW5lcl9vZihoLCBzdHJ1Y3QgbXRrX2RzaSwgaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kc2lfbWFzayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIgb2Zmc2V0LCB1MzIgbWFzaywg
dTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJlZ3MgKyBvZmZzZXQpOworCisJ
d3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgZHNpLT5yZWdzICsgb2Zmc2V0
KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BoeV90aW1jb25maWcoc3RydWN0IG10a19kc2kgKmRz
aSkKK3sKKwl1MzIgdGltY29uMCwgdGltY29uMSwgdGltY29uMiwgdGltY29uMzsKKwl1bnNpZ25l
ZCBpbnQgdWksIGN5Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxweDsKKworCXVpID0gMTAwMCAv
IGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0gODAwMCAvIGRzaS0+ZGF0YV9y
YXRlICsgMHgwMTsKKwlscHggPSA1OworCisJdGltY29uMCA9ICg4IDw8IDI0KSB8ICgweGEgPDwg
MTYpIHwgKDB4NiA8PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcgPDwgMjQpIHwgKDUgKiBscHgg
PDwgMTYpIHwgKCgzICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0ICogbHB4KTsKKwl0aW1jb24y
ID0gKChOU19UT19DWUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4YSkgPDwgMjQpIHwKKwkJICAo
TlNfVE9fQ1lDTEUoMHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsKKwl0aW1jb24zID0gKDIgKiBs
cHgpIDw8IDE2IHwgTlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBjeWNsZV90aW1lKSA8PCA4IHwK
KwkJICAgTlNfVE9fQ1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisKKwl3cml0ZWwodGltY29uMCwg
ZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVsKHRpbWNvbjEsIGRzaS0+cmVn
cyArIERTSV9QSFlfVElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24yLCBkc2ktPnJlZ3MgKyBEU0lf
UEhZX1RJTUVDT04yKTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1F
Q09OMyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpk
c2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lfRU4sIERTSV9FTik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQor
eworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCAwKTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lf
bWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lfUkVTRVQpOworCW10a19kc2lf
bWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsKK30KKworc3RhdGljIGludCBt
dGtfZHNpX3Bvd2Vyb24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpk
ZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNpLT5yZWZjb3VudCAhPSAxKQor
CQlyZXR1cm4gMDsKKworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChwaXhlbF9jbG9jayAvIDEwMDAp
ICogcGl4ZWxfZGlwdGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVsX2Nsb2NrIHVuaXQgaXMgS2h6
LCBkYXRhX3JhdGEgdW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRlIDEwMDAuCisJICogbWlwaV9y
YXRpbyBpcyBtaXBpIGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5jZSB0aGUgcGl4ZWwgY2xrIGlu
IG1pcGkuCisJICogd2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4KKwkgKi8KKwlkc2ktPmRhdGFf
cmF0ZSA9IGRzaS0+dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgxICogMTAwMCAqIDEwKTsKKwor
CXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5kYXRhX3JhdGUgKiAxMDAwMDAw
KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgZGF0YSBy
YXRlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVmY291bnQ7CisJfQorCisJcGh5X3Bvd2Vy
X29uKGRzaS0+cGh5KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmVuZ2luZV9j
bGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBl
bmdpbmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waHlfcG93ZXJfb2ZmOworCX0K
KworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xrKTsKKwlpZiAocmV0
IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCBjbG9jazog
JWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rpc2FibGVfZW5naW5lX2NsazsKKwl9CisKKwltdGtf
ZHNpX2VuYWJsZShkc2kpOworCW10a19kc2lfcmVzZXQoZHNpKTsKKwlkc2lfcGh5X3RpbWNvbmZp
Zyhkc2kpOworCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX2VuZ2luZV9jbGs6CisJY2xrX2Rp
c2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5lX2Nsayk7CitlcnJfcGh5X3Bvd2VyX29mZjoKKwlw
aHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK2Vycl9yZWZjb3VudDoKKwlkc2ktPnJlZmNvdW50LS07
CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9lbnRlcihz
dHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04s
IExDX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19V
TFBNX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9sZWF2ZShzdHJ1
Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExD
X1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VV
UF9FTiwgTENfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBM
Q19XQUtFVVBfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfZW50
ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xE
MENPTiwgTEQwX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENP
TiwgTEQwX1VMUE1fRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVf
bGVhdmUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZ
X0xEMENPTiwgTEQwX1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQw
Q09OLCBMRDBfV0FLRVVQX0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBE
U0lfUEhZX0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGRzaV9j
bGtfaHNfc3RhdGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzE7CisKKwl0
bXBfcmVnMSA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOworCXJldHVybiAoKHRt
cF9yZWcxICYgTENfSFNfVFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMg
dm9pZCBkc2lfY2xrX2hzX21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9vbCBlbnRlcikKK3sK
KwlpZiAoZW50ZXIgJiYgIWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRz
aSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsKKwllbHNlIGlmICgh
ZW50ZXIgJiYgZHNpX2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lf
UEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9k
ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENNRF9NT0RFOworCisJ
aWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJdmlkX21vZGUg
PSBTWU5DX1BVTFNFX01PREU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9N
T0RFX1ZJREVPX0JVUlNUKSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9N
T0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9NT0RFOworCX0KKwor
CXdyaXRlbCh2aWRfbW9kZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7Cit9CisKK3N0YXRp
YyB2b2lkIGRzaV9wc19jb250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1
Y3QgdmlkZW9tb2RlICp2bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2JwcCwgcHNfd2M7CisJ
dTMyIHBzX2JwcF9tb2RlOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1
NjUpCisJCWRzaV9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBwID0gMzsKKworCXBz
X3djID0gdm0tPmhhY3RpdmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9kZSA9IHBzX3djOwor
CisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJ
cHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBN
SVBJX0RTSV9GTVRfUkdCNjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMThCSVRfUkdC
NjY2OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlwc19i
cHBfbW9kZSB8PSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJ
X0RTSV9GTVRfUkdCNTY1OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1
OworCQlicmVhazsKKwl9CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+cmVncyArIERTSV9W
QUNUX05MKTsKKwl3cml0ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOwor
CXdyaXRlbChwc193YywgZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsKK30KKworc3RhdGlj
IHZvaWQgZHNpX3J4dHhfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBf
cmVnOworCisJc3dpdGNoIChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0bXBfcmVnID0gMSA8
PCAyOworCQlicmVhazsKKwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7CisJCWJyZWFrOwor
CWNhc2UgMzoKKwkJdG1wX3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0bXBf
cmVnID0gMHhmIDw8IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSAweGYgPDwg
MjsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9UWFJY
X0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAq
ZHNpKQoreworCXVuc2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMyIHRtcF9yZWc7CisK
Kwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl0
bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsK
KwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBfcmVnID0gTE9PU0VM
WV9QU18xOEJJVF9SR0I2NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNh
c2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMThC
SVRfUkdCNjY2OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElf
RFNJX0ZNVF9SR0I1NjU6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlk
c2lfdG1wX2J1Zl9icHAgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gUEFD
S0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJ
fQorCisJdG1wX3JlZyArPSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1Zl9icHAgJiBEU0lf
UFNfV0M7CisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworfQorCitz
dGF0aWMgdm9pZCBkc2lfY29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sK
Kwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOworCXVuc2lnbmVkIGlu
dCBob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Zy
b250cG9yY2hfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCisJc3RydWN0
IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1hdCA9PSBNSVBJX0RT
SV9GTVRfUkdCNTY1KQorCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UKKwkJZHNpX3RtcF9i
dWZfYnBwID0gMzsKKworCXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJlZ3MgKyBEU0lfVlNB
X05MKTsKKwl3cml0ZWwodm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkJQX05MKTsK
Kwl3cml0ZWwodm0tPnZmcm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZGUF9OTCk7CisJd3Jp
dGVsKHZtLT52YWN0aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisKKwlob3Jpem9udGFs
X3N5bmNfYWN0aXZlX2J5dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBfYnVmX2JwcCAtIDEw
KTsKKworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVM
U0UpCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5oYmFja19wb3JjaCAq
IGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5
dGUgPSAoKHZtLT5oYmFja19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJCWRzaV90bXBfYnVm
X2JwcCAtIDEwKTsKKworCWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0gKHZtLT5oZnJvbnRf
cG9yY2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9yaXpvbnRhbF9zeW5j
X2FjdGl2ZV9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRh
bF9iYWNrcG9yY2hfYnl0ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJd3JpdGVsKGhvcml6
b250YWxfZnJvbnRwb3JjaF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dDKTsKKworCWRzaV9w
c19jb250cm9sKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3RhcnQoc3RydWN0IG10
a19kc2kgKmRzaSkKK3sKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKKwl3cml0
ZWwoMSwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9w
b3dlcm9mZihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09OKGRzaS0+cmVmY291
bnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQgIT0gMCkKKwkJcmV0
dXJuOworCisJZHNpX2xhbmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNpX2Nsa191bHBfbW9k
ZV9lbnRlcihkc2kpOworCisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwljbGtfZGlzYWJsZV91
bnByZXBhcmUoZHNpLT5lbmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5k
aWdpdGFsX2Nsayk7CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30KKworc3RhdGljIHZv
aWQgbXRrX291dHB1dF9kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJl
dDsKKworCWlmIChkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7
CisJCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJm
YWlsZWQgdG8gc2V0dXAgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJl
dCA9IG10a19kc2lfcG93ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigi
ZmFpbGVkIHRvIHBvd2VyIG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkc2lfcnh0eF9j
b250cm9sKGRzaSk7CisKKwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2xhbmUw
X3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMCk7CisJZHNpX3Nl
dF9tb2RlKGRzaSk7CisKKwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJZHNpX2NvbmZpZ192
ZG9fdGltaW5nKGRzaSk7CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUo
ZHNpLCAxKTsKKworCW10a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0IG10a19kc2kg
KmRzaSkKK3sKKwlpZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFu
ZWwpIHsKKwkJaWYgKGRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJS
T1IoImZhaWxlZCB0byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9
CisKKwltdGtfZHNpX3Bvd2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVy
ICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRp
YyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2Z1bmNzID0g
eworCS5kZXN0cm95ID0gbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgYm9v
bCBtdGtfZHNpX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIs
CisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAg
ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBk
cm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt
b2RlLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0
cnVjdCBtdGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWRzaS0+dm0u
cGl4ZWxjbG9jayA9IGFkanVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3RpdmUgPSBhZGp1c3Rl
ZC0+aGRpc3BsYXk7CisJZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVkLT5odG90YWwgLSBh
ZGp1c3RlZC0+aHN5bmNfZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0gYWRqdXN0ZWQtPmhz
eW5jX3N0YXJ0IC0gYWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5bmNfbGVuID0gYWRq
dXN0ZWQtPmhzeW5jX2VuZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKworCWRzaS0+dm0udmFj
dGl2ZSA9IGFkanVzdGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3BvcmNoID0gYWRqdXN0
ZWQtPnZ0b3RhbCAtIGFkanVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52ZnJvbnRfcG9yY2gg
PSBhZGp1c3RlZC0+dnN5bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52
c3luY19sZW4gPSBhZGp1c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0Owor
fQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29k
ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVu
Y29kZXIpOworCisJbXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHNpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sK
KwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtf
b3V0cHV0X2RzaV9lbmFibGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z
dGF0dXMgbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj
b25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVj
dGVkOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBk
cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNv
bm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj
b25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29u
bmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQor
CitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29k
ZXIoCisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19k
c2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAmZHNpLT5l
bmNvZGVyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5j
cyBtdGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gbXRrX2Rz
aV9lbmNvZGVyX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9lbmNvZGVyX21vZGVf
c2V0LAorCS5kaXNhYmxlID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IG10
a19kc2lfZW5jb2Rlcl9lbmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25u
ZWN0b3JfZnVuY3MgbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRv
bWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2RzaV9jb25uZWN0b3Jf
ZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9y
X21vZGVzLAorCS5kZXN0cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQg
PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVf
c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5h
dG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95
X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9m
dW5jcworCW10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0g
bXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfZHNpX2Nv
bm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fYXR0YWNoX2Jy
aWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBzdHJ1Y3QgZHJtX2VuY29kZXIg
KmVuY29kZXIpCit7CisJaW50IHJldDsKKworCWlmICghYnJpZGdlKQorCQlyZXR1cm4gLUVOT0VO
VDsKKworCWVuY29kZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVuY29kZXIgPSBlbmNv
ZGVyOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwgYnJpZGdlKTsKKwlp
ZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UgdG8gZHJtXG4i
KTsKKwkJZW5jb2Rlci0+YnJpZGdlID0gTlVMTDsKKwkJYnJpZGdlLT5lbmNvZGVyID0gTlVMTDsK
Kwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5l
Y3RvcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlu
dCByZXQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5jb25uLCAmbXRr
X2RzaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOworCWlm
IChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIGluaXQgdG8gZHJtXG4i
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+
Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fY29u
bmVjdG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJG
YWlsZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVyIHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Nvbm5l
Y3Rvcl9jbGVhbnVwOworCX0KKworCWRzaS0+Y29ubi5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7
CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPmNvbm4sICZkc2ktPmVu
Y29kZXIpOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChk
c2ktPnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWls
ZWQgdG8gYXR0YWNoIHBhbmVsIHRvIGRybVxuIik7CisJCQlnb3RvIGVycl9jb25uZWN0b3JfdW5y
ZWdpc3RlcjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfY29ubmVjdG9yX3VucmVnaXN0
ZXI6CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZkc2ktPmNvbm4pOworZXJyX2Nvbm5lY3Rv
cl9jbGVhbnVwOgorCWRybV9jb25uZWN0b3JfY2xlYW51cCgmZHNpLT5jb25uKTsKKwlyZXR1cm4g
cmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBkcm1f
ZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCXJldCA9
IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2Z1
bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKKwlpZiAocmV0KSB7
CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuY29kZXIgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1
cm4gcmV0OworCX0KKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsICZtdGtf
ZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCS8qCisJICogQ3VycmVudGx5IGRpc3BsYXkg
ZGF0YSBwYXRocyBhcmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byBhIGNydGMgZWFjaC4KKwkgKiBj
cnRjIDAgaXMgT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4g
RFNJMAorCSAqLworCWRzaS0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9IDE7CisKKwkvKiBJZiB0
aGVyZSdzIGEgYnJpZGdlLCBhdHRhY2ggdG8gaXQgYW5kIGxldCBpdCBjcmVhdGUgdGhlIGNvbm5l
Y3RvciAqLworCXJldCA9IG10a19kcm1fYXR0YWNoX2JyaWRnZShkc2ktPmJyaWRnZSwgJmRzaS0+
ZW5jb2Rlcik7CisJaWYgKHJldCkgeworCQkvKiBPdGhlcndpc2UgY3JlYXRlIG91ciBvd24gY29u
bmVjdG9yIGFuZCBhdHRhY2ggdG8gYSBwYW5lbCAqLworCQlyZXQgPSBtdGtfZHNpX2NyZWF0ZV9j
b25uZWN0b3IoZHJtLCBkc2kpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZW5jb2Rlcl9jbGVh
bnVwOworCX0KKworCXJldHVybiAwOworCitlcnJfZW5jb2Rlcl9jbGVhbnVwOgorCWRybV9lbmNv
ZGVyX2NsZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RzaV9kZXN0cm95X2Nvbm5fZW5jKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJZHJt
X2VuY29kZXJfY2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKKwkvKiBTa2lwIGNvbm5lY3RvciBjbGVh
bnVwIGlmIGNyZWF0aW9uIHdhcyBkZWxlZ2F0ZWQgdG8gdGhlIGJyaWRnZSAqLworCWlmIChkc2kt
PmNvbm4uZGV2KSB7CisJCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmZHNpLT5jb25uKTsKKwkJ
ZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZkc2ktPmNvbm4pOworCX0KK30KKworc3RhdGljIHZvaWQg
bXRrX2RzaV9kZHBfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3Qg
bXRrX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHNpLCBkZHBfY29t
cCk7CisKKwltdGtfZHNpX3Bvd2Vyb24oZHNpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9k
ZHBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHNpICpk
c2kgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kc2ksIGRkcF9jb21wKTsKKworCW10
a19kc2lfcG93ZXJvZmYoZHNpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv
bXBfZnVuY3MgbXRrX2RzaV9mdW5jcyA9IHsKKwkuc3RhcnQgPSBtdGtfZHNpX2RkcF9zdGFydCwK
Kwkuc3RvcCA9IG10a19kc2lfZGRwX3N0b3AsCit9OworCitzdGF0aWMgaW50IG10a19kc2lfaG9z
dF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkgICAgICAgc3RydWN0IG1p
cGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBob3N0X3Rv
X2RzaShob3N0KTsKKworCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOworCWRzaS0+Zm9ybWF0
ID0gZGV2aWNlLT5mb3JtYXQ7CisJZHNpLT5tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdz
OworCisJaWYgKGRzaS0+Y29ubi5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkc2kt
PmNvbm4uZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kc2lfaG9zdF9k
ZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkgICAgICAgc3RydWN0IG1pcGlf
ZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBob3N0X3RvX2Rz
aShob3N0KTsKKworCWlmIChkc2ktPmNvbm4uZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZl
bnQoZHNpLT5jb25uLmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj
dCBtaXBpX2RzaV9ob3N0X29wcyBtdGtfZHNpX29wcyA9IHsKKwkuYXR0YWNoID0gbXRrX2RzaV9o
b3N0X2F0dGFjaCwKKwkuZGV0YWNoID0gbXRrX2RzaV9ob3N0X2RldGFjaCwKK307CisKK3N0YXRp
YyBpbnQgbXRrX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz
dGVyLCB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9
IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJ
cmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCWlmIChy
ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAl
czogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJl
dDsKKwl9CisKKwlyZXQgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmhvc3QpOworCWlm
IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERTSSBob3N0
OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZGRwX2NvbXBfdW5yZWdpc3RlcjsKKwl9CisKKwly
ZXQgPSBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhkcm0sIGRzaSk7CisJaWYgKHJldCkgeworCQlE
Uk1fRVJST1IoIkVuY29kZXIgY3JlYXRlIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlnb3Rv
IGVycl91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwlt
aXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+aG9zdCk7CitlcnJfZGRwX2NvbXBfdW5yZWdp
c3RlcjoKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21wKTsKKwly
ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNl
ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3Ry
dWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGRldl9n
ZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2RzaV9kZXN0cm95X2Nvbm5fZW5jKGRzaSk7CisJbWlw
aV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmhvc3QpOworCW10a19kZHBfY29tcF91bnJlZ2lz
dGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBv
bmVudF9vcHMgbXRrX2RzaV9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gbXRrX2RzaV9iaW5k
LAorCS51bmJpbmQgPSBtdGtfZHNpX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9w
cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpk
c2k7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25v
ZGUgKnJlbW90ZV9ub2RlLCAqZW5kcG9pbnQ7CisJc3RydWN0IHJlc291cmNlICpyZWdzOworCWlu
dCBjb21wX2lkOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo
KmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRz
aS0+aG9zdC5vcHMgPSAmbXRrX2RzaV9vcHM7CisJZHNpLT5ob3N0LmRldiA9IGRldjsKKworCWVu
ZHBvaW50ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsK
KwlpZiAoZW5kcG9pbnQpIHsKKwkJcmVtb3RlX25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3Bv
cnRfcGFyZW50KGVuZHBvaW50KTsKKwkJaWYgKCFyZW1vdGVfbm9kZSkgeworCQkJZGV2X2Vycihk
ZXYsICJObyBwYW5lbCBjb25uZWN0ZWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwor
CQlkc2ktPmJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGVfbm9kZSk7CisJCWRzaS0+
cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChyZW1vdGVfbm9kZSk7CisJCW9mX25vZGVfcHV0KHJl
bW90ZV9ub2RlKTsKKwkJaWYgKCFkc2ktPmJyaWRnZSAmJiAhZHNpLT5wYW5lbCkgeworCQkJZGV2
X2luZm8oZGV2LCAiV2FpdGluZyBmb3IgYnJpZGdlIG9yIHBhbmVsIGRyaXZlclxuIik7CisJCQly
ZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0KKworCWRzaS0+ZW5naW5lX2NsayA9IGRldm1f
Y2xrX2dldChkZXYsICJlbmdpbmUiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ZW5naW5lX2NsaykpIHsK
KwkJcmV0ID0gUFRSX0VSUihkc2ktPmVuZ2luZV9jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxl
ZCB0byBnZXQgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK
Kwlkc2ktPmRpZ2l0YWxfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImRpZ2l0YWwiKTsKKwlpZiAo
SVNfRVJSKGRzaS0+ZGlnaXRhbF9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5kaWdpdGFs
X2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBkaWdpdGFsIGNsb2NrOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPmhzX2NsayA9IGRldm1fY2xrX2dl
dChkZXYsICJocyIpOworCWlmIChJU19FUlIoZHNpLT5oc19jbGspKSB7CisJCXJldCA9IFBUUl9F
UlIoZHNpLT5oc19jbGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgaHMgY2xvY2s6
ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRf
cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRzaS0+cmVncyA9IGRldm1faW9y
ZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZHNpLT5yZWdzKSkgeworCQly
ZXQgPSBQVFJfRVJSKGRzaS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVt
YXAgbWVtb3J5OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPnBoeSA9
IGRldm1fcGh5X2dldChkZXYsICJkcGh5Iik7CisJaWYgKElTX0VSUihkc2ktPnBoeSkpIHsKKwkJ
cmV0ID0gUFRSX0VSUihkc2ktPnBoeSk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBN
SVBJLURQSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBt
dGtfZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwgTVRLX0RTSSk7CisJaWYgKGNvbXBfaWQg
PCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFsaWFzOiAlZFxu
IiwgY29tcF9pZCk7CisJCXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10a19kZHBfY29t
cF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmZHNpLT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkm
bXRrX2RzaV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBp
bml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ
cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKKworCXJldHVybiBjb21wb25lbnRfYWRk
KCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOworfQorCitzdGF0aWMgaW50IG10
a19kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10
a19kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX291dHB1dF9k
c2lfZGlzYWJsZShkc2kpOworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kc2lfY29t
cG9uZW50X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k
ZXZpY2VfaWQgbXRrX2RzaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0
ZWssbXQ4MTczLWRzaSIgfSwKKwl7IH0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10
a19kc2lfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19kc2lfcHJvYmUsCisJLnJlbW92ZSA9IG10
a19kc2lfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10ay1kc2kiLAorCQkub2Zf
bWF0Y2hfdGFibGUgPSBtdGtfZHNpX29mX21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX21pcGlfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
Y2QxYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t
aXBpX3R4LmMKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk
aWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXBy
b3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5o
PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl
dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2RlZmluZSBNSVBJVFhfRFNJ
X0NPTgkJMHgwMAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJQklUKDApCisjZGVmaW5lIFJH
X0RTSV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VMCQkJKDMg
PDwgMikKKyNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8IDQpCisjZGVmaW5lIFJHX0RT
SV9QSFlDTEtfU0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFfU0VMCQlC
SVQoMTApCisjZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJVCgxMSkKKworI2RlZmluZSBN
SVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJ
MHgwOAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTEJMHgwYworI2RlZmluZSBNSVBJVFhf
RFNJX0RBVEFfTEFORTIJMHgxMAorI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJMHgxNAor
I2RlZmluZSBSR19EU0lfTE5UeF9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5U
eF9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UeF9MUFRYX0lQTFVTMQkJQklU
KDIpCisjZGVmaW5lIFJHX0RTSV9MTlR4X0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdf
RFNJX0xOVHhfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UeF9MUENEX0lQ
TFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVHhfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2Rl
ZmluZSBSR19EU0lfTE5UeF9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RT
SV9UT1BfQ09OCTB4NDAKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKKyNkZWZp
bmUgUkdfRFNJX0xOVF9IU19CSUFTX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBf
Q0FMX0VOCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCisj
ZGVmaW5lIFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0RT
SV9MTlRfQUlPX1NFTAkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlC
SVQoMTEpCisjZGVmaW5lIFJHX0RTSV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2RlZmluZSBS
R19EU0lfUFJFU0VSVkUJCQkoNyA8PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkw
eDQ0CisjZGVmaW5lIFJHX0RTSV9CR19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0JH
X0NLRU4JCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikKKyNkZWZp
bmUgUkdfRFNJX0JHX0ZBU1RfQ0hBUkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNL
CQkJKDB4M2ZmZmYgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1KQorI2Rl
ZmluZSBSR19EU0lfVjEwX1NFTAkJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJ
CSg3IDw8IDExKQorI2RlZmluZSBSR19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2RlZmluZSBS
R19EU0lfVjAzMl9TRUwJCQkoNyA8PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8
PCAyMCkKKyNkZWZpbmUgUkdfRFNJX0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJH
X0RTSV9CR19SMl9UUklNCQkoMHhmIDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NP
TjAJMHg1MAorI2RlZmluZSBSR19EU0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdf
RFNJX01QUExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfUFJF
RElWCQkoMyA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAzKQorI2Rl
ZmluZSBSR19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lfTVBQTExf
UE9TRElWCQkoNyA8PCA3KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJVCgxMCkK
KyNkZWZpbmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBSR19EU0lf
TVBQTExfVk9EX0VOCQlCSVQoMTIpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0
CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJ
X01QUExMX1NETV9TU0NfUEhfSU5JVAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9T
U0NfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8
PCAxNikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmluZSBNSVBJ
VFhfRFNJX1BMTF9QV1IJMHg2OAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTgkJQklU
KDApCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdf
RFNJX01QUExMX1NETV9QV1JfQUNLCUJJVCg4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RS
TAkweDgwCisjZGVmaW5lIFNXX0NUUkxfRU4JCQlCSVQoMCkKKworI2RlZmluZSBNSVBJVFhfRFNJ
X1NXX0NUUkxfQ09OMAkweDg0CisjZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJVCgwKQor
I2RlZmluZSBTV19MTlRDX0xQVFhfT0UJCQlCSVQoMSkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1AJ
CQlCSVQoMikKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX04JCQlCSVQoMykKKyNkZWZpbmUgU1dfTE5U
Q19IU1RYX1BSRV9PRQkJQklUKDQpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJVCg1KQor
I2RlZmluZSBTV19MTlRDX0hTVFhfWkVST0NMSwkJQklUKDYpCisjZGVmaW5lIFNXX0xOVDBfTFBU
WF9QUkVfT0UJCUJJVCg3KQorI2RlZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkKKyNkZWZp
bmUgU1dfTE5UMF9MUFRYX1AJCQlCSVQoOSkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX04JCQlCSVQo
MTApCisjZGVmaW5lIFNXX0xOVDBfSFNUWF9QUkVfT0UJCUJJVCgxMSkKKyNkZWZpbmUgU1dfTE5U
MF9IU1RYX09FCQkJQklUKDEyKQorI2RlZmluZSBTV19MTlQwX0xQUlhfRU4JCQlCSVQoMTMpCisj
ZGVmaW5lIFNXX0xOVDFfTFBUWF9QUkVfT0UJCUJJVCgxNCkKKyNkZWZpbmUgU1dfTE5UMV9MUFRY
X09FCQkJQklUKDE1KQorI2RlZmluZSBTV19MTlQxX0xQVFhfUAkJCUJJVCgxNikKKyNkZWZpbmUg
U1dfTE5UMV9MUFRYX04JCQlCSVQoMTcpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJ
VCgxOCkKKyNkZWZpbmUgU1dfTE5UMV9IU1RYX09FCQkJQklUKDE5KQorI2RlZmluZSBTV19MTlQy
X0xQVFhfUFJFX09FCQlCSVQoMjApCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJVCgyMSkK
KyNkZWZpbmUgU1dfTE5UMl9MUFRYX1AJCQlCSVQoMjIpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9O
CQkJQklUKDIzKQorI2RlZmluZSBTV19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCisjZGVmaW5l
IFNXX0xOVDJfSFNUWF9PRQkJCUJJVCgyNSkKKworc3RydWN0IG10a19taXBpX3R4IHsKKwlzdHJ1
Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGludCBkYXRh
X3JhdGU7CisJc3RydWN0IGNsa19odyBwbGxfaHc7CisJc3RydWN0IGNsayAqcGxsOworfTsKKwor
c3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX21pcGlfdHggKm10a19taXBpX3R4X2Zyb21fY2xrX2h3
KHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXJldHVybiBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBt
dGtfbWlwaV90eCwgcGxsX2h3KTsKK30KKworc3RhdGljIHZvaWQgbXRrX21pcGlfdHhfY2xlYXJf
Yml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCisJCQkJICAgdTMy
IGJpdHMpCit7CisJdTMyIHRlbXAgPSByZWFkbChtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKKwor
CXdyaXRlbCh0ZW1wICYgfmJpdHMsIG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0
aWMgdm9pZCBtdGtfbWlwaV90eF9zZXRfYml0cyhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgs
IHUzMiBvZmZzZXQsCisJCQkJIHUzMiBiaXRzKQoreworCXUzMiB0ZW1wID0gcmVhZGwobWlwaV90
eC0+cmVncyArIG9mZnNldCk7CisKKwl3cml0ZWwodGVtcCB8IGJpdHMsIG1pcGlfdHgtPnJlZ3Mg
KyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF91cGRhdGVfYml0cyhzdHJ1
Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBvZmZzZXQsCisJCQkJICAgIHUzMiBtYXNrLCB1
MzIgZGF0YSkKK3sKKwl1MzIgdGVtcCA9IHJlYWRsKG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOwor
CisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyAr
IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0
IGNsa19odyAqaHcpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gbXRrX21pcGlf
dHhfZnJvbV9jbGtfaHcoaHcpOworCXVuc2lnbmVkIGludCB0eGRpdiwgdHhkaXYwLCB0eGRpdjE7
CisJdTY0IHBjdzsKKworCWRldl9kYmcobWlwaV90eC0+ZGV2LCAicHJlcGFyZTogJXUgSHpcbiIs
IG1pcGlfdHgtPmRhdGFfcmF0ZSk7CisKKwlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMDAw
MDAwMCkgeworCQl0eGRpdiA9IDE7CisJCXR4ZGl2MCA9IDA7CisJCXR4ZGl2MSA9IDA7CisJfSBl
bHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gMjUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMjsK
KwkJdHhkaXYwID0gMTsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFf
cmF0ZSA+PSAxMjUwMDAwMDApIHsKKwkJdHhkaXYgPSA0OworCQl0eGRpdjAgPSAyOworCQl0eGRp
djEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAwMDApIHsKKwkJ
dHhkaXYgPSA4OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAxOworCX0gZWxzZSBpZiAobWlw
aV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTY7CisJCXR4ZGl2MCA9
IDI7CisJCXR4ZGl2MSA9IDI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ
bXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkJ
UkdfRFNJX1ZPVVRfTVNLIHwKKwkJCQlSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VO
LAorCQkJCSg0IDw8IDIwKSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8CisJCQkJKDQgPDwgMTEp
IHwgKDQgPDwgOCkgfCAoNCA8PCA1KSB8CisJCQkJUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdf
Q09SRV9FTik7CisKKwl1c2xlZXBfcmFuZ2UoMzAsIDEwMCk7CisKKwltdGtfbWlwaV90eF91cGRh
dGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04sCisJCQkJUkdfRFNJX0xOVF9JTVBf
Q0FMX0NPREUgfCBSR19EU0lfTE5UX0hTX0JJQVNfRU4sCisJCQkJKDggPDwgNCkgfCBSR19EU0lf
TE5UX0hTX0JJQVNfRU4pOworCisJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRY
X0RTSV9DT04sCisJCQkgICAgIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVf
RU4pOworCisJbXRrX21pcGlfdHhfdXBkYXRlX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExf
UFdSLAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fUFdSX09OIHwKKwkJCQlSR19EU0lfTVBQTExfU0RN
X0lTT19FTiwKKwkJCQlSR19EU0lfTVBQTExfU0RNX1BXUl9PTik7CisKKwltdGtfbWlwaV90eF9j
bGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkgICAgICAgUkdfRFNJ
X01QUExMX1BMTF9FTik7CisKKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJ
VFhfRFNJX1BMTF9DT04wLAorCQkJCVJHX0RTSV9NUFBMTF9UWERJVjAgfCBSR19EU0lfTVBQTExf
VFhESVYxIHwKKwkJCQlSR19EU0lfTVBQTExfUFJFRElWLAorCQkJCSh0eGRpdjAgPDwgMykgfCAo
dHhkaXYxIDw8IDUpKTsKKworCS8qCisJICogUExMIFBDVyBjb25maWcKKwkgKiBQQ1cgYml0IDI0
fjMwID0gaW50ZWdlciBwYXJ0IG9mIHBjdworCSAqIFBDVyBiaXQgMH4yMyA9IGZyYWN0aW9uYWwg
cGFydCBvZiBwY3cKKwkgKiBwY3cgPSBkYXRhX1JhdGUqNCp0eGRpdi8oUmVmX2NsayoyKTsKKwkg
KiBQb3N0IERJViA9NCwgc28gbmVlZCBkYXRhX1JhdGUqNAorCSAqIFJlZl9jbGsgaXMgMjZNSHoK
KwkgKi8KKwlwY3cgPSAoKHU2NCltaXBpX3R4LT5kYXRhX3JhdGUgKiAyICogdHhkaXYpIDw8IDI0
OworCXBjdyAvPSAyNjAwMDAwMDsKKwl3cml0ZWwocGN3LCBtaXBpX3R4LT5yZWdzICsgTUlQSVRY
X0RTSV9QTExfQ09OMik7CisKKwltdGtfbWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhf
RFNJX1BMTF9DT04xLAorCQkJICAgICBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7CisKKwltdGtf
bWlwaV90eF9zZXRfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQ
TExfUExMX0VOKTsKKworCXVzbGVlcF9yYW5nZSgyMCwgMTAwKTsKKworCW10a19taXBpX3R4X2Ns
ZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKKwkJCSAgICAgICBSR19EU0lf
TVBQTExfU0RNX1NTQ19FTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX21p
cGlfdHhfcGxsX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX21p
cGlfdHggKm1pcGlfdHggPSBtdGtfbWlwaV90eF9mcm9tX2Nsa19odyhodyk7CisKKwlkZXZfZGJn
KG1pcGlfdHgtPmRldiwgInVucHJlcGFyZVxuIik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRz
KG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkgICAgICAgUkdfRFNJX01QUExMX1BM
TF9FTik7CisKKwltdGtfbWlwaV90eF91cGRhdGVfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJX1BM
TF9QV1IsCisJCQkJUkdfRFNJX01QUExMX1NETV9JU09fRU4gfAorCQkJCVJHX0RTSV9NUFBMTF9T
RE1fUFdSX09OLAorCQkJCVJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOKTsKKworCW10a19taXBpX3R4
X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAorCQkJICAgICAgIFJHX0RT
SV9MTlRfSFNfQklBU19FTik7CisKKwltdGtfbWlwaV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1J
UElUWF9EU0lfQ09OLAorCQkJICAgICAgIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xE
T0NPUkVfRU4pOworCisJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCBNSVBJVFhfRFNJ
X0JHX0NPTiwKKwkJCSAgICAgICBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOKTsK
KworCW10a19taXBpX3R4X2NsZWFyX2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwK
KwkJCSAgICAgICBSR19EU0lfTVBQTExfRElWX01TSyk7Cit9CisKK3N0YXRpYyBsb25nIG10a19t
aXBpX3R4X3BsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJh
dGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnByYXRlKQoreworCXJldHVybiBjbGFtcF92
YWwocmF0ZSwgNTAwMDAwMDAsIDEyNTAwMDAwMDApOworfQorCitzdGF0aWMgaW50IG10a19taXBp
X3R4X3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAor
CQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90
eCAqbWlwaV90eCA9IG10a19taXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKKworCWRldl9kYmcobWlw
aV90eC0+ZGV2LCAic2V0IHJhdGU6ICVsdSBIelxuIiwgcmF0ZSk7CisKKwltaXBpX3R4LT5kYXRh
X3JhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG10
a19taXBpX3R4X3BsbF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJCSB1bnNp
Z25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9
IG10a19taXBpX3R4X2Zyb21fY2xrX2h3KGh3KTsKKworCXJldHVybiBtaXBpX3R4LT5kYXRhX3Jh
dGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtfbWlwaV90eF9wbGxfb3Bz
ID0geworCS5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9
IG10a19taXBpX3R4X3BsbF91bnByZXBhcmUsCisJLnJvdW5kX3JhdGUgPSBtdGtfbWlwaV90eF9w
bGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBtdGtfbWlwaV90eF9wbGxfc2V0X3JhdGUsCisJ
LnJlY2FsY19yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRlLAorfTsKKworc3RhdGlj
IGludCBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwoc3RydWN0IHBoeSAqcGh5KQoreworCXN0
cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCXVuc2ln
bmVkIGludCByZWc7CisKKwlmb3IgKHJlZyA9IE1JUElUWF9EU0lfQ0xPQ0tfTEFORTsKKwkgICAg
IHJlZyA8PSBNSVBJVFhfRFNJX0RBVEFfTEFORTM7IHJlZyArPSA0KQorCQltdGtfbWlwaV90eF9z
ZXRfYml0cyhtaXBpX3R4LCByZWcsIFJHX0RTSV9MTlR4X0xET09VVF9FTik7CisKKwltdGtfbWlw
aV90eF9jbGVhcl9iaXRzKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwKKwkJCSAgICAgICBS
R19EU0lfUEFEX1RJRV9MT1dfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X21pcGlfdHhfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90
eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCWludCByZXQ7CisKKwkvKiBQb3dl
ciB1cCBjb3JlIGFuZCBlbmFibGUgUExMICovCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1p
cGlfdHgtPnBsbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUg
RFNJIExhbmUgTERPIG91dHB1dHMsIGRpc2FibGUgcGFkIHRpZSBsb3cgKi8KKwltdGtfbWlwaV90
eF9wb3dlcl9vbl9zaWduYWwocGh5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBt
dGtfbWlwaV90eF9wb3dlcl9vZmZfc2lnbmFsKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3Qg
bXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwl1bnNpZ25lZCBp
bnQgcmVnOworCisJbXRrX21pcGlfdHhfc2V0X2JpdHMobWlwaV90eCwgTUlQSVRYX0RTSV9UT1Bf
Q09OLAorCQkJICAgICBSR19EU0lfUEFEX1RJRV9MT1dfRU4pOworCisJZm9yIChyZWcgPSBNSVBJ
VFhfRFNJX0NMT0NLX0xBTkU7CisJICAgICByZWcgPD0gTUlQSVRYX0RTSV9EQVRBX0xBTkUzOyBy
ZWcgKz0gNCkKKwkJbXRrX21pcGlfdHhfY2xlYXJfYml0cyhtaXBpX3R4LCByZWcsIFJHX0RTSV9M
TlR4X0xET09VVF9FTik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmKHN0
cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0
X2RydmRhdGEocGh5KTsKKworCS8qIEVuYWJsZSBwYWQgdGllIGxvdywgZGlzYWJsZSBEU0kgTGFu
ZSBMRE8gb3V0cHV0cyAqLworCW10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwocGh5KTsKKwor
CS8qIERpc2FibGUgUExMIGFuZCBwb3dlciBkb3duIGNvcmUgKi8KKwljbGtfZGlzYWJsZV91bnBy
ZXBhcmUobWlwaV90eC0+cGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IHBoeV9vcHMgbXRrX21pcGlfdHhfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19taXBpX3R4
X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYgPSBtdGtfbWlwaV90eF9wb3dlcl9vZmYsCisJLm93bmVy
ID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Byb2JlKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt
PmRldjsKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHg7CisJc3RydWN0IHJlc291cmNlICpt
ZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFyICpyZWZfY2xrX25hbWU7CisJ
c3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5vcHMgPSAmbXRrX21pcGlfdHhf
cGxsX29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBj
aGFyICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfR0FU
RSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJv
dmlkZXI7CisJaW50IHJldDsKKworCW1pcGlfdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo
Km1pcGlfdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1pcGlfdHgpCisJCXJldHVybiAtRU5PTUVN
OworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw
KTsKKwltaXBpX3R4LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKKwlp
ZiAoSVNfRVJSKG1pcGlfdHgtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+cmVn
cyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVkXG4i
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2
LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVmX2Ns
ayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVkXG4i
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRfbmFt
ZShyZWZfY2xrKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9k
ZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUpOworCWlm
IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0cHV0
LW5hbWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltaXBpX3R4LT5wbGxf
aHcuaW5pdCA9ICZjbGtfaW5pdDsKKwltaXBpX3R4LT5wbGwgPSBkZXZtX2Nsa19yZWdpc3Rlcihk
ZXYsICZtaXBpX3R4LT5wbGxfaHcpOworCWlmIChJU19FUlIobWlwaV90eC0+cGxsKSkgeworCQly
ZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnBsbCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJl
Z2lzdGVyIFBMTDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGh5ID0gZGV2
bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19taXBpX3R4X29wcyk7CisJaWYgKElTX0VSUihw
aHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
Y3JlYXRlIE1JUEkgRC1QSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHlf
c2V0X2RydmRhdGEocGh5LCBtaXBpX3R4KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5
X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisJaWYgKElTX0VS
UihwaHkpKSB7CisJCXJldCA9IFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKwkJcmV0dXJuIHJldDsK
Kwl9CisKKwltaXBpX3R4LT5kZXYgPSBkZXY7CisKKwlyZXR1cm4gb2ZfY2xrX2FkZF9wcm92aWRl
cihkZXYtPm9mX25vZGUsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwKKwkJCQkgICBtaXBpX3R4LT5w
bGwpOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f
ZGV2aWNlICpwZGV2KQoreworCW9mX2Nsa19kZWxfcHJvdmlkZXIocGRldi0+ZGV2Lm9mX25vZGUp
OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtf
bWlwaV90eF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1p
cGktdHgiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfbWlwaV90
eF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX21pcGlfdHhfcHJvYmUsCisJLnJlbW92ZSA9IG10
a19taXBpX3R4X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1taXBp
LXR4IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX21pcGlfdHhfbWF0Y2gsCisJfSwKK307Ci0t
IAoyLjcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0
dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==