------------UV8IwqfSUYyR4jschEmsFb Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: 7bit I have made some changes to the faulty patch to string.c that I posted last week, and the attached version seems to pass the tests (though there are a couple of failures, but these are the same ones as the vanilla 1.9 I checked out). I had to make one change to a test of String#split because it now raises a different kind or error. Hope that's OK. I know this is a big patch, but I am running out of time to split it into smaller chunks to make it easier to merge. I can try. The main optimizations are: - The CODERANGE flags were being cleared unnecessarilly in several places. This can cause the string to be re-scanned, which is inefficient. I think this was the main problem with the "count_words benchmark. - Optimized String#split when the parameter is a string. Now about twice as fast - Several other minor optimizations, mainly for single-byte character strings Cheers Mike On Fri, 12 Sep 2008 02:16:51 +1000, NARUSE, Yui <naruse / airemix.jp> wrote: > P.S. > If you split your patch into small atomic patches, > your patch will be merged rapidly. > ------------UV8IwqfSUYyR4jschEmsFb Content-Disposition: attachment; filename=string.patch Content-Type: application/octet-stream; name=string.patch Content-Transfer-Encoding: Base64 SW5kZXg6IHN0cmluZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN0cmluZy5j CShyZXZpc2lvbiAxOTA3MykKKysrIHN0cmluZy5jCSh3b3JraW5nIGNvcHkpCkBA IC0xMTEsNyArMTExLDcgQEAKIAogI2RlZmluZSBTVFJfRU5DX0dFVChzdHIpIHJi X2VuY19mcm9tX2luZGV4KEVOQ09ESU5HX0dFVChzdHIpKQogCi1zdGF0aWMgaW50 CitzdGF0aWMgaW5saW5lIGludAogc2luZ2xlX2J5dGVfb3B0aW1pemFibGUoVkFM VUUgc3RyKQogewogICAgIHJiX2VuY29kaW5nICplbmMgPSBTVFJfRU5DX0dFVChz dHIpOwpAQCAtMTA1Nyw2ICsxMDU3LDE3IEBACiAgICAgRU5DX0NPREVSQU5HRV9D TEVBUihzdHIpOwogfQogCisvKiBBcyByYl9zdHJfbW9kaWZ5KCksIGJ1dCBkb24n dCBjbGVhciBjb2RlcmFuZ2UgKi8KK3N0YXRpYyB2b2lkCitzdHJfbW9kaWZ5KFZB TFVFIHN0cikKK3sKKyAgICBpZiAoIXN0cl9pbmRlcGVuZGVudChzdHIpKQorCXN0 cl9tYWtlX2luZGVwZW5kZW50KHN0cik7CisgICAgaWYgKEVOQ19DT0RFUkFOR0Uo c3RyKSA9PSBFTkNfQ09ERVJBTkdFX0JST0tFTikKKwkvKiBGb3JjZSByZS1zY2Fu IGxhdGVyICovCisJRU5DX0NPREVSQU5HRV9DTEVBUihzdHIpOworfQorCiB2b2lk CiByYl9zdHJfYXNzb2NpYXRlKFZBTFVFIHN0ciwgVkFMVUUgYWRkKQogewpAQCAt MTI4MSwxMiArMTI5MiwyNyBAQAogICAgIHJiX2VuY29kaW5nICplbmMgPSBTVFJf RU5DX0dFVChzdHIpOwogICAgIFZBTFVFIHN0cjI7CiAgICAgY2hhciAqcCwgKnMg PSBSU1RSSU5HX1BUUihzdHIpLCAqZSA9IHMgKyBSU1RSSU5HX0xFTihzdHIpOwot ICAgIGludCBzaW5nbGVieXRlOwogCiAgICAgaWYgKGxlbiA8IDApIHJldHVybiBR bmlsOwogICAgIGlmICghUlNUUklOR19MRU4oc3RyKSkgewogCWxlbiA9IDA7CiAg ICAgfQorICAgIGlmIChzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIpKSB7CisJ aWYgKGJlZyA+IFJTVFJJTkdfTEVOKHN0cikpIHJldHVybiBRbmlsOworCWlmIChi ZWcgPCAwKSB7CisJICAgIGJlZyArPSBSU1RSSU5HX0xFTihzdHIpOworCSAgICBp ZiAoYmVnIDwgMCkgcmV0dXJuIFFuaWw7CisJfQorCWlmIChiZWcgKyBsZW4gPiBS U1RSSU5HX0xFTihzdHIpKQorCSAgICBsZW4gPSBSU1RSSU5HX0xFTihzdHIpIC0g YmVnOworCWlmIChsZW4gPD0gMCkgeworCSAgICBsZW4gPSAwOworCSAgICBwID0g MDsKKwl9CisJZWxzZQorCSAgICBwID0gcyArIGJlZzsKKwlnb3RvIHN1YjsKKyAg ICB9CiAgICAgaWYgKGJlZyA8IDApIHsKIAlpZiAobGVuID4gLWJlZykgbGVuID0g LWJlZzsKIAlpZiAoLWJlZyAqIHJiX2VuY19tYm1heGxlbihlbmMpIDwgUlNUUklO R19MRU4oc3RyKSAvIDgpIHsKQEAgLTEzMDcsNyArMTMzMyw2IEBACiAgICAgZWxz ZSBpZiAoYmVnID4gMCAmJiBiZWcgPiBzdHJfc3RybGVuKHN0ciwgZW5jKSkgewog CXJldHVybiBRbmlsOwogICAgIH0KLSAgICBzaW5nbGVieXRlID0gc2luZ2xlX2J5 dGVfb3B0aW1pemFibGUoc3RyKTsKICAgICBpZiAobGVuID09IDApIHsKIAlwID0g MDsKICAgICB9CkBAIC0xMzE4LDE3ICsxMzQzLDI0IEBACiAgICAgICAgIGxlbiA9 IHN0cl91dGY4X29mZnNldChwLCBlLCBsZW4pOwogICAgIH0KICNlbmRpZgotICAg IGVsc2UgaWYgKChwID0gc3RyX250aChzLCBlLCBiZWcsIGVuYywgc2luZ2xlYnl0 ZSkpID09IGUpIHsKLQlsZW4gPSAwOwotICAgIH0KICAgICBlbHNlIGlmIChyYl9l bmNfbWJtYXhsZW4oZW5jKSA9PSByYl9lbmNfbWJtaW5sZW4oZW5jKSkgewotICAg ICAgICBpZiAobGVuICogcmJfZW5jX21ibWF4bGVuKGVuYykgPiBlIC0gcCkKKwlp bnQgY2hhcl9zeiA9IHJiX2VuY19tYm1heGxlbihlbmMpOworCisJcCA9IHMgKyBi ZWcgKiBjaGFyX3N6OworCWlmIChwID4gZSkgeworCSAgICBwID0gZTsKKwkgICAg bGVuID0gMDsKKwl9CisgICAgICAgIGVsc2UgaWYgKGxlbiAqIGNoYXJfc3ogPiBl IC0gcCkKICAgICAgICAgICAgIGxlbiA9IGUgLSBwOwogICAgICAgICBlbHNlCi0J ICAgIGxlbiAqPSByYl9lbmNfbWJtYXhsZW4oZW5jKTsKKwkgICAgbGVuICo9IGNo YXJfc3o7CiAgICAgfQorICAgIGVsc2UgaWYgKChwID0gc3RyX250aChzLCBlLCBi ZWcsIGVuYywgMCkpID09IGUpIHsKKwlsZW4gPSAwOworICAgIH0KICAgICBlbHNl IHsKLQlsZW4gPSBzdHJfb2Zmc2V0KHAsIGUsIGxlbiwgZW5jLCBzaW5nbGVieXRl KTsKKwlsZW4gPSBzdHJfb2Zmc2V0KHAsIGUsIGxlbiwgZW5jLCAwKTsKICAgICB9 CiAgIHN1YjoKICAgICBpZiAobGVuID4gUlNUUklOR19FTUJFRF9MRU5fTUFYICYm IGJlZyArIGxlbiA9PSBSU1RSSU5HX0xFTihzdHIpKSB7CkBAIC0yMDY1LDE5ICsy MDk3LDMzIEBACiAKICAgICBwMSA9IFJTVFJJTkdfUFRSKHN0cjEpOyBwMWVuZCA9 IFJTVFJJTkdfRU5EKHN0cjEpOwogICAgIHAyID0gUlNUUklOR19QVFIoc3RyMik7 IHAyZW5kID0gUlNUUklOR19FTkQoc3RyMik7Ci0gICAgd2hpbGUgKHAxIDwgcDFl bmQgJiYgcDIgPCBwMmVuZCkgewotCWludCBjMSA9IHJiX2VuY19jb2RlcG9pbnQo cDEsIHAxZW5kLCBlbmMpOwotCWludCBjMiA9IHJiX2VuY19jb2RlcG9pbnQocDIs IHAyZW5kLCBlbmMpOworICAgIGlmIChzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShz dHIxKSAmJiBzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIyKSkgeworCXdoaWxl IChwMSA8IHAxZW5kICYmIHAyIDwgcDJlbmQpIHsKKwkgICAgaWYgKCpwMSAhPSAq cDIpIHsKKwkJaW50IGMxID0gcmJfZW5jX3RvdXBwZXIoKnAxICYgMHhmZiwgZW5j KTsKKwkJaW50IGMyID0gcmJfZW5jX3RvdXBwZXIoKnAyICYgMHhmZiwgZW5jKTsK KwkJaWYgKGMxID4gYzIpIHJldHVybiBJTlQyRklYKDEpOworCQlpZiAoYzEgPCBj MikgcmV0dXJuIElOVDJGSVgoLTEpOworCSAgICB9CisJICAgIHAxKys7CisJICAg IHAyKys7CisJfQorICAgIH0KKyAgICBlbHNlIHsKKwl3aGlsZSAocDEgPCBwMWVu ZCAmJiBwMiA8IHAyZW5kKSB7CisJICAgIGludCBjMSA9IHJiX2VuY19jb2RlcG9p bnQocDEsIHAxZW5kLCBlbmMpOworCSAgICBpbnQgYzIgPSByYl9lbmNfY29kZXBv aW50KHAyLCBwMmVuZCwgZW5jKTsKIAotCWlmIChjMSAhPSBjMikgewotCSAgICBj MSA9IHJiX2VuY190b3VwcGVyKGMxLCBlbmMpOwotCSAgICBjMiA9IHJiX2VuY190 b3VwcGVyKGMyLCBlbmMpOwotCSAgICBpZiAoYzEgPiBjMikgcmV0dXJuIElOVDJG SVgoMSk7Ci0JICAgIGlmIChjMSA8IGMyKSByZXR1cm4gSU5UMkZJWCgtMSk7CisJ ICAgIGlmIChjMSAhPSBjMikgeworCQljMSA9IHJiX2VuY190b3VwcGVyKGMxLCBl bmMpOworCQljMiA9IHJiX2VuY190b3VwcGVyKGMyLCBlbmMpOworCQlpZiAoYzEg PiBjMikgcmV0dXJuIElOVDJGSVgoMSk7CisJCWlmIChjMSA8IGMyKSByZXR1cm4g SU5UMkZJWCgtMSk7CisJICAgIH0KKwkgICAgbGVuID0gcmJfZW5jX2NvZGVsZW4o YzEsIGVuYyk7CisJICAgIHAxICs9IGxlbjsKKwkgICAgcDIgKz0gbGVuOwogCX0K LQlsZW4gPSByYl9lbmNfY29kZWxlbihjMSwgZW5jKTsKLQlwMSArPSBsZW47Ci0J cDIgKz0gbGVuOwogICAgIH0KICAgICBpZiAoUlNUUklOR19MRU4oc3RyMSkgPT0g UlNUUklOR19MRU4oc3RyMikpIHJldHVybiBJTlQyRklYKDApOwogICAgIGlmIChS U1RSSU5HX0xFTihzdHIxKSA+IFJTVFJJTkdfTEVOKHN0cjIpKSByZXR1cm4gSU5U MkZJWCgxKTsKQEAgLTI4NTAsNiArMjg5Niw3IEBACiAJUlNUUklORyhzdHIpLT5h cy5oZWFwLmxlbiA9IG5sZW47CiAgICAgfQogICAgIHB0cltubGVuXSA9IDA7Cisg ICAgLyogSXMgdGhpcyBuZWNlc3Nhcnk/IElzbid0IGxlbiBhbHdheXMgYSB3aG9s ZSBudW1iZXIgb2YgY2hhcnM/ICovCiAgICAgRU5DX0NPREVSQU5HRV9DTEVBUihz dHIpOwogICAgIHJldHVybiBzdHI7CiB9CkBAIC0yODU3LDEzICsyOTA0LDE1IEBA CiBzdGF0aWMgdm9pZAogcmJfc3RyX3NwbGljZV8wKFZBTFVFIHN0ciwgbG9uZyBi ZWcsIGxvbmcgbGVuLCBWQUxVRSB2YWwpCiB7CisgICAgaW50IGNyOworCiAgICAg aWYgKGJlZyA9PSAwICYmIFJTVFJJTkdfTEVOKHZhbCkgPT0gMCkgewogCXJiX3N0 cl9kcm9wX2J5dGVzKHN0ciwgbGVuKTsKIAlPQkpfSU5GRUNUKHN0ciwgdmFsKTsK IAlyZXR1cm47CiAgICAgfQogCi0gICAgcmJfc3RyX21vZGlmeShzdHIpOworICAg IHN0cl9tb2RpZnkoc3RyKTsKICAgICBpZiAobGVuIDwgUlNUUklOR19MRU4odmFs KSkgewogCS8qIGV4cGFuZCBzdHJpbmcgKi8KIAlSRVNJWkVfQ0FQQShzdHIsIFJT VFJJTkdfTEVOKHN0cikgKyBSU1RSSU5HX0xFTih2YWwpIC0gbGVuICsgMSk7CkBA IC0yODg1LDYgKzI5MzQsOSBAQAogCVJTVFJJTkdfUFRSKHN0cilbUlNUUklOR19M RU4oc3RyKV0gPSAnXDAnOwogICAgIH0KICAgICBPQkpfSU5GRUNUKHN0ciwgdmFs KTsKKyAgICBjciA9IEVOQ19DT0RFUkFOR0VfQU5EKEVOQ19DT0RFUkFOR0Uoc3Ry KSwgRU5DX0NPREVSQU5HRSh2YWwpKTsKKyAgICBpZiAoY3IgIT0gRU5DX0NPREVS QU5HRV9CUk9LRU4pCisJRU5DX0NPREVSQU5HRV9TRVQoc3RyLCBjcik7CiB9CiAK IHN0YXRpYyB2b2lkCkBAIC0yODk4LDcgKzI5NTAsNiBAQAogICAgIGlmIChsZW4g PCAwKSByYl9yYWlzZShyYl9lSW5kZXhFcnJvciwgIm5lZ2F0aXZlIGxlbmd0aCAl bGQiLCBsZW4pOwogCiAgICAgU3RyaW5nVmFsdWUodmFsKTsKLSAgICByYl9zdHJf bW9kaWZ5KHN0cik7CiAgICAgZW5jID0gcmJfZW5jX2NoZWNrKHN0ciwgdmFsKTsK ICAgICBzbGVuID0gc3RyX3N0cmxlbihzdHIsIGVuYyk7CiAKQEAgLTI5MTUsNiAr Mjk2Niw3IEBACiAgICAgaWYgKHNsZW4gPCBsZW4gfHwgc2xlbiA8IGJlZyArIGxl bikgewogCWxlbiA9IHNsZW4gLSBiZWc7CiAgICAgfQorICAgIHN0cl9tb2RpZnko c3RyKTsKICAgICBwID0gc3RyX250aChSU1RSSU5HX1BUUihzdHIpLCBSU1RSSU5H X0VORChzdHIpLCBiZWcsIGVuYywgc2luZ2xlYnl0ZSk7CiAgICAgaWYgKCFwKSBw ID0gUlNUUklOR19FTkQoc3RyKTsKICAgICBlID0gc3RyX250aChwLCBSU1RSSU5H X0VORChzdHIpLCBsZW4sIGVuYywgc2luZ2xlYnl0ZSk7CkBAIC0zMTE0LDcgKzMx NjYsNyBAQAogICAgIGZvciAoaT0wOyBpPGFyZ2M7IGkrKykgewogCWJ1ZltpXSA9 IGFyZ3ZbaV07CiAgICAgfQotICAgIHJiX3N0cl9tb2RpZnkoc3RyKTsKKyAgICBz dHJfbW9kaWZ5KHN0cik7CiAgICAgYnVmW2ldID0gcmJfc3RyX25ldygwLDApOwog ICAgIHJlc3VsdCA9IHJiX3N0cl9hcmVmX20oYXJnYywgYnVmLCBzdHIpOwogICAg IGlmICghTklMX1AocmVzdWx0KSkgewpAQCAtMzUyNCw3ICszNTc2LDEwIEBACiAg ICAgU1RSX1NFVF9FTUJFRChzdHIpOwogICAgIFNUUl9TRVRfRU1CRURfTEVOKHN0 ciwgMCk7CiAgICAgUlNUUklOR19QVFIoc3RyKVswXSA9IDA7Ci0gICAgRU5DX0NP REVSQU5HRV9DTEVBUihzdHIpOworICAgIGlmIChyYl9lbmNfYXNjaWljb21wYXQo U1RSX0VOQ19HRVQoc3RyKSkpCisJRU5DX0NPREVSQU5HRV9TRVQoc3RyLCBFTkNf Q09ERVJBTkdFXzdCSVQpOworICAgIGVsc2UKKwlFTkNfQ09ERVJBTkdFX1NFVChz dHIsIEVOQ19DT0RFUkFOR0VfVkFMSUQpOwogICAgIHJldHVybiBzdHI7CiB9CiAK QEAgLTM2NTYsMjIgKzM3MTEsMTUgQEAKICAgICBpZiAoUlNUUklOR19MRU4oc3Ry KSA+IDEpIHsKIAlpZiAoc2luZ2xlX2J5dGVfb3B0aW1pemFibGUoc3RyKSkgewog CSAgICBjaGFyICpzLCAqZSwgYzsKLQkgICAgaW50IGNyID0gRU5DX0NPREVSQU5H RShzdHIpOwotCSAgICBpbnQgc2luZ2xlID0gMTsKIAotCSAgICByYl9zdHJfbW9k aWZ5KHN0cik7CisJICAgIHN0cl9tb2RpZnkoc3RyKTsKIAkgICAgcyA9IFJTVFJJ TkdfUFRSKHN0cik7CiAJICAgIGUgPSBSU1RSSU5HX0VORChzdHIpIC0gMTsKIAkg ICAgd2hpbGUgKHMgPCBlKSB7CiAJCWMgPSAqczsKLQkJaWYgKCpzICYgMHg4MCkg c2luZ2xlID0gMDsKIAkJKnMrKyA9ICplOwogIAkJKmUtLSA9IGM7CiAJICAgIH0K LQkgICAgaWYgKGNyID09IEVOQ19DT0RFUkFOR0VfVU5LTk9XTiAmJiBzaW5nbGUp IHsKLQkJY3IgPSBFTkNfQ09ERVJBTkdFXzdCSVQ7Ci0JICAgIH0KLQkgICAgRU5D X0NPREVSQU5HRV9TRVQoc3RyLCBjcik7CiAJfQogCWVsc2UgewogCSAgICByYl9z dHJfc2hhcmVkX3JlcGxhY2Uoc3RyLCByYl9zdHJfcmV2ZXJzZShzdHIpKTsKQEAg LTQwMzQsMjMgKzQwODIsMzQgQEAKICAgICByYl9lbmNvZGluZyAqZW5jOwogICAg IGNoYXIgKnMsICpzZW5kOwogICAgIGludCBtb2RpZnkgPSAwOwotICAgIGludCBj ciA9IEVOQ19DT0RFUkFOR0Uoc3RyKTsKIAotICAgIHJiX3N0cl9tb2RpZnkoc3Ry KTsKKyAgICBzdHJfbW9kaWZ5KHN0cik7CiAgICAgZW5jID0gU1RSX0VOQ19HRVQo c3RyKTsKICAgICBzID0gUlNUUklOR19QVFIoc3RyKTsgc2VuZCA9IFJTVFJJTkdf RU5EKHN0cik7Ci0gICAgd2hpbGUgKHMgPCBzZW5kKSB7Ci0JaW50IGMgPSByYl9l bmNfY29kZXBvaW50KHMsIHNlbmQsIGVuYyk7CisgICAgaWYgKHNpbmdsZV9ieXRl X29wdGltaXphYmxlKHN0cikpIHsKKwl3aGlsZSAocyA8IHNlbmQpIHsKKwkgICAg aW50IGMgPSAoKnMgJiAweGZmKTsKIAotCWlmIChyYl9lbmNfaXNsb3dlcihjLCBl bmMpKSB7Ci0JICAgIC8qIGFzc3VtaW5nIHRvdXBwZXIgcmV0dXJucyBjb2RlcG9p bnQgd2l0aCBzYW1lIHNpemUgKi8KLQkgICAgcmJfZW5jX21iY3B1dChyYl9lbmNf dG91cHBlcihjLCBlbmMpLCBzLCBlbmMpOwotCSAgICBtb2RpZnkgPSAxOworCSAg ICBpZiAocmJfZW5jX2lzbG93ZXIoYywgZW5jKSkgeworCQkqcyA9IHJiX2VuY190 b3VwcGVyKGMgLCBlbmMpOworCQltb2RpZnkgPSAxOworCSAgICB9CisJICAgIHMr KzsKIAl9Ci0JcyArPSByYl9lbmNfY29kZWxlbihjLCBlbmMpOwogICAgIH0KKyAg ICBlbHNlIHsKKwl3aGlsZSAocyA8IHNlbmQpIHsKKwkgICAgaW50IGMgPSByYl9l bmNfY29kZXBvaW50KHMsIHNlbmQsIGVuYyk7CiAKLSAgICBFTkNfQ09ERVJBTkdF X1NFVChzdHIsIGNyKTsKKwkgICAgaWYgKHJiX2VuY19pc2xvd2VyKGMsIGVuYykp IHsKKwkJLyogYXNzdW1pbmcgdG91cHBlciByZXR1cm5zIGNvZGVwb2ludCB3aXRo IHNhbWUgc2l6ZSAqLworCQlyYl9lbmNfbWJjcHV0KHJiX2VuY190b3VwcGVyKGMs IGVuYyksIHMsIGVuYyk7CisJCW1vZGlmeSA9IDE7CisJICAgIH0KKwkgICAgcyAr PSByYl9lbmNfY29kZWxlbihjLCBlbmMpOworCX0KKyAgICB9CisKICAgICBpZiAo bW9kaWZ5KSByZXR1cm4gc3RyOwogICAgIHJldHVybiBRbmlsOwogfQpAQCAtNDA5 MiwyMyArNDE1MSwzNCBAQAogICAgIHJiX2VuY29kaW5nICplbmM7CiAgICAgY2hh ciAqcywgKnNlbmQ7CiAgICAgaW50IG1vZGlmeSA9IDA7Ci0gICAgaW50IGNyID0g RU5DX0NPREVSQU5HRShzdHIpOwogCi0gICAgcmJfc3RyX21vZGlmeShzdHIpOwor ICAgIHN0cl9tb2RpZnkoc3RyKTsKICAgICBlbmMgPSBTVFJfRU5DX0dFVChzdHIp OwogICAgIHMgPSBSU1RSSU5HX1BUUihzdHIpOyBzZW5kID0gUlNUUklOR19FTkQo c3RyKTsKLSAgICB3aGlsZSAocyA8IHNlbmQpIHsKLQlpbnQgYyA9IHJiX2VuY19j b2RlcG9pbnQocywgc2VuZCwgZW5jKTsKKyAgICBpZiAoc2luZ2xlX2J5dGVfb3B0 aW1pemFibGUoc3RyKSkgeworCXdoaWxlIChzIDwgc2VuZCkgeworCSAgICBpbnQg YyA9ICgqcyAmIDB4ZmYpOwogCi0JaWYgKHJiX2VuY19pc3VwcGVyKGMsIGVuYykp IHsKLQkgICAgLyogYXNzdW1pbmcgdG91cHBlciByZXR1cm5zIGNvZGVwb2ludCB3 aXRoIHNhbWUgc2l6ZSAqLwotCSAgICByYl9lbmNfbWJjcHV0KHJiX2VuY190b2xv d2VyKGMsIGVuYyksIHMsIGVuYyk7Ci0JICAgIG1vZGlmeSA9IDE7CisJICAgIGlm IChyYl9lbmNfaXN1cHBlcihjLCBlbmMpKSB7CisJCSpzID0gcmJfZW5jX3RvbG93 ZXIoYyAsIGVuYyk7CisJCW1vZGlmeSA9IDE7CisJICAgIH0KKwkgICAgcysrOwog CX0KLQlzICs9IHJiX2VuY19jb2RlbGVuKGMsIGVuYyk7CiAgICAgfQorICAgIGVs c2UgeworCXdoaWxlIChzIDwgc2VuZCkgeworCSAgICBpbnQgYyA9IHJiX2VuY19j b2RlcG9pbnQocywgc2VuZCwgZW5jKTsKIAotICAgIEVOQ19DT0RFUkFOR0VfU0VU KHN0ciwgY3IpOworCSAgICBpZiAocmJfZW5jX2lzdXBwZXIoYywgZW5jKSkgewor CQkvKiBhc3N1bWluZyB0b2xvd2VyIHJldHVybnMgY29kZXBvaW50IHdpdGggc2Ft ZSBzaXplICovCisJCXJiX2VuY19tYmNwdXQocmJfZW5jX3RvbG93ZXIoYywgZW5j KSwgcywgZW5jKTsKKwkJbW9kaWZ5ID0gMTsKKwkgICAgfQorCSAgICBzICs9IHJi X2VuY19jb2RlbGVuKGMsIGVuYyk7CisJfQorICAgIH0KKwogICAgIGlmIChtb2Rp ZnkpIHJldHVybiBzdHI7CiAgICAgcmV0dXJuIFFuaWw7CiB9CkBAIC00MTU2LDkg KzQyMjYsOCBAQAogICAgIGNoYXIgKnMsICpzZW5kOwogICAgIGludCBtb2RpZnkg PSAwOwogICAgIGludCBjOwotICAgIGludCBjciA9IEVOQ19DT0RFUkFOR0Uoc3Ry KTsKIAotICAgIHJiX3N0cl9tb2RpZnkoc3RyKTsKKyAgICBzdHJfbW9kaWZ5KHN0 cik7CiAgICAgZW5jID0gU1RSX0VOQ19HRVQoc3RyKTsKICAgICBpZiAoUlNUUklO R19MRU4oc3RyKSA9PSAwIHx8ICFSU1RSSU5HX1BUUihzdHIpKSByZXR1cm4gUW5p bDsKICAgICBzID0gUlNUUklOR19QVFIoc3RyKTsgc2VuZCA9IFJTVFJJTkdfRU5E KHN0cik7CkBAIC00MTc4LDcgKzQyNDcsNiBAQAogCXMgKz0gcmJfZW5jX2NvZGVs ZW4oYywgZW5jKTsKICAgICB9CiAKLSAgICBFTkNfQ09ERVJBTkdFX1NFVChzdHIs IGNyKTsKICAgICBpZiAobW9kaWZ5KSByZXR1cm4gc3RyOwogICAgIHJldHVybiBR bmlsOwogfQpAQCAtNDIyMSwyOCArNDI4OSw0MyBAQAogICAgIHJiX2VuY29kaW5n ICplbmM7CiAgICAgY2hhciAqcywgKnNlbmQ7CiAgICAgaW50IG1vZGlmeSA9IDA7 Ci0gICAgaW50IGNyID0gRU5DX0NPREVSQU5HRShzdHIpOwogCi0gICAgcmJfc3Ry X21vZGlmeShzdHIpOworICAgIHN0cl9tb2RpZnkoc3RyKTsKICAgICBlbmMgPSBT VFJfRU5DX0dFVChzdHIpOwogICAgIHMgPSBSU1RSSU5HX1BUUihzdHIpOyBzZW5k ID0gUlNUUklOR19FTkQoc3RyKTsKLSAgICB3aGlsZSAocyA8IHNlbmQpIHsKLQlp bnQgYyA9IHJiX2VuY19jb2RlcG9pbnQocywgc2VuZCwgZW5jKTsKKyAgICBpZiAo c2luZ2xlX2J5dGVfb3B0aW1pemFibGUoc3RyKSkgeworCXdoaWxlIChzIDwgc2Vu ZCkgeworCSAgICBpbnQgYyA9ICgqcyAmIDB4ZmYpOwogCi0JaWYgKHJiX2VuY19p c3VwcGVyKGMsIGVuYykpIHsKLQkgICAgLyogYXNzdW1pbmcgdG91cHBlciByZXR1 cm5zIGNvZGVwb2ludCB3aXRoIHNhbWUgc2l6ZSAqLwotCSAgICByYl9lbmNfbWJj cHV0KHJiX2VuY190b2xvd2VyKGMsIGVuYyksIHMsIGVuYyk7Ci0JICAgIG1vZGlm eSA9IDE7CisJICAgIGlmIChyYl9lbmNfaXN1cHBlcihjLCBlbmMpKSB7CisJCSpz ID0gcmJfZW5jX3RvbG93ZXIoYyAsIGVuYyk7CisJCW1vZGlmeSA9IDE7CisJICAg IH0KKwkgICAgZWxzZSBpZiAocmJfZW5jX2lzbG93ZXIoYywgZW5jKSkgeworCQkq cyA9IHJiX2VuY190b3VwcGVyKGMgLCBlbmMpOworCQltb2RpZnkgPSAxOworCSAg ICB9CisJICAgIHMrKzsKIAl9Ci0JZWxzZSBpZiAocmJfZW5jX2lzbG93ZXIoYywg ZW5jKSkgewotCSAgICAvKiBhc3N1bWluZyB0b3VwcGVyIHJldHVybnMgY29kZXBv aW50IHdpdGggc2FtZSBzaXplICovCi0JICAgIHJiX2VuY19tYmNwdXQocmJfZW5j X3RvdXBwZXIoYywgZW5jKSwgcywgZW5jKTsKLQkgICAgbW9kaWZ5ID0gMTsKKyAg ICB9CisgICAgZWxzZSB7CisJd2hpbGUgKHMgPCBzZW5kKSB7CisJICAgIGludCBj ID0gcmJfZW5jX2NvZGVwb2ludChzLCBzZW5kLCBlbmMpOworCisJICAgIGlmIChy Yl9lbmNfaXN1cHBlcihjLCBlbmMpKSB7CisJCS8qIGFzc3VtaW5nIHRvdXBwZXIg cmV0dXJucyBjb2RlcG9pbnQgd2l0aCBzYW1lIHNpemUgKi8KKwkJcmJfZW5jX21i Y3B1dChyYl9lbmNfdG9sb3dlcihjLCBlbmMpLCBzLCBlbmMpOworCQltb2RpZnkg PSAxOworCSAgICB9CisJICAgIGVsc2UgaWYgKHJiX2VuY19pc2xvd2VyKGMsIGVu YykpIHsKKwkJLyogYXNzdW1pbmcgdG9sb3dlciByZXR1cm5zIGNvZGVwb2ludCB3 aXRoIHNhbWUgc2l6ZSAqLworCQlyYl9lbmNfbWJjcHV0KHJiX2VuY190b3VwcGVy KGMsIGVuYyksIHMsIGVuYyk7CisJCW1vZGlmeSA9IDE7CisJICAgIH0KKwkgICAg cyArPSByYl9lbmNfbWJjbGVuKHMsIHNlbmQsIGVuYyk7CiAJfQotCXMgKz0gcmJf ZW5jX2NvZGVsZW4oYywgZW5jKTsKICAgICB9CiAKLSAgICBFTkNfQ09ERVJBTkdF X1NFVChzdHIsIGNyKTsKICAgICBpZiAobW9kaWZ5KSByZXR1cm4gc3RyOwogICAg IHJldHVybiBRbmlsOwogfQpAQCAtNDMyMSw2ICs0NDA0LDcgQEAKICAgICBjaGFy ICpzLCAqc2VuZDsKICAgICBWQUxVRSBoYXNoID0gMDsKICAgICBpbnQgc2luZ2xl Ynl0ZSA9IHNpbmdsZV9ieXRlX29wdGltaXphYmxlKHN0cik7CisgICAgaW50IGNy OwogCiAgICAgU3RyaW5nVmFsdWUoc3JjKTsKICAgICBTdHJpbmdWYWx1ZShyZXBs KTsKQEAgLTQzOTIsNyArNDQ3Niw4IEBACiAJfQogICAgIH0KIAotICAgIHJiX3N0 cl9tb2RpZnkoc3RyKTsKKyAgICBjciA9IEVOQ19DT0RFUkFOR0Uoc3RyKTsKKyAg ICBzdHJfbW9kaWZ5KHN0cik7CiAgICAgcyA9IFJTVFJJTkdfUFRSKHN0cik7IHNl bmQgPSBSU1RSSU5HX0VORChzdHIpOwogICAgIGlmIChzZmxhZykgewogCWludCBj bGVuLCB0bGVuLCBtYXggPSBSU1RSSU5HX0xFTihzdHIpOwpAQCAtNDUxNSw2ICs0 NjAwLDkgQEAKICAgICAKICAgICBpZiAobW9kaWZ5KSB7CiAJcmJfZW5jX2Fzc29j aWF0ZShzdHIsIGVuYyk7CisJY3IgPSBFTkNfQ09ERVJBTkdFX0FORChjciwgRU5D X0NPREVSQU5HRShyZXBsKSk7CisJaWYgKGNyICE9IEVOQ19DT0RFUkFOR0VfQlJP S0VOKQorCSAgICBFTkNfQ09ERVJBTkdFX1NFVChzdHIsIGNyKTsKIAlyZXR1cm4g c3RyOwogICAgIH0KICAgICByZXR1cm4gUW5pbDsKQEAgLTQ2NTEsMTEgKzQ3Mzks MTAgQEAKICAgICBjaGFyICpzLCAqc2VuZCwgKnQ7CiAgICAgVkFMVUUgZGVsID0g MCwgbm9kZWwgPSAwOwogICAgIGludCBtb2RpZnkgPSAwOwotICAgIGludCBpOwot ICAgIGludCBjcjsKKyAgICBpbnQgaSwgc2luZ2xlYnl0ZTsKIAogICAgIGlmIChS U1RSSU5HX0xFTihzdHIpID09IDAgfHwgIVJTVFJJTkdfUFRSKHN0cikpIHJldHVy biBRbmlsOwotICAgIGNyID0gRU5DX0NPREVSQU5HRShzdHIpOworICAgIHNpbmds ZWJ5dGUgPSBzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIpOwogICAgIGlmIChh cmdjIDwgMSkgewogCXJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIndyb25nIG51bWJl ciBvZiBhcmd1bWVudHMiKTsKICAgICB9CkBAIC00NjY0LDMwICs0NzUxLDQxIEBA CiAKIAlTdHJpbmdWYWx1ZShzKTsKIAllbmMgPSByYl9lbmNfY2hlY2soc3RyLCBz KTsKKwlpZiAoc2luZ2xlYnl0ZSAmJiAhc2luZ2xlX2J5dGVfb3B0aW1pemFibGUo cykpCisJICAgIHNpbmdsZWJ5dGUgPSAwOwogCXRyX3NldHVwX3RhYmxlKHMsIHNx dWVleiwgaT09MCwgJmRlbCwgJm5vZGVsLCBlbmMpOwogICAgIH0KIAotICAgIHJi X3N0cl9tb2RpZnkoc3RyKTsKKyAgICBzdHJfbW9kaWZ5KHN0cik7CiAgICAgcyA9 IHQgPSBSU1RSSU5HX1BUUihzdHIpOwotICAgIGlmICghcyB8fCBSU1RSSU5HX0xF TihzdHIpID09IDApIHJldHVybiBRbmlsOwogICAgIHNlbmQgPSBSU1RSSU5HX0VO RChzdHIpOwotICAgIHdoaWxlIChzIDwgc2VuZCkgewotCWludCBjID0gcmJfZW5j X2NvZGVwb2ludChzLCBzZW5kLCBlbmMpOwotCWludCBjbGVuID0gcmJfZW5jX2Nv ZGVsZW4oYywgZW5jKTsKKyAgICBpZiAoc2luZ2xlYnl0ZSkgeworCXdoaWxlIChz IDwgc2VuZCkgeworCSAgICBpZiAoc3F1ZWV6WypzICYgMHhmZl0pCisJCW1vZGlm eSA9IDE7CisJICAgIGVsc2UKKwkJKnQrKyA9ICpzOworCSAgICBzKys7CisJfQor ICAgIH0KKyAgICBlbHNlIHsKKwl3aGlsZSAocyA8IHNlbmQpIHsKKwkgICAgaW50 IGMgPSByYl9lbmNfY29kZXBvaW50KHMsIHNlbmQsIGVuYyk7CisJICAgIGludCBj bGVuID0gcmJfZW5jX2NvZGVsZW4oYywgZW5jKTsKIAotCWlmICh0cl9maW5kKGMs IHNxdWVleiwgZGVsLCBub2RlbCkpIHsKLQkgICAgbW9kaWZ5ID0gMTsKKwkgICAg aWYgKHRyX2ZpbmQoYywgc3F1ZWV6LCBkZWwsIG5vZGVsKSkgeworCQltb2RpZnkg PSAxOworCSAgICB9CisJICAgIGVsc2UgeworCQlpZiAodCAhPSBzKSByYl9lbmNf bWJjcHV0KGMsIHQsIGVuYyk7CisJCXQgKz0gY2xlbjsKKwkgICAgfQorCSAgICBz ICs9IGNsZW47CiAJfQotCWVsc2UgewotCSAgICBpZiAodCAhPSBzKSByYl9lbmNf bWJjcHV0KGMsIHQsIGVuYyk7Ci0JICAgIHQgKz0gY2xlbjsKLQl9Ci0JcyArPSBj bGVuOwogICAgIH0KICAgICAqdCA9ICdcMCc7CiAgICAgU1RSX1NFVF9MRU4oc3Ry LCB0IC0gUlNUUklOR19QVFIoc3RyKSk7CiAKLSAgICBFTkNfQ09ERVJBTkdFX1NF VChzdHIsIGNyKTsKICAgICBpZiAobW9kaWZ5KSByZXR1cm4gc3RyOwogICAgIHJl dHVybiBRbmlsOwogfQpAQCAtNDczMiw4ICs0ODMwLDkgQEAKICAgICBWQUxVRSBk ZWwgPSAwLCBub2RlbCA9IDA7CiAgICAgY2hhciAqcywgKnNlbmQsICp0OwogICAg IGludCBzYXZlLCBtb2RpZnkgPSAwOwotICAgIGludCBpOworICAgIGludCBpLCBz aW5nbGVieXRlOwogCisgICAgc2luZ2xlYnl0ZSA9IHNpbmdsZV9ieXRlX29wdGlt aXphYmxlKHN0cik7CiAgICAgaWYgKGFyZ2MgPT0gMCkgewogCWVuYyA9IFNUUl9F TkNfR0VUKHN0cik7CiAgICAgfQpAQCAtNDc0MywyNiArNDg0MiwzOSBAQAogCiAJ ICAgIFN0cmluZ1ZhbHVlKHMpOwogCSAgICBlbmMgPSByYl9lbmNfY2hlY2soc3Ry LCBzKTsKKwkgICAgaWYgKHNpbmdsZWJ5dGUgJiYgIXNpbmdsZV9ieXRlX29wdGlt aXphYmxlKHMpKQorCQlzaW5nbGVieXRlID0gMDsKIAkgICAgdHJfc2V0dXBfdGFi bGUocywgc3F1ZWV6LCBpPT0wLCAmZGVsLCAmbm9kZWwsIGVuYyk7CiAJfQogICAg IH0KIAotICAgIHJiX3N0cl9tb2RpZnkoc3RyKTsKKyAgICBzdHJfbW9kaWZ5KHN0 cik7CiAgICAgcyA9IHQgPSBSU1RSSU5HX1BUUihzdHIpOwogICAgIGlmICghcyB8 fCBSU1RSSU5HX0xFTihzdHIpID09IDApIHJldHVybiBRbmlsOwogICAgIHNlbmQg PSBSU1RSSU5HX0VORChzdHIpOwogICAgIHNhdmUgPSAtMTsKLSAgICB3aGlsZSAo cyA8IHNlbmQpIHsKLQlpbnQgYyA9IHJiX2VuY19jb2RlcG9pbnQocywgc2VuZCwg ZW5jKTsKLQlpbnQgY2xlbiA9IHJiX2VuY19jb2RlbGVuKGMsIGVuYyk7CisgICAg aWYgKHNpbmdsZWJ5dGUpIHsKKwl3aGlsZSAocyA8IHNlbmQpIHsKKwkgICAgaW50 IGMgPSAqcysrICYgMHhmZjsKIAotCWlmIChjICE9IHNhdmUgfHwgKGFyZ2MgPiAw ICYmICF0cl9maW5kKGMsIHNxdWVleiwgZGVsLCBub2RlbCkpKSB7Ci0JICAgIGlm ICh0ICE9IHMpIHJiX2VuY19tYmNwdXQoYywgdCwgZW5jKTsKLQkgICAgc2F2ZSA9 IGM7Ci0JICAgIHQgKz0gY2xlbjsKKwkgICAgaWYgKGMgIT0gc2F2ZSB8fCAhc3F1 ZWV6W2NdKSB7CisJCSp0KysgPSBzYXZlID0gYzsKKwkgICAgfQogCX0KLQlzICs9 IGNsZW47CiAgICAgfQorICAgIGVsc2UgeworCXdoaWxlIChzIDwgc2VuZCkgewor CSAgICBpbnQgYyA9IHJiX2VuY19jb2RlcG9pbnQocywgc2VuZCwgZW5jKTsKKwkg ICAgaW50IGNsZW4gPSByYl9lbmNfY29kZWxlbihjLCBlbmMpOworCisJICAgIGlm IChjICE9IHNhdmUgfHwgKGFyZ2MgPiAwICYmICF0cl9maW5kKGMsIHNxdWVleiwg ZGVsLCBub2RlbCkpKSB7CisJCWlmICh0ICE9IHMpIHJiX2VuY19tYmNwdXQoYywg dCwgZW5jKTsKKwkJc2F2ZSA9IGM7CisJCXQgKz0gY2xlbjsKKwkgICAgfQorCSAg ICBzICs9IGNsZW47CisJfQorICAgIH0KICAgICAqdCA9ICdcMCc7CiAgICAgaWYg KHQgLSBSU1RSSU5HX1BUUihzdHIpICE9IFJTVFJJTkdfTEVOKHN0cikpIHsKIAlT VFJfU0VUX0xFTihzdHIsIHQgLSBSU1RSSU5HX1BUUihzdHIpKTsKQEAgLTQ4NTcs MzMgKzQ5NjksNjggQEAKICAgICBjaGFyIHRhYmxlWzI1Nl07CiAgICAgcmJfZW5j b2RpbmcgKmVuYyA9IDA7CiAgICAgVkFMVUUgZGVsID0gMCwgbm9kZWwgPSAwOwor ICAgIFZBTFVFIGFyZzsKICAgICBjaGFyICpzLCAqc2VuZDsKLSAgICBpbnQgaTsK KyAgICBpbnQgaSwgc2luZ2xlYnl0ZTsKIAogICAgIGlmIChhcmdjIDwgMSkgewog CXJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIndyb25nIG51bWJlciBvZiBhcmd1bWVu dHMiKTsKICAgICB9Ci0gICAgZm9yIChpPTA7IGk8YXJnYzsgaSsrKSB7Ci0JVkFM VUUgcyA9IGFyZ3ZbaV07CisgICAgYXJnID0gYXJndlswXTsKIAotCVN0cmluZ1Zh bHVlKHMpOwotCWVuYyA9IHJiX2VuY19jaGVjayhzdHIsIHMpOwotCXRyX3NldHVw X3RhYmxlKHMsIHRhYmxlLGk9PTAsICZkZWwsICZub2RlbCwgZW5jKTsKLSAgICB9 CisgICAgU3RyaW5nVmFsdWUoYXJnKTsKKyAgICBlbmMgPSByYl9lbmNfY2hlY2so c3RyLCBhcmcpOwogCiAgICAgcyA9IFJTVFJJTkdfUFRSKHN0cik7Ci0gICAgaWYg KCFzIHx8IFJTVFJJTkdfTEVOKHN0cikgPT0gMCkgcmV0dXJuIElOVDJGSVgoMCk7 CiAgICAgc2VuZCA9IFJTVFJJTkdfRU5EKHN0cik7Ci0gICAgaSA9IDA7Ci0gICAg d2hpbGUgKHMgPCBzZW5kKSB7Ci0JaW50IGMgPSByYl9lbmNfY29kZXBvaW50KHMs IHNlbmQsIGVuYyk7Ci0JaW50IGNsZW4gPSByYl9lbmNfY29kZWxlbihjLCBlbmMp OworICAgIHNpbmdsZWJ5dGUgPSBzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIp ICYmIHNpbmdsZV9ieXRlX29wdGltaXphYmxlKGFyZyk7CiAKLQlpZiAodHJfZmlu ZChjLCB0YWJsZSwgZGVsLCBub2RlbCkpIHsKKyAgICBpZiAoYXJnYyA9PSAxICYm IFJTVFJJTkdfTEVOKGFyZykgPT0gMSAmJiBzaW5nbGVieXRlKSB7CisJLyogU2lu Z2xlIGJ5dGUgc2VhcmNoICovCisJY2hhciAqYXJncCA9IFJTVFJJTkdfUFRSKGFy Zyk7CisJaW50IHBvczsKKworCWlmICghcykgcmV0dXJuIElOVDJGSVgoMCk7IC8q IFNob3VsZG4ndCBoYXBwZW4/ICovCisJaSA9IDA7CisJd2hpbGUgKHMgPCBzZW5k ICYmCisJICAgICAgIChwb3MgPSByYl9tZW1zZWFyY2goYXJncCwgMSwgcywgc2Vu ZCAtIHMsIGVuYykpID49IDApIHsKKwkgICAgcyArPSBwb3MgKyAxOwogCSAgICBp Kys7CiAJfQotCXMgKz0gY2xlbjsKKwlyZXR1cm4gSU5UMk5VTShpKTsKICAgICB9 CisKKyAgICB0cl9zZXR1cF90YWJsZShhcmcsIHRhYmxlLCAxLCAmZGVsLCAmbm9k ZWwsIGVuYyk7CisgICAgZm9yIChpPTE7IGk8YXJnYzsgaSsrKSB7CisJYXJnID0g YXJndltpXTsKKworCVN0cmluZ1ZhbHVlKGFyZyk7CisJZW5jID0gcmJfZW5jX2No ZWNrKHN0ciwgYXJnKTsKKwlpZiAoc2luZ2xlYnl0ZSAmJiAhc2luZ2xlX2J5dGVf b3B0aW1pemFibGUoYXJnKSkKKwkgICBzaW5nbGVieXRlID0gMDsKKwl0cl9zZXR1 cF90YWJsZShhcmcsIHRhYmxlLCAwLCAmZGVsLCAmbm9kZWwsIGVuYyk7CisgICAg fQorCisgICAgaWYgKCFzIHx8IFJTVFJJTkdfTEVOKHN0cikgPT0gMCkgcmV0dXJu IElOVDJGSVgoMCk7CisgICAgaSA9IDA7CisgICAgaWYgKHNpbmdsZWJ5dGUpIHsK Kwl3aGlsZSAocyA8IHNlbmQpIHsKKwkgICAgaWYgKHRhYmxlWypzKysgJiAweGZm XSkgeworCQlpKys7CisJICAgIH0KKwl9CisgICAgfQorICAgIGVsc2UgeworCXdo aWxlIChzIDwgc2VuZCkgeworCSAgICBpbnQgYyA9IHJiX2VuY19jb2RlcG9pbnQo cywgc2VuZCwgZW5jKTsKKwkgICAgaW50IGNsZW4gPSByYl9lbmNfY29kZWxlbihj LCBlbmMpOworCisJICAgIGlmICh0cl9maW5kKGMsIHRhYmxlLCBkZWwsIG5vZGVs KSkgeworICAgICAgICAJaSsrOworCSAgICB9CisJICAgIHMgKz0gY2xlbjsKKwl9 CisgICAgfQogICAgIHJldHVybiBJTlQyTlVNKGkpOwogfQogCkBAIC00OTM2LDcg KzUwODMsNyBAQAogICAgIHJiX2VuY29kaW5nICplbmM7CiAgICAgVkFMVUUgc3Bh dDsKICAgICBWQUxVRSBsaW1pdDsKLSAgICBpbnQgYXdrX3NwbGl0ID0gUWZhbHNl OworICAgIGVudW0ge2F3aywgc3RyaW5nLCByZWdleHB9IHNwbGl0X3R5cGU7CiAg ICAgbG9uZyBiZWcsIGVuZCwgaSA9IDA7CiAgICAgaW50IGxpbSA9IDA7CiAgICAg VkFMVUUgcmVzdWx0LCB0bXA7CkBAIC00OTU4LDM3ICs1MTA1LDQxIEBACiAJICAg IHNwYXQgPSByYl9mczsKIAkgICAgZ290byBmc19zZXQ7CiAJfQotCWF3a19zcGxp dCA9IFF0cnVlOworCXNwbGl0X3R5cGUgPSBhd2s7CiAgICAgfQogICAgIGVsc2Ug ewogICAgICAgZnNfc2V0OgogCWlmIChUWVBFKHNwYXQpID09IFRfU1RSSU5HKSB7 CiAJICAgIHJiX2VuY29kaW5nICplbmMyID0gU1RSX0VOQ19HRVQoc3BhdCk7CiAK LQkgICAgaWYgKHJiX2VuY19tYm1pbmxlbihlbmMyKSA9PSAxKSB7CisJICAgIHNw bGl0X3R5cGUgPSBzdHJpbmc7CisJICAgIGlmIChSU1RSSU5HX0xFTihzcGF0KSA9 PSAwKSB7CisJCS8qIFNwZWNpYWwgY2FzZSAtIHNwbGl0IGludG8gY2hhcnMgKi8K KwkJc3BhdCA9IHJiX3JlZ19yZWdjb21wKHNwYXQpOworCQlzcGxpdF90eXBlID0g cmVnZXhwOworCSAgICB9CisJICAgIGVsc2UgaWYgKHJiX2VuY19tYm1pbmxlbihl bmMyKSA9PSAxKSB7CiAJCWlmIChSU1RSSU5HX0xFTihzcGF0KSA9PSAxICYmIFJT VFJJTkdfUFRSKHNwYXQpWzBdID09ICcgJyl7Ci0JCSAgICBhd2tfc3BsaXQgPSBR dHJ1ZTsKKwkJICAgIHNwbGl0X3R5cGUgPSBhd2s7CiAJCX0KIAkgICAgfQogCSAg ICBlbHNlIHsKIAkJaW50IGw7CiAJCWlmIChyYl9lbmNfYXNjZ2V0KFJTVFJJTkdf UFRSKHNwYXQpLCBSU1RSSU5HX0VORChzcGF0KSwgJmwsIGVuYzIpID09ICcgJyAm JgogCQkgICAgUlNUUklOR19MRU4oc3BhdCkgPT0gbCkgewotCQkgICAgYXdrX3Nw bGl0ID0gUXRydWU7CisJCSAgICBzcGxpdF90eXBlID0gYXdrOwogCQl9CiAJICAg IH0KLQkgICAgaWYgKCFhd2tfc3BsaXQpIHsKLQkJc3BhdCA9IHJiX3JlZ19yZWdj b21wKHJiX3JlZ19xdW90ZShzcGF0KSk7Ci0JICAgIH0KIAl9CiAJZWxzZSB7CiAJ ICAgIHNwYXQgPSBnZXRfcGF0KHNwYXQsIDEpOworCSAgICBzcGxpdF90eXBlID0g cmVnZXhwOwogCX0KICAgICB9CiAKICAgICByZXN1bHQgPSByYl9hcnlfbmV3KCk7 CiAgICAgYmVnID0gMDsKLSAgICBpZiAoYXdrX3NwbGl0KSB7CisgICAgaWYgKHNw bGl0X3R5cGUgPT0gYXdrKSB7CiAJY2hhciAqcHRyID0gUlNUUklOR19QVFIoc3Ry KTsKIAljaGFyICplcHRyID0gUlNUUklOR19FTkQoc3RyKTsKIAljaGFyICpicHRy ID0gcHRyOwpAQCAtNTAyMiw2ICs1MTczLDMzIEBACiAJICAgIH0KIAl9CiAgICAg fQorICAgIGVsc2UgaWYgKHNwbGl0X3R5cGUgPT0gc3RyaW5nKSB7CisJY2hhciAq cHRyID0gUlNUUklOR19QVFIoc3RyKTsKKwljaGFyICplcHRyID0gUlNUUklOR19F TkQoc3RyKTsKKwljaGFyICpzcHRyID0gUlNUUklOR19QVFIoc3BhdCk7CisJaW50 IHNsZW4gPSBSU1RSSU5HX0xFTihzcGF0KTsKKworCWlmIChpc19icm9rZW5fc3Ry aW5nKHN0cikpIHsKKwkgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxp ZCBieXRlIHNlcXVlbmNlIGluICVzIiwgcmJfZW5jX25hbWUoU1RSX0VOQ19HRVQo c3RyKSkpOworCX0KKwlpZiAoaXNfYnJva2VuX3N0cmluZyhzcGF0KSkgeworCSAg ICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZhbGlkIGJ5dGUgc2VxdWVuY2Ug aW4gJXMiLCByYl9lbmNfbmFtZShTVFJfRU5DX0dFVChzcGF0KSkpOworCX0KKwll bmMgPSByYl9lbmNfY2hlY2soc3RyLCBzcGF0KTsKKwl3aGlsZSAocHRyIDwgZXB0 ciAmJgorCSAgICAgICAoZW5kID0gcmJfbWVtc2VhcmNoKHNwdHIsIHNsZW4sIHB0 ciwgZXB0ciAtIHB0ciwgZW5jKSkgPj0gMCkgeworCSAgICAvKiBDaGVjayB3ZSBh cmUgYXQgdGhlIHN0YXJ0IG9mIGEgY2hhciAqLworCSAgICBjaGFyICp0ID0gcmJf ZW5jX3JpZ2h0X2NoYXJfaGVhZChwdHIsIHB0ciArIGVuZCwgZW5jKTsKKwkgICAg aWYgKHQgIT0gcHRyICsgZW5kKSB7CisJCXB0ciA9IHQ7CisJCWNvbnRpbnVlOwor CSAgICB9CisJICAgIHJiX2FyeV9wdXNoKHJlc3VsdCwgcmJfc3RyX3N1YnN0cihz dHIsIHB0ciAtIFJTVFJJTkdfUFRSKHN0ciksIGVuZCkpOworCSAgICBwdHIgKz0g ZW5kICsgc2xlbjsKKwkgICAgaWYgKCFOSUxfUChsaW1pdCkgJiYgbGltIDw9ICsr aSkgYnJlYWs7CisJfQorCWJlZyA9IHB0ciAtIFJTVFJJTkdfUFRSKHN0cik7Cisg ICAgfQogICAgIGVsc2UgewogCWxvbmcgc3RhcnQgPSBiZWc7CiAJbG9uZyBpZHg7 CkBAIC01MzIzLDYgKzU1MDEsNTYgQEAKICAgICByZXR1cm4gc3RyOwogfQogCisv KgorICogIERvY3VtZW50LW1ldGhvZDogY29kZXBvaW50cworICogIGNhbGwtc2Vx OgorICogICAgIHN0ci5jb2RlcG9pbnRzICAgICAgICAgICAgICAgICAgID0+IGFu RW51bWVyYXRvcgorICogICAgIHN0ci5jb2RlcG9pbnRzIHt8Zml4bnVtfCBibG9j ayB9ID0+IHN0cgorICogIAorICogIFJldHVybnMgYW4gZW51bWVyYXRvciB0aGF0 IGdpdmVzIHRoZSA8Y29kZT5JbnRlZ2VyPC9jb2RlPiBvcmRpbmFsCisgKiAgb2Yg ZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZywgYWxzbyBrbm93biBhcyBhIDxp PmNvZGVwb2ludDwvaT4KKyAqICB3aGVuIGFwcGxpZWQgdG8gVW5pY29kZSBzdHJp bmdzLiBJZiBhIGJsb2NrIGlzIGdpdmVuLCBpdCBpdGVyYXRlcworICogIG92ZXIg ZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4KKyAqICAgICAKKyAqICAgICAi Zm9vXHUwNjM1Ii5jaGFycy50b19hICAgIz0+IFsxMDIsIDExMSwgMTExLCAxNTg5 XQorICovCisKKy8qCisgKiAgRG9jdW1lbnQtbWV0aG9kOiBlYWNoX2NvZGVwb2lu dAorICogIGNhbGwtc2VxOgorICogICAgIHN0ci5lYWNoX2NvZGVwb2ludCB7fGZp eG51bXwgYmxvY2sgfSAgICA9PiBzdHIKKyAqICAKKyAqICBQYXNzZXMgdGhlIDxj b2RlPkludGVnZXI8L2NvZGU+IG9yZGluYWwgb2YgZWFjaCBjaGFyYWN0ZXIgaW4g PGk+c3RyPC9pPiwKKyAqICBhbHNvIGtub3duIGFzIGEgPGk+Y29kZXBvaW50PC9p PiB3aGVuIGFwcGxpZWQgdG8gVW5pY29kZSBzdHJpbmdzIHRvIHRoZQorICogIGdp dmVuIGJsb2NrLgorICogICAgIAorICogICAgICJoZWxsb1x1MDYzOSIuZWFjaF9j b2RlcG9pbnQge3xjfCBwcmludCBjLCAnICcgfQorICogICAgIAorICogIDxlbT5w cm9kdWNlczo8L2VtPgorICogICAgIAorICogICAgIDEwNCAxMDEgMTA4IDEwOCAx MTEgMTU5MworICovCisKK3N0YXRpYyBWQUxVRQorcmJfc3RyX2VhY2hfY29kZXBv aW50KFZBTFVFIHN0cikKK3sKKyAgICBpbnQgaSwgbGVuLCBuOworICAgIGNvbnN0 IGNoYXIgKnB0ciwgKmVuZDsKKyAgICByYl9lbmNvZGluZyAqZW5jOworCisgICAg aWYgKHNpbmdsZV9ieXRlX29wdGltaXphYmxlKHN0cikpIHJldHVybiByYl9zdHJf ZWFjaF9ieXRlKHN0cik7CisgICAgUkVUVVJOX0VOVU1FUkFUT1Ioc3RyLCAwLCAw KTsKKyAgICBwdHIgPSBSU1RSSU5HX1BUUihzdHIpOworICAgIGxlbiA9IFJTVFJJ TkdfTEVOKHN0cik7CisgICAgZW5kID0gUlNUUklOR19FTkQoc3RyKTsKKyAgICBl bmMgPSByYl9lbmNfZ2V0KHN0cik7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsg aSArPSBuKSB7CisJbiA9IHJiX2VuY19tYmNsZW4ocHRyICsgaSwgcHRyICsgbGVu LCBlbmMpOworCXJiX3lpZWxkKElOVDJGSVgocmJfZW5jX2NvZGVwb2ludChwdHIg KyBpLCBlbmQsIGVuYykpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cjsKK30KKwog c3RhdGljIGxvbmcKIGNob3BwZWRfbGVuZ3RoKFZBTFVFIHN0cikKIHsKQEAgLTUz NTUsNyArNTU4Myw4IEBACiB7CiAgICAgaWYgKFJTVFJJTkdfTEVOKHN0cikgPiAw KSB7CiAJbG9uZyBsZW47Ci0JcmJfc3RyX21vZGlmeShzdHIpOworCisJc3RyX21v ZGlmeShzdHIpOwogCWxlbiA9IGNob3BwZWRfbGVuZ3RoKHN0cik7CiAJU1RSX1NF VF9MRU4oc3RyLCBsZW4pOwogCVJTVFJJTkdfUFRSKHN0cilbbGVuXSA9ICdcMCc7 CkBAIC01NDE3LDcgKzU2NDYsNyBAQAogCXJzID0gcmJfcnM7CiAJaWYgKHJzID09 IHJiX2RlZmF1bHRfcnMpIHsKIAkgIHNtYXJ0X2Nob21wOgotCSAgICByYl9zdHJf bW9kaWZ5KHN0cik7CisJICAgIHN0cl9tb2RpZnkoc3RyKTsKIAkgICAgZW5jID0g cmJfZW5jX2dldChzdHIpOwogCSAgICBpZiAocmJfZW5jX21ibWlubGVuKGVuYykg PiAxKSB7CiAJCXBwID0gcmJfZW5jX2xlZnRfY2hhcl9oZWFkKHAsIGUtcmJfZW5j X21ibWlubGVuKGVuYyksIGVuYyk7CkBAIC01NDY5LDcgKzU2OTgsNyBAQAogCQls ZW4tLTsKIAl9CiAJaWYgKGxlbiA8IFJTVFJJTkdfTEVOKHN0cikpIHsKLQkgICAg cmJfc3RyX21vZGlmeShzdHIpOworCSAgICBzdHJfbW9kaWZ5KHN0cik7CiAJICAg IFNUUl9TRVRfTEVOKHN0ciwgbGVuKTsKIAkgICAgUlNUUklOR19QVFIoc3RyKVts ZW5dID0gJ1wwJzsKIAkgICAgcmV0dXJuIHN0cjsKQEAgLTU0OTEsNyArNTcyMCw3 IEBACiAJIG1lbWNtcChSU1RSSU5HX1BUUihycyksIHBwLCByc2xlbikgPT0gMCkp IHsKIAlpZiAocmJfZW5jX2xlZnRfY2hhcl9oZWFkKHAsIHBwLCBlbmMpICE9IHBw KQogCSAgICByZXR1cm4gUW5pbDsKLQlyYl9zdHJfbW9kaWZ5KHN0cik7CisJc3Ry X21vZGlmeShzdHIpOwogCVNUUl9TRVRfTEVOKHN0ciwgUlNUUklOR19MRU4oc3Ry KSAtIHJzbGVuKTsKIAlSU1RSSU5HX1BUUihzdHIpW1JTVFJJTkdfTEVOKHN0cild ID0gJ1wwJzsKIAlyZXR1cm4gc3RyOwpAQCAtNTU0NSwyMSArNTc3NCwyOCBAQAog ICAgIHJiX2VuY29kaW5nICplbmM7CiAgICAgY2hhciAqcywgKnQsICplOwogCi0g ICAgcmJfc3RyX21vZGlmeShzdHIpOwotICAgIGVuYyA9IFNUUl9FTkNfR0VUKHN0 cik7CiAgICAgcyA9IFJTVFJJTkdfUFRSKHN0cik7CiAgICAgaWYgKCFzIHx8IFJT VFJJTkdfTEVOKHN0cikgPT0gMCkgcmV0dXJuIFFuaWw7CiAgICAgZSA9IHQgPSBS U1RSSU5HX0VORChzdHIpOworICAgIGVuYyA9IFNUUl9FTkNfR0VUKHN0cik7CiAg ICAgLyogcmVtb3ZlIHNwYWNlcyBhdCBoZWFkICovCi0gICAgd2hpbGUgKHMgPCBl KSB7Ci0JaW50IGNjID0gcmJfZW5jX2NvZGVwb2ludChzLCBlLCBlbmMpOworICAg IGlmIChzaW5nbGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIpKSB7CisJd2hpbGUgKHMg PCBlKSB7CisJICAgIGlmICghcmJfZW5jX2lzc3BhY2UoKih1bnNpZ25lZCBjaGFy ICopcywgZW5jKSkgYnJlYWs7CisJICAgIHMrKzsKKwl9CisgICAgfQorICAgIGVs c2UgeworCXdoaWxlIChzIDwgZSkgeworCSAgICBpbnQgY2MgPSByYl9lbmNfY29k ZXBvaW50KHMsIGUsIGVuYyk7CiAJCi0JaWYgKCFyYl9lbmNfaXNzcGFjZShjYywg ZW5jKSkgYnJlYWs7Ci0JcyArPSByYl9lbmNfY29kZWxlbihjYywgZW5jKTsKKwkg ICAgaWYgKCFyYl9lbmNfaXNzcGFjZShjYywgZW5jKSkgYnJlYWs7CisJICAgIHMg Kz0gcmJfZW5jX2NvZGVsZW4oY2MsIGVuYyk7CisJfQogICAgIH0KIAogICAgIGlm IChzID4gUlNUUklOR19QVFIoc3RyKSkgewotCXJiX3N0cl9tb2RpZnkoc3RyKTsK KwlzdHJfbW9kaWZ5KHN0cik7CiAJU1RSX1NFVF9MRU4oc3RyLCB0LXMpOwogCW1l bW1vdmUoUlNUUklOR19QVFIoc3RyKSwgcywgUlNUUklOR19MRU4oc3RyKSk7CiAJ UlNUUklOR19QVFIoc3RyKVtSU1RSSU5HX0xFTihzdHIpXSA9ICdcMCc7CkBAIC01 NjA2LDMwICs1ODQyLDMxIEBACiB7CiAgICAgcmJfZW5jb2RpbmcgKmVuYzsKICAg ICBjaGFyICpzLCAqdCwgKmU7Ci0gICAgaW50IHNwYWNlX3NlZW4gPSBRZmFsc2U7 CiAKLSAgICByYl9zdHJfbW9kaWZ5KHN0cik7CiAgICAgZW5jID0gU1RSX0VOQ19H RVQoc3RyKTsKICAgICBzID0gUlNUUklOR19QVFIoc3RyKTsKICAgICBpZiAoIXMg fHwgUlNUUklOR19MRU4oc3RyKSA9PSAwKSByZXR1cm4gUW5pbDsKICAgICB0ID0g ZSA9IFJTVFJJTkdfRU5EKHN0cik7Ci0gICAgd2hpbGUgKHMgPCBlKSB7Ci0JaW50 IGNjID0gcmJfZW5jX2NvZGVwb2ludChzLCBlLCBlbmMpOworICAgIGlmIChzaW5n bGVfYnl0ZV9vcHRpbWl6YWJsZShzdHIpKSB7CisgICAgICAgIHdoaWxlICh0ID4g cykgeworCSAgICBpZiAoIXJiX2VuY19pc3NwYWNlKCoodW5zaWduZWQgY2hhciAq KSh0LTEpLCBlbmMpKSBicmVhazsKKwkgICAgdC0tOworCX0KKyAgICB9CisgICAg ZWxzZSB7CisJY2hhciAqdHA7CiAKLQlpZiAoIWNjIHx8IHJiX2VuY19pc3NwYWNl KGNjLCBlbmMpKSB7Ci0JICAgIGlmICghc3BhY2Vfc2VlbikgdCA9IHM7Ci0JICAg IHNwYWNlX3NlZW4gPSBRdHJ1ZTsKKyAgICAgICAgd2hpbGUgKCh0cCA9IHJiX2Vu Y19wcmV2X2NoYXIocywgdCwgZW5jKSkgIT0gTlVMTCkgeworCSAgICBpZiAoIXJi X2VuY19pc3NwYWNlKHJiX2VuY19jb2RlcG9pbnQodHAsIGUsIGVuYyksIGVuYykp IGJyZWFrOworCSAgICB0ID0gdHA7CiAJfQotCWVsc2UgewotCSAgICBzcGFjZV9z ZWVuID0gUWZhbHNlOwotCX0KLQlzICs9IHJiX2VuY19jb2RlbGVuKGNjLCBlbmMp OwogICAgIH0KLSAgICBpZiAoIXNwYWNlX3NlZW4pIHQgPSBzOwogICAgIGlmICh0 IDwgZSkgewotCXJiX3N0cl9tb2RpZnkoc3RyKTsKLQlTVFJfU0VUX0xFTihzdHIs IHQtUlNUUklOR19QVFIoc3RyKSk7Ci0JUlNUUklOR19QVFIoc3RyKVtSU1RSSU5H X0xFTihzdHIpXSA9ICdcMCc7CisJaW50IGxlbiA9IHQtUlNUUklOR19QVFIoc3Ry KTsKKworCXN0cl9tb2RpZnkoc3RyKTsKKwlTVFJfU0VUX0xFTihzdHIsIGxlbik7 CisJUlNUUklOR19QVFIoc3RyKVtsZW5dID0gJ1wwJzsKIAlyZXR1cm4gc3RyOwog ICAgIH0KICAgICByZXR1cm4gUW5pbDsKQEAgLTYwMTEsNyArNjI0OCw3IEBACiAg ICAgY29uc3QgY2hhciAqZiA9ICIgIjsKICAgICBsb25nIG4sIGxsZW4sIHJsZW47 CiAgICAgdm9sYXRpbGUgVkFMVUUgcGFkOwotICAgIGludCBzaW5nbGVieXRlID0g MTsKKyAgICBpbnQgc2luZ2xlYnl0ZSA9IDEsIGNyOwogCiAgICAgcmJfc2Nhbl9h cmdzKGFyZ2MsIGFyZ3YsICIxMSIsICZ3LCAmcGFkKTsKICAgICBlbmMgPSBTVFJf RU5DX0dFVChzdHIpOwpAQCAtNjAzMiw2ICs2MjY5LDcgQEAKICAgICBuID0gd2lk dGggLSBsZW47CiAgICAgbGxlbiA9IChqZmxhZyA9PSAnbCcpID8gMCA6ICgoamZs YWcgPT0gJ3InKSA/IG4gOiBuLzIpOwogICAgIHJsZW4gPSBuIC0gbGxlbjsKKyAg ICBjciA9IEVOQ19DT0RFUkFOR0Uoc3RyKTsKICAgICByZXMgPSByYl9zdHJfbmV3 NShzdHIsIDAsIFJTVFJJTkdfTEVOKHN0cikrbipmbGVuL2ZjbGVuKzIpOwogICAg IHAgPSBSU1RSSU5HX1BUUihyZXMpOwogICAgIHdoaWxlIChsbGVuKSB7CkBAIC02 MDc3LDYgKzYzMTUsMTAgQEAKICAgICBPQkpfSU5GRUNUKHJlcywgc3RyKTsKICAg ICBpZiAoIU5JTF9QKHBhZCkpIE9CSl9JTkZFQ1QocmVzLCBwYWQpOwogICAgIHJi X2VuY19hc3NvY2lhdGUocmVzLCBlbmMpOworICAgIGlmIChhcmdjID09IDIpCisJ Y3IgPSBFTkNfQ09ERVJBTkdFX0FORChjciwgRU5DX0NPREVSQU5HRShwYWQpKTsK KyAgICBpZiAoY3IgIT0gRU5DX0NPREVSQU5HRV9CUk9LRU4pCisJRU5DX0NPREVS QU5HRV9TRVQocmVzLCBjcik7CiAgICAgcmV0dXJuIHJlczsKIH0KIApAQCAtNjY3 Nyw2ICs2OTE5LDcgQEAKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NTdHJpbmcs ICJsaW5lcyIsIHJiX3N0cl9lYWNoX2xpbmUsIC0xKTsKICAgICByYl9kZWZpbmVf bWV0aG9kKHJiX2NTdHJpbmcsICJieXRlcyIsIHJiX3N0cl9lYWNoX2J5dGUsIDAp OwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY1N0cmluZywgImNoYXJzIiwgcmJf c3RyX2VhY2hfY2hhciwgMCk7CisgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3Ry aW5nLCAiY29kZXBvaW50cyIsIHJiX3N0cl9lYWNoX2NvZGVwb2ludCwgMCk7CiAg ICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3RyaW5nLCAicmV2ZXJzZSIsIHJiX3N0 cl9yZXZlcnNlLCAwKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NTdHJpbmcs ICJyZXZlcnNlISIsIHJiX3N0cl9yZXZlcnNlX2JhbmcsIDApOwogICAgIHJiX2Rl ZmluZV9tZXRob2QocmJfY1N0cmluZywgImNvbmNhdCIsIHJiX3N0cl9jb25jYXQs IDEpOwpAQCAtNjcyNiw2ICs2OTY5LDcgQEAKICAgICByYl9kZWZpbmVfbWV0aG9k KHJiX2NTdHJpbmcsICJlYWNoX2xpbmUiLCByYl9zdHJfZWFjaF9saW5lLCAtMSk7 CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3RyaW5nLCAiZWFjaF9ieXRlIiwg cmJfc3RyX2VhY2hfYnl0ZSwgMCk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9j U3RyaW5nLCAiZWFjaF9jaGFyIiwgcmJfc3RyX2VhY2hfY2hhciwgMCk7CisgICAg cmJfZGVmaW5lX21ldGhvZChyYl9jU3RyaW5nLCAiZWFjaF9jb2RlcG9pbnQiLCBy Yl9zdHJfZWFjaF9jb2RlcG9pbnQsIDApOwogCiAgICAgcmJfZGVmaW5lX21ldGhv ZChyYl9jU3RyaW5nLCAic3VtIiwgcmJfc3RyX3N1bSwgLTEpOwogCkluZGV4OiB0 ZXN0L3J1YnkvdGVzdF9tMTduX2NvbWIucmIKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gdGVzdC9ydWJ5L3Rlc3RfbTE3bl9jb21iLnJiCShyZXZpc2lvbiAxOTA3MykK KysrIHRlc3QvcnVieS90ZXN0X20xN25fY29tYi5yYgkod29ya2luZyBjb3B5KQpA QCAtMTE1OCwxMSArMTE1OCwxMSBAQAogICBkZWYgdGVzdF9zdHJfc3BsaXQKICAg ICBjb21iaW5hdGlvbihTVFJJTkdTLCBTVFJJTkdTKSB7fHMxLCBzMnwKICAgICAg IGlmICFzMi52YWxpZF9lbmNvZGluZz8KLSAgICAgICAgYXNzZXJ0X3JhaXNlKFJl Z2V4cEVycm9yKSB7IHMxLnNwbGl0KHMyKSB9CisgICAgICAgIGFzc2VydF9yYWlz ZShBcmd1bWVudEVycm9yLCBSZWdleHBFcnJvcikgeyBzMS5zcGxpdChzMikgfQog ICAgICAgICBuZXh0CiAgICAgICBlbmQKICAgICAgIGlmICFzMS5hc2NpaV9vbmx5 PyAmJiAhczIuYXNjaWlfb25seT8gJiYgczEuZW5jb2RpbmcgIT0gczIuZW5jb2Rp bmcKLSAgICAgICAgYXNzZXJ0X3JhaXNlKEFyZ3VtZW50RXJyb3IpIHsgczEuc3Bs aXQoczIpIH0KKyAgICAgICAgYXNzZXJ0X3JhaXNlKEFyZ3VtZW50RXJyb3IsIEVu Y29kaW5nQ29tcGF0aWJpbGl0eUVycm9yKSB7IHMxLnNwbGl0KHMyKSB9CiAgICAg ICAgIG5leHQKICAgICAgIGVuZAogICAgICAgaWYgIXMxLnZhbGlkX2VuY29kaW5n Pwo-----------UV8IwqfSUYyR4jschEmsFb--