Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Oct 2010 11:09:53 -0700
From:      Garrett Cooper <yanegomi@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   [PATCH] mfiutil(8) - capture errors and percolate up to caller
Message-ID:  <AANLkTikJ80npsEthOvnYy3w7Fdi8yqa_2ibbTrds9k3X@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--0016e64967c8f95e77049389033e
Content-Type: text/plain; charset=ISO-8859-1

    Because a number of places in the mfiutil(8) code immediately call
warn(3) after an error to an API occurred, and because warn(3) employs
printf, et all (multiple times) in libc, there's an off-chance that
the errno value can get stomped on by the warn(3) calls, which could
lead to confusing results from anyone depending on the value being
returned from the mfiutil APIs. Thus, the attached patch I'm providing
fixes those cases, as well as converts an existing internal API
(display_pending_firmware) to an non-void return mechanism. I also
made a few stack variable alignment changes to match style(9) as well
as got rid of the ad hoc powerof2 call in favor of the value in
sys/param.h.
    I've run a small number of unit tests on my desktop at home with
my mfi(4) card, but will test out other failing cases with equipment I
have access to at work.
Thanks!
-Garrett

--0016e64967c8f95e77049389033e
Content-Type: text/x-patch; charset=US-ASCII;
	name="mfiutil-capture-errno-values.patch"
Content-Disposition: attachment; filename="mfiutil-capture-errno-values.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gfr3a4kx0

SW5kZXg6IHVzci5zYmluL21maXV0aWwvbWZpX2NvbmZpZy5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5z
YmluL21maXV0aWwvbWZpX2NvbmZpZy5jCShyZXZpc2lvbiAyMTQyNjApCisrKyB1c3Iuc2Jpbi9t
Zml1dGlsL21maV9jb25maWcuYwkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEzIEBACiAg
KiAkRnJlZUJTRCQKICAqLwogCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CiAjaWZkZWYgREVCVUcKICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjZW5kaWYK
LSNpbmNsdWRlIDxzeXMvZXJybm8uaD4KICNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJu
by5oPgogI2luY2x1ZGUgPGxpYnV0aWwuaD4KICNpZmRlZiBERUJVRwogI2luY2x1ZGUgPHN0ZGlu
dC5oPgpAQCAtNTIsOCArNTMsNiBAQAogc3RhdGljIGludAlhZGRfc3BhcmUoaW50IGFjLCBjaGFy
ICoqYXYpOwogc3RhdGljIGludAlyZW1vdmVfc3BhcmUoaW50IGFjLCBjaGFyICoqYXYpOwogCi0j
ZGVmaW5lIHBvd2Vyb2YyKHgpICAgICgoKCh4KS0xKSYoeCkpPT0wKQotCiBzdGF0aWMgbG9uZwog
ZGVodW1hbml6ZShjb25zdCBjaGFyICp2YWx1ZSkKIHsKQEAgLTE1MSwxMyArMTUwLDE0IEBACiBj
bGVhcl9jb25maWcoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3RydWN0IG1maV9sZF9saXN0IGxp
c3Q7Ci0JaW50IGNoLCBmZDsKKwlpbnQgY2gsIGVycm9yLCBmZDsKIAl1X2ludCBpOwogCiAJZmQg
PSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7
CiAJfQogCiAJaWYgKCFtZmlfcmVjb25maWdfc3VwcG9ydGVkKCkpIHsKQEAgLTE2Nyw4ICsxNjcs
OSBAQAogCX0KIAogCWlmIChtZmlfbGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8IDApIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCB2b2x1bWUgbGlzdCIpOwot
CQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZm9yIChpID0gMDsg
aSA8IGxpc3QubGRfY291bnQ7IGkrKykgewpAQCAtMTg5LDggKzE5MCw5IEBACiAJfQogCiAJaWYg
KG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19DTEVBUiwgTlVMTCwgMCwgTlVMTCwg
MCwgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBjbGVh
ciBjb25maWd1cmF0aW9uIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK
IAl9CiAKIAlwcmludGYoIm1maSVkOiBDb25maWd1cmF0aW9uIGNsZWFyZWRcbiIsIG1maV91bml0
KTsKQEAgLTMzNSw4ICszMzcsOSBAQAogCQkJcmV0dXJuIChlcnJvcik7CiAKIAkJaWYgKG1maV9w
ZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCBwaW5mbywgTlVMTCkgPCAwKSB7CisJCQllcnJvciA9
IGVycm5vOwogCQkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8gZm9yIGRyaXZlICVz
IiwgY3ApOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJ
CWlmIChwaW5mby0+Zndfc3RhdGUgIT0gTUZJX1BEX1NUQVRFX1VOQ09ORklHVVJFRF9HT09EKSB7
CkBAIC01NDgsOCArNTUxLDkgQEAKIAkKIAlmZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAo
ZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVy
biAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19z
dXBwb3J0ZWQoKSkgewpAQCAtNjYwLDggKzY2NCw5IEBACiAJICogYXJyYXkgYW5kIHZvbHVtZSBp
ZGVudGlmaWVycy4KIAkgKi8KIAlpZiAobWZpX2NvbmZpZ19yZWFkKGZkLCAmY29uZmlnKSA8IDAp
IHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIHJlYWQgY29uZmlndXJhdGlv
biIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCXAgPSAoY2hh
ciAqKWNvbmZpZy0+YXJyYXk7CiAJc3RhdGUuYXJyYXlfcmVmID0gMHhmZmZmOwpAQCAtNzQ1LDE0
ICs3NTAsMTQgQEAKICNpZmRlZiBERUJVRwogCWlmIChkdW1wKQogCQlkdW1wX2NvbmZpZyhmZCwg
Y29uZmlnKTsKLQllbHNlCiAjZW5kaWYKIAogCS8qIFNlbmQgdGhlIG5ldyBjb25maWcgdG8gdGhl
IGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19B
REQsIGNvbmZpZywgY29uZmlnX3NpemUsCiAJICAgIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQll
cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gYWRkIHZvbHVtZSIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogQ2xlYW4gdXAuICovCkBAIC03
NzQsNyArNzc5LDcgQEAKIGRlbGV0ZV92b2x1bWUoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3Ry
dWN0IG1maV9sZF9pbmZvIGluZm87Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJdWludDhf
dCB0YXJnZXRfaWQsIG1ib3hbNF07CiAKIAkvKgpAQCAtNzk5LDggKzgwNCw5IEBACiAKIAlmZCA9
IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJ
CXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK
IAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19zdXBwb3J0ZWQoKSkgewpAQCAtODEwLDEzICs4MTYs
MTUgQEAKIAl9CiAKIAlpZiAobWZpX2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmdGFyZ2V0X2lk
KSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiSW52YWxpZCB2b2x1bWUgJXMiLCBh
dlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAo
bWZpX2xkX2dldF9pbmZvKGZkLCB0YXJnZXRfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJy
b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBpbmZvIGZvciB2b2x1bWUgJWQiLCB0
YXJnZXRfaWQpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ
aWYgKG1maV92b2x1bWVfYnVzeShmZCwgdGFyZ2V0X2lkKSkgewpAQCAtODI4LDggKzgzNiw5IEBA
CiAJbWJveF9zdG9yZV9sZHJlZihtYm94LCAmaW5mby5sZF9jb25maWcucHJvcGVydGllcy5sZCk7
CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0xEX0RFTEVURSwgTlVMTCwgMCwg
bWJveCwKIAkgICAgc2l6ZW9mKG1ib3gpLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK
IAkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTg1OCw4ICs4NjcsOSBAQAog
CiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVy
cm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl
cnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZkLCBhdlsxXSwgJmRldmlj
ZV9pZCk7CkBAIC04NjcsOCArODc3LDkgQEAKIAkJcmV0dXJuIChlcnJvcik7CiAKIAlpZiAobWZp
X3BkX2dldF9pbmZvKGZkLCBkZXZpY2VfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3Ig
PSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJu
IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9
IE1GSV9QRF9TVEFURV9VTkNPTkZJR1VSRURfR09PRCkgewpAQCAtODc4LDE0ICs4ODksMTYgQEAK
IAogCWlmIChhYyA+IDIpIHsKIAkJaWYgKG1maV9sb29rdXBfdm9sdW1lKGZkLCBhdlsyXSwgJnRh
cmdldF9pZCkgPCAwKSB7CisJCQllcnJvciA9IGVycm5vOwogCQkJd2FybigiSW52YWxpZCB2b2x1
bWUgJXMiLCBhdlsyXSk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJldHVybiAoZXJyb3IpOwog
CQl9CiAJfQogCiAJaWYgKG1maV9jb25maWdfcmVhZChmZCwgJmNvbmZpZykgPCAwKSB7CisJCWVy
cm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byByZWFkIGNvbmZpZ3VyYXRpb24iKTsKLQkJ
cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXNwYXJlID0gbWFsbG9j
KHNpemVvZihzdHJ1Y3QgbWZpX3NwYXJlKSArIHNpemVvZih1aW50MTZfdCkgKgpAQCAtOTM5LDgg
Kzk1Miw5IEBACiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19NQUtFX1NQ
QVJFLCBzcGFyZSwKIAkgICAgc2l6ZW9mKHN0cnVjdCBtZmlfc3BhcmUpICsgc2l6ZW9mKHVpbnQx
Nl90KSAqIHNwYXJlLT5hcnJheV9jb3VudCwKIAkgICAgTlVMTCwgMCwgTlVMTCkgPCAwKSB7CisJ
CWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBhc3NpZ24gc3BhcmUiKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTk2
NCw4ICs5NzgsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkg
eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v
KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZk
LCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC05NzQsOCArOTg5LDkgQEAKIAogCS8qIEdldCB0aGUg
aW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAobWZpX3BkX2dldF9pbmZvKGZkLCBkZXZpY2Vf
aWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVk
IHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1IiwgZGV2aWNlX2lkKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9IE1GSV9Q
RF9TVEFURV9IT1RfU1BBUkUpIHsKQEAgLTk4Niw4ICsxMDAyLDkgQEAKIAltYm94X3N0b3JlX3Bk
cmVmKG1ib3gsICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01E
X0NGR19SRU1PVkVfU1BBUkUsIE5VTEwsIDAsIG1ib3gsCiAJICAgIHNpemVvZihtYm94KSwgTlVM
TCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgc3Bh
cmUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3Nl
KGZkKTsKQEAgLTEwOTMsNyArMTExMCw3IEBACiBkZWJ1Z19jb25maWcoaW50IGFjLCBjaGFyICoq
YXYpCiB7CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwotCWludCBmZDsKKwlpbnQg
ZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoImRlYnVnOiBleHRyYSBhcmd1
bWVudHMiKTsKQEAgLTExMDIsMTQgKzExMTksMTYgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3Vu
aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdldCB0
aGUgY29uZmlnIGZyb20gdGhlIGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9jb25maWdfcmVhZChm
ZCwgJmNvbmZpZykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBn
ZXQgY29uZmlnIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAK
IAkvKiBEdW1wIG91dCB0aGUgY29uZmlndXJhdGlvbi4gKi8KQEAgLTExMjcsNyArMTE0Niw3IEBA
CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwogCWNoYXIgYnVmWzY0XTsKIAlzaXpl
X3QgbGVuOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJ
d2FybngoImR1bXA6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtMTEzNiwyMyArMTE1NSwyNiBAQAog
CiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVy
cm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl
cnJvcik7CiAJfQogCiAJLyogR2V0IHRoZSBzdGFzaGVkIGNvcHkgb2YgdGhlIGxhc3QgZGNtZCBm
cm9tIHRoZSBkcml2ZXIuICovCiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImRldi5tZmku
JWQuZGVidWdfY29tbWFuZCIsIG1maV91bml0KTsKIAlpZiAoc3lzY3RsYnluYW1lKGJ1ZiwgTlVM
TCwgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxl
ZCB0byByZWFkIGRlYnVnIGNvbW1hbmQiKTsKLQkJaWYgKGVycm5vID09IEVOT0VOVCkKLQkJCWVy
cm5vID0gRU9QTk9UU1VQUDsKLQkJcmV0dXJuIChlcnJubyk7CisJCWlmIChlcnJvciA9PSBFTk9F
TlQpCisJCQllcnJvciA9IEVPUE5PVFNVUFA7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNv
bmZpZyA9IG1hbGxvYyhsZW4pOwogCWlmIChzeXNjdGxieW5hbWUoYnVmLCBjb25maWcsICZsZW4s
IE5VTEwsIDApIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gcmVh
ZCBkZWJ1ZyBjb21tYW5kIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK
IAl9CiAJZHVtcF9jb25maWcoZmQsIGNvbmZpZyk7CiAJZnJlZShjb25maWcpOwpJbmRleDogdXNy
LnNiaW4vbWZpdXRpbC9tZmlfdm9sdW1lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vbWZpdXRp
bC9tZmlfdm9sdW1lLmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwvbWZp
X3ZvbHVtZS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAKIHVwZGF0ZV9jYWNo
ZV9wb2xpY3koaW50IGZkLCBzdHJ1Y3QgbWZpX2xkX3Byb3BzICpwcm9wcywgdWludDhfdCBuZXdf
cG9saWN5LAogICAgIHVpbnQ4X3QgbWFzaykKIHsKKwlpbnQgZXJyb3I7CiAJdWludDhfdCBjaGFu
Z2VzLCBwb2xpY3k7CiAKIAlwb2xpY3kgPSAocHJvcHMtPmRlZmF1bHRfY2FjaGVfcG9saWN5ICYg
fm1hc2spIHwgbmV3X3BvbGljeTsKQEAgLTE0MCw4ICsxNDEsOSBAQAogCiAJcHJvcHMtPmRlZmF1
bHRfY2FjaGVfcG9saWN5ID0gcG9saWN5OwogCWlmIChtZmlfbGRfc2V0X3Byb3BzKGZkLCBwcm9w
cykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBzZXQgdm9sdW1l
IHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0K
IAlyZXR1cm4gKDApOwogfQpAQCAtMTYwLDE4ICsxNjIsMjEgQEAKIAogCWZkID0gbWZpX29wZW4o
bWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZp
X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlm
IChtZmlfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZ0YXJnZXRfaWQpIDwgMCkgeworCQllcnJv
ciA9IGVycm5vOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJldHVy
biAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2xkX2dldF9wcm9w
cyhmZCwgdGFyZ2V0X2lkLCAmcHJvcHMpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJubyk7
CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChhYyA9PSAyKSB7CkBAIC0yOTgsOCArMzAz
LDggQEAKIAkJCQl9CiAJCQkJcHJvcHMuZGlza19jYWNoZV9wb2xpY3kgPSBwb2xpY3k7CiAJCQkJ
aWYgKG1maV9sZF9zZXRfcHJvcHMoZmQsICZwcm9wcykgPCAwKSB7CisJCQkJCWVycm9yID0gZXJy
bm87CiAJCQkJCXdhcm4oIkZhaWxlZCB0byBzZXQgdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJCQkJ
ZXJyb3IgPSBlcnJubzsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0zMTcsNyArMzIyLDcg
QEAKIHZvbHVtZV9uYW1lKGludCBhYywgY2hhciAqKmF2KQogewogCXN0cnVjdCBtZmlfbGRfcHJv
cHMgcHJvcHM7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJdWludDhfdCB0YXJnZXRfaWQ7
CiAKIAlpZiAoYWMgIT0gMykgewpAQCAtMzMyLDE4ICszMzcsMjEgQEAKIAogCWZkID0gbWZpX29w
ZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2Fybigi
bWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog
CWlmIChtZmlfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZ0YXJnZXRfaWQpIDwgMCkgeworCQll
cnJvciA9IGVycm5vOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJl
dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2xkX2dldF9w
cm9wcyhmZCwgdGFyZ2V0X2lkLCAmcHJvcHMpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3
YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50ZigibWZpJXUgdm9sdW1lICVzIG5h
bWUgY2hhbmdlZCBmcm9tIFwiJXNcIiB0byBcIiVzXCJcbiIsIG1maV91bml0LApAQCAtMzUxLDgg
KzM1OSw5IEBACiAJYnplcm8ocHJvcHMubmFtZSwgc2l6ZW9mKHByb3BzLm5hbWUpKTsKIAlzdHJj
cHkocHJvcHMubmFtZSwgYXZbMl0pOwogCWlmIChtZmlfbGRfc2V0X3Byb3BzKGZkLCAmcHJvcHMp
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gc2V0IHZvbHVtZSBw
cm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAK
IAljbG9zZShmZCk7CkBAIC0zNjUsNyArMzc0LDcgQEAKIHZvbHVtZV9wcm9ncmVzcyhpbnQgYWMs
IGNoYXIgKiphdikKIHsKIAlzdHJ1Y3QgbWZpX2xkX2luZm8gaW5mbzsKLQlpbnQgZmQ7CisJaW50
IGVycm9yLCBmZDsKIAl1aW50OF90IHRhcmdldF9pZDsKIAogCWlmIChhYyAhPSAyKSB7CkBAIC0z
NzYsMjAgKzM4NSwyMyBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwg
MCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVy
cm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9sb29rdXBfdm9sdW1lKGZk
LCBhdlsxXSwgJnRhcmdldF9pZCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIklu
dmFsaWQgdm9sdW1lOiAlcyIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAo
ZXJyb3IpOwogCX0KIAogCS8qIEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAo
bWZpX2xkX2dldF9pbmZvKGZkLCB0YXJnZXRfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJy
b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIHZvbHVtZSAlcyIs
CiAJCSAgICBtZmlfdm9sdW1lX25hbWUoZmQsIHRhcmdldF9pZCkpOwotCQlyZXR1cm4gKGVycm5v
KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRGlzcGxheSBhbnkgb2YgdGhlIGFjdGl2
ZSBldmVudHMuICovCkluZGV4OiB1c3Iuc2Jpbi9tZml1dGlsL21maV9kcml2ZS5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHVzci5zYmluL21maXV0aWwvbWZpX2RyaXZlLmMJKHJldmlzaW9uIDIxNDI2MCkKKysr
IHVzci5zYmluL21maXV0aWwvbWZpX2RyaXZlLmMJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3
OSwxMSBAQAogbWZpX2xvb2t1cF9kcml2ZShpbnQgZmQsIGNoYXIgKmRyaXZlLCB1aW50MTZfdCAq
ZGV2aWNlX2lkKQogewogCXN0cnVjdCBtZmlfcGRfbGlzdCAqbGlzdDsKLQl1aW50OF90IGVuY2ws
IHNsb3Q7CiAJbG9uZyB2YWw7CisJaW50IGVycm9yOwogCXVfaW50IGk7CiAJY2hhciAqY3A7CisJ
dWludDhfdCBlbmNsLCBzbG90OwogCiAJLyogTG9vayBmb3IgYSByYXcgZGV2aWNlIGlkIGZpcnN0
LiAqLwogCXZhbCA9IHN0cnRvbChkcml2ZSwgJmNwLCAwKTsKQEAgLTExOCw4ICsxMTksOSBAQAog
CQlzbG90ID0gdmFsOwogCiAJCWlmIChtZmlfcGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8
IDApIHsKKwkJCWVycm9yID0gZXJybm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZHJpdmUg
bGlzdCIpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJ
CWZvciAoaSA9IDA7IGkgPCBsaXN0LT5jb3VudDsgaSsrKSB7CkBAIC0zMDIsOCArMzA0LDkgQEAK
IAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBl
cnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAo
ZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9kcml2ZShmZCwgZHJpdmUsICZkZXZp
Y2VfaWQpOwpAQCAtMzEyLDggKzMxNSw5IEBACiAKIAkvKiBHZXQgdGhlIGluZm8gZm9yIHRoaXMg
ZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCAmaW5mbywgTlVM
TCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZv
IGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g
KGVycm9yKTsKIAl9CiAKIAkvKiBUcnkgdG8gY2hhbmdlIHRoZSBzdGF0ZS4gKi8KQEAgLTMyNyw5
ICszMzEsMTAgQEAKIAltYm94WzVdID0gbmV3X3N0YXRlID4+IDg7CiAJaWYgKG1maV9kY21kX2Nv
bW1hbmQoZmQsIE1GSV9EQ01EX1BEX1NUQVRFX1NFVCwgTlVMTCwgMCwgbWJveCwgNiwKIAkgICAg
TlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBzZXQgZHJp
dmUgJXUgdG8gJXMiLCBkZXZpY2VfaWQsCiAJCSAgICBtZmlfcGRzdGF0ZShuZXdfc3RhdGUpKTsK
LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK
QEAgLTM5NSw4ICs0MDAsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZk
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2Ry
aXZlKGZkLCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC00MDUsMTMgKzQxMSwxNCBAQAogCiAJLyog
R2V0IHRoZSBpbmZvIGZvciB0aGlzIGRyaXZlLiAqLwogCWlmIChtZmlfcGRfZ2V0X2luZm8oZmQs
IGRldmljZV9pZCwgJmluZm8sIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gZmV0Y2ggaW5mbyBmb3IgZHJpdmUgJXUiLCBkZXZpY2VfaWQpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHN0YXRl
LCBtdXN0IGJlIFJFQlVJTEQuICovCiAJaWYgKGluZm8uZndfc3RhdGUgIT0gTUZJX1BEX1NUQVRF
X1JFQlVJTEQpIHsKLQkJd2FybigiRHJpdmUgJWQgaXMgbm90IGluIHRoZSBSRUJVSUxEIHN0YXRl
IiwgZGV2aWNlX2lkKTsKKwkJd2FybngoIkRyaXZlICVkIGlzIG5vdCBpbiB0aGUgUkVCVUlMRCBz
dGF0ZSIsIGRldmljZV9pZCk7CiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAKQEAgLTQxOSw4ICs0
MjYsOSBAQAogCW1ib3hfc3RvcmVfcGRyZWYoJm1ib3hbMF0sICZpbmZvLnJlZik7CiAJaWYgKG1m
aV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BEX1JFQlVJTERfU1RBUlQsIE5VTEwsIDAsIG1i
b3gsIDQsCiAJICAgIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWls
ZWQgdG8gc3RhcnQgcmVidWlsZCBvbiBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAo
ZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xvc2UoZmQpOwogCkBAIC00NDQsOCAr
NDUyLDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9kcml2ZShmZCwgYXZb
MV0sICZkZXZpY2VfaWQpOwpAQCAtNDU0LDggKzQ2Myw5IEBACiAKIAkvKiBHZXQgdGhlIGluZm8g
Zm9yIHRoaXMgZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCAm
aW5mbywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBm
ZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOwor
CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBDaGVjayB0aGUgc3RhdGUsIG11c3QgYmUgUkVC
VUlMRC4gKi8KQEAgLTQ2OCw4ICs0NzgsOSBAQAogCW1ib3hfc3RvcmVfcGRyZWYoJm1ib3hbMF0s
ICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BEX1JFQlVJ
TERfQUJPUlQsIE5VTEwsIDAsIG1ib3gsIDQsCiAJICAgIE5VTEwpIDwgMCkgeworCQllcnJvciA9
IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gYWJvcnQgcmVidWlsZCBvbiBkcml2ZSAldSIsIGRl
dmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xv
c2UoZmQpOwogCkBAIC00OTIsOCArNTAzLDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQp
OwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsK
LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZp
X2xvb2t1cF9kcml2ZShmZCwgYXZbMV0sICZkZXZpY2VfaWQpOwpAQCAtNTAyLDggKzUxNCw5IEBA
CiAKIAkvKiBHZXQgdGhlIGluZm8gZm9yIHRoaXMgZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRf
aW5mbyhmZCwgZGV2aWNlX2lkLCAmaW5mbywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87
CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7
Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xvc2UoZmQpOwog
CkBAIC01NTEsOCArNTY0LDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChm
ZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJu
IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9k
cml2ZShmZCwgYXZbMV0sICZkZXZpY2VfaWQpOwpAQCAtNTYxLDE2ICs1NzUsMTggQEAKIAogCS8q
IEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAobWZpX3BkX2dldF9pbmZvKGZk
LCBkZXZpY2VfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2Fy
bigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1IiwgZGV2aWNlX2lkKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCW1ib3hfc3RvcmVfcGRyZWYo
Jm1ib3hbMF0sICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIG9wY29kZSwg
TlVMTCwgMCwgbWJveCwgNCwgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o
IkZhaWxlZCB0byAlcyBjbGVhciBvbiBkcml2ZSAldSIsCiAJCSAgICBvcGNvZGUgPT0gTUZJX0RD
TURfUERfQ0xFQVJfU1RBUlQgPyAic3RhcnQiIDogInN0b3AiLAogCQkgICAgZGV2aWNlX2lkKTsK
LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK
QEAgLTYwNCw4ICs2MjAsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZk
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2Ry
aXZlKGZkLCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC02MTcsMTAgKzYzNCwxMSBAQAogCW1ib3hb
Ml0gPSAwOwogCW1ib3hbM10gPSAwOwogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBvcGNvZGUs
IE5VTEwsIDAsIG1ib3gsIDQsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gJXMgbG9jYXRlIG9uIGRyaXZlICV1IiwKIAkJICAgIG9wY29kZSA9PSBNRklf
RENNRF9QRF9MT0NBVEVfU1RBUlQgPyAic3RhcnQiIDogInN0b3AiLAogCQkgICAgZGV2aWNlX2lk
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAljbG9zZShmZCk7
CiAKSW5kZXg6IHVzci5zYmluL21maXV0aWwvbWZpX2ZsYXNoLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNy
LnNiaW4vbWZpdXRpbC9tZmlfZmxhc2guYwkocmV2aXNpb24gMjE0MjYwKQorKysgdXNyLnNiaW4v
bWZpdXRpbC9tZmlfZmxhc2guYwkod29ya2luZyBjb3B5KQpAQCAtNzIsMTYgKzcyLDE4IEBACiAJ
ICAgIGZ3X3RpbWVfd2lkdGgsIGNvbXAtPmJ1aWxkX3RpbWUpOwogfQogCi1zdGF0aWMgdm9pZAor
c3RhdGljIGludAogZGlzcGxheV9wZW5kaW5nX2Zpcm13YXJlKGludCBmZCkKIHsKIAlzdHJ1Y3Qg
bWZpX2N0cmxfaW5mbyBpbmZvOwogCXN0cnVjdCBtZmlfaW5mb19jb21wb25lbnQgaGVhZGVyOwor
CWludCBlcnJvcjsKIAl1X2ludCBpOwogCiAJaWYgKG1maV9jdHJsX2dldF9pbmZvKGZkLCAmaW5m
bywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQg
Y29udHJvbGxlciBpbmZvIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ
cHJpbnRmKCJtZmklZCBQZW5kaW5nIEZpcm13YXJlIEltYWdlczpcbiIsIG1maV91bml0KTsKQEAg
LTk3LDYgKzk5LDggQEAKIAlkaXNwbGF5X2Zpcm13YXJlKCZoZWFkZXIpOwogCWZvciAoaSA9IDA7
IGkgPCBpbmZvLnBlbmRpbmdfaW1hZ2VfY29tcG9uZW50X2NvdW50OyBpKyspCiAJCWRpc3BsYXlf
ZmlybXdhcmUoJmluZm8ucGVuZGluZ19pbWFnZV9jb21wb25lbnRbaV0pOworCisJcmV0dXJuICgw
KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTExNyw3ICsxMjEsNyBAQAogCXNpemVfdCBucmVhZDsK
IAljaGFyICpidWY7CiAJc3RydWN0IHN0YXQgc2I7Ci0JaW50IGZkLCBmbGFzaDsKKwlpbnQgZXJy
b3IsIGZkLCBmbGFzaDsKIAl1aW50OF90IG1ib3hbNF0sIHN0YXR1czsKIAogCWlmIChhYyAhPSAy
KSB7CkBAIC0xMjcsMTMgKzEzMSwxNSBAQAogCiAJZmxhc2ggPSBvcGVuKGF2WzFdLCBPX1JET05M
WSk7CiAJaWYgKGZsYXNoIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJmbGFzaDog
RmFpbGVkIHRvIG9wZW4gJXMiLCBhdlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g
KGVycm9yKTsKIAl9CiAKIAlpZiAoZnN0YXQoZmxhc2gsICZzYikgPCAwKSB7CisJCWVycm9yID0g
ZXJybm87CiAJCXdhcm4oImZzdGF0KCVzKSIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAlpZiAoc2Iuc3Rfc2l6ZSAlIDEwMjQgIT0gMCB8fCBzYi5z
dF9zaXplID4gMHg3ZmZmZmZmZikgewogCQl3YXJueCgiSW52YWxpZCBmbGFzaCBmaWxlIHNpemUi
KTsKQEAgLTE0Miw4ICsxNDgsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYg
KGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRmlyc3QsIGFzayB0aGUg
ZmlybXdhcmUgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBmbGFzaCBmaWxlLiAqLwpAQCAtMTkw
LDEwICsxOTcsMTAgQEAKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQogCXByaW50ZigiZmluaXNoZWRc
biIpOwotCWRpc3BsYXlfcGVuZGluZ19maXJtd2FyZShmZCk7CisJZXJyb3IgPSBkaXNwbGF5X3Bl
bmRpbmdfZmlybXdhcmUoZmQpOwogCiAJY2xvc2UoZmQpOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1
cm4gKGVycm9yKTsKIH0KIE1GSV9DT01NQU5EKHRvcCwgZmxhc2gsIGZsYXNoX2FkYXB0ZXIpOwpJ
bmRleDogdXNyLnNiaW4vbWZpdXRpbC9tZmlfZXZ0LmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4v
bWZpdXRpbC9tZmlfZXZ0LmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwv
bWZpX2V2dC5jCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2Vycm5vLmg+CiAjaW5jbHVkZSA8ZXJyLmg+Ci0vLyNp
bmNsdWRlIDxsaWJ1dGlsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIu
aD4KICNpbmNsdWRlIDxzdHJpbmdzLmg+CkBAIC02Nyw3ICs2Niw3IEBACiBzaG93X2xvZ3N0YXRl
KGludCBhYywgY2hhciAqKmF2KQogewogCXN0cnVjdCBtZmlfZXZ0X2xvZ19zdGF0ZSBpbmZvOwot
CWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNo
b3cgbG9nc3RhdGU6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtNzYsMTMgKzc1LDE1IEBACiAKIAlm
ZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87
CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9y
KTsKIAl9CiAKIAlpZiAobWZpX2V2ZW50X2dldF9pbmZvKGZkLCAmaW5mbywgTlVMTCkgPCAwKSB7
CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgZXZlbnQgbG9nIGluZm8i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50Zigi
bWZpJWQgRXZlbnQgTG9nIFNlcXVlbmNlIE51bWJlcnM6XG4iLCBtZmlfdW5pdCk7CkBAIC01MzYs
MTggKzUzNywyMCBAQAogCXNzaXplX3Qgc2l6ZTsKIAl1aW50MzJfdCBzZXEsIHN0YXJ0LCBzdG9w
OwogCXVpbnQ4X3Qgc3RhdHVzOwotCWludCBjaCwgZmQsIG51bV9ldmVudHMsIHZlcmJvc2U7CisJ
aW50IGNoLCBlcnJvciwgZmQsIG51bV9ldmVudHMsIHZlcmJvc2U7CiAJdV9pbnQgaTsKIAogCWZk
ID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK
IAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip
OwogCX0KIAogCWlmIChtZmlfZXZlbnRfZ2V0X2luZm8oZmQsICZpbmZvLCBOVUxMKSA8IDApIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBldmVudCBsb2cgaW5mbyIp
OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRGVmYXVs
dCBzZXR0aW5ncy4gKi8KQEAgLTU2NSwxNCArNTY4LDE2IEBACiAJCXN3aXRjaCAoY2gpIHsKIAkJ
Y2FzZSAnYyc6CiAJCQlpZiAocGFyc2VfY2xhc3Mob3B0YXJnLCAmZmlsdGVyLm1lbWJlcnMuY2xh
c3MpIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJd2FybigiRXJyb3IgcGFyc2luZyBl
dmVudCBjbGFzcyIpOwotCQkJCXJldHVybiAoZXJybm8pOworCQkJCXJldHVybiAoZXJyb3IpOwog
CQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgogCQkJaWYgKHBhcnNlX2xvY2FsZShvcHRhcmcs
ICZmaWx0ZXIubWVtYmVycy5sb2NhbGUpIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJ
d2FybigiRXJyb3IgcGFyc2luZyBldmVudCBsb2NhbGUiKTsKLQkJCQlyZXR1cm4gKGVycm5vKTsK
KwkJCQlyZXR1cm4gKGVycm9yKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlICduJzoKQEAgLTYw
OCwyMCArNjEzLDIzIEBACiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAJaWYgKGFjID4gMCAmJiBw
YXJzZV9zZXEoJmluZm8sIGF2WzBdLCAmc3RhcnQpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJFcnJvciBwYXJzaW5nIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciIpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWlmIChhYyA+IDEgJiYgcGFyc2Vf
c2VxKCZpbmZvLCBhdlsxXSwgJnN0b3ApIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJFcnJvciBwYXJzaW5nIGVuZGluZyBzZXF1ZW5jZSBudW1iZXIiKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBtYWxsb2Moc2l6ZSk7CiAJZm9y
IChzZXEgPSBzdGFydDs7KSB7CiAJCWlmIChtZmlfZ2V0X2V2ZW50cyhmZCwgbGlzdCwgbnVtX2V2
ZW50cywgZmlsdGVyLCBzZXEsCiAJCSAgICAmc3RhdHVzKSA8IDApIHsKKwkJCWVycm9yID0gZXJy
bm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZXZlbnRzIik7Ci0JCQlyZXR1cm4gKGVycm5v
KTsKKwkJCXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWlmIChzdGF0dXMgPT0gTUZJX1NUQVRfTk9U
X0ZPVU5EKSB7CiAJCQlpZiAoc2VxID09IHN0YXJ0KQpJbmRleDogdXNyLnNiaW4vbWZpdXRpbC9t
Zmlfc2hvdy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21maXV0aWwvbWZpX3Nob3cuYwkocmV2
aXNpb24gMjE0MjYwKQorKysgdXNyLnNiaW4vbWZpdXRpbC9tZmlfc2hvdy5jCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBACiB7CiAJc3RydWN0IG1maV9jdHJsX2luZm8gaW5mbzsKIAlj
aGFyIHN0cmlwZVs1XTsKLQlpbnQgZmQsIGNvbW1hOworCWludCBlcnJvciwgZmQsIGNvbW1hOwog
CiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgYWRhcHRlcjogZXh0cmEgYXJndW1lbnRz
Iik7CkBAIC02MywxMyArNjMsMTUgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlm
IChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChtZmlfY3RybF9nZXRf
aW5mbyhmZCwgJmluZm8sIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJG
YWlsZWQgdG8gZ2V0IGNvbnRyb2xsZXIgaW5mbyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0
dXJuIChlcnJvcik7CiAJfQogCXByaW50ZigibWZpJWQgQWRhcHRlcjpcbiIsIG1maV91bml0KTsK
IAlwcmludGYoIiAgICBQcm9kdWN0IE5hbWU6ICUuODBzXG4iLCBpbmZvLnByb2R1Y3RfbmFtZSk7
CkBAIC0xMzcsNyArMTM5LDcgQEAKIAlzdHJ1Y3QgbWZpX2JidV9jYXBhY2l0eV9pbmZvIGNhcDsK
IAlzdHJ1Y3QgbWZpX2JidV9kZXNpZ25faW5mbyBkZXNpZ247CiAJdWludDhfdCBzdGF0dXM7Ci0J
aW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlpZiAoYWMgIT0gMSkgewogCQl3YXJueCgic2hv
dyBiYXR0ZXJ5OiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTE0Niw4ICsxNDgsOSBAQAogCiAJZmQg
PSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7
CiAJfQogCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0JCVV9HRVRfQ0FQQUNJ
VFlfSU5GTywgJmNhcCwKQEAgLTE1NiwxNCArMTU5LDE2IEBACiAJCQlwcmludGYoIm1maSVkOiBO
byBiYXR0ZXJ5IHByZXNlbnRcbiIsIG1maV91bml0KTsKIAkJCXJldHVybiAoMCk7CiAJCX0KKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBjYXBhY2l0eSBpbmZvIik7Ci0J
CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2RjbWRf
Y29tbWFuZChmZCwgTUZJX0RDTURfQkJVX0dFVF9ERVNJR05fSU5GTywgJmRlc2lnbiwKIAkgICAg
c2l6ZW9mKGRlc2lnbiksIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRlc2lnbiBpbmZvIik7Ci0JCXJldHVybiAoZXJybm8pOwor
CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlwcmludGYoIm1maSVkOiBCYXR0ZXJ5IFN0YXRlOlxu
IiwgbWZpX3VuaXQpOwpAQCAtMjQyLDcgKzI0Nyw3IEBACiAJc3RydWN0IG1maV9wZF9pbmZvIHBp
bmZvOwogCXVpbnQxNl90IGRldmljZV9pZDsKIAljaGFyICpwOwotCWludCBmZCwgaSwgajsKKwlp
bnQgZXJyb3IsIGZkLCBpLCBqOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgY29u
ZmlnOiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTI1MSwxNCArMjU2LDE2IEBACiAKIAlmZCA9IG1m
aV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh
cm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9
CiAKIAkvKiBHZXQgdGhlIGNvbmZpZyBmcm9tIHRoZSBjb250cm9sbGVyLiAqLwogCWlmIChtZmlf
Y29uZmlnX3JlYWQoZmQsICZjb25maWcpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gZ2V0IGNvbmZpZyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl
cnJvcik7CiAJfQogCiAJLyogRHVtcCBvdXQgdGhlIGNvbmZpZ3VyYXRpb24uICovCkBAIC0zMzcs
OCArMzQ0LDggQEAKIHsKIAlzdHJ1Y3QgbWZpX2xkX2xpc3QgbGlzdDsKIAlzdHJ1Y3QgbWZpX2xk
X2luZm8gaW5mbzsKKwlpbnQgZXJyb3IsIGZkOwogCXVfaW50IGksIGxlbiwgc3RhdGVfbGVuOwot
CWludCBmZDsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93IHZvbHVtZXM6IGV4dHJh
IGFyZ3VtZW50cyIpOwpAQCAtMzQ3LDE0ICszNTQsMTYgQEAKIAogCWZkID0gbWZpX29wZW4obWZp
X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29w
ZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdl
dCB0aGUgbG9naWNhbCBkcml2ZSBsaXN0IGZyb20gdGhlIGNvbnRyb2xsZXIuICovCiAJaWYgKG1m
aV9sZF9nZXRfbGlzdChmZCwgJmxpc3QsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJGYWlsZWQgdG8gZ2V0IHZvbHVtZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8pOwor
CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBMaXN0IHRoZSB2b2x1bWVzLiAqLwpAQCAtMzc2
LDkgKzM4NSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBsaXN0LmxkX2NvdW50OyBpKyspIHsKIAkJ
aWYgKG1maV9sZF9nZXRfaW5mbyhmZCwgbGlzdC5sZF9saXN0W2ldLmxkLnYudGFyZ2V0X2lkLCAm
aW5mbywKIAkJICAgIE5VTEwpIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZh
aWxlZCB0byBnZXQgaW5mbyBmb3Igdm9sdW1lICVkIiwKIAkJCSAgICBsaXN0LmxkX2xpc3RbaV0u
bGQudi50YXJnZXRfaWQpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsK
IAkJfQogCQlwcmludGYoIiU2cyAiLAogCQkgICAgbWZpX3ZvbHVtZV9uYW1lKGZkLCBsaXN0Lmxk
X2xpc3RbaV0ubGQudi50YXJnZXRfaWQpKTsKQEAgLTQxNiw3ICs0MjYsNyBAQAogCXN0cnVjdCBt
ZmlfcGRfbGlzdCAqbGlzdDsKIAlzdHJ1Y3QgbWZpX3BkX2luZm8gaW5mbzsKIAl1X2ludCBpLCBs
ZW4sIHN0YXRlX2xlbjsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAx
KSB7CiAJCXdhcm54KCJzaG93IGRyaXZlczogZXh0cmEgYXJndW1lbnRzIik7CkBAIC00MjUsMTMg
KzQzNSwxNSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgewor
CQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsK
KwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9wZF9nZXRfbGlzdChmZCwgJmxpc3Qs
IE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRy
aXZlIGxpc3QiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog
CS8qIFdhbGsgdGhlIGxpc3Qgb2YgZHJpdmVzIHRvIGRldGVybWluZSB3aWR0aCBvZiBzdGF0ZSBj
b2x1bW4uICovCkBAIC00NDIsOSArNDU0LDEwIEBACiAKIAkJaWYgKG1maV9wZF9nZXRfaW5mbyhm
ZCwgbGlzdC0+YWRkcltpXS5kZXZpY2VfaWQsICZpbmZvLAogCQkgICAgTlVMTCkgPCAwKSB7CisJ
CQllcnJvciA9IGVycm5vOwogCQkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZl
ICV1IiwKIAkJCSAgICBsaXN0LT5hZGRyW2ldLmRldmljZV9pZCk7Ci0JCQlyZXR1cm4gKGVycm5v
KTsKKwkJCXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWxlbiA9IHN0cmxlbihtZmlfcGRzdGF0ZShp
bmZvLmZ3X3N0YXRlKSk7CiAJCWlmIChsZW4gPiBzdGF0ZV9sZW4pCkBAIC00NjIsOSArNDc1LDEw
IEBACiAJCS8qIEZldGNoIGRldGFpbHMgZm9yIHRoaXMgZHJpdmUuICovCiAJCWlmIChtZmlfcGRf
Z2V0X2luZm8oZmQsIGxpc3QtPmFkZHJbaV0uZGV2aWNlX2lkLCAmaW5mbywKIAkJICAgIE5VTEwp
IDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZv
IGZvciBkcml2ZSAldSIsCiAJCQkgICAgbGlzdC0+YWRkcltpXS5kZXZpY2VfaWQpOwotCQkJcmV0
dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJCXByaW50X3BkKCZpbmZv
LCBzdGF0ZV9sZW4sIDEpOwpAQCAtNTExLDcgKzUyNSw3IEBACiB7CiAJc3RydWN0IG1maV9jdHJs
X2luZm8gaW5mbzsKIAlzdHJ1Y3QgbWZpX2luZm9fY29tcG9uZW50IGhlYWRlcjsKLQlpbnQgZmQ7
CisJaW50IGVycm9yLCBmZDsKIAl1X2ludCBpOwogCiAJaWYgKGFjICE9IDEpIHsKQEAgLTUyMSwx
MyArNTM1LDE1IEBACiAKIAlmZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7
CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8p
OworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2N0cmxfZ2V0X2luZm8oZmQsICZp
bmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdl
dCBjb250cm9sbGVyIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip
OwogCX0KIAogCWlmIChpbmZvLnBhY2thZ2VfdmVyc2lvblswXSAhPSAnXDAnKQpJbmRleDogdXNy
LnNiaW4vbWZpdXRpbC9tZmlfcGF0cm9sLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vbWZpdXRp
bC9tZmlfcGF0cm9sLmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwvbWZp
X3BhdHJvbC5jCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTMgQEAKIHN0YXRpYyBpbnQK
IHBhdHJvbF9nZXRfcHJvcHMoaW50IGZkLCBzdHJ1Y3QgbWZpX3ByX3Byb3BlcnRpZXMgKnByb3Ap
CiB7CisJaW50IGVycm9yOwogCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BS
X0dFVF9QUk9QRVJUSUVTLCBwcm9wLAogCSAgICBzaXplb2YoKnByb3ApLCBOVUxMLCAwLCBOVUxM
KSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBwYXRyb2wg
cmVhZCBwcm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm5vKTsKIAl9
CiAJcmV0dXJuICgwKTsKIH0KQEAgLTgxLDE5ICs4MywyMyBAQAogCWNoYXIgbGFiZWxbMTZdOwog
CXRpbWVfdCBub3c7CiAJdWludDMyX3QgYXQ7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJ
dV9pbnQgaTsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAogCXRpbWUoJm5vdyk7CiAJbWZpX2dldF90aW1lKGZkLCAm
YXQpOwotCWlmIChwYXRyb2xfZ2V0X3Byb3BzKGZkLCAmcHJvcCkgPCAwKQotCQlyZXR1cm4gKGVy
cm5vKTsKKwlpZiAoYXQgPT0gMCkKKwkJcmV0dXJuIChFTlhJTyk7CisJZXJyb3IgPSBwYXRyb2xf
Z2V0X3Byb3BzKGZkLCAmcHJvcCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKIAlw
cmludGYoIk9wZXJhdGlvbiBNb2RlOiAiKTsKIAlzd2l0Y2ggKHByb3Aub3BfbW9kZSkgewogCWNh
c2UgTUZJX1BSX09QTU9ERV9BVVRPOgpAQCAtMTIyLDggKzEyOCw5IEBACiAKIAlpZiAobWZpX2Rj
bWRfY29tbWFuZChmZCwgTUZJX0RDTURfUFJfR0VUX1NUQVRVUywgJnN0YXR1cywKIAkgICAgc2l6
ZW9mKHN0YXR1cyksIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3
YXJuKCJGYWlsZWQgdG8gZ2V0IHBhdHJvbCByZWFkIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChl
cnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlwcmludGYoIlJ1bnMgQ29tcGxldGVkOiAl
dVxuIiwgc3RhdHVzLm51bV9pdGVyYXRpb24pOwogCXByaW50ZigiQ3VycmVudCBTdGF0ZTogIik7
CkBAIC0xNDYsOCArMTUzLDkgQEAKIAl9CiAJaWYgKHN0YXR1cy5zdGF0ZSA9PSBNRklfUFJfU1RB
VEVfQUNUSVZFKSB7CiAJCWlmIChtZmlfcGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8IDAp
IHsKKwkJCWVycm9yID0gZXJybm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRyaXZlIGxpc3Qi
KTsKLQkJCXJldHVybiAoZXJybm8pOworCQkJcmV0dXJuIChlcnJvcik7CiAJCX0KIAogCQlmb3Ig
KGkgPSAwOyBpIDwgbGlzdC0+Y291bnQ7IGkrKykgewpAQCAtMTU2LDkgKzE2NCwxMCBAQAogCiAJ
CQlpZiAobWZpX3BkX2dldF9pbmZvKGZkLCBsaXN0LT5hZGRyW2ldLmRldmljZV9pZCwgJmluZm8s
CiAJCQkgICAgTlVMTCkgPCAwKSB7CisJCQkJZXJyb3IgPSBlcnJubzsKIAkJCQl3YXJuKCJGYWls
ZWQgdG8gZmV0Y2ggaW5mbyBmb3IgZHJpdmUgJXUiLAogCQkJCSAgICBsaXN0LT5hZGRyW2ldLmRl
dmljZV9pZCk7Ci0JCQkJcmV0dXJuIChlcnJubyk7CisJCQkJcmV0dXJuIChlcnJvcik7CiAJCQl9
CiAJCQlpZiAoaW5mby5wcm9nX2luZm8uYWN0aXZlICYgTUZJX1BEX1BST0dSRVNTX1BBVFJPTCkg
ewogCQkJCXNucHJpbnRmKGxhYmVsLCBzaXplb2YobGFiZWwpLCAiICAgIERyaXZlICV1IiwKQEAg
LTE3OCwxOCArMTg3LDIwIEBACiBzdGF0aWMgaW50CiBzdGFydF9wYXRyb2woaW50IGFjLCBjaGFy
ICoqYXYpCiB7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlmZCA9IG1maV9vcGVuKG1m
aV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9v
cGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAo
bWZpX2RjbWRfY29tbWFuZChmZCwgTUZJX0RDTURfUFJfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDAs
IE5VTEwpIDwKIAkgICAgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8g
c3RhcnQgcGF0cm9sIHJlYWQiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip
OwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTIwMSwxOCArMjEyLDIwIEBACiBzdGF0aWMgaW50CiBz
dG9wX3BhdHJvbChpbnQgYWMsIGNoYXIgKiphdikKIHsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBm
ZDsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3Ig
PSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy
biAoZXJyb3IpOwogCX0KIAogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBNRklfRENNRF9QUl9T
VE9QLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKSA8CiAJICAgIDApIHsKKwkJZXJyb3IgPSBlcnJu
bzsKIAkJd2FybigiRmFpbGVkIHRvIHN0b3AgcGF0cm9sIHJlYWQiKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTIyNywxMCArMjQw
LDEwIEBACiAJc3RydWN0IG1maV9wcl9wcm9wZXJ0aWVzIHByb3A7CiAJbG9uZyB2YWw7CiAJdGlt
ZV90IG5vdzsKKwlpbnQgZXJyb3IsIGZkOwogCXVpbnQzMl90IGF0LCBuZXh0X2V4ZWMsIGV4ZWNf
ZnJlcTsKIAljaGFyICpjcDsKIAl1aW50OF90IG9wX21vZGU7Ci0JaW50IGZkOwogCiAJZXhlY19m
cmVxID0gMDsJLyogR0NDIHRvbyBzdHVwaWQgKi8KIAluZXh0X2V4ZWMgPSAwOwpAQCAtMjcyLDEy
ICsyODUsMTQgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7
CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChwYXRyb2xfZ2V0X3Byb3BzKGZkLCAmcHJv
cCkgPCAwKQotCQlyZXR1cm4gKGVycm5vKTsKKwllcnJvciA9IHBhdHJvbF9nZXRfcHJvcHMoZmQs
ICZwcm9wKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOwogCXByb3Aub3BfbW9kZSA9
IG9wX21vZGU7CiAJaWYgKG9wX21vZGUgPT0gTUZJX1BSX09QTU9ERV9BVVRPKSB7CiAJCWlmIChh
YyA+IDIpCkBAIC0yOTQsOCArMzA5LDkgQEAKIAl9CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQs
IE1GSV9EQ01EX1BSX1NFVF9QUk9QRVJUSUVTLCAmcHJvcCwKIAkgICAgc2l6ZW9mKHByb3ApLCBO
VUxMLCAwLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRv
IHNldCBwYXRyb2wgcmVhZCBwcm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1
cm4gKGVycm9yKTsKIAl9CiAKIAljbG9zZShmZCk7Cg==
--0016e64967c8f95e77049389033e--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTikJ80npsEthOvnYy3w7Fdi8yqa_2ibbTrds9k3X>