[mono/mono] [2 commits] 10ee80de: [sgen] Improve describe_ptr().

"Mark Probst ([email protected])" <[email protected]> Mon, 25 Nov 2013 14:48:34 +0000
Newsgroups gmane.comp.gnome.mono.patches
Message-ID <000001428fbbbc2c-daccc413-48fc-4f0a-80f0-c60b9ecd57f9-000000@email.amazonses.com>
DQogICBCcmFuY2g6IHJlZnMvaGVhZHMvbWFzdGVyDQogICAgIEhvbWU6IGh0dHBzOi8vZ2l0aHVi
LmNvbS9tb25vL21vbm8NCiAgQ29tcGFyZTogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9uby9j
b21wYXJlLzRjMDM3NmQwMzdlMy4uLjhhNGUxY2E3NGU2NQ0KDQogICBDb21taXQ6IDEwZWU4MGRl
NjgwZTEyNDNhOWZmYjk5M2U5MDA4NTZlNDBlMWMyOGMNCiAgIEF1dGhvcjogTWFyayBQcm9ic3Qg
PG1hcmsucHJvYnN0QGdtYWlsLmNvbT4gKHNjaGFuaSkNCiAgICAgRGF0ZTogMjAxMy0xMS0yNSAx
NDoyMjo0NSBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbW9uby9jb21t
aXQvMTBlZTgwZGU2ODBlMTI0M2E5ZmZiOTkzZTkwMDg1NmU0MGUxYzI4Yw0KDQpbc2dlbl0gSW1w
cm92ZSBkZXNjcmliZV9wdHIoKS4KCkRvbuKAmXQgdHJ5IHRvIHByaW50IHRoZSB2dGFibGUgaWYg
dGhlIG1ham9yIGFsbG9jYXRvciBrbm93cyBpdOKAmXMgaW52YWxpZC4KUHJpbnQgYnJpZGdlIGlu
Zm9ybWF0aW9uLg0KDQpDaGFuZ2VkIHBhdGhzOgogIE0gbW9uby9tZXRhZGF0YS9zZ2VuLWJyaWRn
ZS5jCiAgTSBtb25vL21ldGFkYXRhL3NnZW4tZGVidWcuYwogIE0gbW9uby9tZXRhZGF0YS9zZ2Vu
LWdjLmgKICBNIG1vbm8vbWV0YWRhdGEvc2dlbi1tYXJrc3dlZXAuYwoNCk1vZGlmaWVkOiBtb25v
L21ldGFkYXRhL3NnZW4tYnJpZGdlLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC04MTYsNiArODE2LDI4IEBA
CiAJYnJpZGdlX3Byb2Nlc3NpbmdfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKIH0KIAordm9pZAorc2dl
bl9icmlkZ2VfZGVzY3JpYmVfcG9pbnRlciAoTW9ub09iamVjdCAqb2JqKQoreworCUhhc2hFbnRy
eSAqZW50cnk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVnaXN0ZXJlZF9icmlkZ2Vz
LnNpemU7ICsraSkgeworCQlpZiAob2JqID09IERZTl9BUlJBWV9QVFJfUkVGICgmcmVnaXN0ZXJl
ZF9icmlkZ2VzLCBpKSkgeworCQkJcHJpbnRmICgiUG9pbnRlciBpcyBhIHJlZ2lzdGVyZWQgYnJp
ZGdlIG9iamVjdC5cbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwllbnRyeSA9IHNnZW5faGFz
aF90YWJsZV9sb29rdXAgKCZoYXNoX3RhYmxlLCBvYmopOworCWlmICghZW50cnkpCisJCXJldHVy
bjsKKworCXByaW50ZiAoIkJyaWRnZSBoYXNoIHRhYmxlIGVudHJ5ICVwOlxuIiwgZW50cnkpOwor
CXByaW50ZiAoIiAgaXMgYnJpZGdlOiAlZFxuIiwgKGludCllbnRyeS0+aXNfYnJpZGdlKTsKKwlw
cmludGYgKCIgIGlzIHZpc2l0ZWQ6ICVkXG4iLCAoaW50KWVudHJ5LT5pc192aXNpdGVkKTsKK30K
Kwogc3RhdGljIGNvbnN0IGNoYXIgKmJyaWRnZV9jbGFzczsKIAogc3RhdGljIGdib29sZWFuDQoN
Ck1vZGlmaWVkOiBtb25vL21ldGFkYXRhL3NnZW4tZGVidWcuYw0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTc3
LDYgKzc3LDcgQEAKIAkJaWYgKCFzdGFydCkKIAkJCXJldHVybjsKIAkJcHRyID0gc3RhcnQ7CisJ
CXZ0YWJsZSA9IChNb25vVlRhYmxlKilMT0FEX1ZUQUJMRSAocHRyKTsKIAl9IGVsc2UgewogCQlp
ZiAoc2dlbl9wdHJfaXNfaW5fbG9zIChwdHIsICZzdGFydCkpIHsKIAkJCWlmIChwdHIgPT0gc3Rh
cnQpCkBAIC04NSw2ICs4Niw3IEBACiAJCQkJcHJpbnRmICgiUG9pbnRlciBpcyBhdCBvZmZzZXQg
MHgleCBvZiBvYmplY3QgJXAgaW4gTE9TIHNwYWNlLlxuIiwgKGludCkocHRyIC0gc3RhcnQpLCBz
dGFydCk7CiAJCQlwdHIgPSBzdGFydDsKIAkJCW1vbm9fc2dlbl9sb3NfZGVzY3JpYmVfcG9pbnRl
ciAocHRyKTsKKwkJCXZ0YWJsZSA9IChNb25vVlRhYmxlKilMT0FEX1ZUQUJMRSAocHRyKTsKIAkJ
fSBlbHNlIGlmIChtYWpvcl9jb2xsZWN0b3IucHRyX2lzX2luX25vbl9waW5uZWRfc3BhY2UgKHB0
ciwgJnN0YXJ0KSkgewogCQkJaWYgKHB0ciA9PSBzdGFydCkKIAkJCQlwcmludGYgKCJQb2ludGVy
IGlzIHRoZSBzdGFydCBvZiBvYmplY3QgJXAgaW4gb2xkc3BhY2UuXG4iLCBzdGFydCk7CkBAIC05
NCw5ICs5NiwxMSBAQAogCQkJCXByaW50ZiAoIlBvaW50ZXIgaW5zaWRlIG9sZHNwYWNlLlxuIik7
CiAJCQlpZiAoc3RhcnQpCiAJCQkJcHRyID0gc3RhcnQ7Ci0JCQltYWpvcl9jb2xsZWN0b3IuZGVz
Y3JpYmVfcG9pbnRlciAocHRyKTsKKwkJCXZ0YWJsZSA9IG1ham9yX2NvbGxlY3Rvci5kZXNjcmli
ZV9wb2ludGVyIChwdHIpOwogCQl9IGVsc2UgaWYgKG1ham9yX2NvbGxlY3Rvci5vYmpfaXNfZnJv
bV9waW5uZWRfYWxsb2MgKHB0cikpIHsKKwkJCS8vIEZJWE1FOiBIYW5kbGUgcG9pbnRlcnMgdG8g
dGhlIGluc2lkZSBvZiBvYmplY3RzCiAJCQlwcmludGYgKCJQb2ludGVyIGlzIGluc2lkZSBhIHBp
bm5lZCBjaHVuay5cbiIpOworCQkJdnRhYmxlID0gKE1vbm9WVGFibGUqKUxPQURfVlRBQkxFIChw
dHIpOwogCQl9IGVsc2UgewogCQkJcHJpbnRmICgiUG9pbnRlciB1bmtub3duLlxuIik7CiAJCQly
ZXR1cm47CkBAIC0xMTIsMTcgKzExNiwxNCBAQAogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCi0JLy8g
RklYTUU6IEhhbmRsZSBwb2ludGVycyB0byB0aGUgaW5zaWRlIG9mIG9iamVjdHMKLQl2dGFibGUg
PSAoTW9ub1ZUYWJsZSopTE9BRF9WVEFCTEUgKHB0cik7Ci0KIAlwcmludGYgKCJWVGFibGU6ICVw
XG4iLCB2dGFibGUpOwogCWlmICh2dGFibGUgPT0gTlVMTCkgewogCQlwcmludGYgKCJWVGFibGUg
aXMgaW52YWxpZCAoZW1wdHkpLlxuIik7Ci0JCXJldHVybjsKKwkJZ290byBicmlkZ2U7CiAJfQog
CWlmIChzZ2VuX3B0cl9pbl9udXJzZXJ5ICh2dGFibGUpKSB7CiAJCXByaW50ZiAoIlZUYWJsZSBp
cyBpbnZhbGlkIChwb2ludHMgaW5zaWRlIG51cnNlcnkpLlxuIik7Ci0JCXJldHVybjsKKwkJZ290
byBicmlkZ2U7CiAJfQogCXByaW50ZiAoIkNsYXNzOiAlc1xuIiwgdnRhYmxlLT5rbGFzcy0+bmFt
ZSk7CiAKQEAgLTEzNCw2ICsxMzUsOSBAQAogCiAJc2l6ZSA9IHNnZW5fc2FmZV9vYmplY3RfZ2V0
X3NpemUgKChNb25vT2JqZWN0KilwdHIpOwogCXByaW50ZiAoIlNpemU6ICVkXG4iLCAoaW50KXNp
emUpOworCisgYnJpZGdlOgorCXNnZW5fYnJpZGdlX2Rlc2NyaWJlX3BvaW50ZXIgKChNb25vT2Jq
ZWN0KilwdHIpOwogfQogCiB2b2lkDQoNCk1vZGlmaWVkOiBtb25vL21ldGFkYXRhL3NnZW4tZ2Mu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KQEAgLTY3Niw3ICs2NzYsNyBAQCBzdHJ1Y3QgX1NnZW5NYWpvckNvbGxl
Y3RvciB7CiAJdm9pZCAoKmluaXRfd29ya2VyX3RocmVhZCkgKHZvaWQgKmRhdGEpOwogCXZvaWQg
KCpyZXNldF93b3JrZXJfZGF0YSkgKHZvaWQgKmRhdGEpOwogCWdib29sZWFuICgqaXNfdmFsaWRf
b2JqZWN0KSAoY2hhciAqb2JqZWN0KTsKLQlnYm9vbGVhbiAoKmRlc2NyaWJlX3BvaW50ZXIpIChj
aGFyICpwb2ludGVyKTsKKwlNb25vVlRhYmxlKiAoKmRlc2NyaWJlX3BvaW50ZXIpIChjaGFyICpw
b2ludGVyKTsKIAlndWludDgqICgqZ2V0X2NhcmR0YWJsZV9tb2RfdW5pb25fZm9yX29iamVjdCkg
KGNoYXIgKm9iamVjdCk7CiAJbG9uZyBsb25nICgqZ2V0X2FuZF9yZXNldF9udW1fbWFqb3Jfb2Jq
ZWN0c19tYXJrZWQpICh2b2lkKTsKIH07CkBAIC03OTUsNiArNzk1LDcgQEAgc3RydWN0IF9TZ2Vu
TWFqb3JDb2xsZWN0b3IgewogZ2Jvb2xlYW4gc2dlbl9pc19icmlkZ2VfY2xhc3MgKE1vbm9DbGFz
cyAqY2xhc3MpIE1PTk9fSU5URVJOQUw7CiB2b2lkIHNnZW5fbWFya19icmlkZ2Vfb2JqZWN0IChN
b25vT2JqZWN0ICpvYmopIE1PTk9fSU5URVJOQUw7CiB2b2lkIHNnZW5fYnJpZGdlX3JlZ2lzdGVy
X2ZpbmFsaXplZF9vYmplY3QgKE1vbm9PYmplY3QgKm9iamVjdCkgTU9OT19JTlRFUk5BTDsKK3Zv
aWQgc2dlbl9icmlkZ2VfZGVzY3JpYmVfcG9pbnRlciAoTW9ub09iamVjdCAqb2JqZWN0KSBNT05P
X0lOVEVSTkFMOwogCiB2b2lkIHNnZW5fc2Nhbl90b2dnbGVyZWZzIChjaGFyICpzdGFydCwgY2hh
ciAqZW5kLCBTY2FuQ29weUNvbnRleHQgY3R4KSBNT05PX0lOVEVSTkFMOwogdm9pZCBzZ2VuX3By
b2Nlc3NfdG9nZ2xlcmVmcyAodm9pZCkgTU9OT19JTlRFUk5BTDsNCg0KTW9kaWZpZWQ6IG1vbm8v
bWV0YWRhdGEvc2dlbi1tYXJrc3dlZXAuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTk0Nyw3ICs5NDcsNyBA
QCBzdHJ1Y3QgX01TQmxvY2tJbmZvIHsKIH0KIAogCi1zdGF0aWMgZ2Jvb2xlYW4KK3N0YXRpYyBN
b25vVlRhYmxlKgogbWFqb3JfZGVzY3JpYmVfcG9pbnRlciAoY2hhciAqcHRyKQogewogCU1TQmxv
Y2tJbmZvICpibG9jazsKQEAgLTk4OSwxMCArOTg5LDEwIEBAIHN0cnVjdCBfTVNCbG9ja0luZm8g
ewogCiAJCVNHRU5fTE9HICgwLCAiIG1hcmtlZCAlZClcbiIsIG1hcmtlZCA/IDEgOiAwKTsKIAot
CQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIHZ0YWJsZTsKIAl9IEVORF9GT1JFQUNIX0JMT0NLOwog
Ci0JcmV0dXJuIEZBTFNFOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZA0KDQogICBD
b21taXQ6IDhhNGUxY2E3NGU2NTQwOTViMzQyNjE5ZDA2ZGNjOWI3M2U0MDI5NDYNCiAgIEF1dGhv
cjogTWFyayBQcm9ic3QgPG1hcmsucHJvYnN0QGdtYWlsLmNvbT4gKHNjaGFuaSkNCiAgICAgRGF0
ZTogMjAxMy0xMS0yNSAxNDo0MjowOCBHTVQNCiAgICAgIFVSTDogaHR0cHM6Ly9naXRodWIuY29t
L21vbm8vbW9uby9jb21taXQvOGE0ZTFjYTc0ZTY1NDA5NWIzNDI2MTlkMDZkY2M5YjczZTQwMjk0
Ng0KDQpbc2dlbl0gSW1wbGVtZW50IG91ciBvd24gcXNvcnQoKSBzbyBhcyBub3QgZG8gZGVhZGxv
Y2suCgpxc29ydCgpIG1heSBjYWxsIG1hbGxvYygpLCB3aGljaCBjYW4gbGVhZCB0byBhIGRlYWRs
b2NrIHdoZW4gdGhlCndvcmxkIGlzIHN0b3BwZWQuCgpGaXhlcyBodHRwczovL2J1Z3ppbGxhLnhh
bWFyaW4uY29tL3Nob3dfYnVnLmNnaT9pZD0xNjQzMi4NCg0KQ2hhbmdlZCBwYXRoczoKICBNIG1v
bm8vbWV0YWRhdGEvTWFrZWZpbGUuYW0uaW4KICBNIG1vbm8vbWV0YWRhdGEvc2dlbi1icmlkZ2Uu
YwogIE0gbW9uby9tZXRhZGF0YS9zZ2VuLWdjLmgKICBNIG1vbm8vbWV0YWRhdGEvc2dlbi1tYXJr
c3dlZXAuYwogIE0gbW9uby9tZXRhZGF0YS9zZ2VuLW51cnNlcnktYWxsb2NhdG9yLmMKQWRkZWQg
cGF0aHM6CiAgQSBtb25vL21ldGFkYXRhL3NnZW4tcXNvcnQuYwoNCk1vZGlmaWVkOiBtb25vL21l
dGFkYXRhL01ha2VmaWxlLmFtLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtMjUzLDcgKzI1Myw4IEBAIHNn
ZW5fc291cmNlcyA9IFwKIAlzZ2VuLXN0dy5jCQkJCVwKIAlzZ2VuLWZpbi13ZWFrLWhhc2guYwlc
CiAJc2dlbi1sYXlvdXQtc3RhdHMuYwlcCi0Jc2dlbi1sYXlvdXQtc3RhdHMuaAorCXNnZW4tbGF5
b3V0LXN0YXRzLmgJXAorCXNnZW4tcXNvcnQuYwogCiBsaWJtb25vcnVudGltZV9sYV9TT1VSQ0VT
ID0gJChjb21tb25fc291cmNlcykgJChnY19kZXBlbmRlbnRfc291cmNlcykgJChib2VobV9zb3Vy
Y2VzKQogbGlibW9ub3J1bnRpbWVfbGFfQ0ZMQUdTID0gJChCT0VITV9ERUZJTkVTKQ0KDQpNb2Rp
ZmllZDogbW9uby9tZXRhZGF0YS9zZ2VuLWJyaWRnZS5jDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpAQCAtNjM2LDcg
KzYzNiw3IEBACiAKIAkvKiBzb3J0IGFycmF5IGFjY29yZGluZyB0byBkZWNyZWFzaW5nIGZpbmlz
aGluZyB0aW1lICovCiAKLQlxc29ydCAoYWxsX2VudHJpZXMsIGhhc2hfdGFibGUubnVtX2VudHJp
ZXMsIHNpemVvZiAoSGFzaEVudHJ5KiksIGNvbXBhcmVfaGFzaF9lbnRyaWVzKTsKKwlzZ2VuX3Fz
b3J0IChhbGxfZW50cmllcywgaGFzaF90YWJsZS5udW1fZW50cmllcywgc2l6ZW9mIChIYXNoRW50
cnkqKSwgY29tcGFyZV9oYXNoX2VudHJpZXMpOwogCiAJU0dFTl9UVl9HRVRUSU1FIChidHYpOwog
CXN0ZXBfMyA9IFNHRU5fVFZfRUxBUFNFRCAoYXR2LCBidHYpOw0KDQpNb2RpZmllZDogbW9uby9t
ZXRhZGF0YS9zZ2VuLWdjLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0xMDUwLDYgKzEwNTAsMTAgQEAgc3Ry
dWN0IF9MT1NPYmplY3QgewogZ2Jvb2xlYW4gc2dlbl9wYXJzZV9lbnZpcm9ubWVudF9zdHJpbmdf
ZXh0cmFjdF9udW1iZXIgKGNvbnN0IGNoYXIgKnN0ciwgZ2xvbmcgKm91dCkgTU9OT19JTlRFUk5B
TDsKIHZvaWQgc2dlbl9lbnZfdmFyX2Vycm9yIChjb25zdCBjaGFyICplbnZfdmFyLCBjb25zdCBj
aGFyICpmYWxsYmFjaywgY29uc3QgY2hhciAqZGVzY3JpcHRpb25fZm9ybWF0LCAuLi4pIE1PTk9f
SU5URVJOQUw7CiAKKy8qIFV0aWxpdGllcyAqLworCit2b2lkIHNnZW5fcXNvcnQgKHZvaWQgKmJh
c2UsIHNpemVfdCBuZWwsIHNpemVfdCB3aWR0aCwgaW50ICgqY29tcGFyKSAoY29uc3Qgdm9pZCos
IGNvbnN0IHZvaWQqKSkgTU9OT19JTlRFUk5BTDsKKwogI2VuZGlmIC8qIEhBVkVfU0dFTl9HQyAq
LwogCiAjZW5kaWYgLyogX19NT05PX1NHRU5HQ19IX18gKi8NCg0KTW9kaWZpZWQ6IG1vbm8vbWV0
YWRhdGEvc2dlbi1tYXJrc3dlZXAuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTE5MTQsNyArMTkxNCw3IEBA
IHN0cnVjdCBfTVNCbG9ja0luZm8gewogCQkJZW1wdHlfYmxvY2tfYXJyIFtpKytdID0gYmxvY2s7
CiAJCVNHRU5fQVNTRVJUICgwLCBpID09IG51bV9lbXB0eV9ibG9ja3MsICJlbXB0eSBibG9jayBj
b3VudCB3cm9uZyIpOwogCi0JCXFzb3J0IChlbXB0eV9ibG9ja19hcnIsIG51bV9lbXB0eV9ibG9j
a3MsIHNpemVvZiAodm9pZCopLCBjb21wYXJlX3BvaW50ZXJzKTsKKwkJc2dlbl9xc29ydCAoZW1w
dHlfYmxvY2tfYXJyLCBudW1fZW1wdHlfYmxvY2tzLCBzaXplb2YgKHZvaWQqKSwgY29tcGFyZV9w
b2ludGVycyk7CiAKIAkJLyoKIAkJICogV2UgaXRlcmF0ZSBvdmVyIHRoZSBmcmVlIGJsb2Nrcywg
dHJ5aW5nIHRvIGZpbmQgTVNfQkxPQ0tfQUxMT0NfTlVNDQoNCk1vZGlmaWVkOiBtb25vL21ldGFk
YXRhL3NnZW4tbnVyc2VyeS1hbGxvY2F0b3IuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KQEAgLTIwMiw3ICsyMDIs
NyBAQCBlbnVtIHsKIGR1bXBfYWxsb2NfcmVjb3JkcyAodm9pZCkKIHsKIAlpbnQgaTsKLQlxc29y
dCAoYWxsb2NfcmVjb3JkcywgbmV4dF9yZWNvcmQsIHNpemVvZiAoQWxsb2NSZWNvcmQpLCBjb21w
X2FsbG9jX3JlY29yZCk7CisJc2dlbl9xc29ydCAoYWxsb2NfcmVjb3JkcywgbmV4dF9yZWNvcmQs
IHNpemVvZiAoQWxsb2NSZWNvcmQpLCBjb21wX2FsbG9jX3JlY29yZCk7CiAKIAlwcmludGYgKCIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EVU1QIFJFQ09SRFMtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmV4dF9yZWNvcmQ7ICsr
aSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIGVudW0gewogCWludCBtYXhfaG9sZSA9IDA7CiAJQWxs
b2NSZWNvcmQgKnByZXYgPSBOVUxMOwogCi0JcXNvcnQgKGFsbG9jX3JlY29yZHMsIG5leHRfcmVj
b3JkLCBzaXplb2YgKEFsbG9jUmVjb3JkKSwgY29tcF9hbGxvY19yZWNvcmQpOworCXNnZW5fcXNv
cnQgKGFsbG9jX3JlY29yZHMsIG5leHRfcmVjb3JkLCBzaXplb2YgKEFsbG9jUmVjb3JkKSwgY29t
cF9hbGxvY19yZWNvcmQpOwogCXByaW50ZiAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLURVTVAgUkVDT1JEUy0gJWQgJWQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIs
IG5leHRfcmVjb3JkLCBhbGxvY19jb3VudCk7CiAJZm9yIChpID0gMDsgaSA8IG5leHRfcmVjb3Jk
OyArK2kpIHsKIAkJQWxsb2NSZWNvcmQgKnJlYyA9IGFsbG9jX3JlY29yZHMgKyBpOw0KDQpBZGRl
ZDogbW9uby9tZXRhZGF0YS9zZ2VuLXFzb3J0LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkBAIC0wLDAgKzEsMTY0
IEBACisvKgorICogc2dlbi1xc29ydC5jOiBRdWlja3NvcnQuCisgKgorICogQXV0aG9yOgorICog
CU1hcmsgUHJvYnN0IDxtYXJrLnByb2JzdEBnbWFpbC5jb20+CisgKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFhhbWFyaW4gSW5jCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgMi4wIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSAyLjAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmZGVmIEhBVkVfU0dFTl9HQwor
CisjaW5jbHVkZSAibWV0YWRhdGEvc2dlbi1nYy5oIgorCisjZGVmaW5lIEVMRU0oaSkJCSgoKHVu
c2lnbmVkIGNoYXIqKWJhc2UpICsgKChpKSAqIHdpZHRoKSkKKyNkZWZpbmUgU1dBUChpLGopCWRv
IHsJCQkJCVwKKwkJc2l6ZV90IF9faSA9IChpKSwgX19qID0gKGopOwkJCVwKKwkJaWYgKF9faSAh
PSBfX2opIHsJCQkJXAorCQkJbWVtY3B5IChzd2FwX3RtcCwgRUxFTSAoX19pKSwgd2lkdGgpOwlc
CisJCQltZW1jcHkgKEVMRU0gKF9faSksIEVMRU0gKF9faiksIHdpZHRoKTsJXAorCQkJbWVtY3B5
IChFTEVNIChfX2opLCBzd2FwX3RtcCwgd2lkdGgpOwlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAo
MCkKKworc3RhdGljIHNpemVfdAorcGFydGl0aW9uICh2b2lkICpiYXNlLCBzaXplX3QgbmVsLCBz
aXplX3Qgd2lkdGgsIGludCAoKmNvbXBhcikgKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKiksIHVu
c2lnbmVkIGNoYXIgKnBpdm90X3RtcCwgdW5zaWduZWQgY2hhciAqc3dhcF90bXApCit7CisJc2l6
ZV90IHBpdm90X2lkeCA9IG5lbCA+PiAxOworCXNpemVfdCBzLCBpOworCisJbWVtY3B5IChwaXZv
dF90bXAsIEVMRU0gKHBpdm90X2lkeCksIHdpZHRoKTsKKwlTV0FQIChwaXZvdF9pZHgsIG5lbCAt
IDEpOworCXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBuZWwgLSAxOyArK2kpIHsKKwkJaWYgKGNv
bXBhciAoRUxFTSAoaSksIHBpdm90X3RtcCkgPD0gMCkgeworCQkJU1dBUCAoaSwgcyk7CisJCQkr
K3M7CisJCX0KKwl9CisJU1dBUCAocywgbmVsIC0gMSk7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRp
YyB2b2lkCitxc29ydF9yZWMgKHZvaWQgKmJhc2UsIHNpemVfdCBuZWwsIHNpemVfdCB3aWR0aCwg
aW50ICgqY29tcGFyKSAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqKSwgdW5zaWduZWQgY2hhciAq
cGl2b3RfdG1wLCB1bnNpZ25lZCBjaGFyICpzd2FwX3RtcCkKK3sKKwlzaXplX3QgcGl2b3RfaWR4
OworCisJaWYgKG5lbCA8PSAxKQorCQlyZXR1cm47CisKKwlwaXZvdF9pZHggPSBwYXJ0aXRpb24g
KGJhc2UsIG5lbCwgd2lkdGgsIGNvbXBhciwgcGl2b3RfdG1wLCBzd2FwX3RtcCk7CisJcXNvcnRf
cmVjIChiYXNlLCBwaXZvdF9pZHgsIHdpZHRoLCBjb21wYXIsIHBpdm90X3RtcCwgc3dhcF90bXAp
OworCWlmIChwaXZvdF9pZHggPCBuZWwpCisJCXFzb3J0X3JlYyAoRUxFTSAocGl2b3RfaWR4ICsg
MSksIG5lbCAtIHBpdm90X2lkeCAtIDEsIHdpZHRoLCBjb21wYXIsIHBpdm90X3RtcCwgc3dhcF90
bXApOworfQorCit2b2lkCitzZ2VuX3Fzb3J0ICh2b2lkICpiYXNlLCBzaXplX3QgbmVsLCBzaXpl
X3Qgd2lkdGgsIGludCAoKmNvbXBhcikgKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpCit7CisJ
dW5zaWduZWQgY2hhciBwaXZvdF90bXAgW3dpZHRoXTsKKwl1bnNpZ25lZCBjaGFyIHN3YXBfdG1w
IFt3aWR0aF07CisKKwlxc29ydF9yZWMgKGJhc2UsIG5lbCwgd2lkdGgsIGNvbXBhciwgcGl2b3Rf
dG1wLCBzd2FwX3RtcCk7Cit9CisKKyNpZmRlZiBTR0VOX1FTT1JUX1RFU1QKKworc3RhdGljIGlu
dAorY29tcGFyZV9pbnRzIChjb25zdCB2b2lkICpwYSwgY29uc3Qgdm9pZCAqcGIpCit7CisJaW50
IGEgPSAqKGNvbnN0IGludCopcGE7CisJaW50IGIgPSAqKGNvbnN0IGludCopcGI7CisJaWYgKGEg
PCBiKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7
Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQga2V5OworCWludCB2YWw7Cit9IHRlc3RzdHJ1
Y3RfdDsKKworc3RhdGljIGludAorY29tcGFyZV90ZXN0c3RydWN0cyAoY29uc3Qgdm9pZCAqcGEs
IGNvbnN0IHZvaWQgKnBiKQoreworCWludCBhID0gKChjb25zdCB0ZXN0c3RydWN0X3QqKXBhKS0+
a2V5OworCWludCBiID0gKChjb25zdCB0ZXN0c3RydWN0X3QqKXBiKS0+a2V5OworCWlmIChhIDwg
YikKKwkJcmV0dXJuIC0xOworCWlmIChhID09IGIpCisJCXJldHVybiAwOworCXJldHVybiAxOwor
fQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK3N0YXRpYyB2
b2lkCitjb21wYXJlX3NvcnRzICh2b2lkICpiYXNlLCBzaXplX3QgbmVsLCBzaXplX3Qgd2lkdGgs
IGludCAoKmNvbXBhcikgKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpCit7CisJc2l6ZV90IGxl
biA9IG5lbCAqIHdpZHRoOworCXZvaWQgKmIxID0gbWFsbG9jIChsZW4pOworCXZvaWQgKmIyID0g
bWFsbG9jIChsZW4pOworCisJbWVtY3B5IChiMSwgYmFzZSwgbGVuKTsKKwltZW1jcHkgKGIyLCBi
YXNlLCBsZW4pOworCisJcXNvcnQgKGIxLCBuZWwsIHdpZHRoLCBjb21wYXIpOworCXNnZW5fcXNv
cnQgKGIyLCBuZWwsIHdpZHRoLCBjb21wYXIpOworCisJYXNzZXJ0ICghbWVtY21wIChiMSwgYjIs
IGxlbikpOworCisJZnJlZSAoYjEpOworCWZyZWUgKGIyKTsKK30KKworaW50CittYWluICh2b2lk
KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA0MDAwOyArK2kpIHsKKwkJaW50IGEgW2ld
OworCQlpbnQgajsKKworCQlmb3IgKGogPSAwOyBqIDwgaTsgKytqKQorCQkJYSBbal0gPSBpIC0g
aiAtIDE7CisJCWNvbXBhcmVfc29ydHMgKGEsIGksIHNpemVvZiAoaW50KSwgY29tcGFyZV9pbnRz
KTsKKwl9CisKKwlzcmFuZG9tZGV2ICgpOworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyArK2kpIHsK
KwkJdGVzdHN0cnVjdF90IGEgWzIwMF07CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgMjAw
OyArK2opIHsKKwkJCWEgW2pdLmtleSA9IHJhbmRvbSAoKTsKKwkJCWEgW2pdLnZhbCA9IHJhbmRv
bSAoKTsKKwkJfQorCisJCWNvbXBhcmVfc29ydHMgKGEsIDIwMCwgc2l6ZW9mICh0ZXN0c3RydWN0
X3QpLCBjb21wYXJlX3Rlc3RzdHJ1Y3RzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlm
CisKKyNlbmRpZg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTW9uby1wYXRjaGVzIG1haWxsaXN0ICAtICBNb25vLXBhdGNoZXNAbGlzdHMueGltaWFuLmNv
bQpodHRwOi8vbGlzdHMueGltaWFuLmNvbS9tYWlsbWFuL2xpc3RpbmZvL21vbm8tcGF0Y2hlcwo=