[PATCH] edit_distance: calculate edit distance between strings

Kevin Locke <[email protected]> Fri, 18 Nov 2016 21:19:25 -0700
Newsgroups org.ozlabs.lists.ccan
Message-ID <f253995d1f82ebc3dbb69f9ad2dfbcff6605c71a.1479527608.git.kevin@kevinlocke.name>
VGhpcyBjb21taXQgY3JlYXRlcyB0aGUgZWRpdF9kaXN0YW5jZSBtb2R1bGUgZm9yIGNhbGN1bGF0
aW5nIHZhcmlvdXMKZWRpdCBkaXN0YW5jZSBtZWFzdXJlcy4gIFRoZSBlZGl0IGRpc3RhbmNlIHF1
YW50aWZpZXMgdGhlIHNpbWlsYXJpdHkKYmV0d2VlbiB0d28gc3RyaW5ncyBiYXNlZCBvbiB0aGUg
bnVtYmVyIG9mIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvCnR1cm4gb25lIHN0cmluZyBpbnRv
IHRoZSBvdGhlci4gIFRoZXJlIGFyZSBzZXZlcmFsIGVkaXQgZGlzdGFuY2UKbWVhc3VyZXMgd2hp
Y2ggZGlmZmVyIGluIHRoZSBvcGVyYXRpb25zIHdoaWNoIGFyZSBwZXJtaXR0ZWQgYW5kIHRoZQpj
b3N0IChha2Egd2VpZ2h0KSBvZiB0aGUgb3BlcmF0aW9ucy4gIFRoaXMgbW9kdWxlIHByb3ZpZGVz
IGZ1bmN0aW9ucwpmb3IgY2FsY3VsYXRpbmcgdGhlIExvbmdlc3QgQ29tbW9uIFN1YnNlcXVlbmNl
IChMQ1MpLCBMZXZlbnNodGVpbiwgYW5kCkRhbWVyYXUtTGV2ZW5zaHRlaW4gKHJlc3RyaWN0ZWQg
YW5kIHVucmVzdHJpY3RlZCkgZGlzdGFuY2VzLiAgV2VpZ2h0ZWQKdmVyc2lvbnMgb2YgdGhlc2Ug
ZnVuY3Rpb25zIGNhbiBiZSBjcmVhdGVkIGJ5IGRlZmluaW5nIGNvc3QgZnVuY3Rpb25zCmFzIHBy
ZXByb2Nlc3NvciBtYWNyb3Mgd2hlbiBjb21waWxpbmcgdGhpcyBtb2R1bGUuICBEaXN0YW5jZXMg
b3ZlcgpvdGhlciBhcnJheSB0eXBlcyAoZS5nLiB3aWRlIHN0cmluZ3MsIGludGVnZXJzLCBzdHJ1
Y3RzKSBjYW4gYmUKYWNjb21wbGlzaGVkIGJ5IGRlZmluaW5nIHRoZSBlbGVtZW50IHR5cGUgYW5k
IGVxdWFsaXR5IHRlc3QgbWFjcm9zLgoKU2lnbmVkLW9mZi1ieTogS2V2aW4gTG9ja2UgPGtldmlu
QGtldmlubG9ja2UubmFtZT4KCi0tLQoKSSBoYXZlIHRyaWVkIHRvIG1ha2UgdGhlIGlubGluZSBk
b2N1bWVudGF0aW9uIHdvcmsgd2l0aCBib3RoCmRvY19leHRyYWN0IGFuZCBEb3h5Z2VuLiAgVGhl
IGZvcm1hdHRpbmcgb2YgY29kZSBleGFtcGxlcyBpbiB0aGUKbW9kdWxlIGNvbW1lbnRzIGNvbnRh
aW5zIHNvbWUgb2RkLWxvb2tpbmcgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvCm1ha2UgdGhlIGV4
YW1wbGVzIHdvcmssIGJ1dCBvdGhlcndpc2UgdGhlIGNvbWJpbmF0aW9uIHNlZW1lZApyZWFzb25h
YmxlLiAgSWYgdGhlcmUncyBhIHN0cm9uZyBmZWVsaW5nIHRoYXQgRG94eWdlbiBpcyBhZ2FpbnN0
IHRoZQpwcm9qZWN0IHN0eWxlLCBJIGNhbiByZW1vdmUgdGhlIERveHlnZW4tc3BlY2lmaWMgZm9y
bWF0dGluZy4KClRoZXJlIGFyZSBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGF1eGlsaWFyeSBmaWxl
cyB3aGljaCBJIGRpZCBub3QKaW5jbHVkZSBpbiB0aGlzIGNvbW1pdCAoZS5nLiAuaW5kZW50LnBy
bywgRG94eWZpbGUsIHNjcmlwdHMgZm9yCnBlcmZvcm1hbmNlIHRlc3RpbmcgYW5kIHRlc3Rpbmcg
YWdhaW5zdCByZWZlcmVuY2UgbGlicmFyaWVzKSwgc2luY2UKdGhlc2Ugc29ydHMgb2YgZmlsZXMg
ZG8gbm90IGFwcGVhciB0byBiZSBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXIKbW9kdWxlcy4g
IElmIHRoZXkgd291bGQgYmUgZGVzaXJhYmxlLCBJIGNhbiBzdWJtaXQgdGhlbSBpbiBhbgphZGRp
dGlvbmFsIGNvbW1pdC4KCkkgaG9wZSB5b3UgZmluZCB0aGUgbW9kdWxlIHVzZWZ1bCBhbmQgSSBs
b29rIGZvcndhcmQgdG8geW91ciB0aG91Z2h0cy4KCkNoZWVycywKS2V2aW4KCiBjY2FuL2VkaXRf
ZGlzdGFuY2UvTElDRU5TRSAgICAgICAgICAgICAgICAgfCAgIDEgKwogY2Nhbi9lZGl0X2Rpc3Rh
bmNlL19pbmZvICAgICAgICAgICAgICAgICAgIHwgIDg5ICsrKysrKysrKwogY2Nhbi9lZGl0X2Rp
c3RhbmNlL2VkaXRfZGlzdGFuY2UtcGFyYW1zLmggIHwgMTI2ICsrKysrKysrKysrKysKIGNjYW4v
ZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXByaXZhdGUuaCB8ICA4MSArKysrKysrKysKIGNj
YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmJpYiAgICAgICB8ICA1NyArKysrKysKIGNj
YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmMgICAgICAgICB8IDExNiArKysrKysrKysr
KysKIGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmggICAgICAgICB8IDEzMSArKysr
KysrKysrKysrKwogY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfZGwuYyAgICAgIHwg
MTc5ICsrKysrKysrKysrKysrKysrKwogY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2Vf
bGNzLmMgICAgIHwgIDY5ICsrKysrKysKIGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNl
X2xldi5jICAgICB8ICA3NCArKysrKysrKwogY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFu
Y2VfcmRsLmMgICAgIHwgIDk4ICsrKysrKysrKysKIGNjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L2Fw
aS5jICAgICAgICAgICAgICB8IDIyMSArKysrKysrKysrKysrKysrKysrKysrCiBjY2FuL2VkaXRf
ZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYyAgfCAgNDAgKysrKwogY2Nhbi9lZGl0X2Rp
c3RhbmNlL3Rlc3QvcnVuLXR5cGVzLXN0cnVjdC5jIHwgIDU2ICsrKysrKwogY2Nhbi9lZGl0X2Rp
c3RhbmNlL3Rlc3QvcnVuLXR5cGVzLXdjaGFyLmMgIHwgIDYwICsrKysrKwogY2Nhbi9lZGl0X2Rp
c3RhbmNlL3Rlc3QvcnVuLXdlaWdodHMuYyAgICAgIHwgMjgyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiAxNiBmaWxlcyBjaGFuZ2VkLCAxNjgwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt
b2RlIDEyMDAwMCBjY2FuL2VkaXRfZGlzdGFuY2UvTElDRU5TRQogY3JlYXRlIG1vZGUgMTAwNjQ0
IGNjYW4vZWRpdF9kaXN0YW5jZS9faW5mbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNjYW4vZWRpdF9k
aXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXBhcmFtcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY2Nhbi9l
ZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UtcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
Y2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UuYmliCiBjcmVhdGUgbW9kZSAxMDA2NDQg
Y2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNj
YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjY2Fu
L2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9kbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY2Nh
bi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfbGNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj
Y2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sZXYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX3JkbC5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvYXBpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjY2Fu
L2VkaXRfZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGNjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zdHJ1Y3QuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IGNjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy13Y2hhci5jCiBjcmVhdGUg
bW9kZSAxMDA2NDQgY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvcnVuLXdlaWdodHMuYwoKZGlmZiAt
LWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS9MSUNFTlNFIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL0xJ
Q0VOU0UKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMjM1NGQxMgotLS0gL2Rl
di9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9MSUNFTlNFCkBAIC0wLDAgKzEgQEAKKy4u
Ly4uL2xpY2Vuc2VzL0JTRC1NSVQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9jY2FuL2VkaXRfZGlzdGFuY2UvX2luZm8gYi9jY2FuL2VkaXRfZGlzdGFuY2UvX2luZm8K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1NTk1NwotLS0gL2Rldi9udWxs
CisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9faW5mbwpAQCAtMCwwICsxLDg5IEBACisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwor
LyoqCisgKiBlZGl0X2Rpc3RhbmNlIC0gY2FsY3VsYXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdl
ZW4gdHdvIHN0cmluZ3MKKyAqCisgKiBUaGUgZWRpdCBkaXN0YW5jZSBxdWFudGlmaWVzIHRoZSBz
aW1pbGFyaXR5IGJldHdlZW4gdHdvIHN0cmluZ3MgYmFzZWQgb24gdGhlCisgKiBudW1iZXIgb2Yg
bW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gdHVybiBvbmUgc3RyaW5nIGludG8gdGhlIG90aGVy
LiAgVGhlcmUKKyAqIGFyZSBzZXZlcmFsIGVkaXQgZGlzdGFuY2UgbWVhc3VyZXMgd2hpY2ggZGlm
ZmVyIGluIHRoZSBvcGVyYXRpb25zIHdoaWNoIGFyZQorICogcGVybWl0dGVkIGFuZCB0aGUgY29z
dCAoYWthIHdlaWdodCkgb2YgdGhlIG9wZXJhdGlvbnMuICBUaGlzIG1vZHVsZSBwcm92aWRlcwor
ICogZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyB0aGUgTG9uZ2VzdCBDb21tb24gU3Vic2VxdWVu
Y2UgKExDUyksIExldmVuc2h0ZWluLAorICogYW5kIERhbWVyYXUtTGV2ZW5zaHRlaW4gKHJlc3Ry
aWN0ZWQgYW5kIHVucmVzdHJpY3RlZCkgZGlzdGFuY2VzLiAgV2VpZ2h0ZWQKKyAqIHZlcnNpb25z
IG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgY3JlYXRlZCBieSBkZWZpbmluZyBjb3N0IGZ1bmN0
aW9ucyBhcworICogcHJlcHJvY2Vzc29yIG1hY3JvcyB3aGVuIGNvbXBpbGluZyB0aGlzIG1vZHVs
ZS4gIERpc3RhbmNlcyBvdmVyIG90aGVyIGFycmF5CisgKiB0eXBlcyAoZS5nLiB3aWRlIHN0cmlu
Z3MsIGludGVnZXJzLCBzdHJ1Y3RzKSBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IGRlZmluaW5nCisg
KiB0aGUgZWxlbWVudCB0eXBlIGFuZCBlcXVhbGl0eSB0ZXN0IG1hY3Jvcy4KKyAqCisgKiBFeGFt
cGxlOgorICogI2luY2x1ZGUgPGxpbWl0cy5oPgkvLyBVSU5UX01BWAorICogI2luY2x1ZGUgPHN0
ZGlvLmg+CS8vIGZwcmludGYsIHByaW50ZgorICogI2luY2x1ZGUgPHN0ZGxpYi5oPgkvLyBFWElU
XyoKKyAqICNpbmNsdWRlIDxzdHJpbmcuaD4JLy8gc3RybGVuCisgKgorICogI2luY2x1ZGUgPGNj
YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmg+CisgKgorICogY29uc3QgY2hhciAqY291
bnRpZXNbXSA9IHsKKyAqCSJBbmdsZXNleSIsCisgKgkiQnJlY2tub2Nrc2hpcmUiLAorICoJIkNh
cmRpZ2Fuc2hpcmUiLAorICoJIkNhcm1hcnRoZW5zaGlyZSIsCisgKgkiQ2Flcm5hcmZvbnNoaXJl
IiwKKyAqCSJEZW5iaWdoc2hpcmUiLAorICoJIkZsaW50c2hpcmUiLAorICoJIkdsYW1vcmdhbiIs
CisgKgkiTWVyaW9uZXRoc2hpcmUiLAorICoJIk1vbm1vdXRoc2hpcmUiLAorICoJIk1vbnRnb21l
cnlzaGlyZSIsCisgKgkiUGVtYnJva2VzaGlyZSIsCisgKgkiUmFkbm9yc2hpcmUiLAorICoJTlVM
TAorICogfTsKKyAqCisgKiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICogewor
ICoJaWYgKGFyZ2MgIT0gMikgeworICoJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxndWVz
cz5cbiIsIGFyZ3ZbMF0pOworICoJCXJldHVybiBFWElUX0ZBSUxVUkU7CisgKgl9CisgKgljb25z
dCBjaGFyICpndWVzcyA9IGFyZ3ZbMV07CisgKgorICoJdW5zaWduZWQgaW50IGJlc3RkaXN0ID0g
VUlOVF9NQVg7CisgKgljb25zdCBjaGFyICpiZXN0Y291bnR5ID0gTlVMTDsKKyAqCWZvciAoY29u
c3QgY2hhciAqKnBjb3VudHkgPSBjb3VudGllczsgKnBjb3VudHk7ICsrcGNvdW50eSkgeworICoJ
CWNvbnN0IGNoYXIgKmNvdW50eSA9ICpwY291bnR5OworICoJCXVuc2lnbmVkIGludCBkaXN0ID0g
ZWRpdF9kaXN0YW5jZShndWVzcywgc3RybGVuKGd1ZXNzKSwKKyAqCQkJCWNvdW50eSwgc3RybGVu
KGNvdW50eSksIEVESVRfRElTVEFOQ0VfUkRMKTsKKyAqCQlpZiAoZGlzdCA8IGJlc3RkaXN0KSB7
CisgKgkJCWJlc3RkaXN0ID0gZGlzdDsKKyAqCQkJYmVzdGNvdW50eSA9IGNvdW50eTsKKyAqCQl9
CisgKgl9CisgKgorICoJcHJpbnRmKCJZb3Ugd2VyZSBwcm9iYWJseSB0cnlpbmcgdG8gc3BlbGwg
JXNcbiIsIGJlc3Rjb3VudHkpOworICoJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyAqIH0KKyAqIExp
Y2Vuc2U6IE1JVAorICogQXV0aG9yOiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1l
PgorICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCS8qIEV4cGVjdCBl
eGFjdGx5IG9uZSBhcmd1bWVudCAqLworCWlmIChhcmdjICE9IDIpIHsKKwkJcmV0dXJuIDE7Cisg
ICAgICAgIH0KKworCWlmIChzdHJjbXAoYXJndlsxXSwgImRlcGVuZHMiKSA9PSAwKSB7CisJCXJl
dHVybiAwOworICAgICAgICB9CisKKwlpZiAoc3RyY21wKGFyZ3ZbMV0sICJ0ZXN0ZGVwZW5kcyIp
ID09IDApIHsKKwkJcHJpbnRmKCJjY2FuL2FycmF5X3NpemVcbiIpOworCQlwcmludGYoImNjYW4v
YnVpbGRfYXNzZXJ0XG4iKTsKKwkJcHJpbnRmKCJjY2FuL3RhcFxuIik7CisJCXJldHVybiAwOwor
CX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRf
ZGlzdGFuY2UtcGFyYW1zLmggYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS1wYXJh
bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDg0NjE4Ci0tLSAvZGV2
L251bGwKKysrIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UtcGFyYW1zLmgKQEAg
LTAsMCArMSwxMjYgQEAKKy8qKiBAZmlsZQorICogRGVmaW5lcyB0aGUgdHVuYWJsZSBwYXJhbWV0
ZXJzIGZvciB0aGUgZWRpdF9kaXN0YW5jZSBmdW5jdGlvbnMgd2hpY2ggY2FuCisgKiBiZSBjaGFu
Z2VkIGF0IG1vZHVsZS1jb21waWxlLXRpbWUuCisgKgorICogVGhlIG1hY3JvcyBpbiB0aGlzIGhl
YWRlciBjYW4gYmUgcmVkZWZpbmVkLCBlaXRoZXIgYnkgZWRpdGluZyB0aGlzIGZpbGUgb3IKKyAq
IHByb3ZpZGluZyBleHRlcm5hbCBkZWZpbml0aW9ucy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUg
dG8gY2FsY3VsYXRlIHRoZQorICogd2VpZ2h0ZWQgZWRpdCBkaXN0YW5jZSB3aXRoIGFyYml0cmFy
eSB3ZWlnaHRpbmcuCisgKgorICogQGNvcHlyaWdodCAyMDE2IEtldmluIExvY2tlIDxrZXZpbkBr
ZXZpbmxvY2tlLm5hbWU+CisgKiAgICAgICAgICAgIE1JVCBsaWNlbnNlIC0gc2VlIExJQ0VOU0Ug
ZmlsZSBmb3IgZGV0YWlscworICovCisjaWZuZGVmIENDQU5fRURJVF9ESVNUQU5DRV9QQVJBTVNf
SAorI2RlZmluZSBDQ0FOX0VESVRfRElTVEFOQ0VfUEFSQU1TX0gKKworI2lmbmRlZiBlZF9lbGVt
CisjIGluY2x1ZGUgPHN0cmluZy5oPgkJLyogbWVtY2hyICovCisjZW5kaWYKKworI2lmbmRlZiBF
RF9IQVNIX0VMRU0KKyMgaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBVQ0hBUl9NQVggKi8KKyNlbmRp
ZgorCisjaWYgIWRlZmluZWQoRURfREVMX0NPU1QpICYmIFwKKwkJIWRlZmluZWQoRURfSU5TX0NP
U1QpICYmIFwKKwkJIWRlZmluZWQoRURfU1VCX0NPU1QpICYmIFwKKwkJIWRlZmluZWQoRURfVFJB
X0NPU1QpCisvKiogRGVmaW5lZCBpZiBjb3N0cyBhcmUgc3ltbWV0cmljLgorICogKGkuZS4gPGNv
ZGU+ZGlzdGFuY2UoYSwgYikgPT0gZGlzdGFuY2UoYiwgYSkgZm9yYWxsIGEsYjwvY29kZT4pICov
CisjIGRlZmluZSBFRF9DT1NUX0lTX1NZTU1FVFJJQworI2VuZGlmCisKKyNpZm5kZWYgRURfREVM
X0NPU1QKKy8qKiBDb3N0IHRvIGRlbGV0ZSBlbGVtZW50IEBwIGUuICovCisjIGRlZmluZSBFRF9E
RUxfQ09TVChlKSAxCisvKiogRGVmaW5lZCBpZiB0aGUgY29zdCB0byBkZWxldGUgaXMgdGhlIHNh
bWUgZm9yIGFsbCBlbGVtZW50cy4gKi8KKyMgZGVmaW5lIEVEX0RFTF9DT1NUX0NPTlNUCisjZW5k
aWYKKworI2lmbmRlZiBFRF9JTlNfQ09TVAorLyoqIENvc3QgdG8gaW5zZXJ0IGVsZW1lbnQgQHAg
ZS4gKi8KKyMgZGVmaW5lIEVEX0lOU19DT1NUKGUpIDEKKy8qKiBEZWZpbmVkIGlmIHRoZSBjb3N0
IHRvIGluc2VydCBpcyB0aGUgc2FtZSBmb3IgYWxsIGVsZW1lbnRzLiAqLworIyBkZWZpbmUgRURf
SU5TX0NPU1RfQ09OU1QKKyNlbmRpZgorCisjaWZuZGVmIEVEX1NVQl9DT1NUCisvKiogQ29zdCB0
byBzdWJzdGl0dXRlIGVsZW1lbnQgQHAgZiBmb3IgZWxlbWVudCBAcCBlIChpLmUuIHJlcGxhY2Ug
QHAgZSB3aXRoCisgKiBAcCBmICkuCisgKgorICogQWxsIGFsZ29yaXRobXMgd2hpY2ggdXNlIHRo
aXMgbWFjcm8gZXhwZWN0IHRoYXQgPGNvZGU+RURfU1VCX0NPU1QoZSwgZikgKworICogRURfU1VC
X0NPU1QoZiwgZykgPj0gRURfU1VCX0NPU1QoZSwgZyk8L2NvZGU+LiAgVGhleSBkbyBub3QgY2hl
Y2sgZm9yIGFueQorICogc3Vic3RpdHV0aW9uIGNoYWlucyBhbmQgd2lsbCBub3QgZmluZCBtaW5p
bWFsIGRpc3RhbmNlcyB3aGVuIHRoaXMgYXNzdW1wdGlvbgorICogZG9lcyBub3QgaG9sZC4KKyAq
CisgKiBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgPGNvZGU+RURfU1VCX0NPU1QoZSwg
ZikgPj0gRURfREVMX0NPU1QoZSkgKworICogRURfSU5TX0NPU1QoZik8L2NvZGU+LiAgSWYgdGhp
cyBpcyB0cnVlIGZvciBhbGwgQHAgZSBhbmQgQHAgZiwgY29uc2lkZXIKKyAqIHVzaW5nIGVkaXRf
ZGlzdGFuY2VfbGNzKCkgaW5zdGVhZCBvZiBlZGl0X2Rpc3RhbmNlX2xldigpIHdoaWNoIGNhbGN1
bGF0ZXMKKyAqIHRoZSBzYW1lIHJlc3VsdCBtb3JlIHF1aWNrbHkgYnkgbm90IGNvbnNpZGVyaW5n
IHN1YnN0aXR1dGlvbnMgd2hpY2ggYXJlCisgKiBuZXZlciBsZXNzIGNvc3RseSB0aGFuIGRlbGV0
ZSArIGluc2VydC4KKyAqLworIyBkZWZpbmUgRURfU1VCX0NPU1QoZSwgZikgMQorLyoqIERlZmlu
ZWQgaWYgdGhlIGNvc3QgdG8gc3Vic3RpdHV0ZSBpcyB0aGUgc2FtZSBmb3IgYWxsIGVsZW1lbnQg
cGFpcnMuICovCisjIGRlZmluZSBFRF9TVUJfQ09TVF9DT05TVAorI2VuZGlmCisKKyNpZm5kZWYg
RURfVFJBX0NPU1QKKy8qKiBDb3N0IHRvIHRyYW5zcG9zZSBlbGVtZW50cyBAcCBlZiB0byBAcCBm
ZS4KKyAqCisgKiBAYyBlZGl0X2Rpc3RhbmNlX2RsIHJlcXVpcmVzIDxjb2RlPjIgKiBFRF9UUkFf
Q09TVChlLCBmKSA+PSBFRF9JTlNfQ09TVChnKSArCisgKiBFRF9ERUxfQ09TVChoKTwvY29kZT4g
Zm9yIGFsbCBAYyBlLGYsZyxoLiAgU2VlIFRyYWNlIFRoZW9yZW0gMyBvZgorICogV2FnbmVyLUxv
d3JhbmNlLiBAY2l0ZSBXYWduZXI3NQorICovCisjIGRlZmluZSBFRF9UUkFfQ09TVChlLCBmKSAx
CisvKiogRGVmaW5lZCBpZiB0aGUgY29zdCB0byB0cmFuc3Bvc2UgaXMgdGhlIHNhbWUgZm9yIGFs
bCBlbGVtZW50IHBhaXJzLiAqLworIyBkZWZpbmUgRURfVFJBX0NPU1RfQ09OU1QKKyNlbmRpZgor
CisjaWYgZGVmaW5lZChET1hZR0VOKQorLyoqIE9wdGltaXplZCBhcnJheSBzZWFyY2ggZnVuY3Rp
b24gZm9yIHNpbmdsZS1hcnJheS1oZWF2eSB3b3JrbG9hZHMuCisgKgorICogVGhlIGV4cHJlc3Np
b24gZ2VuZXJhdGVkIGJ5IHRoaXMgbWFjcm8gbXVzdCBldmFsdWF0ZSB0byBAYyB0cnVlIGluIGEg
Ym9vbGVhbgorICogY29udGV4dCB3aGVuIEBwIGVsZW0gaXMgY29udGFpbmVkIGluIHRoZSBmaXJz
dCBAcCBsZW4gZWxlbWVudHMgb2YgQHAgYXJyIGFuZAorICogQGMgZmFsc2Ugb3RoZXJ3aXNlLiAg
QHAgbGVuIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDAuCisgKgorICogVGhpcyBt
YWNybyBpcyBjdXJyZW50bHkgb25seSB1c2VkIHdoZW4gI0VEX0lOU19DT1NUX0NPTlNUIGFuZAor
ICogI0VEX1NVQl9DT1NUX0NPTlNUIGFyZSBkZWZpbmVkLgorICoKKyAqIEBub3RlCisgKiBPbmx5
IGRlZmluZSB0aGlzIG1hY3JvIHdoZW4gdGhlIHNlYXJjaCBmdW5jdGlvbiBpcyBoaWdobHkgb3B0
aW1pemVkIGFuZCB3aGVuCisgKiBzaW5nbGUtZWxlbWVudCBhcnJheXMgYXJlIGV4cGVjdGVkIHRv
IGJlIHBhc3NlZCBmcmVxdWVudGx5LCBiZWNhdXNlIGl0IGFkZHMKKyAqIGEgY29uZGl0aW9uYWwg
YnJhbmNoIHRvIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBkaXN0YW5jZSBmdW5jdGlvbnMgd2l0aAor
ICogbm9uLWVtcHR5IGFyZ3VtZW50cy4KKyAqLworIyBkZWZpbmUgRURfSEFTX0VMRU0oYXJyLCBl
bGVtLCBsZW4pIChtZW1jaHIoYXJyLCBlbGVtLCBsZW4pICE9IE5VTEwpCisjZW5kaWYKKworI2lm
bmRlZiBFRF9FTEVNX0VRVUFMCisvKiogQXJlIHR3byBlbGVtZW50cyBlcXVhbD8gKi8KKyMgZGVm
aW5lIEVEX0VMRU1fRVFVQUwoZWxlbTEsIGVsZW0yKSAoZWxlbTEgPT0gZWxlbTIpCisjZW5kaWYK
KworI2lmICFkZWZpbmVkKEVEX0hBU0hfRUxFTSkgJiYgIWRlZmluZWQoZWRfZWxlbSkKKy8qKiBI
YXNoIGFuIGVsZW1lbnQgdG8gYSB1bmlxdWUgdmFsdWUgaW4gPGNvZGU+WzAsIEVEX0hBU0hfTUFY
XTwvY29kZT4uCisgKgorICogTm90ZTogIFRoaXMgbW9kdWxlIGRvZXMgbm90IHVzZSBhICJyZWFs
IiBkaWN0aW9uYXJ5LiAgSGFzaCBjb2xsaXNpb25zIGFyZQorICogbm90IGV4cGVjdGVkIG5vciBz
dXBwb3J0ZWQuICBJZiBlbGVtZW50cyBjYW4gbm90IGJlIHVuaXF1ZWx5IG1hcHBlZCB0byBhCisg
KiByZWFzb25hYmxlIHJhbmdlLCBjb25zaWRlciBpbXBsZW1lbnRpbmcgYSAicmVhbCIgZGljdGlv
bmFyeS4KKyAqLworIyBkZWZpbmUgRURfSEFTSF9FTEVNKGUpICgodW5zaWduZWQgY2hhcillKQor
LyoqIE1heGltdW0gdmFsdWUgdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSAjRURfSEFTSF9FTEVN
ICovCisjIGRlZmluZSBFRF9IQVNIX01BWCBVQ0hBUl9NQVgKKy8qKiBDYW4gYW4gYXJyYXkgb2Yg
I0VEX0hBU0hfTUFYIDo6ZWRfZGlzdCB2YWx1ZXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjaz8gKi8K
KyMgZGVmaW5lIEVEX0hBU0hfT05fU1RBQ0sKKyNlbmRpZgorCisjaWZuZGVmIEVEX1NUQUNLX0VM
RU1TCisvKiogTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCB3aWxsIGJlIGFsbG9jYXRl
ZCBvbiB0aGUgc3RhY2suCisgKgorICogTm90ZTogVGhlIHRocmVzaG9sZCBkb2VzIG5vdCBuZWVk
IHRvIGJlIHRpZ2h0IHNpbmNlIHdpdGgKKyAqIDxjb2RlPkVEX1NUQUNLX0VMRU1TID4gfjEwMDwv
Y29kZT4gYWxnb3JpdGhtIGNvc3Qgd2lsbCBkb21pbmF0ZSBAYyBtYWxsb2MKKyAqIGNvc3QgYW55
d2F5LgorICovCisjIGRlZmluZSBFRF9TVEFDS19FTEVNUyA1MTIKKyNlbmRpZgorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXByaXZhdGUuaCBi
L2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGZlOWNjCi0tLSAvZGV2L251bGwKKysrIGIvY2Nhbi9l
ZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UtcHJpdmF0ZS5oCkBAIC0wLDAgKzEsODEgQEAKKy8q
KiBAZmlsZQorICogUHJpdmF0ZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IHRoZSBl
ZGl0X2Rpc3RhbmNlIGltcGxlbWVudGF0aW9uLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZp
biBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5z
ZSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMKKyAqLworI2lmbmRlZiBDQ0FOX0VESVRf
RElTVEFOQ0VfUFJJVkFURV9ICisjZGVmaW5lIENDQU5fRURJVF9ESVNUQU5DRV9QUklWQVRFX0gK
KworI2luY2x1ZGUgImVkaXRfZGlzdGFuY2UuaCIKKworLyoqIFVuc2FmZSAoYXJndW1lbnRzIGV2
YWx1YXRlZCBtdWx0aXBsZSB0aW1lcykgMy12YWx1ZSBtaW5pbXVtLiAqLworI2RlZmluZSBFRF9N
SU4yKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisKKy8qKiBVbnNhZmUgKGFyZ3VtZW50
cyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMpIDMtdmFsdWUgbWluaW11bS4gKi8KKyNkZWZpbmUg
RURfTUlOMyhhLCBiLCBjKSBcCisJKChhKSA8IChiKSA/ICgoYSkgPCAoYykgPyAoYSkgOiAoYykp
IDogKChiKSA8IChjKSA/IChiKSA6IChjKSkpCisKKy8qKiBTd2FwIHZhcmlhYmxlcyBAcCBhIGFu
ZCBAcCBiIG9mIGEgZ2l2ZW4gdHlwZS4gKi8KKyNkZWZpbmUgRURfU1dBUChhLCBiLCBUeXBlKSBc
CisJZG8geyBUeXBlIHN3YXB0bXAgPSBhOyBhID0gYjsgYiA9IHN3YXB0bXA7IH0gd2hpbGUgKDAp
CisKKy8qKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdHJpYW5ndWxhciBtYXRyaXggKHdpdGggZGlh
Z29uYWwpLgorICogQHBhcmFtIHJjIE51bWJlciBvZiByb3dzIChvciBjb2x1bW5zLCBzaW5jZSBz
cXVhcmUpLiAqLworI2RlZmluZSBFRF9UTUFUX1NJWkUocmMpICgoKHJjKSArIDEpICogKHJjKSAv
IDIpCisKKy8qKiBJbmRleCBvZiBlbGVtZW50IGluIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LiAq
LworI2RlZmluZSBFRF9UTUFUX0lORChyLCBjKSAoRURfVE1BVF9TSVpFKHIpICsgYykKKworLyoq
CisgKiBDYWxjdWxhdGVzIG5vbi10cml2aWFsIExDUyBkaXN0YW5jZSAoZm9yIGludGVybmFsIHVz
ZSkuCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHNyYyBTb3VyY2UgYXJyYXkgdG8gY2FsY3VsYXRl
IGRpc3RhbmNlIGZyb20gKHNtYWxsZXIgd2hlbiBzeW1tZXRyaWMpLgorICogQHBhcmFtIHNsZW4g
TnVtYmVyIG9mIGVsZW1lbnRzIGluIEBwIHNyYyB0byBjb25zaWRlciAobXVzdCBiZSA+IDApLgor
ICogQHBhcmFtIHRndCBUYXJnZXQgYXJyYXkgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIHRvLgorICog
QHBhcmFtIHRsZW4gTnVtYmVyIG9mIGVsZW1lbnRzIGluIEBwIHRndCB0byBjb25zaWRlciAobXVz
dCBiZSA+IDApLgorICogQHJldHVybiBMQ1MgZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4uc2xlbi0x
XSB0byBAcCB0Z3RbMC4udGxlbi0xXS4KKyAqLworZWRfZGlzdCBlZGl0X2Rpc3RhbmNlX2xjcyhj
b25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJCSAgY29uc3QgZWRfZWxlbSAqdGd0
LCBlZF9zaXplIHRsZW4pOworCisvKioKKyAqIENhbGN1bGF0ZXMgbm9uLXRyaXZpYWwgTGV2ZW5z
aHRlaW4gZGlzdGFuY2UgKGZvciBpbnRlcm5hbCB1c2UpLgorICogQHByaXZhdGUKKyAqIEBwYXJh
bSBzcmMgU291cmNlIGFycmF5IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSBmcm9tIChzbWFsbGVyIHdo
ZW4gc3ltbWV0cmljKS4KKyAqIEBwYXJhbSBzbGVuIE51bWJlciBvZiBlbGVtZW50cyBpbiBAcCBz
cmMgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAwKS4KKyAqIEBwYXJhbSB0Z3QgVGFyZ2V0IGFycmF5
IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSB0by4KKyAqIEBwYXJhbSB0bGVuIE51bWJlciBvZiBlbGVt
ZW50cyBpbiBAcCB0Z3QgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAwKS4KKyAqIEByZXR1cm4gTGV2
ZW5zaHRlaW4gZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4uc2xlbi0xXSB0byBAcCB0Z3RbMC4udGxl
bi0xXS4KKyAqLworZWRfZGlzdCBlZGl0X2Rpc3RhbmNlX2xldihjb25zdCBlZF9lbGVtICpzcmMs
IGVkX3NpemUgc2xlbiwKKwkJCSAgY29uc3QgZWRfZWxlbSAqdGd0LCBlZF9zaXplIHRsZW4pOwor
CisvKioKKyAqIENhbGN1bGF0ZXMgbm9uLXRyaXZpYWwgUmVzdHJpY3RlZCBEYW1lcmF1LUxldmVu
c2h0ZWluIGRpc3RhbmNlIChmb3IgaW50ZXJuYWwKKyAqIHVzZSkuCisgKiBAcHJpdmF0ZQorICog
QHBhcmFtIHNyYyBTb3VyY2UgYXJyYXkgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIGZyb20gKHNtYWxs
ZXIgd2hlbiBzeW1tZXRyaWMpLgorICogQHBhcmFtIHNsZW4gTnVtYmVyIG9mIGVsZW1lbnRzIGlu
IEBwIHNyYyB0byBjb25zaWRlciAobXVzdCBiZSA+IDApLgorICogQHBhcmFtIHRndCBUYXJnZXQg
YXJyYXkgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIHRvLgorICogQHBhcmFtIHRsZW4gTnVtYmVyIG9m
IGVsZW1lbnRzIGluIEBwIHRndCB0byBjb25zaWRlciAobXVzdCBiZSA+IDApLgorICogQHJldHVy
biBSZXN0cmljdGVkIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4u
c2xlbi0xXSB0bworICogQHAgdGd0WzAuLnRsZW4tMV0uCisgKi8KK2VkX2Rpc3QgZWRpdF9kaXN0
YW5jZV9yZGwoY29uc3QgZWRfZWxlbSAqc3JjLCBlZF9zaXplIHNsZW4sCisJCQkgIGNvbnN0IGVk
X2VsZW0gKnRndCwgZWRfc2l6ZSB0bGVuKTsKKworLyoqCisgKiBDYWxjdWxhdGVzIG5vbi10cml2
aWFsIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgKGZvciBpbnRlcm5hbCB1c2UpLgorICog
QHByaXZhdGUKKyAqIEBwYXJhbSBzcmMgU291cmNlIGFycmF5IHRvIGNhbGN1bGF0ZSBkaXN0YW5j
ZSBmcm9tIChzbWFsbGVyIHdoZW4gc3ltbWV0cmljKS4KKyAqIEBwYXJhbSBzbGVuIE51bWJlciBv
ZiBlbGVtZW50cyBpbiBAcCBzcmMgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAwKS4KKyAqIEBwYXJh
bSB0Z3QgVGFyZ2V0IGFycmF5IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSB0by4KKyAqIEBwYXJhbSB0
bGVuIE51bWJlciBvZiBlbGVtZW50cyBpbiBAcCB0Z3QgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAw
KS4KKyAqIEByZXR1cm4gRGFtZXJhdS1MZXZlbnNodGVpbiBkaXN0YW5jZSBmcm9tIEBwIHNyY1sw
Li5zbGVuLTFdIHRvCisgKiBAcCB0Z3RbMC4udGxlbi0xXS4KKyAqLworZWRfZGlzdCBlZGl0X2Rp
c3RhbmNlX2RsKGNvbnN0IGVkX2VsZW0gKnNyYywgZWRfc2l6ZSBzbGVuLAorCQkJIGNvbnN0IGVk
X2VsZW0gKnRndCwgZWRfc2l6ZSB0bGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jY2FuL2Vk
aXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS5iaWIgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9k
aXN0YW5jZS5iaWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MDMxNAot
LS0gL2Rldi9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmJpYgpA
QCAtMCwwICsxLDU3IEBACitAYXJ0aWNsZXtCb3l0c292MTEsCisgIGRvaSA9IHsxMC4xMTQ1LzE5
NjMxOTAuMTk2MzE5MX0sCisgIHllYXIgPSB7MjAxMX0sCisgIG1vbnRoID0ge21heX0sCisgIHB1
Ymxpc2hlciA9IHtBc3NvY2lhdGlvbiBmb3IgQ29tcHV0aW5nIE1hY2hpbmVyeSAoe0FDTX0pfSwK
KyAgdm9sdW1lID0gezE2fSwKKyAgcGFnZXMgPSB7MX0sCisgIGF1dGhvciA9IHtMZW9uaWQgQm95
dHNvdn0sCisgIHRpdGxlID0ge0luZGV4aW5nIG1ldGhvZHMgZm9yIGFwcHJveGltYXRlIGRpY3Rp
b25hcnkgc2VhcmNoaW5nfSwKKyAgam91cm5hbCA9IHtKb3VybmFsIG9mIEV4cGVyaW1lbnRhbCBB
bGdvcml0aG1pY3N9Cit9CitAYXJ0aWNsZXtEYW1lcmF1NjQsCisgIGRvaSA9IHsxMC4xMTQ1LzM2
Mzk1OC4zNjM5OTR9LAorICB5ZWFyID0gezE5NjR9LAorICBtb250aCA9IHttYXJ9LAorICBwdWJs
aXNoZXIgPSB7QXNzb2NpYXRpb24gZm9yIENvbXB1dGluZyBNYWNoaW5lcnkgKHtBQ019KX0sCisg
IHZvbHVtZSA9IHs3fSwKKyAgbnVtYmVyID0gezN9LAorICBwYWdlcyA9IHsxNzEtLTE3Nn0sCisg
IGF1dGhvciA9IHtGcmVkIEouIERhbWVyYXV9LAorICB0aXRsZSA9IHtBIHRlY2huaXF1ZSBmb3Ig
Y29tcHV0ZXIgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9mIHNwZWxsaW5nIGVycm9yc30sCisg
IGpvdXJuYWwgPSB7Q29tbXVuaWNhdGlvbnMgb2YgdGhlIHtBQ019fQorfQorQGlucHJvY2VlZGlu
Z3N7TGV2ZW5zaHRlaW42NiwKKyAgdGl0bGUgPSB7QmluYXJ5IGNvZGVzIGNhcGFibGUgb2YgY29y
cmVjdGluZyBkZWxldGlvbnMsIGluc2VydGlvbnMgYW5kIHJldmVyc2Fsc30sCisgIGF1dGhvciA9
IHtWbGFkaW1pciBJLiBMZXZlbnNodGVpbn0sCisgIGJvb2t0aXRsZSA9IHtTb3ZpZXQgUGh5c2lj
cyBEb2tsYWR5fSwKKyAgdm9sdW1lID0gezEwfSwKKyAgbnVtYmVyID0gezh9LAorICBwYWdlcyA9
IHs3MDctLTcxMH0sCisgIHllYXIgPSB7MTk2Nn0sCisgIG1vbnRoID0ge2ZlYn0KK30KK0BhcnRp
Y2xle1dhZ25lcjc0LAorICBkb2kgPSB7MTAuMTE0NS8zMjE3OTYuMzIxODExfSwKKyAgeWVhciA9
IHsxOTc0fSwKKyAgbW9udGggPSB7amFufSwKKyAgcHVibGlzaGVyID0ge0Fzc29jaWF0aW9uIGZv
ciBDb21wdXRpbmcgTWFjaGluZXJ5ICh7QUNNfSl9LAorICB2b2x1bWUgPSB7MjF9LAorICBudW1i
ZXIgPSB7MX0sCisgIHBhZ2VzID0gezE2OC0tMTczfSwKKyAgYXV0aG9yID0ge1JvYmVydCBBLiBX
YWduZXIgYW5kIE1pY2hhZWwgSi4gRmlzY2hlcn0sCisgIHRpdGxlID0ge1RoZSBTdHJpbmctdG8t
U3RyaW5nIENvcnJlY3Rpb24gUHJvYmxlbX0sCisgIGpvdXJuYWwgPSB7Sm91cm5hbCBvZiB0aGUg
e0FDTX19Cit9CitAYXJ0aWNsZXtXYWduZXI3NSwKKyAgdGl0bGUgPSB7QW4gRXh0ZW5zaW9uIG9m
IHRoZSBTdHJpbmctdG8tU3RyaW5nIENvcnJlY3Rpb24gUHJvYmxlbX0sCisgIGF1dGhvciA9IHtS
b2JlcnQgQS4gV2FnbmVyIGFuZCBSb3kgTG93cmFuY2V9LAorICBqb3VybmFsID0ge0pvdXJuYWwg
b2YgdGhlIHtBQ019fSwKKyAgdm9sdW1lID0gezIyfSwKKyAgbnVtYmVyID0gezJ9LAorICBwYWdl
cyA9IHsxNzctLTE4M30sCisgIHllYXIgPSB7MTk3NX0sCisgIG1vbnRoID0ge2Fwcn0sCisgIHB1
Ymxpc2hlciA9IHtBc3NvY2lhdGlvbiBmb3IgQ29tcHV0aW5nIE1hY2hpbmVyeSAoe0FDTX0pfSwK
KyAgZG9pID0gezEwLjExNDUvMzIxODc5LjMyMTg4MH0KK30KZGlmZiAtLWdpdCBhL2NjYW4vZWRp
dF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmMgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0
YW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzc5ZDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS5jCkBAIC0wLDAg
KzEsMTE2IEBACisvKiogQGZpbGUKKyAqIERlZmluZXMgc2hhcmVkIGVkaXQgZGlzdGFuY2UgZnVu
Y3Rpb25zLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5s
b2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUg
Zm9yIGRldGFpbHMKKyAqLworI2luY2x1ZGUgImVkaXRfZGlzdGFuY2UtcGFyYW1zLmgiCisjaW5j
bHVkZSAiZWRpdF9kaXN0YW5jZS1wcml2YXRlLmgiCisKK2VkX2Rpc3QgZWRpdF9kaXN0YW5jZShj
b25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJICAgICAgY29uc3QgZWRfZWxlbSAq
dGd0LCBlZF9zaXplIHRsZW4sIGVudW0gZWRfbWVhc3VyZSBtZWFzdXJlKQoreworCS8qIFJlbW92
ZSBjb21tb24gcHJlZml4LiAqLworCXdoaWxlIChzbGVuID4gMCAmJiB0bGVuID4gMCAmJiBFRF9F
TEVNX0VRVUFMKHNyY1swXSwgdGd0WzBdKSkgeworCQkrK3NyYzsKKwkJKyt0Z3Q7CisJCS0tc2xl
bjsKKwkJLS10bGVuOworCX0KKworCS8qIFJlbW92ZSBjb21tb24gc3VmZml4LiAqLworCXdoaWxl
IChzbGVuID4gMCAmJiB0bGVuID4gMCAmJgorCSAgICAgICBFRF9FTEVNX0VRVUFMKHNyY1tzbGVu
IC0gMV0sIHRndFt0bGVuIC0gMV0pKSB7CisJCS0tc2xlbjsKKwkJLS10bGVuOworCX0KKworI2lm
IGRlZmluZWQoRURfQ09TVF9JU19TWU1NRVRSSUMpCisJLyogVXNlIHNtYWxsZXIgYXJyYXkgZm9y
IHNyYy4gKi8KKwlpZiAoc2xlbiA+IHRsZW4pIHsKKwkJRURfU1dBUChzcmMsIHRndCwgY29uc3Qg
ZWRfZWxlbSAqKTsKKwkJRURfU1dBUChzbGVuLCB0bGVuLCBlZF9zaXplKTsKKwl9CisjZW5kaWYK
KworCS8qIEVhcmx5IHJldHVybiB3aGVuIGFsbCBpbnNlcnRpb25zLiAqLworCWlmIChzbGVuID09
IDApIHsKKyNpZmRlZiBFRF9JTlNfQ09TVF9DT05TVAorCQlyZXR1cm4gKGVkX2Rpc3QpdGxlbiAq
RURfSU5TX0NPU1QoKTsKKyNlbHNlCisJCWVkX2Rpc3QgcmVzdWx0ID0gMDsKKwkJZm9yIChlZF9z
aXplIGkgPSAwOyBpIDwgdGxlbjsgKytpKSB7CisJCQlyZXN1bHQgKz0gRURfSU5TX0NPU1QodGd0
W2ldKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworI2VuZGlmCisJfQorI2lmbmRlZiBFRF9DT1NU
X0lTX1NZTU1FVFJJQworCS8qIEVhcmx5IHJldHVybiB3aGVuIGFsbCBkZWxldGlvbnMuICovCisJ
aWYgKHRsZW4gPT0gMCkgeworIyBpZmRlZiBFRF9ERUxfQ09TVF9DT05TVAorCQlyZXR1cm4gKGVk
X2Rpc3Qpc2xlbiAqRURfREVMX0NPU1QoKTsKKyMgZWxzZQorCQllZF9kaXN0IHJlc3VsdCA9IDA7
CisJCWZvciAoZWRfc2l6ZSBpID0gMDsgaSA8IHNsZW47ICsraSkgeworCQkJcmVzdWx0ICs9IEVE
X0RFTF9DT1NUKHNyY1tpXSk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKyMgZW5kaWYKKwl9Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoRURfSEFTX0VMRU0pICYmIFwKKwkJZGVmaW5lZChFRF9JTlNf
Q09TVF9DT05TVCkgJiYgXAorCQlkZWZpbmVkKEVEX1NVQl9DT1NUX0NPTlNUKQorCS8qIEZhc3Qg
c2VhcmNoIGZvciBzaW5nbGUtZWxlbWVudCBzb3VyY2UuICovCisJaWYgKHNsZW4gPT0gMSkgewor
CQkvKiBBbHdheXMgdGxlbiAtIDEgaW5zZXJ0cyAob2Ygbm9uLXNyYyBlbGVtZW50cykuICovCisJ
CWVkX2Rpc3QgcmVzdWx0ID0gKGVkX2Rpc3QpKHRsZW4gLSAxKSAqIEVEX0lOU19DT1NUKCk7CisJ
CWlmICghRURfSEFTX0VMRU0odGd0LCBzcmNbMF0sIHRsZW4pKSB7CisJCQlpZiAobWVhc3VyZSA9
PSBFRElUX0RJU1RBTkNFX0xDUykgeworCQkJCS8qIElmIHNyYyBpcyBub3QgcHJlc2VudCwgZGVs
ZXRlICsgaW5zZXJ0LiAqLworCQkJCXJlc3VsdCArPSBFRF9ERUxfQ09TVChzcmNbMF0pICsgRURf
SU5TX0NPU1QoKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSWYgc3JjIGlzIG5vdCBwcmVzZW50LCBz
dWJzdGl0dXRlIGl0IG91dC4gKi8KKwkJCQlyZXN1bHQgKz0gRURfU1VCX0NPU1QoLCk7CisJCQl9
CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVEX0NP
U1RfSVNfU1lNTUVUUklDKSAmJiBcCisJCWRlZmluZWQoRURfSEFTX0VMRU0pICYmIFwKKwkJZGVm
aW5lZChFRF9ERUxfQ09TVF9DT05TVCkgJiYgXAorCQlkZWZpbmVkKEVEX1NVQl9DT1NUX0NPTlNU
KQorCS8qIEZhc3Qgc2VhcmNoIGZvciBzaW5nbGUtZWxlbWVudCB0YXJnZXQuICovCisJaWYgKHRs
ZW4gPT0gMSkgeworCQkvKiBBbHdheXMgc2xlbiAtIDEgZGVsZXRlcyAob2Ygbm9uLXRndCBlbGVt
ZW50cykuICovCisJCWVkX2Rpc3QgcmVzdWx0ID0gKGVkX2Rpc3QpKHNsZW4gLSAxKSAqIEVEX0RF
TF9DT1NUKCk7CisJCWlmICghRURfSEFTX0VMRU0oc3JjLCB0Z3RbMF0sIHNsZW4pKSB7CisJCQlp
ZiAobWVhc3VyZSA9PSBFRElUX0RJU1RBTkNFX0xDUykgeworCQkJCS8qIElmIHRndCBpcyBub3Qg
cHJlc2VudCwgZGVsZXRlICsgaW5zZXJ0LiAqLworCQkJCXJlc3VsdCArPSBFRF9JTlNfQ09TVCh0
Z3RbMF0pICsgRURfREVMX0NPU1QoKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSWYgdGd0IGlzIG5v
dCBwcmVzZW50LCBzdWJzdGl0dXRlIGl0IG91dC4gKi8KKwkJCQlyZXN1bHQgKz0gRURfU1VCX0NP
U1QoLCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisjZW5kaWYKKworCXN3aXRj
aCAobWVhc3VyZSkgeworCWNhc2UgRURJVF9ESVNUQU5DRV9MQ1M6CisJCXJldHVybiBlZGl0X2Rp
c3RhbmNlX2xjcyhzcmMsIHNsZW4sIHRndCwgdGxlbik7CisJY2FzZSBFRElUX0RJU1RBTkNFX0xF
VjoKKwkJcmV0dXJuIGVkaXRfZGlzdGFuY2VfbGV2KHNyYywgc2xlbiwgdGd0LCB0bGVuKTsKKwlj
YXNlIEVESVRfRElTVEFOQ0VfUkRMOgorCQlyZXR1cm4gZWRpdF9kaXN0YW5jZV9yZGwoc3JjLCBz
bGVuLCB0Z3QsIHRsZW4pOworCWNhc2UgRURJVF9ESVNUQU5DRV9ETDoKKwkJcmV0dXJuIGVkaXRf
ZGlzdGFuY2VfZGwoc3JjLCBzbGVuLCB0Z3QsIHRsZW4pOworCX0KKworCXJldHVybiAoZWRfZGlz
dCktMTsKK30KZGlmZiAtLWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmgg
Yi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk4MmI5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlz
dGFuY2UvZWRpdF9kaXN0YW5jZS5oCkBAIC0wLDAgKzEsMTMxIEBACisvKiogQGZpbGUKKyAqIE1h
aW4gaGVhZGVyIGZpbGUgZm9yIGVkaXRfZGlzdGFuY2Ugd2hpY2ggZGVmaW5lcyB0aGUgbW9kdWxl
IEFQSS4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtldmluQGtldmlubG9j
a2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElDRU5TRSBmaWxlIGZv
ciBkZXRhaWxzCisgKi8KKyNpZm5kZWYgQ0NBTl9FRElUX0RJU1RBTkNFX0gKKyNkZWZpbmUgQ0NB
Tl9FRElUX0RJU1RBTkNFX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogc2l6ZV90ICovCisK
KyNpZm5kZWYgZWRfZGlzdAorLyoqCisgKiBlZF9kaXN0IC0gVHlwZSBpbiB3aGljaCB0aGUgZWRp
dCBkaXN0YW5jZSBpcyBleHByZXNzZWQuCisgKgorICogVGhlIG5hbWUgQGMgZWRfZGlzdCBjYW4g
YmUgZGVmaW5lZCB0byBhbm90aGVyIGFsZ2VicmFpYyB0eXBlIChvciB0aGlzCisgKiB0eXBlZGVm
IGNhbiBiZSBlZGl0ZWQpIHdoZW4gY29tcGlsaW5nIHRoaXMgbW9kdWxlLgorICovCit0eXBlZGVm
IHVuc2lnbmVkIGludCBlZF9kaXN0OworI2VuZGlmCisKKyNpZm5kZWYgZWRfZWxlbQorLyoqCisg
KiBlZF9lbGVtIC0gRWxlbWVudCB0eXBlIG9mIGFycmF5cyBmb3Igd2hpY2ggdGhlIGVkaXQgZGlz
dGFuY2UgaXMgY2FsY3VsYXRlZC4KKyAqCisgKiBDaGFuZ2luZyB0aGlzIHR5cGUgb2Z0ZW4gcmVx
dWlyZXMgY2hhbmdpbmcgI0VEX0hBU19FTEVNLCAjRURfSEFTSF9FTEVNLCBhbmQKKyAqICNFRF9I
QVNIX01BWC4gIEl0IHJlcXVpcmVzIGNoYW5naW5nICNFRF9FTEVNX0VRVUFMIGZvciBub24tcHJp
bWl0aXZlIHR5cGVzLgorICogVGhlc2UgY2FuIGJlIGNoYW5nZWQgaW4gZWRpdF9kaXN0YW5jZS1w
YXJhbXMuaCBvciBkZWZpbmVkIGV4dGVybmFsbHkuCisgKi8KK3R5cGVkZWYgY2hhciBlZF9lbGVt
OworI2VuZGlmCisKKyNpZm5kZWYgZWRfc2l6ZQorLyoqCisgKiBlZF9zaXplIC0gVHlwZSBpbiB3
aGljaCB0aGUgYXJyYXkgc2l6ZSBpcyBleHByZXNzZWQuCisgKgorICogVGhlIG5hbWUgQGMgZWRf
c2l6ZSBjYW4gYmUgZGVmaW5lZCB0byBhbm90aGVyIGFsZ2VicmFpYyB0eXBlIChvciB0aGlzCisg
KiB0eXBlZGVmIGNhbiBiZSBlZGl0ZWQpIHdoZW4gY29tcGlsaW5nIHRoaXMgbW9kdWxlLiAgSWYg
QGMgZWRfc2l6ZSBpcyBhCisgKiBzaWduZWQgdHlwZSwgdGhlIGNhbGxlciBtdXN0IGVuc3VyZSBw
YXNzZWQgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUuCisgKiBAYyBlZF9zaXplIG11c3QgYmUgbGFy
Z2UgZW5vdWdoIHRvIGhvbGQgQGMgbWF4KHNsZW4sdGxlbikrMiwgaXQgZG9lcyBub3QKKyAqIG5l
ZWQgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgQGMgc2xlbip0bGVuLgorICoKKyAqIE5vdGU6
IEBjIGVkX3NpemUgaXMgb25seSBsaWtlbHkgdG8gaGF2ZSBhIG5vdGljZWFibGUgaW1wYWN0IGlu
CisgKiBlZGl0X2Rpc3RhbmNlX2RsKCkgd2hpY2ggbWFpbnRhaW5zIGFuIGFycmF5IG9mIEBjICNF
RF9IQVNIX01BWCsxIDo6ZWRfc2l6ZQorICogdmFsdWVzLgorICovCit0eXBlZGVmIHVuc2lnbmVk
IGludCBlZF9zaXplOworI2VuZGlmCisKKy8qKgorICogZWRfbWVhc3VyZSAtIFN1cHBvcnRlZCBl
ZGl0IGRpc3RhbmNlIG1lYXN1cmVzLgorICovCitlbnVtIGVkX21lYXN1cmUgeworCS8qKgorCSAq
IExvbmdlc3QgQ29tbW9uIFN1YnNlcXVlbmNlIChMQ1MpIGRpc3RhbmNlLgorCSAqCisJICogVGhl
IExDUyBkaXN0YW5jZSBpcyBhbiBlZGl0IGRpc3RhbmNlIG1lYXN1cmVkIGJ5IHRoZSBudW1iZXIg
b2YKKwkgKiBpbnNlcnQgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIG5lY2Vzc2FyeSB0byB0dXJuIEBw
IHNyYyBpbnRvIEBwIHRndC4KKwkgKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBp
dGVyYXRpdmUgdmVyc2lvbiBvZiB0aGUgV2FnbmVyLUZpc2NoZXIKKwkgKiBhbGdvcml0aG0gQGNp
dGUgV2FnbmVyNzQgd2hpY2ggcmVxdWlyZXMgPGNvZGU+TyhzbGVuICogdGxlbik8L2NvZGU+CisJ
ICogdGltZSBhbmQgPGNvZGU+bWluKHNsZW4sIHRsZW4pICsgMTwvY29kZT4gc3BhY2UuCisJICov
CisJRURJVF9ESVNUQU5DRV9MQ1MgPSAxLAorCS8qKgorCSAqIExldmVuc2h0ZWluIGRpc3RhbmNl
LgorCSAqCisJICogVGhlIExldmVuc2h0ZWluIGRpc3RhbmNlIGlzIGFuIGVkaXQgZGlzdGFuY2Ug
bWVhc3VyZWQgYnkgdGhlIG51bWJlcgorCSAqIG9mIGluc2VydCwgZGVsZXRlLCBhbmQgc3Vic3Rp
dHV0ZSBvcGVyYXRpb25zIG5lY2Vzc2FyeSB0byB0dXJuCisJICogQHAgc3JjIGludG8gQHAgdGd0
IGFzIGRlc2NyaWJlZCBieSBWbGFkaW1pciBMZXZlbnNodGVpbi4KKwkgKiBAY2l0ZSBMZXZlbnNo
dGVpbjY2CisJICoKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYSBtb2RpZmllZCB2ZXJz
aW9uIG9mIHRoZSBXYWduZXItRmlzY2hlcgorCSAqIGFsZ29yaXRobSBAY2l0ZSBXYWduZXI3NCB3
aGljaCByZXF1aXJlcyA8Y29kZT5PKHNsZW4gKiB0bGVuKTwvY29kZT4KKwkgKiB0aW1lIGFuZCBv
bmx5IDxjb2RlPm1pbihzbGVuLCB0bGVuKSArIDE8L2NvZGU+IHNwYWNlLgorCSAqLworCUVESVRf
RElTVEFOQ0VfTEVWLAorCS8qKgorCSAqIFJlc3RyaWN0ZWQgRGFtZXJhdS1MZXZlbnNodGVpbiBk
aXN0YW5jZSAoYWthIE9wdGltYWwgU3RyaW5nCisJICogQWxpZ25tZW50IGRpc3RhbmNlKS4KKwkg
KgorCSAqIFRoZSBSZXN0cmljdGVkIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgaXMgYW4g
ZWRpdCBkaXN0YW5jZQorCSAqIG1lYXN1cmVkIGJ5IHRoZSBudW1iZXIgb2YgaW5zZXJ0LCBkZWxl
dGUsIHN1YnN0aXR1dGUsIGFuZCB0cmFuc3Bvc2UKKwkgKiBvcGVyYXRpb25zIG5lY2Vzc2FyeSB0
byB0dXJuIEBwIHNyYyBpbnRvIEBwIHRndCB3aXRoIHRoZSByZXN0cmljdGlvbgorCSAqIHRoYXQg
bm8gc3Vic3RyaW5nIGlzIGVkaXRlZCBtb3JlIHRoYW4gb25jZSAoZXF1aXZhbGVudGx5LCB0aGF0
IG5vCisJICogZWRpdHMgb3ZlcmxhcCkuIEBjaXRlIEJveXRzb3YxMQorCSAqCisJICogVGhpcyBp
bXBsZW1lbnRhdGlvbiB1c2VzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgV2FnbmVyLUZpc2No
ZXIKKwkgKiBhbGdvcml0aG0gQGNpdGUgV2FnbmVyNzQgd2hpY2ggcmVxdWlyZXMgPGNvZGU+Tyhz
bGVuICogdGxlbik8L2NvZGU+CisJICogdGltZSBhbmQgb25seSA8Y29kZT4yICogbWluKHNsZW4s
IHRsZW4pICsgMjwvY29kZT4gc3BhY2UuCisJICovCisJRURJVF9ESVNUQU5DRV9SREwsCisJLyoq
CisJICogRGFtZXJhdS1MZXZlbnNodGVpbiBkaXN0YW5jZS4KKwkgKgorCSAqIFRoZSBEYW1lcmF1
LUxldmVuc2h0ZWluIGRpc3RhbmNlIGlzIGFuIGVkaXQgZGlzdGFuY2UgbWVhc3VyZWQgYnkgdGhl
CisJICogbnVtYmVyIG9mIGluc2VydCwgZGVsZXRlLCBzdWJzdGl0dXRlLCBhbmQgdHJhbnNwb3Nl
IG9wZXJhdGlvbnMKKwkgKiBuZWNlc3NhcnkgdG8gdHVybiBAcCBzcmMgaW50byBAcCB0Z3QgLiBA
Y2l0ZSBEYW1lcmF1NjQKKwkgKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgTG93
cmFuY2UtV2FnbmVyIGFsZ29yaXRobSBAY2l0ZSBXYWduZXI3NQorCSAqIHdoaWNoIHRha2VzIDxj
b2RlPk8oc2xlbiAqIHRsZW4pPC9jb2RlPiB0aW1lIGFuZAorCSAqIDxjb2RlPk8oc2xlbiAqIHRs
ZW4pPC9jb2RlPiBzcGFjZS4KKwkgKi8KKwlFRElUX0RJU1RBTkNFX0RMLAorfTsKKworLyoqCisg
KiBlZGl0X2Rpc3RhbmNlIC0gQ2FsY3VsYXRlcyB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHR3
byBhcnJheXMuCisgKgorICogQHBhcmFtIHNyYyBTb3VyY2UgYXJyYXkgdG8gY2FsY3VsYXRlIGRp
c3RhbmNlIGZyb20uCisgKiBAcGFyYW0gc2xlbiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gQHAgc3Jj
IHRvIGNvbnNpZGVyLgorICogQHBhcmFtIHRndCBUYXJnZXQgYXJyYXkgdG8gY2FsY3VsYXRlIGRp
c3RhbmNlIHRvLgorICogQHBhcmFtIHRsZW4gTnVtYmVyIG9mIGVsZW1lbnRzIGluIEBwIHRndCB0
byBjb25zaWRlci4KKyAqIEBwYXJhbSBtZWFzdXJlIEVkaXQgZGlzdGFuY2UgbWVhc3VyZSB0byBj
YWxjdWxhdGUuCisgKiBAcmV0dXJuIEVkaXQgZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4uc2xlbi0x
XSB0byBAcCB0Z3RbMC4udGxlbi0xXS4gIChpLmUuCisgKiBUaGUgbWluaW1hbCBzdW0gb2YgdGhl
IHdlaWdodHMgb2YgdGhlIG9wZXJhdGlvbnMgbmVjZXNzYXJ5IHRvIGNvbnZlcnQKKyAqIEBwIHNy
Y1swLi5zbGVuLTFdIGludG8gQHAgdGd0WzAuLnRsZW4tMV0uKQorICoKKyAqIEBjb2RlCisgKiBF
eGFtcGxlOgorICogY29uc3QgY2hhciAqc291cmNlID0gImtpdHRlbiI7CisgKiBjb25zdCBjaGFy
ICp0YXJnZXQgPSAic2l0dGluZyI7CisgKiBhc3NlcnQoZWRpdF9kaXN0YW5jZShzb3VyY2UsIHN0
cmxlbihzb3VyY2UpLAorICogICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBzdHJsZW4odGFy
Z2V0KSwKKyAqICAgICAgICAgICAgICAgICAgICAgIEVESVRfRElTVEFOQ0VfREwpID09IDMpOwor
ICogRXhhbXBsZV9FbmQ6IEBlbmRjb2RlCisgKi8KK2VkX2Rpc3QgZWRpdF9kaXN0YW5jZShjb25z
dCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJICAgICAgY29uc3QgZWRfZWxlbSAqdGd0
LCBlZF9zaXplIHRsZW4sCisJCSAgICAgIGVudW0gZWRfbWVhc3VyZSBtZWFzdXJlKTsKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfZGwuYyBiL2Nj
YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX2RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZWQ2OTA1NAotLS0gL2Rldi9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0
YW5jZS9lZGl0X2Rpc3RhbmNlX2RsLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qKiBAZmlsZQorICog
RGVmaW5lcyBEYW1lcmF1LUxldmVuc2h0ZWluIGRpc3RhbmNlIGZ1bmN0aW9ucy4KKyAqCisgKiBA
Y29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtldmluQGtldmlubG9ja2UubmFtZT4KKyAqICAg
ICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzCisgKi8K
KyNpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIGZyZWUsIG1hbGxvYyAqLworCisjaW5jbHVkZSAiZWRp
dF9kaXN0YW5jZS5oIgorI2luY2x1ZGUgImVkaXRfZGlzdGFuY2UtcGFyYW1zLmgiCisjaW5jbHVk
ZSAiZWRpdF9kaXN0YW5jZS1wcml2YXRlLmgiCisKK2VkX2Rpc3QgZWRpdF9kaXN0YW5jZV9kbChj
b25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJCSBjb25zdCBlZF9lbGVtICp0Z3Qs
IGVkX3NpemUgdGxlbikKK3sKKwkvKiBPcHRpbWl6YXRpb246IEF2b2lkIG1hbGxvYyB3aGVuIGRp
c3RhbmNlIG1hdHJpeCBjYW4gZml0IG9uIHRoZSBzdGFjay4KKwkgKi8KKwllZF9kaXN0IHN0YWNr
ZGlzdFtFRF9TVEFDS19FTEVNU107CisKKwkvKiBMb3dyYW5jZS1XYWduZXIgZGlzdGFuY2UgbWF0
cml4LCBpbiByb3ctbWFqb3Igb3JkZXIuICovCisJc2l6ZV90IG1hdHNpemUgPSAoKHNpemVfdClz
bGVuICsgMikgKiAodGxlbiArIDIpOworCWVkX2Rpc3QgKmRpc3RtZW0gPSBtYXRzaXplIDw9IEVE
X1NUQUNLX0VMRU1TID8gc3RhY2tkaXN0IDoKKwkgICAgbWFsbG9jKG1hdHNpemUgKiBzaXplb2Yo
ZWRfZGlzdCkpOworCWVkX2Rpc3QgKmRpc3QgPSBkaXN0bWVtOworCisjaWZkZWYgRURfSEFTSF9P
Tl9TVEFDSworCWVkX3NpemUgbGFzdHRndFtFRF9IQVNIX01BWCArIDFdID0geyAwIH07CisjZWxz
ZQorCWVkX3NpemUgKmxhc3R0Z3QgPSBjYWxsb2MoRURfSEFTSF9NQVggKyAxLCBzaXplb2YoZWRf
c2l6ZSkpOworI2VuZGlmCisKKwkvKiBVcHBlciBib3VuZCBvbiBkaXN0YW5jZSBiZXR3ZWVuIHN0
cmluZ3MuICovCisJZWRfZGlzdCBtYXhkaXN0ID0gMDsKKworI2lmZGVmIEVEX0RFTF9DT1NUX0NP
TlNUCisJbWF4ZGlzdCArPSAoZWRfZGlzdClzbGVuICpFRF9ERUxfQ09TVCgpOworI2Vsc2UKKwkv
KiBMb3dlci10cmlhbmd1bGFyIG1hdHJpeCBvZiBkZWxldGlvbiBjb3N0cy4KKwkgKiBkZWxjb3N0
W2kyLCBpMV0gaXMgY29zdCB0byBkZWxldGUgc3JjW2kxLi5pMi0xXS4KKwkgKiBkZWxjb3N0W2ks
IGldIGlzIDAuICovCisJZWRfZGlzdCAqZGVsY29zdCA9IG1hbGxvYyhFRF9UTUFUX1NJWkUoc2xl
biArIDEpICogc2l6ZW9mKGVkX2Rpc3QpKTsKKwllZF9kaXN0ICpkZWxjb3N0aXRyID0gZGVsY29z
dDsKKwllZF9kaXN0ICpkZWxjb3N0cHJldml0ciA9IGRlbGNvc3Q7CisJKmRlbGNvc3RpdHIrKyA9
IDA7CisJZm9yIChlZF9zaXplIGkyID0gMTsgaTIgPD0gc2xlbjsgKytpMikgeworCQllZF9kaXN0
IGNvc3RpMiA9IEVEX0RFTF9DT1NUKHNyY1tpMiAtIDFdKTsKKwkJZm9yIChlZF9zaXplIGkxID0g
MDsgaTEgPCBpMjsgKytpMSkgeworCQkJKmRlbGNvc3RpdHIrKyA9ICpkZWxjb3N0cHJldml0cisr
ICsgY29zdGkyOworCQl9CisJCSpkZWxjb3N0aXRyKysgPSAwOworCX0KKwltYXhkaXN0ICs9IGRl
bGNvc3RbRURfVE1BVF9JTkQoc2xlbiwgMCldOworI2VuZGlmCisKKyNpZmRlZiBFRF9JTlNfQ09T
VF9DT05TVAorCW1heGRpc3QgKz0gKGVkX2Rpc3QpdGxlbiAqRURfSU5TX0NPU1QoKTsKKyNlbHNl
CisJLyogTG93ZXItdHJpYW5ndWxhciBtYXRyaXggb2YgaW5zZXJ0aW9uIGNvc3RzLgorCSAqIGlu
c2Nvc3RbajIsIGoxXSBpcyBjb3N0IHRvIGluc2VydCB0Z3RbajEuLmoyLTFdLgorCSAqIGluc2Nv
c3Rbaiwgal0gaXMgMC4gKi8KKwllZF9kaXN0ICppbnNjb3N0ID0gbWFsbG9jKEVEX1RNQVRfU0la
RSh0bGVuICsgMSkgKiBzaXplb2YoZWRfZGlzdCkpOworCWVkX2Rpc3QgKmluc2Nvc3RpdHIgPSBp
bnNjb3N0OworCWVkX2Rpc3QgKmluc2Nvc3RwcmV2aXRyID0gaW5zY29zdDsKKwkqaW5zY29zdGl0
cisrID0gMDsKKwlmb3IgKGVkX3NpemUgajIgPSAxOyBqMiA8PSB0bGVuOyArK2oyKSB7CisJCWVk
X2Rpc3QgY29zdGoyID0gRURfSU5TX0NPU1QodGd0W2oyIC0gMV0pOworCQlmb3IgKGVkX3NpemUg
ajEgPSAwOyBqMSA8IGoyOyArK2oxKSB7CisJCQkqaW5zY29zdGl0cisrID0gKmluc2Nvc3RwcmV2
aXRyKysgKyBjb3N0ajI7CisJCX0KKwkJKmluc2Nvc3RpdHIrKyA9IDA7CisJfQorCW1heGRpc3Qg
Kz0gaW5zY29zdFtFRF9UTUFUX0lORCh0bGVuLCAwKV07CisjZW5kaWYKKworCS8qIEluaXRpYWxp
emUgZmlyc3Qgcm93IHdpdGggbWF4aW1hbCBjb3N0ICovCisJZm9yIChlZF9zaXplIGkgPSAwOyBp
IDwgc2xlbiArIDI7ICsraSkgeworCQlkaXN0W2ldID0gbWF4ZGlzdDsKKwl9CisKKwkvKiBQb3Np
dGlvbiBkaXN0IHRvIG1hdGNoIG90aGVyIGFsZ29yaXRobXMuICBkaXN0Wy0xXSB3aWxsIGJlIG1h
eGRpc3QgKi8KKwlkaXN0ICs9IHNsZW4gKyAzOworCisJLyogSW5pdGlhbGl6ZSByb3cgd2l0aCBj
b3N0IHRvIGRlbGV0ZSBzcmNbMC4uaS0xXSAqLworCWRpc3RbLTFdID0gbWF4ZGlzdDsKKwlkaXN0
WzBdID0gMDsKKwlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xlbjsgKytpKSB7CisJCWRpc3Rb
aV0gPSBkaXN0W2kgLSAxXSArIEVEX0RFTF9DT1NUKHNyY1tpIC0gMV0pOworCX0KKworCWZvciAo
ZWRfc2l6ZSBqID0gMTsgaiA8PSB0bGVuOyArK2opIHsKKwkJLyogTGFyZ2VzdCB5IDwgaSBzdWNo
IHRoYXQgc3JjW3ldID0gdGd0W2pdICovCisJCWVkX3NpemUgbGFzdHNyYyA9IDA7CisJCWVkX2Rp
c3QgKnByZXZkaXN0ID0gZGlzdDsKKwkJZGlzdCArPSBzbGVuICsgMjsKKwkJZGlzdFstMV0gPSBt
YXhkaXN0OworCQlkaXN0WzBdID0gcHJldmRpc3RbMF0gKyBFRF9JTlNfQ09TVCh0Z3RbaiAtIDFd
KTsKKworCQkvKiBMb29wIGludmFyaWFudDogZGlzdFtpXSBpcyB0aGUgZWRpdCBkaXN0YW5jZSBi
ZXR3ZWVuIGZpcnN0IGoKKwkJICogZWxlbWVudHMgb2YgdGd0IGFuZCBmaXJzdCBpIGVsZW1lbnRz
IG9mIHNyYy4KKwkJICoKKwkJICogTG9vcCBpbnZhcmlhbnQ6IGxhc3R0Z3RbRURfSEFTSF9FTEVN
KGMpXSBob2xkcyB0aGUgbGFyZ2VzdAorCQkgKiB4IDwgaiBzdWNoIHRoYXQgdGd0W3gtMV0gPSBj
IG9yIDAgaWYgbm8gc3VjaCB4IGV4aXN0cy4KKwkJICovCisJCWZvciAoZWRfc2l6ZSBpID0gMTsg
aSA8PSBzbGVuOyArK2kpIHsKKwkJCWVkX3NpemUgaTEgPSBsYXN0c3JjOworCQkJZWRfc2l6ZSBq
MSA9IGxhc3R0Z3RbRURfSEFTSF9FTEVNKHNyY1tpIC0gMV0pXTsKKworCQkJaWYgKEVEX0VMRU1f
RVFVQUwoc3JjW2kgLSAxXSwgdGd0W2ogLSAxXSkpIHsKKwkJCQkvKiBTYW1lIGFzIHRndCB1cHRv
IGotMiwgc3JjIHVwdG8gaS0yLiAqLworCQkJCWRpc3RbaV0gPSBwcmV2ZGlzdFtpIC0gMV07CisJ
CQkJbGFzdHNyYyA9IGk7CisJCQl9IGVsc2UgeworCQkJCS8qIEluc2VydGlvbiBpcyB0Z3QgdXB0
byBqLTIsIHNyYyB1cHRvIGktMQorCQkJCSAqICsgaW5zZXJ0IHRndFtqLTFdICovCisJCQkJZWRf
ZGlzdCBpbnNkaXN0ID0KKwkJCQkgICAgcHJldmRpc3RbaV0gKyBFRF9JTlNfQ09TVCh0Z3RbaiAt
IDFdKTsKKworCQkJCS8qIERlbGV0aW9uIGlzIHRndCB1cHRvIGotMSwgc3JjIHVwdG8gaS0yCisJ
CQkJICogKyBkZWxldGUgc3JjW2ktMV0gKi8KKwkJCQllZF9kaXN0IGRlbGRpc3QgPQorCQkJCSAg
ICBkaXN0W2kgLSAxXSArIEVEX0RFTF9DT1NUKHNyY1tpIC0gMV0pOworCisJCQkJLyogU3Vic3Rp
dHV0aW9uIGlzIHRndCB1cHRvIGotMiwgc3JjIHVwdG8gaS0yCisJCQkJICogKyBzdWJzdGl0dXRl
IHRndFtqLTFdIGZvciBzcmNbaS0xXSAqLworCQkJCWVkX2Rpc3Qgc3ViZGlzdCA9IHByZXZkaXN0
W2kgLSAxXSArCisJCQkJICAgIEVEX1NVQl9DT1NUKHNyY1tpIC0gMV0sIHRndFtqIC0gMV0pOwor
CisJCQkJLyogVXNlIGJlc3QgZGlzdGFuY2UgYXZhaWxhYmxlICovCisJCQkJZGlzdFtpXSA9IEVE
X01JTjMoaW5zZGlzdCwgZGVsZGlzdCwgc3ViZGlzdCk7CisKKwkJCQllZF9kaXN0IHN3cGRpc3Qg
PQorCQkJCSAgICBkaXN0bWVtWyhzaXplX3QpajEgKiAoc2xlbiArIDIpICsgaTFdOworI2lmZGVm
IEVEX0lOU19DT1NUX0NPTlNUCisJCQkJc3dwZGlzdCArPQorCQkJCSAgICAoZWRfZGlzdCkoaiAt
IGoxIC0gMSkgKiBFRF9JTlNfQ09TVCgpOworI2Vsc2UKKwkJCQlzd3BkaXN0ICs9IGluc2Nvc3Rb
RURfVE1BVF9JTkQoaiAtIDEsIGoxKV07CisjZW5kaWYKKyNpZmRlZiBFRF9UUkFfQ09TVF9DT05T
VAorCQkJCXN3cGRpc3QgKz0gRURfVFJBX0NPU1QoLCk7CisjZWxzZQorCQkJCWlmIChpMSA+IDAp
IHsKKwkJCQkJc3dwZGlzdCArPQorCQkJCQkgICAgRURfVFJBX0NPU1Qoc3JjW2kxIC0gMV0sCisJ
CQkJCQkJc3JjW2kgLSAxXSk7CisJCQkJfQorI2VuZGlmCisjaWZkZWYgRURfREVMX0NPU1RfQ09O
U1QKKwkJCQlzd3BkaXN0ICs9CisJCQkJICAgIChlZF9kaXN0KShpIC0gaTEgLSAxKSAqIEVEX0RF
TF9DT1NUKCk7CisjZWxzZQorCQkJCXN3cGRpc3QgKz0gZGVsY29zdFtFRF9UTUFUX0lORChpIC0g
MSwgaTEpXTsKKyNlbmRpZgorCisJCQkJZGlzdFtpXSA9IEVEX01JTjIoZGlzdFtpXSwgc3dwZGlz
dCk7CisJCQl9CisJCX0KKworCQlsYXN0dGd0W0VEX0hBU0hfRUxFTSh0Z3RbaiAtIDFdKV0gPSBq
OworCX0KKworI2lmbmRlZiBFRF9IQVNIX09OX1NUQUNLCisJZnJlZShsYXN0dGd0KTsKKyNlbmRp
ZgorCisjaWZuZGVmIEVEX0RFTF9DT1NUX0NPTlNUCisJZnJlZShkZWxjb3N0KTsKKyNlbmRpZgor
CisjaWZuZGVmIEVEX0lOU19DT1NUX0NPTlNUCisJZnJlZShpbnNjb3N0KTsKKyNlbmRpZgorCisJ
ZWRfZGlzdCB0b3RhbCA9IGRpc3Rbc2xlbl07CisJaWYgKGRpc3RtZW0gIT0gc3RhY2tkaXN0KSB7
CisJCWZyZWUoZGlzdG1lbSk7CisJfQorCXJldHVybiB0b3RhbDsKK30KZGlmZiAtLWdpdCBhL2Nj
YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX2xjcy5jIGIvY2Nhbi9lZGl0X2Rpc3RhbmNl
L2VkaXRfZGlzdGFuY2VfbGNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTYxMmM3MwotLS0gL2Rldi9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3Rh
bmNlX2xjcy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKiBAZmlsZQorICogRGVmaW5lcyBMb25nZXN0
IENvbW1vbiBTdWJzZXF1ZW5jZSBkaXN0YW5jZSBmdW5jdGlvbnMuCisgKgorICogQGNvcHlyaWdo
dCAyMDE2IEtldmluIExvY2tlIDxrZXZpbkBrZXZpbmxvY2tlLm5hbWU+CisgKiAgICAgICAgICAg
IE1JVCBsaWNlbnNlIC0gc2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscworICovCisjaW5jbHVk
ZSA8c3RkbGliLmg+CQkvKiBmcmVlLCBtYWxsb2MgKi8KKworI2luY2x1ZGUgImVkaXRfZGlzdGFu
Y2UuaCIKKyNpbmNsdWRlICJlZGl0X2Rpc3RhbmNlLXBhcmFtcy5oIgorI2luY2x1ZGUgImVkaXRf
ZGlzdGFuY2UtcHJpdmF0ZS5oIgorCitlZF9kaXN0IGVkaXRfZGlzdGFuY2VfbGNzKGNvbnN0IGVk
X2VsZW0gKnNyYywgZWRfc2l6ZSBzbGVuLAorCQkJICBjb25zdCBlZF9lbGVtICp0Z3QsIGVkX3Np
emUgdGxlbikKK3sKKwkvKiBPcHRpbWl6YXRpb246IEF2b2lkIG1hbGxvYyB3aGVuIHJvdyBvZiBk
aXN0YW5jZSBtYXRyaXggY2FuIGZpdCBvbgorCSAqIHRoZSBzdGFjay4KKwkgKi8KKwllZF9kaXN0
IHN0YWNrZGlzdFtFRF9TVEFDS19FTEVNU107CisKKwkvKiBPbmUgcm93IG9mIHRoZSBXYWduZXIt
RmlzY2hlciBkaXN0YW5jZSBtYXRyaXguICovCisJZWRfZGlzdCAqZGlzdCA9IHNsZW4gPCBFRF9T
VEFDS19FTEVNUyA/IHN0YWNrZGlzdCA6CisJICAgIG1hbGxvYygoc2xlbiArIDEpICogc2l6ZW9m
KGVkX2Rpc3QpKTsKKworCS8qIEluaXRpYWxpemUgcm93IHdpdGggY29zdCB0byBkZWxldGUgc3Jj
WzAuLmktMV0gKi8KKwlkaXN0WzBdID0gMDsKKwlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xl
bjsgKytpKSB7CisJCWRpc3RbaV0gPSBkaXN0W2kgLSAxXSArIEVEX0RFTF9DT1NUKHNyY1tpIC0g
MV0pOworCX0KKworCWZvciAoZWRfc2l6ZSBqID0gMTsgaiA8PSB0bGVuOyArK2opIHsKKwkJLyog
VmFsdWUgZm9yIGRpc3Rbai0xXVtpLTFdIChvbmUgcm93IHVwLCBvbmUgY29sIGxlZnQpLiAqLwor
CQllZF9kaXN0IGRpYWdkaXN0ID0gZGlzdFswXTsKKwkJZGlzdFswXSA9IGRpc3RbMF0gKyBFRF9J
TlNfQ09TVCh0Z3RbaiAtIDFdKTsKKworCQkvKiBMb29wIGludmFyaWFudDogZGlzdFtpXSBpcyB0
aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIGZpcnN0IGoKKwkJICogZWxlbWVudHMgb2YgdGd0IGFu
ZCBmaXJzdCBpIGVsZW1lbnRzIG9mIHNyYy4KKwkJICovCisJCWZvciAoZWRfc2l6ZSBpID0gMTsg
aSA8PSBzbGVuOyArK2kpIHsKKwkJCWVkX2Rpc3QgbmV4dGRpYWdkaXN0ID0gZGlzdFtpXTsKKwor
CQkJaWYgKEVEX0VMRU1fRVFVQUwoc3JjW2kgLSAxXSwgdGd0W2ogLSAxXSkpIHsKKwkJCQkvKiBT
YW1lIGFzIHRndCB1cHRvIGotMiwgc3JjIHVwdG8gaS0yLiAqLworCQkJCWRpc3RbaV0gPSBkaWFn
ZGlzdDsKKwkJCX0gZWxzZSB7CisJCQkJLyogSW5zZXJ0aW9uIGlzIHRndCB1cHRvIGotMiwgc3Jj
IHVwdG8gaS0xCisJCQkJICogKyBpbnNlcnQgdGd0W2otMV0gKi8KKwkJCQllZF9kaXN0IGluc2Rp
c3QgPQorCQkJCSAgICBkaXN0W2ldICsgRURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJCQkv
KiBEZWxldGlvbiBpcyB0Z3QgdXB0byBqLTEsIHNyYyB1cHRvIGktMgorCQkJCSAqICsgZGVsZXRl
IHNyY1tpLTFdICovCisJCQkJZWRfZGlzdCBkZWxkaXN0ID0KKwkJCQkgICAgZGlzdFtpIC0gMV0g
KyBFRF9ERUxfQ09TVChzcmNbaSAtIDFdKTsKKworCQkJCS8qIFVzZSBiZXN0IGRpc3RhbmNlIGF2
YWlsYWJsZSAqLworCQkJCWRpc3RbaV0gPSBFRF9NSU4yKGluc2Rpc3QsIGRlbGRpc3QpOworCQkJ
fQorCisJCQlkaWFnZGlzdCA9IG5leHRkaWFnZGlzdDsKKwkJfQorCX0KKworCWVkX2Rpc3QgdG90
YWwgPSBkaXN0W3NsZW5dOworCWlmIChkaXN0ICE9IHN0YWNrZGlzdCkgeworCQlmcmVlKGRpc3Qp
OworCX0KKwlyZXR1cm4gdG90YWw7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRfZGlzdGFuY2Uv
ZWRpdF9kaXN0YW5jZV9sZXYuYyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX2xl
di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MzhjNmQKLS0tIC9kZXYv
bnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sZXYuYwpAQCAtMCww
ICsxLDc0IEBACisvKiogQGZpbGUKKyAqIERlZmluZXMgTGV2ZW5zaHRlaW4gZGlzdGFuY2UgZnVu
Y3Rpb25zLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5s
b2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUg
Zm9yIGRldGFpbHMKKyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLyogZnJlZSwgbWFsbG9jICov
CisKKyNpbmNsdWRlICJlZGl0X2Rpc3RhbmNlLmgiCisjaW5jbHVkZSAiZWRpdF9kaXN0YW5jZS1w
YXJhbXMuaCIKKyNpbmNsdWRlICJlZGl0X2Rpc3RhbmNlLXByaXZhdGUuaCIKKworZWRfZGlzdCBl
ZGl0X2Rpc3RhbmNlX2xldihjb25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJCSAg
Y29uc3QgZWRfZWxlbSAqdGd0LCBlZF9zaXplIHRsZW4pCit7CisJLyogT3B0aW1pemF0aW9uOiBB
dm9pZCBtYWxsb2Mgd2hlbiByb3cgb2YgZGlzdGFuY2UgbWF0cml4IGNhbiBmaXQgb24KKwkgKiB0
aGUgc3RhY2suCisJICovCisJZWRfZGlzdCBzdGFja2Rpc3RbRURfU1RBQ0tfRUxFTVNdOworCisJ
LyogT25lIHJvdyBvZiB0aGUgV2FnbmVyLUZpc2NoZXIgZGlzdGFuY2UgbWF0cml4LiAqLworCWVk
X2Rpc3QgKmRpc3QgPSBzbGVuIDwgRURfU1RBQ0tfRUxFTVMgPyBzdGFja2Rpc3QgOgorCSAgICBt
YWxsb2MoKHNsZW4gKyAxKSAqIHNpemVvZihlZF9kaXN0KSk7CisKKwkvKiBJbml0aWFsaXplIHJv
dyB3aXRoIGNvc3QgdG8gZGVsZXRlIHNyY1swLi5pLTFdICovCisJZGlzdFswXSA9IDA7CisJZm9y
IChlZF9zaXplIGkgPSAxOyBpIDw9IHNsZW47ICsraSkgeworCQlkaXN0W2ldID0gZGlzdFtpIC0g
MV0gKyBFRF9ERUxfQ09TVChzcmNbaSAtIDFdKTsKKwl9CisKKwlmb3IgKGVkX3NpemUgaiA9IDE7
IGogPD0gdGxlbjsgKytqKSB7CisJCS8qIFZhbHVlIGZvciBkaXN0W2otMV1baS0xXSAob25lIHJv
dyB1cCwgb25lIGNvbCBsZWZ0KS4gKi8KKwkJZWRfZGlzdCBkaWFnZGlzdCA9IGRpc3RbMF07CisJ
CWRpc3RbMF0gPSBkaXN0WzBdICsgRURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJLyogTG9v
cCBpbnZhcmlhbnQ6IGRpc3RbaV0gaXMgdGhlIGVkaXQgZGlzdGFuY2UgYmV0d2VlbiBmaXJzdCBq
CisJCSAqIGVsZW1lbnRzIG9mIHRndCBhbmQgZmlyc3QgaSBlbGVtZW50cyBvZiBzcmMuCisJCSAq
LworCQlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xlbjsgKytpKSB7CisJCQllZF9kaXN0IG5l
eHRkaWFnZGlzdCA9IGRpc3RbaV07CisKKwkJCWlmIChFRF9FTEVNX0VRVUFMKHNyY1tpIC0gMV0s
IHRndFtqIC0gMV0pKSB7CisJCQkJLyogU2FtZSBhcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGkt
Mi4gKi8KKwkJCQlkaXN0W2ldID0gZGlhZ2Rpc3Q7CisJCQl9IGVsc2UgeworCQkJCS8qIEluc2Vy
dGlvbiBpcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGktMQorCQkJCSAqICsgaW5zZXJ0IHRndFtq
LTFdICovCisJCQkJZWRfZGlzdCBpbnNkaXN0ID0KKwkJCQkgICAgZGlzdFtpXSArIEVEX0lOU19D
T1NUKHRndFtqIC0gMV0pOworCisJCQkJLyogRGVsZXRpb24gaXMgdGd0IHVwdG8gai0xLCBzcmMg
dXB0byBpLTIKKwkJCQkgKiArIGRlbGV0ZSBzcmNbaS0xXSAqLworCQkJCWVkX2Rpc3QgZGVsZGlz
dCA9CisJCQkJICAgIGRpc3RbaSAtIDFdICsgRURfREVMX0NPU1Qoc3JjW2kgLSAxXSk7CisKKwkJ
CQkvKiBTdWJzdGl0dXRpb24gaXMgdGd0IHVwdG8gai0yLCBzcmMgdXB0byBpLTIKKwkJCQkgKiAr
IHN1YnN0aXR1dGUgdGd0W2otMV0gZm9yIHNyY1tpLTFdICovCisJCQkJZWRfZGlzdCBzdWJkaXN0
ID0gZGlhZ2Rpc3QgKworCQkJCSAgICBFRF9TVUJfQ09TVChzcmNbaSAtIDFdLCB0Z3RbaiAtIDFd
KTsKKworCQkJCS8qIFVzZSBiZXN0IGRpc3RhbmNlIGF2YWlsYWJsZSAqLworCQkJCWRpc3RbaV0g
PSBFRF9NSU4zKGluc2Rpc3QsIGRlbGRpc3QsIHN1YmRpc3QpOworCQkJfQorCisJCQlkaWFnZGlz
dCA9IG5leHRkaWFnZGlzdDsKKwkJfQorCX0KKworCWVkX2Rpc3QgdG90YWwgPSBkaXN0W3NsZW5d
OworCWlmIChkaXN0ICE9IHN0YWNrZGlzdCkgeworCQlmcmVlKGRpc3QpOworCX0KKwlyZXR1cm4g
dG90YWw7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9y
ZGwuYyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX3JkbC5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmEzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jY2Fu
L2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9yZGwuYwpAQCAtMCwwICsxLDk4IEBACisvKiog
QGZpbGUKKyAqIERlZmluZXMgUmVzdHJpY3RlZCBEYW1lcmF1LUxldmVuc2h0ZWluIGRpc3RhbmNl
IGZ1bmN0aW9ucy4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtldmluQGtl
dmlubG9ja2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElDRU5TRSBm
aWxlIGZvciBkZXRhaWxzCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIGZyZWUsIG1hbGxv
YyAqLworCisjaW5jbHVkZSAiZWRpdF9kaXN0YW5jZS5oIgorI2luY2x1ZGUgImVkaXRfZGlzdGFu
Y2UtcGFyYW1zLmgiCisjaW5jbHVkZSAiZWRpdF9kaXN0YW5jZS1wcml2YXRlLmgiCisKK2VkX2Rp
c3QgZWRpdF9kaXN0YW5jZV9yZGwoY29uc3QgZWRfZWxlbSAqc3JjLCBlZF9zaXplIHNsZW4sCisJ
CQkgIGNvbnN0IGVkX2VsZW0gKnRndCwgZWRfc2l6ZSB0bGVuKQoreworCS8qIE9wdGltaXphdGlv
bjogQXZvaWQgbWFsbG9jIHdoZW4gcmVxdWlyZWQgcm93cyBvZiBkaXN0YW5jZSBtYXRyaXggY2Fu
CisJICogZml0IG9uIHRoZSBzdGFjay4KKwkgKi8KKwllZF9kaXN0IHN0YWNrZGlzdFtFRF9TVEFD
S19FTEVNU107CisKKwkvKiBUd28gcm93cyBvZiB0aGUgV2FnbmVyLUZpc2NoZXIgZGlzdGFuY2Ug
bWF0cml4LiAqLworCWVkX2Rpc3QgKmRpc3RtZW0sICpkaXN0LCAqcHJldmRpc3Q7CisJaWYgKHNs
ZW4gPCBFRF9TVEFDS19FTEVNUyAvIDIpIHsKKwkJZGlzdG1lbSA9IHN0YWNrZGlzdDsKKwkJZGlz
dCA9IGRpc3RtZW07CisJCXByZXZkaXN0ID0gZGlzdG1lbSArIHNsZW4gKyAxOworCX0gZWxzZSB7
CisJCWRpc3RtZW0gPSBtYWxsb2MoKHNsZW4gKyAxKSAqIHNpemVvZihlZF9kaXN0KSAqIDIpOwor
CQlkaXN0ID0gZGlzdG1lbTsKKwkJcHJldmRpc3QgPSBkaXN0bWVtICsgc2xlbiArIDE7CisJfQor
CisJLyogSW5pdGlhbGl6ZSByb3cgd2l0aCBjb3N0IHRvIGRlbGV0ZSBzcmNbMC4uaS0xXSAqLwor
CWRpc3RbMF0gPSAwOworCWZvciAoZWRfc2l6ZSBpID0gMTsgaSA8PSBzbGVuOyArK2kpIHsKKwkJ
ZGlzdFtpXSA9IGRpc3RbaSAtIDFdICsgRURfREVMX0NPU1Qoc3JjW2kgLSAxXSk7CisJfQorCisJ
Zm9yIChlZF9zaXplIGogPSAxOyBqIDw9IHRsZW47ICsraikgeworCQkvKiBWYWx1ZSBmb3IgZGlz
dFtqLTJdW2ktMV0gKHR3byByb3dzIHVwLCBvbmUgY29sIGxlZnQpLiAqLworCQkvKiBOb3RlOiBk
aXN0WzBdIGlzIG5vdCBpbml0aWFsaXplZCB3aGVuIGogPT0gMSwgdmFyIHVudXNlZC4gKi8KKwkJ
ZWRfZGlzdCBkaWFnZGlzdDEgPSBwcmV2ZGlzdFswXTsKKwkJLyogVmFsdWUgZm9yIGRpc3Rbai0y
XVtpLTJdICh0d28gcm93cyB1cCwgdHdvIGNvbHMgbGVmdCkuCisJCSAqIEluaXRpYWxpemF0aW9u
IHZhbHVlIG9ubHkgdXNlZCB0byBwbGFjYXRlIEdDQy4gKi8KKwkJZWRfZGlzdCBkaWFnZGlzdDIg
PSAwOworCisJCUVEX1NXQVAoZGlzdCwgcHJldmRpc3QsIGVkX2Rpc3QgKik7CisKKwkJZGlzdFsw
XSA9IHByZXZkaXN0WzBdICsgRURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJLyogTG9vcCBp
bnZhcmlhbnQ6IGRpc3RbaV0gaXMgdGhlIGVkaXQgZGlzdGFuY2UgYmV0d2VlbiBmaXJzdCBqCisJ
CSAqIGVsZW1lbnRzIG9mIHRndCBhbmQgZmlyc3QgaSBlbGVtZW50cyBvZiBzcmMuCisJCSAqLwor
CQlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xlbjsgKytpKSB7CisJCQllZF9kaXN0IG5leHRk
aWFnZGlzdCA9IGRpc3RbaV07CisKKwkJCWlmIChFRF9FTEVNX0VRVUFMKHNyY1tpIC0gMV0sIHRn
dFtqIC0gMV0pKSB7CisJCQkJLyogU2FtZSBhcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGktMi4g
Ki8KKwkJCQlkaXN0W2ldID0gcHJldmRpc3RbaSAtIDFdOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJ
bnNlcnRpb24gaXMgdGd0IHVwdG8gai0yLCBzcmMgdXB0byBpLTEKKwkJCQkgKiArIGluc2VydCB0
Z3Rbai0xXSAqLworCQkJCWVkX2Rpc3QgaW5zZGlzdCA9CisJCQkJICAgIHByZXZkaXN0W2ldICsg
RURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJCQkvKiBEZWxldGlvbiBpcyB0Z3QgdXB0byBq
LTEsIHNyYyB1cHRvIGktMgorCQkJCSAqICsgZGVsZXRlIHNyY1tpLTFdICovCisJCQkJZWRfZGlz
dCBkZWxkaXN0ID0KKwkJCQkgICAgZGlzdFtpIC0gMV0gKyBFRF9ERUxfQ09TVChzcmNbaSAtIDFd
KTsKKworCQkJCS8qIFN1YnN0aXR1dGlvbiBpcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGktMgor
CQkJCSAqICsgc3Vic3RpdHV0ZSB0Z3Rbai0xXSBmb3Igc3JjW2ktMV0gKi8KKwkJCQllZF9kaXN0
IHN1YmRpc3QgPSBwcmV2ZGlzdFtpIC0gMV0gKworCQkJCSAgICBFRF9TVUJfQ09TVChzcmNbaSAt
IDFdLCB0Z3RbaiAtIDFdKTsKKworCQkJCS8qIFVzZSBiZXN0IGRpc3RhbmNlIGF2YWlsYWJsZSAq
LworCQkJCWRpc3RbaV0gPSBFRF9NSU4zKGluc2Rpc3QsIGRlbGRpc3QsIHN1YmRpc3QpOworCisJ
CQkJaWYgKGogPiAxICYmIGkgPiAxICYmCisJCQkJICAgIEVEX0VMRU1fRVFVQUwoc3JjW2kgLSAy
XSwgdGd0W2ogLSAxXSkgJiYKKwkJCQkgICAgRURfRUxFTV9FUVVBTChzcmNbaSAtIDFdLCB0Z3Rb
aiAtIDJdKSkgeworCQkJCQllZF9kaXN0IHRyYWRpc3QgPSBkaWFnZGlzdDIgKworCQkJCQkgICAg
RURfVFJBX0NPU1Qoc3JjW2ogLSAyXSwgc3JjW2ogLSAxXSk7CisJCQkJCWRpc3RbaV0gPSBFRF9N
SU4yKGRpc3RbaV0sIHRyYWRpc3QpOworCQkJCX0KKwkJCX0KKworCQkJZGlhZ2Rpc3QyID0gZGlh
Z2Rpc3QxOworCQkJZGlhZ2Rpc3QxID0gbmV4dGRpYWdkaXN0OworCQl9CisJfQorCisJZWRfZGlz
dCB0b3RhbCA9IGRpc3Rbc2xlbl07CisJaWYgKGRpc3RtZW0gIT0gc3RhY2tkaXN0KSB7CisJCWZy
ZWUoZGlzdG1lbSk7CisJfQorCXJldHVybiB0b3RhbDsKK30KZGlmZiAtLWdpdCBhL2NjYW4vZWRp
dF9kaXN0YW5jZS90ZXN0L2FwaS5jIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvYXBpLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NWVhMQotLS0gL2Rldi9udWxsCisr
KyBiL2NjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L2FwaS5jCkBAIC0wLDAgKzEsMjIxIEBACisvKiog
QGZpbGUKKyAqIFJ1bm5hYmxlIHB1YmxpYyBBUEkgdGVzdHMgb2YgdGhlIGVkaXRfZGlzdGFuY2Ug
bW9kdWxlLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5s
b2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUg
Zm9yIGRldGFpbHMKKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjY2Fu
L2J1aWxkX2Fzc2VydC9idWlsZF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFu
Y2UvZWRpdF9kaXN0YW5jZS5oPgorI2luY2x1ZGUgPGNjYW4vdGFwL3RhcC5oPgorCisjZGVmaW5l
IGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYyhhcnIxLCBhcnIyKSBcCisJZWRpdF9kaXN0YW5jZShh
cnIxLCBzaXplb2YgYXJyMSAtIDEsIGFycjIsIHNpemVvZiBhcnIyIC0gMSwgXAorCQkJRURJVF9E
SVNUQU5DRV9MQ1MpCisjZGVmaW5lIGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYyhhcnIxLCBhcnIy
KSBcCisJZWRpdF9kaXN0YW5jZShhcnIxLCBzaXplb2YgYXJyMSAtIDEsIGFycjIsIHNpemVvZiBh
cnIyIC0gMSwgXAorCQkJRURJVF9ESVNUQU5DRV9MRVYpCisjZGVmaW5lIGVkaXRfZGlzdGFuY2Vf
cmRsX3N0YXRpYyhhcnIxLCBhcnIyKSBcCisJZWRpdF9kaXN0YW5jZShhcnIxLCBzaXplb2YgYXJy
MSAtIDEsIGFycjIsIHNpemVvZiBhcnIyIC0gMSwgXAorCQkJRURJVF9ESVNUQU5DRV9SREwpCisj
ZGVmaW5lIGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKGFycjEsIGFycjIpIFwKKwllZGl0X2Rpc3Rh
bmNlKGFycjEsIHNpemVvZiBhcnIxIC0gMSwgYXJyMiwgc2l6ZW9mIGFycjIgLSAxLCBcCisJCQlF
RElUX0RJU1RBTkNFX0RMKQorCitzdGF0aWMgdm9pZCB0ZXN0X2xjcyh2b2lkKQoreworCS8qIFRy
aXZpYWwgY2FzZXMgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCIiLCAiIikgPT0g
MCk7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYSIsICIiKSA9PSAxKTsKKwlvazEo
ZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCIiLCAiYSIpID09IDEpOworCW9rMShlZGl0X2Rpc3Rh
bmNlX2xjc19zdGF0aWMoImEiLCAiYSIpID09IDApOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19z
dGF0aWMoImEiLCAiYiIpID09IDIpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImIi
LCAiYSIpID09IDIpOworCisJLyogVHJpdmlhbCBzZWFyY2ggY2FzZXMgKi8KKwlvazEoZWRpdF9k
aXN0YW5jZV9sY3Nfc3RhdGljKCJhIiwgImJjZGVmIikgPT0gNik7CisJb2sxKGVkaXRfZGlzdGFu
Y2VfbGNzX3N0YXRpYygiYSIsICJiY2FkZWYiKSA9PSA1KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9s
Y3Nfc3RhdGljKCJhY2RlZiIsICJiIikgPT0gNik7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0
YXRpYygiYWJjZGVmIiwgImIiKSA9PSA1KTsKKworCS8qIENvbW1vbiBwcmVmaXggd2l0aCBzaW5n
bGUtY2hhciBkaXN0YW5jZSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFhIiwg
ImFiIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYWIiLCAiYWEiKSA9
PSAyKTsKKworCS8qIENvbW1vbiBzdWZmaXggd2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAqLwor
CW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFhIiwgImJhIikgPT0gMik7CisJb2sxKGVk
aXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYmEiLCAiYWEiKSA9PSAyKTsKKworCS8qIE5vbi1vcHRp
bWl6ZWQgY2FzZXMgKHJlcXVpcmUgV2FnbmVyLUZpc2NoZXIgbWF0cml4KSAqLworCW9rMShlZGl0
X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiIiwgImJhIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFu
Y2VfbGNzX3N0YXRpYygiYWJjIiwgImRlIikgPT0gNSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNz
X3N0YXRpYygiYWJjIiwgImRlZiIpID09IDYpOworCisJLyogKFJlc3RyaWN0ZWQpIFRyYW5zcG9z
aXRpb24gKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhYmNkIiwgImVjYmYiKSA9
PSA2KTsKKworCS8qIChVbnJlc3RyaWN0ZWQpIFRyYW5zcG9zaXRpb24gKi8KKwlvazEoZWRpdF9k
aXN0YW5jZV9sY3Nfc3RhdGljKCJjYSIsICJhYmMiKSA9PSAzKTsKKworCS8qIEluc2VydCArIERl
bGV0ZSArIFN1YiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiY2RlIiwgInhj
ZGVmIikgPT0gNCk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9uIG11bHRpcGxlIGRlbGV0aW9u
cyBpbiBmaW5hbCByb3cuICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYWFiY2Mi
LCAiYmNjZGQiKSA9PSA0KTsKKworCS8qIERpc3RhbmNlIGRlcGVuZHMgb24gbXVsdGlwbGUgaW5z
ZXJ0aW9ucyBpbiBmaW5hbCBjb2x1bW4uICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRp
YygiYmNjZGQiLCAiYWFiY2MiKSA9PSA0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9sZXYodm9p
ZCkKK3sKKwkvKiBUcml2aWFsIGNhc2VzICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRp
YygiIiwgIiIpID09IDApOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImEiLCAiIikg
PT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiIiwgImEiKSA9PSAxKTsKKwlv
azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgImEiKSA9PSAwKTsKKwlvazEoZWRpdF9k
aXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgImIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9s
ZXZfc3RhdGljKCJiIiwgImEiKSA9PSAxKTsKKworCS8qIFRyaXZpYWwgc2VhcmNoIGNhc2VzICov
CisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYSIsICJiY2RlZiIpID09IDUpOworCW9r
MShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImEiLCAiYmNhZGVmIikgPT0gNSk7CisJb2sxKGVk
aXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWNkZWYiLCAiYiIpID09IDUpOworCW9rMShlZGl0X2Rp
c3RhbmNlX2xldl9zdGF0aWMoImFiY2RlZiIsICJiIikgPT0gNSk7CisKKwkvKiBDb21tb24gcHJl
Zml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFuY2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZf
c3RhdGljKCJhYSIsICJhYiIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMo
ImFiIiwgImFhIikgPT0gMSk7CisKKwkvKiBDb21tb24gc3VmZml4IHdpdGggc2luZ2xlLWNoYXIg
ZGlzdGFuY2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYSIsICJiYSIpID09
IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImJhIiwgImFhIikgPT0gMSk7CisK
KwkvKiBOb24tb3B0aW1pemVkIGNhc2VzIChyZXF1aXJlIFdhZ25lci1GaXNjaGVyIG1hdHJpeCkg
Ki8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYiIsICJiYSIpID09IDIpOworCW9r
MShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImFiYyIsICJkZSIpID09IDMpOworCW9rMShlZGl0
X2Rpc3RhbmNlX2xldl9zdGF0aWMoImFiYyIsICJkZWYiKSA9PSAzKTsKKworCS8qIChSZXN0cmlj
dGVkKSBUcmFuc3Bvc2l0aW9uICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWJj
ZCIsICJlY2JmIikgPT0gNCk7CisKKwkvKiAoVW5yZXN0cmljdGVkKSBUcmFuc3Bvc2l0aW9uICov
CisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiY2EiLCAiYWJjIikgPT0gMyk7CisKKwkv
KiBJbnNlcnQgKyBEZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGlj
KCJhYmNkZSIsICJ4Y2RlZiIpID09IDMpOworCisJLyogRGlzdGFuY2UgZGVwZW5kcyBvbiBtdWx0
aXBsZSBkZWxldGlvbnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9z
dGF0aWMoImFhYmNjIiwgImJjY2RkIikgPT0gNCk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9u
IG11bHRpcGxlIGluc2VydGlvbnMgaW4gZmluYWwgY29sdW1uLiAqLworCW9rMShlZGl0X2Rpc3Rh
bmNlX2xldl9zdGF0aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RfcmRsKHZvaWQpCit7CisJLyogVHJpdmlhbCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3Rh
bmNlX3JkbF9zdGF0aWMoIiIsICIiKSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3Rh
dGljKCJhIiwgIiIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoIiIsICJh
IikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYSIsICJhIikgPT0gMCk7
CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYSIsICJiIikgPT0gMSk7CisJb2sxKGVk
aXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYiIsICJhIikgPT0gMSk7CisKKwkvKiBUcml2aWFsIHNl
YXJjaCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImEiLCAiYmNkZWYi
KSA9PSA1KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhIiwgImJjYWRlZiIpID09
IDUpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImFjZGVmIiwgImIiKSA9PSA1KTsK
KwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmNkZWYiLCAiYiIpID09IDUpOworCisJ
LyogQ29tbW9uIHByZWZpeCB3aXRoIHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRf
ZGlzdGFuY2VfcmRsX3N0YXRpYygiYWEiLCAiYWIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5j
ZV9yZGxfc3RhdGljKCJhYiIsICJhYSIpID09IDEpOworCisJLyogQ29tbW9uIHN1ZmZpeCB3aXRo
IHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygi
YWEiLCAiYmEiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJiYSIsICJh
YSIpID09IDEpOworCisJLyogTm9uLW9wdGltaXplZCBjYXNlcyAocmVxdWlyZSBXYWduZXItRmlz
Y2hlciBtYXRyaXgpICovCisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWIiLCAiYmEi
KSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmMiLCAiZGUiKSA9PSAz
KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmMiLCAiZGVmIikgPT0gMyk7CisK
KwkvKiAoUmVzdHJpY3RlZCkgVHJhbnNwb3NpdGlvbiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3Jk
bF9zdGF0aWMoImFiY2QiLCAiZWNiZiIpID09IDMpOworCisJLyogKFVucmVzdHJpY3RlZCkgVHJh
bnNwb3NpdGlvbiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImNhIiwgImFiYyIp
ID09IDMpOworCisJLyogSW5zZXJ0ICsgRGVsZXRlICsgU3ViICovCisJb2sxKGVkaXRfZGlzdGFu
Y2VfcmRsX3N0YXRpYygiYWJjZGUiLCAieGNkZWYiKSA9PSAzKTsKKworCS8qIERpc3RhbmNlIGRl
cGVuZHMgb24gbXVsdGlwbGUgZGVsZXRpb25zIGluIGZpbmFsIHJvdy4gKi8KKwlvazEoZWRpdF9k
aXN0YW5jZV9yZGxfc3RhdGljKCJhYWJjYyIsICJiY2NkZCIpID09IDQpOworCisJLyogRGlzdGFu
Y2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBpbnNlcnRpb25zIGluIGZpbmFsIGNvbHVtbi4gKi8KKwlv
azEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJiY2NkZCIsICJhYWJjYyIpID09IDQpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X2RsKHZvaWQpCit7CisJLyogVHJpdmlhbCBjYXNlcyAqLworCW9r
MShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiIiwgIiIpID09IDApOworCW9rMShlZGl0X2Rpc3Rh
bmNlX2RsX3N0YXRpYygiYSIsICIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0
aWMoIiIsICJhIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwgImEi
KSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImEiLCAiYiIpID09IDEpOwor
CW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYiIsICJhIikgPT0gMSk7CisKKwkvKiBUcml2
aWFsIHNlYXJjaCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYSIsICJi
Y2RlZiIpID09IDUpOworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYSIsICJiY2FkZWYi
KSA9PSA1KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFjZGVmIiwgImIiKSA9PSA1
KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFiY2RlZiIsICJiIikgPT0gNSk7CisK
KwkvKiBDb21tb24gcHJlZml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFuY2UgKi8KKwlvazEoZWRp
dF9kaXN0YW5jZV9kbF9zdGF0aWMoImFhIiwgImFiIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFu
Y2VfZGxfc3RhdGljKCJhYiIsICJhYSIpID09IDEpOworCisJLyogQ29tbW9uIHN1ZmZpeCB3aXRo
IHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJh
YSIsICJiYSIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYmEiLCAiYWEi
KSA9PSAxKTsKKworCS8qIE5vbi1vcHRpbWl6ZWQgY2FzZXMgKHJlcXVpcmUgV2FnbmVyLUZpc2No
ZXIgbWF0cml4KSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYWIiLCAiYmEiKSA9
PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFiYyIsICJkZSIpID09IDMpOwor
CW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYWJjIiwgImRlZiIpID09IDMpOworCisJLyog
KFJlc3RyaWN0ZWQpIFRyYW5zcG9zaXRpb24gKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0
aWMoImFiY2QiLCAiZWNiZiIpID09IDMpOworCisJLyogKFVucmVzdHJpY3RlZCkgVHJhbnNwb3Np
dGlvbiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiY2EiLCAiYWJjIikgPT0gMik7
CisKKwkvKiBJbnNlcnQgKyBEZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9z
dGF0aWMoImFiY2RlIiwgInhjZGVmIikgPT0gMyk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9u
IG11bHRpcGxlIGRlbGV0aW9ucyBpbiBmaW5hbCByb3cuICovCisJb2sxKGVkaXRfZGlzdGFuY2Vf
ZGxfc3RhdGljKCJhYWJjYyIsICJiY2NkZCIpID09IDQpOworCisJLyogRGlzdGFuY2UgZGVwZW5k
cyBvbiBtdWx0aXBsZSBpbnNlcnRpb25zIGluIGZpbmFsIGNvbHVtbi4gKi8KKwlvazEoZWRpdF9k
aXN0YW5jZV9kbF9zdGF0aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK2ludCBtYWlu
KHZvaWQpCit7CisJcGxhbl90ZXN0cyg4OSk7CisKKwl0ZXN0X2xjcygpOworCXRlc3RfbGV2KCk7
CisJdGVzdF9yZGwoKTsKKwl0ZXN0X2RsKCk7CisKKwkvKiBVbnN1cHBvcnRlZCBlZGl0IGRpc3Rh
bmNlIG1lYXN1cmUgKi8KKwllbnVtIGVkX21lYXN1cmUgYmFkbWVhc3VyZSA9IChlbnVtIGVkX21l
YXN1cmUpLTE7CisJb2sxKGVkaXRfZGlzdGFuY2UoImFiIiwgMiwgImJhIiwgMiwgYmFkbWVhc3Vy
ZSkgPT0gKGVkX2Rpc3QpLTEpOworCisJcmV0dXJuIGV4aXRfc3RhdHVzKCk7Cit9CmRpZmYgLS1n
aXQgYS9jY2FuL2VkaXRfZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYyBiL2NjYW4vZWRp
dF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zaG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjgwOTIyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFu
Y2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYwpAQCAtMCwwICsxLDQwIEBACisvKiogQGZpbGUKKyAq
IFJ1bm5hYmxlIHRlc3RzIGZvciB0aGUgZWRpdF9kaXN0YW5jZSBtb2R1bGUgdXNpbmcgY3VzdG9t
IGVsZW1lbnQgYW5kCisgKiBkaXN0YW5jZSB0eXBlcy4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYg
S2V2aW4gTG9ja2UgPGtldmluQGtldmlubG9ja2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxp
Y2Vuc2UgLSBzZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzCisgKi8KKworI2luY2x1ZGUgPGxp
bWl0cy5oPgkJLyogVVNIUlRfTUFYICovCisKKyNpbmNsdWRlIDxjY2FuL2FycmF5X3NpemUvYXJy
YXlfc2l6ZS5oPgorI2luY2x1ZGUgPGNjYW4vdGFwL3RhcC5oPgorCisjZGVmaW5lIGVkX2VsZW0g
dW5zaWduZWQgc2hvcnQKKyNkZWZpbmUgZWRfZGlzdCBzaG9ydAorI2RlZmluZSBFRF9IQVNIX0VM
RU0oZSkgZQorI2RlZmluZSBFRF9IQVNIX01BWCBVU0hSVF9NQVgKKworI2luY2x1ZGUgPGNjYW4v
ZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmM+CisjaW5jbHVkZSA8Y2Nhbi9lZGl0X2Rpc3Rh
bmNlL2VkaXRfZGlzdGFuY2VfZGwuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRp
dF9kaXN0YW5jZV9sY3MuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0
YW5jZV9sZXYuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9y
ZGwuYz4KKworaW50IG1haW4odm9pZCkKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCBzcmNbXSA9
IHsgMCwgMSwgMiwgMyB9OworCWNvbnN0IHVuc2lnbmVkIHNob3J0IHRndFtdID0geyA0LCAyLCAx
LCA1IH07CisJZWRfc2l6ZSBzbGVuID0gQVJSQVlfU0laRShzcmMpOworCWVkX3NpemUgdGxlbiA9
IEFSUkFZX1NJWkUodGd0KTsKKworCXBsYW5fdGVzdHMoNCk7CisKKwlvazEoZWRpdF9kaXN0YW5j
ZShzcmMsIHNsZW4sIHRndCwgdGxlbiwgRURJVF9ESVNUQU5DRV9MQ1MpID09IDYpOworCW9rMShl
ZGl0X2Rpc3RhbmNlKHNyYywgc2xlbiwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX0xFVikgPT0g
NCk7CisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFO
Q0VfUkRMKSA9PSAzKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNsZW4sIHRndCwgdGxlbiwg
RURJVF9ESVNUQU5DRV9ETCkgPT0gMyk7CisKKwlyZXR1cm4gZXhpdF9zdGF0dXMoKTsKK30KZGlm
ZiAtLWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zdHJ1Y3QuYyBiL2Nj
YW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi40NzdlYzVmCi0tLSAvZGV2L251bGwKKysrIGIvY2Nhbi9lZGl0
X2Rpc3RhbmNlL3Rlc3QvcnVuLXR5cGVzLXN0cnVjdC5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKiBA
ZmlsZQorICogUnVubmFibGUgdGVzdHMgZm9yIHRoZSBlZGl0X2Rpc3RhbmNlIG1vZHVsZSB1c2lu
ZyBjdXN0b20gZWxlbWVudCBhbmQKKyAqIGRpc3RhbmNlIHR5cGVzLgorICoKKyAqIEBjb3B5cmln
aHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1lPgorICogICAgICAgICAg
ICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMKKyAqLworCisjaW5j
bHVkZSA8bGltaXRzLmg+CQkvKiBVQ0hBUl9NQVggKi8KKworI2luY2x1ZGUgPGNjYW4vYXJyYXlf
c2l6ZS9hcnJheV9zaXplLmg+CisjaW5jbHVkZSA8Y2Nhbi90YXAvdGFwLmg+CisKK3N0cnVjdCBj
b2xvcjE2IHsKKwl1bnNpZ25lZCBjaGFyIHI6NTsKKwl1bnNpZ25lZCBjaGFyIGc6NjsKKwl1bnNp
Z25lZCBjaGFyIGI6NTsKK307CisKKyNkZWZpbmUgZWRfZWxlbSBzdHJ1Y3QgY29sb3IxNgorI2Rl
ZmluZSBFRF9FTEVNX0VRVUFMKGUsIGYpIChlLnIgPT0gZi5yICYmIGUuZyA9PSBmLmcgJiYgZS5i
ID09IGYuYikKKyNkZWZpbmUgRURfSEFTSF9FTEVNKGUpICgoZS5yIDw8IDExKSB8IChlLmcgPDwg
NSkgfCBlLmIpCisjZGVmaW5lIEVEX0hBU0hfTUFYIFVTSFJUX01BWAorCisjaW5jbHVkZSA8Y2Nh
bi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlz
dGFuY2UvZWRpdF9kaXN0YW5jZV9kbC5jPgorI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9l
ZGl0X2Rpc3RhbmNlX2xjcy5jPgorI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rp
c3RhbmNlX2xldi5jPgorI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNl
X3JkbC5jPgorCitpbnQgbWFpbih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBjb2xvcjE2IHNyY1td
ID0geworCQl7MCwgMCwgMH0sCisJCXsxLCAxLCAxfSwKKwkJezIsIDIsIDJ9LAorCQl7MywgMywg
M30KKwl9OworCWNvbnN0IHN0cnVjdCBjb2xvcjE2IHRndFtdID0geworCQl7NCwgNCwgNH0sCisJ
CXsyLCAyLCAyfSwKKwkJezEsIDEsIDF9LAorCQl7NSwgNSwgNX0KKwl9OworCWVkX3NpemUgc2xl
biA9IEFSUkFZX1NJWkUoc3JjKTsKKwllZF9zaXplIHRsZW4gPSBBUlJBWV9TSVpFKHRndCk7CisK
KwlwbGFuX3Rlc3RzKDQpOworCisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRs
ZW4sIEVESVRfRElTVEFOQ0VfTENTKSA9PSA2KTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNs
ZW4sIHRndCwgdGxlbiwgRURJVF9ESVNUQU5DRV9MRVYpID09IDQpOworCW9rMShlZGl0X2Rpc3Rh
bmNlKHNyYywgc2xlbiwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX1JETCkgPT0gMyk7CisJb2sx
KGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFOQ0VfREwpID09
IDMpOworCisJcmV0dXJuIGV4aXRfc3RhdHVzKCk7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRf
ZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtd2NoYXIuYyBiL2NjYW4vZWRpdF9kaXN0YW5jZS90ZXN0
L3J1bi10eXBlcy13Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMx
MjNhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFuY2UvdGVzdC9ydW4tdHlw
ZXMtd2NoYXIuYwpAQCAtMCwwICsxLDYwIEBACisvKiogQGZpbGUKKyAqIFJ1bm5hYmxlIHRlc3Rz
IGZvciB0aGUgZWRpdF9kaXN0YW5jZSBtb2R1bGUgdXNpbmcgY3VzdG9tIGVsZW1lbnQgYW5kCisg
KiBkaXN0YW5jZSB0eXBlcy4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtl
dmluQGtldmlubG9ja2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElD
RU5TRSBmaWxlIGZvciBkZXRhaWxzCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogVUNI
QVJfTUFYICovCisjaW5jbHVkZSA8d2NoYXIuaD4JCS8qIHdtZW1jaHIgKi8KKworI2luY2x1ZGUg
PGNjYW4vYXJyYXlfc2l6ZS9hcnJheV9zaXplLmg+CisjaW5jbHVkZSA8Y2Nhbi90YXAvdGFwLmg+
CisKKyNkZWZpbmUgZWRfZWxlbSB3Y2hhcl90CisjZGVmaW5lIGVkX2Rpc3QgZG91YmxlCisjZGVm
aW5lIEVEX0hBU19FTEVNKGFyciwgZWxlbSwgbGVuKSAod21lbWNocihhcnIsIGVsZW0sIGxlbikg
IT0gTlVMTCkKKy8qIFNpbmNlIHdlIG9ubHkgdXNlIEFTQ0lJIGNoYXJhY3RlcnMgKi8KKyNkZWZp
bmUgRURfSEFTSF9FTEVNKGUpICh1bnNpZ25lZCBjaGFyKWUKKyNkZWZpbmUgRURfSEFTSF9NQVgg
VUNIQVJfTUFYCisjZGVmaW5lIEVEX0hBU0hfT05fU1RBQ0sKKworI2luY2x1ZGUgPGNjYW4vZWRp
dF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmM+CisjaW5jbHVkZSA8Y2Nhbi9lZGl0X2Rpc3RhbmNl
L2VkaXRfZGlzdGFuY2VfZGwuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9k
aXN0YW5jZV9sY3MuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5j
ZV9sZXYuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9yZGwu
Yz4KKworaW50IG1haW4odm9pZCkKK3sKKwljb25zdCB3Y2hhcl90IHNyY1tdID0gTCJhYmNkIjsK
Kwljb25zdCB3Y2hhcl90IHRndFtdID0gTCJlY2JmIjsKKwllZF9zaXplIHNsZW4gPSBBUlJBWV9T
SVpFKHNyYykgLSAxOworCWVkX3NpemUgdGxlbiA9IEFSUkFZX1NJWkUodGd0KSAtIDE7CisKKwlw
bGFuX3Rlc3RzKDE2KTsKKworCW9rMShlZGl0X2Rpc3RhbmNlKHNyYywgc2xlbiwgdGd0LCB0bGVu
LCBFRElUX0RJU1RBTkNFX0xDUykgPT0gNi4wKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNs
ZW4sIHRndCwgdGxlbiwgRURJVF9ESVNUQU5DRV9MRVYpID09IDQuMCk7CisJb2sxKGVkaXRfZGlz
dGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFOQ0VfUkRMKSA9PSAzLjApOwor
CW9rMShlZGl0X2Rpc3RhbmNlKHNyYywgc2xlbiwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX0RM
KSA9PSAzLjApOworCisJLyogVGVzdCBlbXB0eSBzdHJpbmdzIHdvcmsgYXMgZXhwZWN0ZWQgKi8K
KwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNsZW4sIHRndCwgMCwgRURJVF9ESVNUQU5DRV9MQ1Mp
ID09IDQuMCk7CisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCAwLCB0Z3QsIHRsZW4sIEVESVRfRElT
VEFOQ0VfTENTKSA9PSA0LjApOworCisJLyogVGVzdCBFRF9IQVNfRUxFTSB3b3JrcyBhcyBleHBl
Y3RlZCAqLworCW9rMShlZGl0X2Rpc3RhbmNlKEwiYyIsIDEsIHRndCwgdGxlbiwgRURJVF9ESVNU
QU5DRV9MQ1MpID09IDMuMCk7CisJb2sxKGVkaXRfZGlzdGFuY2UoTCJ6IiwgMSwgdGd0LCB0bGVu
LCBFRElUX0RJU1RBTkNFX0xDUykgPT0gNS4wKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNs
ZW4sIEwiYyIsIDEsIEVESVRfRElTVEFOQ0VfTENTKSA9PSAzLjApOworCW9rMShlZGl0X2Rpc3Rh
bmNlKHNyYywgc2xlbiwgTCJ6IiwgMSwgRURJVF9ESVNUQU5DRV9MQ1MpID09IDUuMCk7CisJb2sx
KGVkaXRfZGlzdGFuY2UoTCJ6IiwgMSwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX0xFVikgPT0g
NC4wKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNsZW4sIEwieiIsIDEsIEVESVRfRElTVEFO
Q0VfTEVWKSA9PSA0LjApOworCW9rMShlZGl0X2Rpc3RhbmNlKEwieiIsIDEsIHRndCwgdGxlbiwg
RURJVF9ESVNUQU5DRV9SREwpID09IDQuMCk7CisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVu
LCBMInoiLCAxLCBFRElUX0RJU1RBTkNFX1JETCkgPT0gNC4wKTsKKwlvazEoZWRpdF9kaXN0YW5j
ZShMInoiLCAxLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFOQ0VfREwpID09IDQuMCk7CisJb2sxKGVk
aXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCBMInoiLCAxLCBFRElUX0RJU1RBTkNFX0RMKSA9PSA0LjAp
OworCisJcmV0dXJuIGV4aXRfc3RhdHVzKCk7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRfZGlz
dGFuY2UvdGVzdC9ydW4td2VpZ2h0cy5jIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvcnVuLXdl
aWdodHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmI0NzBkCi0tLSAv
ZGV2L251bGwKKysrIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvcnVuLXdlaWdodHMuYwpAQCAt
MCwwICsxLDI4MiBAQAorLyoqIEBmaWxlCisgKiBSdW5uYWJsZSB0ZXN0cyBmb3IgdGhlIGVkaXRf
ZGlzdGFuY2UgbW9kdWxlIHVzaW5nIGN1c3RvbSBjb3N0cy93ZWlnaHRzLgorICoKKyAqIEBjb3B5
cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1lPgorICogICAgICAg
ICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMKKyAqLworCisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjY2FuL2J1aWxkX2Fzc2VydC9idWlsZF9h
c3NlcnQuaD4KKyNpbmNsdWRlIDxjY2FuL3RhcC90YXAuaD4KKworI2RlZmluZSBFRF9ERUxfQ09T
VChlKSAoZSA9PSAnYScgPyAyIDogMSkKKyNkZWZpbmUgRURfSU5TX0NPU1QoZSkgKGUgPT0gJ2In
ID8gMiA6IDEpCisjZGVmaW5lIEVEX1NVQl9DT1NUKGUsIGYpIChmID09ICdjJyAmJiBlID09ICdk
JyA/IDMgOiAxKQorI2RlZmluZSBFRF9UUkFfQ09TVChlLCBmKSAoZSA9PSAnZScgJiYgZiA9PSAn
ZicgPyAzIDogMSkKKworI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNl
LmM+CisjaW5jbHVkZSA8Y2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfZGwuYz4KKyNp
bmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sY3MuYz4KKyNpbmNsdWRl
IDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sZXYuYz4KKyNpbmNsdWRlIDxjY2Fu
L2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9yZGwuYz4KKworI2RlZmluZSBlZGl0X2Rpc3Rh
bmNlX2xjc19zdGF0aWMoYXJyMSwgYXJyMikgXAorCWVkaXRfZGlzdGFuY2UoYXJyMSwgc2l6ZW9m
IGFycjEgLSAxLCBhcnIyLCBzaXplb2YgYXJyMiAtIDEsIFwKKwkJCUVESVRfRElTVEFOQ0VfTENT
KQorI2RlZmluZSBlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoYXJyMSwgYXJyMikgXAorCWVkaXRf
ZGlzdGFuY2UoYXJyMSwgc2l6ZW9mIGFycjEgLSAxLCBhcnIyLCBzaXplb2YgYXJyMiAtIDEsIFwK
KwkJCUVESVRfRElTVEFOQ0VfTEVWKQorI2RlZmluZSBlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMo
YXJyMSwgYXJyMikgXAorCWVkaXRfZGlzdGFuY2UoYXJyMSwgc2l6ZW9mIGFycjEgLSAxLCBhcnIy
LCBzaXplb2YgYXJyMiAtIDEsIFwKKwkJCUVESVRfRElTVEFOQ0VfUkRMKQorI2RlZmluZSBlZGl0
X2Rpc3RhbmNlX2RsX3N0YXRpYyhhcnIxLCBhcnIyKSBcCisJZWRpdF9kaXN0YW5jZShhcnIxLCBz
aXplb2YgYXJyMSAtIDEsIGFycjIsIHNpemVvZiBhcnIyIC0gMSwgXAorCQkJRURJVF9ESVNUQU5D
RV9ETCkKKworc3RhdGljIHZvaWQgdGVzdF9sY3Modm9pZCkKK3sKKwkvKiBUcml2aWFsIGNhc2Vz
ICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiIiwgIiIpID09IDApOworCW9rMShl
ZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImEiLCAiIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFu
Y2VfbGNzX3N0YXRpYygiIiwgImEiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3Rh
dGljKCJhIiwgImEiKSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhIiwg
ImIiKSA9PSA0KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJiIiwgImEiKSA9PSAy
KTsKKworCS8qIFRyaXZpYWwgc2VhcmNoIGNhc2VzICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNz
X3N0YXRpYygiYSIsICJiY2RlZiIpID09IDgpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0
aWMoImEiLCAiYmNhZGVmIikgPT0gNik7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygi
YWNkZWYiLCAiYiIpID09IDgpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiY2Rl
ZiIsICJiIikgPT0gNik7CisKKwkvKiBDb21tb24gcHJlZml4IHdpdGggc2luZ2xlLWNoYXIgZGlz
dGFuY2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhYSIsICJhYiIpID09IDQp
OworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiIiwgImFhIikgPT0gMik7CisKKwkv
KiBDb21tb24gc3VmZml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFuY2UgKi8KKwlvazEoZWRpdF9k
aXN0YW5jZV9sY3Nfc3RhdGljKCJhYSIsICJiYSIpID09IDQpOworCW9rMShlZGl0X2Rpc3RhbmNl
X2xjc19zdGF0aWMoImJhIiwgImFhIikgPT0gMik7CisKKwkvKiBOb24tb3B0aW1pemVkIGNhc2Vz
IChyZXF1aXJlIFdhZ25lci1GaXNjaGVyIG1hdHJpeCkgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9s
Y3Nfc3RhdGljKCJhYiIsICJiYSIpID09IDMpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0
aWMoImFiYyIsICJkZSIpID09IDYpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFi
YyIsICJkZWYiKSA9PSA3KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJkZSIsICJi
ZGVmIikgPT0gMyk7CisKKwkvKiBUcmFuc3Bvc2l0aW9uICsgSW5zZXJ0ICovCisJb2sxKGVkaXRf
ZGlzdGFuY2VfbGNzX3N0YXRpYygiY2EiLCAiYWJjIikgPT0gNCk7CisKKwkvKiBJbnNlcnQgKyBE
ZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhYmNkZSIsICJ4
Y2RlZiIpID09IDUpOworCisJLyogRGlzdGFuY2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBkZWxldGlv
bnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFhYmNj
IiwgImJjY2RkIikgPT0gNik7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9uIG11bHRpcGxlIGlu
c2VydGlvbnMgaW4gZmluYWwgY29sdW1uLiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0
aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbGV2KHZv
aWQpCit7CisJLyogVHJpdmlhbCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0
aWMoIiIsICIiKSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgIiIp
ID09IDIpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoIiIsICJhIikgPT0gMSk7CisJ
b2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYSIsICJhIikgPT0gMCk7CisJb2sxKGVkaXRf
ZGlzdGFuY2VfbGV2X3N0YXRpYygiYSIsICJiIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2Vf
bGV2X3N0YXRpYygiYiIsICJhIikgPT0gMSk7CisKKwkvKiBUcml2aWFsIHNlYXJjaCBjYXNlcyAq
LworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImEiLCAiYmNkZWYiKSA9PSA1KTsKKwlv
azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgImJjYWRlZiIpID09IDYpOworCW9rMShl
ZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImFjZGVmIiwgImIiKSA9PSA1KTsKKwlvazEoZWRpdF9k
aXN0YW5jZV9sZXZfc3RhdGljKCJhYmNkZWYiLCAiYiIpID09IDYpOworCisJLyogQ29tbW9uIHBy
ZWZpeCB3aXRoIHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2
X3N0YXRpYygiYWEiLCAiYWIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGlj
KCJhYiIsICJhYSIpID09IDEpOworCisJLyogQ29tbW9uIHN1ZmZpeCB3aXRoIHNpbmdsZS1jaGFy
IGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWEiLCAiYmEiKSA9
PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJiYSIsICJhYSIpID09IDEpOwor
CisJLyogTm9uLW9wdGltaXplZCBjYXNlcyAocmVxdWlyZSBXYWduZXItRmlzY2hlciBtYXRyaXgp
ICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWIiLCAiYmEiKSA9PSAyKTsKKwlv
azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYmMiLCAiZGUiKSA9PSAzKTsKKwlvazEoZWRp
dF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYmMiLCAiZGVmIikgPT0gMyk7CisJb2sxKGVkaXRfZGlz
dGFuY2VfbGV2X3N0YXRpYygiZGUiLCAiYmRlZiIpID09IDMpOworCisJLyogVHJhbnNwb3NpdGlv
biArIEluc2VydCAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImNhIiwgImFiYyIp
ID09IDMpOworCisJLyogSW5zZXJ0ICsgRGVsZXRlICsgU3ViICovCisJb2sxKGVkaXRfZGlzdGFu
Y2VfbGV2X3N0YXRpYygiYWJjZGUiLCAieGNkZWYiKSA9PSAzKTsKKworCS8qIERpc3RhbmNlIGRl
cGVuZHMgb24gbXVsdGlwbGUgZGVsZXRpb25zIGluIGZpbmFsIHJvdy4gKi8KKwlvazEoZWRpdF9k
aXN0YW5jZV9sZXZfc3RhdGljKCJhYWJjYyIsICJiY2NkZCIpID09IDUpOworCisJLyogRGlzdGFu
Y2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBpbnNlcnRpb25zIGluIGZpbmFsIGNvbHVtbi4gKi8KKwlv
azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJiY2NkZCIsICJhYWJjYyIpID09IDQpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X3JkbCh2b2lkKQoreworCS8qIFRyaXZpYWwgY2FzZXMgKi8KKwlv
azEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCIiLCAiIikgPT0gMCk7CisJb2sxKGVkaXRfZGlz
dGFuY2VfcmRsX3N0YXRpYygiYSIsICIiKSA9PSAyKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxf
c3RhdGljKCIiLCAiYSIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImEi
LCAiYSIpID09IDApOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImEiLCAiYiIpID09
IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImIiLCAiYSIpID09IDEpOworCisJ
LyogVHJpdmlhbCBzZWFyY2ggY2FzZXMgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGlj
KCJhIiwgImJjZGVmIikgPT0gNSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYSIs
ICJiY2FkZWYiKSA9PSA2KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhY2RlZiIs
ICJiIikgPT0gNSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWJjZGVmIiwgImIi
KSA9PSA2KTsKKworCS8qIENvbW1vbiBwcmVmaXggd2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAq
LworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImFhIiwgImFiIikgPT0gMSk7CisJb2sx
KGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWIiLCAiYWEiKSA9PSAxKTsKKworCS8qIENvbW1v
biBzdWZmaXggd2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAqLworCW9rMShlZGl0X2Rpc3RhbmNl
X3JkbF9zdGF0aWMoImFhIiwgImJhIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0
YXRpYygiYmEiLCAiYWEiKSA9PSAxKTsKKworCS8qIE5vbi1vcHRpbWl6ZWQgY2FzZXMgKHJlcXVp
cmUgV2FnbmVyLUZpc2NoZXIgbWF0cml4KSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0
aWMoImFiIiwgImJhIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWJj
IiwgImRlIikgPT0gMyk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWJjIiwgImRl
ZiIpID09IDMpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImRlIiwgImJkZWYiKSA9
PSAzKTsKKworCS8qIFRyYW5zcG9zaXRpb24gKyBJbnNlcnQgKi8KKwlvazEoZWRpdF9kaXN0YW5j
ZV9yZGxfc3RhdGljKCJjYSIsICJhYmMiKSA9PSAzKTsKKworCS8qIFRyYW5zcG9zZSBXZWlnaHQg
Ki8KKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJlZiIsICJmZSIpID09IDIpOworCW9r
MShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImZlIiwgImVmIikgPT0gMSk7CisKKwkvKiBJbnNl
cnQgKyBEZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmNk
ZSIsICJ4Y2RlZiIpID09IDMpOworCisJLyogRGlzdGFuY2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBk
ZWxldGlvbnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMo
ImFhYmNjIiwgImJjY2RkIikgPT0gNSk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9uIG11bHRp
cGxlIGluc2VydGlvbnMgaW4gZmluYWwgY29sdW1uLiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3Jk
bF9zdGF0aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
ZGwodm9pZCkKK3sKKwkvKiBUcml2aWFsIGNhc2VzICovCisJb2sxKGVkaXRfZGlzdGFuY2VfZGxf
c3RhdGljKCIiLCAiIikgPT0gMCk7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwg
IiIpID09IDIpOworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiIiwgImEiKSA9PSAxKTsK
KwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImEiLCAiYSIpID09IDApOworCW9rMShlZGl0
X2Rpc3RhbmNlX2RsX3N0YXRpYygiYSIsICJiIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2Vf
ZGxfc3RhdGljKCJiIiwgImEiKSA9PSAxKTsKKworCS8qIFRyaXZpYWwgc2VhcmNoIGNhc2VzICov
CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwgImJjZGVmIikgPT0gNSk7CisJb2sx
KGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwgImJjYWRlZiIpID09IDYpOworCW9rMShlZGl0
X2Rpc3RhbmNlX2RsX3N0YXRpYygiYWNkZWYiLCAiYiIpID09IDUpOworCW9rMShlZGl0X2Rpc3Rh
bmNlX2RsX3N0YXRpYygiYWJjZGVmIiwgImIiKSA9PSA2KTsKKworCS8qIENvbW1vbiBwcmVmaXgg
d2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRp
YygiYWEiLCAiYWIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFiIiwg
ImFhIikgPT0gMSk7CisKKwkvKiBDb21tb24gc3VmZml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFu
Y2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFhIiwgImJhIikgPT0gMSk7CisJ
b2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJiYSIsICJhYSIpID09IDEpOworCisJLyogTm9u
LW9wdGltaXplZCBjYXNlcyAocmVxdWlyZSBXYWduZXItRmlzY2hlciBtYXRyaXgpICovCisJb2sx
KGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhYiIsICJiYSIpID09IDEpOworCW9rMShlZGl0X2Rp
c3RhbmNlX2RsX3N0YXRpYygiYWJjIiwgImRlIikgPT0gMyk7CisJb2sxKGVkaXRfZGlzdGFuY2Vf
ZGxfc3RhdGljKCJhYmMiLCAiZGVmIikgPT0gMyk7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3Rh
dGljKCJkZSIsICJiZGVmIikgPT0gMyk7CisKKwkvKiBUcmFuc3Bvc2l0aW9uICsgSW5zZXJ0ICov
CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJjYSIsICJhYmMiKSA9PSAzKTsKKworCS8q
IFRyYW5zcG9zZSBXZWlnaHQgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImVmIiwg
ImZlIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJmZSIsICJlZiIpID09
IDEpOworCisJLyogSW5zZXJ0ICsgRGVsZXRlICsgU3ViICovCisJb2sxKGVkaXRfZGlzdGFuY2Vf
ZGxfc3RhdGljKCJhYmNkZSIsICJ4Y2RlZiIpID09IDMpOworCisJLyogRGlzdGFuY2UgZGVwZW5k
cyBvbiBtdWx0aXBsZSBkZWxldGlvbnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3Rh
bmNlX2RsX3N0YXRpYygiYWFiY2MiLCAiYmNjZGQiKSA9PSA1KTsKKworCS8qIERpc3RhbmNlIGRl
cGVuZHMgb24gbXVsdGlwbGUgaW5zZXJ0aW9ucyBpbiBmaW5hbCBjb2x1bW4uICovCisJb2sxKGVk
aXRfZGlzdGFuY2VfZGxfc3RhdGljKCJiY2NkZCIsICJhYWJjYyIpID09IDQpOworfQorCisvKiBU
ZXN0IGVkaXRfZGlzdGFuY2UgY2FsY3VsYXRpb24gYXJvdW5kIHRoZSBzdGFjayB0aHJlc2hvbGQg
dG8gZW5zdXJlIG1lbW9yeQorICogaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCBjb3JyZWN0bHkgYW5k
IHN0YWNrIG92ZXJmbG93IGRvZXMgbm90IG9jY3VyLgorICoKKyAqIE5vdGU6ICBUaGlzIHRlc3Qg
aXMgZG9uZSB3aGVuIEVEX0NPU1RfSVNfU1lNTUVUUklDIGlzIG5vdCBkZWZpbmVkIHNvIHRoYXQK
KyAqIHRndCBjYW4gYmUgc21hbGwgdG8gbWFrZSB0aGUgdGVzdCBydW4gcXVpY2tseSAod2l0aCBF
RF9DT1NUX0lTX1NZTU1FVFJJQyB0aGUKKyAqIG1pbiBsZW5ndGggd291bGQgbmVlZCB0byBiZSBh
Ym92ZSB0aGUgdGhyZXNob2xkKS4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9tZW1fdXNlKHZvaWQp
Cit7CisJY2hhciB0Z3RbXSA9ICJCQyI7CisJY2hhciBzcmNbRURfU1RBQ0tfRUxFTVMgKyAxXTsK
Kwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IEVEX1NUQUNLX0VMRU1TOyArK2kpIHsKKwkJc3JjW2ld
ID0gKGNoYXIpKCdBJyArIChpICUgMjYpKTsKKwl9CisJc3JjW0VEX1NUQUNLX0VMRU1TXSA9ICdc
MCc7CisKKwlmb3IgKGVkX3NpemUgdGxlbiA9IDE7IHRsZW4gPCAzOyArK3RsZW4pIHsKKwkJZWRf
c2l6ZSBzbGVuID0gRURfU1RBQ0tfRUxFTVM7CisJCS8qIEFib3ZlIHRocmVzaG9sZCwgY2F1c2Vz
IGFsbG9jYXRpb24gKi8KKwkJb2soZWRpdF9kaXN0YW5jZV9sY3Moc3JjLCBzbGVuLCB0Z3QsIHRs
ZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5jZV9sY3MoXCIlLjNzLi4uLCAl
dSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xlbiwgKGludCl0bGVuLCB0Z3Qs
IHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5jZV9sZXYoc3JjLCBzbGVuLCB0
Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5jZV9sZXYoXCIlLjNz
Li4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xlbiwgKGludCl0bGVu
LCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5jZV9yZGwoc3JjLCBz
bGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5jZV9yZGwo
XCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xlbiwgKGlu
dCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5jZV9kbChz
cmMsIHNsZW4sIHRndCwgdGxlbikgPT0gc2xlbiAtIHRsZW4sCisJCSAgICJlZGl0X2Rpc3RhbmNl
X2RsKFwiJS4zcy4uLiwgJXUsIFwiJS4qc1wiLCAldSkgPT0gJXUiLAorCQkgICBzcmMsIHNsZW4s
IChpbnQpdGxlbiwgdGd0LCB0bGVuLCBzbGVuIC0gdGxlbik7CisKKwkJLyogQmVsb3cgdGhyZXNo
b2xkLCBubyBhbGxvY2F0aW9uICovCisJCS0tc2xlbjsKKwkJb2soZWRpdF9kaXN0YW5jZV9sY3Mo
c3JjLCBzbGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5j
ZV9sY3MoXCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xl
biwgKGludCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5j
ZV9sZXYoc3JjLCBzbGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9k
aXN0YW5jZV9sZXYoXCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNy
Yywgc2xlbiwgKGludCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9k
aXN0YW5jZV9yZGwoc3JjLCBzbGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAi
ZWRpdF9kaXN0YW5jZV9yZGwoXCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJ
CSAgIHNyYywgc2xlbiwgKGludCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2so
ZWRpdF9kaXN0YW5jZV9kbChzcmMsIHNsZW4sIHRndCwgdGxlbikgPT0gc2xlbiAtIHRsZW4sCisJ
CSAgICJlZGl0X2Rpc3RhbmNlX2RsKFwiJS4zcy4uLiwgJXUsIFwiJS4qc1wiLCAldSkgPT0gJXUi
LAorCQkgICBzcmMsIHNsZW4sIChpbnQpdGxlbiwgdGd0LCB0bGVuLCBzbGVuIC0gdGxlbik7CisJ
fQorfQorCitpbnQgbWFpbih2b2lkKQoreworCXBsYW5fdGVzdHMoMTA5KTsKKworCXRlc3RfbGNz
KCk7CisJdGVzdF9sZXYoKTsKKwl0ZXN0X3JkbCgpOworCXRlc3RfZGwoKTsKKworCXRlc3RfbWVt
X3VzZSgpOworCisJLyogVW5zdXBwb3J0ZWQgZWRpdCBkaXN0YW5jZSBtZWFzdXJlICovCisJZW51
bSBlZF9tZWFzdXJlIGJhZG1lYXN1cmUgPSAoZW51bSBlZF9tZWFzdXJlKS0xOworCW9rMShlZGl0
X2Rpc3RhbmNlKCJhYiIsIDIsICJiYSIsIDIsIGJhZG1lYXN1cmUpID09IChlZF9kaXN0KS0xKTsK
KworCXJldHVybiBleGl0X3N0YXR1cygpOworfQotLSAKMi4xMC4yCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpjY2FuIG1haWxpbmcgbGlzdApjY2FuQGxp
c3RzLm96bGFicy5vcmcKaHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2NjYW4K