[kaffe] Debugging Help

Rob Gonzalez rgonzale@wso.williams.edu
Wed Jul 30 11:50:03 2003


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--Boundary_(ID_0Aev7pwXCMxTQUJcLVr1bA)
Content-type: TEXT/PLAIN; charset=US-ASCII

Hi all,

Attached is a patch for a nearly completed bytecode verifier.  There are
two things that are still not checked that are required by JVM Spec 4.8.2,
but they will be pretty simple to add in later.

Kaffe with verification passes all the usual regression tests with it
except for LostTrampolineFrame.  The VerifyError is raised when
LostTrampolineFrame$DamagedClass is verified, and is caught by the wrong
handler.  I don't really know what's going on with that test, and have
tried following it in gdb, but am having troubles deducing the problem.

I've run Kaffe with the verifier on some larger programs successfully.  
I'm currently trying to get it to run Jython 2.1.  It executes the
installer program fine, but when trying to run Jython it chokes during
verification.  What's strange is that I don't think it's necessarily the
verifier that's messing up (though, when run with -noverify it executes
pretty much fine).  It throws a NoClassDefFoundError for
Lorg/python/core/PyException; when using getClassFromSignature() to find
it.  The ClassLoader actually does return NULL, though that class is in
the classpath and the Loader has successfully loaded other classes from
that same subpackage previously.

It's not perfect, but it's a pretty good beta release :).  If anyone has
the time to look at the bugs with either Jython 2.1 or with the
LastTrampolineFrame test, I'd be very grateful.


Thanks,
Rob

--Boundary_(ID_0Aev7pwXCMxTQUJcLVr1bA)
Content-id: <Pine.LNX.4.21.0307301449190.18326@olga.williams.edu>
Content-type: TEXT/PLAIN; charset=US-ASCII; name="verifier.patch"
Content-transfer-encoding: BASE64
Content-disposition: attachment; filename="verifier.patch"
Content-description:

LS0tIGthZmZlLWN2cy9rYWZmZS9rYWZmZXZtL3ZlcmlmeS5jCTIwMDMtMDct
MzAgMTI6MDg6MDIuMDAwMDAwMDAwIC0wNTAwDQorKysga2FmZmUva2FmZmUv
a2FmZmV2bS92ZXJpZnkuYwkyMDAzLTA3LTMwIDEzOjUxOjEwLjAwMDAwMDAw
MCAtMDUwMA0KQEAgLTg3Niw0NCArODc2LDUxIEBADQogCXVpbnQzMiBzdGFy
dEFkZHI7DQogCXVpbnQzMiBsYXN0QWRkcjsgIC8vIHdoZXRoZXIgaXQgYmUg
dGhlIGFkZHJlc3Mgb2YgYSBHT1RPLCBldGMuDQogCQ0KLQkvLyB3aGljaCBh
ZGRyZXNzIHRoaXMgYmxvY2sgcmV0dXJucyB0byBvbiBhIFJFVC4uLg0KLQkv
LyBhIHZhbHVlIG9mIHplcm8gaXMgYW4gZXJyb3INCi0JdWludDMyIHJldEFk
ZHI7DQotCQ0KLQkNCiAJLy8gc3RhdHVzIG9mIGJsb2NrLi4uY2hhbmdlZCAo
bmVlZHMgdG8gYmUgcmUtZXZhbHVhdGVkKSwgdmlzaXRlZCwgZXRjLg0KLQlj
aGFyIHN0YXR1czsNCi0JDQorCXVpbnQzMiBzdGF0dXM7DQogCQ0KIAlIamF2
YV9sYW5nX0NsYXNzKiogbG9jYWxzOw0KKwl1aW50MzIqICAgICAgICAgICAg
bG9jYWxzX2luZm87DQogCQ0KIAl1aW50MzIgc3RhY2tzejsNCisJdWludDMy
KiAgICAgICAgICAgIG9wc3RhY2tfaW5mbzsgICAvLyBhZGRpdGlvbmFsIGlu
Zm8gZm9yIHN0dWZmIG9uIHRoZSBvcHN0YWNrDQogCUhqYXZhX2xhbmdfQ2xh
c3MqKiBvcHN0YWNrOw0KLQkNCi0JDQotCS8vIGVhY2ggYmxvY2sgbWF5IGhh
dmUgYSBzZXQgb2YgcmV0QWRkciBjb250ZXh0cw0KLQlzdHJ1Y3QgYmxvY2tf
aW5mbyogbmV4dDsNCiB9IEJsb2NrSW5mbzsNCiANCiANCiAvLyBzdGF0dXMg
ZmxhZ3MgZm9yIGEgYmFzaWMgYmxvY2suDQogLy8gdGhlc2UgYWxzbyBwZXJ0
YWluIHRvIHRoZSBzdGF0dXNbXSBhcnJheSBmb3IgdGhlIGVudGlyZSBpbnN0
cnVjdGlvbiBhcnJheQ0KLSNkZWZpbmUgQ0hBTkdFRCAgICAgICAgICAxDQot
I2RlZmluZSBWSVNJVEVEICAgICAgICAgIDINCi0jZGVmaW5lIElTX0lOU1RS
VUNUSU9OICAgNA0KKyNkZWZpbmUgQ0hBTkdFRCAgICAgICAgICAgIDENCisj
ZGVmaW5lIFZJU0lURUQgICAgICAgICAgICAyDQorI2RlZmluZSBJU19JTlNU
UlVDVElPTiAgICAgNA0KIA0KIC8vIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBw
cmVjZWVkZWQgYnkgV0lERQ0KLSNkZWZpbmUgV0lERV9NT0RERUQgICAgICA4
DQorI2RlZmluZSBXSURFX01PRERFRCAgICAgICAgOA0KIA0KIC8vIHVzZWQg
YXQgdGhlIGluc3RydWN0aW9uIHN0YXR1cyBsZXZlbCB0byBmaW5kIGJhc2lj
IGJsb2Nrcw0KLSNkZWZpbmUgU1RBUlRfQkxPQ0sgICAgIDE2DQotI2RlZmlu
ZSBFTkRfQkxPQ0sgICAgICAgMzINCisjZGVmaW5lIFNUQVJUX0JMT0NLICAg
ICAgIDE2DQorI2RlZmluZSBFTkRfQkxPQ0sgICAgICAgICAzMg0KIA0KICNk
ZWZpbmUgRVhDRVBUSU9OX0hBTkRMRVIgNjQNCiANCiANCisvLyBzdGF0dXMg
ZmxhZ3MgZm9yIG9wc3RhY2svbG9jYWwgaW5mbyBhcnJheXMNCisjZGVmaW5l
IENMQVNTX1NJR1NUUiAgICAgICAxDQorI2RlZmluZSBDTEFTU19OQU1FU1RS
ICAgICAgMg0KKw0KKw0KKw0KKy8vIFRPRE86IHVzZSB0aGUgYnVpbHRpbiBo
YXNoIHRhYmxlIGRhdGEgc3RydWN0dXJlIGluc3RlYWQgc28gd2UgY2FuIGF2
b2lkIHJlcGVhdHMNCit0eXBlZGVmIHN0cnVjdCBzaWdfc3RhY2sNCit7DQor
CWNvbnN0IGNoYXIqIHNpZzsNCisJc3RydWN0IHNpZ19zdGFjayogbmV4dDsN
Cit9IFNpZ1N0YWNrOw0KKw0KKw0KKw0KIC8vIHR5cGVzIGZvciB0eXBlIGNo
ZWNraW5nIChwYXNzIDNiKQ0KLSNkZWZpbmUJVFVOU1RBQkxFCQkoKEhqYXZh
X2xhbmdfQ2xhc3MqKTApDQorI2RlZmluZQlUVU5TVEFCTEUJCSgoSGphdmFf
bGFuZ19DbGFzcyopMSkNCiANCiAvLyByZXR1cm5BZGRyZXNzIHR5cGUNCiAj
ZGVmaW5lCVRBRERSCQkJKChIamF2YV9sYW5nX0NsYXNzKikyKQ0KQEAgLTk0
MiwxOCArOTQ5LDkyIEBADQogI2RlZmluZSBJU19QUklNSVRJVkVfVFlQRShf
VCkgKF9UID09IFRJTlQgfHwgX1QgPT0gVEZMT0FUIHx8IF9UID09IFRMT05H
IHx8IF9UID09IFRET1VCTEUpDQogDQogDQorLyoNCisgKiBhcnJheSB0eXBl
cw0KKyAqLw0KKyNkZWZpbmUgVENIQVJBUlIJCShjaGFyQXJyQ2xhc3MpDQor
DQorLy8gaW50ZXJuYWxseSwgYm9vbGVhbnMgYXJlIHJlcHJlc2VudGVkIGJ5
IGJ5dGVzDQorI2RlZmluZSBUQk9PTEFSUiAgICAgICAgICAgICAgICAoYnl0
ZUFyckNsYXNzKQ0KKyNkZWZpbmUgVEJZVEVBUlIJCShieXRlQXJyQ2xhc3Mp
DQorDQorI2RlZmluZSBUU0hPUlRBUlIJCShzaG9ydEFyckNsYXNzKQ0KKyNk
ZWZpbmUgVElOVEFSUgkJCShpbnRBcnJDbGFzcykNCisjZGVmaW5lIFRMT05H
QVJSCQkobG9uZ0FyckNsYXNzKQ0KKw0KKyNkZWZpbmUgVEZMT0FUQVJSCQko
ZmxvYXRBcnJDbGFzcykNCisjZGVmaW5lIFRET1VCTEVBUlIJCShkb3VibGVB
cnJDbGFzcykNCisNCisjZGVmaW5lIFRPQkpBUlIJCQkob2JqZWN0QXJyQ2xh
c3MpDQorDQorDQorI2RlZmluZSBJU19QUklNSVRJVkVfQVJSQVkoX1QpIFwN
CisgICAgICAgICAgICgoX1QpID09IFRDSEFSQVJSIHx8IChfVCkgPT0gVEJZ
VEVBUlIgfHwgKF9UKSA9PSBUU0hPUlRBUlIgfHwgKF9UKSA9PSBUSU5UQVJS
IHx8IChfVCkgPT0gVExPTkdBUlIgfHwgXA0KKyAgICAgICAgICAgIChfVCkg
PT0gVEZMT0FUQVJSIHx8IChfVCkgPT0gVERPVUJMRUFSUikNCisNCisvLyBm
b3IgSVNfQVJSQVkgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBDTEFTU19J
U19BUlJBWSBpcyBwYXNzZWQgc29tZXRoaW5nIGxlZ2l0aW1hdGUuLi4NCisj
ZGVmaW5lIElTX0FSUkFZKF9UKSBcDQorICAgICAgICAgICAoKF9UKSAmJiAo
KF9UKSAhPSBUVU5TVEFCTEUpICYmICgoX1QpICE9IFRBRERSKSAmJiAoKF9U
KSAhPSBUTlVMTCkgJiYgKChfVCkgIT0gVFdJREUpICYmIFwNCisJICAgIENM
QVNTX0lTX0FSUkFZKF9UKSkNCisNCisNCiAvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioNCiAgKiBNZXRob2RzIGZvciBQYXNzIDMg
VmVyaWZpY2F0aW9uDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLw0KICNpZmRlZiBLQUZGRV9WTURFQlVHDQogc3RhdGljIHZv
aWQgcHJpbnRJbnN0cnVjdGlvbihjb25zdCBpbnQgb3Bjb2RlKTsNCitzdGF0
aWMgdm9pZCBwcmludFR5cGUoY29uc3QgSGphdmFfbGFuZ19DbGFzcyogdHlw
ZSwgY29uc3QgdWludDMyIHRpbmZvKTsNCitzdGF0aWMgdm9pZCBwcmludEJs
b2NrKGNvbnN0IE1ldGhvZCogbWV0aG9kLCBjb25zdCBCbG9ja0luZm8qIGJp
bmZvLCBjb25zdCBjaGFyKiBpbmRlbnQpOw0KICNlbmRpZg0KIA0KK3N0YXRp
YyBCbG9ja0luZm8qICAgICAgICBjcmVhdGVCbG9jayhjb25zdCBNZXRob2Qq
IG1ldGhvZCk7DQorc3RhdGljIHZvaWQgICAgICAgICAgICAgIGNvcHlCbG9j
a0RhdGEoY29uc3QgTWV0aG9kKiBtZXRob2QsIEJsb2NrSW5mbyogZnJvbUJs
b2NrLCBCbG9ja0luZm8qIHRvQmxvY2spOw0KK3N0YXRpYyB2b2lkICAgICAg
ICAgICAgICBjb3B5QmxvY2tTdGF0ZShjb25zdCBNZXRob2QqIG1ldGhvZCwg
QmxvY2tJbmZvKiBmcm9tQmxvY2ssIEJsb2NrSW5mbyogdG9CbG9jayk7DQor
c3RhdGljIHZvaWQgICAgICAgICAgICAgIGZyZWVCbG9jayhCbG9ja0luZm8q
IGJpbmZvKTsNCisNCitzdGF0aWMgQmxvY2tJbmZvKiAgICAgICAgaW5XaGlj
aEJsb2NrKHVpbnQzMiBwYywgQmxvY2tJbmZvKiogYmxvY2tzLCB1aW50MzIg
bnVtQmxvY2tzKTsNCisNCisNCitzdGF0aWMgU2lnU3RhY2sqICAgICAgICAg
cHVzaFNpZyhTaWdTdGFjayogc2lncywgY29uc3QgY2hhciogc2lnKTsNCitz
dGF0aWMgdm9pZCAgICAgICAgICAgICAgZnJlZVNpZ1N0YWNrKFNpZ1N0YWNr
KiBzaWdzKTsNCisNCisNCiBzdGF0aWMgYm9vbCAgICAgICAgICAgICAgdmVy
aWZ5TWV0aG9kKGVycm9ySW5mbyogZWluZm8sIE1ldGhvZCogbWV0aG9kKTsN
CiBzdGF0aWMgQmxvY2tJbmZvKiogICAgICAgdmVyaWZ5TWV0aG9kM2EoZXJy
b3JJbmZvKiBlaW5mbywNCiAJCQkJCU1ldGhvZCogbWV0aG9kLA0KIAkJCQkJ
dWludDMyKiBzdGF0dXMsICAgICAgIC8vIGFycmF5IG9mIHN0YXR1cyBpbmZv
IGZvciBhbGwgb3Bjb2Rlcw0KIAkJCQkJdWludDMyKiBudW1CbG9ja3MpOyAv
LyBudW1iZXIgb2YgYmFzaWMgYmxvY2tzDQorc3RhdGljIGJvb2wgICAgICAg
ICAgICAgIHZlcmlmeU1ldGhvZDNiKGVycm9ySW5mbyogZWluZm8sDQorCQkJ
CQljb25zdCBNZXRob2QqIG1ldGhvZCwNCisJCQkJCWNvbnN0IHVpbnQzMiog
c3RhdHVzLA0KKwkJCQkJQmxvY2tJbmZvKiogYmxvY2tzLA0KKwkJCQkJY29u
c3QgdWludDMyIG51bUJsb2NrcywNCisJCQkJCVNpZ1N0YWNrKiBzaWdzKTsN
CitzdGF0aWMgYm9vbCAgICAgICAgICAgICAgbWVyZ2UoZXJyb3JJbmZvKiBl
aW5mbywgY29uc3QgTWV0aG9kKiBtZXRob2QsIEJsb2NrSW5mbyogZnJvbUJs
b2NrLCBCbG9ja0luZm8qIHRvQmxvY2spOw0KK3N0YXRpYyBib29sICAgICAg
ICAgICAgICB2ZXJpZnlCYXNpY0Jsb2NrKGVycm9ySW5mbyosIGNvbnN0IE1l
dGhvZCosIEJsb2NrSW5mbyosIFNpZ1N0YWNrKiopOw0KKw0KK3N0YXRpYyBj
b25zdCBjaGFyKiAgICAgICBnZXROZXh0QXJnKGNvbnN0IGNoYXIqIHNpZywg
Y2hhciogYnVmKTsNCitzdGF0aWMgYm9vbCAgICAgICAgICAgICAgbG9hZElu
aXRpYWxBcmdzKGNvbnN0IE1ldGhvZCogbWV0aG9kLCBlcnJvckluZm8qIGVp
bmZvLA0KKwkJCQkJIEJsb2NrSW5mbyogYmxvY2ssIFNpZ1N0YWNrKiogc2ln
cyk7DQorDQorc3RhdGljIEhqYXZhX2xhbmdfQ2xhc3MqIG1lcmdlVHlwZXMo
ZXJyb3JJbmZvKiBlaW5mbywgSGphdmFfbGFuZ19DbGFzcyogdGhpcywNCisJ
CQkJICAgIEhqYXZhX2xhbmdfQ2xhc3MqIHQxLCB1aW50MzIgaW5mbzEsDQor
CQkJCSAgICBIamF2YV9sYW5nX0NsYXNzKiB0MiwgdWludDMyIGluZm8yLA0K
KwkJCQkgICAgdWludDMyKiBpbmZvKTsNCitzdGF0aWMgSGphdmFfbGFuZ19D
bGFzcyogZ2V0Q29tbW9uU3VwZXJjbGFzcyhIamF2YV9sYW5nX0NsYXNzKiB0
MSwgSGphdmFfbGFuZ19DbGFzcyogdDIpOw0KKw0KK3N0YXRpYyBib29sICAg
ICAgICAgICAgICBpc1JlZmVyZW5jZShjb25zdCBIamF2YV9sYW5nX0NsYXNz
KiwgY29uc3QgdWludDMyKTsNCitzdGF0aWMgYm9vbCAgICAgICAgICAgICAg
dHlwZWNoZWNrKGVycm9ySW5mbyosIEhqYXZhX2xhbmdfQ2xhc3MqLA0KKwkJ
CQkgICBIamF2YV9sYW5nX0NsYXNzKiwgdWludDMyLA0KKwkJCQkgICBIamF2
YV9sYW5nX0NsYXNzKiwgdWludDMyKTsNCitzdGF0aWMgYm9vbCAgICAgICAg
ICAgICAgaW1wbGVtZW50cyhIamF2YV9sYW5nX0NsYXNzKiB0MSwgSGphdmFf
bGFuZ19DbGFzcyogdDIpOw0KKw0KK3N0YXRpYyBjb25zdCBjaGFyKiAgICAg
ICBnZXRSZXR1cm5TaWcoY29uc3QgTWV0aG9kKik7DQorc3RhdGljIHVpbnQz
MiAgICAgICAgICAgIGNvdW50U2l6ZU9mQXJnc0luU2lnbmF0dXJlKGNvbnN0
IGNoYXIqIHNpZyk7DQorc3RhdGljIGJvb2wgICAgICAgICAgICAgIGNoZWNr
TWV0aG9kQ2FsbChlcnJvckluZm8qIGVpbmZvLCBjb25zdCBNZXRob2QqIG1l
dGhvZCwNCisJCQkJCSBCbG9ja0luZm8qIGJpbmZvLCB1aW50MzIgcGMsDQor
CQkJCQkgU2lnU3RhY2sqKiBzaWdzKTsNCisNCiANCiANCiAvKg0KQEAgLTEw
MzIsMjQgKzExMTMsOTIgQEANCiAJaW50IGNvZGVsZW4gID0gTUVUSE9EX0JZ
VEVDT0RFX0xFTihtZXRob2QpOw0KIAkNCiAJdWludDMyKiBzdGF0dXMgPSBO
VUxMOyAvLyB0aGUgc3RhdHVzIG9mIGVhY2ggaW5zdHJ1Y3Rpb24uLi5jaGFu
Z2VkLCB2aXNpdGVkLCBldGMuDQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB1c2VkIHByaW1hcmlseSB0byBoZWxwIGZpbmQgdGhlIGJhc2lj
IGJsb2NrcyBpbml0aWFsbHkNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdXNlZCBwcmltYXJpbHkgdG8gaGVscCBmaW5kIHRoZSBiYXNp
YyBibG9ja3MgaW5pdGlhbGx5DQorCQ0KKwlTaWdTdGFjayogc2lncyA9IE5V
TEw7DQogCQ0KIAl1aW50MzIgICAgICBudW1CbG9ja3MgPSAwOw0KKwlCbG9j
a0luZm8qKiBibG9ja3MgICAgPSBOVUxMOw0KKwkNCisJDQorCS8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Kg0KKwkgKiBNZW1vcnkgTWFuYWdlbWVudCBNYWNyb3MNCisJICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Lw0KKwkvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZm9yZ2V0IHRvIHVuYWxs
b2MgYW55dGhpbmcuLi4NCisJLy8gc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcg
QU5ZIEVYSVQgRlJPTSBUSElTIE1FVEhPRA0KKyNkZWZpbmUgQ0xFQU5VUCBc
DQorCURCRyhWRVJJRlkzLCBkcHJpbnRmKCIgICAgY2xlYW5pbmcgdXAuLi4i
KTsgKTsgXA0KKwlLRlJFRShzdGF0dXMpOyBcDQorICAgICAgICBpZiAoYmxv
Y2tzICE9IE5VTEwpIHsgXA0KKwkJd2hpbGUgKG51bUJsb2NrcyA+IDApIHsg
XA0KKwkJCWZyZWVCbG9jayhibG9ja3NbLS1udW1CbG9ja3NdKTsgXA0KKwkJ
fSBcDQorCQlLRlJFRShibG9ja3MpOyBcDQorCX0gXA0KKyAgICAgICAgZnJl
ZVNpZ1N0YWNrKHNpZ3MpOyBcDQorICAgICAgICBEQkcoVkVSSUZZMywgZHBy
aW50ZigiIGRvbmVcbiIpOyApDQorCQ0KKyNkZWZpbmUgRkFJTCBcDQorICAg
ICAgICBEQkcoVkVSSUZZMywgZHByaW50ZigiICAgIFZlcmlmeSBNZXRob2Qg
M2I6ICVzLiVzJXM6IEZBSUxFRFxuIiwgXA0KKwkJCSAgICAgQ0xBU1NfQ05B
TUUobWV0aG9kLT5jbGFzcyksIE1FVEhPRF9OQU1FRChtZXRob2QpLCBNRVRI
T0RfU0lHRChtZXRob2QpKTsgKTsgXA0KKwlpZiAoZWluZm8tPnR5cGUgPT0g
MCkgeyBcDQorCQlEQkcoVkVSSUZZMywgZHByaW50ZigiICAgICAgREJHIEVS
Uk9SOiBzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uXG4iKTsgKTsg
XA0KKwkJcG9zdEV4Y2VwdGlvbihlaW5mbywgSkFWQV9MQU5HKFZlcmlmeUVy
cm9yKSk7IFwNCisJfSBcDQorICAgICAgICBDTEVBTlVQOyBcDQorICAgICAg
ICByZXR1cm4oZmFsc2UpDQorCQ0KIAkNCiAJLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogCSAqIE1l
bW9yeSBBbGxvY2F0aW9uDQogCSAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0JREJHKFZFUklGWTMs
IGRwcmludGYoIiAgICBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdmVyaWZpY2F0
aW9uIChjb2RlbGVuID0gJWQpLi4uXG4iLCBjb2RlbGVuKTsgKTsNCisJREJH
KFZFUklGWTMsIGRwcmludGYoIiAgICAgICAgYWxsb2NhdGluZyBtZW1vcnkg
Zm9yIHZlcmlmaWNhdGlvbiAoY29kZWxlbiA9ICVkKS4uLlxuIiwgY29kZWxl
bik7ICk7DQogCQ0KLSAgICAgICAgc3RhdHVzID0gY2hlY2tQdHIoKGNoYXIq
KUtNQUxMT0MoY29kZWxlbiAqIHNpemVvZih1aW50MzIpKSk7DQorICAgICAg
ICBzdGF0dXMgICA9IGNoZWNrUHRyKChjaGFyKilLTUFMTE9DKGNvZGVsZW4g
KiBzaXplb2YodWludDMyKSkpOw0KIAkNCiAJLy8gZmluZCBiYXNpYyBibG9j
a3MgYW5kIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlbQ0KLQl2ZXJpZnlNZXRo
b2QzYShlaW5mbywgbWV0aG9kLCBzdGF0dXMsICZudW1CbG9ja3MpOw0KKwli
bG9ja3MgPSB2ZXJpZnlNZXRob2QzYShlaW5mbywgbWV0aG9kLCBzdGF0dXMs
ICZudW1CbG9ja3MpOw0KKwlpZiAoIWJsb2Nrcykgew0KKwkJREJHKFZFUklG
WTMsIGRwcmludGYoIiAgICAgICAgc29tZSBraW5kYSBlcnJvciBmaW5kaW5n
IHRoZSBiYXNpYyBibG9ja3MgaW4gcGFzcyAzYVxuIik7ICk7DQorCQkNCisJ
CS8vIHByb3BhZ2F0ZSBlcnJvcg0KKwkJRkFJTDsNCisJfQ0KIAkNCi0JREJH
KFZFUklGWTMsIGRwcmludGYoIiAgICBkb25lIGFsbG9jYXRpbmcgbWVtb3J5
XG4iKTsgKTsNCisJREJHKFZFUklGWTMsIGRwcmludGYoIiAgICAgICAgZG9u
ZSBhbGxvY2F0aW5nIG1lbW9yeVxuIik7ICk7DQorCS8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKwkg
KiBQcmVwYXJlIGZvciBkYXRhLWZsb3cgYW5hbHlzaXMNCisJICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Lw0KIAkNCi0JS0ZSRUUoc3RhdHVzKTsNCisJLy8gbG9hZCBpbml0aWFsIGFy
Z3VtZW50cyBpbnRvIGxvY2FsIHZhcmlhYmxlIGFycmF5DQorCURCRyhWRVJJ
RlkzLCBkcHJpbnRmKCIgICAgYWJvdXQgdG8gbG9hZCBpbml0aWFsIGFyZ3Mu
Li5cbiIpOyApOw0KKwlpZiAoIWxvYWRJbml0aWFsQXJncyhtZXRob2QsIGVp
bmZvLCBibG9ja3NbMF0sICZzaWdzKSkgew0KKwkJLy8gcHJvcGFnYXRlIGVy
cm9yDQorCQlGQUlMOw0KKwl9DQorCURCRyhWRVJJRlkzLCB7DQorCQkvLyBw
cmludCBvdXQgdGhlIGxvY2FsIGFyZ3VtZW50cw0KKwkJaW50IG47DQorCQlm
b3IobiA9IDA7IG4gPCBtZXRob2QtPmxvY2Fsc3o7IG4rKykgew0KKwkJCWRw
cmludGYoIiAgICAgICAgbG9jYWwgJWQ6ICIsIG4pOw0KKwkJCXByaW50VHlw
ZShibG9ja3NbMF0tPmxvY2Fsc1tuXSwgYmxvY2tzWzBdLT5sb2NhbHNfaW5m
b1tuXSk7DQorCQkJZHByaW50ZigiXG4iKTsNCisJCX0NCisJfSApOw0KKwkN
CisJDQorCWlmICghdmVyaWZ5TWV0aG9kM2IoZWluZm8sIG1ldGhvZCwgc3Rh
dHVzLCBibG9ja3MsIG51bUJsb2Nrcywgc2lncykpIHsNCisJCUZBSUw7DQor
CX0NCisJDQorCQ0KKwlDTEVBTlVQOw0KKwlEQkcoVkVSSUZZMywgZHByaW50
ZigiICAgIFZlcmlmeSBNZXRob2QgM2I6IGRvbmVcbiIpOyApOw0KIAlyZXR1
cm4odHJ1ZSk7DQorCQ0KKw0KKyN1bmRlZiBGQUlMDQorI3VuZGVmIENMRUFO
VVANCiB9DQogDQogDQpAQCAtMTEzMCwxMCArMTI3OSwxMCBAQA0KIAlpbnQz
MiBsb3csIGhpZ2g7DQogCQ0KIAlib29sIHdpZGU7DQotCS8vIGJvb2wgaW5B
QmxvY2s7IC8vIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgc3RhcnQvcmV0
dXJuIGFkZHJlc3Mgb2YgZWFjaCBibG9jaw0KKwlib29sIGluQUJsb2NrOyAv
LyB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHN0YXJ0L3JldHVybiBhZGRy
ZXNzIG9mIGVhY2ggYmxvY2sNCiAJDQogCXVpbnQzMiBibG9ja0NvdW50ICA9
IDA7DQotCS8vIEJsb2NrSW5mbyoqIGJsb2NrcyA9IE5VTEw7DQorCUJsb2Nr
SW5mbyoqIGJsb2NrcyA9IE5VTEw7DQogCQ0KIAkNCiAJREJHKFZFUklGWTMs
IGRwcmludGYoIiAgICBWZXJpZmllciBQYXNzIDNhOiBjaGVja2luZyBzdGF0
aWMgY29uc3RyYWludHMgYW5kIGZpbmRpbmcgYmFzaWMgYmxvY2tzLi4uXG4i
KTsgKTsNCkBAIC0xNjg4LDEwICsxODM3LDQwIEBADQogCQ0KIAlEQkcoVkVS
SUZZMywgZHByaW50ZigiICAgICAgICBkb25lLCAlZCBibG9ja3MgZm91bmQu
XG4iLCBibG9ja0NvdW50KTsgKTsNCiAJDQotCS8vIFRPRE86IG1lbW9yeSBh
bGxvY2F0aW9uIGhlcmUNCisJDQorCURCRyhWRVJJRlkzLCBkcHJpbnRmKCIg
ICAgVmVyaWZpZXIgUGFzcyAzYTogdGhpcmQgcGFzcyB0byBhbGxvY2F0ZSBt
ZW1vcnkgZm9yIGJhc2ljIGJsb2Nrcy4uLlxuIik7ICk7DQorCQ0KKwlibG9j
a3MgPSBjaGVja1B0cigoQmxvY2tJbmZvKiopS01BTExPQyhibG9ja0NvdW50
ICogc2l6ZW9mKEJsb2NrSW5mbyopKSk7DQorCQ0KKwlmb3IgKGluQUJsb2Nr
ID0gdHJ1ZSwgbiA9IDAsIHBjID0gMDsgcGMgPCBjb2RlbGVuOyBwYysrKSB7
DQorCQlpZiAoc3RhdHVzW3BjXSAmIFNUQVJUX0JMT0NLKSB7DQorCQkJYmxv
Y2tzW25dID0gY3JlYXRlQmxvY2sobWV0aG9kKTsNCisJCQlibG9ja3Nbbl0t
PnN0YXJ0QWRkciA9IHBjOw0KKwkJCW4rKzsNCisJCQkNCisJCQlpbkFCbG9j
ayA9IHRydWU7DQorCQkJDQorCQkJDQorCQkJREJHKFZFUklGWTMsIGRwcmlu
dGYoIiAgICAgICAgc2V0dGluZyBibG9ja3NbJWRdLT5zdGFydEFkZHIgPSAl
ZFxuIiwNCisJCQkJCSAgICAgbi0xLCBibG9ja3Nbbi0xXS0+c3RhcnRBZGRy
KTsgKTsNCisJCX0NCisJCQ0KKwkJaWYgKGluQUJsb2NrICYmIChzdGF0dXNb
cGNdICYgRU5EX0JMT0NLKSkgew0KKwkJCWJsb2Nrc1tuLTFdLT5sYXN0QWRk
ciA9IHBjOw0KKwkJCQ0KKwkJCWluQUJsb2NrID0gZmFsc2U7DQorCQkJDQor
CQkJDQorCQkJREJHKFZFUklGWTMsIGRwcmludGYoIiAgICAgICAgc2V0dGlu
ZyBibG9ja3NbJWRdLT5sYXN0QWRkciA9ICVkXG4iLA0KKwkJCQkJICAgICBu
LTEsIGJsb2Nrc1tuLTFdLT5sYXN0QWRkcik7ICk7DQorCQl9DQorCX0NCisJ
DQorCQ0KKwlEQkcoVkVSSUZZMywgZHByaW50ZigiICAgIFZlcmlmaWVyIFBh
c3MgM2E6IGRvbmVcbiIpOyApOw0KIAkNCiAJKm51bUJsb2NrcyA9IGJsb2Nr
Q291bnQ7DQotCXJldHVybiBOVUxMOw0KKwlyZXR1cm4gYmxvY2tzOw0KIAkN
CiAJDQogI3VuZGVmIENIRUNLX0xPQ0FMX0lOREVYCQ0KQEAgLTE3MDUsNiAr
MTg4NCwyNzc4IEBADQogfQ0KIA0KIA0KKy8qDQorICogdmVyaWZ5TWV0aG9k
M2IoKQ0KKyAqICAgIFRoZSBEYXRhLWZsb3cgQW5hbHl6ZXINCisgKg0KKyAq
IFRoZSBkYXRhLWZsb3cgYWxnb3JpdGhtIGlzIHRha2VuIGZyb20gdGhlIEpW
TSAyIHNwZWMsIHdoaWNoIGRlc2NyaWJlcyBpdCBtb3JlIG9yIGxlc3MgYXMg
Zm9sbG93czoNCisgKg0KKyAqICAwICBkYXRhLWZsb3cgYW5hbHl6ZXIgaXMg
aW5pdGlhbGlzZWQNCisgKiAgICAgICAtIGZvciB0aGUgZmlyc3QgaW5zdHJ1
Y3Rpb24gb2YgdGhlIG1ldGhvZCwgdGhlIGxvY2FsIHZhcmlhYmxlcyB0aGF0
IHJlcHJlc2VudCBwYXJhbWV0ZXJzDQorICogICAgICAgICBpbml0aWFsbHkg
Y29udGFpbiB2YWx1ZXMgb2YgdGhlIHR5cGVzIGluZGljYXRlZCBieSB0aGUg
bWV0aG9kJ3MgdHlwZSBkZXNjcmlwdG9yLg0KKyAqICAgICAgIC0gdGhlIG9w
ZXJhbmQgc3RhY2sgaXMgZW1wdHkuDQorICogICAgICAgLSBhbGwgbG9jYWwg
dmFyaWFibGVzIGNvbnRhaW4gYW4gaWxsZWdhbCB2YWx1ZS4NCisgKiAgICAg
ICAtIGZvciB0aGUgb3RoZXIgaW5zdHJ1Y3Rpb25zLCB3aGljaCBoYXZlIG5v
dCBiZWVuIGV4YW1pbmVkIHlldCwgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxh
YmxlDQorICogICAgICAgICByZWdhcmRpbmcgdGhlIG9wZXJhbmQgc3RhY2sg
b3IgbG9jYWwgdmFyaWFibGVzLg0KKyAqICAgICAgIC0gdGhlICJjaGFuZ2Vk
IiBiaXQgaXMgb25seSBzZXQgZm9yIHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4N
CisgKg0KKyAqICAxICBzZWxlY3QgYSBWTSBpbnN0cnVjdGlvbiB3aG9zZSAi
Y2hhbmdlZCIgYml0IGlzIHNldA0KKyAqDQorICogICAgICAgLSBpZiBubyBz
dWNoIGluc3RydWN0aW9uIHJlbWFpbnMsIHRoZSBtZXRob2QgaGFzIHN1Y2Nl
c3NmdWxseSBiZWVuIHZlcmlmaWVkLg0KKyAqICAgICAgIC0gb3RoZXJ3aXNl
LCB0dXJuIG9mZiB0aGUgImNoYW5nZWQiIGJpdCBvZiB0aGUgc2VsZWN0ZWQg
aW5zdHJ1Y3Rpb24uDQorICoNCisgKiAgMiAgbW9kZWwgdGhlIGVmZmVjdCBv
ZiB0aGUgaW5zdHJ1Y3Rpb24gb24gdGhlIG9wZXJhbmQgc3RhY2sgYW5kIGxv
Y2FsIHZhcmlhYmxlIGFycmF5IGJ5Og0KKyAqDQorICogICAgICAgLSBpZiB0
aGUgaW5zdHJ1Y3Rpb24gdXNlcyB2YWx1ZXMgZnJvbSB0aGUgb3BlcmFuZCBz
dGFjaywgZW5zdXJlIHRoYXQgdGhlcmUgYXJlIGENCisgKiAgICAgICAgIHN1
ZmZpY2llbnQgbnVtYmVyIG9mIHZhbHVlcyBvbiB0aGUgc3RhY2sgYW5kIHRo
YXQgdGhlIHRvcCB2YWx1ZXMgb24gdGhlIHN0YWNrIGFyZQ0KKyAqICAgICAg
ICAgb2YgYW4gYXBwcm9wcmlhdGUgdHlwZS4NCisgKiAgICAgICAtIGlmIHRo
ZSBpbnN0cnVjdGlvbiB1c2VzIGEgbG9jYWwgdmFyaWFibGUsIGVuc3VyZSB0
aGF0IHRoZSBzcGVjaWZpZWQgbG9jYWwgdmFyaWFibGUNCisgKiAgICAgICAg
IGNvbnRhaW5zIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuDQor
ICogICAgICAgLSBpZiB0aGUgaW5zdHJ1Y3Rpb24gcHVzaGVzIHZhbHVlcyBv
bnRvIHRoZSBvcGVyYW5kIHN0YWNrLCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBz
dWZmaWNpZW50DQorICogICAgICAgICByb29tIG9uIHRoZSBvcGVyYW5kIHN0
YWNrIGZvciB0aGUgbmV3IHZhbHVlcy4gIGFkZCB0aGUgaW5kaWNhdGVkIHR5
cGVzIHRvIHRoZSB0eXBlIG9mIHRoZQ0KKyAqICAgICAgICAgbW9kZWxlZCBv
cGVyYW5kIHN0YWNrLg0KKyAqICAgICAgIC0gaWYgdGhlIGluc3RydWN0aW9u
IG1vZGlmaWVzIGEgbG9jYWwgdmFyaWFibGUsIHJlY29yZCB0aGF0IHRoZSBs
b2NhbCB2YXJpYWJsZSBub3cgY29udGFpbnMNCisgKiAgICAgICAgIGEgdHlw
ZS4NCisgKg0KKyAqICAzICBkZXRlcm1pbmUgdGhlIGluc3RydWN0aW9ucyB0
aGF0IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24uICBzdWNj
ZXNzb3IgaW5zdHJ1Y3Rpb25zDQorICogICAgIGNhbiBiZSBvbmUgb2YgdGhl
IGZvbGxvd2luZzoNCisgKg0KKyAqICAgICAgIC0gdGhlIG5leHQgaW5zdHJ1
Y3Rpb24sIGlmIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGlzIG5vdCBhbiB1
bmNvbmRpdGlvbmFsIGNvbnRyb2wgdHJhbmZlcg0KKyAqICAgICAgICAgaW5z
dHJ1Y3Rpb24gKGllIC0gZ290bywgcmV0dXJuLCBvciBhdGhyb3cpLiAgYmFz
aWNhbGx5IGNoZWNrIHRvIG1ha2Ugc3VyZSB5b3UgZG9uJ3QNCisgKiAgICAg
ICAgICJmYWxsIG9mZiIgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIG1l
dGhvZC4NCisgKiAgICAgICAtIHRoZSB0YXJnZXQgb2YgYSBjb25kaXRpb25h
bCBvciB1bmNvbmRpdGlvbmFsIGJyYW5jaCBvciBzd2l0Y2guDQorICogICAg
ICAgLSBhbnkgZXhjZXB0aW9uIGhhbmRsZXJzIGZvciB0aGlzIGluc3RydWN0
aW9uLg0KKyAqDQorICogIDQgIG1lcmdlIHRoZSBzdGF0ZSBvZiB0aGUgb3Bl
cmFuZCBzdGFjayBhbmQgbG9jYWwgdmFyaWFibGUgYXJyYXkgYXQgdGhlIGVu
ZCBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoZQ0KKyAqICAgICBjdXJyZW50IGlu
c3RydWN0aW9uIGludG8gZWFjaCBvZiB0aGUgc3VjY2Vzc29yIGluc3RydWN0
aW9ucy4NCisgKg0KKyAqICAgICAoc2VlIG1lcmdlIGZ1bmN0aW9uIGJlbG93
KQ0KKyAqDQorICogIDUgIGNvbnRpbnVlIGF0IHN0ZXAgMS4NCisgKi8NCitz
dGF0aWMNCitib29sDQordmVyaWZ5TWV0aG9kM2IoZXJyb3JJbmZvKiBlaW5m
bywgY29uc3QgTWV0aG9kKiBtZXRob2QsDQorCSAgICAgICBjb25zdCB1aW50
MzIqIHN0YXR1cywNCisJICAgICAgIEJsb2NrSW5mbyoqIGJsb2NrcywgY29u
c3QgdWludDMyIG51bUJsb2NrcywNCisJICAgICAgIFNpZ1N0YWNrKiBzaWdz
KQ0KK3sNCisJY29uc3QgdWludDMyIGNvZGVsZW4gICAgICA9IE1FVEhPRF9C
WVRFQ09ERV9MRU4obWV0aG9kKTsNCisJY29uc3QgdW5zaWduZWQgY2hhciog
Y29kZSA9IE1FVEhPRF9CWVRFQ09ERV9DT0RFKG1ldGhvZCk7DQorCQ0KKwl1
aW50MzIgY3VySW5kZXg7DQorCUJsb2NrSW5mbyogY3VyQmxvY2s7DQorCUJs
b2NrSW5mbyogbmV4dEJsb2NrOw0KKwkNCisjZGVmaW5lIFZFUklGWV9FUlJP
UihfTVNHKSBcDQorICAgICAgICBLRlJFRShjdXJCbG9jayk7IFwNCisgICAg
ICAgIGlmIChlaW5mby0+dHlwZSA9PSAwKSB7IFwNCisgICAgICAgIAlwb3N0
RXhjZXB0aW9uTWVzc2FnZShlaW5mbywgSkFWQV9MQU5HKFZlcmlmeUVycm9y
KSwgXA0KKwkJCQkgICAgICJpbiBtZXRob2QgXCIlcy4lc1wiOiAlcyIsIFwN
CisJCQkJICAgICBDTEFTU19DTkFNRShtZXRob2QtPmNsYXNzKSwgTUVUSE9E
X05BTUVEKG1ldGhvZCksIF9NU0cpOyBcDQorCX0gXA0KKwlyZXR1cm4oZmFs
c2UpDQorCQ0KKwkNCisJdWludDMyIHBjID0gMCwgbmV3cGMgPSAwLCBuID0g
MDsNCisJaW50MzIgaGlnaCA9IDAsIGxvdyA9IDA7ICAvLyBmb3IgdGhlIHN3
aXRjaGluZyBpbnN0cnVjdGlvbnMNCisJDQorCQ0KKwkNCisJREJHKFZFUklG
WTMsIGRwcmludGYoIiAgICBWZXJpZmllciBQYXNzIDNiOiBEYXRhIEZsb3cg
QW5hbHlzaXMgYW5kIFR5cGUgQ2hlY2tpbmcuLi5cbiIpOyApOw0KKwlEQkco
VkVSSUZZMywgZHByaW50ZigiICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbi4u
LlxuIik7ICk7DQorCWN1ckJsb2NrID0gY3JlYXRlQmxvY2sobWV0aG9kKTsN
CisJDQorCQ0KKwlEQkcoVkVSSUZZMywgZHByaW50ZigiICAgICAgICBkb2lu
ZyB0aGUgZGlydHkgZGF0YSBmbG93IGFuYWx5c2lzLi4uXG4iKTsgKTsNCisJ
YmxvY2tzWzBdLT5zdGF0dXMgfD0gQ0hBTkdFRDsNCisJY3VySW5kZXggPSAw
Ow0KKwl3aGlsZShjdXJJbmRleCA8IG51bUJsb2Nrcykgew0KKwkJREJHKFZF
UklGWTMsDQorCQkgICAgZHByaW50ZigiICAgICAgYmxvY2tOdW0vZmlyc3Qg
cGMvY2hhbmdlZC9zdGtzeiA9ICVkIC8gJWQgLyAlZCAvICVkXG4iLA0KKwkJ
CSAgICBjdXJJbmRleCwNCisJCQkgICAgYmxvY2tzW2N1ckluZGV4XS0+c3Rh
cnRBZGRyLA0KKwkJCSAgICBibG9ja3NbY3VySW5kZXhdLT5zdGF0dXMgJiBD
SEFOR0VELA0KKwkJCSAgICBibG9ja3NbY3VySW5kZXhdLT5zdGFja3N6KTsN
CisJCSAgICBkcHJpbnRmKCIgICAgICAgICAgYmVmb3JlOlxuIik7DQorCQkg
ICAgcHJpbnRCbG9jayhtZXRob2QsIGJsb2Nrc1tjdXJJbmRleF0sICIgICAg
ICAgICAgICAgICAgICIpOw0KKwkJICAgICk7DQorCQkNCisJCWlmICghKGJs
b2Nrc1tjdXJJbmRleF0tPnN0YXR1cyAmIENIQU5HRUQpKSB7DQorCQkJREJH
KFZFUklGWTMsIGRwcmludGYoIiAgICAgICAgbm90IGNoYW5nZWQuLi5za2lw
cGluZ1xuIik7ICk7DQorCQkJY3VySW5kZXgrKzsNCisJCQljb250aW51ZTsN
CisJCX0NCisJCQ0KKwkJYmxvY2tzW2N1ckluZGV4XS0+c3RhdHVzIF49IENI
QU5HRUQ7IC8vIHVuc2V0IENIQU5HRUQgYml0DQorCQlibG9ja3NbY3VySW5k
ZXhdLT5zdGF0dXMgfD0gVklTSVRFRDsgLy8gbWFrZSBzdXJlIHdlJ3ZlIHZp
c2l0ZWQgaXQuLi5pbXBvcnRhbnQgZm9yIG1lcmdpbmcNCisJCWNvcHlCbG9j
a0RhdGEobWV0aG9kLCBibG9ja3NbY3VySW5kZXhdLCBjdXJCbG9jayk7DQor
CQkNCisJCWlmIChjdXJCbG9jay0+c3RhdHVzICYgRVhDRVBUSU9OX0hBTkRM
RVIgJiYgY3VyQmxvY2stPnN0YWNrc3ogPiAwKSB7DQorCQkJVkVSSUZZX0VS
Uk9SKCJpdCdzIHBvc3NpYmxlIHRvIHJlYWNoIGFuIGV4Y2VwdGlvbiBoYW5k
bGVyIHdpdGggYSBub25lbXB0eSBzdGFjayIpOw0KKwkJfQ0KKwkJDQorCQkN
CisJCWlmICghdmVyaWZ5QmFzaWNCbG9jayhlaW5mbywgbWV0aG9kLCBjdXJC
bG9jaywgJnNpZ3MpKSB7DQorCQkJVkVSSUZZX0VSUk9SKCJmYWlsdXJlIHRv
IHZlcmlmeSBiYXNpYyBibG9jayIpOw0KKwkJfQ0KKwkJDQorCQlEQkcoVkVS
SUZZMywNCisJCSAgICBkcHJpbnRmKCIgICAgICAgICAgYWZ0ZXI6XG4iKTsN
CisJCSAgICBwcmludEJsb2NrKG1ldGhvZCwgY3VyQmxvY2ssICIgICAgICAg
ICAgICAgICAgICIpOw0KKwkJICAgICk7DQorCQkNCisJCQ0KKwkJLy8NCisJ
CS8vIG1lcmdlIHRoaXMgYmxvY2sncyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBu
ZXh0IGJsb2NrDQorCQkvLw0KKwkJcGMgPSBjdXJCbG9jay0+bGFzdEFkZHI7
DQorCQlpZiAoY29kZVtwY10gPT0gV0lERSAmJiBjb2RlW3BjICsgaW5zbkxl
bltjb2RlW3BjXV1dID09IFJFVCkNCisJCQlwYyArPSBpbnNuTGVuW2NvZGVb
cGNdXTsNCisJCXN3aXRjaChjb2RlW3BjXSkNCisJCQl7DQorCQkJY2FzZSBH
T1RPOg0KKwkJCQluZXdwYyA9IHBjICsgMTsNCisJCQkJbmV3cGMgPSBwYyAr
IFdPUkQoY29kZSwgbmV3cGMpOw0KKwkJCQluZXh0QmxvY2sgPSBpbldoaWNo
QmxvY2sobmV3cGMsIGJsb2NrcywgbnVtQmxvY2tzKTsNCisJCQkJDQorCQkJ
CWlmICghbWVyZ2UoZWluZm8sIG1ldGhvZCwgY3VyQmxvY2ssIG5leHRCbG9j
aykpIHsNCisJCQkJCVZFUklGWV9FUlJPUigiZXJyb3IgbWVyZ2luZyBvcGVy
YW5kIHN0YWNrcyIpOw0KKwkJCQl9DQorCQkJCWJyZWFrOw0KKwkJCQkNCisJ
CQljYXNlIEdPVE9fVzoNCisJCQkJbmV3cGMgPSBwYyArIDE7DQorCQkJCW5l
d3BjID0gcGMgKyBEV09SRChjb2RlLCBuZXdwYyk7DQorCQkJCW5leHRCbG9j
ayA9IGluV2hpY2hCbG9jayhuZXdwYywgYmxvY2tzLCBudW1CbG9ja3MpOw0K
KwkJCQkNCisJCQkJaWYgKCFtZXJnZShlaW5mbywgbWV0aG9kLCBjdXJCbG9j
aywgbmV4dEJsb2NrKSkgew0KKwkJCQkJVkVSSUZZX0VSUk9SKCJlcnJvciBt
ZXJnaW5nIG9wZXJhbmQgc3RhY2tzIik7DQorCQkJCX0NCisJCQkJYnJlYWs7
DQorCQkJCQkNCisJCQljYXNlIEpTUjoNCisJCQkJbmV3cGMgPSBwYyArIDE7
DQorCQkJCW5ld3BjID0gcGMgKyBXT1JEKGNvZGUsIG5ld3BjKTsNCisJCQkJ
Z290byBKU1JfY29tbW9uOw0KKwkJCWNhc2UgSlNSX1c6DQorCQkJCW5ld3Bj
ID0gcGMgKyAxOw0KKwkJCQluZXdwYyA9IHBjICsgRFdPUkQoY29kZSwgbmV3
cGMpOw0KKwkJCUpTUl9jb21tb246DQorCQkJCW5leHRCbG9jayA9IGluV2hp
Y2hCbG9jayhuZXdwYywgYmxvY2tzLCBudW1CbG9ja3MpOw0KKwkJCQkNCisJ
CQkJaWYgKCFtZXJnZShlaW5mbywgbWV0aG9kLCBjdXJCbG9jaywgbmV4dEJs
b2NrKSkgew0KKwkJCQkJVkVSSUZZX0VSUk9SKCJqc3I6IGVycm9yIG1lcmdp
bmcgb3BlcmFuZCBzdGFja3MiKTsNCisJCQkJfQ0KKwkJCQlicmVhazsNCisJ
CQkJDQorCQkJY2FzZSBSRVQ6DQorCQkJCWlmIChzdGF0dXNbcGNdICYgV0lE
RV9NT0RERUQpIHsNCisJCQkJCW4gPSBwYyArIDE7DQorCQkJCQluID0gV09S
RChjb2RlLCBuKTsNCisJCQkJfSBlbHNlIHsNCisJCQkJCW4gPSBjb2RlW3Bj
ICsgMV07DQorCQkJCX0NCisJCQkJDQorCQkJCWlmIChjdXJCbG9jay0+bG9j
YWxzW25dICE9IFRBRERSKSB7DQorCQkJCQlWRVJJRllfRVJST1IoInJldCBp
bnN0cnVjdGlvbiBkb2VzIG5vdCByZWZlciB0byBhIHZhcmlhYmxlIHdpdGgg
dHlwZSByZXR1cm5BZGRyZXNzIik7DQorCQkJCX0NCisJCQkJLy8gZWFjaCBp
bnN0YW5jZSBvZiByZXR1cm4gYWRkcmVzcyBjYW4gb25seSBiZSB1c2VkIG9u
Y2UNCisJCQkJY3VyQmxvY2stPmxvY2Fsc1tuXSA9IFRVTlNUQUJMRTsNCisJ
CQkJDQorCQkJCW5ld3BjID0gY3VyQmxvY2stPmxvY2Fsc19pbmZvW25dOw0K
KwkJCQljdXJCbG9jay0+bG9jYWxzX2luZm9bbl0gPSAwOw0KKwkJCQluZXh0
QmxvY2sgPSBpbldoaWNoQmxvY2sobmV3cGMsIGJsb2NrcywgbnVtQmxvY2tz
KTsNCisJCQkJDQorCQkJCWlmICghbWVyZ2UoZWluZm8sIG1ldGhvZCwgY3Vy
QmxvY2ssIG5leHRCbG9jaykpIHsNCisJCQkJCVZFUklGWV9FUlJPUigiZXJy
b3IgbWVyZ2luZyBvcHN0YWNrcyB3aGVuIHJldHVybmluZyBmcm9tIGEgc3Vi
cm91dGluZSIpOw0KKwkJCQl9DQorCQkJCWJyZWFrOw0KKwkJCQkNCisJCQkJ
DQorCQkJY2FzZSBJRl9BQ01QRVE6ICBjYXNlIElGTk9OTlVMTDoNCisJCQlj
YXNlIElGX0FDTVBORTogIGNhc2UgSUZOVUxMOg0KKwkJCWNhc2UgSUZfSUNN
UEVROiAgY2FzZSBJRkVROg0KKwkJCWNhc2UgSUZfSUNNUE5FOgkgY2FzZSBJ
Rk5FOg0KKwkJCWNhc2UgSUZfSUNNUEdUOgkgY2FzZSBJRkdUOg0KKwkJCWNh
c2UgSUZfSUNNUEdFOgkgY2FzZSBJRkdFOg0KKwkJCWNhc2UgSUZfSUNNUExU
OgkgY2FzZSBJRkxUOg0KKwkJCWNhc2UgSUZfSUNNUExFOgkgY2FzZSBJRkxF
Og0KKwkJCQluZXdwYyAgICAgPSBwYyArIDE7DQorCQkJCW5ld3BjICAgICA9
IHBjICsgV09SRChjb2RlLCBuZXdwYyk7DQorCQkJCW5leHRCbG9jayA9IGlu
V2hpY2hCbG9jayhuZXdwYywgYmxvY2tzLCBudW1CbG9ja3MpOw0KKwkJCQkN
CisJCQkJaWYgKCFtZXJnZShlaW5mbywgbWV0aG9kLCBjdXJCbG9jaywgbmV4
dEJsb2NrKSkgew0KKwkJCQkJVkVSSUZZX0VSUk9SKCJlcnJvciBtZXJnaW5n
IG9wZXJhbmQgc3RhY2tzIik7DQorCQkJCX0NCisJCQkJDQorCQkJCS8vIGlm
IHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIHRoZW4gdGhlIG5leHQgYmxvY2sg
aXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQNCisJCQkJY3VySW5k
ZXgrKzsNCisJCQkJaWYgKGN1ckluZGV4ID49IG51bUJsb2Nrcykgew0KKwkJ
CQkJVkVSSUZZX0VSUk9SKCJleGVjdXRpb24gZmFsbHMgb2ZmIHRoZSBlbmQg
b2YgYSBiYXNpYyBibG9jayIpOw0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKCFt
ZXJnZShlaW5mbywgbWV0aG9kLCBjdXJCbG9jaywgYmxvY2tzW2N1ckluZGV4
XSkpIHsNCisJCQkJCVZFUklGWV9FUlJPUigiZXJyb3IgbWVyZ2luZyBvcGVy
YW5kIHN0YWNrcyIpOw0KKwkJCQl9DQorCQkJCWJyZWFrOw0KKwkJCQkNCisJ
CQkJDQorCQkJY2FzZSBMT09LVVBTV0lUQ0g6DQorCQkJCS8vIGRlZmF1bHQg
YnJhbmNoLi4uYmV0d2VlbiAwIGFuZCAzIGJ5dGVzIG9mIHBhZGRpbmcgYXJl
IGFkZGVkIHNvIHRoYXQgdGhlDQorCQkJCS8vIGRlZmF1bHQgYnJhbmNoIGlz
IGF0IGFuIGFkZHJlc3MgdGhhdCBpcyBkaXZpc2libGUgYnkgNA0KKwkJCQlu
ID0gKHBjICsgMSkgJSA0Ow0KKwkJCQlpZiAobikgbiA9IHBjICsgNSAtIG47
DQorCQkJCWVsc2UgICBuID0gcGMgKyAxOw0KKwkJCQluZXdwYyA9IHBjICsg
RFdPUkQoY29kZSwgbik7DQorCQkJCW5leHRCbG9jayA9IGluV2hpY2hCbG9j
ayhuZXdwYywgYmxvY2tzLCBudW1CbG9ja3MpOw0KKwkJCQlpZiAoIW1lcmdl
KGVpbmZvLCBtZXRob2QsIGN1ckJsb2NrLCBuZXh0QmxvY2spKSB7DQorCQkJ
CQlWRVJJRllfRVJST1IoImVycm9yIG1lcmdpbmcgaW50byB0aGUgZGVmYXVs
dCBicmFuY2ggb2YgYSBsb29rdXBzd2l0Y2ggaW5zdHJ1Y3Rpb24iKTsNCisJ
CQkJfQ0KKwkJCQkNCisJCQkJLy8gZ2V0IG51bWJlciBvZiBrZXkvdGFyZ2V0
IHBhaXJzDQorCQkJCW4gKz0gNDsNCisJCQkJbG93ID0gRFdPUkQoY29kZSwg
bik7DQorCQkJCQ0KKwkJCQkvLyBicmFuY2ggaW50byBhbGwgdGFyZ2V0cw0K
KwkJCQlmb3IgKG4gKz0gNCwgaGlnaCA9IG4gKyA4KmxvdzsgbiA8IGhpZ2g7
IG4gKz0gOCkgew0KKwkJCQkJbmV3cGMgPSBwYyArIERXT1JEKGNvZGUsIG4r
NCk7DQorCQkJCQluZXh0QmxvY2sgPSBpbldoaWNoQmxvY2sobmV3cGMsIGJs
b2NrcywgbnVtQmxvY2tzKTsNCisJCQkJCWlmICghbWVyZ2UoZWluZm8sIG1l
dGhvZCwgY3VyQmxvY2ssIG5leHRCbG9jaykpIHsNCisJCQkJCQlWRVJJRllf
RVJST1IoImVycm9yIG1lcmdpbmcgaW50byBhIGJyYW5jaCBvZiBhIGxvb2t1
cHN3aXRjaCBpbnN0cnVjdGlvbiIpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJ
CQ0KKwkJCQlicmVhazsNCisJCQkJDQorCQkJY2FzZSBUQUJMRVNXSVRDSDoN
CisJCQkJLy8gZGVmYXVsdCBicmFuY2guLi5iZXR3ZWVuIDAgYW5kIDMgYnl0
ZXMgb2YgcGFkZGluZyBhcmUgYWRkZWQgc28gdGhhdCB0aGUNCisJCQkJLy8g
ZGVmYXVsdCBicmFuY2ggaXMgYXQgYW4gYWRkcmVzcyB0aGF0IGlzIGRpdmlz
aWJsZSBieSA0DQorCQkJCW4gPSAocGMgKyAxKSAlIDQ7DQorCQkJCWlmIChu
KSBuID0gcGMgKyA1IC0gbjsNCisJCQkJZWxzZSAgIG4gPSBwYyArIDE7DQor
CQkJCW5ld3BjID0gcGMgKyBEV09SRChjb2RlLCBuKTsNCisJCQkJDQorCQkJ
CS8vIGdldCB0aGUgaGlnaCBhbmQgbG93IHZhbHVlcyBvZiB0aGUgdGFibGUN
CisJCQkJbG93ICA9IERXT1JEKGNvZGUsIG4gKyA0KTsNCisJCQkJaGlnaCA9
IERXT1JEKGNvZGUsIG4gKyA4KTsNCisJCQkJDQorCQkJCW4gKz0gMTI7DQor
CQkJCQ0KKwkJCQkvLyBoaWdoIGFuZCBsb3cgYXJlIHVzZWQgYXMgdGVtcHMg
aW4gdGhpcyBsb29wIHRoYXQgY2hlY2tzDQorCQkJCS8vIHRoZSB2YWxpZGl0
eSBvZiBhbGwgdGhlIGJyYW5jaGVzIGluIHRoZSB0YWJsZQ0KKwkJCQlmb3Ig
KGhpZ2ggPSBuICsgNCooaGlnaCAtIGxvdyArIDEpOyBuIDwgaGlnaDsgbiAr
PSA0KSB7DQorCQkJCQluZXdwYyA9IHBjICsgRFdPUkQoY29kZSwgbik7DQor
CQkJCQluZXh0QmxvY2sgPSBpbldoaWNoQmxvY2sobmV3cGMsIGJsb2Nrcywg
bnVtQmxvY2tzKTsNCisJCQkJCWlmICghbWVyZ2UoZWluZm8sIG1ldGhvZCwg
Y3VyQmxvY2ssIG5leHRCbG9jaykpIHsNCisJCQkJCQlWRVJJRllfRVJST1Io
ImVycm9yIG1lcmdpbmcgaW50byBhIGJyYW5jaCBvZiBhIHRhYmxlc3dpdGNo
IGluc3RydWN0aW9uIik7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJYnJlYWs7
DQorCQkJCQ0KKwkJCQkNCisJCQkJLy8gdGhlIHJlc3Qgb2YgdGhlIHdheXMg
dG8gZW5kIGEgYmxvY2sNCisJCQljYXNlIFJFVFVSTjoNCisJCQljYXNlIEFS
RVRVUk46DQorCQkJY2FzZSBJUkVUVVJOOg0KKwkJCWNhc2UgRlJFVFVSTjoN
CisJCQljYXNlIExSRVRVUk46DQorCQkJY2FzZSBEUkVUVVJOOg0KKwkJCWNh
c2UgQVRIUk9XOg0KKwkJCQljdXJJbmRleCsrOw0KKwkJCQljb250aW51ZTsN
CisJCQkJDQorCQkJZGVmYXVsdDoNCisJCQkJZm9yIChuID0gcGMgKyAxOyBu
IDwgY29kZWxlbjsgbisrKSB7DQorCQkJCQlpZiAoc3RhdHVzW25dICYgSVNf
SU5TVFJVQ1RJT04pIGJyZWFrOw0KKwkJCQl9DQorCQkJCWlmIChuID09IGNv
ZGVsZW4pIHsNCisJCQkJCVZFUklGWV9FUlJPUigiZXhlY3V0aW9uIGZhbGxz
IG9mZiB0aGUgZW5kIG9mIGEgY29kZSBibG9jayIpOw0KKwkJCQl9DQorCQkJ
CWVsc2UgaWYgKCFtZXJnZShlaW5mbywgbWV0aG9kLCBjdXJCbG9jaywgYmxv
Y2tzW2N1ckluZGV4KzFdKSkgew0KKwkJCQkJVkVSSUZZX0VSUk9SKCJlcnJv
ciBtZXJnaW5nIG9wZXJhbmQgc3RhY2tzIik7DQorCQkJCX0NCisJCQl9DQor
CQkNCisJCQ0KKwkJZm9yIChjdXJJbmRleCA9IDA7IGN1ckluZGV4IDwgbnVt
QmxvY2tzOyBjdXJJbmRleCsrKSB7DQorCQkJaWYgKGJsb2Nrc1tjdXJJbmRl
eF0tPnN0YXR1cyAmIENIQU5HRUQpDQorCQkJCWJyZWFrOw0KKwkJfQ0KKwl9
DQorCQ0KKwkNCisJREJHKFZFUklGWTMsIGRwcmludGYoIiAgICBWZXJpZmll
ciBQYXNzIDNiOiBDb21wbGV0ZVxuIik7ICk7DQorCUtGUkVFKGN1ckJsb2Nr
KTsNCisJcmV0dXJuKHRydWUpOw0KKwkNCisjdW5kZWYgVkVSSUZZX0VSUk9S
DQorI3VuZGVmIFJFVFVSTl8zQg0KK30NCisNCisNCisvKg0KKyAqIG1lcmdl
cyB0d28gb3BlcmFuZCBzdGFja3MuICBqdXN0IHRvIHJlcGVhdCB3aGF0IHRo
ZSBKVk1MIDIgc3BlYyBzYXlzIGFib3V0IHRoaXM6DQorICogICBNZXJnZSB0
aGUgc3RhdGUgb2YgdGhlIG9wZXJhbmQgc3RhY2sgYW5kIGxvY2FsIHZhcmlh
YmxlIGFycmF5IGF0IHRoZSBlbmQgb2YgdGhlDQorICogICBleGVjdXRpb24g
b2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gaW50byBlYWNoIG9mIHRoZSBz
dWNjZXNzb3IgaW5zdHJ1Y3Rpb25zLiAgSW4NCisgKiAgIHRoZSBzcGVjaWFs
IGNhc2Ugb2YgY29udHJvbCB0cmFuc2ZlciB0byBhbiBleGNlcHRpb24gaGFu
ZGxlciwgdGhlIG9wZXJhbmQgc3RhY2sgaXMNCisgKiAgIHNldCB0byBjb250
YWluIGEgc2luZ2xlIG9iamVjdCBvZiB0aGUgZXhjZXB0aW9uIHR5cGUgaW5k
aWNhdGVkIGJ5IHRoZSBleGNlcHRpb24NCisgKiAgIGhhbmRsZXIgaW5mb3Jt
YXRpb24uDQorICogICAgIC0gaWYgdGhpcyBpZiB0aGUgZmlyc3QgdGltZSB0
aGUgc3VjY2Vzc29yIGluc3RydWN0aW9uIGhhcyBiZWVuIHZpc2l0ZWQsIHJl
Y29yZA0KKyAqICAgICAgIHRoYXQgdGhlIG9wZXJhbmQgc3RhY2sgYW5kIGxv
Y2FsIHZhcmlhYmxlIHZhbHVlcyBjYWxjdWxhdGVkIGluIHN0ZXBzIDIgYW5k
IDMNCisgKiAgICAgICBhcmUgdGhlIHN0YXRlIG9mIHRoZSBvcGVyYW5kIHN0
YWNrIGFuZCBsb2NhbCB2YXJpYWJsZSBhcnJheSBwcmlvciB0byBleGVjdXRp
bmcNCisgKiAgICAgICB0aGUgc3VjY2Vzc29yIGluc3RydWN0aW9uLiAgU2V0
IHRoZSAiY2hhbmdlZCIgYml0IGZvciB0aGUgc3VjY2Vzc29yIGluc3RydWN0
aW9uLg0KKyAqICAgICAtIGlmIHRoZSBzdWNjZXNzb3IgaW5zdHJ1Y3Rpb24g
aGFzIGJlZW4gc2VlbiBiZWZvcmUsIG1lcmdlIHRoZSBvcGVyYW5kIHN0YWNr
IGFuZA0KKyAqICAgICAgIGxvY2FsIHZhcmlhYmxlIHZhbHVlcyBjYWxjdWxh
dGVkIGluIHN0ZXBzIDIgYW5kIDMgaW50byB0aGUgdmFsdWVzIGFscmVhZHkg
dGhlcmUuDQorICogICAgICAgc2V0IHRoZSAiY2hhbmdlZCIgYml0IGlmIHRo
ZXJlIGlzIGFueSBtb2RpZmljYXRpb24gdG8gdGhlIHZhbHVlcy4NCisgKg0K
KyAqICAgdG8gbWVyZ2UgdHdvIG9wZXJhbmQgc3RhY2tzLCB0aGUgbnVtYmVy
IG9mIHZhbHVlcyBvbiBlYWNoIHN0YWNrIG11c3QgYmUgaWRlbnRpY2FsLg0K
KyAqICAgdGhlIHR5cGVzIG9mIHZhbHVlcyBvbiB0aGUgc3RhY2tzIG11c3Qg
YWxzbyBiZSBpZGVudGljYWwsIGV4Y2VwdCB0aGF0IGRpZmZlcmVudGx5DQor
ICogICB0eXBlZCByZWZlcmVuY2UgdmFsdWVzIG1heSBhcHBlYXIgYXQgY29y
cmVzcG9uZGluZyBwbGFjZXMgb24gdGhlIHR3byBzdGFja3MuICBpbiB0aGlz
DQorICogICBjYXNlLCB0aGUgbWVyZ2VkIG9wZXJhbmQgc3RhY2sgY29udGFp
bnMgYSByZWZlcmVuY2UgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpcnN0IGNv
bW1vbg0KKyAqICAgc3VwZXJjbGFzcyBvZiB0aGUgdHdvIHR5cGVzLiAgc3Vj
aCBhIHJlZmVyZW5jZSB0eXBlIGFsd2F5cyBleGlzdHMgYmVjYXVzZSB0aGUg
dHlwZSBPYmplY3QNCisgKiAgIGlzIGEgc3VwZXJjbGFzcyBvZiBhbGwgY2xh
c3MgYW5kIGludGVyZmFjZSB0eXBlcy4gIGlmIHRoZSBvcGVyYW5kIHN0YWNr
cyBjYW5ub3QgYmUgbWVyZ2VkLA0KKyAqICAgdmVyaWZpY2F0aW9uIG9mIHRo
ZSBtZXRob2QgZmFpbHMuDQorICoNCisgKiAgIHRvIG1lcmdlIHR3byBsb2Nh
bCB2YXJpYWJsZSBhcnJheSBzdGF0ZXMsIGNvcnJlc3BvbmRpbmcgcGFpcnMg
b2YgbG9jYWwgdmFyaWFibGVzIGFyZQ0KKyAqICAgY29tcGFyZWQuICBpZiB0
aGUgdHdvIHR5cGVzIGFyZSBub3QgaWRlbnRpY2FsLCB0aGVuIHVubGVzcyBi
b3RoIGNvbnRhaW4gcmVmZXJlbmNlIHZhbHVlcywNCisgKiAgIHRoZSB2ZXJp
ZmljYXRpb24gcmVjb3JkcyB0aGF0IHRoZSBsb2NhbCB2YXJpYWJsZSBjb250
YWlucyBhbiB1bnVzYWJsZSB2YWx1ZS4gIGlmIGJvdGggb2YNCisgKiAgIHRo
ZSBwYWlyIG9mIGxvY2FsIHZhcmlhYmxlcyBjb250YWluIHJlZmVyZW5jZSB2
YWx1ZXMsIHRoZSBtZXJnZWQgc3RhdGUgY29udGFpbnMgYSByZWZlcmVuY2UN
CisgKiAgIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaXJzdCBjb21tb24gc3Vw
ZXJjbGFzcyBvZiB0aGUgdHdvIHR5cGVzLg0KKyAqLw0KK3N0YXRpYw0KK2Jv
b2wNCittZXJnZShlcnJvckluZm8qIGVpbmZvLA0KKyAgICAgIGNvbnN0IE1l
dGhvZCogbWV0aG9kLA0KKyAgICAgIEJsb2NrSW5mbyogZnJvbUJsb2NrLA0K
KyAgICAgIEJsb2NrSW5mbyogdG9CbG9jaykNCit7DQorCXVpbnQzMiBuOw0K
KwlIamF2YV9sYW5nX0NsYXNzKiB0eXBlOw0KKwl1aW50MzIgdGluZm8gPSAw
Ow0KKwkNCisJaWYgKCEodG9CbG9jay0+c3RhdHVzICYgVklTSVRFRCkpIHsN
CisJCURCRyhWRVJJRlkzLCBkcHJpbnRmKCIgICAgICAgICAgdmlzaXRpbmcg
YmxvY2sgc3RhcnRpbmcgYXQgJWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4iLA0K
KwkJCQkgICAgIHRvQmxvY2stPnN0YXJ0QWRkcik7ICk7DQorCQkNCisJCWNv
cHlCbG9ja1N0YXRlKG1ldGhvZCwgZnJvbUJsb2NrLCB0b0Jsb2NrKTsNCisJ
CXRvQmxvY2stPnN0YXR1cyB8PSBDSEFOR0VEOw0KKwkJcmV0dXJuKHRydWUp
Ow0KKwl9DQorCQ0KKwlEQkcoVkVSSUZZMywNCisJICAgIGRwcmludGYoIiVz
bm90IGEgZmlyc3QgdGltZSBtZXJnZVxuIiwgaW5kZW50KTsNCisJICAgIGRw
cmludGYoIiVzICBmcm9tIGJsb2NrOlxuIiwgaW5kZW50KTsNCisJICAgIHBy
aW50QmxvY2sobWV0aG9kLCBmcm9tQmxvY2ssIGluZGVudDIpOw0KKwkgICAg
ZHByaW50ZigiJXMgIHRvIGJsb2NrOlxuIiwgaW5kZW50KTsNCisJICAgIHBy
aW50QmxvY2sobWV0aG9kLCB0b0Jsb2NrLCBpbmRlbnQyKTsNCisJICAgIGRw
cmludGYoIlxuIik7DQorCSAgICApOw0KKwkNCisJDQorCWlmIChmcm9tQmxv
Y2stPnN0YWNrc3ogIT0gdG9CbG9jay0+c3RhY2tzeikgew0KKwkJcG9zdEV4
Y2VwdGlvbk1lc3NhZ2UoZWluZm8sIEpBVkFfTEFORyhWZXJpZnlFcnJvciks
DQorCQkJCSAgICAgImluIG1ldGhvZCAlcy4lczogbWVyZ2luZyB0d28gb3Bl
cmFuZCBzdGFja3Mgb2YgdW5lcXVhbCBzaXplIiwNCisJCQkJICAgICBtZXRo
b2QtPm5hbWUtPmRhdGEsDQorCQkJCSAgICAgbWV0aG9kLT5jbGFzcy0+bmFt
ZS0+ZGF0YSk7DQorCQlyZXR1cm4oZmFsc2UpOw0KKwl9DQorCQ0KKwkNCisJ
Ly8gbWVyZ2UgdGhlIGxvY2FsIHZhcmlhYmxlIGFycmF5cw0KKwlmb3IgKG4g
PSAwOyBuIDwgbWV0aG9kLT5sb2NhbHN6OyBuKyspIHsNCisJCXR5cGUgPSBt
ZXJnZVR5cGVzKGVpbmZvLCBtZXRob2QtPmNsYXNzLA0KKwkJCQkgIGZyb21C
bG9jay0+bG9jYWxzW25dLCBmcm9tQmxvY2stPmxvY2Fsc19pbmZvW25dLA0K
KwkJCQkgIHRvQmxvY2stPmxvY2Fsc1tuXSwgdG9CbG9jay0+bG9jYWxzX2lu
Zm9bbl0sDQorCQkJCSAgJnRpbmZvKTsNCisJCQ0KKwkJaWYgKHRvQmxvY2st
PmxvY2Fsc1tuXSAhPSB0eXBlKSB7DQorCQkJREJHKFZFUklGWTMsDQorCQkJ
ICAgIGRwcmludGYoIiVzbWVyZ2luZyBsb2NhbHNbJWRdICIsIGluZGVudDIs
IG4pOw0KKwkJCSAgICBwcmludFR5cGUoZnJvbUJsb2NrLT5sb2NhbHNbbl0s
IGZyb21CbG9jay0+bG9jYWxzX2luZm9bbl0pOw0KKwkJCSAgICBkcHJpbnRm
KCIgYW5kICIpOw0KKwkJCSAgICBwcmludFR5cGUodG9CbG9jay0+bG9jYWxz
W25dLCB0b0Jsb2NrLT5sb2NhbHNfaW5mb1tuXSk7DQorCQkJICAgIGRwcmlu
dGYoIiB0byBnZXQgIik7DQorCQkJICAgIHByaW50VHlwZSh0eXBlLCB0aW5m
byk7DQorCQkJICAgIGRwcmludGYoIlxuIik7DQorCQkJICAgICk7DQorCQkJ
DQorCQkJdG9CbG9jay0+bG9jYWxzW25dID0gdHlwZTsNCisJCQl0b0Jsb2Nr
LT5sb2NhbHNfaW5mb1tuXSA9IHRpbmZvOw0KKwkJCXRvQmxvY2stPnN0YXR1
cyB8PSBDSEFOR0VEOw0KKwkJfQ0KKwl9DQorCQ0KKwkvLyBtZXJnZSB0aGUg
b3BlcmFuZCBzdGFja3MNCisJZm9yIChuID0gMDsgbiA8IGZyb21CbG9jay0+
c3RhY2tzejsgbisrKSB7DQorCQl0eXBlID0gbWVyZ2VUeXBlcyhlaW5mbywg
bWV0aG9kLT5jbGFzcywNCisJCQkJICBmcm9tQmxvY2stPm9wc3RhY2tbbl0s
IGZyb21CbG9jay0+b3BzdGFja19pbmZvW25dLA0KKwkJCQkgIHRvQmxvY2st
Pm9wc3RhY2tbbl0sIHRvQmxvY2stPm9wc3RhY2tfaW5mb1tuXSwNCisJCQkJ
ICAmdGluZm8pOw0KKwkJDQorCQlpZiAodG9CbG9jay0+b3BzdGFja1tuXSAh
PSB0eXBlKSB7DQorCQkJREJHKFZFUklGWTMsDQorCQkJICAgIGRwcmludGYo
IiVzbWVyZ2luZyBvcHN0YWNrWyVkXSAiLCBpbmRlbnQyLCBuKTsNCisJCQkg
ICAgcHJpbnRUeXBlKGZyb21CbG9jay0+b3BzdGFja1tuXSwgZnJvbUJsb2Nr
LT5vcHN0YWNrX2luZm9bbl0pOw0KKwkJCSAgICBkcHJpbnRmKCIgYW5kICIp
Ow0KKwkJCSAgICBwcmludFR5cGUodG9CbG9jay0+b3BzdGFja1tuXSwgdG9C
bG9jay0+b3BzdGFja19pbmZvW25dKTsNCisJCQkgICAgZHByaW50ZigiIHRv
IGdldCAiKTsNCisJCQkgICAgcHJpbnRUeXBlKHR5cGUsIHRpbmZvKTsNCisJ
CQkgICAgZHByaW50ZigiXG4iKTsNCisJCQkgICAgKTsNCisJCQkNCisJCQl0
b0Jsb2NrLT5vcHN0YWNrW25dID0gdHlwZTsNCisJCQl0b0Jsb2NrLT5vcHN0
YWNrX2luZm9bbl0gPSB0aW5mbzsNCisJCQl0b0Jsb2NrLT5zdGF0dXMgfD0g
Q0hBTkdFRDsNCisJCQkNCisJCQkvLyBpZiB3ZSBnZXQgdW5zdGFibGUgaGVy
ZSwgbm90IHJlYWxseSBhIGJpZyBkZWFsIHVudGlsIHdlIHRyeSB0byB1c2Ug
aXQuDQorCQkJLy8gaSBtZWFuLCB3ZSBjb3VsZCBnZXQgYW4gdW5zdGFibGUg
dmFsdWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcG9wIGl0IG9mZiB0aGUgc3Rh
Y2ssDQorCQkJLy8gZm9yIGluc3RhbmNlLg0KKwkJfQ0KKwl9DQorCQ0KKwkN
CisJREJHKFZFUklGWTMsDQorCSAgICBkcHJpbnRmKCIlcyAgcmVzdWx0IGJs
b2NrOlxuIiwgaW5kZW50KTsNCisJICAgIHByaW50QmxvY2sobWV0aG9kLCB0
b0Jsb2NrLCBpbmRlbnQyKTsNCisJICAgICk7DQorCQ0KKwkNCisJcmV0dXJu
KHRydWUpOw0KK30NCisNCisNCisNCisNCisvKg0KKyAqIHZlcmlmeUJhc2lj
QmxvY2soKQ0KKyAqICAgU2ltdWxhdGVzIGV4ZWN1dGlvbiBvZiBhIGJhc2lj
IGJsb2NrIGJ5IG1vZGlmeWluZyBpdHMgc2ltdWxhdGVkIG9wZXJhbmQgc3Rh
Y2sgYW5kIGxvY2FsIHZhcmlhYmxlIGFycmF5Lg0KKyAqLw0KK3N0YXRpYw0K
K2Jvb2wNCit2ZXJpZnlCYXNpY0Jsb2NrKGVycm9ySW5mbyogZWluZm8sIGNv
bnN0IE1ldGhvZCogbWV0aG9kLCBCbG9ja0luZm8qIGJsb2NrLCBTaWdTdGFj
ayoqIHNpZ3MpDQorew0KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioNCisJICogVkFSSUFCTEVTDQor
CSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8NCisJdWludDMyICAgICAgICAgcGMgICA9IDA7DQorCXVu
c2lnbmVkIGNoYXIqIGNvZGUgPSBNRVRIT0RfQllURUNPREVfQ09ERShtZXRo
b2QpOw0KKwlIamF2YV9sYW5nX0NsYXNzKiB0aGlzID0gbWV0aG9kLT5jbGFz
czsNCisJDQorCWJvb2wgd2lkZSA9IGZhbHNlOyAgICAgICAvLyB3YXMgdGhl
IHByZXZpb3VzIG9wY29kZSBhIFdJREUgaW5zdHJ1Y3Rpb24/DQorCQ0KKwl1
aW50MzIgbiA9IDA7ICAgICAgICAgICAgLy8gdXNlZCBhcyBhIGdlbmVyYWwg
dGVtcG9yYXJ5IHZhcmlhYmxlLCBvZnRlbiBhcyBhIHRlbXBvcmFyeSBwYw0K
KwkNCisJSGphdmFfbGFuZ19DbGFzcyogdHlwZSA9IE5VTEw7IC8vIHVzZWQg
b2Z0ZW4gdG8gaG9sZCB0aGUgdHlwZSBvZiBzb21ldGhpbmcgdG8gYmUgcHVz
aGVkDQorCQkJCSAgICAgICAvLyBvbnRvL3BvcHBlZCBvZmYgb2YgdGhlIHN0
YWNrDQorCUhqYXZhX2xhbmdfQ2xhc3MqIGFycmF5VHlwZTsNCisJDQorCWlu
dCB0YWc7ICAgICAgICAgICAgICAgIC8vIHVzZWQgZm9yIGNvbnN0YW50IHRh
ZyBzdHVmZg0KKwkNCisJdWludDMyICAgICBpZHg7ICAgICAgICAgLy8gaW5k
ZXggaW50byBjb25zdGFudCBwb29sDQorCWNvbnN0YW50cyogcG9vbCA9IENM
QVNTX0NPTlNUQU5UUyhtZXRob2QtPmNsYXNzKTsNCisJDQorCWNvbnN0IGNo
YXIqIHNpZzsNCisJDQorCQ0KKwkvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisJICogSEFORFkgTUFD
Uk9TIFVTRUQgT05MWSBJTiBUSElTIE1FVEhPRA0KKwkgKiAgICBtb3N0IG9m
IHRoZXNlIGJlbG9uZyB0byBvbmUgb2YgdHdvIGNhdGVnb3JpZXM6DQorCSAq
ICAgICAgICAgLSB0aG9zZSBkZWFsaW5nIHdpdGggbG9jYWxzIHZhcmlhYmxl
cw0KKwkgKiAgICAgICAgIC0gdGhvc2UgZGVhbGluZyB3aXRoIHRoZSBvcGVy
YW5kIHN0YWNrDQorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIFZFUklGWV9FUlJP
UihfTVNHKSBcDQorCWlmIChlaW5mby0+dHlwZSA9PSAwKSB7IFwNCisJCXBv
c3RFeGNlcHRpb25NZXNzYWdlKGVpbmZvLCBKQVZBX0xBTkcoVmVyaWZ5RXJy
b3IpLCBcDQorCQkJCSAgICAgImluIG1ldGhvZCBcIiVzLiVzXCI6ICVzIiwg
XA0KKwkJCQkgICAgIENMQVNTX0NOQU1FKHRoaXMpLCBNRVRIT0RfTkFNRUQo
bWV0aG9kKSwgX01TRyk7IFwNCisJfSBcDQorCXJldHVybihmYWxzZSkNCisN
CisjZGVmaW5lIEdFVF9JRFggaWR4ID0gY29kZVtwYyArIDFdDQorCQ0KKyNk
ZWZpbmUgR0VUX1dJRFggaWR4ID0gcGMgKyAxOyBpZHggPSBXT1JEKGNvZGUs
IGlkeCkNCisJDQorCQ0KKwkvLyBjaGVja3Mgd2hldGhlciB0aGUgc3BlY2lm
aWVkIGxvY2FsIHZhcmlhYmxlIGlzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4N
CisjZGVmaW5lIEVOU1VSRV9MT0NBTF9UWVBFKF9OLCBfVCkgXA0KKwlpZiAo
X1QgPT0gVExPTkcgfHwgX1QgPT0gVERPVUJMRSkgeyBcDQorCQlpZiAoX1Qg
IT0gYmxvY2stPmxvY2Fsc1tfTl0pIHsgXA0KKwkJCVZFUklGWV9FUlJPUigi
bG9jYWwgdmFyaWFibGUgbm90IG9mIGNvcnJlY3QgdHlwZSIpOyBcDQorCQl9
IFwNCisJCWVsc2UgaWYgKGJsb2NrLT5sb2NhbHNbX04gKyAxXSAhPSBUV0lE
RSkgeyBcDQorCQkJVkVSSUZZX0VSUk9SKCJhY2Nlc3NpbmcgYSBsb25nIG9y
IGRvdWJsZSBpbiBhIGxvY2FsIHdoZXJlIHRoZSBmb2xsb3dpbmcgbG9jYWwg
aGFzIGJlZW4gY29ycnVwdGVkIik7IFwNCisJCX0gXA0KKwl9IFwNCisJZWxz
ZSB7IFwNCisJCWlmICh0eXBlY2hlY2soZWluZm8sIHRoaXMsIF9ULCAwLCBi
bG9jay0+bG9jYWxzW19OXSwgTE9DQUxTX0lORk8oX04pKSA9PSBmYWxzZSkg
eyBcDQorCQkJaWYgKGJsb2NrLT5sb2NhbHNbX05dID09IFRVTlNUQUJMRSkg
eyBcDQorCQkJCVZFUklGWV9FUlJPUigiYXR0ZW1wdCB0byBhY2Nlc3MgYW4g
dW5zdGFibGUgbG9jYWwgdmFyaWFibGUiKTsgXA0KKwkJCX0gZWxzZSB7IFwN
CisJCQkJVkVSSUZZX0VSUk9SKCJhdHRlbXB0IHRvIGFjY2VzcyBhIGxvY2Fs
IHZhcmlhYmxlIG5vdCBvZiB0aGUgY29ycmVjdCB0eXBlIik7IFwNCisJCQl9
IFwNCisJCX0gXA0KKwl9DQorCQ0KKyNkZWZpbmUgRU5TVVJFX09QU1RBQ0tf
U0laRShfTikgXA0KKwlpZiAoYmxvY2stPnN0YWNrc3ogPCAoX04pKSB7IFwN
CisgICAgICAgICAgICAgICAgREJHKFZFUklGWTMsIGRwcmludGYoIiAgICAg
ICAgICAgICAgICBoZXJlJ3MgdGhlIHN0YWNrOiBcbiIpOyBwcmludEJsb2Nr
KG1ldGhvZCwgYmxvY2ssICIgICAgICAgICAgICAgICAgICAgICIpOyApOyBc
DQorCQlWRVJJRllfRVJST1IoIm5vdCBlbm91Z2ggaXRlbXMgb24gc3RhY2sg
Zm9yIG9wZXJhdGlvbiIpOyBcDQorCX0NCisJDQorCS8vIHRoZSBudGggaXRl
bSBvbiB0aGUgb3BlcmFuZCBzdGFjayBmcm9tIHRoZSB0b3ANCisjZGVmaW5l
IE9QU1RBQ0tfSVRFTShfTikgXA0KKwkoYmxvY2stPm9wc3RhY2tbYmxvY2st
PnN0YWNrc3ogLSBfTl0pDQorCQ0KKyNkZWZpbmUgT1BTVEFDS19UT1AgIE9Q
U1RBQ0tfSVRFTSgxKQ0KKyNkZWZpbmUgT1BTVEFDS19XVE9QIE9QU1RBQ0tf
SVRFTSgyKQ0KKw0KKyNkZWZpbmUgT1BTVEFDS19JTkZPKF9OKSBcDQorICAg
ICAgICAoYmxvY2stPm9wc3RhY2tfaW5mb1tibG9jay0+c3RhY2tzeiAtIF9O
XSkNCisNCisjZGVmaW5lIExPQ0FMU19JTkZPKF9OKSBcDQorCShibG9jay0+
bG9jYWxzX2luZm9bX05dKQ0KKwkNCisjZGVmaW5lIENIRUNLX1NUQUNLX09W
RVJGTE9XKF9OKSBcDQorCWlmIChibG9jay0+c3RhY2tzeiArIF9OID4gbWV0
aG9kLT5zdGFja3N6KSB7IFwNCisJCURCRyhWRVJJRlkzLCBkcHJpbnRmKCIg
ICAgICAgICAgICAgICAgYmxvY2stPnN0YWNrc3o6ICVkIDo6IE4gPSAlZCA6
OiBtZXRob2QtPnN0YWNrc3ogPSAlZFxuIiwgXA0KKwkJCQkgICAgIGJsb2Nr
LT5zdGFja3N6LCBfTiwgbWV0aG9kLT5zdGFja3N6KTsgKTsgXA0KKyAgICAg
ICAgICAgICAgICBEQkcoVkVSSUZZMywgZHByaW50ZigiICAgICAgICAgICAg
ICAgIGhlcmUncyB0aGUgc3RhY2s6IFxuIik7IHByaW50QmxvY2sobWV0aG9k
LCBibG9jaywgIiAgICAgICAgICAgICAgICAgICAgIik7ICk7IFwNCisJCVZF
UklGWV9FUlJPUigic3RhY2sgb3ZlcmZsb3ciKTsgXA0KKwl9DQorCQ0KKyNk
ZWZpbmUgQ0hFQ0tfU1RBQ0tfVU5ERVJGTE9XKF9OKSBcDQorCWlmIChibG9j
ay0+c3RhY2tzeiA8IF9OKSB7IFwNCisgICAgICAgICAgICAgICAgREJHKFZF
UklGWTMsIGRwcmludGYoIiAgICAgICAgICAgICAgICBoZXJlJ3MgdGhlIHN0
YWNrOiBcbiIpOyBwcmludEJsb2NrKG1ldGhvZCwgYmxvY2ssICIgICAgICAg
ICAgICAgICAgICAgICIpOyApOyBcDQorCQlWRVJJRllfRVJST1IoInN0YWNr
IHVuZGVyZmxvdyIpOyBcDQorCX0NCisJDQorCS8vIHB1c2ggYSB0eXBlIG9u
dG8gdGhlIHN0YWNrIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUncyBlbm91
Z2gNCisJLy8gc3BhY2UgKHVzZWZ1bCBpZiB5b3UgX2tub3dfIHRoZXJlIGlz
IGVub3VnaCBzcGFjZSkNCisjZGVmaW5lIE9QU1RBQ0tfUFVTSF9CTElORF9J
TkZPKF9ULCBfVEkpIFwNCisJYmxvY2stPm9wc3RhY2tbYmxvY2stPnN0YWNr
c3pdID0gKF9UKTsgXA0KKyAgICAgICAgYmxvY2stPm9wc3RhY2tfaW5mb1ti
bG9jay0+c3RhY2tzel0gPSAoX1RJKTsgXA0KKwlibG9jay0+c3RhY2tzeisr
DQorCQ0KKyNkZWZpbmUgT1BTVEFDS19QVVNIX0JMSU5EKF9UKSBcDQorCU9Q
U1RBQ0tfUFVTSF9CTElORF9JTkZPKF9ULCAwKQ0KKwkNCisjZGVmaW5lIE9Q
U1RBQ0tfV1BVU0hfQkxJTkQoX1QpIFwNCisJT1BTVEFDS19QVVNIX0JMSU5E
KF9UKTsgXA0KKwlPUFNUQUNLX1BVU0hfQkxJTkQoVFdJREUpDQorCQ0KKwkv
LyBwdXNoIGEgdHlwZSBvbnRvIHRoZSBvcGVyYW5kIHN0YWNrLCBjaGVja2lu
ZyBmaXJzdCB0byBtYWtlIHN1cmUNCisJLy8gdGhlcmUncyBlbm91Z2ggc3Bh
Y2UNCisjZGVmaW5lIE9QU1RBQ0tfUFVTSF9JTkZPKF9ULCBfVEkpIFwNCisJ
Q0hFQ0tfU1RBQ0tfT1ZFUkZMT1coMSk7IFwNCisgICAgICAgIE9QU1RBQ0tf
UFVTSF9CTElORF9JTkZPKF9ULCBfVEkpDQorDQorI2RlZmluZSBPUFNUQUNL
X1BVU0goX1QpIFwNCisJT1BTVEFDS19QVVNIX0lORk8oX1QsIDApDQorCQ0K
KwkvLyBwdXNoIGEgd2lkZSB0eXBlIG9udG8gdGhlIG9wZXJhbmQgc3RhY2ss
IGNoZWNraW5nIGZpcnN0IHRvIG1ha2UNCisJLy8gc3VyZSB0aGVyZSdzIGVu
b3VnaCBzcGFjZQ0KKyNkZWZpbmUgT1BTVEFDS19XUFVTSChfVCkgXA0KKwlD
SEVDS19TVEFDS19PVkVSRkxPVygyKTsgXA0KKyAgICAgICAgT1BTVEFDS19X
UFVTSF9CTElORChfVCkNCisJDQorCS8vIHRocm93IGEgdmVyaWZ5IGVycm9y
IHJlcHJlc2VudGluZyBhbiBlbXB0eSBzdGFjaw0KKyNkZWZpbmUgRU1QVFlf
U1RBQ0tfRVJST1IgXA0KKyAgICAgICAgVkVSSUZZX0VSUk9SKCJwb3BwaW5n
IHZhbHVlIG9mZiBhbiBlbXB0eSBzdGFjayIpDQorCQ0KKwkNCisJLy8gZW5z
dXJlIHRoYXQgdGhlIHRvcCBpdGVtIG9uIHRoZSBzdGFjayBpcyBvZiB0eXBl
IF9UDQorI2RlZmluZSBPUFNUQUNLX1BFRUtfVChfVCwgX1RJKSBcDQorICAg
ICAgICBFTlNVUkVfT1BTVEFDS19TSVpFKDEpOyBcDQorCWlmICghdHlwZWNo
ZWNrKGVpbmZvLCB0aGlzLCAoX1QpLCBfVEksIE9QU1RBQ0tfSVRFTSgxKSwg
T1BTVEFDS19JTkZPKDEpKSkgeyBcDQorCQlWRVJJRllfRVJST1IoIm1pc21h
dGNoZWQgc3RhY2sgdHlwZXMiKTsgXA0KKwl9DQorCQ0KKwkvLyBlbnN1cmUg
dGhhdCB0aGUgdG9wIGl0ZW0gb24gdGhlIHN0YWNrIGlzIG9mIHdpZGUgdHlw
ZSBfVA0KKyNkZWZpbmUgT1BTVEFDS19XUEVFS19UKF9ULCBfVEkpIFwNCisJ
aWYgKGJsb2NrLT5zdGFja3N6IDwgMikgeyBcDQorCQlWRVJJRllfRVJST1Io
InBvcHBpbmcgd2lkZSB2YWx1ZSBvZmYgYSBzdGFjayB3aXRoIDwgMiBpdGVt
cyIpOyBcDQorCX0gZWxzZSBpZiAoT1BTVEFDS19UT1AgIT0gVFdJREUpIHsg
XA0KKwkJVkVSSUZZX0VSUk9SKCJ0cnlpbmcgdG8gcG9wIGEgd2lkZSB2YWx1
ZSBvZmYgb3BlcmFuZCBzdGFjayB3aGVyZSB0aGVyZSBpcyBub25lIik7IFwN
CisJfSBlbHNlIGlmICh0eXBlY2hlY2soZWluZm8sIHRoaXMsIF9ULCBfVEks
IE9QU1RBQ0tfSVRFTSgyKSwgT1BTVEFDS19JTkZPKDIpKSA9PSBmYWxzZSkg
eyBcDQorCQlWRVJJRllfRVJST1IoIm1pc21hdGNoZWQgc3RhY2sgdHlwZXMi
KTsgXA0KKwl9DQorCQ0KKwkNCisjZGVmaW5lIE9QU1RBQ0tfUE9QX0JMSU5E
IFwNCisJYmxvY2stPm9wc3RhY2tbLS1ibG9jay0+c3RhY2tzel0gPSBUVU5T
VEFCTEU7IFwNCisJYmxvY2stPm9wc3RhY2tfaW5mb1tibG9jay0+c3RhY2tz
el0gPSAwDQorDQorI2RlZmluZSBPUFNUQUNLX1dQT1BfQkxJTkQgXA0KKwlP
UFNUQUNLX1BPUF9CTElORDsgXA0KKwlPUFNUQUNLX1BPUF9CTElORA0KKwkN
CisJDQorCS8vIHBvcCBfTiB0aGluZ3Mgb2ZmIHRoZSBzdGFjayBvZmYgdGhl
IHN0YWNrDQorI2RlZmluZSBPUFNUQUNLX1BPUF9OX0JMSU5EKF9OKSBcDQor
CWZvciAobiA9IDA7IG4gPCBfTjsgbisrKSB7IFwNCisJCU9QU1RBQ0tfUE9Q
X0JMSU5EOyBcDQorCX0NCisJDQorI2RlZmluZSBPUFNUQUNLX1BPUF9OKF9O
KSBcDQorICAgICAgICBDSEVDS19TVEFDS19VTkRFUkZMT1coX04pOyBcDQor
CU9QU1RBQ0tfUE9QX05fQkxJTkQoX04pDQorCQ0KKyNkZWZpbmUgT1BTVEFD
S19QT1AgXA0KKyAgICAgICAgQ0hFQ0tfU1RBQ0tfVU5ERVJGTE9XKDEpOyBc
DQorCU9QU1RBQ0tfUE9QX0JMSU5EDQorDQorI2RlZmluZSBPUFNUQUNLX1dQ
T1AgXA0KKwlDSEVDS19TVEFDS19VTkRFUkZMT1coMik7IFwNCisJT1BTVEFD
S19XUE9QX0JMSU5EDQorCQ0KKwkvLyBwb3AgYSB0eXBlIG9mZiB0aGUgc3Rh
Y2sgYW5kIHR5cGVjaGVjayBpdA0KKyNkZWZpbmUgT1BTVEFDS19QT1BfVChf
VCwgX1RJKSBcDQorICAgICAgICBFTlNVUkVfT1BTVEFDS19TSVpFKDEpOyBc
DQorICAgICAgICBpZiAoIXR5cGVjaGVjayhlaW5mbywgdGhpcywgX1QsIF9U
SSwgT1BTVEFDS19JVEVNKDEpLCBPUFNUQUNLX0lORk8oMSkpKSB7IFwNCisJ
CURCRyhWRVJJRlkzLCBcDQorCQkgICAgZHByaW50ZigiICAgICAgICAgICAg
ICAgIE9QU1RBQ0tfVE9QOiAiKTsgXA0KKwkJICAgIHByaW50VHlwZShPUFNU
QUNLX0lURU0oMSksIE9QU1RBQ0tfSU5GTygxKSk7IFwNCisJCSAgICBkcHJp
bnRmKCIgdnMuIHdoYXQncyB3ZSB3YW50ZWQ6ICIpOyBcDQorCQkgICAgcHJp
bnRUeXBlKF9ULCBfVEkpOyBkcHJpbnRmKCJcbiIpOyApOyBcDQorCQlWRVJJ
RllfRVJST1IoInRvcCBvZiBvcHN0YWNrIGRvZXMgbm90IGhhdmUgZGVzaXJl
ZCB0eXBlIik7IFwNCisJfSBcDQorICAgICAgICBPUFNUQUNLX1BPUF9CTElO
RA0KKwkNCisJLy8gcG9wIGEgd2lkZSB0eXBlIG9mZiB0aGUgc3RhY2sgYW5k
IHR5cGVjaGVjayBpdA0KKyNkZWZpbmUgT1BTVEFDS19XUE9QX1QoX1QsIF9U
SSkgXA0KKyAgICAgICAgT1BTVEFDS19XUEVFS19UKF9ULCBfVEkpOyBcDQor
ICAgICAgICBPUFNUQUNLX1dQT1BfQkxJTkQNCisJDQorCQ0KKwkvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioNCisJICogQkxPQ0stTEVWRUwgREFUQSBGTE9XIEFOQUxZQVNJUw0KKwkg
KiAgICB0aGlzIGlzIGFjdHVhbGx5IHByZXR0eSBlYXN5LCBzaW5jZSB0aGVy
ZSBhcmUgbmV2ZXIgYW55IGJyYW5jaGVzLiAgYmFzaWNhbGx5LCBpdCBqdXN0
DQorCSAqICAgIG1hbmlwdWxhdGVzIHRoZSB3b3JraW5nIHN0YWNrIGFmdGVy
IGV2ZXJ5IGluc3RydWN0aW9uIGFzIGlmIGl0IHdlcmUgYWN0dWFsbHkgcnVu
bmluZyB0aGUNCisJICogICAgY29kZSBzbyB0aGF0LCBhZnRlciB2ZXJpZnlp
bmcgdGhlIGJsb2NrLCB0aGUgd29ya2luZyBibG9jayBjYW4gYmUgdXNlZCB0
byBtZXJnZSB0aGlzIGJsb2NrDQorCSAqICAgIHdpdGggaXRzIHN1Y2Nlc3Nv
cnMuDQorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8NCisJREJHKFZFUklGWTMsDQorCSAgICBkcHJp
bnRmKCIgICAgICAgIGFib3V0IHRvIHZlcmlmeSB0aGUgYmxvY2suLi5cbiIp
Ow0KKwkgICAgZHByaW50ZigiICAgICAgICBibG9jay0+c3RhcnRBZGRyID0g
JWQsIGJsb2NrLT5sYXN0QWRkciA9ICVkLCBmaXJzdCBpbnN0cnVjdGlvbiA9
ICVkXG4iLA0KKwkJICAgIGJsb2NrLT5zdGFydEFkZHIsIGJsb2NrLT5sYXN0
QWRkciwgY29kZVtibG9jay0+c3RhcnRBZGRyXSk7DQorCSAgICApOw0KKwkN
CisJcGMgPSBibG9jay0+c3RhcnRBZGRyOw0KKwl3aGlsZSAocGMgPD0gYmxv
Y2stPmxhc3RBZGRyKSB7DQorCQlEQkcoVkVSSUZZMywNCisJCSAgICBkcHJp
bnRmKCIgICAgICAgICAgICBwYyA9ICVkLCBvcGNvZGUgPSAlZCA9PSAiLCBw
YywgY29kZVtwY10pOw0KKwkJICAgIHByaW50SW5zdHJ1Y3Rpb24oY29kZVtw
Y10pOw0KKwkJICAgIGRwcmludGYoIlxuIik7DQorCQkgICAgKTsNCisJCQ0K
KwkJc3dpdGNoKGNvZGVbcGNdKSB7DQorCQkJLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
DQorCQkJICogSU5TVFJVQ1RJT05TIEZPUiBQVVNISU5HIENPTlNUQU5UUyBP
TlRPIFRIRSBTVEFDSw0KKwkJCSAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisJCQkv
LyBwdXNoZXMgTlVMTCBvbnRvIHRoZSBzdGFjaywgd2hpY2ggbWF0Y2hlcyBh
bnkgb2JqZWN0DQorCQljYXNlIEFDT05TVF9OVUxMOg0KKwkJCU9QU1RBQ0tf
UFVTSChUTlVMTCk7DQorCQkJYnJlYWs7DQorCQkJDQorCQkJLy8gaWNvbnN0
XzxuPiBwdXNoZXMgbiBvbnRvIHRoZSBzdGFjaw0KKwkJY2FzZSBJQ09OU1Rf
MDogY2FzZSBJQ09OU1RfMTogY2FzZSBJQ09OU1RfMjoNCisJCWNhc2UgSUNP
TlNUXzM6IGNhc2UgSUNPTlNUXzQ6IGNhc2UgSUNPTlNUXzU6DQorCQkJDQor
CQljYXNlIElDT05TVF9NMTogLy8gcHVzaGVzIC0xIG9udG8gdGhlIHN0YWNr
DQorCQljYXNlIEJJUFVTSDogICAgLy8gc2lnbiBleHRlbmRzIGFuIDgtYml0
IGludCB0byAzMi1iaXRzIGFuZCBwdXNoZXMgaXQgb250byBzdGFjaw0KKwkJ
Y2FzZSBTSVBVU0g6ICAgIC8vIHNpZ24gZXh0ZW5kcyBhIDE2LWJpdCBpbnQg
dG8gMzItYml0cyBhbmQgcHVzaGVzIGl0IG9udG8gc3RhY2sNCisJCQlPUFNU
QUNLX1BVU0goVElOVCk7DQorCQkJYnJlYWs7DQorCQkJDQorCQljYXNlIEZD
T05TVF8wOg0KKwkJY2FzZSBGQ09OU1RfMToNCisJCWNhc2UgRkNPTlNUXzI6
DQorCQkJT1BTVEFDS19QVVNIKFRGTE9BVCk7DQorCQkJYnJlYWs7DQorCQkJ
DQorCQljYXNlIExDT05TVF8wOg0KKwkJY2FzZSBMQ09OU1RfMToNCisJCQlP
UFNUQUNLX1dQVVNIKFRMT05HKTsNCisJCQlicmVhazsNCisJCQkNCisJCWNh
c2UgRENPTlNUXzA6DQorCQljYXNlIERDT05TVF8xOg0KKwkJCU9QU1RBQ0tf
V1BVU0goVERPVUJMRSk7DQorCQkJYnJlYWs7DQorCQkJDQorCQkJDQorCQlj
YXNlIExEQzE6DQorCQkJR0VUX0lEWDsNCisJCQlnb3RvIExEQ19jb21tb247
DQorCQljYXNlIExEQzI6DQorCQkJR0VUX1dJRFg7DQorCQlMRENfY29tbW9u
Og0KKwkJCXRhZyA9IENPTlNUX1RBRyhpZHgsIHBvb2wpOw0KKwkJCXN3aXRj
aCh0YWcpIHsNCisJCQljYXNlIENPTlNUQU5UX0ludGVnZXI6IE9QU1RBQ0tf
UFVTSChUSU5UKTsgICAgYnJlYWs7DQorCQkJY2FzZSBDT05TVEFOVF9GbG9h
dDogICBPUFNUQUNLX1BVU0goVEZMT0FUKTsgIGJyZWFrOw0KKwkJCWNhc2Ug
Q09OU1RBTlRfUmVzb2x2ZWRTdHJpbmc6DQorCQkJY2FzZSBDT05TVEFOVF9T
dHJpbmc6ICBPUFNUQUNLX1BVU0goVFNUUklORyk7IGJyZWFrOw0KKwkJCX0N
CisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgTERDMlc6DQorCQkJR0VUX1dJ
RFg7DQorCQkJdGFnID0gQ09OU1RfVEFHKGlkeCwgcG9vbCk7DQorCQkJaWYg
KHRhZyA9PSBDT05TVEFOVF9Mb25nKSB7DQorCQkJCU9QU1RBQ0tfV1BVU0go
VExPTkcpOw0KKwkJCX0gZWxzZSB7DQorCQkJCU9QU1RBQ0tfV1BVU0goVERP
VUJMRSk7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJCQ0KKwkJCS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKg0KKwkJCSAqIElOU1RSVUNUSU9OUyBERUFMSU5H
IFdJVEggVEhFIExPQ0FMUyBBTkQgU1RBQ0sNCisJCQkgKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovDQorCQljYXNlIFBPUDoNCisJCQlPUFNUQUNLX1BPUDsNCisJCQli
cmVhazsNCisJCWNhc2UgUE9QMjoNCisJCQlPUFNUQUNLX1BPUDsNCisJCQlP
UFNUQUNLX1BPUDsNCisJCQlicmVhazsNCisJCQkNCisJCQkNCisjZGVmaW5l
IEdFVF9DT05TVF9JTkRFWCBcDQorCQkJaWYgKHdpZGUgPT0gdHJ1ZSkgeyBH
RVRfV0lEWDsgfSBcDQorCQkJZWxzZSAgICAgICAgICAgICAgeyBHRVRfSURY
OyAgfQ0KKwkJCQ0KKwkJCQ0KKwkJCS8vIGFsb2FkXzxuPiB0YWtlcyB0aGUg
b2JqZWN0IHJlZmVyZW5jZSBpbiBsb2NhdGlvbiA8bj4gYW5kIHB1c2hlcyBp
dCBvbnRvIHRoZSBzdGFjaw0KKwkJY2FzZSBBTE9BRF8wOiBpZHggPSAwOyBn
b3RvIEFMT0FEX2NvbW1vbjsNCisJCWNhc2UgQUxPQURfMTogaWR4ID0gMTsg
Z290byBBTE9BRF9jb21tb247DQorCQljYXNlIEFMT0FEXzI6IGlkeCA9IDI7
IGdvdG8gQUxPQURfY29tbW9uOw0KKwkJY2FzZSBBTE9BRF8zOiBpZHggPSAz
OyBnb3RvIEFMT0FEX2NvbW1vbjsNCisJCWNhc2UgQUxPQUQ6DQorCQkJR0VU
X0NPTlNUX0lOREVYOw0KKwkJQUxPQURfY29tbW9uOg0KKwkJCWlmICghaXNS
ZWZlcmVuY2UoYmxvY2stPmxvY2Fsc1tpZHhdLCBMT0NBTFNfSU5GTyhpZHgp
KSkgew0KKwkJCQlWRVJJRllfRVJST1IoImFsb2FkPF9uPiB3aGVyZSBsb2Nh
bCB2YXJpYWJsZSBkb2VzIG5vdCBjb250YWluIGFuIG9iamVjdCByZWZlcmVu
Y2UiKTsNCisJCQl9DQorCQkJDQorCQkJT1BTVEFDS19QVVNIX0lORk8oYmxv
Y2stPmxvY2Fsc1tpZHhdLCBMT0NBTFNfSU5GTyhpZHgpKTsNCisJCQlicmVh
azsNCisJCQkNCisJCQkNCisJCQkvLyBzdG9yZXMgd2hhdGV2ZXIncyBvbiB0
aGUgdG9wIG9mIHRoZSBzdGFjayBpbiBsb2NhbCA8bj4NCisJCWNhc2UgQVNU
T1JFXzA6IGlkeCA9IDA7IGdvdG8gQVNUT1JFX2NvbW1vbjsNCisJCWNhc2Ug
QVNUT1JFXzE6IGlkeCA9IDE7IGdvdG8gQVNUT1JFX2NvbW1vbjsNCisJCWNh
c2UgQVNUT1JFXzI6IGlkeCA9IDI7IGdvdG8gQVNUT1JFX2NvbW1vbjsNCisJ
CWNhc2UgQVNUT1JFXzM6IGlkeCA9IDM7IGdvdG8gQVNUT1JFX2NvbW1vbjsN
CisJCWNhc2UgQVNUT1JFOg0KKwkJCUdFVF9DT05TVF9JTkRFWDsNCisJCUFT
VE9SRV9jb21tb246DQorCQkJRU5TVVJFX09QU1RBQ0tfU0laRSgxKTsNCisJ
CQl0eXBlID0gT1BTVEFDS19JVEVNKDEpOw0KKwkJCQ0KKwkJCWlmICh0eXBl
ICE9IFRBRERSICYmICFpc1JlZmVyZW5jZSh0eXBlLCBPUFNUQUNLX0lORk8o
MSkpKSB7DQorCQkJCVZFUklGWV9FUlJPUigiYXN0b3JlOiB0aGluZyBvbiB0
b3Agb2Ygc3RhY2sgaXMgbm90IGEgcmVmZXJlbmNlIHR5cGUiKTsNCisJCQl9
DQorCQkJDQorCQkJTE9DQUxTX0lORk8oaWR4KSAgID0gT1BTVEFDS19JTkZP
KDEpOw0KKwkJCWJsb2NrLT5sb2NhbHNbaWR4XSA9IHR5cGU7DQorCQkJDQor
CQkJT1BTVEFDS19QT1BfQkxJTkQ7DQorCQkJYnJlYWs7DQorCQkJDQorCQkJ
DQorCQkJDQorCQkJLy8gaWxvYWRfPG4+IHRha2VzIHRoZSB2YXJpYWJsZSBp
biBsb2NhdGlvbiA8bj4gYW5kIHB1c2hlcyBpdCBvbnRvIHRoZSBzdGFjaw0K
KwkJY2FzZSBJTE9BRF8wOiBpZHggPSAwOyBnb3RvIElMT0FEX2NvbW1vbjsN
CisJCWNhc2UgSUxPQURfMTogaWR4ID0gMTsgZ290byBJTE9BRF9jb21tb247
DQorCQljYXNlIElMT0FEXzI6IGlkeCA9IDI7IGdvdG8gSUxPQURfY29tbW9u
Ow0KKwkJY2FzZSBJTE9BRF8zOiBpZHggPSAzOyBnb3RvIElMT0FEX2NvbW1v
bjsNCisJCWNhc2UgSUxPQUQ6DQorCQkJR0VUX0NPTlNUX0lOREVYOw0KKwkJ
SUxPQURfY29tbW9uOg0KKwkJCUVOU1VSRV9MT0NBTF9UWVBFKGlkeCwgVElO
VCk7DQorCQkJT1BTVEFDS19QVVNIKFRJTlQpOw0KKwkJCU9QU1RBQ0tfSU5G
TygxKSA9IExPQ0FMU19JTkZPKGlkeCk7DQorCQkJYnJlYWs7DQorCQkJDQor
CQkJDQorCQljYXNlIElTVE9SRV8wOiBpZHggPTA7IGdvdG8gSVNUT1JFX2Nv
bW1vbjsNCisJCWNhc2UgSVNUT1JFXzE6IGlkeCA9MTsgZ290byBJU1RPUkVf
Y29tbW9uOw0KKwkJY2FzZSBJU1RPUkVfMjogaWR4ID0yOyBnb3RvIElTVE9S
RV9jb21tb247DQorCQljYXNlIElTVE9SRV8zOiBpZHggPTM7IGdvdG8gSVNU
T1JFX2NvbW1vbjsNCisJCWNhc2UgSVNUT1JFOg0KKwkJCUdFVF9DT05TVF9J
TkRFWDsNCisJCUlTVE9SRV9jb21tb246DQorCQkJTE9DQUxTX0lORk8oaWR4
KSA9IE9QU1RBQ0tfSU5GTygxKTsNCisJCQlibG9jay0+bG9jYWxzW2lkeF0g
PSBUSU5UOw0KKwkJCWJsb2NrLT5sb2NhbHNfaW5mb1tpZHhdID0gMDsNCisJ
CQkNCisJCQlPUFNUQUNLX1BPUF9UKFRJTlQsIDApOw0KKwkJCWJyZWFrOw0K
KwkJCQ0KKwkJCQ0KKwkJCS8vIGZsb2FkXzxuPiB0YWtlcyB0aGUgdmFyaWFi
bGUgYXQgbG9jYXRpb24gPG4+IGFuZCBwdXNoZXMgaXQgb250byB0aGUgc3Rh
Y2sNCisJCWNhc2UgRkxPQURfMDogaWR4ID0wOyBnb3RvIEZMT0FEX2NvbW1v
bjsNCisJCWNhc2UgRkxPQURfMTogaWR4ID0xOyBnb3RvIEZMT0FEX2NvbW1v
bjsNCisJCWNhc2UgRkxPQURfMjogaWR4ID0yOyBnb3RvIEZMT0FEX2NvbW1v
bjsNCisJCWNhc2UgRkxPQURfMzogaWR4ID0gMzsgZ290byBGTE9BRF9jb21t
b247DQorCQljYXNlIEZMT0FEOg0KKwkJCUdFVF9DT05TVF9JTkRFWDsNCisJ
CUZMT0FEX2NvbW1vbjoNCisJCQlFTlNVUkVfTE9DQUxfVFlQRShpZHgsIFRG
TE9BVCk7DQorCQkJT1BTVEFDS19QVVNIX0lORk8oVEZMT0FULCBMT0NBTFNf
SU5GTyhpZHgpKTsNCisJCQlicmVhazsNCisJCQkNCisJCQkNCisJCQkvLyBz
dG9yZXMgYSBmbG9hdCBmcm9tIHRvcCBvZiBzdGFjayBpbnRvIGxvY2FsIDxu
Pg0KKwkJY2FzZSBGU1RPUkVfMDogaWR4ID0gMDsgZ290byBGU1RPUkVfY29t
bW9uOw0KKwkJY2FzZSBGU1RPUkVfMTogaWR4ID0gMTsgZ290byBGU1RPUkVf
Y29tbW9uOw0KKwkJY2FzZSBGU1RPUkVfMjogaWR4ID0gMjsgZ290byBGU1RP
UkVfY29tbW9uOw0KKwkJY2FzZSBGU1RPUkVfMzogaWR4ID0gMzsgZ290byBG
U1RPUkVfY29tbW9uOw0KKwkJY2FzZSBGU1RPUkU6DQorCQkJR0VUX0NPTlNU
X0lOREVYOw0KKwkJRlNUT1JFX2NvbW1vbjoNCisJCQlMT0NBTFNfSU5GTyhp
ZHgpID0gT1BTVEFDS19JTkZPKDEpOw0KKwkJCWJsb2NrLT5sb2NhbHNbaWR4
XSA9IFRGTE9BVDsNCisJCQlibG9jay0+bG9jYWxzX2luZm9baWR4XSA9IDA7
DQorCQkJDQorCQkJT1BTVEFDS19QT1BfVChURkxPQVQsIDApOw0KKwkJCWJy
ZWFrOw0KKwkJCQ0KKwkJCQ0KKwkJCS8vIGxsb2FkXzxuPiB0YWtlcyB0aGUg
dmFyaWFibGUgYXQgbG9jYXRpb24gPG4+IGFuZCBwdXNoZXMgaXQgb250byB0
aGUgc3RhY2sNCisJCWNhc2UgTExPQURfMDogaWR4ID0gMDsgZ290byBMTE9B
RF9jb21tb247DQorCQljYXNlIExMT0FEXzE6IGlkeCA9IDE7IGdvdG8gTExP
QURfY29tbW9uOw0KKwkJY2FzZSBMTE9BRF8yOiBpZHggPSAyOyBnb3RvIExM
T0FEX2NvbW1vbjsNCisJCWNhc2UgTExPQURfMzogaWR4ID0gMzsgZ290byBM
TE9BRF9jb21tb247DQorCQljYXNlIExMT0FEOg0KKwkJCUdFVF9DT05TVF9J
TkRFWDsNCisJCUxMT0FEX2NvbW1vbjoNCisJCQlFTlNVUkVfTE9DQUxfVFlQ
RShpZHgsIFRMT05HKTsNCisJCQlPUFNUQUNLX1dQVVNIKFRMT05HKTsNCisJ
CQlPUFNUQUNLX0lORk8oMSkgPSAwOw0KKwkJCU9QU1RBQ0tfSU5GTygyKSA9
IExPQ0FMU19JTkZPKGlkeCk7DQorCQkJYnJlYWs7DQorCQkJDQorCQkJDQor
CQkJLy8gbHN0b3JlXzxuPiBzdG9yZXMgYSBsb25nIGZyb20gdG9wIG9mIHN0
YWNrIGludG8gbG9jYWwgPG4+DQorCQljYXNlIExTVE9SRV8wOiBpZHggPSAw
OyBnb3RvIExTVE9SRV9jb21tb247DQorCQljYXNlIExTVE9SRV8xOiBpZHgg
PSAxOyBnb3RvIExTVE9SRV9jb21tb247DQorCQljYXNlIExTVE9SRV8yOiBp
ZHggPSAyOyBnb3RvIExTVE9SRV9jb21tb247DQorCQljYXNlIExTVE9SRV8z
OiBpZHggPSAzOyBnb3RvIExTVE9SRV9jb21tb247DQorCQljYXNlIExTVE9S
RToNCisJCQlHRVRfQ09OU1RfSU5ERVg7DQorCQlMU1RPUkVfY29tbW9uOg0K
KwkJCUxPQ0FMU19JTkZPKGlkeCkgICAgICAgPSBPUFNUQUNLX0lORk8oMSk7
DQorCQkJTE9DQUxTX0lORk8oaWR4ICsgMSkgICA9IDA7DQorCQkJYmxvY2st
PmxvY2Fsc1tpZHhdICAgICA9IFRMT05HOw0KKwkJCWJsb2NrLT5sb2NhbHNb
aWR4ICsgMV0gPSBUV0lERTsNCisJCQlibG9jay0+bG9jYWxzX2luZm9baWR4
XSAgID0gMDsNCisJCQlibG9jay0+bG9jYWxzX2luZm9baWR4KzFdID0gMDsN
CisJCQkNCisJCQlPUFNUQUNLX1dQT1BfVChUTE9ORywgMCk7DQorCQkJYnJl
YWs7DQorCQkJDQorCQkJDQorCQkJLy8gZGxvYWRfPG4+IHRha2VzIHRoZSBk
b3VibGUgYXQgbG9jYWwgPG4+IGFuZCBwdXNoZXMgaXQgb250byB0aGUgc3Rh
Y2sNCisJCWNhc2UgRExPQURfMDogaWR4ID0gMDsgZ290byBETE9BRF9jb21t
b247DQorCQljYXNlIERMT0FEXzE6IGlkeCA9IDE7IGdvdG8gRExPQURfY29t
bW9uOw0KKwkJY2FzZSBETE9BRF8yOiBpZHggPSAyOyBnb3RvIERMT0FEX2Nv
bW1vbjsNCisJCWNhc2UgRExPQURfMzogaWR4ID0gMzsgZ290byBETE9BRF9j
b21tb247DQorCQljYXNlIERMT0FEOg0KKwkJCUdFVF9DT05TVF9JTkRFWDsN
CisJCURMT0FEX2NvbW1vbjoNCisJCQlFTlNVUkVfTE9DQUxfVFlQRShpZHgs
IFRET1VCTEUpOw0KKwkJCU9QU1RBQ0tfV1BVU0goVERPVUJMRSk7DQorCQkJ
T1BTVEFDS19JTkZPKDEpID0gMDsNCisJCQlPUFNUQUNLX0lORk8oMikgPSBM
T0NBTFNfSU5GTyhpZHgpOw0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJCQ0KKwkJ
CS8vIGRzdG9yZSBzdG9yZXMgYSBkb3VibGUgZnJvbSB0aGUgdG9wIG9mIHN0
YWNrIGludG8gYSBsb2NhbCB2YXJpYWJsZQ0KKwkJY2FzZSBEU1RPUkVfMDog
aWR4ID0gMDsgZ290byBEU1RPUkVfY29tbW9uOw0KKwkJY2FzZSBEU1RPUkVf
MTogaWR4ID0gMTsgZ290byBEU1RPUkVfY29tbW9uOw0KKwkJY2FzZSBEU1RP
UkVfMjogaWR4ID0gMjsgZ290byBEU1RPUkVfY29tbW9uOw0KKwkJY2FzZSBE
U1RPUkVfMzogaWR4ID0gMzsgZ290byBEU1RPUkVfY29tbW9uOw0KKwkJY2Fz
ZSBEU1RPUkU6DQorCQkJR0VUX0NPTlNUX0lOREVYOw0KKwkJRFNUT1JFX2Nv
bW1vbjoNCisJCQlMT0NBTFNfSU5GTyhpZHgpICAgICAgID0gT1BTVEFDS19J
TkZPKDEpOw0KKwkJCUxPQ0FMU19JTkZPKGlkeCArIDEpICAgPSAwOw0KKwkJ
CWJsb2NrLT5sb2NhbHNbaWR4XSAgICAgPSBURE9VQkxFOw0KKwkJCWJsb2Nr
LT5sb2NhbHNbaWR4ICsgMV0gPSBUV0lERTsNCisJCQlibG9jay0+bG9jYWxz
X2luZm9baWR4XSAgID0gMDsNCisJCQlibG9jay0+bG9jYWxzX2luZm9baWR4
KzFdID0gMDsNCisJCQkNCisJCQlPUFNUQUNLX1dQT1BfVChURE9VQkxFLCAw
KTsNCisJCQlicmVhazsNCisJCQkNCisJCQkNCisjdW5kZWYgR0VUX0NPTlNU
X0lOREVYDQorCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorCQkJICogQVJSQVkg
SU5TVFJVQ1RJT05TIQ0KKwkJCSAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisJCQkv
LyBpIHB1dCBBTkVXQVJSQVkgY29kZSBieSBORVcgaW5zdGVhZCBvZiBpbiB0
aGUgYXJyYXkgaW5zdHJ1Y3Rpb25zDQorCQkJLy8gc2VjdGlvbiBiZWNhdXNl
IG9mIHNpbWlsYXJpdGllcyB3aXRoIE5FVw0KKwkJCQ0KKwkJCQ0KKwkJCS8v
IGZvciBjcmVhdGluZyBhIHByaW1pdGl2ZSBhcnJheQ0KKwkJY2FzZSBORVdB
UlJBWToNCisJCQlPUFNUQUNLX1BPUF9UKFRJTlQsIDApOyAgIC8vIGFycmF5
IHNpemUNCisJCQkNCisJCQlzd2l0Y2goY29kZVtwYyArIDFdKSB7DQorCQkJ
Y2FzZSA0OiAgT1BTVEFDS19QVVNIKFRCT09MQVJSKTsgICBicmVhazsNCisJ
CQljYXNlIDU6ICBPUFNUQUNLX1BVU0goVENIQVJBUlIpOyAgIGJyZWFrOw0K
KwkJCWNhc2UgNjogIE9QU1RBQ0tfUFVTSChURkxPQVRBUlIpOyAgYnJlYWs7
DQorCQkJY2FzZSA3OiAgT1BTVEFDS19QVVNIKFRET1VCTEVBUlIpOyBicmVh
azsNCisJCQljYXNlIDg6ICBPUFNUQUNLX1BVU0goVEJZVEVBUlIpOyAgIGJy
ZWFrOw0KKwkJCWNhc2UgOTogIE9QU1RBQ0tfUFVTSChUU0hPUlRBUlIpOyAg
YnJlYWs7DQorCQkJY2FzZSAxMDogT1BTVEFDS19QVVNIKFRJTlRBUlIpOyAg
ICBicmVhazsNCisJCQljYXNlIDExOiBPUFNUQUNLX1BVU0goVExPTkdBUlIp
OyAgIGJyZWFrOw0KKwkJCWRlZmF1bHQ6IFZFUklGWV9FUlJPUigibmV3YXJy
YXkgb2YgdW5rbm93biB0eXBlIik7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJ
CQ0KKwkJY2FzZSBBUlJBWUxFTkdUSDoNCisJCQlFTlNVUkVfT1BTVEFDS19T
SVpFKDEpOw0KKwkJCQ0KKwkJCXR5cGUgPSBPUFNUQUNLX0lURU0oMSk7DQor
CQkJbiAgICA9IE9QU1RBQ0tfSU5GTygxKTsNCisJCQlpZiAobiAmIENMQVNT
X1NJR1NUUiB8fCBuICYgQ0xBU1NfTkFNRVNUUikgew0KKwkJCQlzaWcgPSAo
Y29uc3QgY2hhciopdHlwZTsNCisJCQkJaWYgKCpzaWcgIT0gJ1snKSB7DQor
CQkJCQlWRVJJRllfRVJST1IoImFycmF5bGVuZ3RoIG9uIHNvbWV0aGluZyB0
aGF0IGlzIG5vdCBhbiBhcnJheSIpOw0KKwkJCQl9DQorCQkJfSBlbHNlIGlm
ICghSVNfQVJSQVkodHlwZSkpIHsNCisJCQkJVkVSSUZZX0VSUk9SKCJhcnJh
eWxlbmd0aCBvbiBzb21ldGhpbmcgdGhhdCBpcyBub3QgYW4gYXJyYXkiKTsN
CisJCQl9DQorCQkJDQorCQkJT1BTVEFDS19QT1BfQkxJTkQ7DQorCQkJT1BT
VEFDS19QVVNIX0JMSU5EKFRJTlQpOw0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJ
CQ0KKyNkZWZpbmUgQVJSQVlfTE9BRChfVCwgX0FSUlQpIFwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9QU1RBQ0tfUE9QX1QoVElOVCwg
MCk7IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QU1RB
Q0tfUE9QX1QoX0FSUlQsIDApOyBcDQorCQkJCU9QU1RBQ0tfUFVTSChfVCk7
DQorDQorI2RlZmluZSBBUlJBWV9XTE9BRChfVCwgX0FSUlQpIFwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QU1RBQ0tfUE9QX1QoVElO
VCwgMCk7IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9Q
U1RBQ0tfUE9QX1QoX0FSUlQsIDApOyBcDQorCQkJCU9QU1RBQ0tfV1BVU0go
X1QpOw0KKwkJCQ0KKwkJCQ0KKwkJY2FzZSBBQUxPQUQ6DQorCQkJRU5TVVJF
X09QU1RBQ0tfU0laRSgyKTsNCisJCQkNCisJCQlpZiAoT1BTVEFDS19JVEVN
KDEpICE9IFRJTlQpIHsNCisJCQkJVkVSSUZZX0VSUk9SKCJhYWxvYWQ6IGl0
ZW0gb24gdG9wIG9mIHN0YWNrIGlzIG5vdCBhbiBpbnRlZ2VyIik7DQorCQkJ
fQ0KKwkJCQ0KKwkJCXR5cGUgPSBPUFNUQUNLX0lURU0oMik7DQorCQkJaWYg
KE9QU1RBQ0tfSU5GTygyKSAmIENMQVNTX05BTUVTVFIgfHwgT1BTVEFDS19J
TkZPKDIpICYgQ0xBU1NfU0lHU1RSKSB7DQorCQkJCXNpZyA9IChjaGFyKil0
eXBlOw0KKwkJCQkNCisJCQkJaWYgKCpzaWcgIT0gJ1snKSB7DQorCQkJCQlE
QkcoVkVSSUZZMywgZHByaW50ZigiYWFsb2FkOiB0aGluZyBvbiBvcHN0YWNr
IHRoYXQgaXMgbm90IGFuIGFycmF5OiAlc1xuIiwgc2lnKTsgKTsNCisJCQkJ
CQ0KKwkJCQkJVkVSSUZZX0VSUk9SKCJhYWxvYWQ6IHRoaW5nIG9uIG9wc3Rh
Y2sgaXMgbm90IGFuIGFycmF5Iik7DQorCQkJCX0NCisJCQkJDQorCQkJCXNp
ZysrOw0KKwkJCQl0eXBlID0gKEhqYXZhX2xhbmdfQ2xhc3MqKXNpZzsNCisJ
CQl9DQorCQkJZWxzZSB7DQorCQkJCWlmICghSVNfQVJSQVkodHlwZSkpIHsN
CisJCQkJCVZFUklGWV9FUlJPUigiQUFMT0FEIG9uIHR5cGUgdGhhdCBpcyBu
b3QgYW4gYXJyYXkiKTsNCisJCQkJfQ0KKwkJCQkNCisJCQkJdHlwZSA9IChI
amF2YV9sYW5nX0NsYXNzKikoQ0xBU1NfQ05BTUUodHlwZSkgKyAxKTsNCisJ
CQl9DQorCQkJDQorCQkJREJHKFZFUklGWTMsDQorCQkJICAgIGRwcmludGYo
IiAgICAgICAgICAgICAgICBhcnJheSB0eXBlOiAiKTsNCisJCQkgICAgcHJp
bnRUeXBlKHR5cGUsIENMQVNTX1NJR1NUUik7DQorCQkJICAgIGRwcmludGYo
IlxuIik7DQorCQkJICAgICk7DQorCQkJDQorCQkJLy8gb25seSBwdXNoIHNp
Z25hdHVyZSBoZXJlLi4uZG9uJ3QgdHJ5IHRvIGxvYWQgdW5sZXNzIG5lZWRl
ZCBmb3IgdHlwZSBjaGVja2luZw0KKwkJCU9QU1RBQ0tfUE9QX0JMSU5EOw0K
KwkJCU9QU1RBQ0tfUE9QX0JMSU5EOw0KKwkJCQ0KKwkJCU9QU1RBQ0tfUFVT
SF9CTElORF9JTkZPKHR5cGUsIENMQVNTX1NJR1NUUik7DQorCQkJYnJlYWs7
DQorCQkJDQorCQljYXNlIElBTE9BRDogQVJSQVlfTE9BRChUSU5ULCAgIFRJ
TlRBUlIpOyAgIGJyZWFrOw0KKwkJY2FzZSBGQUxPQUQ6IEFSUkFZX0xPQUQo
VEZMT0FULCBURkxPQVRBUlIpOyBicmVhazsNCisJCWNhc2UgQkFMT0FEOiBB
UlJBWV9MT0FEKFRJTlQsICAgVEJZVEVBUlIpOyAgYnJlYWs7DQorCQljYXNl
IENBTE9BRDogQVJSQVlfTE9BRChUSU5ULCAgIFRDSEFSQVJSKTsgIGJyZWFr
Ow0KKwkJY2FzZSBTQUxPQUQ6IEFSUkFZX0xPQUQoVElOVCwgICBUU0hPUlRB
UlIpOyBicmVhazsNCisJCQkNCisJCWNhc2UgTEFMT0FEOiBBUlJBWV9XTE9B
RChUTE9ORywgICBUTE9OR0FSUik7ICAgYnJlYWs7DQorCQljYXNlIERBTE9B
RDogQVJSQVlfV0xPQUQoVERPVUJMRSwgVERPVUJMRUFSUik7IGJyZWFrOw0K
KyN1bmRlZiBBUlJBWV9MT0FEDQorI3VuZGVmIEFSUkFZX1dMT0FEDQorCQkJ
DQorCQkJDQorI2RlZmluZSBBUlJBWV9TVE9SRShfVCwgX0FSUlQpIFwNCisJ
CQkJT1BTVEFDS19QT1BfVChfVCwgMCk7IFwNCisJCQkJT1BTVEFDS19QT1Bf
VChUSU5ULCAwKTsgXA0KKwkJCQlPUFNUQUNLX1BPUF9UKF9BUlJULCAwKTsN
CisJCQkNCisjZGVmaW5lIEFSUkFZX1dTVE9SRShfVCwgX0FSUlQpIFwNCisJ
CQkJT1BTVEFDS19XUE9QX1QoX1QsIDApOyBcDQorCQkJCU9QU1RBQ0tfUE9Q
X1QoVElOVCwgMCk7IFwNCisJCQkJT1BTVEFDS19QT1BfVChfQVJSVCwgMCk7
DQorCQkJDQorCQkJDQorCQljYXNlIEFBU1RPUkU6DQorCQkJLy8gdGhlIHJ1
bnRpbWUgdmFsdWUgb2YgdGhlIHR5cGUgb24gdGhlIHRvcCBvZiB0aGUgc3Rh
Y2sgbXVzdCBiZQ0KKwkJCS8vIGFzc2lnbm1lbnQgY29tcGF0aWJsZSB3aXRo
IHRoZSB0eXBlIG9mIHRoZSBhcnJheQ0KKwkJCUVOU1VSRV9PUFNUQUNLX1NJ
WkUoMyk7DQorCQkJDQorCQkJaWYgKE9QU1RBQ0tfSVRFTSgyKSAhPSBUSU5U
KSB7DQorCQkJCVZFUklGWV9FUlJPUigiYWFzdG9yZTogYXJyYXkgaW5kZXgg
aXMgbm90IGFuIGludGVnZXIiKTsNCisJCQl9DQorCQkJDQorCQkJdHlwZSAg
ICAgID0gT1BTVEFDS19JVEVNKDEpOw0KKwkJCWFycmF5VHlwZSA9IE9QU1RB
Q0tfSVRFTSgzKTsNCisJCQkNCisJCQlEQkcoVkVSSUZZMywNCisJCQkgICAg
ZHByaW50ZigiJXNhcnJheVR5cGU6ICIsIGluZGVudCk7IHByaW50VHlwZShh
cnJheVR5cGUsIE9QU1RBQ0tfSU5GTygzKSk7DQorCQkJICAgIGRwcmludGYo
IiB2cy4gdHlwZTogIik7IHByaW50VHlwZSh0eXBlLCBPUFNUQUNLX0lORk8o
MSkpOw0KKwkJCSAgICBkcHJpbnRmKCJcbiIpOw0KKwkJCSAgICApOw0KKwkJ
CQ0KKwkJCWlmIChPUFNUQUNLX0lORk8oMykgJiBDTEFTU19OQU1FU1RSIHx8
IE9QU1RBQ0tfSU5GTygzKSAmIENMQVNTX1NJR1NUUikgew0KKwkJCQlzaWcg
PSAoY29uc3QgY2hhciopYXJyYXlUeXBlOw0KKwkJCQlpZiAoKnNpZyAhPSAn
WycpIHsNCisJCQkJCVZFUklGWV9FUlJPUigidHJ5aW5nIHRvIGFhc3RvcmUg
aW50byBzb21ldGhpbmcgdGhhdCBpcyBub3QgYW4gYXJyYXkiKTsNCisJCQkJ
fQ0KKwkJCQkNCisJCQkJc2lnKys7DQorCQkJCWFycmF5VHlwZSA9IChIamF2
YV9sYW5nX0NsYXNzKikoc2lnKTsNCisJCQkJbiA9IENMQVNTX1NJR1NUUjsN
CisJCQl9IGVsc2UgaWYgKCFJU19BUlJBWShhcnJheVR5cGUpKSB7DQorCQkJ
CVZFUklGWV9FUlJPUigidHJ5aW5nIHRvIGFhc3RvcmUgaW50byBzb21ldGhp
bmcgdGhhdCBpcyBub3QgYW4gYXJyYXkiKTsNCisJCQl9IGVsc2Ugew0KKwkJ
CQlpZiAoYXJyYXlUeXBlID09IFRPQkpBUlIpIHsNCisJCQkJCWFycmF5VHlw
ZSA9IFRPQko7DQorCQkJCQluID0gMDsNCisJCQkJfSBlbHNlIHsNCisJCQkJ
CWFycmF5VHlwZSA9IChIamF2YV9sYW5nX0NsYXNzKikoQ0xBU1NfQ05BTUUo
YXJyYXlUeXBlKSArIDEpOw0KKwkJCQkJbiA9IENMQVNTX1NJR1NUUjsNCisJ
CQkJfQ0KKwkJCQkNCisJCQkJDQorCQkJfQ0KKwkJCQ0KKwkJCWlmICghdHlw
ZWNoZWNrKGVpbmZvLCB0aGlzLCBhcnJheVR5cGUsIG4sIHR5cGUsIE9QU1RB
Q0tfSU5GTygxKSkpIHsNCisJCQkJVkVSSUZZX0VSUk9SKCJhdHRlbXB0aW5n
IHRvIHN0b3JlIGluY29tcGF0aWJsZSB0eXBlIGluIGFycmF5Iik7DQorCQkJ
fQ0KKwkJCQ0KKwkJCU9QU1RBQ0tfUE9QX05fQkxJTkQoMyk7DQorCQkJYnJl
YWs7DQorCQkJDQorCQkJDQorCQljYXNlIElBU1RPUkU6IEFSUkFZX1NUT1JF
KFRJTlQsICAgVElOVEFSUik7ICAgYnJlYWs7DQorCQljYXNlIEZBU1RPUkU6
IEFSUkFZX1NUT1JFKFRGTE9BVCwgVEZMT0FUQVJSKTsgYnJlYWs7DQorCQlj
YXNlIEJBU1RPUkU6IEFSUkFZX1NUT1JFKFRJTlQsICAgVEJZVEVBUlIpOyAg
YnJlYWs7DQorCQljYXNlIENBU1RPUkU6IEFSUkFZX1NUT1JFKFRJTlQsICAg
VENIQVJBUlIpOyAgYnJlYWs7DQorCQljYXNlIFNBU1RPUkU6IEFSUkFZX1NU
T1JFKFRJTlQsICAgVFNIT1JUQVJSKTsgYnJlYWs7DQorCQkJDQorCQljYXNl
IExBU1RPUkU6IEFSUkFZX1dTVE9SRShUTE9ORywgICBUTE9OR0FSUik7ICAg
YnJlYWs7DQorCQljYXNlIERBU1RPUkU6IEFSUkFZX1dTVE9SRShURE9VQkxF
LCBURE9VQkxFQVJSKTsgYnJlYWs7DQorI3VuZGVmIEFSUkFZX1NUT1JFDQor
I3VuZGVmIEFSUkFZX1dTVE9SRQ0KKwkJCQ0KKwkJCQ0KKwkJCQ0KKwkJCS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKg0KKwkJCSAqIEFSSVRITUVUSUMgSU5TVFJVQ1RJ
T05TDQorCQkJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKwkJY2FzZSBJQU5EOiBj
YXNlIElPUjogIGNhc2UgSVhPUjoNCisJCWNhc2UgSUFERDogY2FzZSBJU1VC
OiBjYXNlIElNVUw6IGNhc2UgSURJVjogY2FzZSBJUkVNOg0KKwkJY2FzZSBJ
U0hMOiBjYXNlIElTSFI6IGNhc2UgSVVTSFI6DQorCQkJT1BTVEFDS19QT1Bf
VChUSU5ULCAwKTsNCisJCQlicmVhazsNCisJCWNhc2UgSU5FRzoNCisJCQlP
UFNUQUNLX1BFRUtfVChUSU5ULCAwKTsNCisJCQlicmVhazsNCisJCQkNCisJ
CQkNCisJCWNhc2UgTEFORDogY2FzZSBMT1I6ICBjYXNlIExYT1I6DQorCQlj
YXNlIExBREQ6IGNhc2UgTFNVQjogY2FzZSBMTVVMOiBjYXNlIExESVY6IGNh
c2UgTFJFTToNCisJCQlPUFNUQUNLX1dQT1BfVChUTE9ORywgMCk7DQorCQkJ
YnJlYWs7DQorCQljYXNlIExORUc6DQorCQkJT1BTVEFDS19XUEVFS19UKFRM
T05HLCAwKTsNCisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgTFNITDogY2Fz
ZSBMU0hSOiBjYXNlIExVU0hSOg0KKwkJCU9QU1RBQ0tfUE9QX1QoVElOVCwg
MCk7DQorCQkJT1BTVEFDS19XUEVFS19UKFRMT05HLCAwKTsNCisJCQlicmVh
azsNCisJCQkNCisJCQkNCisJCWNhc2UgRkFERDogY2FzZSBGU1VCOiBjYXNl
IEZNVUw6IGNhc2UgRkRJVjogY2FzZSBGUkVNOg0KKwkJCU9QU1RBQ0tfUE9Q
X1QoVEZMT0FULCAwKTsNCisJCQlicmVhazsNCisJCWNhc2UgRk5FRzoNCisJ
CQlPUFNUQUNLX1BFRUtfVChURkxPQVQsIDApOw0KKwkJCWJyZWFrOw0KKwkJ
CQ0KKwkJCQ0KKwkJY2FzZSBEQUREOiBjYXNlIERTVUI6IGNhc2UgRERJVjog
Y2FzZSBETVVMOiBjYXNlIERSRU06DQorCQkJT1BTVEFDS19XUE9QX1QoVERP
VUJMRSwgMCk7DQorCQkJYnJlYWs7DQorCQljYXNlIERORUc6DQorCQkJT1BT
VEFDS19XUEVFS19UKFRET1VCTEUsIDApOw0KKwkJCWJyZWFrOw0KKwkJCQ0K
KwkJCQ0KKwkJY2FzZSBMQ01QOg0KKwkJCU9QU1RBQ0tfV1BPUF9UKFRMT05H
LCAwKTsNCisJCQlPUFNUQUNLX1dQT1BfVChUTE9ORywgMCk7DQorCQkJT1BT
VEFDS19QVVNIKFRJTlQpOw0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSBG
Q01QRzoNCisJCWNhc2UgRkNNUEw6DQorCQkJT1BTVEFDS19QT1BfVChURkxP
QVQsIDApOw0KKwkJCU9QU1RBQ0tfUE9QX1QoVEZMT0FULCAwKTsNCisJCQlP
UFNUQUNLX1BVU0goVElOVCk7DQorCQkJYnJlYWs7DQorCQkJCQ0KKwkJY2Fz
ZSBEQ01QRzoNCisJCWNhc2UgRENNUEw6DQorCQkJT1BTVEFDS19XUE9QX1Qo
VERPVUJMRSwgMCk7DQorCQkJT1BTVEFDS19XUE9QX1QoVERPVUJMRSwgMCk7
DQorCQkJT1BTVEFDS19QVVNIKFRJTlQpOw0KKwkJCWJyZWFrOw0KKwkJCQ0K
KwkJCQ0KKwkJY2FzZSBJSU5DOg0KKwkJCWlmICh3aWRlID09IHRydWUpIHsg
R0VUX1dJRFg7IH0NCisJCQllbHNlICAgICAgICAgICAgICB7IEdFVF9JRFg7
IH0NCisJCQkNCisJCQlFTlNVUkVfTE9DQUxfVFlQRShpZHgsIFRJTlQpOw0K
KwkJCQ0KKwkJCXBjICs9IGluc25MZW5bY29kZVtwY11dOw0KKwkJCWlmICh3
aWRlID09IHRydWUpIHsNCisJCQkJcGMgKz0gMjsNCisJCQkJd2lkZSA9IGZh
bHNlOw0KKwkJCX0NCisJCQljb250aW51ZTsNCisJCQkNCisJCQkNCisJCQkv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioNCisJCQkgKiBQUklNSVRJVkUgQ09OVkVSU0lP
TiBTVFVGRg0KKwkJCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisJCWNhc2UgSU5U
MkJZVEU6DQorCQljYXNlIElOVDJDSEFSOg0KKwkJY2FzZSBJTlQyU0hPUlQ6
DQorCQkJT1BTVEFDS19QRUVLX1QoVElOVCwgMCk7DQorCQkJYnJlYWs7DQor
CQkJDQorCQljYXNlIEkyRjoNCisJCQlPUFNUQUNLX1BPUF9UKFRJTlQsIDAp
Ow0KKwkJCU9QU1RBQ0tfUFVTSF9CTElORChURkxPQVQpOw0KKwkJCWJyZWFr
Ow0KKwkJY2FzZSBJMkw6DQorCQkJT1BTVEFDS19QT1BfVChUSU5ULCAwKTsN
CisJCQlPUFNUQUNLX1dQVVNIKFRMT05HKTsNCisJCQlicmVhazsNCisJCWNh
c2UgSTJEOg0KKwkJCU9QU1RBQ0tfUE9QX1QoVElOVCwgMCk7DQorCQkJT1BT
VEFDS19XUFVTSChURE9VQkxFKTsNCisJCQlicmVhazsNCisJCQkNCisJCWNh
c2UgRjJJOg0KKwkJCU9QU1RBQ0tfUE9QX1QoVEZMT0FULCAwKTsNCisJCQlP
UFNUQUNLX1BVU0hfQkxJTkQoVElOVCk7DQorCQkJYnJlYWs7DQorCQljYXNl
IEYyTDoNCisJCQlPUFNUQUNLX1BPUF9UKFRGTE9BVCwgMCk7DQorCQkJT1BT
VEFDS19XUFVTSChUTE9ORyk7DQorCQkJYnJlYWs7DQorCQljYXNlIEYyRDoN
CisJCQlPUFNUQUNLX1BPUF9UKFRGTE9BVCwgMCk7DQorCQkJT1BTVEFDS19X
UFVTSChURE9VQkxFKTsNCisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgTDJJ
Og0KKwkJCU9QU1RBQ0tfV1BPUF9UKFRMT05HLCAwKTsNCisJCQlPUFNUQUNL
X1BVU0hfQkxJTkQoVElOVCk7DQorCQkJYnJlYWs7DQorCQljYXNlIEwyRjoN
CisJCQlPUFNUQUNLX1dQT1BfVChUTE9ORywgMCk7DQorCQkJT1BTVEFDS19Q
VVNIX0JMSU5EKFRGTE9BVCk7DQorCQkJYnJlYWs7DQorCQljYXNlIEwyRDoN
CisJCQlPUFNUQUNLX1dQT1BfVChUTE9ORywgMCk7DQorCQkJT1BTVEFDS19X
UFVTSF9CTElORChURE9VQkxFKTsNCisJCQlicmVhazsNCisJCQkNCisJCWNh
c2UgRDJJOg0KKwkJCU9QU1RBQ0tfV1BPUF9UKFRET1VCTEUsIDApOw0KKwkJ
CU9QU1RBQ0tfUFVTSF9CTElORChUSU5UKTsNCisJCQlicmVhazsNCisJCWNh
c2UgRDJGOg0KKwkJCU9QU1RBQ0tfV1BPUF9UKFRET1VCTEUsIDApOw0KKwkJ
CU9QU1RBQ0tfUFVTSF9CTElORChURkxPQVQpOw0KKwkJCWJyZWFrOw0KKwkJ
Y2FzZSBEMkw6DQorCQkJT1BTVEFDS19XUE9QX1QoVERPVUJMRSwgMCk7DQor
CQkJT1BTVEFDS19XUFVTSF9CTElORChUTE9ORyk7DQorCQkJYnJlYWs7DQor
CQkJDQorCQkJDQorCQkJDQorCQkJLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorCQkJ
ICogT0JKRUNUIENSRUFUSU9OL1RZUEUgQ0hFQ0tJTkcNCisJCQkgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovDQorCQljYXNlIElOU1RBTkNFT0Y6DQorCQkJRU5TVVJF
X09QU1RBQ0tfU0laRSgxKTsNCisJCQlpZiAoIWlzUmVmZXJlbmNlKE9QU1RB
Q0tfSVRFTSgxKSwgT1BTVEFDS19JTkZPKDEpKSkgew0KKwkJCQlWRVJJRllf
RVJST1IoImluc3RhbmNlb2Y6IHRvcCBvZiBzdGFjayBpcyBub3QgYSByZWZl
cmVuY2UgdHlwZSIpOw0KKwkJCX0NCisJCQlPUFNUQUNLX1BPUF9CTElORDsN
CisJCQlPUFNUQUNLX1BVU0hfQkxJTkQoVElOVCk7DQorCQkJYnJlYWs7DQor
CQkJDQorCQljYXNlIENIRUNLQ0FTVDoNCisJCQlFTlNVUkVfT1BTVEFDS19T
SVpFKDEpOw0KKwkJCU9QU1RBQ0tfUE9QX0JMSU5EOw0KKwkJCWdvdG8gTkVX
X0NPTU1PTjsNCisJCQkNCisJCWNhc2UgTkVXOg0KKwkJTkVXX0NPTU1PTjoN
CisJCQlHRVRfV0lEWDsNCisJCQkNCisJCQlpZiAocG9vbC0+dGFnc1tpZHhd
ID09IENPTlNUQU5UX1Jlc29sdmVkQ2xhc3MpIHsNCisJCQkJT1BTVEFDS19Q
VVNIX0lORk8oQ0xBU1NfQ0xBU1MoaWR4LCBwb29sKSwgMCk7DQorCQkJfSBl
bHNlIHsNCisJCQkJY29uc3QgY2hhciogbmFtZXN0cjsNCisJCQkJDQorCQkJ
CW5hbWVzdHIgPSBDTEFTU19OQU1FRChpZHgsIHBvb2wpOw0KKwkJCQkNCisJ
CQkJaWYgKCpuYW1lc3RyID09ICdbJykgew0KKwkJCQkJT1BTVEFDS19QVVNI
X0lORk8oKEhqYXZhX2xhbmdfQ2xhc3MqKW5hbWVzdHIsIENMQVNTX1NJR1NU
Uik7DQorCQkJCX0gZWxzZSB7DQorCQkJCQlPUFNUQUNLX1BVU0hfSU5GTygo
SGphdmFfbGFuZ19DbGFzcyopbmFtZXN0ciwgQ0xBU1NfTkFNRVNUUik7DQor
CQkJCX0NCisJCQl9DQorCQkJDQorCQkJREJHKFZFUklGWTMsDQorCQkJICAg
IGRwcmludGYoIiVzIiwgaW5kZW50KTsNCisJCQkgICAgcHJpbnRUeXBlKE9Q
U1RBQ0tfSVRFTSgxKSwgT1BTVEFDS19JTkZPKDEpKTsNCisJCQkgICAgZHBy
aW50ZigiXG4iKTsgKTsNCisJCQlicmVhazsNCisJCQkNCisJCQkNCisJCWNh
c2UgQU5FV0FSUkFZOg0KKwkJCU9QU1RBQ0tfUE9QX1QoVElOVCwgMCk7DQor
CQkJDQorCQkJR0VUX1dJRFg7DQorCQkJDQorCQkJaWYgKHBvb2wtPnRhZ3Nb
aWR4XSA9PSBDT05TVEFOVF9SZXNvbHZlZENsYXNzKSB7DQorCQkJCWFycmF5
VHlwZSA9IENMQVNTX0NMQVNTKGlkeCwgcG9vbCk7DQorCQkJCXR5cGUgPSBs
b29rdXBBcnJheShhcnJheVR5cGUsIGVpbmZvKTsNCisJCQkJDQorCQkJCWlm
ICh0eXBlID09IE5VTEwpIHsNCisJCQkJCVZFUklGWV9FUlJPUigiYW5ld2Fy
cmF5OiBlcnJvciBjcmVhdGluZyBhcnJheSB0eXBlIik7DQorCQkJCX0NCisJ
CQkJDQorCQkJCU9QU1RBQ0tfUFVTSF9CTElORF9JTkZPKHR5cGUsIDApOw0K
KwkJCX0gZWxzZSB7DQorCQkJCWNoYXIqIG5hbWVzdHI7DQorCQkJCQ0KKwkJ
CQlzaWcgPSBDTEFTU19OQU1FRChpZHgsIHBvb2wpOw0KKwkJCQlpZiAoKnNp
ZyA9PSAnWycpIHsNCisJCQkJCW5hbWVzdHIgPSBjaGVja1B0cihLTUFMTE9D
KHNpemVvZihjaGFyKSAqIChzdHJsZW4oc2lnKSArIDIpKSk7DQorCQkJCQkq
c2lncyA9IHB1c2hTaWcoKnNpZ3MsIG5hbWVzdHIpOw0KKwkJCQkJc3ByaW50
ZihuYW1lc3RyLCAiWyVzIiwgc2lnKTsNCisJCQkJfSBlbHNlIHsNCisJCQkJ
CW5hbWVzdHIgPSBjaGVja1B0cihLTUFMTE9DKHNpemVvZihjaGFyKSAqIChz
dHJsZW4oc2lnKSArIDQpKSk7DQorCQkJCQkqc2lncyA9IHB1c2hTaWcoKnNp
Z3MsIG5hbWVzdHIpOw0KKwkJCQkJc3ByaW50ZihuYW1lc3RyLCAiW0wlczsi
LCBzaWcpOw0KKwkJCQl9DQorCQkJCU9QU1RBQ0tfUFVTSF9CTElORF9JTkZP
KChIamF2YV9sYW5nX0NsYXNzKiluYW1lc3RyLCBDTEFTU19TSUdTVFIpOw0K
KwkJCX0NCisJCQkNCisJCQlEQkcoVkVSSUZZMywNCisJCQkgICAgZHByaW50
ZigiJXMiLCBpbmRlbnQpOw0KKwkJCSAgICBwcmludFR5cGUoT1BTVEFDS19J
VEVNKDEpLCBPUFNUQUNLX0lORk8oMSkpOw0KKwkJCSAgICBkcHJpbnRmKCJc
biIpOyApOw0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSBNVUxUSUFORVdB
UlJBWToNCisJCQluID0gY29kZVtwYyArIDNdOw0KKwkJCUVOU1VSRV9PUFNU
QUNLX1NJWkUobik7DQorCQkJd2hpbGUgKG4gPiAwKSB7DQorCQkJCWlmIChP
UFNUQUNLX0lURU0oMSkgIT0gVElOVCkgew0KKwkJCQkJVkVSSUZZX0VSUk9S
KCJtdWx0aW5ld2FycmF5OiBmaXJzdCA8bj4gdGhpbmdzIG9uIG9wc3RhY2sg
bXVzdCBiZSBpbnRlZ2VycyIpOw0KKwkJCQl9DQorCQkJCU9QU1RBQ0tfUE9Q
X0JMSU5EOw0KKwkJCQluLS07DQorCQkJfQ0KKwkJCQ0KKwkJCWdvdG8gTkVX
X0NPTU1PTjsNCisJCQkNCisJCQkNCisJCWNhc2UgR0VURklFTEQ6DQorCQkJ
R0VUX1dJRFg7DQorCQkJDQorCQkJbiA9IEZJRUxEUkVGX0NMQVNTKGlkeCwg
cG9vbCk7DQorCQkJDQorCQkJaWYgKHBvb2wtPnRhZ3Nbbl0gPT0gQ09OU1RB
TlRfUmVzb2x2ZWRDbGFzcykgew0KKwkJCQl0eXBlID0gQ0xBU1NfQ0xBU1Mo
biwgcG9vbCk7DQorCQkJCW4gPSAwOw0KKwkJCX0gZWxzZSB7DQorCQkJCXR5
cGUgPSAoSGphdmFfbGFuZ19DbGFzcyopQ0xBU1NfTkFNRUQobiwgcG9vbCk7
DQorCQkJCW4gPSBDTEFTU19OQU1FU1RSOw0KKwkJCX0NCisJCQkNCisJCQlP
UFNUQUNLX1BPUF9UKHR5cGUsIG4pOw0KKwkJCWdvdG8gR0VUX0NPTU1PTjsN
CisJCQkNCisJCWNhc2UgR0VUU1RBVElDOg0KKwkJCUdFVF9XSURYOw0KKwkJ
CUNIRUNLX1NUQUNLX09WRVJGTE9XKDEpOw0KKwkJR0VUX0NPTU1PTjoNCisJ
CQlzaWcgPSBGSUVMRFJFRl9TSUdEKGlkeCwgcG9vbCk7DQorCQkJDQorCQkJ
REJHKFZFUklGWTMsIGRwcmludGYoIiVzZmllbGQgdHlwZTogJXNcbiIsIGlu
ZGVudCwgc2lnKTsgKTsNCisJCQkNCisJCQlzd2l0Y2ggKCpzaWcpIHsNCisJ
CQljYXNlICdJJzogY2FzZSAnWic6IGNhc2UgJ1MnOiBjYXNlICdCJzogY2Fz
ZSAnQyc6DQorCQkJCU9QU1RBQ0tfUFVTSF9CTElORChUSU5UKTsNCisJCQkJ
YnJlYWs7DQorCQkJCQ0KKwkJCWNhc2UgJ0YnOiBPUFNUQUNLX1BVU0hfQkxJ
TkQoVEZMT0FUKTsgYnJlYWs7DQorCQkJY2FzZSAnSic6IE9QU1RBQ0tfV1BV
U0hfQkxJTkQoVExPTkcpOyBicmVhazsNCisJCQljYXNlICdEJzogT1BTVEFD
S19XUFVTSF9CTElORChURE9VQkxFKTsgYnJlYWs7DQorCQkJCQ0KKwkJCWNh
c2UgJ1snOg0KKwkJCWNhc2UgJ0wnOg0KKwkJCQlPUFNUQUNLX1BVU0hfQkxJ
TkRfSU5GTygoSGphdmFfbGFuZ19DbGFzcyopc2lnLCBDTEFTU19TSUdTVFIp
Ow0KKwkJCQlicmVhazsNCisJCQkJDQorCQkJZGVmYXVsdDoNCisJCQkJREJH
KFZFUklGWTMsIGRwcmludGYoIiVzd2VpcmQgdHlwZSBzaWduYXR1cmU6ICVz
IiwgaW5kZW50LCBzaWcpOyApOw0KKwkJCQlWRVJJRllfRVJST1IoImdldHtm
aWVsZC9zdGF0aWN9OiB1bnJlY29nbml6ZWQgdHlwZSBzaWduYXR1cmUiKTsN
CisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJCQ0K
KwkJCQ0KKwkJY2FzZSBQVVRGSUVMRDoNCisJCQlHRVRfV0lEWDsNCisJCQlz
aWcgPSBGSUVMRFJFRl9TSUdEKGlkeCwgcG9vbCk7DQorCQkJDQorCQkJREJH
KFZFUklGWTMsIGRwcmludGYoIiAgICAgICAgICAgICAgICBmaWVsZCBuYW1l
Ojp0eXBlOiAlczo6JXNcbiIsDQorCQkJCQkgICAgIEZJRUxEUkVGX05BTUVE
KGlkeCwgcG9vbCksIHNpZyk7ICk7DQorCQkJICAgIA0KKwkJCWlmIChPUFNU
QUNLX1RPUCA9PSBUV0lERSkgbiA9IDM7DQorCQkJZWxzZSAgICAgICAgICAg
ICAgICAgICAgICBuID0gMjsNCisJCQlFTlNVUkVfT1BTVEFDS19TSVpFKG4p
Ow0KKwkJCQ0KKwkJCW4gPSAwOw0KKwkJCXN3aXRjaCAoKnNpZykgew0KKwkJ
CWNhc2UgJ0knOiBjYXNlICdaJzogY2FzZSAnUyc6IGNhc2UgJ0InOiBjYXNl
ICdDJzoNCisJCQkJdHlwZSA9IFRJTlQ7DQorCQkJCWJyZWFrOw0KKwkJCQkN
CisJCQljYXNlICdGJzogdHlwZSA9IFRGTE9BVDsgYnJlYWs7DQorCQkJY2Fz
ZSAnSic6IE9QU1RBQ0tfUE9QX0JMSU5EOyB0eXBlID0gVExPTkc7IGJyZWFr
Ow0KKwkJCWNhc2UgJ0QnOiBPUFNUQUNLX1BPUF9CTElORDsgdHlwZSA9IFRE
T1VCTEU7IGJyZWFrOw0KKwkJCQkNCisJCQljYXNlICdbJzoNCisJCQljYXNl
ICdMJzoNCisJCQkJdHlwZSA9IChIamF2YV9sYW5nX0NsYXNzKilzaWc7DQor
CQkJCW4gPSBDTEFTU19TSUdTVFI7DQorCQkJCWJyZWFrOw0KKwkJCQkNCisJ
CQlkZWZhdWx0Og0KKwkJCQlEQkcoVkVSSUZZMywgZHByaW50ZigiJXN3ZWly
ZCB0eXBlIHNpZ25hdHVyZTogJXMiLCBpbmRlbnQsIHNpZyk7ICk7DQorCQkJ
CVZFUklGWV9FUlJPUigicHV0e2ZpZWxkL3N0YXRpY306IHVucmVjb2duaXpl
ZCB0eXBlIHNpZ25hdHVyZSIpOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQkJ
DQorCQkJaWYgKCF0eXBlY2hlY2soZWluZm8sIHRoaXMsIHR5cGUsIG4sIE9Q
U1RBQ0tfSVRFTSgxKSwgT1BTVEFDS19JTkZPKDEpKSkgew0KKwkJCQlWRVJJ
RllfRVJST1IoInB1dGZpZWxkOiB0aGluZyBvbiB0b3Agb2Ygc3RhY2sgZG9l
c24ndCBtYXRjaCB3aXRoIEZJRUxEUkVGIHR5cGUiKTsNCisJCQl9DQorCQkJ
T1BTVEFDS19QT1BfQkxJTkQ7DQorCQkJDQorCQkJDQorCQkJbiA9IEZJRUxE
UkVGX0NMQVNTKGlkeCwgcG9vbCk7DQorCQkJaWYgKHBvb2wtPnRhZ3Nbbl0g
PT0gQ09OU1RBTlRfUmVzb2x2ZWRDbGFzcykgew0KKwkJCQl0eXBlID0gQ0xB
U1NfQ0xBU1MobiwgcG9vbCk7DQorCQkJCW4gPSAwOw0KKwkJCX0gZWxzZSB7
DQorCQkJCXR5cGUgPSAoSGphdmFfbGFuZ19DbGFzcyopQ0xBU1NfTkFNRUQo
biwgcG9vbCk7DQorCQkJCW4gPSBDTEFTU19OQU1FU1RSOw0KKwkJCX0NCisJ
CQkNCisJCQlpZiAoIXR5cGVjaGVjayhlaW5mbywgdGhpcywgdHlwZSwgbiwg
T1BTVEFDS19JVEVNKDEpLCBPUFNUQUNLX0lORk8oMSkpKSB7DQorCQkJCVZF
UklGWV9FUlJPUigicHV0ZmllbGQ6IHRoaW5nIG9uIHRvcCBvZiBzdGFjayBk
b2VzIG5vdCB0eXBlIGNoZWNrIHdpdGggRklFTERSRUYgdHlwZSIpOw0KKwkJ
CX0NCisJCQlPUFNUQUNLX1BPUF9CTElORDsNCisJCQlicmVhazsNCisJCQkN
CisJCQkNCisJCWNhc2UgUFVUU1RBVElDOg0KKwkJCUdFVF9XSURYOw0KKwkJ
CXNpZyA9IEZJRUxEUkVGX1NJR0QoaWR4LCBwb29sKTsNCisJCQkNCisJCQlE
QkcoVkVSSUZZMywgZHByaW50ZigiICAgICAgICAgICAgICAgIGZpZWxkIG5h
bWU6OnR5cGU6ICVzOjolc1xuIiwNCisJCQkJCSAgICAgRklFTERSRUZfTkFN
RUQoaWR4LCBwb29sKSwgc2lnKTsgKTsNCisJCQkgICAgDQorCQkJaWYgKE9Q
U1RBQ0tfVE9QID09IFRXSURFKSBuID0gMjsNCisJCQllbHNlICAgICAgICAg
ICAgICAgICAgICAgIG4gPSAxOw0KKwkJCUVOU1VSRV9PUFNUQUNLX1NJWkUo
bik7DQorCQkJDQorCQkJbiA9IDA7DQorCQkJc3dpdGNoICgqc2lnKSB7DQor
CQkJY2FzZSAnSSc6IGNhc2UgJ1onOiBjYXNlICdTJzogY2FzZSAnQic6IGNh
c2UgJ0MnOg0KKwkJCQl0eXBlID0gVElOVDsNCisJCQkJYnJlYWs7DQorCQkJ
CQ0KKwkJCWNhc2UgJ0YnOiB0eXBlID0gVEZMT0FUOyBicmVhazsNCisJCQlj
YXNlICdKJzogT1BTVEFDS19QT1BfQkxJTkQ7IHR5cGUgPSBUTE9ORzsgYnJl
YWs7DQorCQkJY2FzZSAnRCc6IE9QU1RBQ0tfUE9QX0JMSU5EOyB0eXBlID0g
VERPVUJMRTsgYnJlYWs7DQorCQkJCQ0KKwkJCWNhc2UgJ1snOg0KKwkJCWNh
c2UgJ0wnOg0KKwkJCQl0eXBlID0gKEhqYXZhX2xhbmdfQ2xhc3MqKXNpZzsN
CisJCQkJbiA9IENMQVNTX1NJR1NUUjsNCisJCQkJYnJlYWs7DQorCQkJCQ0K
KwkJCWRlZmF1bHQ6DQorCQkJCURCRyhWRVJJRlkzLCBkcHJpbnRmKCIlc3dl
aXJkIHR5cGUgc2lnbmF0dXJlOiAlcyIsIGluZGVudCwgc2lnKTsgKTsNCisJ
CQkJVkVSSUZZX0VSUk9SKCJwdXR7ZmllbGQvc3RhdGljfTogdW5yZWNvZ25p
emVkIHR5cGUgc2lnbmF0dXJlIik7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJ
CQkNCisJCQlpZiAoIXR5cGVjaGVjayhlaW5mbywgdGhpcywgdHlwZSwgbiwg
T1BTVEFDS19JVEVNKDEpLCBPUFNUQUNLX0lORk8oMSkpKSB7DQorCQkJCVZF
UklGWV9FUlJPUigicHV0ZmllbGQ6IHRoaW5nIG9uIHRvcCBvZiBzdGFjayBk
b2Vzbid0IG1hdGNoIHdpdGggRklFTERSRUYgdHlwZSIpOw0KKwkJCX0NCisJ
CQlPUFNUQUNLX1BPUF9CTElORDsNCisJCQlicmVhazsNCisJCQkNCisJCQkN
CisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioNCisJCQkgKiBCUkFOQ0hJTkcgSU5T
VFJVQ1RJT05TLi4uRU5EIE9GIEJBU0lDIEJMT0NLUw0KKwkJCSAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8NCisJCWNhc2UgR09UTzoNCisJCWNhc2UgR09UT19XOg0K
KwkJCWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSBKU1JfVzoNCisJCWNhc2UgSlNS
Og0KKwkJCU9QU1RBQ0tfUFVTSChUQUREUik7DQorCQkJT1BTVEFDS19JTkZP
KDEpID0gcGMgKyBpbnNuTGVuW2NvZGVbcGNdXTsNCisJCQlicmVhazsNCisJ
CWNhc2UgUkVUOg0KKwkJCS8vIHR5cGUgY2hlY2tpbmcgZG9uZSBkdXJpbmcg
bWVyZ2luZyBzdHVmZi4uLg0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSBJ
Rl9BQ01QRVE6DQorCQljYXNlIElGX0FDTVBORToNCisJCQlFTlNVUkVfT1BT
VEFDS19TSVpFKDIpOw0KKwkJCWlmICghaXNSZWZlcmVuY2UoT1BTVEFDS19J
VEVNKDEpLCBPUFNUQUNLX0lORk8oMSkpIHx8DQorCQkJICAgICFpc1JlZmVy
ZW5jZShPUFNUQUNLX0lURU0oMiksIE9QU1RBQ0tfSU5GTygyKSkpIHsNCisJ
CQkJVkVSSUZZX0VSUk9SKCJpZl9hY21wKiB3aGVuIGl0ZW0gb24gdG9wIG9m
IHN0YWNrIGlzIG5vdCBhIHJlZmVyZW5jZSB0eXBlIik7DQorCQkJfQ0KKwkJ
CU9QU1RBQ0tfUE9QX0JMSU5EOw0KKwkJCU9QU1RBQ0tfUE9QX0JMSU5EOw0K
KwkJCWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSBJRl9JQ01QRVE6DQorCQljYXNl
IElGX0lDTVBORToNCisJCWNhc2UgSUZfSUNNUEdUOg0KKwkJY2FzZSBJRl9J
Q01QR0U6DQorCQljYXNlIElGX0lDTVBMVDoNCisJCWNhc2UgSUZfSUNNUExF
Og0KKwkJCU9QU1RBQ0tfUE9QX1QoVElOVCwgMCk7DQorCQljYXNlIElGRVE6
DQorCQljYXNlIElGTkU6DQorCQljYXNlIElGR1Q6DQorCQljYXNlIElGR0U6
DQorCQljYXNlIElGTFQ6DQorCQljYXNlIElGTEU6DQorCQkJT1BTVEFDS19Q
T1BfVChUSU5ULCAwKTsNCisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgSUZO
T05OVUxMOg0KKwkJY2FzZSBJRk5VTEw6DQorCQkJRU5TVVJFX09QU1RBQ0tf
U0laRSgxKTsNCisJCQlpZiAoIWlzUmVmZXJlbmNlKE9QU1RBQ0tfSVRFTSgx
KSwgT1BTVEFDS19JTkZPKDEpKSkgew0KKwkJCQlWRVJJRllfRVJST1IoImlm
W25vbl1udWxsOiB0aGluZyBvbiB0b3Agb2Ygc3RhY2sgaXMgbm90IGEgcmVm
ZXJlbmNlIik7DQorCQkJfQ0KKwkJCU9QU1RBQ0tfUE9QX0JMSU5EOw0KKwkJ
CWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSBMT09LVVBTV0lUQ0g6DQorCQljYXNl
IFRBQkxFU1dJVENIOg0KKwkJCU9QU1RBQ0tfUE9QX1QoVElOVCwgMCk7DQor
CQkJcmV0dXJuKHRydWUpOw0KKwkJCQ0KKwkJCQ0KKwkJCS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKg0KKwkJCSAqIE1FVEhPRCBDQUxMSU5HL1JFVFVSTklORw0KKwkJ
CSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8NCisJCWNhc2UgSU5WT0tFU1RBVElDOg0K
KwkJY2FzZSBJTlZPS0VWSVJUVUFMOg0KKwkJY2FzZSBJTlZPS0VTUEVDSUFM
Og0KKwkJY2FzZSBJTlZPS0VJTlRFUkZBQ0U6DQorCQkJaWYgKGNoZWNrTWV0
aG9kQ2FsbChlaW5mbywgbWV0aG9kLCBibG9jaywgcGMsIHNpZ3MpID09IGZh
bHNlKSB7DQorCQkJCURCRyhWRVJJRlkzLA0KKwkJCQkgICAgZHByaW50Zigi
XG4gICAgICAgICAgICAgICAgc29tZSBwcm9ibGVtIHdpdGggYSBtZXRob2Qg
Y2FsbC4uLmhlcmUncyB0aGUgYmxvY2s6XG4iKTsNCisJCQkJICAgIHByaW50
QmxvY2sobWV0aG9kLCBibG9jaywgIiAgICAgICAgICAgICAgICAiKTsgKTsN
CisJCQkJDQorCQkJCS8vIHByb3BhZ2F0ZSBlcnJvcg0KKwkJCQlWRVJJRllf
RVJST1IoInNvbWUgcHJvYmxlbSB3aXRoIGEgbWV0aG9kIGNhbGwiKTsNCisJ
CQl9DQorCQkJYnJlYWs7DQorCQkJDQorCQkJDQorCQljYXNlIElSRVRVUk46
DQorCQkJT1BTVEFDS19QRUVLX1QoVElOVCwgMCk7DQorCQkJc2lnID0gZ2V0
UmV0dXJuU2lnKG1ldGhvZCk7DQorCQkJaWYgKHN0cmxlbihzaWcpICE9IDEg
fHwgKCpzaWcgIT0gJ0knICYmICpzaWcgIT0gJ1onICYmICpzaWcgIT0gJ1Mn
ICYmICpzaWcgIT0gJ0InICYmICpzaWcgIT0gJ0MnKSkgew0KKwkJCQlWRVJJ
RllfRVJST1IoImlyZXR1cm46IG1ldGhvZCBkb2Vzbid0IHJldHVybiBhbiBp
bnRlZ2VyIik7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJY2FzZSBGUkVUVVJO
Og0KKwkJCU9QU1RBQ0tfUEVFS19UKFRGTE9BVCwgMCk7DQorCQkJc2lnID0g
Z2V0UmV0dXJuU2lnKG1ldGhvZCk7DQorCQkJaWYgKHN0cmNtcChzaWcsICJG
IikpIHsNCisJCQkJVkVSSUZZX0VSUk9SKCJmcmV0dXJuOiBtZXRob2QgZG9l
c24ndCByZXR1cm4gYW4gZmxvYXQiKTsNCisJCQl9DQorCQkJYnJlYWs7DQor
CQljYXNlIExSRVRVUk46DQorCQkJT1BTVEFDS19XUEVFS19UKFRMT05HLCAw
KTsNCisJCQlzaWcgPSBnZXRSZXR1cm5TaWcobWV0aG9kKTsNCisJCQlpZiAo
c3RyY21wKHNpZywgIkoiKSkgew0KKwkJCQlWRVJJRllfRVJST1IoImxyZXR1
cm46IG1ldGhvZCBkb2Vzbid0IHJldHVybiBhIGxvbmciKTsNCisJCQl9DQor
CQkJYnJlYWs7DQorCQljYXNlIERSRVRVUk46DQorCQkJT1BTVEFDS19XUEVF
S19UKFRET1VCTEUsIDApOw0KKwkJCXNpZyA9IGdldFJldHVyblNpZyhtZXRo
b2QpOw0KKwkJCWlmIChzdHJjbXAoc2lnLCAiRCIpKSB7DQorCQkJCVZFUklG
WV9FUlJPUigiZHJldHVybjogbWV0aG9kIGRvZXNuJ3QgcmV0dXJuIGEgZG91
YmxlIik7DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJY2FzZSBSRVRVUk46DQor
CQkJc2lnID0gZ2V0UmV0dXJuU2lnKG1ldGhvZCk7DQorCQkJaWYgKHN0cmNt
cChzaWcsICJWIikpIHsNCisJCQkJVkVSSUZZX0VSUk9SKCJyZXR1cm46IG11
c3QgcmV0dXJuIHNvbWV0aGluZyBpbiBhIG5vbi12b2lkIGZ1bmN0aW9uIik7
DQorCQkJfQ0KKwkJCWJyZWFrOw0KKwkJY2FzZSBBUkVUVVJOOg0KKwkJCUVO
U1VSRV9PUFNUQUNLX1NJWkUoMSk7DQorCQkJc2lnID0gZ2V0UmV0dXJuU2ln
KG1ldGhvZCk7DQorCQkJaWYgKCF0eXBlY2hlY2soZWluZm8sIHRoaXMsIChI
amF2YV9sYW5nX0NsYXNzKilzaWcsIENMQVNTX1NJR1NUUiwgT1BTVEFDS19J
VEVNKDEpLCBPUFNUQUNLX0lORk8oMSkpKSB7DQorCQkJCVZFUklGWV9FUlJP
UigiYXJldHVybjogdG9wIG9mIHN0YWNrIGlzIG5vdCB0eXBlIGNvbXBhdGli
bGUgd2l0aCBtZXRob2QgcmV0dXJuIHR5cGUiKTsNCisJCQl9DQorCQkJYnJl
YWs7DQorCQkJDQorCQljYXNlIEFUSFJPVzoNCisJCQlFTlNVUkVfT1BTVEFD
S19TSVpFKDEpOw0KKwkJCWlmICghdHlwZWNoZWNrKGVpbmZvLCB0aGlzLCBq
YXZhTGFuZ1Rocm93YWJsZSwgMCwgT1BTVEFDS19JVEVNKDEpLCBPUFNUQUNL
X0lORk8oMSkpKSB7DQorCQkJCURCRyhWRVJJRlkzLA0KKwkJCQkgICAgZHBy
aW50ZigiJXNBVEhST1cgZXJyb3I6ICIsIGluZGVudCk7DQorCQkJCSAgICBw
cmludFR5cGUoT1BTVEFDS19JVEVNKDEpLCBPUFNUQUNLX0lORk8oMSkpOw0K
KwkJCQkgICAgZHByaW50ZiAoIlxuIik7ICk7DQorCQkJCVZFUklGWV9FUlJP
UigiYXRocm93OiBvYmplY3Qgb24gdG9wIG9mIHN0YWNrIGlzIG5vdCBhIHN1
YmNsYXNzIG9mIHRocm93YWJsZSIpOw0KKwkJCX0NCisJCQlicmVhazsNCisJ
CQkNCisJCQkNCisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisJCQkgKiBNSVND
DQorCQkJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLw0KKwkJY2FzZSBOT1A6DQorCQkJ
YnJlYWs7DQorCQkJDQorCQkJDQorCQljYXNlIEJSRUFLUE9JTlQ6DQorCQkJ
Ly8gZm9yIGludGVybmFsIHVzZSBvbmx5OiBjYW5ub3QgYXBwZWFyIGluIGEg
Y2xhc3MgZmlsZQ0KKwkJCVZFUklGWV9FUlJPUigiYnJlYWtwb2ludCBpbnN0
cnVjdGlvbiBjYW5ub3QgYXBwZWFyIGluIGNsYXNzZmlsZSIpOw0KKwkJCWJy
ZWFrOw0KKwkJCQ0KKwkJCQ0KKwkJY2FzZSBNT05JVE9SRU5URVI6DQorCQlj
YXNlIE1PTklUT1JFWElUOg0KKwkJCU9QU1RBQ0tfUE9QX1QoVE9CSiwgMCk7
DQorCQkJYnJlYWs7DQorCQkJCQ0KKwkJCQkNCisJCWNhc2UgRFVQOg0KKwkJ
CUVOU1VSRV9PUFNUQUNLX1NJWkUoMSk7DQorCQkJaWYgKE9QU1RBQ0tfVE9Q
ID09IFRXSURFKSB7DQorCQkJCVZFUklGWV9FUlJPUigiY2Fubm90IGR1cCBh
IGxvbmcgb3IgZG91YmxlIik7DQorCQkJfQ0KKwkJCQ0KKwkJCU9QU1RBQ0tf
UFVTSChPUFNUQUNLX1RPUCk7DQorCQkJT1BTVEFDS19JTkZPKDEpID0gT1BT
VEFDS19JTkZPKDIpOw0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSBEVVBf
WDE6DQorCQkJRU5TVVJFX09QU1RBQ0tfU0laRSgyKTsNCisJCQlpZiAoT1BT
VEFDS19UT1AgPT0gVFdJREUgfHwgT1BTVEFDS19JVEVNKDIpID09IFRXSURF
KSB7DQorCQkJCVZFUklGWV9FUlJPUigiZHVwX3gxIHNwbGl0cyB1cCBhIGRv
dWJsZSBvciBsb25nIik7DQorCQkJfQ0KKwkJCQ0KKwkJCU9QU1RBQ0tfUFVT
SChPUFNUQUNLX1RPUCk7DQorCQkJT1BTVEFDS19JTkZPKDEpID0gT1BTVEFD
S19JTkZPKDIpOw0KKwkJCQ0KKwkJCU9QU1RBQ0tfSVRFTSgyKSA9IE9QU1RB
Q0tfSVRFTSgzKTsNCisJCQlPUFNUQUNLX0lORk8oMikgPSBPUFNUQUNLX0lO
Rk8oMyk7DQorDQorCQkJT1BTVEFDS19JVEVNKDMpID0gT1BTVEFDS19JVEVN
KDEpOw0KKwkJCU9QU1RBQ0tfSU5GTygzKSA9IE9QU1RBQ0tfSU5GTygxKTsN
CisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgRFVQX1gyOg0KKwkJCUVOU1VS
RV9PUFNUQUNLX1NJWkUoMyk7DQorCQkJaWYgKE9QU1RBQ0tfVE9QID09IFRX
SURFKSB7DQorCQkJCVZFUklGWV9FUlJPUigiY2Fubm90IGR1cF94MiB3aGVu
IHRvcCBpdGVtIG9uIG9wZXJhbmQgc3RhY2sgaXMgYSB0d28gYnl0ZSBpdGVt
Iik7DQorCQkJfQ0KKwkJCQ0KKwkJCU9QU1RBQ0tfUFVTSChPUFNUQUNLX1RP
UCk7DQorCQkJT1BTVEFDS19JTkZPKDEpID0gT1BTVEFDS19JTkZPKDIpOw0K
KwkJCQ0KKwkJCU9QU1RBQ0tfSVRFTSgyKSA9IE9QU1RBQ0tfSVRFTSgzKTsN
CisJCQlPUFNUQUNLX0lORk8oMikgPSBPUFNUQUNLX0lORk8oMyk7DQorCQkJ
DQorCQkJT1BTVEFDS19JVEVNKDMpID0gT1BTVEFDS19JVEVNKDQpOw0KKwkJ
CU9QU1RBQ0tfSU5GTygzKSA9IE9QU1RBQ0tfSU5GTyg0KTsNCisJCQkNCisJ
CQlPUFNUQUNLX0lURU0oNCkgPSBPUFNUQUNLX0lURU0oMSk7DQorCQkJT1BT
VEFDS19JTkZPKDQpID0gT1BTVEFDS19JTkZPKDEpOw0KKwkJCWJyZWFrOw0K
KwkJCQ0KKwkJY2FzZSBEVVAyOg0KKwkJCWlmIChibG9jay0+c3RhY2tzeiA8
IDIpIHsNCisJCQkJVkVSSUZZX0VSUk9SKCJkdXAyIHdpdGggPCAyIGJ5dGVz
IG9uIG9wZXJhbmQgc3RhY2siKTsNCisJCQl9DQorCQkJDQorCQkJT1BTVEFD
S19QVVNIKE9QU1RBQ0tfV1RPUCk7DQorCQkJT1BTVEFDS19QVVNIKE9QU1RB
Q0tfV1RPUCk7DQorCQkJDQorCQkJT1BTVEFDS19JTkZPKDEpID0gT1BTVEFD
S19JTkZPKDMpOw0KKwkJCU9QU1RBQ0tfSU5GTygyKSA9IE9QU1RBQ0tfSU5G
Tyg0KTsNCisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgRFVQMl9YMToNCisJ
CQlFTlNVUkVfT1BTVEFDS19TSVpFKDIpOw0KKwkJCWlmIChPUFNUQUNLX1dU
T1AgPT0gVFdJREUpIHsNCisJCQkJVkVSSUZZX0VSUk9SKCJkdXBfeDEgcmVx
dWlyZXMgdG9wIDIgYnl0ZXMgb24gb3BlcmFuZCBzdGFjayB0byBiZSBzaW5n
bGUgYnl0ZXMgaXRlbXMiKTsNCisJCQl9DQorCQkJDQorCQkJQ0hFQ0tfU1RB
Q0tfT1ZFUkZMT1coMik7DQorCQkJDQorCQkJT1BTVEFDS19QVVNIX0JMSU5E
KE9QU1RBQ0tfSVRFTSgyKSk7DQorCQkJT1BTVEFDS19QVVNIX0JMSU5EKE9Q
U1RBQ0tfSVRFTSgyKSk7DQorCQkJDQorCQkJT1BTVEFDS19JTkZPKDEpID0g
T1BTVEFDS19JTkZPKDMpOw0KKwkJCU9QU1RBQ0tfSU5GTygyKSA9IE9QU1RB
Q0tfSU5GTyg0KTsNCisJCQkNCisJCQlPUFNUQUNLX0lURU0oMykgPSBPUFNU
QUNLX0lURU0oNSk7DQorCQkJT1BTVEFDS19JTkZPKDMpID0gT1BTVEFDS19J
TkZPKDUpOw0KKw0KKwkJCU9QU1RBQ0tfSVRFTSg0KSA9IE9QU1RBQ0tfSVRF
TSgxKTsNCisJCQlPUFNUQUNLX0lORk8oNCkgPSBPUFNUQUNLX0lORk8oMSk7
DQorCQkJDQorCQkJT1BTVEFDS19JVEVNKDUpID0gT1BTVEFDS19JVEVNKDIp
Ow0KKwkJCU9QU1RBQ0tfSU5GTyg1KSA9IE9QU1RBQ0tfSU5GTygyKTsNCisJ
CQlicmVhazsNCisJCQkNCisJCWNhc2UgRFVQMl9YMjoNCisJCQlFTlNVUkVf
T1BTVEFDS19TSVpFKDQpOw0KKwkJCWlmIChPUFNUQUNLX1dUT1AgPT0gVFdJ
REUgfHwgT1BTVEFDS19JVEVNKDQpID09IFRXSURFKSB7DQorCQkJCVZFUklG
WV9FUlJPUigiZHVwMl94MiB3aGVyZSBlaXRoZXIgMm5kIG9yIDR0aCBieXRl
IGlzIDJuZCBoYWxmIG9mIGEgMiBieXRlIGl0ZW0iKTsNCisJCQl9DQorCQkJ
DQorCQkJQ0hFQ0tfU1RBQ0tfT1ZFUkZMT1coMik7DQorCQkJDQorCQkJT1BT
VEFDS19QVVNIX0JMSU5EKE9QU1RBQ0tfSVRFTSgyKSk7DQorCQkJT1BTVEFD
S19QVVNIX0JMSU5EKE9QU1RBQ0tfSVRFTSgyKSk7DQorCQkJDQorCQkJT1BT
VEFDS19JTkZPKDEpID0gT1BTVEFDS19JTkZPKDMpOw0KKwkJCU9QU1RBQ0tf
SU5GTygyKSA9IE9QU1RBQ0tfSU5GTyg0KTsNCisJCQkNCisJCQlPUFNUQUNL
X0lURU0oMykgPSBPUFNUQUNLX0lURU0oNSk7DQorCQkJT1BTVEFDS19JTkZP
KDMpID0gT1BTVEFDS19JTkZPKDUpOw0KKwkJCQ0KKwkJCU9QU1RBQ0tfSVRF
TSg0KSA9IE9QU1RBQ0tfSVRFTSg2KTsNCisJCQlPUFNUQUNLX0lORk8oNCkg
PSBPUFNUQUNLX0lORk8oNik7DQorCQkJDQorCQkJT1BTVEFDS19JVEVNKDUp
ID0gT1BTVEFDS19JVEVNKDEpOw0KKwkJCU9QU1RBQ0tfSU5GTyg1KSA9IE9Q
U1RBQ0tfSU5GTygxKTsNCisJCQkNCisJCQlPUFNUQUNLX0lURU0oNikgPSBP
UFNUQUNLX0lURU0oMik7DQorCQkJT1BTVEFDS19JTkZPKDYpID0gT1BTVEFD
S19JTkZPKDIpOw0KKwkJCWJyZWFrOw0KKwkJCQ0KKwkJCQ0KKwkJY2FzZSBT
V0FQOg0KKwkJCWlmIChibG9jay0+c3RhY2tzeiA8IDIpIHsNCisJCQkJVkVS
SUZZX0VSUk9SKCJzd2FwIHdpdGggPCAyIGJ5dGVzIG9uIG9wZXJhbmQgc3Rh
Y2siKTsNCisJCQl9IGVsc2UgaWYgKE9QU1RBQ0tfVE9QID09IFRXSURFIHx8
IE9QU1RBQ0tfSVRFTSgyKSA9PSBUV0lERSkgew0KKwkJCQlWRVJJRllfRVJS
T1IoImNhbm5vdCBzd2FwIDIgYnl0ZXMgb2YgYSBsb25nIG9yIGRvdWJsZSIp
Ow0KKwkJCX0NCisJCQkNCisJCQl0eXBlICAgICAgICAgPSBPUFNUQUNLX1RP
UDsNCisJCQlPUFNUQUNLX1RPUCAgPSBPUFNUQUNLX1dUT1A7DQorCQkJT1BT
VEFDS19XVE9QID0gdHlwZTsNCisJCQkNCisJCQluID0gT1BTVEFDS19JTkZP
KDEpOw0KKwkJCU9QU1RBQ0tfSU5GTygxKSA9IE9QU1RBQ0tfSU5GTygyKTsN
CisJCQlPUFNUQUNLX0lORk8oMikgPSBuOw0KKwkJCWJyZWFrOw0KKwkJCQ0K
KwkJCQ0KKwkJY2FzZSBXSURFOg0KKwkJCXdpZGUgPSB0cnVlOw0KKwkJCXBj
ID0gaW5zbkxlbltjb2RlW3BjXV07DQorCQkJY29udGludWU7DQorCQkJDQor
CQlkZWZhdWx0Og0KKwkJCS8vIHNob3VsZCBuZXZlciBnZXQgaGVyZSBiZWNh
dXNlIG9mIHByZXByb2Nlc3NpbmcgaW4gZGVmaW5lQmFzaWNCbG9ja3MoKQ0K
KwkJCVZFUklGWV9FUlJPUigidW5rbm93biBvcGNvZGUgZW5jb3VudGVyZWQi
KTsNCisJCX0NCisJCQ0KKwkJDQorCQlwYyArPSBpbnNuTGVuW2NvZGVbcGNd
XTsNCisJCWlmICh3aWRlID09IHRydWUpIHsNCisJCQl3aWRlID0gZmFsc2U7
DQorCQkJcGMrKzsNCisJCX0NCisJfQ0KKwkJDQorCQ0KKwkvLyBTVUNDRVNT
IQ0KKwlyZXR1cm4odHJ1ZSk7DQorCQ0KKwkNCisjdW5kZWYgT1BTVEFDS19X
UE9QX1QNCisjdW5kZWYgT1BTVEFDS19QT1BfVA0KKyN1bmRlZiBPUFNUQUNL
X1BPUA0KKyN1bmRlZiBPUFNUQUNLX1dQT1ANCisjdW5kZWYgT1BTVEFDS19Q
T1BfTg0KKyN1bmRlZiBPUFNUQUNLX1BPUF9OX0JMSU5EDQorI3VuZGVmIE9Q
U1RBQ0tfV1BPUF9CTElORA0KKyN1bmRlZiBPUFNUQUNLX1BPUF9CTElORA0K
Kw0KKyN1bmRlZiBPUFNUQUNLX1dQRUVLX1QNCisjdW5kZWYgT1BTVEFDS19Q
RUVLX1QNCisNCisjdW5kZWYgRU1QVFlfU1RBQ0tfRVJST1INCisJDQorI3Vu
ZGVmIE9QU1RBQ0tfV1BVU0gNCisjdW5kZWYgT1BTVEFDS19QVVNIDQorI3Vu
ZGVmIE9QU1RBQ0tfUFVTSF9JTkZPDQorI3VuZGVmIE9QU1RBQ0tfV1BVU0hf
QkxJTkQNCisjdW5kZWYgT1BTVEFDS19QVVNIX0JMSU5EDQorI3VuZGVmIE9Q
U1RBQ0tfUFVTSF9CTElORF9JTkZPDQorDQorI3VuZGVmIENIRUNLX1NUQUNL
X09WRVJGTE9XDQorI3VuZGVmIENIRUNLX1NUQUNLX1VOREVSRkxPVw0KKw0K
KyN1bmRlZiBPUFNUQUNLX0lURU0NCisjdW5kZWYgT1BTVEFDS19UT1ANCisj
dW5kZWYgT1BTVEFDS19XVE9QDQorDQorI3VuZGVmIE9QU1RBQ0tfSU5GTw0K
KyN1bmRlZiBMT0NBTFNfSU5GTw0KKw0KKyN1bmRlZiBFTlNVUkVfTE9DQUxf
VFlQRQ0KKw0KKyN1bmRlZiBWRVJJRllfRVJST1INCit9DQorDQorDQorLyog
DQorICogcGFyc2VzIHRoZSBuZXh0IGFyZ3VtZW50IGZyb20gc2lnIGludG8g
YnVmLCByZXR1cm5pbmcgcG9pbnRlciBiZXlvbmQgYXJnLg0KKyAqLw0KK3N0
YXRpYw0KK2NvbnN0IGNoYXIqDQorZ2V0TmV4dEFyZyhjb25zdCBjaGFyKiBz
aWcsIGNoYXIqIGJ1ZikNCit7DQorCWNvbnN0IGNoYXIqIGFmdGVyU2lnOw0K
KwkNCisJaWYgKCpzaWcgPT0gJyknKSB7DQorCQlidWZbMF0gPSAnKSc7DQor
CQlidWZbMV0gPSAnXDAnOw0KKwkJcmV0dXJuIHNpZzsNCisJfQ0KKwkvLyBw
YXJzZUZpZWxkVHlwZURlc2NyaXB0b3IgZG9lc24ndCBkZWFsIHdpdGggdm9p
ZCBzaWduYXR1cmVzDQorCWVsc2UgaWYgKCpzaWcgPT0gJ1YnKSB7DQorCQli
dWZbMF0gPSAnVic7DQorCQlidWZbMV0gPSAnXDAnOw0KKwkJc2lnKys7DQor
CQlyZXR1cm4gc2lnOw0KKwl9DQorCQ0KKwlmb3IgKGFmdGVyU2lnID0gcGFy
c2VGaWVsZFR5cGVEZXNjcmlwdG9yKHNpZyk7DQorCSAgICAgc2lnIDwgYWZ0
ZXJTaWc7DQorCSAgICAgc2lnKyssIGJ1ZisrKSB7DQorCQkqYnVmID0gKnNp
ZzsNCisJfQ0KKwkNCisJKmJ1ZiA9ICdcMCc7DQorCQ0KKwlyZXR1cm4gYWZ0
ZXJTaWc7DQorfQ0KKw0KKw0KKy8qDQorICogY291bnRTaXplT2ZBcmdzSW5T
aWduYXR1cmUoKQ0KKyAqICAgIExvbmdzICYgRG91YmxlIGNvdW50IGZvciAy
LCBhbGwgZWxzZSBjb3VudHMgZm9yIG9uZS4NCisgKi8NCitzdGF0aWMNCit1
aW50MzINCitjb3VudFNpemVPZkFyZ3NJblNpZ25hdHVyZShjb25zdCBjaGFy
KiBzaWcpDQorew0KKwl1aW50MzIgY291bnQgPSAwOw0KKwkNCisJZm9yIChz
aWcrKzsgKnNpZyAhPSAnKSc7IHNpZyA9IHBhcnNlRmllbGRUeXBlRGVzY3Jp
cHRvcihzaWcpKSB7DQorCQlpZiAoKnNpZyA9PSAnSicgfHwgKnNpZyA9PSAn
RCcpDQorCQkJY291bnQgKz0gMjsNCisJCWVsc2UNCisJCQljb3VudCsrOw0K
Kwl9DQorCQ0KKwlyZXR1cm4gY291bnQ7DQorfQ0KKw0KKw0KKy8qIA0KKyAq
IGNoZWNrTWV0aG9kQ2FsbCgpDQorICogICAgdmVyaWZ5IGFuIGludm9rZSBp
bnN0cnVjdGlvbi4gIHRoaXMgaW5jbHVkZXMgbWFraW5nIHN1cmUgdGhhdCB0
aGUgdHlwZXMNCisgKiAgICBvbiB0aGUgb3BlcmFuZCBzdGFjayBhcmUgdHlw
ZSBjb21wYXRpYmxlIHdpdGggdGhvc2UgZXhwZWN0ZWQgYnkgdGhlIG1ldGhv
ZA0KKyAqICAgIGJlaW5nIGNhbGxlZC4NCisgKg0KKyAqICAgIG5vdGU6IHdl
IGRvbid0IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjbGFzcyBiZWlu
ZyByZWZlcmVuY2VkIGJ5IHRoZQ0KKyAqICAgICAgICAgIG1ldGhvZCBjYWxs
IGFjdHVhbGx5IGhhcyB0aGUgbWV0aG9kLCBvciB0aGF0IHdlIGhhdmUgcGVy
bWlzc2lvbiB0bw0KKyAqICAgICAgICAgIGFjY2VzcyBpdCwgYXMgdGhvc2Ug
Y2hlY2tzIGFyZSBkZWZlcnJlZCB1bnRpbCBwYXNzIDQuDQorICoNCisgKiBy
ZXR1cm5zIHdoZXRoZXIgdGhlIG1ldGhvZCdzIGFyZ3VtZW50cyB0eXBlIGNo
ZWNrIGNvcnJlY3RseS4NCisgKiBpdCBhbHNvIHB1c2hlcyB0aGUgcmV0dXJu
IHR5cGUgb250byBiaW5mbydzIG9wZXJhbmQgc3RhY2suDQorICovDQorc3Rh
dGljDQorYm9vbA0KK2NoZWNrTWV0aG9kQ2FsbChlcnJvckluZm8qIGVpbmZv
LCBjb25zdCBNZXRob2QqIG1ldGhvZCwgQmxvY2tJbmZvKiBiaW5mbywgdWlu
dDMyIHBjLCBTaWdTdGFjayoqIHNpZ3MpDQorew0KKyNkZWZpbmUgVkVSSUZZ
X0VSUk9SKF9NU0cpIFwNCisJS0ZSRUUoYXJnYnVmKTsgXA0KKwlEQkcoVkVS
SUZZMywgZHByaW50ZigiICAgICAgICAgICAgICAgIGVycm9yIHdpdGggbWV0
aG9kIGludm9jYXRpb24sIHBjID0gJWQsIG1ldGhvZCA9ICVzJXNcbiIsIFwN
CisJCQkgICAgIHBjLCBNRVRIT0RSRUZfTkFNRUQoaWR4LCBwb29sKSwgbWV0
aFNpZyk7ICk7IFwNCisJaWYgKGVpbmZvLT50eXBlID09IDApIHsgXA0KKwkJ
cG9zdEV4Y2VwdGlvbk1lc3NhZ2UoZWluZm8sIEpBVkFfTEFORyhWZXJpZnlF
cnJvciksIFwNCisJCQkJICAgICAiaW4gbWV0aG9kIFwiJXMuJXNcIjogJXMi
LCBcDQorCQkJCSAgICAgQ0xBU1NfQ05BTUUobWV0aG9kLT5jbGFzcyksIE1F
VEhPRF9OQU1FRChtZXRob2QpLCBfTVNHKTsgXA0KKwl9IFwNCisJcmV0dXJu
KGZhbHNlKQ0KKwkNCisjZGVmaW5lIFRZUEVfRVJST1IgVkVSSUZZX0VSUk9S
KCJwYXJhbWV0ZXJzIGZhaWwgdHlwZSBjaGVja2luZyBpbiBtZXRob2QgaW52
b2NhdGlvbiIpDQorCQ0KKwljb25zdCB1bnNpZ25lZCBjaGFyKiBjb2RlICAg
ICAgICA9IE1FVEhPRF9CWVRFQ09ERV9DT0RFKG1ldGhvZCk7DQorCWNvbnN0
IHVpbnQzMiBvcGNvZGUgICAgICAgICAgICAgID0gY29kZVtwY107DQorCQ0K
Kwljb25zdCBjb25zdGFudHMqIHBvb2wgICAgICAgICAgICA9IENMQVNTX0NP
TlNUQU5UUyhtZXRob2QtPmNsYXNzKTsNCisJY29uc3QgdWludDMyIGlkeCAg
ICAgICAgICAgICAgICAgPSBXT1JEKGNvZGUsIHBjICsgMSk7DQorCQkJCSAg
IAkJCQkgDQorCWNvbnN0IHVpbnQzMiBjbGFzc0lkeCAgICAgICAgICAgID0g
TUVUSE9EUkVGX0NMQVNTKGlkeCwgcG9vbCk7DQorCUhqYXZhX2xhbmdfQ2xh
c3MqIG1ldGhvZFJlZkNsYXNzID0gTlVMTDsNCisJSGphdmFfbGFuZ19DbGFz
cyogcmVjZWl2ZXIgICAgICAgPSBOVUxMOw0KKwkNCisJY29uc3QgY2hhciog
bWV0aFNpZyAgICAgICAgICAgICAgPSBNRVRIT0RSRUZfU0lHRChpZHgsIHBv
b2wpOw0KKwljb25zdCBjaGFyKiBzaWcgICAgICAgICAgICAgICAgICA9IG1l
dGhTaWc7DQorCXVpbnQzMiBuYXJncyAgICAgICAgICAgICAgICAgICAgID0g
Y291bnRTaXplT2ZBcmdzSW5TaWduYXR1cmUoc2lnKTsNCisJDQorCXVpbnQz
MiBwYXJhbUluZGV4ICAgICAgICAgICAgICAgID0gMDsNCisJY2hhciogYXJn
YnVmICAgICAgICAgICAgICAgICAgICAgPSBjaGVja1B0cihLTUFMTE9DKHN0
cmxlbihzaWcpICogc2l6ZW9mKGNoYXIpKSk7DQorCQ0KKwkNCisJREJHKFZF
UklGWTMsIGRwcmludGYoIiAgICAgICAgICAgICAgICBjYWxsaW5nIG1ldGhv
ZCAlcyVzXG4iLCBNRVRIT0RSRUZfTkFNRUQoaWR4LCBwb29sKSwgc2lnKTsg
KTsNCisJDQorCQ0KKwlpZiAobmFyZ3MgPiBiaW5mby0+c3RhY2tzeikgew0K
KwkJVkVSSUZZX0VSUk9SKCJub3QgZW5vdWdoIHN0dWZmIG9uIG9wc3RhY2sg
Zm9yIG1ldGhvZCBpbnZvY2F0aW9uIik7DQorCX0NCisJDQorCQ0KKwkvLyBt
YWtlIHN1cmUgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgdHlwZSBjb21wYXRpYmxl
IHdpdGggdGhlIGNsYXNzIGJlaW5nIGludm9rZWQNCisJaWYgKG9wY29kZSAh
PSBJTlZPS0VTVEFUSUMpIHsNCisJCWNvbnN0IHVpbnQzMiByZWNlaXZlcklk
eCAgPSBiaW5mby0+c3RhY2tzeiAtIChuYXJncyArIDEpOw0KKwkJY29uc3Qg
dWludDMyIHJlY2VpdmVySW5mbyA9IGJpbmZvLT5vcHN0YWNrX2luZm9bcmVj
ZWl2ZXJJZHhdOw0KKwkJcmVjZWl2ZXIgPSBiaW5mby0+b3BzdGFja1tyZWNl
aXZlcklkeF07DQorCQkNCisJCWlmIChuYXJncyA9PSBiaW5mby0+c3RhY2tz
eikgew0KKwkJCVZFUklGWV9FUlJPUigibm90IGVub3VnaCBzdHVmZiBvbiBv
cHN0YWNrIGZvciBtZXRob2QgaW52b2NhdGlvbiIpOw0KKwkJfQ0KKwkJDQor
CQlpZiAoIWlzUmVmZXJlbmNlKHJlY2VpdmVyLCByZWNlaXZlckluZm8pKSB7
DQorCQkJVkVSSUZZX0VSUk9SKCJpbnZva2luZyBhIG1ldGhvZCBvbiBzb21l
dGhpbmcgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UiKTsNCisJCX0NCisJCQ0K
KwkJaWYgKHBvb2wtPnRhZ3NbY2xhc3NJZHhdID09IENPTlNUQU5UX0NsYXNz
KSB7DQorCQkJLy8gdW5yZXNvbHZlZCBjbGFzcy4uLg0KKwkJCVV0ZjhDb25z
dCogbmFtZSA9IFdPUkQyVVRGKHBvb2wtPmRhdGFbY2xhc3NJZHhdKTsNCisJ
CQkNCisJCQlpZiAoIXR5cGVjaGVjayhlaW5mbywgbWV0aG9kLT5jbGFzcywg
KEhqYXZhX2xhbmdfQ2xhc3MqKShuYW1lLT5kYXRhKSwgQ0xBU1NfTkFNRVNU
UiwgcmVjZWl2ZXIsIHJlY2VpdmVySW5mbykpIHsNCisJCQkJREJHKFZFUklG
WTMsDQorCQkJCSAgICBkcHJpbnRmKCIlc3JlcXVpcmVkIHJlY2VpdmVyIHR5
cGU6ICIsIGluZGVudCk7DQorCQkJCSAgICBwcmludFR5cGUoKEhqYXZhX2xh
bmdfQ2xhc3MqKShuYW1lLT5kYXRhKSwgQ0xBU1NfTkFNRVNUUik7DQorCQkJ
CSAgICBkcHJpbnRmKCJcbiVzYWN0dWFsICAgcmVjZWl2ZXIgdHlwZTogIiwg
aW5kZW50KTsNCisJCQkJICAgIHByaW50VHlwZShyZWNlaXZlciwgcmVjZWl2
ZXJJbmZvKTsNCisJCQkJICAgIGRwcmludGYoIlxuIik7DQorCQkJCSAgICAp
Ow0KKwkJCQkNCisJCQkJVkVSSUZZX0VSUk9SKCJleHBlY3RlZCBtZXRob2Qg
cmVjZWl2ZXIgZG9lcyBub3QgdHlwZWNoZWNrIHdpdGggb2JqZWN0IG9uIG9w
ZXJhbmQgc3RhY2siKTsNCisJCQl9DQorCQl9IGVsc2Ugew0KKwkJCS8vIHJl
c29sdmVkIGNsYXNzLi4udmVyaWZ5MiBndWFyYW50ZWVzIHRoaXMNCisJCQlt
ZXRob2RSZWZDbGFzcyA9IENMQVNTX0NMQVNTKGNsYXNzSWR4LCBwb29sKTsN
CisJCQkNCisJCQlpZiAoIXR5cGVjaGVjayhlaW5mbywgbWV0aG9kLT5jbGFz
cywgbWV0aG9kUmVmQ2xhc3MsIDAsIHJlY2VpdmVyLCByZWNlaXZlckluZm8p
KSB7DQorCQkJCVZFUklGWV9FUlJPUigiZXhwZWN0ZWQgbWV0aG9kIHJlY2Vp
dmVyIGRvZXMgbm90IHR5cGVjaGVjayB3aXRoIG9iamVjdCBvbiBvcGVyYW5k
IHN0YWNrIik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQ0KKwkNCisJLy8gaGVy
ZSB3ZSB1c2UgcGFyYW1JbmRleCB0byByZXByZXNlbnQgd2hpY2ggcGFyYW1l
dGVyIHdlJ3JlIGN1cnJlbnRseSBjb25zaWRlcmluZy4NCisJLy8gcmVtZW1i
ZXIsIHdoZW4gd2UgY2FsbCBhIG1ldGhvZCwgdGhlIGZpcnN0IHBhcmFtZXRl
ciBpcyBkZWVwZXN0IGluIHRoZSBzdGFjaywNCisJLy8gc28gd2hlbiB3ZSB0
cmF2ZXJzZSB0aGUgcGFyYW1ldGVyIGxpc3QgaW4gdGhlIG1ldGhvZCBzaWdu
YXR1cmUgd2UgaGF2ZSB0byBsb29rDQorCS8vIGZyb20gdGhlIGJvdHRvbSB1
cC4NCisJcGFyYW1JbmRleCA9IGJpbmZvLT5zdGFja3N6IC0gbmFyZ3M7DQor
CWZvciAoc2lnID0gZ2V0TmV4dEFyZyhzaWcgKyAxLCBhcmdidWYpOyAqYXJn
YnVmICE9ICcpJzsgc2lnID0gZ2V0TmV4dEFyZyhzaWcsIGFyZ2J1ZikpIHsN
CisJCQ0KKwkJaWYgKHBhcmFtSW5kZXggPj0gYmluZm8tPnN0YWNrc3opIHsN
CisJCQlLRlJFRShhcmdidWYpOw0KKwkJCVZFUklGWV9FUlJPUigiZXJyb3I6
IG5vdCBlbm91Z2ggcGFyYW1ldGVycyBvbiBzdGFjayBmb3IgbWV0aG9kIGlu
dm9jYXRpb24iKTsNCisJCX0NCisJCQ0KKwkJDQorCQlzd2l0Y2ggKCphcmdi
dWYpIHsNCisJCWNhc2UgJ1snOg0KKwkJY2FzZSAnTCc6DQorCQkJaWYgKCF0
eXBlY2hlY2soZWluZm8sIG1ldGhvZC0+Y2xhc3MsDQorCQkJCSAgICAgICAo
SGphdmFfbGFuZ19DbGFzcyopYXJnYnVmLCBDTEFTU19TSUdTVFIsDQorCQkJ
CSAgICAgICBiaW5mby0+b3BzdGFja1twYXJhbUluZGV4XSwgYmluZm8tPm9w
c3RhY2tfaW5mb1twYXJhbUluZGV4XSkpIHsNCisJCQkJDQorCQkJCVRZUEVf
RVJST1I7DQorCQkJfQ0KKwkJCQ0KKwkJCWJpbmZvLT5vcHN0YWNrW3BhcmFt
SW5kZXhdICAgICAgPSBUVU5TVEFCTEU7DQorCQkJYmluZm8tPm9wc3RhY2tf
aW5mb1twYXJhbUluZGV4XSA9IDA7DQorCQkJcGFyYW1JbmRleCsrOw0KKwkJ
CWJyZWFrOw0KKwkJCQ0KKwkJY2FzZSAnWic6IGNhc2UgJ1MnOiBjYXNlICdC
JzogY2FzZSAnQyc6DQorCQljYXNlICdJJzoNCisJCQlpZiAoYmluZm8tPm9w
c3RhY2tbcGFyYW1JbmRleF0gIT0gVElOVCkgew0KKwkJCQlUWVBFX0VSUk9S
Ow0KKwkJCX0NCisJCQkNCisJCQliaW5mby0+b3BzdGFja1twYXJhbUluZGV4
XSA9IFRVTlNUQUJMRTsNCisJCQliaW5mby0+b3BzdGFja19pbmZvW3BhcmFt
SW5kZXhdID0gMDsNCisJCQlwYXJhbUluZGV4Kys7DQorCQkJYnJlYWs7DQor
CQkJDQorCQljYXNlICdGJzoNCisJCQlpZiAoYmluZm8tPm9wc3RhY2tbcGFy
YW1JbmRleF0gIT0gVEZMT0FUKSB7DQorCQkJCVRZUEVfRVJST1I7DQorCQkJ
fQ0KKwkJCQ0KKwkJCWJpbmZvLT5vcHN0YWNrW3BhcmFtSW5kZXhdID0gVFVO
U1RBQkxFOw0KKwkJCWJpbmZvLT5vcHN0YWNrX2luZm9bcGFyYW1JbmRleF0g
PSAwOw0KKwkJCXBhcmFtSW5kZXgrKzsNCisJCQlicmVhazsNCisJCQkNCisJ
CWNhc2UgJ0onOg0KKwkJCWlmIChiaW5mby0+b3BzdGFja1twYXJhbUluZGV4
XSAgICAgIT0gVExPTkcgfHwNCisJCQkgICAgYmluZm8tPm9wc3RhY2tbcGFy
YW1JbmRleCArIDFdICE9IFRXSURFKSB7DQorCQkJCVRZUEVfRVJST1I7DQor
CQkJfQ0KKwkJCQ0KKwkJCWJpbmZvLT5vcHN0YWNrW3BhcmFtSW5kZXhdICAg
PSBUVU5TVEFCTEU7DQorCQkJYmluZm8tPm9wc3RhY2tfaW5mb1twYXJhbUlu
ZGV4XSA9IDA7DQorCQkJYmluZm8tPm9wc3RhY2tbcGFyYW1JbmRleCsxXSA9
IFRVTlNUQUJMRTsNCisJCQliaW5mby0+b3BzdGFja19pbmZvW3BhcmFtSW5k
ZXgrMV0gPSAwOw0KKwkJCXBhcmFtSW5kZXggKz0gMjsNCisJCQlicmVhazsN
CisJCQkNCisJCWNhc2UgJ0QnOg0KKwkJCWlmIChiaW5mby0+b3BzdGFja1tw
YXJhbUluZGV4XSAgICAgIT0gVERPVUJMRSB8fA0KKwkJCSAgICBiaW5mby0+
b3BzdGFja1twYXJhbUluZGV4ICsgMV0gIT0gVFdJREUpIHsNCisJCQkJVFlQ
RV9FUlJPUjsNCisJCQl9DQorCQkJDQorCQkJYmluZm8tPm9wc3RhY2tbcGFy
YW1JbmRleF0gICA9IFRVTlNUQUJMRTsNCisJCQliaW5mby0+b3BzdGFja19p
bmZvW3BhcmFtSW5kZXhdID0gMDsNCisJCQliaW5mby0+b3BzdGFja1twYXJh
bUluZGV4KzFdID0gVFVOU1RBQkxFOw0KKwkJCWJpbmZvLT5vcHN0YWNrX2lu
Zm9bcGFyYW1JbmRleCsxXSA9IDA7DQorCQkJcGFyYW1JbmRleCArPSAyOw0K
KwkJCWJyZWFrOw0KKwkJCQ0KKwkJZGVmYXVsdDoNCisJCQlUWVBFX0VSUk9S
Ow0KKwkJfQ0KKwl9DQorCWJpbmZvLT5zdGFja3N6IC09IG5hcmdzOw0KKwkN
CisJDQorCWlmIChvcGNvZGUgIT0gSU5WT0tFU1RBVElDKSB7DQorCQkvLyBw
b3Agb2JqZWN0IHJlZmVyZW5jZSBvZmYgdGhlIHN0YWNrDQorCQliaW5mby0+
c3RhY2tzeiAtPSAxOw0KKwkJYmluZm8tPm9wc3RhY2tbYmluZm8tPnN0YWNr
c3pdID0gVFVOU1RBQkxFOw0KKwkJYmluZm8tPm9wc3RhY2tfaW5mb1tiaW5m
by0+c3RhY2tzel0gPSAwOw0KKwl9DQorCQ0KKwkNCisJLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqDQorCSAqIFByb2Nlc3MgUmV0dXJuIFR5cGUNCisJICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLw0KKwlzaWcrKzsNCisJc2lnID0gZ2V0TmV4dEFyZyhzaWcs
IGFyZ2J1Zik7DQorCXN3aXRjaCAoKmFyZ2J1Zikgew0KKwljYXNlICdaJzog
Y2FzZSAnUyc6IGNhc2UgJ0InOiBjYXNlICdDJzoNCisJY2FzZSAnSSc6DQor
CQliaW5mby0+b3BzdGFja1tiaW5mby0+c3RhY2tzel0gPSBUSU5UOw0KKwkJ
YmluZm8tPm9wc3RhY2tfaW5mb1tiaW5mby0+c3RhY2tzel0gPSAwOw0KKwkJ
YmluZm8tPnN0YWNrc3orKzsNCisJCWJyZWFrOw0KKwkJDQorCWNhc2UgJ0Yn
Og0KKwkJYmluZm8tPm9wc3RhY2tbYmluZm8tPnN0YWNrc3pdICAgICAgPSBU
RkxPQVQ7DQorCQliaW5mby0+b3BzdGFja19pbmZvW2JpbmZvLT5zdGFja3N6
XSA9IDA7DQorCQliaW5mby0+c3RhY2tzeisrOw0KKwkJYnJlYWs7DQorCQkN
CisJY2FzZSAnSic6DQorCQliaW5mby0+b3BzdGFja1tiaW5mby0+c3RhY2tz
el0gICAgICAgICAgPSBUTE9ORzsNCisJCWJpbmZvLT5vcHN0YWNrX2luZm9b
YmluZm8tPnN0YWNrc3pdICAgICA9IDA7DQorCQliaW5mby0+b3BzdGFja1ti
aW5mby0+c3RhY2tzeiArIDFdICAgICAgPSBUV0lERTsNCisJCWJpbmZvLT5v
cHN0YWNrX2luZm9bYmluZm8tPnN0YWNrc3ogKyAxXSA9IDA7DQorCQliaW5m
by0+c3RhY2tzeiArPSAyOw0KKwkJYnJlYWs7DQorCQkNCisJY2FzZSAnRCc6
DQorCQliaW5mby0+b3BzdGFja1tiaW5mby0+c3RhY2tzel0gICAgICAgICAg
PSBURE9VQkxFOw0KKwkJYmluZm8tPm9wc3RhY2tfaW5mb1tiaW5mby0+c3Rh
Y2tzel0gICAgID0gMDsNCisJCWJpbmZvLT5vcHN0YWNrW2JpbmZvLT5zdGFj
a3N6ICsgMV0gICAgICA9IFRXSURFOw0KKwkJYmluZm8tPm9wc3RhY2tfaW5m
b1tiaW5mby0+c3RhY2tzeiArIDFdID0gMDsNCisJCWJpbmZvLT5zdGFja3N6
ICs9IDI7DQorCQlicmVhazsNCisJCQ0KKwljYXNlICdWJzoNCisJCWJyZWFr
Ow0KKwkJDQorCWNhc2UgJ1snOg0KKwljYXNlICdMJzoNCisJCSpzaWdzID0g
cHVzaFNpZygqc2lncywgYXJnYnVmKTsNCisJCQkNCisJCWJpbmZvLT5vcHN0
YWNrW2JpbmZvLT5zdGFja3N6XSAgICAgID0gKEhqYXZhX2xhbmdfQ2xhc3Mq
KWFyZ2J1ZjsNCisJCWJpbmZvLT5vcHN0YWNrX2luZm9bYmluZm8tPnN0YWNr
c3pdID0gQ0xBU1NfU0lHU1RSOw0KKwkJYmluZm8tPnN0YWNrc3orKzsNCisJ
CQ0KKwkJLy8gbm8gZnJlZWluZyBvZiB0aGUgYXJnYnVmIGhlcmUuLi4NCisJ
CXJldHVybih0cnVlKTsNCisJCQ0KKwlkZWZhdWx0Og0KKwkJLy8gc2hvdWxk
bid0IGdldCBoZXJlIGJlY3Vhc2Ugb2YgcGFyc2luZy4uLg0KKwkJREJHKFZF
UklGWTMsIGRwcmludGYoIiAgICAgICAgICAgICAgICB1bnJlY29nbml6ZWQg
cmV0dXJuIHR5cGUgc2lnbmF0dXJlOiAlc1xuIiwgYXJnYnVmKTsgKTsNCisJ
CUtGUkVFKGFyZ2J1Zik7DQorCQlwb3N0RXhjZXB0aW9uTWVzc2FnZShlaW5m
bywgSkFWQV9MQU5HKEludGVybmFsRXJyb3IpLA0KKwkJCQkgICAgICJ1bnJl
Y29nbml6ZWQgcmV0dXJuIHR5cGUgc2lnbmF0dXJlIik7DQorCQlyZXR1cm4o
ZmFsc2UpOw0KKwl9DQorCQ0KKwkNCisJS0ZSRUUoYXJnYnVmKTsNCisJcmV0
dXJuKHRydWUpOw0KKyN1bmRlZiBUWVBFX0VSUk9SDQorI3VuZGVmIFZFUklG
WV9FUlJPUg0KK30NCisNCisNCisNCisNCisvKg0KKyAqIHB1c2hlcyB0aGUg
aW5pdGlhbCBtZXRob2QgYXJndW1lbnRzIGludG8gbG9jYWwgdmFyaWFibGUg
YXJyYXkNCisgKi8NCitzdGF0aWMNCitib29sDQorbG9hZEluaXRpYWxBcmdz
KGNvbnN0IE1ldGhvZCogbWV0aG9kLCBlcnJvckluZm8qIGVpbmZvLA0KKwkJ
QmxvY2tJbmZvKiBibG9jaywgU2lnU3RhY2sqKiBzaWdzKQ0KK3sNCisJdWlu
dDMyIHBhcmFtQ291bnQgPSAwOw0KKwlIamF2YV9sYW5nX0NsYXNzKiB0eXBl
ID0gTlVMTDsgLy8gdXNlZCBhcyBhIHRlbXAgZm9yIHBhcmFtZXRlciBhbmQg
cmV0dXJuIHR5cGUgcHJvY2Vzc2luZw0KKwkNCisJLy8gdGhlICsxIHNraXBz
IHRoZSBpbml0aWFsICcoJw0KKwljb25zdCBjaGFyKiBzaWcgPSBNRVRIT0Rf
U0lHRChtZXRob2QpICsgMTsNCisJY2hhciogYXJnYnVmICAgID0gY2hlY2tQ
dHIoS01BTExPQygoc3RybGVuKHNpZykrMSkgKiBzaXplb2YoY2hhcikpKTsN
CisJY2hhciogbmV3c2lnICAgID0gTlVMTDsNCisJDQorCUhqYXZhX2xhbmdf
Q2xhc3MqKiBsb2NhbHMgPSBibG9jay0+bG9jYWxzOw0KKwkNCisJREJHKFZF
UklGWTMsIGRwcmludGYoIiAgICAgICAgc2lnOiAlc1xuIiwgc2lnKTsgKTsN
CisJDQorCS8vIG11c3QgaGF2ZSBhdCBsZWFzdCAxIGxvY2FsIHZhcmlhYmxl
IGZvciB0aGUgb2JqZWN0IHJlZmVyZW5jZQkNCisJaWYgKCFNRVRIT0RfSVNf
U1RBVElDKG1ldGhvZCkpIHsNCisJCWlmIChtZXRob2QtPmxvY2Fsc3ogPD0g
MCkgew0KKwkJCURCRyhWRVJJRlkzLCBkcHJpbnRmKCJFUlJPUiwgbG9hZElu
aXRpYWxBcmdzKCk6IG51bWJlciBvZiBsb2NhbHMgaW4gYSBub24tc3RhdGlj
IG1ldGhvZCBtdXN0IGJlID4gMCIpOyApOw0KKwkJCQ0KKwkJCXBvc3RFeGNl
cHRpb25NZXNzYWdlKGVpbmZvLCBKQVZBX0xBTkcoQ2xhc3NGb3JtYXRFcnJv
ciksDQorCQkJCQkgICAgICJtZXRob2QgJXMuJXM6IG51bWJlciBvZiBsb2Nh
bHMgaW4gbm9uLXN0YXRpYyBtZXRob2QgbXVzdCBiZSA+IDAiLA0KKwkJCQkJ
ICAgICBDTEFTU19DTkFNRShtZXRob2QtPmNsYXNzKSwgTUVUSE9EX05BTUVE
KG1ldGhvZCkpOw0KKwkJCWdvdG8gZmFpbHVyZTsNCisJCX0NCisJCQ0KKwkJ
Ly8gdGhlIGZpcnN0IGxvY2FsIHZhcmlhYmxlIGluIGV2ZXJ5IG1ldGhvZCBp
cyB0aGUgY2xhc3MgdG8gd2hpY2ggaXQgYmVsb25ncw0KKwkJbG9jYWxzWzBd
ID0gbWV0aG9kLT5jbGFzczsNCisJCXBhcmFtQ291bnQrKzsNCisJfQ0KKwkN
CisJZm9yIChzaWcgPSBnZXROZXh0QXJnKHNpZywgYXJnYnVmKTsgKmFyZ2J1
ZiAhPSAnKSc7IHNpZyA9IGdldE5leHRBcmcoc2lnLCBhcmdidWYpKSB7DQor
CQkNCisJCWlmIChwYXJhbUNvdW50ID4gbWV0aG9kLT5sb2NhbHN6KSB7DQor
CQkJREJHKFZFUklGWTMsIGRwcmludGYoIkVSUk9SLCBsb2FkSW5pdGlhbEFy
Z3MoKTogYXJndW1lbnRzIGNhbid0IGZpdCBpbnRvIGxvY2FsIHZhcmlhYmxl
c1xuIik7ICk7DQorCQkJDQorCQkJcG9zdEV4Y2VwdGlvbk1lc3NhZ2UoZWlu
Zm8sIEpBVkFfTEFORyhWZXJpZnlFcnJvciksDQorCQkJCQkgICAgICJtZXRo
b2QgJXMuJXM6IG1ldGhvZCBhcmd1bWVudHMgY2Fubm90IGZpdCBpbnRvIGxv
Y2FsIHZhcmlhYmxlcyIsDQorCQkJCQkgICAgIENMQVNTX0NOQU1FKG1ldGhv
ZC0+Y2xhc3MpLCBNRVRIT0RfTkFNRUQobWV0aG9kKSk7DQorCQkJZ290byBm
YWlsdXJlOw0KKwkJfQ0KKwkJDQorCQlzd2l0Y2ggKCphcmdidWYpIHsNCisJ
CWNhc2UgJ1onOiBjYXNlICdTJzogY2FzZSAnQic6IGNhc2UgJ0MnOg0KKwkJ
Y2FzZSAnSSc6IHR5cGUgPSBUSU5UOyAgICBicmVhazsNCisJCWNhc2UgJ0Yn
OiB0eXBlID0gVEZMT0FUOyAgYnJlYWs7DQorCQkJDQorCQljYXNlICdKJzog
bG9jYWxzW3BhcmFtQ291bnRdID0gVExPTkc7ICAgZ290byBXSURFX3BhcmFt
Ow0KKwkJY2FzZSAnRCc6IGxvY2Fsc1twYXJhbUNvdW50XSA9IFRET1VCTEU7
IGdvdG8gV0lERV9wYXJhbTsNCisJCQkNCisJCVdJREVfcGFyYW06DQorCQkJ
cGFyYW1Db3VudCsrOw0KKwkJCWlmIChwYXJhbUNvdW50ID4gbWV0aG9kLT5s
b2NhbHN6KSB7DQorCQkJCURCRyhWRVJJRlkzLA0KKwkJCQkgICAgZHByaW50
ZigiRVJST1IsIGxvYWRJbml0aWFsQXJncygpOiBhcmd1bWVudHMgY2FuJ3Qg
Zml0IGludG8gbG9jYWwgdmFyaWFibGVzXG4iKTsNCisJCQkJICAgIGRwcmlu
dGYoIiAgICAgICAgb3ZlcmZsb3cgb2NjdXJyZWQgaW4gdGhlIG1pZGRsZSBv
ZiBhIHdpZGUgcGFyYW1ldGVyXG4iKTsNCisJCQkJICAgICk7DQorCQkJCQ0K
KwkJCQlwb3N0RXhjZXB0aW9uTWVzc2FnZShlaW5mbywgSkFWQV9MQU5HKFZl
cmlmeUVycm9yKSwNCisJCQkJCQkgICAgICJtZXRob2QgJXMuJXM6IG1ldGhv
ZCBhcmd1bWVudHMgY2Fubm90IGZpdCBpbnRvIGxvY2FsIHZhcmlhYmxlcyIs
DQorCQkJCQkJICAgICBDTEFTU19DTkFNRShtZXRob2QtPmNsYXNzKSwgTUVU
SE9EX05BTUVEKG1ldGhvZCkpOw0KKwkJCQlnb3RvIGZhaWx1cmU7DQorCQkJ
fQ0KKwkJCXR5cGUgPSBUV0lERTsNCisJCQlicmVhazsNCisJCQkNCisJCWRl
ZmF1bHQ6DQorCQkJREJHKFZFUklGWTMsDQorCQkJICAgIGRwcmludGYoIkVS
Uk9SLCBsb2FkSW5pdGlhbEFyZ3MoKTogYXJndW1lbnQgdG8gbWV0aG9kIGhh
cyBiYWQgc2lnbmF0dXJlLlxuIik7DQorCQkJICAgIGRwcmludGYoIiAgICAg
ICAgaXQgc3RhcnRzIHdpdGggYW4gdW5yZWNvZ25pemVkIGNoYXJhY3Rlcjog
JWNcbiIsICphcmdidWYpOw0KKwkJCSAgICBkcHJpbnRmKCIgICAgICAgIHRo
ZSByZXN0IG9mIGFyZ2J1ZjogJXNcbiIsIGFyZ2J1Zik7DQorCQkJICAgICk7
DQorCQkJDQorCQkJcG9zdEV4Y2VwdGlvbk1lc3NhZ2UoZWluZm8sIEpBVkFf
TEFORyhJbnRlcm5hbEVycm9yKSwNCisJCQkJCSAgICAgIm1ldGhvZCAlcy4l
czogdW5yZWNvZ25pemVkIGZpcnN0IGNoYXJhY3RlciBpbiBwYXJhbWV0ZXIg
dHlwZSBkZXNjcmlwdG9yLCBcIiVjXCIiLA0KKwkJCQkJICAgICBDTEFTU19D
TkFNRShtZXRob2QtPmNsYXNzKSwgTUVUSE9EX05BTUVEKG1ldGhvZCksICph
cmdidWYpOw0KKwkJCWdvdG8gZmFpbHVyZTsNCisJCQkNCisJCWNhc2UgJ1sn
Og0KKwkJY2FzZSAnTCc6DQorCQkJbmV3c2lnID0gY2hlY2tQdHIoS01BTExP
Qygoc3RybGVuKGFyZ2J1ZikgKyAxKSAqIHNpemVvZihjaGFyKSkpOw0KKwkJ
CSpzaWdzID0gcHVzaFNpZygqc2lncywgbmV3c2lnKTsNCisJCQlzcHJpbnRm
KG5ld3NpZywgIiVzIiwgYXJnYnVmKTsNCisJCQlibG9jay0+bG9jYWxzW3Bh
cmFtQ291bnRdICAgICAgPSAoSGphdmFfbGFuZ19DbGFzcyopbmV3c2lnOw0K
KwkJCWJsb2NrLT5sb2NhbHNfaW5mb1twYXJhbUNvdW50XSA9IENMQVNTX1NJ
R1NUUjsNCisJCQlwYXJhbUNvdW50Kys7DQorCQkJY29udGludWU7DQorCQl9
DQorCQkNCisJCWxvY2Fsc1twYXJhbUNvdW50XSA9IHR5cGU7DQorCQlwYXJh
bUNvdW50Kys7DQorCX0NCisJDQorCQ0KKwkvLyBzdWNjZXNzIQ0KKwlmcmVl
KGFyZ2J1Zik7DQorCXJldHVybih0cnVlKTsNCisgZmFpbHVyZToNCisJZnJl
ZShhcmdidWYpOw0KKwlyZXR1cm4oZmFsc2UpOw0KK30NCisNCisNCisvKg0K
KyAqIGdldFJldHVyblNpZygpDQorICovDQorc3RhdGljDQorY29uc3QgY2hh
cioNCitnZXRSZXR1cm5TaWcoY29uc3QgTWV0aG9kKiBtZXRob2QpDQorew0K
Kwljb25zdCBjaGFyKiBzaWcgPSBNRVRIT0RfU0lHRChtZXRob2QpOw0KKwkN
CisJLy8gc2tpcCB0aGUgdHlwZSBwYXJhbWV0ZXJzDQorCWZvciAoc2lnKys7
ICpzaWcgIT0gJyknOyBzaWcgPSBwYXJzZUZpZWxkVHlwZURlc2NyaXB0b3Io
c2lnKSk7DQorCXNpZysrOw0KKwkNCisJcmV0dXJuIHNpZzsNCit9DQorDQor
DQorLyoNCisgKiByZXR1cm5zIHRoZSB0eXBlIHdoZW4gbWVyZ2luZyB0d28g
dHlwZXMsIHQxIGFuZCB0Mi4gIHRoaXMgcmVzdWx0IGNvdWxkDQorICogYmUg
YSBjb21tb24gc3VwZXJjbGFzcywgYSBjb21tb24gY2xhc3MgdGhhdCBib3Ro
IHR5cGVzIGltcGxlbWVudCwgb3IsDQorICogaW4gdGhlIGV2ZW50IHRoYXQg
dGhlIHR5cGVzIGFyZSBub3QgY29tcGF0aWJsZSwgVFVOU1RBQkxFLg0KKyAq
DQorICogbm90ZTogdGhlIHByZWNlZGVuY2Ugb2YgbWVyZ2VkIHR5cGVzIGdv
ZXMgKGZyb20gaGlnaGVzdCB0byBsb3dlc3QpOg0KKyAqICAgICBhY3R1YWwg
cG9pbnRlciB0byBIamF2YV9sYW5nX0NsYXNzKg0KKyAqICAgICBDTEFTU19T
SUdTVFINCisgKiAgICAgQ0xBU1NfTkFNRVNUUg0KKyAqIGFsbCBlbHNlIGJl
aW5nIGVxdWFsLCB0MidzIGluZm8gc2hvdWxkIGJlIHVzZWQNCisgKg0KKyAq
IFRPRE86IHJpZ2h0IG5vdyB0aGUgcHJpb3JpdHkgaXMgdG8gYmUgYSBjb21t
b24gc3VwZXJjbGFzcywgYXMgc3RhdGVkIGluDQorICogICAgICAgdGhlIEpW
TUwyIHNwZWNzLiAgYSBiZXR0ZXIgdmVyaWZpY2F0aW9uIHRlY2huaXF1ZSBt
aWdodCBjaGVjayB0aGlzIGZpcnN0LA0KKyAqICAgICAgIGFuZCB0aGVuIGNo
ZWNrIGludGVyZmFjZXMgdGhhdCBib3RoIGNsYXNzZXMgaW1wbGVtZW50LiAg
b2YgY291cnNlLCBkZXBlbmRpbmcNCisgKiAgICAgICBvbiB0aGUgY29tcGxl
eGl0eSBvZiB0aGUgaW5oZXJpdGFuY2UgaGlyZWFyY2h5LCB0aGlzIGNvdWxk
IHRha2UgYSBsb3Qgb2YgdGltZS4NCisgKiAgICAgICANCisgKiAgICAgICB0
aGUgaWRlYWwgc29sdXRpb24gaXMgdG8gcmVtZW1iZXIgKmFsbCogcG9zc2li
bGUgaGlnaGVzdCByZXNvbHV0aW9uIHR5cGVzLA0KKyAqICAgICAgIHdoaWNo
LCBvZiBjb3Vyc2UsIHdvdWxkIHJlcXVpcmUgYWxsb2NhdGluZyBtb3JlIG1l
bW9yeSBvbiB0aGUgZmx5LCBldGMuLCBzbywNCisgKiAgICAgICBhdCBsZWFz
dCBmb3Igbm93LCB3ZSdyZSBub3QgcmVhbGx5IGV2ZW4gY29uc2lkZXJpbmcg
aXQuDQorICovDQorc3RhdGljDQorSGphdmFfbGFuZ19DbGFzcyoNCittZXJn
ZVR5cGVzKGVycm9ySW5mbyogZWluZm8sIEhqYXZhX2xhbmdfQ2xhc3MqIHRo
aXMsDQorCSAgIEhqYXZhX2xhbmdfQ2xhc3MqIHQxLCB1aW50MzIgaW5mbzEs
DQorCSAgIEhqYXZhX2xhbmdfQ2xhc3MqIHQyLCB1aW50MzIgaW5mbzIsDQor
CSAgIHVpbnQzMiogaW5mbykNCit7DQorCWNoYXIqIHNpZzsNCisJY2hhciog
dG1wID0gTlVMTDsNCisJSGphdmFfbGFuZ19DbGFzcyogdHlwZTsNCisJKmlu
Zm8gPSAwOw0KKwkNCisJLy8gcmVtb3ZlIHRoZSB0cml2aWFsIGNhc2UNCisJ
aWYgKHQxID09IHQyKSB7DQorCQkqaW5mbyA9IGluZm8yOw0KKwkJcmV0dXJu
IHQyOw0KKwl9DQorCQ0KKwlpZiAodDEgPT0gVFVOU1RBQkxFICAgfHwgdDIg
PT0gVFVOU1RBQkxFIHx8DQorCSAgICB0MSA9PSBOVUxMICAgICAgICB8fCB0
MiA9PSBOVUxMIHx8ICAvLyBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5Li4uDQor
CSAgICB0MSA9PSBUV0lERSAgICAgICB8fCB0MiA9PSBUV0lERSB8fCAvLyBk
aXR0by4NCisJICAgIHQxID09IFRWT0lEICAgICAgIHx8IHQyID09IFRWT0lE
KSB7IC8vIGRpdHRvLg0KKwkJDQorCQlyZXR1cm4gVFVOU1RBQkxFOw0KKwl9
DQorCWVsc2UgaWYgKElTX1BSSU1JVElWRV9UWVBFKHQxKSB8fCBJU19QUklN
SVRJVkVfVFlQRSh0MikgIHx8DQorCQkgSVNfQUREUkVTUyh0MSkgICAgICAg
IHx8IElTX0FERFJFU1ModDIpKSB7DQorCQkNCisJCXJldHVybiBUVU5TVEFC
TEU7DQorCX0NCisJZWxzZSBpZiAodDEgPT0gVE5VTEwpIHsNCisJCSppbmZv
ID0gaW5mbzI7DQorCQlyZXR1cm4gdDI7DQorCX0NCisJZWxzZSBpZiAodDIg
PT0gVE5VTEwpIHsNCisJCSppbmZvID0gaW5mbzE7DQorCQlyZXR1cm4gdDE7
DQorCX0NCisJZWxzZSBpZiAodDEgPT0gVE9CSikgew0KKwkJKmluZm8gPSAw
Ow0KKwkJcmV0dXJuIFRPQko7DQorCX0NCisJDQorCQ0KKwkvLyBpZiB0aGV5
J3JlIGJvdGggbmFtZXMgb3IgYm90aCBzaWduYXR1cmVzLCB3ZSBjYW4gZG8g
c3RyYWlnaHR1cCBzdHJpbmcgY29tcGFyZQ0KKwlpZiAoKChpbmZvMSAmIENM
QVNTX05BTUVTVFIgJiYgaW5mbzIgJiBDTEFTU19OQU1FU1RSKSB8fA0KKwkg
ICAgIChpbmZvMSAmIENMQVNTX1NJR1NUUiAmJiBpbmZvMiAmIENMQVNTX1NJ
R1NUUikpICYmDQorCSAgICAhc3RyY21wKChjb25zdCBjaGFyKil0MSwgKGNv
bnN0IGNoYXIqKXQyKSkgew0KKwkJCQ0KKwkJKmluZm8gPSBpbmZvMjsNCisJ
CXJldHVybiB0MjsNCisJfQ0KKwkNCisJDQorCS8vIG1ha2Ugc3VyZSB0aGlu
Z3MgYXJlIGluIHByb3BlciBzaWduYXR1cmUgZm9ybQ0KKwlpZiAoaW5mbzEg
JiBDTEFTU19OQU1FU1RSKSB7DQorCQlzaWcgPSAoY2hhciopdDE7DQorCQkN
CisJCWlmICghaW5mbzIgJiYgIXN0cmNtcChzaWcsIHQyLT5uYW1lLT5kYXRh
KSkgew0KKwkJCSppbmZvID0gaW5mbzI7DQorCQkJcmV0dXJuIHQyOw0KKwkJ
fQ0KKwkJDQorCQlpZiAoKnNpZyAhPSAnWycpIHsNCisJCQl0bXAgPSBjaGVj
a1B0cihLTUFMTE9DKChzdHJsZW4oc2lnKSArIDMpICogc2l6ZW9mKGNoYXIp
KSk7DQorCQkJc3ByaW50Zih0bXAsICJMJXM7Iiwgc2lnKTsNCisJCQlzaWcg
PSB0bXA7DQorCQl9DQorCQkNCisJCWlmIChpbmZvMiAmIENMQVNTX1NJR1NU
Uikgew0KKwkJCWlmICghc3RyY21wKHNpZywgKGNvbnN0IGNoYXIqKXQyKSkg
ew0KKwkJCQlpZiAodG1wKSB7DQorCQkJCQlLRlJFRSh0bXApOw0KKwkJCQl9
DQorCQkJCQ0KKwkJCQkqaW5mbyA9IGluZm8yOw0KKwkJCQlyZXR1cm4gdDI7
DQorCQkJfQ0KKwkJCQ0KKwkJCXQyID0gZ2V0Q2xhc3NGcm9tU2lnbmF0dXJl
KChjb25zdCBjaGFyICopdDIsIHRoaXMtPmxvYWRlciwgZWluZm8pOw0KKwkJ
CWluZm8yID0gMDsNCisJCX0NCisJCQ0KKwkJdDEgPSBnZXRDbGFzc0Zyb21T
aWduYXR1cmUoc2lnLCB0aGlzLT5sb2FkZXIsIGVpbmZvKTsNCisJCWlmICgh
dDEpIHJldHVybihmYWxzZSk7ICAvLyBuZWNlc3NhcnkgZm9yIHRoZSBuZXh0
IGlmLWJsb2NrDQorCQlpbmZvMSA9IDA7DQorCQkNCisJCWlmICh0bXApIHsN
CisJCQlLRlJFRSh0bXApOw0KKwkJfQ0KKwl9DQorCWlmIChpbmZvMiAmIENM
QVNTX05BTUVTVFIpIHsNCisJCXNpZyA9IChjaGFyKil0MjsNCisJCQ0KKwkJ
aWYgKCFpbmZvMSAmJiAhc3RyY21wKHNpZywgdDEtPm5hbWUtPmRhdGEpKSB7
DQorCQkJKmluZm8gPSBpbmZvMTsNCisJCQlyZXR1cm4gdDE7DQorCQl9DQor
CQkNCisJCWlmICgqc2lnICE9ICdbJykgew0KKwkJCXRtcCA9IGNoZWNrUHRy
KEtNQUxMT0MoKHN0cmxlbihzaWcpICsgMykgKiBzaXplb2YoY2hhcikpKTsN
CisJCQlzcHJpbnRmKHRtcCwgIkwlczsiLCBzaWcpOw0KKwkJCXNpZyA9IHRt
cDsNCisJCX0NCisJCQ0KKwkJaWYgKGluZm8xICYgQ0xBU1NfU0lHU1RSKSB7
DQorCQkJaWYgKCFzdHJjbXAoc2lnLCAoY29uc3QgY2hhciopdDEpKSB7DQor
CQkJCWlmICh0bXApIHsNCisJCQkJCUtGUkVFKHRtcCk7DQorCQkJCX0NCisJ
CQkJDQorCQkJCSppbmZvID0gaW5mbzE7DQorCQkJCXJldHVybiB0MTsNCisJ
CQl9DQorCQkJDQorCQkJdDEgPSBnZXRDbGFzc0Zyb21TaWduYXR1cmUoKGNv
bnN0IGNoYXIgKil0MSwgdGhpcy0+bG9hZGVyLCBlaW5mbyk7DQorCQkJaW5m
bzEgPSAwOw0KKwkJfQ0KKwkJDQorCQl0MiA9IGdldENsYXNzRnJvbVNpZ25h
dHVyZShzaWcsIHRoaXMtPmxvYWRlciwgZWluZm8pOw0KKwkJaW5mbzIgPSAw
Ow0KKwkJDQorCQlpZiAodG1wKSB7DQorCQkJS0ZSRUUodG1wKTsNCisJCX0N
CisJfQ0KKwkNCisJaWYgKGluZm8xICYgQ0xBU1NfU0lHU1RSKSB7DQorCQl0
MSA9IGdldENsYXNzRnJvbVNpZ25hdHVyZSgoY29uc3QgY2hhciopdDEsIHRo
aXMtPmxvYWRlciwgZWluZm8pOw0KKwkJaW5mbzEgPSAwOw0KKwl9DQorCWlm
IChpbmZvMiAmIENMQVNTX1NJR1NUUikgew0KKwkJdDIgPSBnZXRDbGFzc0Zy
b21TaWduYXR1cmUoKGNvbnN0IGNoYXIqKXQyLCB0aGlzLT5sb2FkZXIsIGVp
bmZvKTsNCisJCWluZm8yID0gMDsNCisJfQ0KKwkNCisJaWYgKCF0MSB8fCAh
dDIpIHsNCisJCXJldHVybiBUVU5TVEFCTEU7DQorCX0NCisJDQorCQ0KKwl0
eXBlID0gZ2V0Q29tbW9uU3VwZXJjbGFzcyh0MSwgdDIpOw0KKwlpZiAodHlw
ZSA9PSBUT0JKKSB7DQorCQlpZiAoaW1wbGVtZW50cyh0MSx0MikpIHsNCisJ
CQlyZXR1cm4gdDE7DQorCQl9IGVsc2UgaWYgKGltcGxlbWVudHModDIsdDEp
KSB7DQorCQkJcmV0dXJuIHQyOw0KKwkJfQ0KKwl9DQorCXJldHVybiB0eXBl
Ow0KK30NCisNCisNCisvKg0KKyAqIHJldHVybnMgdGhlIGZpcnN0IChoaWdo
ZXN0KSBjb21tb24gc3VwZXJjbGFzcyBvZiBjbGFzc2VzIEEgYW5kIEIuDQor
ICoNCisgKiBwcmVjb25kaXRpb246IG5laXRoZXIgdHlwZSBpcyBhbiBhcnJh
eSB0eXBlDQorICogICAgICAgICAgICAgICBub3IgaXMgZWl0aGVyIGEgcHJp
bWl0aXZlIHR5cGUNCisgKi8NCitzdGF0aWMNCitIamF2YV9sYW5nX0NsYXNz
Kg0KK2dldENvbW1vblN1cGVyY2xhc3MoSGphdmFfbGFuZ19DbGFzcyogY2xh
c3NBLCBIamF2YV9sYW5nX0NsYXNzKiBjbGFzc0IpDQorew0KKwlIamF2YV9s
YW5nX0NsYXNzKiBBOw0KKwlIamF2YV9sYW5nX0NsYXNzKiBCOw0KKwkNCisJ
Zm9yIChBID0gY2xhc3NBOyBBICE9IE5VTEw7IEEgPSBBLT5zdXBlcmNsYXNz
KSB7DQorCQlmb3IgKEIgPSBjbGFzc0I7IEIgIT0gTlVMTDsgQiA9IEItPnN1
cGVyY2xhc3MpIHsNCisJCQlpZiAoQSA9PSBCKSByZXR1cm4gQTsNCisJCX0N
CisJfQ0KKwkNCisJLy8gZXJyb3Igb2Ygc29tZSBraW5kLi4uYXQgdGhlIHZl
cnkgbGVhc3QsIHdlIHNob3VsZGEgZ290dGVuIHRvIE9iamVjdA0KKwkvLyB3
aGVuIHRyYXZlcnNpbmcgdGhlIGNsYXNzIGhpcmVhcmNoeQ0KKwlyZXR1cm4g
VFVOU1RBQkxFOw0KK30NCisNCisNCisvKg0KKyAqIGlzUmVmZXJlbmNlKCkN
CisgKiAgICByZXR1cm5zIHdoZXRoZXIgdGhlIHR5cGUgaXMgYSByZWZlcmVu
Y2UgdHlwZQ0KKyAqLw0KK3N0YXRpYw0KK2Jvb2wNCitpc1JlZmVyZW5jZShj
b25zdCBIamF2YV9sYW5nX0NsYXNzKiB0eXBlLCBjb25zdCB1aW50MzIgaW5m
bykNCit7DQorCWlmIChpbmZvICYgQ0xBU1NfTkFNRVNUUiB8fCBpbmZvICYg
Q0xBU1NfU0lHU1RSKQ0KKwkJcmV0dXJuIHRydWU7DQorCQ0KKwlyZXR1cm4g
dHlwZSAmJg0KKwkJKHR5cGUgIT0gVFVOU1RBQkxFICYmDQorCQkgdHlwZSAh
PSBUV0lERSAmJg0KKwkJIHR5cGUgIT0gVFZPSUQgJiYNCisJCSAhSVNfUFJJ
TUlUSVZFX1RZUEUodHlwZSkgJiYNCisJCSAhSVNfQUREUkVTUyh0eXBlKSk7
DQorfQ0KKw0KKw0KKy8qDQorICogcmV0dXJucyB3aGV0aGVyIHQyIGNhbiBi
ZSBhIHQxDQorICovDQorc3RhdGljDQorYm9vbA0KK3R5cGVjaGVjayhlcnJv
ckluZm8qIGVpbmZvLCBIamF2YV9sYW5nX0NsYXNzKiB0aGlzLA0KKwkgIEhq
YXZhX2xhbmdfQ2xhc3MqIHQxLCB1aW50MzIgaW5mbzEsDQorCSAgSGphdmFf
bGFuZ19DbGFzcyogdDIsIHVpbnQzMiBpbmZvMikNCit7DQorCWNoYXIqIHNp
ZyA9IE5VTEw7DQorCWNoYXIqIHRtcCA9IE5VTEw7DQorCQ0KKwlEQkcoVkVS
SUZZMywNCisJICAgIGRwcmludGYoIiVzdHlwZWNoZWNraW5nICIsIGluZGVu
dCk7DQorCSAgICBwcmludFR5cGUodDEsIGluZm8xKTsNCisJICAgIGRwcmlu
dGYoIiAgdnMuICAiKTsNCisJICAgIHByaW50VHlwZSh0MiwgaW5mbzIpOw0K
KwkgICAgZHByaW50ZigiXG4iKTsNCisJICAgICk7DQorCQ0KKwkvLyByZW1v
dmUgYWxsIHRoZSB0cml2aWFsIGNhc2VzDQorCWlmICh0MSA9PSB0MikNCisJ
CXJldHVybiB0cnVlOw0KKwkNCisJaWYgKHQxID09IE5VTEwgfHwgdDIgPT0g
TlVMTCkgew0KKwkJLy8gYmV0dGVyIHNhZmUgdGhhbiBzb3JyeQ0KKwkJcmV0
dXJuIGZhbHNlOw0KKwl9DQorCWVsc2UgaWYgKHQxID09IFRVTlNUQUJMRSAg
IHx8IHQyID09IFRVTlNUQUJMRSB8fA0KKwkJIHQxID09IFRXSURFICAgICAg
IHx8IHQyID09IFRXSURFIHx8DQorCQkgdDEgPT0gVFZPSUQgICAgICAgfHwg
dDIgPT0gVFZPSUQpIHsNCisJCQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQor
CWVsc2UgaWYgKElTX1BSSU1JVElWRV9UWVBFKHQxKSAgfHwgSVNfUFJJTUlU
SVZFX1RZUEUodDIpICB8fA0KKwkJIElTX0FERFJFU1ModDEpICAgICAgICAg
fHwgSVNfQUREUkVTUyh0MikpIHsNCisJCQ0KKwkJcmV0dXJuIGZhbHNlOw0K
Kwl9DQorCWVsc2UgaWYgKHQxID09IFROVUxMIHx8IHQyID09IFROVUxMKSB7
DQorCQkvLyB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IGJvdGggdDEgYW5kIHQy
IGFyZSBub3QgcHJpbWl0aXZlIGJ5IHRoaXMgcG9pbnQuLi4NCisJCS8vIGlm
IGVpdGhlciBpcyBudWxsLCBpdCB3b3JrcyBvdXQNCisJCXJldHVybiB0cnVl
Ow0KKwl9DQorCQ0KKwkvLyBpZiB0aGV5J3JlIGJvdGggbmFtZXMgb3IgYm90
aCBzaWduYXR1cmVzLCB3ZSBjYW4gZG8gc3RyYWlnaHR1cCBzdHJpbmcgY29t
cGFyZQ0KKwlpZiAoKChpbmZvMSAmIENMQVNTX05BTUVTVFIgJiYgaW5mbzIg
JiBDTEFTU19OQU1FU1RSKSB8fA0KKwkgICAgIChpbmZvMSAmIENMQVNTX1NJ
R1NUUiAmJiBpbmZvMiAmIENMQVNTX1NJR1NUUikpICYmDQorCSAgICAhc3Ry
Y21wKChjb25zdCBjaGFyKil0MSwgKGNvbnN0IGNoYXIqKXQyKSkgew0KKwkJ
cmV0dXJuIHRydWU7DQorCX0NCisJDQorCS8vIG1ha2Ugc3VyZSB0aGluZ3Mg
YXJlIGluIHByb3BlciBzaWduYXR1cmUgZm9ybQ0KKwlpZiAoaW5mbzEgJiBD
TEFTU19OQU1FU1RSKSB7DQorCQlzaWcgPSAoY2hhciopdDE7DQorCQkNCisJ
CWlmICghaW5mbzIgJiYgIXN0cmNtcChzaWcsIHQyLT5uYW1lLT5kYXRhKSkN
CisJCQlyZXR1cm4gdHJ1ZTsNCisJCQ0KKwkJaWYgKCpzaWcgIT0gJ1snKSB7
DQorCQkJdG1wID0gY2hlY2tQdHIoS01BTExPQygoc3RybGVuKHNpZykgKyAz
KSAqIHNpemVvZihjaGFyKSkpOw0KKwkJCXNwcmludGYodG1wLCAiTCVzOyIs
IHNpZyk7DQorCQkJc2lnID0gdG1wOw0KKwkJfQ0KKwkJDQorCQlpZiAoaW5m
bzIgJiBDTEFTU19TSUdTVFIpIHsNCisJCQlpZiAoIXN0cmNtcChzaWcsIChj
b25zdCBjaGFyKil0MikpIHsNCisJCQkJaWYgKHRtcCkgew0KKwkJCQkJS0ZS
RUUodG1wKTsNCisJCQkJfQ0KKwkJCQlyZXR1cm4gdHJ1ZTsNCisJCQl9DQor
CQkJDQorCQkJdDIgPSBnZXRDbGFzc0Zyb21TaWduYXR1cmUoKGNvbnN0IGNo
YXIgKil0MiwgdGhpcy0+bG9hZGVyLCBlaW5mbyk7DQorCQkJaW5mbzIgPSAw
Ow0KKwkJfQ0KKwkJDQorCQl0MSA9IGdldENsYXNzRnJvbVNpZ25hdHVyZShz
aWcsIHRoaXMtPmxvYWRlciwgZWluZm8pOw0KKwkJaWYgKCF0MSkgcmV0dXJu
KGZhbHNlKTsgIC8vIG5lY2Vzc2FyeSBmb3IgdGhlIG5leHQgaWYtYmxvY2sN
CisJCWluZm8xID0gMDsNCisJCQ0KKwkJaWYgKHRtcCkgew0KKwkJCUtGUkVF
KHRtcCk7DQorCQl9DQorCX0NCisJaWYgKGluZm8yICYgQ0xBU1NfTkFNRVNU
Uikgew0KKwkJc2lnID0gKGNoYXIqKXQyOw0KKwkJDQorCQlpZiAoIWluZm8x
ICYmICFzdHJjbXAoc2lnLCB0MS0+bmFtZS0+ZGF0YSkpIHsNCisJCQlyZXR1
cm4gdHJ1ZTsNCisJCX0NCisJCQ0KKwkJaWYgKCpzaWcgIT0gJ1snKSB7DQor
CQkJdG1wID0gY2hlY2tQdHIoS01BTExPQygoc3RybGVuKHNpZykgKyAzKSAq
IHNpemVvZihjaGFyKSkpOw0KKwkJCXNwcmludGYodG1wLCAiTCVzOyIsIHNp
Zyk7DQorCQkJc2lnID0gdG1wOw0KKwkJfQ0KKwkJDQorCQlpZiAoaW5mbzEg
JiBDTEFTU19TSUdTVFIpIHsNCisJCQlpZiAoIXN0cmNtcChzaWcsIChjb25z
dCBjaGFyKil0MSkpIHsNCisJCQkJaWYgKHRtcCkgew0KKwkJCQkJS0ZSRUUo
dG1wKTsNCisJCQkJfQ0KKwkJCQlyZXR1cm4gdHJ1ZTsNCisJCQl9DQorCQkJ
DQorCQkJdDEgPSBnZXRDbGFzc0Zyb21TaWduYXR1cmUoKGNvbnN0IGNoYXIg
Kil0MSwgdGhpcy0+bG9hZGVyLCBlaW5mbyk7DQorCQkJaW5mbzEgPSAwOw0K
KwkJfQ0KKwkJDQorCQl0MiA9IGdldENsYXNzRnJvbVNpZ25hdHVyZShzaWcs
IHRoaXMtPmxvYWRlciwgZWluZm8pOw0KKwkJaW5mbzIgPSAwOw0KKwkJDQor
CQlpZiAodG1wKSB7DQorCQkJS0ZSRUUodG1wKTsNCisJCX0NCisJfQ0KKwkN
CisJaWYgKGluZm8xICYgQ0xBU1NfU0lHU1RSKSB7DQorCQl0MSA9IGdldENs
YXNzRnJvbVNpZ25hdHVyZSgoY29uc3QgY2hhciAqKXQxLCB0aGlzLT5sb2Fk
ZXIsIGVpbmZvKTsNCisJCWluZm8xID0gMDsNCisJfQ0KKwlpZiAoaW5mbzIg
JiBDTEFTU19TSUdTVFIpIHsNCisJCXQyID0gZ2V0Q2xhc3NGcm9tU2lnbmF0
dXJlKChjb25zdCBjaGFyICopdDIsIHRoaXMtPmxvYWRlciwgZWluZm8pOw0K
KwkJaW5mbzIgPSAwOw0KKwl9DQorCQ0KKwlpZiAodDEgPT0gTlVMTCB8fCB0
MiA9PSBOVUxMKSB7DQorCQlEQkcoVkVSSUZZMywNCisJCSAgICBkcHJpbnRm
KCIlc3R5cGVjaGVjayBFUlJPUjogdDEgPSAiLCBpbmRlbnQpOw0KKwkJICAg
IHByaW50VHlwZSh0MSwgaW5mbzEpOw0KKwkJICAgIGRwcmludGYoIiA6OiB0
MiA9ICIpOw0KKwkJICAgIHByaW50VHlwZSh0MiwgaW5mbzIpOw0KKwkJICAg
IGRwcmludGYoIlxuIik7DQorCQkgICAgKTsNCisJCXJldHVybiBmYWxzZTsN
CisJfQ0KKwkNCisJcmV0dXJuIChpbnN0YW5jZW9mKHQxLHQyKSB8fCBpbXBs
ZW1lbnRzKHQxLHQyKSk7DQorfQ0KKw0KKw0KKw0KKy8qDQorICogcmV0dXJu
cyB3aGV0aGVyIHQyIGltcGxlbWVudHMgdDENCisgKg0KKyAqIGhlcmUgd2Ug
aGF2ZSB0byBjaGVjayBpZiBhbnkgb2YgdGhlIGludGVyZmFjZXMgaW1wbGVt
ZW50ZWQgYnkgdDIgYXJlIHN1YmNsYXNzZXMgb2YgdDENCisgKg0KKyAqIHBy
ZWNvbmRpdGlvbjogdDEgYW5kIHQyIG11c3QgYmUgcmVmZXJlbmNlIHR5cGVz
LCBvciB3ZSBnZXQgc29tZSBzZXJpb3VzIGlzc3VlcyBoZXJlDQorICovDQor
c3RhdGljDQorYm9vbA0KK2ltcGxlbWVudHMoSGphdmFfbGFuZ19DbGFzcyog
dDEsIEhqYXZhX2xhbmdfQ2xhc3MqIHQyKQ0KK3sNCisJaW50IGk7DQorCQ0K
KwlpZiAoIUNMQVNTX0lTX0lOVEVSRkFDRSh0MSkpDQorCQlyZXR1cm4oZmFs
c2UpOw0KKwkNCisJZm9yIChpID0gMDsgaSA8IHQyLT5pbnRlcmZhY2VfbGVu
OyBpKyspDQorCQlpZiAoaW5zdGFuY2VvZih0MSwgdDItPmludGVyZmFjZXNb
aV0pKQ0KKwkJCXJldHVybih0cnVlKTsNCisJDQorCXJldHVybihmYWxzZSk7
DQorfQ0KKw0KKw0KKw0KKy8qDQorICogYWxsb2NhdGUgbWVtb3J5IGZvciBh
IGJsb2NrIGluZm8gYW5kIGZpbGwgaW4gd2l0aCBkZWZhdWx0IHZhbHVlcw0K
KyAqLw0KK0Jsb2NrSW5mbyoNCitjcmVhdGVCbG9jayhjb25zdCBNZXRob2Qq
IG1ldGhvZCkNCit7DQorCWludCBpOw0KKwkNCisJQmxvY2tJbmZvKiBiaW5m
byA9IGNoZWNrUHRyKChCbG9ja0luZm8qKUtNQUxMT0Moc2l6ZW9mKEJsb2Nr
SW5mbykpKTsNCisJDQorCWJpbmZvLT5zdGFydEFkZHIgICA9IDA7DQorCWJp
bmZvLT5zdGF0dXMgICAgICA9IElTX0lOU1RSVUNUSU9OIHwgU1RBUlRfQkxP
Q0s7ICAvLyBub3QgVklTSVRFRCBvciBDSEFOR0VEDQorCQ0KKwkvLyBhbGxv
Y2F0ZSBtZW1vcnkgZm9yIGxvY2Fscw0KKwlpZiAobWV0aG9kLT5sb2NhbHN6
ID4gMCkgew0KKwkJYmluZm8tPmxvY2FscyAgICAgID0gY2hlY2tQdHIoS01B
TExPQyhtZXRob2QtPmxvY2Fsc3ogKiBzaXplb2YoSGphdmFfbGFuZ19DbGFz
cyopKSk7DQorCQliaW5mby0+bG9jYWxzX2luZm8gPSBjaGVja1B0cihLTUFM
TE9DKG1ldGhvZC0+bG9jYWxzeiAqIHNpemVvZih1aW50MzIpKSk7DQorCQkN
CisJCWZvciAoaSA9IDA7IGkgPCBtZXRob2QtPmxvY2Fsc3o7IGkrKykgew0K
KwkJCWJpbmZvLT5sb2NhbHNbaV0gICAgICA9IFRVTlNUQUJMRTsNCisJCQli
aW5mby0+bG9jYWxzX2luZm9baV0gPSAwOw0KKwkJfQ0KKwl9IGVsc2Ugew0K
KwkJYmluZm8tPmxvY2FscyA9IE5VTEw7DQorCX0NCisJDQorCQ0KKwkvLyBh
bGxvY2F0ZSBtZW1vcnkgZm9yIG9wZXJhbmQgc3RhY2sNCisJYmluZm8tPnN0
YWNrc3ogPSAwOw0KKwlpZiAobWV0aG9kLT5zdGFja3N6ID4gMCkgew0KKwkJ
YmluZm8tPm9wc3RhY2sgICAgICA9IGNoZWNrUHRyKEtNQUxMT0MobWV0aG9k
LT5zdGFja3N6ICogc2l6ZW9mKEhqYXZhX2xhbmdfQ2xhc3MqKSkpOw0KKwkJ
YmluZm8tPm9wc3RhY2tfaW5mbyA9IGNoZWNrUHRyKEtNQUxMT0MobWV0aG9k
LT5zdGFja3N6ICogc2l6ZW9mKHVpbnQzMikpKTsNCisJCQ0KKwkJZm9yIChp
ID0gMDsgaSA8IG1ldGhvZC0+c3RhY2tzejsgaSsrKSB7DQorCQkJYmluZm8t
Pm9wc3RhY2tbaV0gICAgICA9IFRVTlNUQUJMRTsNCisJCQliaW5mby0+b3Bz
dGFja19pbmZvW2ldID0gMDsNCisJCX0NCisJfSBlbHNlIHsNCisJCWJpbmZv
LT5vcHN0YWNrID0gTlVMTDsNCisJfQ0KKwkNCisJcmV0dXJuIGJpbmZvOw0K
K30NCisNCisvKg0KKyAqIGZyZWVzIHRoZSBtZW1vcnkgb2YgYSBiYXNpYyBi
bG9jaw0KKyAqLw0KK3ZvaWQNCitmcmVlQmxvY2soQmxvY2tJbmZvKiBiaW5m
bykNCit7DQorCWlmIChiaW5mbyA9PSBOVUxMKSByZXR1cm47DQorCQ0KKwlp
ZiAoYmluZm8tPmxvY2FscyAhPSBOVUxMKQ0KKwkJS0ZSRUUoYmluZm8tPmxv
Y2Fscyk7DQorCWlmIChiaW5mby0+bG9jYWxzX2luZm8gIT0gTlVMTCkNCisJ
CUtGUkVFKGJpbmZvLT5sb2NhbHNfaW5mbyk7DQorCWlmIChiaW5mby0+b3Bz
dGFjayAhPSBOVUxMKQ0KKwkJS0ZSRUUoYmluZm8tPm9wc3RhY2spOw0KKwlp
ZiAoYmluZm8tPm9wc3RhY2tfaW5mbyAhPSBOVUxMKQ0KKwkJS0ZSRUUoYmlu
Zm8tPm9wc3RhY2tfaW5mbyk7DQorCQ0KKwlLRlJFRShiaW5mbyk7DQorfQ0K
Kw0KKy8qDQorICogY29waWVzIGluZm9ybWF0aW9uIGZyb20gb25lIHN0YWNr
IG9mIGJhc2ljIGJsb2NrcyB0byBhbm90aGVyDQorICovDQordm9pZA0KK2Nv
cHlCbG9ja0RhdGEoY29uc3QgTWV0aG9kKiBtZXRob2QsIEJsb2NrSW5mbyog
ZnJvbUJsb2NrLCBCbG9ja0luZm8qIHRvQmxvY2spDQorew0KKwl0b0Jsb2Nr
LT5zdGFydEFkZHIgPSBmcm9tQmxvY2stPnN0YXJ0QWRkcjsNCisJdG9CbG9j
ay0+bGFzdEFkZHIgID0gZnJvbUJsb2NrLT5sYXN0QWRkcjsNCisJDQorCWNv
cHlCbG9ja1N0YXRlKG1ldGhvZCwgZnJvbUJsb2NrLCB0b0Jsb2NrKTsNCit9
DQorDQorLyoNCisgKiBjb3BpZXMgdGhlIGxvY2FsIHZhcmlhYmxlcywgb3Bl
cmFuZCBzdGFjaywgc3RhdHVzLCBhbmQgY29udGV4dA0KKyAqIGZyb20gb25l
IGJsb2NrIHRvIGFub3RoZXIuDQorICovDQordm9pZA0KK2NvcHlCbG9ja1N0
YXRlKGNvbnN0IE1ldGhvZCogbWV0aG9kLCBCbG9ja0luZm8qIGZyb21CbG9j
aywgQmxvY2tJbmZvKiB0b0Jsb2NrKQ0KK3sNCisJdWludDMyIG47DQorCQ0K
Kwl0b0Jsb2NrLT5zdGF0dXMgID0gZnJvbUJsb2NrLT5zdGF0dXM7DQorCQ0K
Kwlmb3IgKG4gPSAwOyBuIDwgbWV0aG9kLT5sb2NhbHN6OyBuKyspIHsNCisJ
CXRvQmxvY2stPmxvY2Fsc1tuXSAgICAgID0gZnJvbUJsb2NrLT5sb2NhbHNb
bl07DQorCQl0b0Jsb2NrLT5sb2NhbHNfaW5mb1tuXSA9IGZyb21CbG9jay0+
bG9jYWxzX2luZm9bbl07DQorCX0NCisJDQorCXRvQmxvY2stPnN0YWNrc3og
PSBmcm9tQmxvY2stPnN0YWNrc3o7DQorCWZvciAobiA9IDA7IG4gPCBtZXRo
b2QtPnN0YWNrc3o7IG4rKykgew0KKwkJdG9CbG9jay0+b3BzdGFja1tuXSAg
ICAgID0gZnJvbUJsb2NrLT5vcHN0YWNrW25dOw0KKwkJdG9CbG9jay0+b3Bz
dGFja19pbmZvW25dID0gZnJvbUJsb2NrLT5vcHN0YWNrX2luZm9bbl07DQor
CX0NCit9DQorDQorLyoNCisgKiByZXR1cm5zIHdoaWNoIGJsb2NrIHRoZSBn
aXZlbiBwYyBpcyBpbg0KKyAqLw0KK3N0YXRpYw0KK0Jsb2NrSW5mbyoNCitp
bldoaWNoQmxvY2sodWludDMyIHBjLCBCbG9ja0luZm8qKiBibG9ja3MsIHVp
bnQzMiBudW1CbG9ja3MpDQorew0KKwl1aW50MzIgaTsNCisJZm9yIChpID0g
MDsgaSA8IG51bUJsb2NrczsgaSsrKSB7DQorCQlpZiAocGMgPCBibG9ja3Nb
aV0tPnN0YXJ0QWRkcikgY29udGludWU7DQorCQlpZiAocGMgPD0gYmxvY2tz
W2ldLT5sYXN0QWRkcikgcmV0dXJuIGJsb2Nrc1tpXTsNCisJfQ0KKwkNCisJ
Ly8gc2hvdWxkbid0IGV2ZXIgZ2V0IGhlcmUgdW5sZXNzIHRoZSBzcGVjaWZp
ZWQgUEMgaXMgbWVzc2VkIHVwDQorCURCRyhWRVJJRlkzLCBkcHJpbnRmKCJp
bldoaWNoQmxvY2soLi4uKTogcGMgPSAlZCBvdXQgb2YgcmFuZ2UuLi53ZWly
ZC5cbiIsIHBjKTsgKTsNCisJDQorCXJldHVybiBOVUxMOw0KK30NCisNCisN
CisNCisvKg0KKyAqIHB1c2hTaWcoKQ0KKyAqICAgICBQdXNoZXMgYSBuZXcg
c2lnbmF0dXJlIG9uIHRoZSBTdGFjaw0KKyAqLw0KK3N0YXRpYw0KK1NpZ1N0
YWNrKg0KK3B1c2hTaWcoU2lnU3RhY2sqIHNpZ3MsIGNvbnN0IGNoYXIqIHNp
ZykNCit7DQorCVNpZ1N0YWNrKiBuZXdfc2lnID0gY2hlY2tQdHIoS01BTExP
QyhzaXplb2YoU2lnU3RhY2spKSk7DQorCW5ld19zaWctPnNpZyA9IHNpZzsN
CisJbmV3X3NpZy0+bmV4dCA9IHNpZ3M7DQorCXJldHVybiBuZXdfc2lnOw0K
K30NCisNCisNCisvKg0KKyAqIGZyZWVTaWdTdGFjaygpDQorICogICAgIEZy
ZWVzIHRoZSBtZW1vcnkgY29uc3VtZWQgYnkgYSBzdGFjayBvZiBuYW1lcyBh
bmQgc2lnbmF0dXJlcy4NCisgKi8NCitzdGF0aWMNCit2b2lkDQorZnJlZVNp
Z1N0YWNrKFNpZ1N0YWNrKiBzaWdzKQ0KK3sNCisJU2lnU3RhY2sqIHRtcDsN
CisJd2hpbGUoc2lncyAhPSBOVUxMKSB7DQorCQl0bXAgPSBzaWdzLT5uZXh0
Ow0KKwkJS0ZSRUUoc2lncyk7DQorCQlzaWdzID0gdG1wOw0KKwl9DQorfQ0K
Kw0KKw0KKw0KIC8vIGZvciBkZWJ1Z2dpbmcNCiAjaWZkZWYgS0FGRkVfVk1E
RUJVRw0KIHN0YXRpYw0KQEAgLTE5ODMsNCArNDkzNCwxMDkgQEANCiAJDQog
I3VuZGVmIFBSSU5UDQogfQ0KKw0KK3N0YXRpYw0KK3ZvaWQNCitwcmludFR5
cGUoY29uc3QgSGphdmFfbGFuZ19DbGFzcyogdHlwZSwgY29uc3QgdWludDMy
IHRpbmZvKQ0KK3sNCisJZHByaW50ZigiKCVkKSIsIHRpbmZvKTsNCisJDQor
CWlmICh0eXBlID09IE5VTEwpIHsNCisJCWRwcmludGYoIk5VTEwiKTsNCisJ
fQ0KKwllbHNlIGlmICh0aW5mbyAmIENMQVNTX05BTUVTVFIgfHwgdGluZm8g
JiBDTEFTU19TSUdTVFIpIHsNCisJCWRwcmludGYoIiVzIiwgKGNvbnN0IGNo
YXIqKXR5cGUpOw0KKwl9DQorCWVsc2UgaWYgKHR5cGUgPT0gVE5VTEwpIHsN
CisJCWRwcmludGYoIlROVUxMIik7DQorCX0NCisJZWxzZSBpZiAodHlwZSA9
PSBUQUREUikgew0KKwkJZHByaW50ZigiVEFERFIiKTsNCisJfQ0KKwllbHNl
IGlmICh0eXBlID09IFRVTlNUQUJMRSkgew0KKwkJZHByaW50ZigiVFVOU1RB
QkxFIik7DQorCX0NCisJZWxzZSBpZiAodHlwZSA9PSBUV0lERSkgew0KKwkJ
ZHByaW50ZigiVFdJREUiKTsNCisJfQ0KKwkNCisJZWxzZSBpZiAodHlwZSA9
PSBUVk9JRCkgew0KKwkJZHByaW50ZigiVFZPSUQiKTsNCisJfQ0KKwkNCisJ
ZWxzZSBpZiAodHlwZSA9PSBUSU5UKSB7DQorCQlkcHJpbnRmKCJUSU5UIik7
DQorCX0NCisJZWxzZSBpZiAodHlwZSA9PSBUTE9ORykgew0KKwkJZHByaW50
ZigiVExPTkciKTsNCisJfQ0KKwllbHNlIGlmICh0eXBlID09IFRGTE9BVCkg
ew0KKwkJZHByaW50ZigiVEZMT0FUIik7DQorCX0NCisJZWxzZSBpZiAodHlw
ZSA9PSBURE9VQkxFKSB7DQorCQlkcHJpbnRmKCJURE9VQkxFIik7DQorCX0N
CisJDQorCWVsc2UgaWYgKHR5cGUgPT0gVENIQVJBUlIpIHsNCisJCWRwcmlu
dGYoIlRDSEFSQVJSIik7DQorCX0NCisJZWxzZSBpZiAodHlwZSA9PSBUQk9P
TEFSUikgew0KKwkJZHByaW50ZigiVEJPT0xBUlIiKTsNCisJfQ0KKwllbHNl
IGlmICh0eXBlID09IFRCWVRFQVJSKSB7DQorCQlkcHJpbnRmKCJUQllURUFS
UiIpOw0KKwl9DQorCWVsc2UgaWYgKHR5cGUgPT0gVFNIT1JUQVJSKSB7DQor
CQlkcHJpbnRmKCJUU0hPUlRBUlIiKTsNCisJfQ0KKwllbHNlIGlmICh0eXBl
ID09IFRJTlRBUlIpIHsNCisJCWRwcmludGYoIlRJTlRBUlIiKTsNCisJfQ0K
KwllbHNlIGlmICh0eXBlID09IFRMT05HQVJSKSB7DQorCQlkcHJpbnRmKCJU
TE9OR0FSUiIpOw0KKwl9DQorCWVsc2UgaWYgKHR5cGUgPT0gVEZMT0FUQVJS
KSB7DQorCQlkcHJpbnRmKCJURkxPQVRBUlIiKTsNCisJfQ0KKwllbHNlIGlm
ICh0eXBlID09IFRET1VCTEVBUlIpIHsNCisJCWRwcmludGYoIlRET1VCTEVB
UlIiKTsNCisJfQ0KKwllbHNlIGlmICh0eXBlID09IFRPQkpBUlIpIHsNCisJ
CWRwcmludGYoIlRPQkpBUlIiKTsNCisJfQ0KKwllbHNlIHsNCisJCWlmICh0
eXBlLT5uYW1lID09IE5VTEwgfHwgdHlwZS0+bmFtZS0+ZGF0YSA9PSBOVUxM
KSB7DQorCQkJZHByaW50ZigiPE5VTEwgTkFNRT4iKTsNCisJCX0gZWxzZSB7
DQorCQkJZHByaW50ZigiJXMiLCBDTEFTU19DTkFNRSh0eXBlKSk7DQorCQl9
DQorCX0NCit9DQorDQorDQorLyoNCisgKiBwcmludEJsb2NrKCkNCisgKiAg
ICBGb3IgZGVidWdnaW5nLiAgUHJpbnRzIG91dCBhIGJhc2ljIGJsb2NrLg0K
KyAqLw0KK3N0YXRpYw0KK3ZvaWQNCitwcmludEJsb2NrKGNvbnN0IE1ldGhv
ZCogbWV0aG9kLCBjb25zdCBCbG9ja0luZm8qIGJpbmZvLCBjb25zdCBjaGFy
KiBpbmRlbnQpDQorew0KKwl1aW50MzIgbjsNCisJDQorCWRwcmludGYoIiVz
bG9jYWxzOlxuIiwgaW5kZW50KTsNCisJZm9yIChuID0gMDsgbiA8IG1ldGhv
ZC0+bG9jYWxzejsgbisrKSB7DQorCQlkcHJpbnRmKCIlcyAgICAlZDogIiwg
aW5kZW50LCBuKTsNCisJCXByaW50VHlwZShiaW5mby0+bG9jYWxzW25dLCBi
aW5mby0+bG9jYWxzX2luZm9bbl0pOw0KKwkJZHByaW50ZigiXG4iKTsNCisJ
fQ0KKwlkcHJpbnRmKCIlc29wc3RhY2s6XG4iLCBpbmRlbnQpOw0KKwlmb3Ig
KG4gPSAwOyBuIDwgbWV0aG9kLT5zdGFja3N6OyBuKyspIHsNCisJCWRwcmlu
dGYoIiVzICAgICVkOiAiLCBpbmRlbnQsIG4pOw0KKwkJcHJpbnRUeXBlKGJp
bmZvLT5vcHN0YWNrW25dLCBiaW5mby0+b3BzdGFja19pbmZvW25dKTsNCisJ
CWRwcmludGYoIlxuIik7DQorCX0NCit9DQorDQorDQogI2VuZGlmIC8vIGlm
ZGVmIEtBRkZFX1ZNREVCVUcNCi0tLSBrYWZmZS1jdnMva2FmZmUva2FmZmV2
bS9iYXNlQ2xhc3Nlcy5jCTIwMDMtMDctMjcgMTY6NDI6MjMuMDAwMDAwMDAw
IC0wNTAwDQorKysga2FmZmUva2FmZmUva2FmZmV2bS9iYXNlQ2xhc3Nlcy5j
CTIwMDMtMDctMjkgMTE6MzI6MjMuMDAwMDAwMDAwIC0wNTAwDQpAQCAtMjk2
LDcgKzI5NiwxMCBAQA0KIA0KIAkvKiBGaXh1cCBwcmltaXRpdmUgdHlwZXMg
Ki8NCiAJZmluaXNoVHlwZXMoKTsNCi0NCisJDQorCS8qIEluaXRpYWxpemUg
YXJyYXkgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0cnVjdGlvbiBzZXQg
Ki8NCisJaW5pdEFycmF5Q2xhc3NlcygmZWluZm8pOw0KKwkNCiAJaWYgKCFw
cm9jZXNzQ2xhc3MoU3RyaW5nQ2xhc3MsIENTVEFURV9DT01QTEVURSwgJmVp
bmZvKSkNCiAJCWFib3J0V2l0aEVhcmx5Q2xhc3NGYWlsdXJlKCZlaW5mbyk7
DQogfQ0KLS0tIGthZmZlLWN2cy9rYWZmZS9rYWZmZXZtL2l0eXBlcy5oCTE5
OTktMTEtMDQgMTU6Mjk6MTIuMDAwMDAwMDAwIC0wNTAwDQorKysga2FmZmUv
a2FmZmUva2FmZmV2bS9pdHlwZXMuaAkyMDAzLTA3LTI5IDExOjI2OjU4LjAw
MDAwMDAwMCAtMDUwMA0KQEAgLTEzLDYgKzEzLDcgQEANCiAjZGVmaW5lIF9f
aXR5cGVzX2gNCiANCiAjaW5jbHVkZSAiZ3R5cGVzLmgiDQorI2luY2x1ZGUg
ImVycm9ycy5oIg0KIA0KICNkZWZpbmUJVFlQRV9Cb29sZWFuCTQNCiAjZGVm
aW5lCVRZUEVfQ2hhcgk1DQpAQCAtMzksOSArNDAsMTkgQEANCiBleHRlcm4g
c3RydWN0IEhqYXZhX2xhbmdfQ2xhc3MqIHNob3J0Q2xhc3M7ICAgICANCiBl
eHRlcm4gc3RydWN0IEhqYXZhX2xhbmdfQ2xhc3MqIHZvaWRDbGFzczsNCiAN
CitleHRlcm4gc3RydWN0IEhqYXZhX2xhbmdfQ2xhc3MqIGludEFyckNsYXNz
Ow0KK2V4dGVybiBzdHJ1Y3QgSGphdmFfbGFuZ19DbGFzcyogYnl0ZUFyckNs
YXNzOw0KK2V4dGVybiBzdHJ1Y3QgSGphdmFfbGFuZ19DbGFzcyogY2hhckFy
ckNsYXNzOw0KK2V4dGVybiBzdHJ1Y3QgSGphdmFfbGFuZ19DbGFzcyogc2hv
cnRBcnJDbGFzczsNCitleHRlcm4gc3RydWN0IEhqYXZhX2xhbmdfQ2xhc3Mq
IGxvbmdBcnJDbGFzczsNCitleHRlcm4gc3RydWN0IEhqYXZhX2xhbmdfQ2xh
c3MqIGZsb2F0QXJyQ2xhc3M7DQorZXh0ZXJuIHN0cnVjdCBIamF2YV9sYW5n
X0NsYXNzKiBkb3VibGVBcnJDbGFzczsNCitleHRlcm4gc3RydWN0IEhqYXZh
X2xhbmdfQ2xhc3MqIG9iamVjdEFyckNsYXNzOw0KKw0KICNkZWZpbmUJVFlQ
RV9DTEFTUyh0KQkJdHlwZXNbdF0NCiANCiBleHRlcm4gdm9pZCBmaW5pc2hU
eXBlcyh2b2lkKTsNCiBleHRlcm4gdm9pZCBpbml0VHlwZXModm9pZCk7DQor
ZXh0ZXJuIHZvaWQgaW5pdEFycmF5Q2xhc3NlcyhlcnJvckluZm8qKTsNCiAN
CiAjZW5kaWYNCi0tLSBrYWZmZS1jdnMva2FmZmUva2FmZmV2bS9pdHlwZXMu
YwkyMDAzLTA2LTExIDExOjU0OjE0LjAwMDAwMDAwMCAtMDUwMA0KKysrIGth
ZmZlL2thZmZlL2thZmZldm0vaXR5cGVzLmMJMjAwMy0wNy0yOSAxMTozMDox
MC4wMDAwMDAwMDAgLTA1MDANCkBAIC0zMSw2ICszMSwxNSBAQA0KIEhqYXZh
X2xhbmdfQ2xhc3MqIHNob3J0Q2xhc3M7ICAgICANCiBIamF2YV9sYW5nX0Ns
YXNzKiB2b2lkQ2xhc3M7DQogDQorSGphdmFfbGFuZ19DbGFzcyogaW50QXJy
Q2xhc3M7DQorSGphdmFfbGFuZ19DbGFzcyogYnl0ZUFyckNsYXNzOw0KK0hq
YXZhX2xhbmdfQ2xhc3MqIGNoYXJBcnJDbGFzczsNCitIamF2YV9sYW5nX0Ns
YXNzKiBzaG9ydEFyckNsYXNzOw0KK0hqYXZhX2xhbmdfQ2xhc3MqIGxvbmdB
cnJDbGFzczsNCitIamF2YV9sYW5nX0NsYXNzKiBmbG9hdEFyckNsYXNzOw0K
K0hqYXZhX2xhbmdfQ2xhc3MqIGRvdWJsZUFyckNsYXNzOw0KK0hqYXZhX2xh
bmdfQ2xhc3MqIG9iamVjdEFyckNsYXNzOw0KKw0KIEhqYXZhX2xhbmdfQ2xh
c3MqIHR5cGVzW01BWFRZUEVTXTsNCiANCiBzdGF0aWMNCkBAIC0xMzgsNiAr
MTQ3LDI2IEBADQogCURCRyhJTklULCBkcHJpbnRmKCJmaW5pc2hUeXBlcygp
IGRvbmVcbiIpOyApDQogfQ0KIA0KKy8qDQorICogSW5pdGlhbGl6ZSB0aGUg
YXJyYXkgY2xhc3Nlcy4NCisgKi8NCit2b2lkIA0KK2luaXRBcnJheUNsYXNz
ZXMoZXJyb3JJbmZvICplaW5mbykNCit7DQorCURCRyhJTklULCBkcHJpbnRm
KCJpbml0QXJyYXlDbGFzc2VzKClcbiIpOyApOw0KKwkNCisJaW50QXJyQ2xh
c3MgICAgPSBsb29rdXBBcnJheShpbnRDbGFzcywgZWluZm8pOw0KKwlieXRl
QXJyQ2xhc3MgICA9IGxvb2t1cEFycmF5KGJ5dGVDbGFzcywgZWluZm8pOw0K
KwljaGFyQXJyQ2xhc3MgICA9IGxvb2t1cEFycmF5KGNoYXJDbGFzcywgZWlu
Zm8pOw0KKwlzaG9ydEFyckNsYXNzICA9IGxvb2t1cEFycmF5KHNob3J0Q2xh
c3MsIGVpbmZvKTsNCisJbG9uZ0FyckNsYXNzICAgPSBsb29rdXBBcnJheShs
b25nQ2xhc3MsIGVpbmZvKTsNCisJZmxvYXRBcnJDbGFzcyAgPSBsb29rdXBB
cnJheShmbG9hdENsYXNzLCBlaW5mbyk7DQorCWRvdWJsZUFyckNsYXNzID0g
bG9va3VwQXJyYXkoZG91YmxlQ2xhc3MsIGVpbmZvKTsNCisJb2JqZWN0QXJy
Q2xhc3MgPSBsb29rdXBBcnJheShPYmplY3RDbGFzcywgZWluZm8pOw0KKwkN
CisJREJHKElOSVQsIGRwcmludGYoImluaXRBcnJheUNsYXNzZXMoKSBkb25l
XG4iKTsgKTsNCit9DQorDQogc3RhdGljDQogSGphdmFfbGFuZ19DbGFzcyoN
CiBjbGFzc0Zyb21TaWcoY29uc3QgY2hhcioqIHN0cnAsIEhqYXZhX2xhbmdf
Q2xhc3NMb2FkZXIqIGxvYWRlciwgZXJyb3JJbmZvICplaW5mbykNCg==

--Boundary_(ID_0Aev7pwXCMxTQUJcLVr1bA)--