From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v10 03/13] drm/mediatek: Add DSI sub driver
Date: Wed, 3 Feb 2016 20:25:52 +0100
Message-ID: <1454527562-28154-4-git-send-email-p.zabel@pengutronix.de>
References: <1454527562-28154-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: <1454527562-28154-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 , 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 , Stephen Boyd , Tomasz Figa , Kumar Gala
List-Id: linux-mediatek@lists.infradead.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0KQ2hhbmdlcyBzaW5jZSB2OToKIC0gZG9uJ3QgY3Jhc2gg
b24gY2xlYW51cCBpZiB0aGUgY29ubmVjdG9yIHNldHVwIHdhcyBkZWxlZ2F0ZWQgdG8gdGhlIGJy
aWRnZQogLSB2YXJpb3VzIGZpeGVzCi0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25m
aWcgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAg
fCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIHwgICAyICsK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIHwgICAyICsKIGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgICAgIHwgODY2ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuaCAgICAgfCAg
NTggKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyB8IDQ4NyArKysr
KysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMTQyMSBpbnNlcnRpb25zKCspLCAxIGRl
bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kc2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHNpLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21p
cGlfdHguYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKaW5kZXggOGRhZDg5Mi4uYjdlMDQwNCAx
MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKKysrIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTMsNiArMyw5IEBAIGNvbmZpZyBEUk1fTUVE
SUFURUsKIAlkZXBlbmRzIG9uIERSTQogCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCAoQVJN
ICYmIENPTVBJTEVfVEVTVCkKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJNX01J
UElfRFNJCisJc2VsZWN0IERSTV9QQU5FTAorCXNlbGVjdCBEUk1fUEFORUxfU0lNUExFCiAJc2Vs
ZWN0IElPTU1VX0RNQQogCXNlbGVjdCBNVEtfU01JCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01h
a2VmaWxlCmluZGV4IGQ0YmRlN2MuLmU3ODFkYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm
aWxlCkBAIC02LDYgKzYsOCBAQCBtZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwubyBcCiAJ
CSAgbXRrX2RybV9kcnYubyBcCiAJCSAgbXRrX2RybV9mYi5vIFwKIAkJICBtdGtfZHJtX2dlbS5v
IFwKLQkJICBtdGtfZHJtX3BsYW5lLm8KKwkJICBtdGtfZHJtX3BsYW5lLm8gXAorCQkgIG10a19k
c2kubyBcCisJCSAgbXRrX21pcGlfdHgubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSAr
PSBtZWRpYXRlay1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwppbmRl
eCBkMjY4ZTVkLi5lZDhiYzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
YwpAQCAtNTM4LDYgKzUzOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29u
c3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CiAJJm10a19kcm1fcGxhdGZvcm1fZHJpdmVyLAogCSZt
dGtfZGlzcF9vdmxfZHJpdmVyLAogCSZtdGtfZGlzcF9yZG1hX2RyaXZlciwKKwkmbXRrX2RzaV9k
cml2ZXIsCisJJm10a19taXBpX3R4X2RyaXZlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG10
a19kcm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaAppbmRl
eCA3YTVjYjE3Li4yY2QwNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
aApAQCAtNDksNSArNDksNyBAQCBzdHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKIAogZXh0ZXJuIHN0
cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3Qg
cGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX3JkbWFfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0
Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl
ciBtdGtfbWlwaV90eF9kcml2ZXI7CiAKICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lMjc0ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kc2kuYwpAQCAtMCwwICsxLDg2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp
YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj
X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk
cm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUg
PGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxp
bnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51
eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51
eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworI2lu
Y2x1ZGUgIm10a19kc2kuaCIKKworI2RlZmluZSBEU0lfVklERU9fRklGT19ERVBUSAkoMTkyMCAv
IDQpCisjZGVmaW5lIERTSV9IT1NUX0ZJRk9fREVQVEgJNjQKKworI2RlZmluZSBEU0lfU1RBUlQJ
CTB4MDAKKworI2RlZmluZSBEU0lfQ09OX0NUUkwJCTB4MTAKKyNkZWZpbmUgRFNJX1JFU0VUCQkJ
QklUKDApCisjZGVmaW5lIERTSV9FTgkJCQlCSVQoMSkKKworI2RlZmluZSBEU0lfTU9ERV9DVFJM
CQkweDE0CisjZGVmaW5lIE1PREUJCQkJKDMpCisjZGVmaW5lIENNRF9NT0RFCQkJMAorI2RlZmlu
ZSBTWU5DX1BVTFNFX01PREUJCQkxCisjZGVmaW5lIFNZTkNfRVZFTlRfTU9ERQkJCTIKKyNkZWZp
bmUgQlVSU1RfTU9ERQkJCTMKKyNkZWZpbmUgRlJNX01PREUJCQlCSVQoMTYpCisjZGVmaW5lIE1J
WF9NT0RFCQkJQklUKDE3KQorCisjZGVmaW5lIERTSV9UWFJYX0NUUkwJCTB4MTgKKyNkZWZpbmUg
VkNfTlVNCQkJCSgyIDw8IDApCisjZGVmaW5lIExBTkVfTlVNCQkJKDB4ZiA8PCAyKQorI2RlZmlu
ZSBESVNfRU9UCQkJCUJJVCg2KQorI2RlZmluZSBOVUxMX0VOCQkJCUJJVCg3KQorI2RlZmluZSBU
RV9GUkVFUlVOCQkJQklUKDgpCisjZGVmaW5lIEVYVF9URV9FTgkJCUJJVCg5KQorI2RlZmluZSBF
WFRfVEVfRURHRQkJCUJJVCgxMCkKKyNkZWZpbmUgTUFYX1JUTl9TSVpFCQkJKDB4ZiA8PCAxMikK
KyNkZWZpbmUgSFNUWF9DS0xQX0VOCQkJQklUKDE2KQorCisjZGVmaW5lIERTSV9QU0NUUkwJCTB4
MWMKKyNkZWZpbmUgRFNJX1BTX1dDCQkJMHgzZmZmCisjZGVmaW5lIERTSV9QU19TRUwJCQkoMyA8
PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzE2QklUX1JHQjU2NQkJKDAgPDwgMTYpCisjZGVmaW5l
IExPT1NFTFlfUFNfMThCSVRfUkdCNjY2CQkoMSA8PCAxNikKKyNkZWZpbmUgUEFDS0VEX1BTXzE4
QklUX1JHQjY2NgkJKDIgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18yNEJJVF9SR0I4ODgJCSgz
IDw8IDE2KQorCisjZGVmaW5lIERTSV9WU0FfTkwJCTB4MjAKKyNkZWZpbmUgRFNJX1ZCUF9OTAkJ
MHgyNAorI2RlZmluZSBEU0lfVkZQX05MCQkweDI4CisjZGVmaW5lIERTSV9WQUNUX05MCQkweDJD
CisjZGVmaW5lIERTSV9IU0FfV0MJCTB4NTAKKyNkZWZpbmUgRFNJX0hCUF9XQwkJMHg1NAorI2Rl
ZmluZSBEU0lfSEZQX1dDCQkweDU4CisKKyNkZWZpbmUgRFNJX0hTVFhfQ0tMX1dDCQkweDY0CisK
KyNkZWZpbmUgRFNJX1BIWV9MQ0NPTgkJMHgxMDQKKyNkZWZpbmUgTENfSFNfVFhfRU4JCQlCSVQo
MCkKKyNkZWZpbmUgTENfVUxQTV9FTgkJCUJJVCgxKQorI2RlZmluZSBMQ19XQUtFVVBfRU4JCQlC
SVQoMikKKworI2RlZmluZSBEU0lfUEhZX0xEMENPTgkJMHgxMDgKKyNkZWZpbmUgTEQwX0hTX1RY
X0VOCQkJQklUKDApCisjZGVmaW5lIExEMF9VTFBNX0VOCQkJQklUKDEpCisjZGVmaW5lIExEMF9X
QUtFVVBfRU4JCQlCSVQoMikKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04wCTB4MTEwCisjZGVm
aW5lIExQWAkJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBIU19QUlBSCQkJCSgweGZmIDw8IDgpCisj
ZGVmaW5lIEhTX1pFUk8JCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEhTX1RSQUlMCQkJKDB4ZmYg
PDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMQkweDExNAorI2RlZmluZSBUQV9HTwkJ
CQkoMHhmZiA8PCAwKQorI2RlZmluZSBUQV9TVVJFCQkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFRB
X0dFVAkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgREFfSFNfRVhJVAkJCSgweGZmIDw8IDI0KQor
CisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjIJMHgxMTgKKyNkZWZpbmUgQ09OVF9ERVQJCQkoMHhm
ZiA8PCAwKQorI2RlZmluZSBDTEtfWkVSTwkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBDTEtfVFJB
SUwJCQkoMHhmZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04zCTB4MTFjCisjZGVm
aW5lIENMS19IU19QUlBSCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgQ0xLX0hTX1BPU1QJCQkoMHhm
ZiA8PCA4KQorI2RlZmluZSBDTEtfSFNfRVhJVAkJCSgweGZmIDw8IDE2KQorCisjZGVmaW5lIE5T
X1RPX0NZQ0xFKG4sIGMpICAgICgobikgLyAoYykgKyAoKChuKSAlIChjKSkgPyAxIDogMCkpCisK
K3N0YXRpYyB2b2lkIG10a19kc2lfbWFzayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIgb2Zmc2V0
LCB1MzIgbWFzaywgdTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJlZ3MgKyBv
ZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgZHNpLT5y
ZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BoeV90aW1jb25maWcoc3RydWN0
IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdGltY29uMCwgdGltY29uMSwgdGltY29uMiwgdGltY29u
MzsKKwl1bnNpZ25lZCBpbnQgdWksIGN5Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxweDsKKwor
CXVpID0gMTAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0gODAwMCAv
IGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwlscHggPSA1OworCisJdGltY29uMCA9ICg4IDw8IDI0
KSB8ICgweGEgPDwgMTYpIHwgKDB4NiA8PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcgPDwgMjQp
IHwgKDUgKiBscHggPDwgMTYpIHwgKCgzICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0ICogbHB4
KTsKKwl0aW1jb24yID0gKChOU19UT19DWUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4YSkgPDwg
MjQpIHwKKwkJICAoTlNfVE9fQ1lDTEUoMHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsKKwl0aW1j
b24zID0gKDIgKiBscHgpIDw8IDE2IHwgTlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBjeWNsZV90
aW1lKSA8PCA4IHwKKwkJICAgTlNfVE9fQ1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisKKwl3cml0
ZWwodGltY29uMCwgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVsKHRpbWNv
bjEsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24yLCBkc2kt
PnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04yKTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5yZWdzICsg
RFNJX1BIWV9USU1FQ09OMyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxlKHN0cnVj
dCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJMLCBEU0lf
RU4sIERTSV9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1Y3QgbXRr
X2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX0VOLCAw
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQor
eworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lfUkVTRVQp
OworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsKK30KKwor
c3RhdGljIGludCBtdGtfZHNpX3Bvd2Vyb24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1
Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNpLT5yZWZj
b3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChwaXhlbF9j
bG9jayAvIDEwMDApICogcGl4ZWxfZGlwdGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVsX2Nsb2Nr
IHVuaXQgaXMgS2h6LCBkYXRhX3JhdGEgdW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRlIDEwMDAu
CisJICogbWlwaV9yYXRpbyBpcyBtaXBpIGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5jZSB0aGUg
cGl4ZWwgY2xrIGluIG1pcGkuCisJICogd2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4KKwkgKi8K
Kwlkc2ktPmRhdGFfcmF0ZSA9IGRzaS0+dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgxICogMTAw
MCAqIDEwKTsKKworCXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5kYXRhX3Jh
dGUgKiAxMDAwMDAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0
byBzZXQgZGF0YSByYXRlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVmY291bnQ7CisJfQor
CisJcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShk
c2ktPmVuZ2luZV9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk
IHRvIGVuYWJsZSBlbmdpbmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9waHlfcG93
ZXJfb2ZmOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRpZ2l0YWxfY2xr
KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgZGln
aXRhbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rpc2FibGVfZW5naW5lX2NsazsK
Kwl9CisKKwltdGtfZHNpX2VuYWJsZShkc2kpOworCW10a19kc2lfcmVzZXQoZHNpKTsKKwlkc2lf
cGh5X3RpbWNvbmZpZyhkc2kpOworCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX2VuZ2luZV9j
bGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5lX2Nsayk7CitlcnJfcGh5X3Bv
d2VyX29mZjoKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK2Vycl9yZWZjb3VudDoKKwlkc2kt
PnJlZmNvdW50LS07CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBf
bW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERT
SV9QSFlfTENDT04sIExDX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZ
X0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9k
ZV9sZWF2ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9Q
SFlfTENDT04sIExDX1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEND
T04sIExDX1dBS0VVUF9FTiwgTENfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lf
UEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBf
dWxwX21vZGVfZW50ZXIoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNp
LCBEU0lfUEhZX0xEMENPTiwgTEQwX0hTX1RYX0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBE
U0lfUEhZX0xEMENPTiwgTEQwX1VMUE1fRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFu
ZTBfdWxwX21vZGVfbGVhdmUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2so
ZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VMUE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ks
IERTSV9QSFlfTEQwQ09OLCBMRDBfV0FLRVVQX0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNp
X21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRp
YyBib29sIGRzaV9jbGtfaHNfc3RhdGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1w
X3JlZzE7CisKKwl0bXBfcmVnMSA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOwor
CXJldHVybiAoKHRtcF9yZWcxICYgTENfSFNfVFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOwor
fQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX2hzX21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9v
bCBlbnRlcikKK3sKKwlpZiAoZW50ZXIgJiYgIWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRr
X2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NPTiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsK
KwllbHNlIGlmICghZW50ZXIgJiYgZHNpX2Nsa19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21h
c2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19IU19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lk
IGRzaV9zZXRfbW9kZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENN
RF9NT0RFOworCisJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsK
KwkJdmlkX21vZGUgPSBTWU5DX1BVTFNFX01PREU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3Mg
JiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3Mg
JiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9N
T0RFOworCX0KKworCXdyaXRlbCh2aWRfbW9kZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7
Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wc19jb250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRz
aSkKK3sKKwlzdHJ1Y3QgdmlkZW9tb2RlICp2bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2Jw
cCwgcHNfd2M7CisJdTMyIHBzX2JwcF9tb2RlOworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElf
RFNJX0ZNVF9SR0I1NjUpCisJCWRzaV9idWZfYnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBw
ID0gMzsKKworCXBzX3djID0gdm0tPmhhY3RpdmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9k
ZSA9IHBzX3djOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1U
X1JHQjg4ODoKKwkJcHNfYnBwX21vZGUgfD0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJl
YWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURf
UFNfMThCSVRfUkdCNjY2OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFD
S0VEOgorCQlwc19icHBfbW9kZSB8PSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7
CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNf
MTZCSVRfUkdCNTY1OworCQlicmVhazsKKwl9CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+
cmVncyArIERTSV9WQUNUX05MKTsKKwl3cml0ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERT
SV9QU0NUUkwpOworCXdyaXRlbChwc193YywgZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsK
K30KKworc3RhdGljIHZvaWQgZHNpX3J4dHhfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQor
eworCXUzMiB0bXBfcmVnOworCisJc3dpdGNoIChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0
bXBfcmVnID0gMSA8PCAyOworCQlicmVhazsKKwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7
CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdG1wX3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2Fz
ZSA0OgorCQl0bXBfcmVnID0gMHhmIDw8IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9y
ZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVn
cyArIERTSV9UWFJYX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1
Y3QgbXRrX2RzaSAqZHNpKQoreworCXVuc2lnbmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMy
IHRtcF9yZWc7CisKKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRf
UkdCODg4OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9i
dWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBf
cmVnID0gTE9PU0VMWV9QU18xOEJJVF9SR0I2NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJ
CWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQ
QUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlkc2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsK
KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRf
UkdCNTY1OworCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0
bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsK
KwkJYnJlYWs7CisJfQorCisJdG1wX3JlZyArPSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1
Zl9icHAgJiBEU0lfUFNfV0M7CisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NU
UkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lfY29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19k
c2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQgaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOwor
CXVuc2lnbmVkIGludCBob3Jpem9udGFsX2JhY2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBo
b3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZTsKKwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBw
OworCisJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1h
dCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1KQorCQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UK
KwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKworCXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJl
Z3MgKyBEU0lfVlNBX05MKTsKKwl3cml0ZWwodm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBE
U0lfVkJQX05MKTsKKwl3cml0ZWwodm0tPnZmcm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZG
UF9OTCk7CisJd3JpdGVsKHZtLT52YWN0aXZlLCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisK
Kwlob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBf
YnVmX2JwcCAtIDEwKTsKKworCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJ
REVPX1NZTkNfUFVMU0UpCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5o
YmFja19wb3JjaCAqIGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxf
YmFja3BvcmNoX2J5dGUgPSAoKHZtLT5oYmFja19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJ
CWRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKworCWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0g
KHZtLT5oZnJvbnRfcG9yY2ggKiBkc2lfdG1wX2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9y
aXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0
ZWwoaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJ
d3JpdGVsKGhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dD
KTsKKworCWRzaV9wc19jb250cm9sKGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3Rh
cnQoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NU
QVJUKTsKKwl3cml0ZWwoMSwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RzaV9wb3dlcm9mZihzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09O
KGRzaS0+cmVmY291bnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQg
IT0gMCkKKwkJcmV0dXJuOworCisJZHNpX2xhbmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNp
X2Nsa191bHBfbW9kZV9lbnRlcihkc2kpOworCisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwlj
bGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5lbmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnBy
ZXBhcmUoZHNpLT5kaWdpdGFsX2Nsayk7CisKKwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX291dHB1dF9kc2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kp
Cit7CisJaW50IHJldDsKKworCWlmIChkc2ktPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChk
c2ktPnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJ
RFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgdGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJ
fQorCX0KKworCXJldCA9IG10a19kc2lfcG93ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJ
CURSTV9FUlJPUigiZmFpbGVkIHRvIHBvd2VyIG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisK
Kwlkc2lfcnh0eF9jb250cm9sKGRzaSk7CisKKwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7
CisJZHNpX2xhbmUwX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwg
MCk7CisJZHNpX3NldF9tb2RlKGRzaSk7CisKKwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJ
ZHNpX2NvbmZpZ192ZG9fdGltaW5nKGRzaSk7CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lf
Y2xrX2hzX21vZGUoZHNpLCAxKTsKKworCW10a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5h
YmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3Ry
dWN0IG10a19kc2kgKmRzaSkKK3sKKwlpZiAoIWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJ
aWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYgKGRybV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7
CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1
cm47CisJCX0KKwl9CisKKwltdGtfZHNpX3Bvd2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQg
PSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0
IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7
Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNv
ZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gbXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9Owor
CitzdGF0aWMgYm9vbCBtdGtfZHNpX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29k
ZXIgKmVuY29kZXIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt
b2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkK
K3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVf
c2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlz
cGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz
dGVkKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsK
KworCWRzaS0+dm0ucGl4ZWxjbG9jayA9IGFkanVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3Rp
dmUgPSBhZGp1c3RlZC0+aGRpc3BsYXk7CisJZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVk
LT5odG90YWwgLSBhZGp1c3RlZC0+aHN5bmNfZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0g
YWRqdXN0ZWQtPmhzeW5jX3N0YXJ0IC0gYWRqdXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5
bmNfbGVuID0gYWRqdXN0ZWQtPmhzeW5jX2VuZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKwor
CWRzaS0+dm0udmFjdGl2ZSA9IGFkanVzdGVkLT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3Bv
cmNoID0gYWRqdXN0ZWQtPnZ0b3RhbCAtIGFkanVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52
ZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+dnN5bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7
CisJZHNpLT52bS52c3luY19sZW4gPSBhZGp1c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZz
eW5jX3N0YXJ0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1
Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29k
ZXJfdG9fZHNpKGVuY29kZXIpOworCisJbXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQor
CitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAq
ZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rl
cik7CisKKwltdGtfb3V0cHV0X2RzaV9lbmFibGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJt
X2Nvbm5lY3Rvcl9zdGF0dXMgbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1f
Y29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9z
dGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0
cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91
bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1f
Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rv
cl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+
cGFuZWwpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rv
cl9iZXN0X2VuY29kZXIoCisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJ
c3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJl
dHVybiAmZHNpLT5lbmNvZGVyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVy
X2hlbHBlcl9mdW5jcyBtdGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2Zp
eHVwID0gbXRrX2RzaV9lbmNvZGVyX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9l
bmNvZGVyX21vZGVfc2V0LAorCS5kaXNhYmxlID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJ
LmVuYWJsZSA9IG10a19kc2lfZW5jb2Rlcl9lbmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGRybV9jb25uZWN0b3JfZnVuY3MgbXRrX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRw
bXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2Rz
aV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5n
bGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJv
eSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21p
Y19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRl
X3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l
Y3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVj
dG9yX2hlbHBlcl9mdW5jcworCW10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwku
Z2V0X21vZGVzID0gbXRrX2RzaV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIg
PSBtdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19k
cm1fYXR0YWNoX2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSBzdHJ1Y3Qg
ZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJaW50IHJldDsKKworCWlmICghYnJpZGdlKQorCQly
ZXR1cm4gLUVOT0VOVDsKKworCWVuY29kZXItPmJyaWRnZSA9IGJyaWRnZTsKKwlicmlkZ2UtPmVu
Y29kZXIgPSBlbmNvZGVyOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXItPmRldiwg
YnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlk
Z2UgdG8gZHJtXG4iKTsKKwkJZW5jb2Rlci0+YnJpZGdlID0gTlVMTDsKKwkJYnJpZGdlLT5lbmNv
ZGVyID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kc2lf
Y3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZHNpICpk
c2kpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5l
bmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RFX0VOQ09E
RVJfRFNJLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuY29k
ZXIgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1fZW5jb2Rlcl9oZWxw
ZXJfYWRkKCZkc2ktPmVuY29kZXIsICZtdGtfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKwor
CS8qCisJICogQ3VycmVudGx5IGRpc3BsYXkgZGF0YSBwYXRocyBhcmUgc3RhdGljYWxseSBhc3Np
Z25lZCB0byBhIGNydGMgZWFjaC4KKwkgKiBjcnRjIDAgaXMgT1ZMMCAtPiBDT0xPUjAgLT4gQUFM
IC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMAorCSAqLworCWRzaS0+ZW5jb2Rlci5wb3Nz
aWJsZV9jcnRjcyA9IDE7CisKKwkvKiBQcmUtZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYg
dGhlcmUncyBhIGJyaWRnZSAqLworCXJldCA9IG10a19kcm1fYXR0YWNoX2JyaWRnZShkc2ktPmJy
aWRnZSwgJmRzaS0+ZW5jb2Rlcik7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcmV0ID0g
ZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwgJmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2Z1
bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKKwlpZiAocmV0KSB7CisJCURSTV9F
UlJPUigiRmFpbGVkIHRvIGNvbm5lY3RvciBpbml0IHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Vu
Y29kZXJfY2xlYW51cDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+Y29u
biwgJm10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fY29ubmVj
dG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWls
ZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVyIHRvIGRybVxuIik7CisJCWdvdG8gZXJyX2Nvbm5lY3Rv
cl9jbGVhbnVwOworCX0KKworCWRzaS0+Y29ubi5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisJ
ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZkc2ktPmNvbm4sICZkc2ktPmVuY29k
ZXIpOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChkc2kt
PnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQg
dG8gYXR0YWNoIHBhbmVsIHRvIGRybVxuIik7CisJCQlnb3RvIGVycl9jb25uZWN0b3JfdW5yZWdp
c3RlcjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZXJyX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyOgor
CWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmZHNpLT5jb25uKTsKK2Vycl9jb25uZWN0b3JfY2xl
YW51cDoKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CitlcnJfZW5jb2Rlcl9j
bGVhbnVwOgorCWRybV9lbmNvZGVyX2NsZWFudXAoJmRzaS0+ZW5jb2Rlcik7CisKKwlyZXR1cm4g
cmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoc3RydWN0IG10
a19kc2kgKmRzaSkKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCS8q
IFNraXAgY29ubmVjdG9yIGNsZWFudXAgaWYgY3JlYXRpb24gd2FzIGRlbGVnYXRlZCB0byB0aGUg
YnJpZGdlICovCisJaWYgKGRzaS0+Y29ubi5kZXYpIHsKKwkJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lz
dGVyKCZkc2ktPmNvbm4pOworCQlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CisJ
fQorfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpjb21wKQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBjb250YWluZXJfb2YoY29tcCwgc3Ry
dWN0IG10a19kc2ksIGRkcF9jb21wKTsKKworCW10a19kc2lfcG93ZXJvbihkc2kpOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHNpX2RkcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7
CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rz
aSwgZGRwX2NvbXApOworCisJbXRrX2RzaV9wb3dlcm9mZihkc2kpOworfQorCitzdGF0aWMgY29u
c3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZHNpX2Z1bmNzID0geworCS5zdGFydCA9
IG10a19kc2lfZGRwX3N0YXJ0LAorCS5zdG9wID0gbXRrX2RzaV9kZHBfc3RvcCwKK307CisKK3N0
YXRpYyBpbnQgbXRrX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAq
bWFzdGVyLCB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy
bSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor
CisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCWlm
IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVu
dCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwlyZXQgPSBtdGtfZHNpX2NyZWF0ZV9jb25uX2VuYyhkcm0sIGRzaSk7CisJ
aWYgKHJldCkgeworCQlEUk1fRVJST1IoIkVuY29kZXIgY3JlYXRlIGZhaWxlZCB3aXRoICVkXG4i
LCByZXQpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJf
dW5yZWdpc3RlcjoKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm0sICZkc2ktPmRkcF9jb21w
KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX3VuYmluZChzdHJ1Y3Qg
ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEpCit7
CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7CisJc3RydWN0IG10a19kc2kgKmRzaSA9
IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2RzaV9kZXN0cm95X2Nvbm5fZW5jKGRzaSk7
CisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7Cit9CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZHNpX2NvbXBvbmVudF9vcHMgPSB7
CisJLmJpbmQgPSBtdGtfZHNpX2JpbmQsCisJLnVuYmluZCA9IG10a19kc2lfdW5iaW5kLAorfTsK
Kworc3RhdGljIGludCBtdGtfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp
Cit7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+
ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVtb3RlX25vZGUsICplbmRwb2ludDsKKwlzdHJ1
Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGNvbXBfaWQ7CisJaW50IHJldDsKKworCWRzaSA9IGRl
dm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJ
CXJldHVybiAtRU5PTUVNOworCisJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURF
TyB8IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRTsKKwlkc2ktPmZvcm1hdCA9IE1JUElf
RFNJX0ZNVF9SR0I4ODg7CisJZHNpLT5sYW5lcyA9IDQ7CisKKwllbmRwb2ludCA9IG9mX2dyYXBo
X2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVMTCk7CisJaWYgKGVuZHBvaW50KSB7
CisJCXJlbW90ZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2lu
dCk7CisJCWlmICghcmVtb3RlX25vZGUpIHsKKwkJCWRldl9lcnIoZGV2LCAiTm8gcGFuZWwgY29u
bmVjdGVkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJZHNpLT5icmlkZ2UgPSBv
Zl9kcm1fZmluZF9icmlkZ2UocmVtb3RlX25vZGUpOworCQlkc2ktPnBhbmVsID0gb2ZfZHJtX2Zp
bmRfcGFuZWwocmVtb3RlX25vZGUpOworCQlvZl9ub2RlX3B1dChyZW1vdGVfbm9kZSk7CisJCWlm
ICghZHNpLT5icmlkZ2UgJiYgIWRzaS0+cGFuZWwpIHsKKwkJCWRldl9pbmZvKGRldiwgIldhaXRp
bmcgZm9yIGJyaWRnZSBvciBwYW5lbCBkcml2ZXJcbiIpOworCQkJcmV0dXJuIC1FUFJPQkVfREVG
RVI7CisJCX0KKwl9CisKKwlkc2ktPmVuZ2luZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZW5n
aW5lIik7CisJaWYgKElTX0VSUihkc2ktPmVuZ2luZV9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIo
ZHNpLT5lbmdpbmVfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGVuZ2luZSBj
bG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5kaWdpdGFsX2Ns
ayA9IGRldm1fY2xrX2dldChkZXYsICJkaWdpdGFsIik7CisJaWYgKElTX0VSUihkc2ktPmRpZ2l0
YWxfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZGlnaXRhbF9jbGspOworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBnZXQgZGlnaXRhbCBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVy
biByZXQ7CisJfQorCisJZHNpLT5oc19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiaHMiKTsKKwlp
ZiAoSVNfRVJSKGRzaS0+aHNfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+aHNfY2xrKTsK
KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGhzIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP
UkVTT1VSQ0VfTUVNLCAwKTsKKwlkc2ktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2
LCByZWdzKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2kt
PnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1lbW9yeTogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2
LCAiZHBoeSIpOworCWlmIChJU19FUlIoZHNpLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNp
LT5waHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgTUlQSS1EUEhZOiAlZFxuIiwg
cmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9p
ZChkZXYtPm9mX25vZGUsIE1US19EU0kpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQly
ZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+
b2Zfbm9kZSwgJmRzaS0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kc2lfZnVuY3MpOwor
CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25l
bnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZk
YXRhKHBkZXYsIGRzaSk7CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZtdGtf
ZHNpX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gYWRkIERTSSBjb21wb25lbnRcbiIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZv
cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRf
ZHJ2ZGF0YShwZGV2KTsKKworCW10a19vdXRwdXRfZHNpX2Rpc2FibGUoZHNpKTsKKwljb21wb25l
bnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOworCisJcmV0dXJuIDA7
Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXRrX2RzaV9zdXNwZW5kKHN0cnVj
dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNpID0gZGV2X2dl
dF9kcnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7CisJRFJNX0RF
QlVHX0RSSVZFUigiZHNpIHN1c3BlbmQgc3VjY2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2RzaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVj
dCBtdGtfZHNpICpkc2k7CisKKwlkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW10a19v
dXRwdXRfZHNpX2VuYWJsZShkc2kpOworCURSTV9ERUJVR19EUklWRVIoImRzaSByZXN1bWUgc3Vj
Y2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKK3N0YXRpYyBTSU1QTEVfREVWX1BN
X09QUyhtdGtfZHNpX3BtX29wcywgbXRrX2RzaV9zdXNwZW5kLCBtdGtfZHNpX3Jlc3VtZSk7CisK
K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kc2lfb2ZfbWF0Y2hbXSA9IHsK
Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiIH0sCisJeyB9LAorfTsKKwor
c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtf
ZHNpX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfZHNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku
bmFtZSA9ICJtdGstZHNpIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RzaV9vZl9tYXRjaCwK
KwkJLnBtID0gJm10a19kc2lfcG1fb3BzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kc2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4MGFmYwotLS0gL2Rl
di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmgKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYg
X01US19EU0lfSF8KKyNkZWZpbmUgX01US19EU0lfSF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0
Yy5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgcGh5OworCitz
dHJ1Y3QgbXRrX2RzaSB7CisJc3RydWN0IG10a19kZHBfY29tcCBkZHBfY29tcDsKKwlzdHJ1Y3Qg
ZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9j
b25uZWN0b3IgY29ubjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2Jy
aWRnZSAqYnJpZGdlOworCXN0cnVjdCBwaHkgKnBoeTsKKworCXZvaWQgX19pb21lbSAqcmVnczsK
KworCXN0cnVjdCBjbGsgKmVuZ2luZV9jbGs7CisJc3RydWN0IGNsayAqZGlnaXRhbF9jbGs7CisJ
c3RydWN0IGNsayAqaHNfY2xrOworCisJdTMyIGRhdGFfcmF0ZTsKKworCXVuc2lnbmVkIGxvbmcg
bW9kZV9mbGFnczsKKwllbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWdu
ZWQgaW50IGxhbmVzOworCXN0cnVjdCB2aWRlb21vZGUgdm07CisJaW50IHJlZmNvdW50OworCWJv
b2wgZW5hYmxlZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmVuY29kZXJf
dG9fZHNpKHN0cnVjdCBkcm1fZW5jb2RlciAqZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGUs
IHN0cnVjdCBtdGtfZHNpLCBlbmNvZGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRr
X2RzaSAqY29ubmVjdG9yX3RvX2RzaShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykKK3sKKwlyZXR1
cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdGtfZHNpLCBjb25uKTsKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYyBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmIxZThlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX21pcGlfdHguYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz
CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl
IDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1
ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu
dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorCisjZGVm
aW5lIE1JUElUWF9EU0lfQ09OCQkweDAwCisjZGVmaW5lIFJHX0RTSV9MRE9DT1JFX0VOCQlCSVQo
MCkKKyNkZWZpbmUgUkdfRFNJX0NLR19MRE9PVVRfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lf
QkNMS19TRUwJCQkoMyA8PCAyKQorI2RlZmluZSBSR19EU0lfTERfSURYX1NFTAkJKDcgPDwgNCkK
KyNkZWZpbmUgUkdfRFNJX1BIWUNMS19TRUwJCSgyIDw8IDgpCisjZGVmaW5lIFJHX0RTSV9EU0lD
TEtfRlJFUV9TRUwJCUJJVCgxMCkKKyNkZWZpbmUgUkdfRFNJX0xQVFhfQ0xNUF9FTgkJQklUKDEx
KQorCisjZGVmaW5lIE1JUElUWF9EU0lfQ0xPQ0tfTEFORQkweDA0CisjZGVmaW5lIFJHX0RTSV9M
TlRDX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlRDX0NLTEFORV9FTgkJQklU
KDEpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdf
RFNJX0xOVENfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UQ19MUFRYX0lN
SU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlRDX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2Rl
ZmluZSBSR19EU0lfTE5UQ19MUENEX0lNTFVTCQlCSVQoNikKKyNkZWZpbmUgUkdfRFNJX0xOVENf
UlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMAkweDA4
CisjZGVmaW5lIFJHX0RTSV9MTlQwX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9M
TlQwX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQVFhfSVBMVVMxCQlC
SVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBS
R19EU0lfTE5UMF9MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlQwX0xQQ0Rf
SVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lNSU5VUwkJQklUKDYpCisj
ZGVmaW5lIFJHX0RTSV9MTlQwX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhf
RFNJX0RBVEFfTEFORTEJMHgwYworI2RlZmluZSBSR19EU0lfTE5UMV9MRE9PVVRfRU4JCUJJVCgw
KQorI2RlZmluZSBSR19EU0lfTE5UMV9DS0xBTkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lf
TE5UMV9MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQVFhfSVBMVVMy
CQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmlu
ZSBSR19EU0lfTE5UMV9MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBD
RF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBSR19EU0lfTE5UMV9SVF9DT0RFCQkoMHhmIDw8IDgp
CisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRBX0xBTkUyCTB4MTAKKyNkZWZpbmUgUkdfRFNJX0xO
VDJfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfQ0tMQU5FX0VOCQlCSVQo
MSkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBUWF9JUExVUzEJCUJJVCgyKQorI2RlZmluZSBSR19E
U0lfTE5UMl9MUFRYX0lQTFVTMgkJQklUKDMpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQVFhfSU1J
TlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX0xOVDJfTFBDRF9JUExVUwkJQklUKDUpCisjZGVm
aW5lIFJHX0RTSV9MTlQyX0xQQ0RfSU1JTlVTCQlCSVQoNikKKyNkZWZpbmUgUkdfRFNJX0xOVDJf
UlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMwkweDE0
CisjZGVmaW5lIFJHX0RTSV9MTlQzX0xET09VVF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9M
TlQzX0NLTEFORV9FTgkJQklUKDEpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQVFhfSVBMVVMxCQlC
SVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBS
R19EU0lfTE5UM19MUFRYX0lNSU5VUwkJQklUKDQpCisjZGVmaW5lIFJHX0RTSV9MTlQzX0xQQ0Rf
SVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lNSU5VUwkJQklUKDYpCisj
ZGVmaW5lIFJHX0RTSV9MTlQzX1JUX0NPREUJCSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhf
RFNJX1RPUF9DT04JMHg0MAorI2RlZmluZSBSR19EU0lfTE5UX0lOVFJfRU4JCUJJVCgwKQorI2Rl
ZmluZSBSR19EU0lfTE5UX0hTX0JJQVNfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UX0lN
UF9DQUxfRU4JCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UX1RFU1RNT0RFX0VOCQlCSVQoMykK
KyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0NPREUJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkdf
RFNJX0xOVF9BSU9fU0VMCQkoNyA8PCA4KQorI2RlZmluZSBSR19EU0lfUEFEX1RJRV9MT1dfRU4J
CUJJVCgxMSkKKyNkZWZpbmUgUkdfRFNJX0RFQlVHX0lOUFVUX0VOCQlCSVQoMTIpCisjZGVmaW5l
IFJHX0RTSV9QUkVTRVJWRQkJCSg3IDw8IDEzKQorCisjZGVmaW5lIE1JUElUWF9EU0lfQkdfQ09O
CTB4NDQKKyNkZWZpbmUgUkdfRFNJX0JHX0NPUkVfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lf
QkdfQ0tFTgkJCUJJVCgxKQorI2RlZmluZSBSR19EU0lfQkdfRElWCQkJKDB4MyA8PCAyKQorI2Rl
ZmluZSBSR19EU0lfQkdfRkFTVF9DSEFSR0UJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfVk9VVF9N
U0sJCQkoMHgzZmZmZiA8PCA1KQorI2RlZmluZSBSR19EU0lfVjEyX1NFTAkJCSg3IDw8IDUpCisj
ZGVmaW5lIFJHX0RTSV9WMTBfU0VMCQkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1YwNzJfU0VM
CQkJKDcgPDwgMTEpCisjZGVmaW5lIFJHX0RTSV9WMDRfU0VMCQkJKDcgPDwgMTQpCisjZGVmaW5l
IFJHX0RTSV9WMDMyX1NFTAkJCSg3IDw8IDE3KQorI2RlZmluZSBSR19EU0lfVjAyX1NFTAkJCSg3
IDw8IDIwKQorI2RlZmluZSBSR19EU0lfQkdfUjFfVFJJTQkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUg
UkdfRFNJX0JHX1IyX1RSSU0JCSgweGYgPDwgMjgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExf
Q09OMAkweDUwCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9QTExfRU4JCUJJVCgwKQorI2RlZmluZSBS
R19EU0lfTVBQTExfRElWX01TSwkJKDB4MWZmIDw8IDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9Q
UkVESVYJCSgzIDw8IDEpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjAJCSgzIDw8IDMpCisj
ZGVmaW5lIFJHX0RTSV9NUFBMTF9UWERJVjEJCSgzIDw8IDUpCisjZGVmaW5lIFJHX0RTSV9NUFBM
TF9QT1NESVYJCSg3IDw8IDcpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9NT05WQ19FTgkJQklUKDEw
KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OUkVGX0VOCQlCSVQoMTEpCisjZGVmaW5lIFJHX0RT
SV9NUFBMTF9WT0RfRU4JCUJJVCgxMikKKworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04xCTB4
NTQKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9GUkFfRU4JCUJJVCgwKQorI2RlZmluZSBSR19E
U0lfTVBQTExfU0RNX1NTQ19QSF9JTklUCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RN
X1NTQ19FTgkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fU1NDX1BSRAkoMHhmZmZm
IDw8IDE2KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjIJMHg1OAorCisjZGVmaW5lIE1J
UElUWF9EU0lfUExMX1BXUgkweDY4CisjZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OCQlC
SVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9JU09fRU4JCUJJVCgxKQorI2RlZmluZSBS
R19EU0lfTVBQTExfU0RNX1BXUl9BQ0sJQklUKDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9TV19D
VFJMCTB4ODAKKyNkZWZpbmUgU1dfQ1RSTF9FTgkJCUJJVCgwKQorCisjZGVmaW5lIE1JUElUWF9E
U0lfU1dfQ1RSTF9DT04wCTB4ODQKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1BSRV9PRQkJQklUKDAp
CisjZGVmaW5lIFNXX0xOVENfTFBUWF9PRQkJCUJJVCgxKQorI2RlZmluZSBTV19MTlRDX0xQVFhf
UAkJCUJJVCgyKQorI2RlZmluZSBTV19MTlRDX0xQVFhfTgkJCUJJVCgzKQorI2RlZmluZSBTV19M
TlRDX0hTVFhfUFJFX09FCQlCSVQoNCkKKyNkZWZpbmUgU1dfTE5UQ19IU1RYX09FCQkJQklUKDUp
CisjZGVmaW5lIFNXX0xOVENfSFNUWF9aRVJPQ0xLCQlCSVQoNikKKyNkZWZpbmUgU1dfTE5UMF9M
UFRYX1BSRV9PRQkJQklUKDcpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9PRQkJCUJJVCg4KQorI2Rl
ZmluZSBTV19MTlQwX0xQVFhfUAkJCUJJVCg5KQorI2RlZmluZSBTV19MTlQwX0xQVFhfTgkJCUJJ
VCgxMCkKKyNkZWZpbmUgU1dfTE5UMF9IU1RYX1BSRV9PRQkJQklUKDExKQorI2RlZmluZSBTV19M
TlQwX0hTVFhfT0UJCQlCSVQoMTIpCisjZGVmaW5lIFNXX0xOVDBfTFBSWF9FTgkJCUJJVCgxMykK
KyNkZWZpbmUgU1dfTE5UMV9MUFRYX1BSRV9PRQkJQklUKDE0KQorI2RlZmluZSBTV19MTlQxX0xQ
VFhfT0UJCQlCSVQoMTUpCisjZGVmaW5lIFNXX0xOVDFfTFBUWF9QCQkJQklUKDE2KQorI2RlZmlu
ZSBTV19MTlQxX0xQVFhfTgkJCUJJVCgxNykKKyNkZWZpbmUgU1dfTE5UMV9IU1RYX1BSRV9PRQkJ
QklUKDE4KQorI2RlZmluZSBTV19MTlQxX0hTVFhfT0UJCQlCSVQoMTkpCisjZGVmaW5lIFNXX0xO
VDJfTFBUWF9QUkVfT0UJCUJJVCgyMCkKKyNkZWZpbmUgU1dfTE5UMl9MUFRYX09FCQkJQklUKDIx
KQorI2RlZmluZSBTV19MTlQyX0xQVFhfUAkJCUJJVCgyMikKKyNkZWZpbmUgU1dfTE5UMl9MUFRY
X04JCQlCSVQoMjMpCisjZGVmaW5lIFNXX0xOVDJfSFNUWF9QUkVfT0UJCUJJVCgyNCkKKyNkZWZp
bmUgU1dfTE5UMl9IU1RYX09FCQkJQklUKDI1KQorCitzdHJ1Y3QgbXRrX21pcGlfdHggeworCXN0
cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdW5zaWduZWQgaW50IGRh
dGFfcmF0ZTsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwlzdHJ1Y3QgY2xrICpwbGw7Cit9Owor
CitzdGF0aWMgdm9pZCBtdGtfbWlwaV90eF9tYXNrKHN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90
eCwgdTMyIG9mZnNldCwgdTMyIG1hc2ssCisJCQkgICAgIHUzMiBkYXRhKQoreworCXUzMiB0ZW1w
ID0gcmVhZGwobWlwaV90eC0+cmVncyArIG9mZnNldCk7CisKKwl3cml0ZWwoKHRlbXAgJiB+bWFz
aykgfCAoZGF0YSAmIG1hc2spLCBtaXBpX3R4LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGlj
IGludCBtdGtfbWlwaV90eF9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1
Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBtdGtfbWlw
aV90eCwKKwkJCQkJCSAgIHBsbF9odyk7CisJdW5zaWduZWQgaW50IHR4ZGl2LCB0eGRpdjAsIHR4
ZGl2MTsKKwl1NjQgcGN3OworCisJZGV2X2RiZyhtaXBpX3R4LT5kZXYsICJwcmVwYXJlOiAldSBI
elxuIiwgbWlwaV90eC0+ZGF0YV9yYXRlKTsKKworCWlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0g
NTAwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTsKKwkJdHhkaXYwID0gMDsKKwkJdHhkaXYxID0gMDsK
Kwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0ZSA+PSAyNTAwMDAwMDApIHsKKwkJdHhkaXYg
PSAyOworCQl0eGRpdjAgPSAxOworCQl0eGRpdjEgPSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+
ZGF0YV9yYXRlID49IDEyNTAwMDAwMCkgeworCQl0eGRpdiA9IDQ7CisJCXR4ZGl2MCA9IDI7CisJ
CXR4ZGl2MSA9IDA7CisJfSBlbHNlIGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPiA2MjAwMDAwMCkg
eworCQl0eGRpdiA9IDg7CisJCXR4ZGl2MCA9IDI7CisJCXR4ZGl2MSA9IDE7CisJfSBlbHNlIGlm
IChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gNTAwMDAwMDApIHsKKwkJdHhkaXYgPSAxNjsKKwkJdHhk
aXYwID0gMjsKKwkJdHhkaXYxID0gMjsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9
CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQkdfQ09OLAorCQkJIFJH
X0RTSV9WT1VUX01TSyB8IFJHX0RTSV9CR19DS0VOIHwgUkdfRFNJX0JHX0NPUkVfRU4sCisJCQkg
KDQgPDwgMjApIHwgKDQgPDwgMTcpIHwgKDQgPDwgMTQpIHwKKwkJCSAoNCA8PCAxMSkgfCAoNCA8
PCA4KSB8ICg0IDw8IDUpIHwKKwkJCSBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VO
KTsKKworCXVzbGVlcF9yYW5nZSgzMCwgMTAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90
eCwgTUlQSVRYX0RTSV9UT1BfQ09OLAorCQkJIFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFIHwgUkdf
RFNJX0xOVF9IU19CSUFTX0VOLAorCQkJICg4IDw8IDQpIHwgUkdfRFNJX0xOVF9IU19CSUFTX0VO
KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9DT04sCisJCQkgUkdf
RFNJX0NLR19MRE9PVVRfRU4gfCBSR19EU0lfTERPQ09SRV9FTiwKKwkJCSBSR19EU0lfQ0tHX0xE
T09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90
eCwgTUlQSVRYX0RTSV9QTExfUFdSLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OIHwgUkdf
RFNJX01QUExMX1NETV9JU09fRU4sCisJCQkgUkdfRFNJX01QUExMX1NETV9QV1JfT04pOworCisJ
bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQ
TExfUExMX0VOLCAwKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9Q
TExfQ09OMCwKKwkJCSBSR19EU0lfTVBQTExfVFhESVYwIHwgUkdfRFNJX01QUExMX1RYRElWMSB8
CisJCQkgUkdfRFNJX01QUExMX1BSRURJViwKKwkJCSAodHhkaXYwIDw8IDMpIHwgKHR4ZGl2MSA8
PCA1KSk7CisKKwkvKgorCSAqIFBMTCBQQ1cgY29uZmlnCisJICogUENXIGJpdCAyNH4zMCA9IGlu
dGVnZXIgcGFydCBvZiBwY3cKKwkgKiBQQ1cgYml0IDB+MjMgPSBmcmFjdGlvbmFsIHBhcnQgb2Yg
cGN3CisJICogcGN3ID0gZGF0YV9SYXRlKjQqdHhkaXYvKFJlZl9jbGsqMik7CisJICogUG9zdCBE
SVYgPTQsIHNvIG5lZWQgZGF0YV9SYXRlKjQKKwkgKiBSZWZfY2xrIGlzIDI2TUh6CisJICovCisJ
cGN3ID0gKCh1NjQpbWlwaV90eC0+ZGF0YV9yYXRlICogMiAqIHR4ZGl2KSA8PCAyNDsKKwlwY3cg
Lz0gMjYwMDAwMDA7CisJd3JpdGVsKHBjdywgbWlwaV90eC0+cmVncyArIE1JUElUWF9EU0lfUExM
X0NPTjIpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04x
LAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOLCBSR19EU0lfTVBQTExfU0RNX0ZSQV9FTik7
CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsCisJCQkg
UkdfRFNJX01QUExMX1BMTF9FTiwgUkdfRFNJX01QUExMX1BMTF9FTik7CisKKwl1c2xlZXBfcmFu
Z2UoMjAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExM
X0NPTjEsCisJCQkgUkdfRFNJX01QUExMX1NETV9TU0NfRU4sIDApOworCisJcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3BsbF91bnByZXBhcmUoc3RydWN0IGNsa19odyAq
aHcpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBz
dHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCisJZGV2X2RiZyhtaXBpX3R4
LT5kZXYsICJ1bnByZXBhcmVcbiIpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJ
VFhfRFNJX1BMTF9DT04wLCBSR19EU0lfTVBQTExfUExMX0VOLCAwKTsKKworCW10a19taXBpX3R4
X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfUFdSLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1f
SVNPX0VOIHwgUkdfRFNJX01QUExMX1NETV9QV1JfT04sCisJCQkgUkdfRFNJX01QUExMX1NETV9J
U09fRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9DT04s
IFJHX0RTSV9MTlRfSFNfQklBU19FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgs
IE1JUElUWF9EU0lfQ09OLAorCQkJIFJHX0RTSV9DS0dfTERPT1VUX0VOIHwgUkdfRFNJX0xET0NP
UkVfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NP
TiwKKwkJCSBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLCAwKTsKKworCW10a19t
aXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExMX0RJ
Vl9NU0ssIDApOworfQorCitzdGF0aWMgbG9uZyBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZShz
dHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSAgICAgICB1bnNpZ25l
ZCBsb25nICpwcmF0ZSkKK3sKKwlyZXR1cm4gY2xhbXBfdmFsKHJhdGUsIDUwMDAwMDAwLCAxMjUw
MDAwMDAwKTsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wbGxfc2V0X3JhdGUoc3RydWN0
IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBw
YXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHggPSBjb250YWluZXJf
b2YoaHcsIHN0cnVjdCBtdGtfbWlwaV90eCwKKwkJCQkJCSAgIHBsbF9odyk7CisKKwlkZXZfZGJn
KG1pcGlfdHgtPmRldiwgInNldCByYXRlOiAlbHUgSHpcbiIsIHJhdGUpOworCisJbWlwaV90eC0+
ZGF0YV9yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u
ZyBtdGtfbWlwaV90eF9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCQkg
dW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlf
dHggPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBtdGtfbWlwaV90eCwKKwkJCQkJCSAgIHBsbF9o
dyk7CisJcmV0dXJuIG1pcGlfdHgtPmRhdGFfcmF0ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj
dCBjbGtfb3BzIG10a19taXBpX3R4X3BsbF9vcHMgPSB7CisJLnByZXBhcmUgPSBtdGtfbWlwaV90
eF9wbGxfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3VucHJlcGFyZSwK
Kwkucm91bmRfcmF0ZSA9IG10a19taXBpX3R4X3BsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9
IG10a19taXBpX3R4X3BsbF9zZXRfcmF0ZSwKKwkucmVjYWxjX3JhdGUgPSBtdGtfbWlwaV90eF9w
bGxfcmVjYWxjX3JhdGUsCit9OworCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29uX3Np
Z25hbChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0g
cGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU
WF9EU0lfQ0xPQ0tfTEFORSwKKwkJCSBSR19EU0lfTE5UQ19MRE9PVVRfRU4sIFJHX0RTSV9MTlRD
X0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFf
TEFORTAsCisJCQkgUkdfRFNJX0xOVDBfTERPT1VUX0VOLCBSR19EU0lfTE5UMF9MRE9PVVRfRU4p
OworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUxLAorCQkJ
IFJHX0RTSV9MTlQxX0xET09VVF9FTiwgUkdfRFNJX0xOVDFfTERPT1VUX0VOKTsKKwltdGtfbWlw
aV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMiwKKwkJCSBSR19EU0lfTE5U
Ml9MRE9PVVRfRU4sIFJHX0RTSV9MTlQyX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayht
aXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTMsCisJCQkgUkdfRFNJX0xOVDNfTERPT1VUX0VO
LCBSR19EU0lfTE5UM19MRE9PVVRfRU4pOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBN
SVBJVFhfRFNJX1RPUF9DT04sIFJHX0RTSV9QQURfVElFX0xPV19FTiwgMCk7CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICpwaHkp
Cit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7
CisJaW50IHJldDsKKworCS8qIFBvd2VyIHVwIGNvcmUgYW5kIGVuYWJsZSBQTEwgKi8KKwlyZXQg
PSBjbGtfcHJlcGFyZV9lbmFibGUobWlwaV90eC0+cGxsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0
dXJuIHJldDsKKworCS8qIEVuYWJsZSBEU0kgTGFuZSBMRE8gb3V0cHV0cywgZGlzYWJsZSBwYWQg
dGllIGxvdyAqLworCW10a19taXBpX3R4X3Bvd2VyX29uX3NpZ25hbChwaHkpOworCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19taXBpX3R4X3Bvd2VyX29mZl9zaWduYWwoc3RydWN0
IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2
ZGF0YShwaHkpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1RPUF9D
T04sIFJHX0RTSV9QQURfVElFX0xPV19FTiwKKwkJCSBSR19EU0lfUEFEX1RJRV9MT1dfRU4pOwor
CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xBTkUsCisJCQkg
UkdfRFNJX0xOVENfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1J
UElUWF9EU0lfREFUQV9MQU5FMCwKKwkJCSBSR19EU0lfTE5UMF9MRE9PVVRfRU4sIDApOworCW10
a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUxLAorCQkJIFJHX0RT
SV9MTlQxX0xET09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhf
RFNJX0RBVEFfTEFORTIsCisJCQkgUkdfRFNJX0xOVDJfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlw
aV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMywKKwkJCSBSR19EU0lfTE5U
M19MRE9PVVRfRU4sIDApOworfQorCitzdGF0aWMgaW50IG10a19taXBpX3R4X3Bvd2VyX29mZihz
dHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dl
dF9kcnZkYXRhKHBoeSk7CisKKwkvKiBFbmFibGUgcGFkIHRpZSBsb3csIGRpc2FibGUgRFNJIExh
bmUgTERPIG91dHB1dHMgKi8KKwltdGtfbWlwaV90eF9wb3dlcl9vZmZfc2lnbmFsKHBoeSk7CisK
KwkvKiBEaXNhYmxlIFBMTCBhbmQgcG93ZXIgZG93biBjb3JlICovCisJY2xrX2Rpc2FibGVfdW5w
cmVwYXJlKG1pcGlfdHgtPnBsbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0
cnVjdCBwaHlfb3BzIG10a19taXBpX3R4X29wcyA9IHsKKwkucG93ZXJfb24gPSBtdGtfbWlwaV90
eF9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX21pcGlfdHhfcG93ZXJfb2ZmLAorCS5vd25l
ciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wcm9iZShzdHJ1
Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2
LT5kZXY7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4OworCXN0cnVjdCByZXNvdXJjZSAq
bWVtOworCXN0cnVjdCBjbGsgKnJlZl9jbGs7CisJY29uc3QgY2hhciAqcmVmX2Nsa19uYW1lOwor
CXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19pbml0ID0geworCQkub3BzID0gJm10a19taXBpX3R4
X3BsbF9vcHMsCisJCS5udW1fcGFyZW50cyA9IDEsCisJCS5wYXJlbnRfbmFtZXMgPSAoY29uc3Qg
Y2hhciAqIGNvbnN0ICopJnJlZl9jbGtfbmFtZSwKKwkJLmZsYWdzID0gQ0xLX1NFVF9SQVRFX0dB
VEUsCisJfTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3By
b3ZpZGVyOworCWludCByZXQ7CisKKwltaXBpX3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m
KCptaXBpX3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtaXBpX3R4KQorCQlyZXR1cm4gLUVOT01F
TTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwg
MCk7CisJbWlwaV90eC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJ
aWYgKElTX0VSUihtaXBpX3R4LT5yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKG1pcGlfdHgtPnJl
Z3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRl
diwgTlVMTCk7CisJaWYgKElTX0VSUihyZWZfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKHJlZl9j
bGspOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcmVmZXJlbmNlIGNsb2NrOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmVmX2Nsa19uYW1lID0gX19jbGtfZ2V0X25h
bWUocmVmX2Nsayk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYtPm9mX25v
ZGUsICJjbG9jay1vdXRwdXQtbmFtZXMiLAorCQkJCSAgICAgICZjbGtfaW5pdC5uYW1lKTsKKwlp
ZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGNsb2NrLW91dHB1
dC1uYW1lczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbWlwaV90eC0+cGxs
X2h3LmluaXQgPSAmY2xrX2luaXQ7CisJbWlwaV90eC0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIo
ZGV2LCAmbWlwaV90eC0+cGxsX2h3KTsKKwlpZiAoSVNfRVJSKG1pcGlfdHgtPnBsbCkpIHsKKwkJ
cmV0ID0gUFRSX0VSUihtaXBpX3R4LT5wbGwpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBy
ZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBoeSA9IGRl
dm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsICZtdGtfbWlwaV90eF9vcHMpOworCWlmIChJU19FUlIo
cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeSk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv
IGNyZWF0ZSBNSVBJIEQtUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGh5
X3NldF9kcnZkYXRhKHBoeSwgbWlwaV90eCk7CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3Bo
eV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCWlmIChJU19F
UlIocGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeV9wcm92aWRlcik7CisJCXJldHVybiByZXQ7
CisJfQorCisJbWlwaV90eC0+ZGV2ID0gZGV2OworCisJcmV0dXJuIG9mX2Nsa19hZGRfcHJvdmlk
ZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsCisJCQkJICAgbWlwaV90eC0+
cGxsKTsKK30KKworc3RhdGljIGludCBtdGtfbWlwaV90eF9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt
X2RldmljZSAqcGRldikKK3sKKwlvZl9jbGtfZGVsX3Byb3ZpZGVyKHBkZXYtPmRldi5vZl9ub2Rl
KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr
X21pcGlfdHhfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1t
aXBpLXR4IiwgfSwKKwl7fSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX21pcGlf
dHhfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19taXBpX3R4X3Byb2JlLAorCS5yZW1vdmUgPSBt
dGtfbWlwaV90eF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstbWlw
aS10eCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19taXBpX3R4X21hdGNoLAorCX0sCit9Owot
LSAKMi43LjAucmMzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v
cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl
bAo=