From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: New upstream release from the 1.0.1 branch, ABI compatible Date: Tue, 09 Jun 2026 12:42:33 GMT Message-ID: <178100895356.1.7653753794506118412.rpms-openssl-ad05b505379c@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: ad05b505379c52cf9dc39987695bcaa3aecc7e9c ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbnNzbAogICAgICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAg ICAgICAgICAgIENvbW1pdCA6IGFkMDViNTA1Mzc5YzUyY2Y5ZGMzOTk4NzY5NWJjYWEzYWVjYzdl OWMKICAgICAgICAgICAgQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CiAgICAgICAgICAgIERhdGUgICA6IDIwMTItMDItMDdUMTM6NDY6NDIrMDE6MDAKICAgICAg ICAgICAgU3RhdHMgIDogKzIyMjAyLy0yMzQ0MyBpbiAzOCBmaWxlKHMpCiAgICAgICAgICAgIFVS TCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvb3BlbnNzbC9jL2FkMDVi NTA1Mzc5YzUyY2Y5ZGMzOTk4NzY5NWJjYWEzYWVjYzdlOWM/YnJhbmNoPXJlYmFzZV80MGJldGEK CiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgTmV3IHVwc3RyZWFtIHJlbGVhc2UgZnJvbSB0 aGUgMS4wLjEgYnJhbmNoLCBBQkkgY29tcGF0aWJsZQoKLSBhbHNvIGFkZCBkb2N1bWVudGF0aW9u IGZvciB0aGUgLW5vX2lnbl9lb2Ygb3B0aW9uCgotLS0KZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUg Yi8uZ2l0aWdub3JlCmluZGV4IGQwZThhOTcuLmQ1Njc0YjUgMTAwNjQ0Ci0tLSBhLy5naXRpZ25v cmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNSwzICs1LDQgQEAgb3BlbnNzbC0xLjAuMGEtdXNhLnRh ci5iejIKIC9vcGVuc3NsLTEuMC4wZS11c2EudGFyLmJ6MgogL29wZW5zc2wtMS4wLjBmLXVzYS50 YXIuYnoyCiAvb3BlbnNzbC0xLjAuMGctdXNhLnRhci54egorL29wZW5zc2wtMS4wLjEtYmV0YTIt dXNhLnRhci54egoKZGlmZiAtLWdpdCBhL2ZpeHBhdGNoIGIvZml4cGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmY1ZWI2NwotLS0gL2Rldi9udWxsCisrKyBiL2ZpeHBh dGNoCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorIyBGaXhlcyBwYXRjaCBmcm9tIHVwc3Ry ZWFtIHRyYWNrZXIgdmlldworZ2F3ayAnCitCRUdJTiB7CisgICBkaXI9IiIKK30KKy9eSW5kZXg6 IG9wZW5zc2xcLy8geworICAgZGlyID0gJDIKK30KKy9eKC0tLXxcK1wrXCspLyB7CisgICAkMiA9 IGRpcgorfQoreworICAgcHJpbnQKK30nCgpkaWZmIC0tZ2l0IGEvaG9iYmxlLW9wZW5zc2wgYi9o b2JibGUtb3BlbnNzbAppbmRleCBhOGJlODQ0Li4yOTFkOGEzIDEwMDc1NQotLS0gYS9ob2JibGUt b3BlbnNzbAorKysgYi9ob2JibGUtb3BlbnNzbApAQCAtNSwzMSArNSwzNyBAQCBzZXQgLWUKIAog IyBDbGVhbiBvdXQgcGF0ZW50LW9yLW90aGVyd2lzZS1lbmN1bWJlcmVkIGNvZGUuCiAjIE1EQy0y OiA0LDkwOCw4NjEgMTMvMDMvMjAwNyAtIGV4cGlyZWQsIHdlIGRvIG5vdCByZW1vdmUgaXQgYnV0 IGRvIG5vdCBlbmFibGUgaXQgYW55d2F5Ci0jIElERUE6ICA1LDIxNCw3MDMgMDcvMDEvMjAxMgor IyBJREVBOiAgNSwyMTQsNzAzIDA3LzAxLzIwMTIgLSBleHBpcmVkLCB3ZSBkbyBub3QgcmVtb3Zl IGl0IGFueW1vcmUKICMgUkM1OiAgIDUsNzI0LDQyOCAwMS8xMS8yMDE1CiAjIEVDOiAgICA/Pz8/ Pz8/Pz8gPz8vPz8vMjAyMAorIyBTUlA6ICAgPz8/Pz8/Pz8/ID8/Lz8/LzIwPz8KIAogIyBSZW1v dmUgYXNzZW1ibGVyIHBvcnRpb25zIG9mIElERUEsIE1EQzIsIGFuZCBSQzUuCi0oZmluZCBjcnlw dG8ve2lkZWEscmM1fS9hc20gLXR5cGUgZiB8IHhhcmdzIC1yIHJtIC1mdikKKyhmaW5kIGNyeXB0 by97cmM1fS9hc20gLXR5cGUgZiB8IHhhcmdzIC1yIHJtIC1mdikKIAotIyBJREVBLCBNREMyLCBS QzUsIEVDLgotZm9yIGEgaW4gaWRlYSByYzUgZWMgZWNkaCBlY2RzYTsgZG8KKyMgUkM1LCBFQywg U1JQLgorZm9yIGEgaW4gcmM1IGVjIGVjZGggZWNkc2Egc3JwOyBkbwogICBmb3IgYyBpbiBgZmlu ZCBjcnlwdG8vJGEgLW5hbWUgIiouYyIgLWEgXCEgLW5hbWUgIip0ZXN0KiIgLXR5cGUgZmAgOyBk bwogCWVjaG8gRGVzdHJveWluZyAkYwogCT4gJGMKICAgZG9uZQogZG9uZQogCi1mb3IgYyBpbiBg ZmluZCBjcnlwdG8vZXZwIC1uYW1lICIqX3JjNS5jIiAtbyAtbmFtZSAiKl9pZGVhLmMiIC1vIC1u YW1lICIqX2VjZHNhLmMiYDsgZG8KK2ZvciBjIGluIGBmaW5kIGNyeXB0by9ldnAgLW5hbWUgIipf cmM1LmMiIC1vIC1uYW1lICIqX2VjZHNhLmMiYDsgZG8KKwllY2hvIERlc3Ryb3lpbmcgJGMKKwk+ ICRjCitkb25lCisKK2ZvciBjIGluIGBmaW5kIGNyeXB0by9ibiAtbmFtZSAiKmdmMm0uYyJgOyBk bwogCWVjaG8gRGVzdHJveWluZyAkYwogCT4gJGMKIGRvbmUKIAogZm9yIGggaW4gYGZpbmQgY3J5 cHRvIHNzbCBhcHBzIHRlc3QgLW5hbWUgIiouaCJgIDsgZG8KLQllY2hvIFJlbW92aW5nIElERUEs IFJDNSwgYW5kIEVDIHJlZmVyZW5jZXMgZnJvbSAkaAorCWVjaG8gUmVtb3ZpbmcgUkM1LCBTUlAg YW5kIEVDIHJlZmVyZW5jZXMgZnJvbSAkaAogCWNhdCAkaCB8IFwKIAlhd2sgICAgJ0JFR0lOIHtl Y2g9MTt9IFwKLQkJL14jWyBcdF0qaWZuZGVmLipOT19JREVBLyB7ZWNoLS07IG5leHQ7fSBcCisJ CS9eI1sgXHRdKmlmbmRlZi4qTk9fU1JQLyB7ZWNoLS07IG5leHQ7fSBcCiAJCS9eI1sgXHRdKmlm bmRlZi4qTk9fUkM1LyB7ZWNoLS07IG5leHQ7fSBcCiAJCS9eI1sgXHRdKmlmbmRlZi4qTk9fRUMv IHtlY2gtLTsgbmV4dDt9IFwKIAkJL14jWyBcdF0qaWZuZGVmLipOT19FQ0RILyB7ZWNoLS07IG5l eHQ7fSBcCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0wLjkuOGctaWE2NC5wYXRjaCBiL29wZW5zc2wt MC45LjhnLWlhNjQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjOTgyZDIu LjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0wLjkuOGctaWE2NC5wYXRjaAorKysgL2Rldi9udWxsCkBA IC0xLDE5ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMC45LjhnL2NyeXB0by9ibi9ibl9sY2wu aC5pYTY0IG9wZW5zc2wtMC45LjhnL2NyeXB0by9ibi9ibl9sY2wuaAotLS0tIG9wZW5zc2wtMC45 LjhnL2NyeXB0by9ibi9ibl9sY2wuaC5pYTY0CTIwMDgtMDgtMTAgMjI6MjM6NTUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0wLjkuOGcvY3J5cHRvL2JuL2JuX2xjbC5oCTIwMDgtMDgtMTAg MjI6MjM6NTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMjc5LDYgKzI3OSwxNSBAQCBleHRlcm4gIkMi IHsKLSAjICAgZGVmaW5lIEJOX1VNVUxUX0hJR0goYSxiKQkJX191bXVsaCgoYSksKGIpKQotICMg ICBkZWZpbmUgQk5fVU1VTFRfTE9ISShsb3csaGlnaCxhLGIpCSgobG93KT1fdW11bDEyOCgoYSks KGIpLCYoaGlnaCkpKQotICMgIGVuZGlmCi0rIyBlbGlmIGRlZmluZWQoX19pYTY0KSAmJiBkZWZp bmVkKFNJWFRZX0ZPVVJfQklUX0xPTkcpCi0rIyAgaWYgZGVmaW5lZChfX0dOVUNfXykKLSsjICAg ZGVmaW5lIEJOX1VNVUxUX0hJR0goYSxiKSAoeyAgICAgIFwKLSsgICAgICByZWdpc3RlciBCTl9V TE9ORyByZXQ7ICAgICAgICAgIFwKLSsgICAgICBhc20gKCJ4bXB5Lmh1ICUwID0gJTEsICUyIiAg ICAgIFwKLSsgICAgICAgICAgIDogIj1mIihyZXQpICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgIDogImYiKGEpLCAiZiIoYikpOyAgICAgICAgIFwKLSsgICAgICByZXQ7ICAgICAgICAgICAg ICAgICAgICB9KQotKyMgIGVuZGlmICAgICAgLyogY29tcGlsZXIgKi8KLSAjIGVuZGlmCQkvKiBj cHUgKi8KLSAjZW5kaWYJCS8qIE9QRU5TU0xfTk9fQVNNICovCi0gCgpkaWZmIC0tZ2l0IGEvb3Bl bnNzbC0xLjAuMC1iZXRhMy1maXBzY2hlY2sucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGEzLWZp cHNjaGVjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk1MWI0OC4uMDAw MDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNjaGVjay5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDQwMCArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9maXBzL2ZpcHMuYy5maXBzY2hlY2sgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzY2hl Y2sJMjAwOS0wOC0xMCAyMDoxMTo1OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9maXBzL2ZpcHMuYwkyMDA5LTA4LTEwIDIwOjExOjU5LjAwMDAwMDAwMCAr MDIwMAotQEAgLTQ3LDYgKzQ3LDcgQEAKLSAgKgotICAqLwotIAotKyNkZWZpbmUgX0dOVV9TT1VS Q0UKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+Ci1AQCAtNTYsNiArNTcsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgot ICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8bGltaXRzLmg+Ci0rI2luY2x1ZGUgPGRs ZmNuLmg+Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNs dWRlICJmaXBzX2xvY2wuaCIKLSAKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi1AQCAtMTY1LDYgKzE2 OSwyMDQgQEAgaW50IEZJUFNfc2VsZnRlc3QoKQotIAkmJiBGSVBTX3NlbGZ0ZXN0X2RzYSgpOwot ICAgICB9Ci0gCi0rLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNrIGRvZXMgb3Vyc2Vs dmVzICovCi0rCi0rc3RhdGljIGludAotK2dldF9saWJyYXJ5X3BhdGgoY29uc3QgY2hhciAqbGli bmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4p Ci0rewotKwlEbF9pbmZvIGluZm87Ci0rCXZvaWQgKmRsLCAqc3ltOwotKwlpbnQgcnYgPSAtMTsK LSsKLSsgICAgICAgIGRsID0gZGxvcGVuKGxpYm5hbWUsIFJUTERfTEFaWSk7Ci0rICAgICAgICBp ZiAoZGwgPT0gTlVMTCkgewotKwkgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0gICAgICAg Ci0rCi0rCXN5bSA9IGRsc3ltKGRsLCBzeW1ib2xuYW1lKTsKLSsKLSsJaWYgKHN5bSAhPSBOVUxM ICYmIGRsYWRkcihzeW0sICZpbmZvKSkgewotKwkJc3RybmNweShwYXRoLCBpbmZvLmRsaV9mbmFt ZSwgcGF0aGxlbi0xKTsKLSsJCXBhdGhbcGF0aGxlbi0xXSA9ICdcMCc7Ci0rCQlydiA9IDA7Ci0r CX0KLSsKLSsJZGxjbG9zZShkbCk7CQotKwkKLSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMg Y29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0rCi0rc3RhdGljIGNoYXIg KgotK2JpbjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQotK3sKLSsJY2hhciAqaGV4LCAqcDsK LSsJdW5zaWduZWQgY2hhciAqc3JjID0gYnVmOwotKwkKLSsJaGV4ID0gbWFsbG9jKGxlbiAqIDIg KyAxKTsKLSsJaWYgKGhleCA9PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXAgPSBoZXg7 Ci0rCi0rCXdoaWxlIChsZW4gPiAwKSB7Ci0rCQl1bnNpZ25lZCBjOwotKwotKwkJYyA9ICpzcmM7 Ci0rCQlzcmMrKzsKLSsKLSsJCSpwID0gY29udltjID4+IDRdOwotKwkJKytwOwotKwkJKnAgPSBj b252W2MgJiAweDBmXTsKLSsJCSsrcDsKLSsJCS0tbGVuOwotKwl9Ci0rCSpwID0gJ1wwJzsKLSsJ cmV0dXJuIGhleDsKLSt9Ci0rCi0rI2RlZmluZSBITUFDX1BSRUZJWCAiLiIgCi0rI2RlZmluZSBI TUFDX1NVRkZJWCAiLmhtYWMiIAotKyNkZWZpbmUgUkVBRF9CVUZGRVJfTEVOR1RIIDE2Mzg0Ci0r Ci0rc3RhdGljIGNoYXIgKgotK21ha2VfaG1hY19wYXRoKGNvbnN0IGNoYXIgKm9yaWdwYXRoKQot K3sKLSsJY2hhciAqcGF0aCwgKnA7Ci0rCWNvbnN0IGNoYXIgKmZuOwotKwotKwlwYXRoID0gbWFs bG9jKHNpemVvZihITUFDX1BSRUZJWCkgKyBzaXplb2YoSE1BQ19TVUZGSVgpICsgc3RybGVuKG9y aWdwYXRoKSk7Ci0rCWlmKHBhdGggPT0gTlVMTCkgewotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsK LSsJZm4gPSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOwotKwlpZiAoZm4gPT0gTlVMTCkgewotKwkJ Zm4gPSBvcmlncGF0aDsKLSsJfSBlbHNlIHsKLSsJCSsrZm47Ci0rCX0KLSsKLSsJc3RybmNweShw YXRoLCBvcmlncGF0aCwgZm4tb3JpZ3BhdGgpOwotKwlwID0gcGF0aCArIChmbiAtIG9yaWdwYXRo KTsKLSsJcCA9IHN0cGNweShwLCBITUFDX1BSRUZJWCk7Ci0rCXAgPSBzdHBjcHkocCwgZm4pOwot KwlwID0gc3RwY3B5KHAsIEhNQUNfU1VGRklYKTsKLSsKLSsJcmV0dXJuIHBhdGg7Ci0rfQotKwot K3N0YXRpYyBjb25zdCBjaGFyIGhtYWNrZXlbXSA9ICJvcmJvRGVKSVRJVGVqc2lycEFET05pdmly cFVrdmFyUCI7Ci0rCi0rc3RhdGljIGludAotK2NvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIg KnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKLSt7Ci0rCUZJTEUgKmYgPSBOVUxM OwotKwlpbnQgcnYgPSAtMTsKLSsJdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xFTkdU SF07Ci0rCXNpemVfdCBsZW47Ci0rCXVuc2lnbmVkIGludCBobGVuOwotKwlITUFDX0NUWCBjOwot KwotKwlITUFDX0NUWF9pbml0KCZjKTsKLSsKLSsJZiA9IGZvcGVuKHBhdGgsICJyIik7Ci0rCi0r CWlmIChmID09IE5VTEwpIHsKLSsJCWdvdG8gZW5kOwotKwl9Ci0rCi0rCUhNQUNfSW5pdCgmYywg aG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpLTEsIEVWUF9zaGEyNTYoKSk7Ci0rCi0rCXdoaWxlICgo bGVuPWZyZWFkKHJidWYsIDEsIHNpemVvZihyYnVmKSwgZikpICE9IDApIHsKLSsJCUhNQUNfVXBk YXRlKCZjLCByYnVmLCBsZW4pOwotKwl9Ci0rCi0rCWxlbiA9IHNpemVvZihyYnVmKTsKLSsJLyog cmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLwotKwlITUFDX0ZpbmFsKCZjLCByYnVmLCAmaGxlbik7Ci0r Ci0rCSpidWYgPSBtYWxsb2MoaGxlbik7Ci0rCWlmICgqYnVmID09IE5VTEwpIHsKLSsJCWdvdG8g ZW5kOwotKwl9Ci0rCi0rCSpobWFjbGVuID0gaGxlbjsKLSsKLSsJbWVtY3B5KCpidWYsIHJidWYs IGhsZW4pOwotKwotKwlydiA9IDA7Ci0rZW5kOgotKwlITUFDX0NUWF9jbGVhbnVwKCZjKTsKLSsK LSsJaWYgKGYpCi0rCQlmY2xvc2UoZik7Ci0rCi0rCXJldHVybiBydjsKLSt9Ci0rCi0rc3RhdGlj IGludAotK0ZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAq c3ltYm9sbmFtZSkKLSt7Ci0rCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsKLSsJaW50IHJ2OwotKwlG SUxFICpoZjsKLSsJY2hhciAqaG1hY3BhdGgsICpwOwotKwljaGFyICpobWFjID0gTlVMTDsKLSsJ c2l6ZV90IG47Ci0rCQotKwlydiA9IGdldF9saWJyYXJ5X3BhdGgobGlibmFtZSwgc3ltYm9sbmFt ZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKLSsKLSsJaWYgKHJ2IDwgMCkKLSsJCXJldHVybiAwOwot KwotKwlobWFjcGF0aCA9IG1ha2VfaG1hY19wYXRoKHBhdGgpOwotKwotKwloZiA9IGZvcGVuKGht YWNwYXRoLCAiciIpOwotKwlpZiAoaGYgPT0gTlVMTCkgewotKwkJZnJlZShobWFjcGF0aCk7Ci0r CQlyZXR1cm4gMDsKLSsJfQotKwotKwlpZiAoZ2V0bGluZSgmaG1hYywgJm4sIGhmKSA+IDApIHsK LSsJCXZvaWQgKmJ1ZjsKLSsJCXNpemVfdCBobWFjbGVuOwotKwkJY2hhciAqaGV4OwotKwotKwkJ aWYgKChwPXN0cmNocihobWFjLCAnXG4nKSkgIT0gTlVMTCkKLSsJCQkqcCA9ICdcMCc7Ci0rCi0r CQlpZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgewotKwkJ CXJ2ID0gLTQ7Ci0rCQkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCQlpZiAoKGhleD1iaW4yaGV4KGJ1 ZiwgaG1hY2xlbikpID09IE5VTEwpIHsKLSsJCQlmcmVlKGJ1Zik7Ci0rCQkJcnYgPSAtNTsKLSsJ CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJCWlmIChzdHJjbXAoaGV4LCBobWFjKSAhPSAwKSB7Ci0r CQkJcnYgPSAtMTsKLSsJCX0KLSsJCWZyZWUoYnVmKTsKLSsJCWZyZWUoaGV4KTsKLSsJfQotKwot K2VuZDoKLSsJZnJlZShobWFjKTsKLSsJZnJlZShobWFjcGF0aCk7Ci0rCWZjbG9zZShoZik7Ci0r Ci0rCWlmIChydiA8IDApCi0rCQlyZXR1cm4gMDsKLSsKLSsJLyogY2hlY2sgc3VjY2Vzc2Z1bCAq LwotKwlyZXR1cm4gMTsJCi0rfQotKwotIGludCBGSVBTX21vZGVfc2V0KGludCBvbm9mZikKLSAg ICAgewotICAgICBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwotQEAgLTIwMSw2ICs0MDMs MjIgQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IG9ub2ZmKQotIAkgICAgfQotICNlbmRpZgotIAot KwlpZighRklQU0NIRUNLX3ZlcmlmeSgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1C RVIsIkZJUFNfbW9kZV9zZXQiKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf TU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsKLSsJICAgIGZpcHNf c2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAg ICB9Ci0rCi0rCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJzc2wuc28uIiBTSExJQl9WRVJTSU9O X05VTUJFUiwiU1NMX0NUWF9uZXciKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsKLSsJICAgIGZp cHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0r CSAgICB9Ci0rCi0gCS8qIFBlcmZvcm0gUk5HIEtBVCBiZWZvcmUgc2VlZGluZyAqLwotIAlpZiAo IUZJUFNfc2VsZnRlc3Rfcm5nKCkpCi0gCSAgICB7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMuZmlwc2NoZWNrIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYwotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYy5maXBzY2hl Y2sJMjAwOS0wOC0xMCAyMDoxMTo1OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMJMjAwOS0wOC0xMCAyMDox MTo1OS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Miw3ICs2Miw3IEBAIHZvaWQgT1BFTlNTTF9jbGVh bnNlKHZvaWQgKnAsc2l6ZV90IGxlbikKLSAKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0gCi0tc3Rh dGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1kX2N0eCxTSEFfQ1RYICpvX2N0eCwKLStzdGF0 aWMgdm9pZCBobWFjX2luaXQoU0hBMjU2X0NUWCAqbWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4LAot IAkJICAgICAgY29uc3QgY2hhciAqa2V5KQotICAgICB7Ci0gICAgIHNpemVfdCBsZW49c3RybGVu KGtleSk7Ci1AQCAtNzIsMTAgKzcyLDEwIEBAIHN0YXRpYyB2b2lkIGhtYWNfaW5pdChTSEFfQ1RY ICptZF9jdHgsU0gKLSAKLSAgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCi0gCXsKLS0JU0hBMV9J bml0KG1kX2N0eCk7Ci0tCVNIQTFfVXBkYXRlKG1kX2N0eCxrZXksbGVuKTsKLS0JU0hBMV9GaW5h bChrZXltZCxtZF9jdHgpOwotLQlsZW49MjA7Ci0rCVNIQTI1Nl9Jbml0KG1kX2N0eCk7Ci0rCVNI QTI1Nl9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlTSEEyNTZfRmluYWwoa2V5bWQsbWRfY3R4 KTsKLSsJbGVuPVNIQTI1Nl9ESUdFU1RfTEVOR1RIOwotIAl9Ci0gICAgIGVsc2UKLSAJbWVtY3B5 KGtleW1kLGtleSxsZW4pOwotQEAgLTgzLDIyICs4MywyMiBAQCBzdGF0aWMgdm9pZCBobWFjX2lu aXQoU0hBX0NUWCAqbWRfY3R4LFNICi0gCi0gICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURf Q0JMT0NLIDsgaSsrKQotIAlwYWRbaV09MHgzNl5rZXltZFtpXTsKLS0gICAgU0hBMV9Jbml0KG1k X2N0eCk7Ci0tICAgIFNIQTFfVXBkYXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rICAgIFNI QTI1Nl9Jbml0KG1kX2N0eCk7Ci0rICAgIFNIQTI1Nl9VcGRhdGUobWRfY3R4LHBhZCxTSEEyNTZf Q0JMT0NLKTsKLSAKLSAgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKysp Ci0gCXBhZFtpXT0weDVjXmtleW1kW2ldOwotLSAgICBTSEExX0luaXQob19jdHgpOwotLSAgICBT SEExX1VwZGF0ZShvX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rICAgIFNIQTI1Nl9Jbml0KG9fY3R4 KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7Ci0gICAgIH0K LSAKLS1zdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNIQV9DVFggKm1k X2N0eCxTSEFfQ1RYICpvX2N0eCkKLStzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNo YXIgKm1kLFNIQTI1Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKLSAgICAgewotLSAg ICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9E SUdFU1RfTEVOR1RIXTsKLSAKLS0gICAgU0hBMV9GaW5hbChidWYsbWRfY3R4KTsKLS0gICAgU0hB MV9VcGRhdGUob19jdHgsYnVmLHNpemVvZiBidWYpOwotLSAgICBTSEExX0ZpbmFsKG1kLG9fY3R4 KTsKLSsgICAgU0hBMjU2X0ZpbmFsKGJ1ZixtZF9jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG9f Y3R4LGJ1ZixzaXplb2YgYnVmKTsKLSsgICAgU0hBMjU2X0ZpbmFsKG1kLG9fY3R4KTsKLSAgICAg fQotIAotICNlbmRpZgotQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCBobWFjX2ZpbmFs KHVuc2lnbmVkIGNoYXIgKm1kCi0gaW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0gICAg IHsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIHN0YXRpYyBjaGFyIGtleVtdPSJldGFvbnJp c2hkbGN1cGZtIjsKLSsgICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURP Tml2aXJwVWt2YXJQIjsKLSAgICAgaW50IG4sYmluYXJ5PTA7Ci0gCi0gICAgIGlmKGFyZ2MgPCAy KQotQEAgLTEyNSw4ICsxMjUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSAg ICAgZm9yKDsgbiA8IGFyZ2MgOyArK24pCi0gCXsKLSAJRklMRSAqZj1mb3Blbihhcmd2W25dLCJy YiIpOwotLQlTSEFfQ1RYIG1kX2N0eCxvX2N0eDsKLS0JdW5zaWduZWQgY2hhciBtZFsyMF07Ci0r CVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdF U1RfTEVOR1RIXTsKLSAJaW50IGk7Ci0gCi0gCWlmKCFmKQotQEAgLTE1MSwxOCArMTUxLDE4IEBA IGludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotIAkJZWxzZQotIAkJICAgIGJyZWFrOwot IAkJfQotLQkgICAgU0hBMV9VcGRhdGUoJm1kX2N0eCxidWYsbCk7Ci0rCSAgICBTSEEyNTZfVXBk YXRlKCZtZF9jdHgsYnVmLGwpOwotIAkgICAgfQotIAlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9f Y3R4KTsKLSAKLSAJaWYgKGJpbmFyeSkKLSAJICAgIHsKLS0JICAgIGZ3cml0ZShtZCwyMCwxLHN0 ZG91dCk7Ci0rCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJR0VTVF9MRU5HVEgsMSxzdGRvdXQpOwot IAkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KLSAJICAgIH0KLSAKLS0J cHJpbnRmKCJITUFDLVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOwotLQlmb3IoaT0wIDsgaSA8IDIwIDsg KytpKQotKy8qCXByaW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsgKi8KLSsJZm9yKGk9 MCA7IGkgPCBTSEEyNTZfRElHRVNUX0xFTkdUSCA7ICsraSkKLSAJICAgIHByaW50ZigiJTAyeCIs bWRbaV0pOwotIAlwcmludGYoIlxuIik7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwc2NoZWNrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2ZpcHMvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL01h a2VmaWxlLmZpcHNjaGVjawkyMDA5LTA4LTEwIDIwOjExOjU5LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAwOS0wOC0xMCAyMDoy Nzo0NS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNiw2ICsxNiw5IEBAIEdFTkVSQUw9TWFrZWZpbGUK LSBURVNUPWZpcHNfdGVzdF9zdWl0ZS5jIGZpcHNfcmFuZHRlc3QuYwotIEFQUFM9Ci0gCi0rUFJP R1JBTT0gZmlwc19zdGFuZGFsb25lX3NoYTEKLStFWEU9ICQoUFJPR1JBTSkkKEVYRV9FWFQpCi0r Ci0gTElCPSQoVE9QKS9saWJjcnlwdG8uYQotIExJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZp cHNfZGVzX3NlbGZ0ZXN0LmMgZmlwc19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0 LmMgXAotICAgICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhMV9zZWxmdGVzdC5jIGZpcHMu YyBmaXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBcCi1AQCAtMjUsNiArMjgsOCBAQCBM SUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmCi0gICAgIGZpcHNfcnNhX3Nl bGZ0ZXN0Lm8gZmlwc19zaGExX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8g IGZpcHNfcmFuZC5vIFwKLSAgICAgZmlwc19yc2FfeDkzMWcubwotIAotK0xJQkNSWVBUTz0tTC4u IC1sY3J5cHRvCi0rCi0gU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25lX3NoYTEuYwotIAot IEVYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLUBAIC0zNSwxMyArNDAsMTUgQEAgQUxMPSAg ICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSB0b3A6Ci0gCShjZCAuLi8uLjsgJChNQUtF KSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLSAKLS1hbGw6CWxpYgotK2FsbDoJ bGliIGV4ZQotIAotIGxpYjoJJChMSUJPQkopCi0gCSQoQVIpICQoTElCKSAkKExJQk9CSikKLSAJ JChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0gCUB0b3VjaCBsaWIKLSAKLStl eGU6CSQoRVhFKQotKwotIGZpbGVzOgotIAkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1h a2VmaWxlID4+ICQoVE9QKS9NSU5GTwotIAotQEAgLTc3LDUgKzg0LDkgQEAgZGNsZWFuOgotIGNs ZWFuOgotIAlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAq LmJhayBmbHVmZgotIAotKyQoRVhFKTogJChQUk9HUkFNKS5vCi0rCUZJUFNfU0hBX0FTTT0iIjsg Zm9yIGkgaW4gJChTSEExX0FTTV9PQkopIHNoYTI1Ni5vIDsgZG8gRklQU19TSEFfQVNNPSIkJEZJ UFNfU0hBX0FTTSAuLi9zaGEvJCRpIiA7IGRvbmU7IFwKLSsJJChDQykgLW8gJEAgJChDRkxBR1Mp ICQoUFJPR1JBTSkubyAkJEZJUFNfU0hBX0FTTQotKwotICMgRE8gTk9UIERFTEVURSBUSElTIExJ TkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLSAKCmRpZmYgLS1naXQgYS9vcGVuc3Ns LTEuMC4wLWJldGEzLWZpcHNybmcucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNybmcu cGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNDA0MjEuLjAwMDAwMDAKLS0t IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzcm5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs NzkgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBz LmMuZmlwc3JuZyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHMuYwotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHNybmcJMjAwOS0wOC0xMSAx ODoxMjoxNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9m aXBzL2ZpcHMuYwkyMDA5LTA4LTExIDE4OjE0OjM2LjAwMDAwMDAwMCArMDIwMAotQEAgLTQyNywy MiArNDI3LDIyIEBAIGludCBGSVBTX21vZGVfc2V0KGludCBvbm9mZikKLSAJICAgIGdvdG8gZW5k OwotIAkgICAgfQotIAotKwkvKiBub3cgc3dpdGNoIHRoZSBSTkcgaW50byBGSVBTIG1vZGUgKi8K LSsJZmlwc19zZXRfcmFuZF9jaGVjayhGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlSQU5EX3NldF9y YW5kX21ldGhvZChGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwotIAkvKiBhdXRvbWFnaWNhbGx5IHNl ZWQgUFJORyBpZiBub3QgYWxyZWFkeSBzZWVkZWQgKi8KLSAJaWYoIUZJUFNfcmFuZF9zdGF0dXMo KSkKLSAJICAgIHsKLS0JICAgIGlmKFJBTkRfYnl0ZXMoYnVmLHNpemVvZiBidWYpIDw9IDApCi0r CSAgICBSQU5EX3BvbGwoKTsKLSsJICAgIGlmICghRklQU19yYW5kX3N0YXR1cygpKQotIAkJewot IAkJZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSAJCXJldCA9IDA7Ci0gCQlnb3RvIGVuZDsKLSAJ CX0KLS0JICAgIEZJUFNfcmFuZF9zZXRfa2V5KGJ1ZiwzMik7Ci0tCSAgICBGSVBTX3JhbmRfc2Vl ZChidWYrMzIsMTYpOwotIAkgICAgfQotIAotLQkvKiBub3cgc3dpdGNoIGludG8gRklQUyBtb2Rl ICovCi0tCWZpcHNfc2V0X3JhbmRfY2hlY2soRklQU19yYW5kX21ldGhvZCgpKTsKLS0JUkFORF9z ZXRfcmFuZF9tZXRob2QoRklQU19yYW5kX21ldGhvZCgpKTsKLSAJaWYoRklQU19zZWxmdGVzdCgp KQotIAkgICAgZmlwc19zZXRfbW9kZSgxKTsKLSAJZWxzZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzcm5nIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5jLmZpcHNybmcJMjAwOS0wOC0xMSAxODoxMjoxNC4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIw MDktMDgtMTEgMTg6MTY6NDguMDAwMDAwMDAwICswMjAwCi1AQCAtMTU1LDcgKzE1NSwxOCBAQCBz dGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfCi0gCXsKLSAJaW50IGk7Ci0g CWlmICghY3R4LT5rZXllZCkKLS0JCXJldHVybiAwOwotKwkJewotKwkJRklQU19SQU5EX1NJWkVf VCBrZXlsZW4gPSAxNjsKLSsKLSsJCWlmIChzZWVkbGVuIC0ga2V5bGVuIDwgQUVTX0JMT0NLX0xF TkdUSCkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmIChzZWVkbGVuIC0ga2V5bGVuIC0gOCA+PSBBRVNf QkxPQ0tfTEVOR1RIKQotKwkJCWtleWxlbiArPSA4OwotKwkJaWYgKHNlZWRsZW4gLSBrZXlsZW4g LSA4ID49IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJa2V5bGVuICs9IDg7Ci0rCQlzZWVkbGVuIC09 IGtleWxlbjsKLSsJCWZpcHNfc2V0X3Bybmdfa2V5KGN0eCwgc2VlZCtzZWVkbGVuLCBrZXlsZW4p OwotKwkJfQotIAkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0IHN1cHBsaWVkIGRhdGEgKi8K LSAJaWYgKGN0eC0+dGVzdF9tb2RlKQotIAkJewotQEAgLTI3Niw2ICsyODcsNyBAQCBzdGF0aWMg aW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0gCXVuc2lnbmVkIGNoYXIgUltBRVNf QkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSAJdW5zaWduZWQgY2hhciB0bXBb QUVTX0JMT0NLX0xFTkdUSF07Ci0gCWludCBpOwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0g CWlmIChjdHgtPmVycm9yKQotIAkJewotIAkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRf Ul9QUk5HX0VSUk9SKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQv cmFuZF9sY2wuaC5maXBzcm5nIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9s Y2wuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9sY2wuaC5maXBz cm5nCTIwMDktMDgtMTEgMTg6MTI6MTMuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oCTIwMDktMDgtMTEgMTg6MTg6MTMuMDAwMDAw MDAwICswMjAwCi1AQCAtMTEyLDggKzExMiwxMSBAQAotICNpZm5kZWYgSEVBREVSX1JBTkRfTENM X0gKLSAjZGVmaW5lIEhFQURFUl9SQU5EX0xDTF9ICi0gCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LSAjZGVmaW5lIEVOVFJPUFlfTkVFREVEIDMyICAvKiByZXF1aXJlIDI1NiBiaXRzID0gMzIgYnl0 ZXMgb2YgcmFuZG9tbmVzcyAqLwotLQotKyNlbHNlCi0rI2RlZmluZSBFTlRST1BZX05FRURFRCA0 OCAgLyogd2UgbmVlZCA0OCBieXRlcyBvZiByYW5kb21uZXNzIGZvciBGSVBTIHJuZyAqLwotKyNl bmRpZgotIAotICNpZiAhZGVmaW5lZChVU0VfTUQ1X1JBTkQpICYmICFkZWZpbmVkKFVTRV9TSEEx X1JBTkQpICYmICFkZWZpbmVkKFVTRV9NREMyX1JBTkQpICYmICFkZWZpbmVkKFVTRV9NRDJfUkFO RCkKLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBMSkKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGEzLXNvdmVyc2lvbi5wYXRjaCBi L29wZW5zc2wtMS4wLjAtYmV0YTMtc292ZXJzaW9uLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAzODM2ZTg5Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtc292 ZXJzaW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUuc292ZXJzaW9uIG9wZW5zc2wtMS4wLjAtYmV0YTMv Q29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUuc292ZXJzaW9uCTIw MDktMDgtMDQgMjM6MDY6NTIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh My9Db25maWd1cmUJMjAwOS0wOC0wNCAyMzowNjo1Mi4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNTE0 LDcgKzE1MTQsNyBAQCB3aGlsZSAoPElOPikKLSAJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5l ICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSpcLlteXC5dKiQv KQotIAkJewotIAkJbXkgJHNvdG1wID0gJDE7Ci0tCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9 LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX01BSk9SKSAucyRzb3Rt cC87Ci0rCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRT PS5zJHNvdG1wLlwkKFNITElCX1NPTkFNRVZFUikgLnMkc290bXAvOwotIAkJfQotIAllbHNpZiAo JHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5d KlwuW15cLl0qXC5keWxpYiQvKQotIAkJewotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9N YWtlZmlsZS5vcmcuc292ZXJzaW9uIG9wZW5zc2wtMS4wLjAtYmV0YTMvTWFrZWZpbGUub3JnCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9NYWtlZmlsZS5vcmcuc292ZXJzaW9uCTIwMDktMDgtMDQg MjM6MDY6NTIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9NYWtlZmls ZS5vcmcJMjAwOS0wOC0wNCAyMzoxMTowMS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMCw2ICsxMCw3 IEBAIFNITElCX1ZFUlNJT05fSElTVE9SWT0KLSBTSExJQl9NQUpPUj0KLSBTSExJQl9NSU5PUj0K LSBTSExJQl9FWFQ9Ci0rU0hMSUJfU09OQU1FVkVSPTEwCi0gUExBVEZPUk09ZGlzdAotIE9QVElP TlM9Ci0gQ09ORklHVVJFX0FSR1M9Ci1AQCAtMjg5LDEwICsyOTAsOSBAQCBjbGVhbi1zaGFyZWQ6 Ci0gbGluay1zaGFyZWQ6Ci0gCUAgc2V0IC1lOyBmb3IgaSBpbiAkKFNITElCRElSUyk7IGRvIFwK LSAJCSQoTUFLRSkgLWYgJChIRVJFKS9NYWtlZmlsZS5zaGFyZWQgLWUgJChCVUlMREVOVikgXAot LQkJCUxJQk5BTUU9JCRpIExJQlZFUlNJT049JChTSExJQl9NQUpPUikuJChTSExJQl9NSU5PUikg XAotKwkJCUxJQk5BTUU9JCRpIExJQlZFUlNJT049JChTSExJQl9TT05BTUVWRVIpIFwKLSAJCQlM SUJDT01QQVRWRVJTSU9OUz0iOyQoU0hMSUJfVkVSU0lPTl9ISVNUT1JZKSIgXAotIAkJCXN5bWxp bmsuJChTSExJQl9UQVJHRVQpOyBcCi0tCQlsaWJzPSIkJGxpYnMgLWwkJGkiOyBcCi0gCWRvbmUK LSAKLSBidWlsZC1zaGFyZWQ6IGRvXyQoU0hMSUJfVEFSR0VUKSBsaW5rLXNoYXJlZAotQEAgLTMw Myw3ICszMDMsNyBAQCBkb18kKFNITElCX1RBUkdFVCk6Ci0gCQkJbGlicz0iJChMSUJLUkI1KSAk JGxpYnMiOyBcCi0gCQlmaTsgXAotIAkJJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZiBNYWtlZmls ZS5zaGFyZWQgLWUgJChCVUlMREVOVikgXAotLQkJCUxJQk5BTUU9JCRpIExJQlZFUlNJT049JChT SExJQl9NQUpPUikuJChTSExJQl9NSU5PUikgXAotKwkJCUxJQk5BTUU9JCRpIExJQlZFUlNJT049 JChTSExJQl9TT05BTUVWRVIpIFwKLSAJCQlMSUJDT01QQVRWRVJTSU9OUz0iOyQoU0hMSUJfVkVS U0lPTl9ISVNUT1JZKSIgXAotIAkJCUxJQkRFUFM9IiQkbGlicyAkKEVYX0xJQlMpIiBcCi0gCQkJ bGlua19hLiQoU0hMSUJfVEFSR0VUKTsgXAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0 YTQtZHRsczEtYWJpLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MGY1NWQuLjAwMDAwMDAKLS0tIGEvb3Bl bnNzbC0xLjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNSAr MCwwIEBACi1BZGRpbmcgc3RydWN0IG1lbWJlciBpcyBBQkkgYnJlYWtlciBob3dldmVyIGFzIHRo ZSBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGFsbG9jYXRlZCBieQotdGhlIGxpYnJhcnkgY2FsbHMgd2Ug anVzdCBtb3ZlIGl0IHRvIHRoZSBlbmQgYW5kIGl0IHNob3VsZCBiZSByZWFzb25hYmx5IHNhZmUu Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9kdGxzMS5oLmR0bHMxLWFiaSBvcGVu c3NsLTEuMC4wLWJldGE0L3NzbC9kdGxzMS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv ZHRsczEuaC5kdGxzMS1hYmkJMjAwOS0xMS0xMiAxNDozNDozNy4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9kdGxzMS5oCTIwMDktMTEtMTIgMTQ6NDc6NTcuMDAw MDAwMDAwICswMTAwCi1AQCAtMjE2LDkgKzIxNiw2IEBAIHR5cGVkZWYgc3RydWN0IGR0bHMxX3N0 YXRlX3N0Ci0gCSAqLwotIAlyZWNvcmRfcHF1ZXVlIGJ1ZmZlcmVkX2FwcF9kYXRhOwotIAotLQkv KiBJcyBzZXQgd2hlbiBsaXN0ZW5pbmcgZm9yIG5ldyBjb25uZWN0aW9ucyB3aXRoIGR0bHMxX2xp c3RlbigpICovCi0tCXVuc2lnbmVkIGludCBsaXN0ZW47Ci0tCi0gCXVuc2lnbmVkIGludCBtdHU7 IC8qIG1heCBEVExTIHBhY2tldCBzaXplICovCi0gCi0gCXN0cnVjdCBobV9oZWFkZXJfc3Qgd19t c2dfaGRyOwotQEAgLTI0Miw2ICsyMzksOSBAQCB0eXBlZGVmIHN0cnVjdCBkdGxzMV9zdGF0ZV9z dAotIAl1bnNpZ25lZCBpbnQgcmV0cmFuc21pdHRpbmc7Ci0gCXVuc2lnbmVkIGludCBjaGFuZ2Vf Y2lwaGVyX3NwZWNfb2s7Ci0gCi0rCS8qIElzIHNldCB3aGVuIGxpc3RlbmluZyBmb3IgbmV3IGNv bm5lY3Rpb25zIHdpdGggZHRsczFfbGlzdGVuKCkgKi8KLSsJdW5zaWduZWQgaW50IGxpc3RlbjsK LSsKLSAJfSBEVExTMV9TVEFURTsKLSAKLSB0eXBlZGVmIHN0cnVjdCBkdGxzMV9yZWNvcmRfZGF0 YV9zdAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVkaGF0LnBhdGNoIGIvb3Bl bnNzbC0xLjAuMC1iZXRhNC1yZWRoYXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDQzNTZlNDEuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZWRoYXQucGF0 Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L0NvbmZpZ3VyZS5yZWRoYXQgb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZS5yZWRoYXQJMjAwOS0xMS0wOSAxNToxMTox My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZQkyMDA5 LTExLTEyIDEyOjE1OjI3LjAwMDAwMDAwMCArMDEwMAotQEAgLTMzNiwzMiArMzM2LDMyIEBAIG15 ICV0YWJsZT0oCi0gIyMjIwotICMgKi1nZW5lcmljKiBpcyBlbmRpYW4tbmV1dHJhbCB0YXJnZXQs IGJ1dCAuL2NvbmZpZyBpcyBmcmVlIHRvCi0gIyB0aHJvdyBpbiAtRFtCTF1fRU5ESUFOLCB3aGlj aGV2ZXIgYXBwcm9wcmlhdGUuLi4KLS0ibGludXgtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPIC1P MyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05H IFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpk bGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlO T1IpIiwKLS0ibGludXgtcHBjIiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6 LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEg REVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6 Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgtZ2VuZXJpYzMy IiwiZ2NjOi1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1s ZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6 JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28u XCQoU0hMSUJfU09OQU1FVkVSKSIsCi0rImxpbnV4LXBwYyIsCSJnY2M6LURCX0VORElBTiAtRFRF Uk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05H IFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGlu dXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNI TElCX1NPTkFNRVZFUikiLAotICMgSXQncyBiZWxpZXZlZCB0aGF0IG1ham9yaXR5IG9mIEFSTSB0 b29sY2hhaW5zIHByZWRlZmluZSBhcHByb3ByaWF0ZSAtbWFyY2guCi0gIyBJZiB5b3UgY29tcGls ZXIgZG9lcyBub3QsIGRvIGNvbXBsZW1lbnQgY29uZmlnIGNvbW1hbmQgbGluZSB3aXRoIG9uZSEK LS0ibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjot bGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRS OiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpP UikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1XYWxs IFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIg UkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxp bnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVS KSIsCi0gIyMjIyBJQS0zMiB0YXJnZXRzLi4uCi0gImxpbnV4LWlhMzItaWNjIiwJImljYzotRExf RU5ESUFOIC1EVEVSTUlPIC1PMiAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9O RyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGlu dXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0t ImxpbnV4LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBv aW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAk e3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjou c28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxpbnV4LWVsZiIsCSJnY2M6 LURMX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5U OjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZf YXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNI TElCX1NPTkFNRVZFUikiLAotICJsaW51eC1hb3V0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlP IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6KHVua25vd24pOjo6 Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQi LAotICMjIyMKLS0ibGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURf UkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERF U19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ Qzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotLSJsaW51eC1wcGM2NCIs CSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjot bGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNf VU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0 Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAotLSJsaW51eC1pYTY0 IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRs OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRf YXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hM SUJfTUlOT1IpIiwKLSsibGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPIC1XYWxsIFwkKFJQ TV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246 bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVW RVIpIiwKLSsibGludXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtV2Fs bCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xP TkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTps aW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5z by5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAotKyJsaW51eC1pYTY0IiwJImdjYzotRExfRU5E SUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6 U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9h c219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hM SUJfU09OQU1FVkVSKSIsCi0gImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJN SU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklU X0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1m UElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0gImxpbnV4LWlhNjQt aWNjIiwiaWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVF TlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNf SU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01B Sk9SKS5cJChTSExJQl9NSU5PUikiLAotLSJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VO RElBTiAtRFRFUk1JTyAtTzMgLVdhbGwgLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjot bGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4 Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJf TUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLS0ibGludXgtczM5MHgiLAkiZ2NjOi1tNjQg LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9G T1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtzMzkw eF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUiku XCQoU0hMSUJfTUlOT1IpOjo6NjQiLAotKyJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VO RElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKSAtRE1EMzJfUkVHX1Q9aW50Ojot RF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBE RVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0 IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAotKyJsaW51 eC1zMzkweCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRf RkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBS QzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7czM5MHhfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6 OjY0IiwKLSAjIyMjIFNQQVJDIExpbnV4IHNldHVwcwotICMgUmF5IE1pbGxlciA8cmF5Lm1pbGxl ckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5Ci0gIyBhc3Np c3RlZCB3aXRoIGRlYnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNvbmZpZ3MuCi0tImxpbnV4LXNw YXJjdjgiLCJnY2M6LW12OCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9p bnRlciAtV2FsbCAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NI QVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4 LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJs aW51eC1zcGFyY3Y4IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9G TEFHUykgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJD NF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAotICMg aXQncyBhIHJlYWwgbWVzcyB3aXRoIC1tY3B1PXVsdHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4 LCBidXQKLSAjIC1XYSwtQXY4cGx1cyBzaG91bGQgZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0 LgotLSJsaW51eC1zcGFyY3Y5IiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFO IC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURC Tl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBS QzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hh cmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJs aW51eC1zcGFyY3Y5IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9G TEFHUykgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBS QzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246 bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVW RVIpIiwKLSAjIEdDQyAzLjEgaXMgYSByZXF1aXJlbWVudAotLSJsaW51eDY0LXNwYXJjdjkiLCJn Y2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1m cmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05H IFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwg QkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5c JChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAotKyJsaW51eDY0LXNwYXJjdjki LCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVF TlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lO VCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZj bjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFN RVZFUik6Ojo2NCIsCi0gIyMjIyBBbHBoYSBMaW51eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBz ZXR1cHMKLSAjIFNwZWNpYWwgbm90ZXM6Ci0gIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVu dCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25seS4gSWYgeW91Ci1AQCAtMzc1LDggKzM3NSw4 IEBAIG15ICV0YWJsZT0oCi0gIwotICMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KLSAjCi0t ImxpbnV4LWFscGhhLWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRS QU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5S T0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9N QUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLS0ibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMg LURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xP TkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpk bGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlO T1IpIiwKLSsibGludXgtYWxwaGEtZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLVdhbGwg XCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05H IFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgt c2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwK LSsibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwk KFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBS QzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNu OmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1F VkVSKSIsCi0gImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAt RExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJD NF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219 IiwKLSAibGludXgtYWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAt RExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJD NF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHth bHBoYV9hc219IiwKLSAKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE1LWNpcGhlci1j aGFuZ2UucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE1LWNpcGhlci1jaGFuZ2UucGF0Y2gKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjAwY2QuLjAwMDAwMDAKLS0tIGEvb3BlbnNz bC0xLjAuMC1iZXRhNS1jaXBoZXItY2hhbmdlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjEg KzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvc3NsLmguY2lwaGVyLWNo YW5nZSBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2wuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTUvc3NsL3NzbC5oLmNpcGhlci1jaGFuZ2UJMjAxMC0wMS0yMCAxODoxMjowNy4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2wuaAkyMDEwLTAxLTIwIDE4OjEz OjA0LjAwMDAwMDAwMCArMDEwMAotQEAgLTUxMyw3ICs1MTMsNyBAQCB0eXBlZGVmIHN0cnVjdCBz c2xfc2Vzc2lvbl9zdAotICNkZWZpbmUgU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUcJCQkw eDAwMDAwMDAyTAotIC8qIEFsbG93IGluaXRpYWwgY29ubmVjdGlvbiB0byBzZXJ2ZXJzIHRoYXQg ZG9uJ3Qgc3VwcG9ydCBSSSAqLwotICNkZWZpbmUgU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVD VAkJCTB4MDAwMDAwMDRMCi0tI2RlZmluZSBTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NI QU5HRV9CVUcJCTB4MDAwMDAwMDhMCi0rI2RlZmluZSBTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQ SEVSX0NIQU5HRV9CVUcJCTB4MDAwMDAwMDhMIC8qIG5vIGVmZmVjdCBzaW5jZSAxLjAuMGMgZHVl IHRvIENWRS0yMDEwLTQxODAgKi8KLSAjZGVmaW5lIFNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRf VFlQRV9CVUcJCTB4MDAwMDAwMTBMCi0gI2RlZmluZSBTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xW M19CVUZGRVIJCTB4MDAwMDAwMjBMCi0gI2RlZmluZSBTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFE RElORwkJCTB4MDAwMDAwNDBMIC8qIG5vIGVmZmVjdCBzaW5jZSAwLjkuN2ggYW5kIDAuOS44YiAq LwotQEAgLTUzMCw3ICs1MzAsNyBAQCB0eXBlZGVmIHN0cnVjdCBzc2xfc2Vzc2lvbl9zdAotIAot IC8qIFNTTF9PUF9BTEw6IHZhcmlvdXMgYnVnIHdvcmthcm91bmRzIHRoYXQgc2hvdWxkIGJlIHJh dGhlciBoYXJtbGVzcy4KLSAgKiAgICAgICAgICAgICBUaGlzIHVzZWQgdG8gYmUgMHgwMDBGRkZG RkwgYmVmb3JlIDAuOS43LiAqLwotLSNkZWZpbmUgU1NMX09QX0FMTAkJCQkJMHg4MDAwMEZGRkwK LSsjZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBGRjdMCi0gCi0gLyogRFRMUyBvcHRpb25z ICovCi0gI2RlZmluZSBTU0xfT1BfTk9fUVVFUllfTVRVICAgICAgICAgICAgICAgICAweDAwMDAx MDAwTAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtZmlwcy1hZXNuaS5wYXRjaCBiL29wZW5z c2wtMS4wLjAtZmlwcy1hZXNuaS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YzEyZTkzZS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWZpcHMtYWVzbmkucGF0Y2gKKysr IC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9lbmdpbmUvZW5nX2Flc25pLmMuZmlwcy1hZXNuaSBvcGVuc3NsLTEuMC4wL2NyeXB0by9lbmdp bmUvZW5nX2Flc25pLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9lbmdpbmUvZW5nX2Flc25p LmMuZmlwcy1hZXNuaQkyMDExLTA1LTI0IDE1OjIwOjI5LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2VuZ2luZS9lbmdfYWVzbmkuYwkyMDExLTA2LTA4IDE0OjE5OjIy LjAwMDAwMDAwMCArMDIwMAotQEAgLTMyMyw3ICszMjMsNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBhZXNuaV8jI2tzaXplIyNfCi0gCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZV8jI3Vtb2RlLAkJ CVwKLSAJa3NpemUgLyA4LAkJCQkJXAotIAlBRVNfQkxPQ0tfU0laRSwJCQkJCVwKLS0JMCB8IEVW UF9DSVBIXyMjdW1vZGUjI19NT0RFLAkJCVwKLSsJRVZQX0NJUEhfRkxBR19GSVBTIHwgRVZQX0NJ UEhfIyN1bW9kZSMjX01PREUsCQkJXAotIAlhZXNuaV9pbml0X2tleSwJCQkJXAotIAlhZXNuaV9j aXBoZXJfIyNsbW9kZSwJCQkJXAotIAlOVUxMLAkJCQkJCVwKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMtYWVzbmkgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzLWFlc25p CTIwMTEtMDUtMjQgMTU6MjA6MjkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZmlwcy9maXBzLmMJMjAxMS0wNi0wOCAxNzozMTozNS4wMDAwMDAwMDAgKzAyMDAKLUBA IC01NSw2ICs1NSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvaG1hYy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2VuZ2luZS5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8bGltaXRzLmg+ Ci0gI2luY2x1ZGUgPGRsZmNuLmg+Ci1AQCAtNDQ0LDE0ICs0NDUsMTcgQEAgaW50IEZJUFNfbW9k ZV9zZXQoaW50IG9ub2ZmKQotIAkgICAgfQotIAotIAlpZihGSVBTX3NlbGZ0ZXN0KCkpCi0tCSAg ICBmaXBzX3NldF9tb2RlKDEpOwotLQllbHNlCi0gCSAgICB7Ci0tCSAgICBmaXBzX3NlbGZ0ZXN0 X2ZhaWwgPSAxOwotLQkgICAgcmV0ID0gMDsKLS0JICAgIGdvdG8gZW5kOwotKwkgICAgRU5HSU5F X2xvYWRfYWVzbmkoKTsKLSsJICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2FlcygpKQotKwkJewotKwkJ Zmlwc19zZXRfbW9kZSgxKTsKLSsJCXJldCA9IDE7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSAJICAg IH0KLS0JcmV0ID0gMTsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJcmV0ID0gMDsKLSAJ Z290byBlbmQ7Ci0gCX0KLSAgICAgZmlwc19zZXRfbW9kZSgwKTsKCmRpZmYgLS1naXQgYS9vcGVu c3NsLTEuMC4wLW5hbWUtaGFzaC5wYXRjaCBiL29wZW5zc2wtMS4wLjAtbmFtZS1oYXNoLnBhdGNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDk4YzBhLi4wMDAwMDAwCi0tLSBhL29w ZW5zc2wtMS4wLjAtbmFtZS1oYXNoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBA QAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8veDUwOS94NTA5X2NtcC5jLm5hbWUtaGFz aCBvcGVuc3NsLTEuMC4wL2NyeXB0by94NTA5L3g1MDlfY21wLmMKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by94NTA5L3g1MDlfY21wLmMubmFtZS1oYXNoCTIwMTAtMDEtMTIgMTg6Mjc6MTAuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8veDUwOS94NTA5X2NtcC5jCTIw MTAtMDQtMDYgMTY6NDQ6NTIuMDAwMDAwMDAwICswMjAwCi1AQCAtMjM2LDEwICsyMzYsMTcgQEAg dW5zaWduZWQgbG9uZyBYNTA5X05BTUVfaGFzaF9vbGQoWDUwOV9OQQotIAl7Ci0gCXVuc2lnbmVk IGxvbmcgcmV0PTA7Ci0gCXVuc2lnbmVkIGNoYXIgbWRbMTZdOwotKwlFVlBfTURfQ1RYIGN0eDsg Ci0gCi0gCS8qIE1ha2Ugc3VyZSBYNTA5X05BTUUgc3RydWN0dXJlIGNvbnRhaW5zIHZhbGlkIGNh Y2hlZCBlbmNvZGluZyAqLwotIAlpMmRfWDUwOV9OQU1FKHgsTlVMTCk7Ci0tCUVWUF9EaWdlc3Qo eC0+Ynl0ZXMtPmRhdGEsIHgtPmJ5dGVzLT5sZW5ndGgsIG1kLCBOVUxMLCBFVlBfbWQ1KCksIE5V TEwpOwotKwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdz KCZjdHgsRVZQX01EX0NUWF9GTEFHX09ORVNIT1QgfCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpOwotKyAgICAgICAgRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgRVZQX21kNSgpLCBOVUxM KQotKwkJJiYgRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCB4LT5ieXRlcy0+ZGF0YSwgeC0+Ynl0ZXMt Pmxlbmd0aCkKLSsJCSYmIEVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LCBtZCwgTlVMTCk7Ci0rCUVW UF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSAKLSAJcmV0PSgJKCh1bnNpZ25lZCBsb25nKW1kWzBd ICAgICApfCgodW5zaWduZWQgbG9uZyltZFsxXTw8OEwpfAotIAkJKCh1bnNpZ25lZCBsb25nKW1k WzJdPDwxNkwpfCgodW5zaWduZWQgbG9uZyltZFszXTw8MjRMKQoKZGlmZiAtLWdpdCBhL29wZW5z c2wtMS4wLjAtc2hhMnRlc3QucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLXNoYTJ0ZXN0LnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGJkOWU1Li4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjAtc2hhMnRlc3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuYy5zaGEydGVzdCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Zmlwcy5jLnNoYTJ0ZXN0CTIwMTEtMDktMTIgMTU6MDc6NDIuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmMJMjAxMS0wOS0yNiAxMTowMzoxNy4wMDAw MDAwMDAgKzAyMDAKLUBAIC0xNjMsNiArMTYzLDcgQEAgaW50IEZJUFNfc2VsZnRlc3QoKQotICAg ICB7Ci0gCi0gICAgIHJldHVybiBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKwkmJiBGSVBTX3NlbGZ0 ZXN0X3NoYTIoKQotIAkmJiBGSVBTX3NlbGZ0ZXN0X2htYWMoKQotIAkmJiBGSVBTX3NlbGZ0ZXN0 X2FlcygpCi0gCSYmIEZJUFNfc2VsZnRlc3RfZGVzKCkKLUBAIC0zMjMsNiArMzI0LDggQEAgRklQ U0NIRUNLX3ZlcmlmeShjb25zdCBjaGFyICpsaWJuYW1lLCBjbwotIAkJcmV0dXJuIDA7Ci0gCi0g CWhtYWNwYXRoID0gbWFrZV9obWFjX3BhdGgocGF0aCk7Ci0rCWlmIChobWFjcGF0aCA9PSBOVUxM KQotKwkJcmV0dXJuIDA7Ci0gCi0gCWhmID0gZm9wZW4oaG1hY3BhdGgsICJyIik7Ci0gCWlmICho ZiA9PSBOVUxMKSB7Ci1AQCAtNjI3LDYgKzYzMCw0NSBAQCBpbnQgZmlwc19jaXBoZXJfdGVzdChF VlBfQ0lQSEVSX0NUWCAqY3R4Ci0gCXJldHVybiAxOwotIAl9Ci0gCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgbXNnX3NoYTI1NltdID0geyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUx LCAweGFlLCAweDFmLCAweDMwLAotKwkJCQkJICAgIDB4ZmMgfTsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkaWdfc2hhMjU2W10gPSB7IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcs IDB4OTEsIDB4NjgsIDB4NWIsCi0rCQkJCQkgICAgMHg5ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhi YiwgMHg3NSwgMHhiZiwgMHgwMSwKLSsJCQkJCSAgICAweDE3LCAweDBjLCAweDg0LCAweDAwLCAw eDAxLCAweDdhLCAweDk0LCAweDgzLAotKwkJCQkJICAgIDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQs IDB4NGIsIDB4NjksIDB4ODgsIDB4OGEgfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBtc2dfc2hhNTEyW10gPSB7IDB4MzcsIDB4ZDEsIDB4MzUsIDB4OWQsIDB4MTgsIDB4NDEsIDB4 ZTksIDB4YjcsCi0rCQkJCQkgICAgMHg2ZCwgMHg5YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywg MHhiZCB9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGE1MTJbXSA9IHsgMHgx MSwgMHgxMywgMHhjNCwgMHgxOSwgMHhlZCwgMHgyYiwgMHgxZCwgMHgxNiwKLSsJCQkJCSAgICAw eDExLCAweGViLCAweDliLCAweGJlLCAweGYwLCAweDdmLCAweGNmLCAweDQ0LAotKwkJCQkJICAg IDB4OGIsIDB4ZDcsIDB4NTcsIDB4YmQsIDB4OGQsIDB4YTksIDB4MjUsIDB4YjAsCi0rCQkJCQkg ICAgMHg0NywgMHgyNSwgMHhkNiwgMHg2YywgMHg5YSwgMHg1NCwgMHg3ZiwgMHg4ZiwKLSsJCQkJ CSAgICAweDBiLCAweDUzLCAweDFhLCAweDEwLCAweDY4LCAweDMyLCAweDAzLCAweDM4LAotKwkJ CQkJICAgIDB4ODIsIDB4YzQsIDB4ODcsIDB4YzQsIDB4ZWEsIDB4MGUsIDB4ZDEsIDB4MDQsCi0r CQkJCQkgICAgMHhhOSwgMHg5OCwgMHhjMSwgMHgwNSwgMHhhMywgMHhmMywgMHhmOCwgMHhiMSwK LSsJCQkJCSAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAweDdlLCAweGVlLCAweDNkLCAweDQz IH07Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKQotKwl7Ci0rCXVuc2lnbmVkIGNo YXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOwotKwotKwlFVlBfRGlnZXN0KG1zZ19zaGEyNTYs IHNpemVvZihtc2dfc2hhMjU2KSwgbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCk7Ci0rCWlm KG1lbWNtcChkaWdfc2hhMjU2LCBtZCwgc2l6ZW9mKGRpZ19zaGEyNTYpKSkKLSsJCXsKLSsJCUZJ UFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJ cmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCUVWUF9EaWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19z aGE1MTIpLCBtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKTsKLSsJaWYobWVtY21wKGRpZ19z aGE1MTIsIG1kLCBzaXplb2YoZGlnX3NoYTUxMikpKQotKwkJewotKwkJRklQU2VycihGSVBTX0Zf RklQU19NT0RFX1NFVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJ CX0KLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSAjaWYgMAotIC8qIFRoZSBwdXJwb3NlIG9mIHRo aXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCi0g ICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVpZXQKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwcy5oLnNoYTJ0ZXN0IG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvZmlwcy5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBz Lmguc2hhMnRlc3QJMjAxMS0wOS0xMiAxNTowNzo0Mi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuaAkyMDExLTA5LTI2IDExOjAwOjU1LjAwMDAwMDAw MCArMDIwMAotQEAgLTcyLDYgKzcyLDcgQEAgaW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQp OwotIHZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKTsKLSB2b2lkIEZJUFNfY29ycnVwdF9z aGExKHZvaWQpOwotIGludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0raW50IEZJUFNfc2Vs ZnRlc3Rfc2hhMih2b2lkKTsKLSB2b2lkIEZJUFNfY29ycnVwdF9hZXModm9pZCk7Ci0gaW50IEZJ UFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotIHZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKCmRp ZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wYS1maXBzbW9kZS5wYXRjaCBiL29wZW5zc2wtMS4wLjBh LWZpcHNtb2RlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTJlNzRlLi4w MDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjBhLWZpcHNtb2RlLnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsMjcyICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9lbmdpbmUv ZW5nX2FsbC5jLmZpcHNtb2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5j Ci0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwc21vZGUJMjAw OS0wNy0wMSAxNjo1NTo1OC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZW5naW5lL2VuZ19hbGwuYwkyMDEwLTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAot QEAgLTU4LDkgKzU4LDIzIEBACi0gCi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUg ImVuZ19pbnQuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotIAotIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQp Ci0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0r CWlmIChGSVBTX21vZGUoKSkgewotKwkJLyogV2UgYWxsb3cgbG9hZGluZyBkeW5hbWljIGVuZ2lu ZSBhcyBhIHRoaXJkIHBhcnR5Ci0rCQkgICBlbmdpbmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQu Ci0rCQkgICBVc2VyIGlzIGRpc2FsbG93ZWQgdG8gbG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMK LSsJCSAgIGJ5IHNlY3VyaXR5IHBvbGljeS4gKi8KLSsJCUVOR0lORV9sb2FkX2R5bmFtaWMoKTsK LSsJCXJldHVybjsKLSsJfQotKyNlbmRpZgotICNpZiAwCi0gCS8qIFRoZXJlJ3Mgbm8gbG9uZ2Vy IGFueSBuZWVkIGZvciBhbiAib3BlbnNzbCIgRU5HSU5FIHVubGVzcywgb25lIGRheSwKLSAJICog aXQgaXMgdGhlICpvbmx5KiB3YXkgZm9yIHN0YW5kYXJkIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25z IHRvIGJlIGJlCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZp cHNtb2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHNtb2RlCTIwMDktMTItMjUgMTU6MTI6MjQuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDEw LTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAotQEAgLTY1LDYgKzY1LDExIEBACi0gdm9p ZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotIAl7Ci0gCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZighRklQU19tb2RlKCkpIAotKwkJ ewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2FkZF9jaXBoZXIoRVZQ X2Rlc19jZmIoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKLUBAIC0yMjEs NCArMjI2LDYxIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKLSAJRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiQ0FNRUxMSUEyNTYiKTsKLSAJRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKLSAj ZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsjaWZuZGVm IE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGVfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkp OwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19l ZGUzX2NiYywiREVTMyIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMs ImRlczMiKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7Ci0rCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIE9QRU5TU0xfTk9f QUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2VjYigpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIo KSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29m YigpKTsKLSsjaWYgMAotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7Ci0rI2Vu ZGlmCi0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKLSsJ RVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsImFlczEyOCIpOwotKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTky X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiKCkpOwotKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5 Ml9jZmI4KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9vZmIoKSk7Ci0rI2lmIDAK LSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOwotKyNlbmRpZgotKwlFVlBfYWRk X2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiQUVTMTkyIik7Ci0rCUVWUF9hZGRfY2lwaGVy X2FsaWFzKFNOX2Flc18xOTJfY2JjLCJhZXMxOTIiKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18yNTZfZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7Ci0rCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18yNTZfY2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOwotKyNpZiAwCi0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsjZW5kaWYKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMo U05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNf MjU2X2NiYywiYWVzMjU2Iik7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwc21vZGUgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9jX2FsbGQuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19h bGxkLmMuZmlwc21vZGUJMjAwOS0wNy0wOCAxMDo1MDo1My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2NfYWxsZC5jCTIwMTAtMDYtMDQgMTM6MzI6MTMuMDAw MDAwMDAwICswMjAwCi1AQCAtNjQsNiArNjQsMTEgQEAKLSAKLSB2b2lkIE9wZW5TU0xfYWRkX2Fs bF9kaWdlc3RzKHZvaWQpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5p dF9saWJyYXJ5KCk7Ci0rCWlmICghRklQU19tb2RlKCkpCi0rCQl7Ci0rI2VuZGlmCi0gI2lmbmRl ZiBPUEVOU1NMX05PX01ENAotIAlFVlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOwotICNlbmRpZgot QEAgLTExMSw0ICsxMTYsMzIgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQot ICNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX3doaXJs cG9vbCgpKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBMSkKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0X2Fs aWFzKFNOX3NoYTEsInNzbDMtc2hhMSIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGEx V2l0aFJTQUVuY3J5cHRpb24sU05fc2hhMVdpdGhSU0EpOwotKyNpZm5kZWYgT1BFTlNTTF9OT19E U0EKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlh cyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FX aXRoU0hBMSwiZHNzMSIpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotKwlF VlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7Ci0rI2VuZGlmCi0rI2VuZGlmCi0rI2lmbmRlZiBP UEVOU1NMX05PX1NIQTI1NgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOwotKwlFVlBf YWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19T SEE1MTIKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKLSsJRVZQX2FkZF9kaWdlc3Qo RVZQX3NoYTUxMigpKTsKLSsjZW5kaWYKLSsJCX0KLSsjZW5kaWYKLSAJfQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL29faW5pdC5jLmZpcHNtb2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vX2luaXQuYy5maXBzbW9kZQky MDEwLTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9vX2luaXQuYwkyMDEwLTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAotQEAgLTU5 LDYgKzU5LDQzIEBACi0gI2luY2x1ZGUgPGVfb3MuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKyNp bmNsdWRlIDxzeXMvc3RhdC5oPgotKyNpbmNsdWRlIDxmY250bC5oPgotKyNpbmNsdWRlIDx1bmlz dGQuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotKyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIv cHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCIKLSsKLStzdGF0aWMgdm9pZCBpbml0X2ZpcHNf bW9kZSh2b2lkKQotKwl7Ci0rCWNoYXIgYnVmWzJdID0gIjAiOwotKwlpbnQgZmQ7Ci0rCQotKwlp ZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCi0rCQl7Ci0rCQli dWZbMF0gPSAnMSc7Ci0rCQl9Ci0rCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRD SF9GSUxFLCBPX1JET05MWSkpID49IDApCi0rCQl7Ci0rCQl3aGlsZSAocmVhZChmZCwgYnVmLCBz aXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLSsJCWNsb3NlKGZkKTsKLSsJCX0K LSsJLyogRmFpbHVyZSByZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVz dCBub3QKLSsJICogc3dpdGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28g bWFueSB0aGluZ3MKLSsJICogb3RoZXJ3aXNlLiAKLSsJICovCi0rCQotKwlpZiAoYnVmWzBdID09 ICcxJykKLSsJCXsKLSsJCUZJUFNfbW9kZV9zZXQoMSk7Ci0rCQl9Ci0rCX0KLSsjZW5kaWYKLSsK LSAvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRp b25zLgotICAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKLSAgKi8KLUBAIC03 Miw2ICsxMDksNyBAQCB2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0gI2lmZGVmIENS WVBUT19NREVCVUcKLSAJCUNSWVBUT19tYWxsb2NfZGVidWdfaW5pdCgpOwotICNlbmRpZgotKwkJ aW5pdF9maXBzX21vZGUoKTsKLSAJCWRvbmUgPSAxOwotIAkJfQotICNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9hbGdzLmMuZmlwc21vZGUgb3BlbnNzbC0xLjAuMGEvc3Ns L3NzbF9hbGdzLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsX2FsZ3MuYy5maXBzbW9kZQky MDEwLTA0LTA3IDE1OjE4OjMwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL3Nz bC9zc2xfYWxncy5jCTIwMTAtMDYtMDQgMTM6MzI6NDguMDAwMDAwMDAwICswMjAwCi1AQCAtNjQs NiArNjQsMTIgQEAKLSBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotIAl7Ci0gCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoIUZJUFNfbW9k ZSgpKQotKwkJewotKyNlbmRpZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19jYmMoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19j YmMoKSk7Ci1AQCAtMTI3LDYgKzEzMyw0OCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQot IAlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOwotIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkp OwotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNp Zm5kZWYgT1BFTlNTTF9OT19ERVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygp KTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOwot KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBP UEVOU1NMX05PX01ENQotKwkvKiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMg TUFDICovCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0X2Fs aWFzKFNOX21kNSwic3NsMi1tZDUiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJz c2wzLW1kNSIpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLSsJRVZQX2FkZF9k aWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3No YTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBP UEVOU1NMX05PX1NIQTI1NgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOwotKwlFVlBf YWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19T SEE1MTIKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKLSsJRVZQX2FkZF9kaWdlc3Qo RVZQX3NoYTUxMigpKTsKLSsjZW5kaWYKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYm ICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsg LyogRFNBIHdpdGggc2hhMSAqLwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hB MSxTTl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNI QTEsIkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEi KTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9kaWdlc3Qo RVZQX2VjZHNhKCkpOwotKyNlbmRpZgotKwkJfQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9O T19DT01QCi0gCS8qIFRoaXMgd2lsbCBpbml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lv biBhbGdvcml0aG1zLgotIAkgICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgYSBTVEFDS19PRihTU0xf Q09NUCksIGJ1dCB0aGF0IGNhbgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjBhLW1hbmZpeC5w YXRjaCBiL29wZW5zc2wtMS4wLjBhLW1hbmZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMGQzZGMwNC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wYS1tYW5maXgucGF0 Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w YS9kb2MvYXBwcy9vcGVuc3NsLnBvZC5tYW5maXggb3BlbnNzbC0xLjAuMGEvZG9jL2FwcHMvb3Bl bnNzbC5wb2QKLS0tLSBvcGVuc3NsLTEuMC4wYS9kb2MvYXBwcy9vcGVuc3NsLnBvZC5tYW5maXgJ MjAxMC0wMS0yMSAxOTo0NjoyOC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9k b2MvYXBwcy9vcGVuc3NsLnBvZAkyMDEwLTA2LTMwIDE0OjI0OjUwLjAwMDAwMDAwMCArMDIwMAot QEAgLTI4Nyw4ICsyODcsNiBAQCBTSEEgRGlnZXN0Ci0gCi0gU0hBLTEgRGlnZXN0Ci0gCi0tPWJh Y2sKLS0KLSA9aXRlbSBCPHNoYTIyND4KLSAKLSBTSEEtMjI0IERpZ2VzdAotQEAgLTMwNSw2ICsz MDMsOCBAQCBTSEEtMzg0IERpZ2VzdAotIAotIFNIQS01MTIgRGlnZXN0Ci0gCi0rPWJhY2sKLSsK LSA9aGVhZDIgRU5DT0RJTkcgQU5EIENJUEhFUiBDT01NQU5EUwotIAotID1vdmVyIDEwCgpkaWZm IC0tZ2l0IGEvb3BlbnNzbC0xLjAuMGItYWVzbmkucGF0Y2ggYi9vcGVuc3NsLTEuMC4wYi1hZXNu aS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRkYTZiZi4uMDAwMDAwMAot LS0gYS9vcGVuc3NsLTEuMC4wYi1hZXNuaS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzODgg KzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGIvQ29uZmlndXJlLmFlc25pIG9wZW5zc2wt MS4wLjBiL0NvbmZpZ3VyZQotLS0tIG9wZW5zc2wtMS4wLjBiL0NvbmZpZ3VyZS5hZXNuaQkyMDEw LTExLTE2IDE3OjMzOjIyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBiL0NvbmZp Z3VyZQkyMDEwLTExLTE2IDE3OjM1OjE1LjAwMDAwMDAwMCArMDEwMAotQEAgLTEyMywxMSArMTIz LDExIEBAIG15ICR0bGliPSItbG5zbCAtbHNvY2tldCI7Ci0gbXkgJGJpdHMxPSJUSElSVFlfVFdP X0JJVCAiOwotIG15ICRiaXRzMj0iU0lYVFlfRk9VUl9CSVQgIjsKLSAKLS1teSAkeDg2X2FzbT0i eDg2Y3B1aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBjcnlwdDU4 Ni5vOmFlcy01ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYtNTg2Lm8g c2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2Lm86d3Bf YmxvY2subyB3cC1tbXgubzpjbWxsLXg4Ni5vIjsKLStteSAkeDg2X2FzbT0ieDg2Y3B1aWQubzpi bi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBjcnlwdDU4Ni5vOmFlcy01ODYu byBhZXNuaS14ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYtNTg2Lm8g c2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2Lm86d3Bf YmxvY2subyB3cC1tbXgubzpjbWxsLXg4Ni5vIjsKLSAKLSBteSAkeDg2X2VsZl9hc209IiR4ODZf YXNtOmVsZiI7Ci0gCi0tbXkgJHg4Nl82NF9hc209Ing4Nl82NGNwdWlkLm86eDg2XzY0LWdjYy5v IHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8g c2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0 Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubyI7Ci0rbXkgJHg4Nl82NF9hc209Ing4Nl82NGNw dWlkLm86eDg2XzY0LWdjYy5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubyBhZXNuaS14ODZf NjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14 ODZfNjQubzo6cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21p c2MubyI7Ci0gbXkgJGlhNjRfYXNtPSJpYTY0Y3B1aWQubzpibi1pYTY0Lm86OmFlc19jb3JlLm8g YWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQu byBzaGE1MTItaWE2NC5vOjpyYzQtaWE2NC5vIHJjNF9za2V5Lm86Ojo6OnZvaWQiOwotIG15ICRz cGFyY3Y5X2FzbT0ic3BhcmN2OWNhcC5vIHNwYXJjY3B1aWQubzpibi1zcGFyY3Y5Lm8gc3BhcmN2 OS1tb250Lm8gc3BhcmN2OWEtbW9udC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOmFlc19j b3JlLm8gYWVzX2NiYy5vIGFlcy1zcGFyY3Y5Lm86OjpzaGExLXNwYXJjdjkubyBzaGEyNTYtc3Bh cmN2OS5vIHNoYTUxMi1zcGFyY3Y5Lm86Ojo6Ojo6dm9pZCI7Ci0gbXkgJHNwYXJjdjhfYXNtPSI6 c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6Ojp2b2lkIjsKLUBA IC00OTEsNyArNDkxLDcgQEAgbXkgJXRhYmxlPSgKLSAjCi0gIyBXaW42NCB0YXJnZXRzLCBXSU42 NEkgZGVub3RlcyBJQS02NCBhbmQgV0lONjRBIC0gQU1ENjQKLSAiVkMtV0lONjRJIiwiY2w6LVcz IC1HczAgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FO RF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19E RVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVY UE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBh ZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlh NjQubzo6Ojo6OjppYXM6d2luMzIiLAotLSJWQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLW5v bG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VO RElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJ TjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19G Tjp4ODZfNjRjcHVpZC5vOmJuX2FzbS5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubzo6bWQ1 LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6 cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubzphdXRv OndpbjMyIiwKLSsiVkMtV0lONjRBIiwiY2w6LVczIC1HczAgLUd5IC1ub2xvZ28gLURPUEVOU1NM X1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RF IC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEE6OlNJWFRZX0ZP VVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46eDg2XzY0Y3B1aWQu bzpibl9hc20ubyB4ODZfNjQtbW9udC5vOjphZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0Lm86Om1k NS14ODZfNjQubzpzaGExLXg4Nl82NC5vIHNoYTI1Ni14ODZfNjQubyBzaGE1MTIteDg2XzY0Lm86 OnJjNC14ODZfNjQubzo6OndwLXg4Nl82NC5vOmNtbGwteDg2XzY0Lm8gY21sbF9taXNjLm86YXV0 bzp3aW4zMiIsCi0gImRlYnVnLVZDLVdJTjY0SSIsImNsOi1XMyAtR3MwIC1HeSAtWmkgLW5vbG9n byAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElB TiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0 STo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjpp YTY0Y3B1aWQubzppYTY0Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1p YTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjo6Ojo6Omlhczp3 aW4zMiIsCi0gImRlYnVnLVZDLVdJTjY0QSIsImNsOi1XMyAtR3MwIC1HeSAtWmkgLW5vbG9nbyAt RE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAt RFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6 U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjp4ODZf NjRjcHVpZC5vOmJuX2FzbS5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubzo6bWQ1LXg4Nl82 NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4 Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubzphdXRvOndpbjMy IiwKLSAjIHg4NiBXaW4zMiB0YXJnZXQgZGVmYXVsdHMgdG8gQU5TSSBBUEksIGlmIHlvdSB3YW50 IFVOSUNPREUsIGNvbXBsZW1lbnQKLUBAIC0xNDE5LDYgKzE0MTksNyBAQCBpZiAoJHJtZDE2MF9v YmogPX4gL1wubyQvKQotIGlmICgkYWVzX29iaiA9fiAvXC5vJC8pCi0gCXsKLSAJJGNmbGFncy49 IiAtREFFU19BU00iOwotKwkkYWVzX29iaiA9fiBzL1xzKmFlc25pXC14ODZcLm8vLyBpZiAoJG5v X3NzZTIpOwotIAl9Ci0gZWxzZQl7Ci0gCSRhZXNfb2JqPSRhZXNfZW5jOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGIvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2LnBsLmFlc25pIG9wZW5zc2wtMS4w LjBiL2NyeXB0by9hZXMvYXNtL2Flc25pLXg4Ni5wbAotLS0tIG9wZW5zc2wtMS4wLjBiL2NyeXB0 by9hZXMvYXNtL2Flc25pLXg4Ni5wbC5hZXNuaQkyMDEwLTExLTE2IDE3OjMzOjIzLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9hZXMvYXNtL2Flc25pLXg4Ni5wbAky MDEwLTExLTE2IDE3OjMzOjIzLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw3NjUgQEAKLSsj IS91c3IvYmluL2VudiBwZXJsCi0rCi0rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyMgV3JpdHRlbiBieSBBbmR5 IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCi0rIyBwcm9q ZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wg YW5kCi0rIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWlu IGl0LiBGb3IgZnVydGhlcgotKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+ YXBwcm8vY3J5cHRvZ2Ftcy8uCi0rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyMKLSsjIFRoaXMgbW9kdWxlIGlt cGxlbWVudHMgc3VwcG9ydCBmb3IgSW50ZWwgQUVTLU5JIGV4dGVuc2lvbi4gSW4KLSsjIE9wZW5T U0wgY29udGV4dCBpdCdzIHVzZWQgd2l0aCBJbnRlbCBlbmdpbmUsIGJ1dCBjYW4gYWxzbyBiZSB1 c2VkIGFzCi0rIyBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBjcnlwdG8vYWVzL2FzbS9hZXMtNTg2 LnBsIFtzZWUgYmVsb3cgZm9yCi0rIyBkZXRhaWxzXS4KLSsKLSskUFJFRklYPSJhZXNuaSI7CSMg aWYgJFBSRUZJWCBpcyBzZXQgdG8gIkFFUyIsIHRoZSBzY3JpcHQKLSsJCQkjIGdlbmVyYXRlcyBk cm9wLWluIHJlcGxhY2VtZW50IGZvcgotKwkJCSMgY3J5cHRvL2Flcy9hc20vYWVzLTU4Ni5wbDot KQotKwotKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7Ci0rcHVzaChASU5D LCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7Ci0rcmVxdWlyZSAieDg2YXNtLnBsIjsK LSsKLSsmYXNtX2luaXQoJEFSR1ZbMF0sJDApOwotKwotKyRtb3Zla2V5ID0gZXZhbCgkUlJFRklY IGVxICJhc2VuaSIgPyAiKm1vdmFwcyIgOiAiKm1vdnVwcyIpOwotKwotKyRsZW49ImVheCI7Ci0r JHJvdW5kcz0iZWN4IjsKLSska2V5PSJlZHgiOwotKyRpbnA9ImVzaSI7Ci0rJG91dD0iZWRpIjsK LSskcm91bmRzXz0iZWJ4IjsJIyBiYWNrdXAgY29weSBmb3IgJHJvdW5kcwotKyRrZXlfPSJlYnAi OwkjIGJhY2t1cCBjb3B5IGZvciAka2V5Ci0rCi0rJGlub3V0MD0ieG1tMCI7Ci0rJGlub3V0MT0i eG1tMSI7Ci0rJGlub3V0Mj0ieG1tMiI7Ci0rJHJuZGtleTA9InhtbTMiOwotKyRybmRrZXkxPSJ4 bW00IjsKLSskaXZlYz0ieG1tNSI7Ci0rJGluMD0ieG1tNiI7Ci0rJGluMT0ieG1tNyI7CSRpbm91 dDM9InhtbTciOwotKwotKyMgSW5saW5lIHZlcnNpb24gb2YgaW50ZXJuYWwgYWVzbmlfW2VufGRl XWNyeXB0MQotK3N1YiBhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxCi0reyBteSAkcD1zaGlmdDsKLSsK LSsgICAgJiRtb3Zla2V5CQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKLSsgICAgJiRtb3Zla2V5 CQkoJHJuZGtleTEsJlFXUCgxNiwka2V5KSk7Ci0rICAgICZsZWEJCSgka2V5LCZEV1AoMzIsJGtl eSkpOwotKyAgICAmcHhvcgkJKCRpbm91dDAsJHJuZGtleTApOwotKyAgICAmc2V0X2xhYmVsKCIk e3B9MV9sb29wIik7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKLSsJJmRl YwkJKCRyb3VuZHMpOwotKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMCwka2V5KSk7Ci0rCSZs ZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOwotKyAgICAmam56CQkoJmxhYmVsKCIke3B9MV9sb29w IikpOwotKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0MCwkcm5ka2V5MSkiOwotK30KLSsK LStzdWIgYWVzbmlfZ2VuZXJhdGUxCSMgZnVsbHkgdW5yb2xsZWQgbG9vcAotK3sgbXkgJHA9c2hp ZnQ7Ci0rCi0rICAgICZmdW5jdGlvbl9iZWdpbl9CKCJfYWVzbmlfJHtwfXJ5cHQxIik7Ci0rCSYk bW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKLSsJJiRtb3Zla2V5CSgkcm5ka2V5MSwm UVdQKDB4MTAsJGtleSkpOwotKwkmY21wCQkoJHJvdW5kcywxMSk7Ci0rCSZweG9yCQkoJGlub3V0 MCwkcm5ka2V5MCk7Ci0rCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgweDIwLCRrZXkpKTsKLSsJ JmxlYQkJKCRrZXksJkRXUCgweDMwLCRrZXkpKTsKLSsJJmpiCQkoJmxhYmVsKCIke3B9MTI4Iikp OwotKwkmbGVhCQkoJGtleSwmRFdQKDB4MjAsJGtleSkpOwotKwkmamUJCSgmbGFiZWwoIiR7cH0x OTIiKSk7Ci0rCSZsZWEJCSgka2V5LCZEV1AoMHgyMCwka2V5KSk7Ci0rCWV2YWwiJmFlcyR7cH0J KCRpbm91dDAsJHJuZGtleTEpIjsKLSsJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKC0weDQwLCRr ZXkpKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MCkiOwotKwkmJG1vdmVrZXkJ KCRybmRrZXkwLCZRV1AoLTB4MzAsJGtleSkpOwotKyAgICAmc2V0X2xhYmVsKCIke3B9MTkyIik7 Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKLSsJJiRtb3Zla2V5CSgkcm5k a2V5MSwmUVdQKC0weDIwLCRrZXkpKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5 MCkiOwotKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoLTB4MTAsJGtleSkpOwotKyAgICAmc2V0 X2xhYmVsKCIke3B9MTI4Iik7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsK LSsJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDAsJGtleSkpOwotKwlldmFsIiZhZXMke3B9CSgk aW5vdXQwLCRybmRrZXkwKSI7Ci0rCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgweDEwLCRrZXkp KTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOwotKwkmJG1vdmVrZXkJKCRy bmRrZXkxLCZRV1AoMHgyMCwka2V5KSk7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtl eTApIjsKLSsJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDB4MzAsJGtleSkpOwotKwlldmFsIiZh ZXMke3B9CSgkaW5vdXQwLCRybmRrZXkxKSI7Ci0rCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgw eDQwLCRrZXkpKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MCkiOwotKwkmJG1v dmVrZXkJKCRybmRrZXkwLCZRV1AoMHg1MCwka2V5KSk7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91 dDAsJHJuZGtleTEpIjsKLSsJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDB4NjAsJGtleSkpOwot KwlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkwKSI7Ci0rCSYkbW92ZWtleQkoJHJuZGtl eTAsJlFXUCgweDcwLCRrZXkpKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSki OwotKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0MCwkcm5ka2V5MCkiOwotKyAgICAmcmV0 KCk7Ci0rICAgICZmdW5jdGlvbl9lbmRfQigiX2Flc25pXyR7cH1yeXB0MSIpOwotK30KLSsKLSsj IHZvaWQgJFBSRUZJWF9lbmNyeXB0IChjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0LGNvbnN0IEFF U19LRVkgKmtleSk7Ci0rIyAmYWVzbmlfZ2VuZXJhdGUxKCJkZWMiKTsKLSsmZnVuY3Rpb25fYmVn aW5fQigiJHtQUkVGSVh9X2VuY3J5cHQiKTsKLSsJJm1vdgkoImVheCIsJndwYXJhbSgwKSk7Ci0r CSZtb3YJKCRrZXksJndwYXJhbSgyKSk7Ci0rCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCJlYXgi KSk7Ci0rCSZtb3YJKCRyb3VuZHMsJkRXUCgyNDAsJGtleSkpOwotKwkmbW92CSgiZWF4Iiwmd3Bh cmFtKDEpKTsKLSsJJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImVuYyIpOwkjICZjYWxsCSgiX2Fl c25pX2VuY3J5cHQxIik7Ci0rCSZtb3Z1cHMJKCZRV1AoMCwiZWF4IiksJGlub3V0MCk7Ci0rCSZy ZXQJKCk7Ci0rJmZ1bmN0aW9uX2VuZF9CKCIke1BSRUZJWH1fZW5jcnlwdCIpOwotKwotKyMgdm9p ZCAkUFJFRklYX2RlY3J5cHQgKGNvbnN0IHZvaWQgKmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tF WSAqa2V5KTsKLSsjICZhZXNuaV9nZW5lcmF0ZTEoImRlYyIpOwotKyZmdW5jdGlvbl9iZWdpbl9C KCIke1BSRUZJWH1fZGVjcnlwdCIpOwotKwkmbW92CSgiZWF4Iiwmd3BhcmFtKDApKTsKLSsJJm1v dgkoJGtleSwmd3BhcmFtKDIpKTsKLSsJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsImVheCIpKTsK LSsJJm1vdgkoJHJvdW5kcywmRFdQKDI0MCwka2V5KSk7Ci0rCSZtb3YJKCJlYXgiLCZ3cGFyYW0o MSkpOwotKwkmYWVzbmlfaW5saW5lX2dlbmVyYXRlMSgiZGVjIik7CSMgJmNhbGwJKCJfYWVzbmlf ZGVjcnlwdDEiKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCJlYXgiKSwkaW5vdXQwKTsKLSsJJnJldAko KTsKLSsmZnVuY3Rpb25fZW5kX0IoIiR7UFJFRklYfV9kZWNyeXB0Iik7Ci0rDAotKyMgX2Flc25p X1tlbnxkZV1jcnlwdFszNF0gYXJlIHByaXZhdGUgaW50ZXJmYWNlcywgTiBkZW5vdGVzIGludGVy bGVhdmUKLSsjIGZhY3Rvci4gV2h5IDN4IHN1YnJvdXRpbmUgaXMgdXNlZCBpbiBsb29wcz8gRXZl biB0aG91Z2ggYWVzW2VuY3xkZWNdCi0rIyBsYXRlbmN5IGlzIDYsIGl0IHR1cm5lZCBvdXQgdGhh dCBpdCBjYW4gYmUgc2NoZWR1bGVkIG9ubHkgZXZlcnkKLSsjICpzZWNvbmQqIGN5Y2xlLiBUaHVz IDN4IGludGVybGVhdmUgaXMgdGhlIG9uZSBwcm92aWRpbmcgb3B0aW1hbAotKyMgdXRpbGl6YXRp b24sIGkuZS4gd2hlbiBzdWJyb3V0aW5lJ3MgdGhyb3VnaHB1dCBpcyB2aXJ0dWFsbHkgc2FtZSBh cwotKyMgb2Ygbm9uLWludGVybGVhdmVkIHN1YnJvdXRpbmUgW2ZvciBudW1iZXIgb2YgaW5wdXQg YmxvY2tzIHVwIHRvIDNdLgotKyMgVGhpcyBpcyB3aHkgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gaW1w bGVtZW50IDJ4IHN1YnJvdXRpbmUuIEFzIHNvb24KLSsjIGFzL2lmIEludGVsIGltcHJvdmVzIHRo cm91Z2hwdXQgYnkgbWFraW5nIGl0IHBvc3NpYmxlIHRvIHNjaGVkdWxlCi0rIyB0aGUgaW5zdHJ1 Y3Rpb25zIGluIHF1ZXN0aW9uICpldmVyeSogY3ljbGVzIEkgd291bGQgaGF2ZSB0bwotKyMgaW1w bGVtZW50IDZ4IGludGVybGVhdmUgYW5kIHVzZSBpdCBpbiBsb29wLi4uCi0rc3ViIGFlc25pX2dl bmVyYXRlMwotK3sgbXkgJHA9c2hpZnQ7Ci0rCi0rICAgICZmdW5jdGlvbl9iZWdpbl9CKCJfYWVz bmlfJHtwfXJ5cHQzIik7Ci0rCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKLSsJ JnNocgkJKCRyb3VuZHMsMSk7Ci0rCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5KSk7 Ci0rCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleSkpOwotKwkmcHhvcgkJKCRpbm91dDAsJHJuZGtl eTApOwotKwkmcHhvcgkJKCRpbm91dDEsJHJuZGtleTApOwotKwkmcHhvcgkJKCRpbm91dDIsJHJu ZGtleTApOwotKwkmam1wCQkoJmxhYmVsKCIke3B9M19sb29wIikpOwotKyAgICAmc2V0X2xhYmVs KCIke3B9M19sb29wIiwxNik7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsK LSsJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOwotKwlldmFsIiZhZXMke3B9CSgk aW5vdXQxLCRybmRrZXkxKSI7Ci0rCSZkZWMJCSgkcm91bmRzKTsKLSsJZXZhbCImYWVzJHtwfQko JGlub3V0Miwkcm5ka2V5MSkiOwotKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleSkp OwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkwKSI7Ci0rCSZsZWEJCSgka2V5LCZE V1AoMzIsJGtleSkpOwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkwKSI7Ci0rCWV2 YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTApIjsKLSsJJmpuegkJKCZsYWJlbCgiJHtwfTNf bG9vcCIpKTsKLSsgICAgZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOwotKyAgICAm JG1vdmVrZXkJCSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOwotKyAgICBldmFsIiZhZXMke3B9CSgk aW5vdXQxLCRybmRrZXkxKSI7Ci0rICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTEp IjsKLSsgICAgZXZhbCImYWVzJHtwfWxhc3QJKCRpbm91dDAsJHJuZGtleTApIjsKLSsgICAgZXZh bCImYWVzJHtwfWxhc3QJKCRpbm91dDEsJHJuZGtleTApIjsKLSsgICAgZXZhbCImYWVzJHtwfWxh c3QJKCRpbm91dDIsJHJuZGtleTApIjsKLSsgICAgJnJldCgpOwotKyAgICAmZnVuY3Rpb25fZW5k X0IoIl9hZXNuaV8ke3B9cnlwdDMiKTsKLSt9Ci0rCi0rIyA0eCBpbnRlcmxlYXZlIGlzIGltcGxl bWVudGVkIHRvIGltcHJvdmUgc21hbGwgYmxvY2sgcGVyZm9ybWFuY2UsCi0rIyBtb3N0IG5vdGFi bHkgW2FuZCBuYXR1cmFsbHldIDQgYmxvY2sgYnkgfjMwJS4gT25lIGNhbiBhcmd1ZSB0aGF0IG9u ZQotKyMgc2hvdWxkIGhhdmUgaW1wbGVtZW50ZWQgNXggYXMgd2VsbCwgYnV0IGltcHJvdmVtZW50 ICB3b3VsZCBiZSA8MjAlLAotKyMgc28gaXQncyBub3Qgd29ydGggaXQuLi4KLStzdWIgYWVzbmlf Z2VuZXJhdGU0Ci0reyBteSAkcD1zaGlmdDsKLSsKLSsgICAgJmZ1bmN0aW9uX2JlZ2luX0IoIl9h ZXNuaV8ke3B9cnlwdDQiKTsKLSsJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOwot KwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleSkpOwotKwkmc2hyCQkoJHJvdW5kcywx KTsKLSsJJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7Ci0rCSZweG9yCQkoJGlub3V0MCwkcm5k a2V5MCk7Ci0rCSZweG9yCQkoJGlub3V0MSwkcm5ka2V5MCk7Ci0rCSZweG9yCQkoJGlub3V0Miwk cm5ka2V5MCk7Ci0rCSZweG9yCQkoJGlub3V0Mywkcm5ka2V5MCk7Ci0rCSZqbXAJCSgmbGFiZWwo IiR7cH0zX2xvb3AiKSk7Ci0rICAgICZzZXRfbGFiZWwoIiR7cH0zX2xvb3AiLDE2KTsKLSsJZXZh bCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOwotKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZR V1AoMCwka2V5KSk7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTEpIjsKLSsJJmRl YwkJKCRyb3VuZHMpOwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkxKSI7Ci0rCWV2 YWwiJmFlcyR7cH0JKCRpbm91dDMsJHJuZGtleTEpIjsKLSsJJiRtb3Zla2V5CSgkcm5ka2V5MSwm UVdQKDE2LCRrZXkpKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MCkiOwotKwkm bGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MSwkcm5k a2V5MCkiOwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkwKSI7Ci0rCWV2YWwiJmFl cyR7cH0JKCRpbm91dDMsJHJuZGtleTApIjsKLSsJJmpuegkJKCZsYWJlbCgiJHtwfTNfbG9vcCIp KTsKLSsgICAgZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOwotKyAgICAmJG1vdmVr ZXkJCSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOwotKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQx LCRybmRrZXkxKSI7Ci0rICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTEpIjsKLSsg ICAgZXZhbCImYWVzJHtwfQkoJGlub3V0Mywkcm5ka2V5MSkiOwotKyAgICBldmFsIiZhZXMke3B9 bGFzdAkoJGlub3V0MCwkcm5ka2V5MCkiOwotKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0 MSwkcm5ka2V5MCkiOwotKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0Miwkcm5ka2V5MCki OwotKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0Mywkcm5ka2V5MCkiOwotKyAgICAmcmV0 KCk7Ci0rICAgICZmdW5jdGlvbl9lbmRfQigiX2Flc25pXyR7cH1yeXB0NCIpOwotK30KLSsmYWVz bmlfZ2VuZXJhdGUzKCJlbmMiKSBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKTsKLSsmYWVzbmlfZ2Vu ZXJhdGUzKCJkZWMiKTsKLSsmYWVzbmlfZ2VuZXJhdGU0KCJlbmMiKSBpZiAoJFBSRUZJWCBlcSAi YWVzbmkiKTsKLSsmYWVzbmlfZ2VuZXJhdGU0KCJkZWMiKTsKLSsKLStpZiAoJFBSRUZJWCBlcSAi YWVzbmkiKSB7Ci0rIyB2b2lkIGFlc25pX2VjYl9lbmNyeXB0IChjb25zdCB2b2lkICppbiwgdm9p ZCAqb3V0LAotKyMgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3Qg QUVTX0tFWSAqa2V5LAotKyMgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuYyk7Ci0rJmZ1 bmN0aW9uX2JlZ2luKCJhZXNuaV9lY2JfZW5jcnlwdCIpOwotKwkmbW92CSgkaW5wLCZ3cGFyYW0o MCkpOwotKwkmbW92CSgkb3V0LCZ3cGFyYW0oMSkpOwotKwkmbW92CSgkbGVuLCZ3cGFyYW0oMikp OwotKwkmbW92CSgka2V5LCZ3cGFyYW0oMykpOwotKwkmbW92CSgkcm91bmRzLCZ3cGFyYW0oNCkp OwotKwkmY21wCSgkbGVuLDE2KTsKLSsJJmpiCSgmbGFiZWwoImVjYl9yZXQiKSk7Ci0rCSZhbmQJ KCRsZW4sLTE2KTsKLSsJJnRlc3QJKCRyb3VuZHMsJHJvdW5kcykKLSsJJm1vdgkoJHJvdW5kcywm RFdQKDI0MCwka2V5KSk7Ci0rCSZtb3YJKCRrZXlfLCRrZXkpOwkJIyBiYWNrdXAgJGtleQotKwkm bW92CSgkcm91bmRzXywkcm91bmRzKTsJIyBiYWNrdXAgJHJvdW5kcwotKwkmanoJKCZsYWJlbCgi ZWNiX2RlY3J5cHQiKSk7Ci0rCi0rCSZzdWIJKCRsZW4sMHg0MCk7Ci0rCSZqYmUJKCZsYWJlbCgi ZWNiX2VuY190YWlsIikpOwotKwkmam1wCSgmbGFiZWwoImVjYl9lbmNfbG9vcDMiKSk7Ci0rCi0r JnNldF9sYWJlbCgiZWNiX2VuY19sb29wMyIsMTYpOwotKwkmbW92dXBzCSgkaW5vdXQwLCZRV1Ao MCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsKLSsJJm1vdnVw cwkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOwotKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIp OwotKwkmc3ViCSgkbGVuLDB4MzApOwotKwkmbGVhCSgkaW5wLCZEV1AoMHgzMCwkaW5wKSk7Ci0r CSZsZWEJKCRvdXQsJkRXUCgweDMwLCRvdXQpKTsKLSsJJm1vdnVwcwkoJlFXUCgtMHgzMCwkb3V0 KSwkaW5vdXQwKTsKLSsJJm1vdgkoJGtleSwka2V5Xyk7CQkjIHJlc3RvcmUgJGtleQotKwkmbW92 dXBzCSgmUVdQKC0weDIwLCRvdXQpLCRpbm91dDEpOwotKwkmbW92CSgkcm91bmRzLCRyb3VuZHNf KTsJIyByZXN0b3JlICRyb3VuZHMKLSsJJm1vdnVwcwkoJlFXUCgtMHgxMCwkb3V0KSwkaW5vdXQy KTsKLSsJJmphCSgmbGFiZWwoImVjYl9lbmNfbG9vcDMiKSk7Ci0rCi0rJnNldF9sYWJlbCgiZWNi X2VuY190YWlsIik7Ci0rCSZhZGQJKCRsZW4sMHg0MCk7Ci0rCSZqegkoJmxhYmVsKCJlY2JfcmV0 IikpOwotKwotKwkmY21wCSgkbGVuLDB4MTApOwotKwkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwk aW5wKSk7Ci0rCSZqZQkoJmxhYmVsKCJlY2JfZW5jX29uZSIpKTsKLSsJJmNtcAkoJGxlbiwweDIw KTsKLSsJJm1vdnVwcwkoJGlub3V0MSwmUVdQKDB4MTAsJGlucCkpOwotKwkmamUJKCZsYWJlbCgi ZWNiX2VuY190d28iKSk7Ci0rCSZjbXAJKCRsZW4sMHgzMCk7Ci0rCSZtb3Z1cHMJKCRpbm91dDIs JlFXUCgweDIwLCRpbnApKTsKLSsJJmplCSgmbGFiZWwoImVjYl9lbmNfdGhyZWUiKSk7Ci0rCSZt b3Z1cHMJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKLSsJJmNhbGwJKCJfYWVzbmlfZW5jcnlw dDQiKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmbW92dXBzCSgmUVdQ KDB4MTAsJG91dCksJGlub3V0MSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQy KTsKLSsJJm1vdnVwcwkoJlFXUCgweDMwLCRvdXQpLCRpbm91dDMpOwotKwlqbXAJKCZsYWJlbCgi ZWNiX3JldCIpKTsKLSsKLSsmc2V0X2xhYmVsKCJlY2JfZW5jX29uZSIsMTYpOwotKwkmYWVzbmlf aW5saW5lX2dlbmVyYXRlMSgiZW5jIik7CSMgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiKTsKLSsJ Jm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmam1wCSgmbGFiZWwoImVjYl9yZXQi KSk7Ci0rCi0rJnNldF9sYWJlbCgiZWNiX2VuY190d28iLDE2KTsKLSsJJmNhbGwJKCJfYWVzbmlf ZW5jcnlwdDMiKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmbW92dXBz CSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7Ci0rCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsK LSsKLSsmc2V0X2xhYmVsKCJlY2JfZW5jX3RocmVlIiwxNik7Ci0rCSZjYWxsCSgiX2Flc25pX2Vu Y3J5cHQzIik7Ci0rCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKLSsJJm1vdnVwcwko JlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOwotKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCksJGlu b3V0Mik7Ci0rCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsKLSsKLSsmc2V0X2xhYmVsKCJlY2Jf ZGVjcnlwdCIsMTYpOwotKwkmc3ViCSgkbGVuLDB4NDApOwotKwkmamJlCSgmbGFiZWwoImVjYl9k ZWNfdGFpbCIpKTsKLSsJJmptcAkoJmxhYmVsKCJlY2JfZGVjX2xvb3AzIikpOwotKwotKyZzZXRf bGFiZWwoImVjYl9kZWNfbG9vcDMiLDE2KTsKLSsJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsJGlu cCkpOwotKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCRp bm91dDIsJlFXUCgweDIwLCRpbnApKTsKLSsJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDMiKTsKLSsJ JnN1YgkoJGxlbiwweDMwKTsKLSsJJmxlYQkoJGlucCwmRFdQKDB4MzAsJGlucCkpOwotKwkmbGVh CSgkb3V0LCZEV1AoMHgzMCwkb3V0KSk7Ci0rCSZtb3Z1cHMJKCZRV1AoLTB4MzAsJG91dCksJGlu b3V0MCk7Ci0rCSZtb3YJKCRrZXksJGtleV8pOwkJIyByZXN0b3JlICRrZXkKLSsJJm1vdnVwcwko JlFXUCgtMHgyMCwkb3V0KSwkaW5vdXQxKTsKLSsJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CSMg cmVzdG9yZSAkcm91bmRzCi0rCSZtb3Z1cHMJKCZRV1AoLTB4MTAsJG91dCksJGlub3V0Mik7Ci0r CSZqYQkoJmxhYmVsKCJlY2JfZGVjX2xvb3AzIikpOwotKwotKyZzZXRfbGFiZWwoImVjYl9kZWNf dGFpbCIpOwotKwkmYWRkCSgkbGVuLDB4NDApOwotKwkmanoJKCZsYWJlbCgiZWNiX3JldCIpKTsK LSsKLSsJJmNtcAkoJGxlbiwweDEwKTsKLSsJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsJGlucCkp OwotKwkmamUJKCZsYWJlbCgiZWNiX2RlY19vbmUiKSk7Ci0rCSZjbXAJKCRsZW4sMHgyMCk7Ci0r CSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsKLSsJJmplCSgmbGFiZWwoImVjYl9k ZWNfdHdvIikpOwotKwkmY21wCSgkbGVuLDB4MzApOwotKwkmbW92dXBzCSgkaW5vdXQyLCZRV1Ao MHgyMCwkaW5wKSk7Ci0rCSZqZQkoJmxhYmVsKCJlY2JfZGVjX3RocmVlIikpOwotKwkmbW92dXBz CSgkaW5vdXQzLCZRV1AoMHgzMCwkaW5wKSk7Ci0rCSZjYWxsCSgiX2Flc25pX2RlY3J5cHQ0Iik7 Ci0rCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKLSsJJm1vdnVwcwkoJlFXUCgweDEw LCRvdXQpLCRpbm91dDEpOwotKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCksJGlub3V0Mik7Ci0r CSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKLSsJJmptcAkoJmxhYmVsKCJlY2Jf cmV0IikpOwotKwotKyZzZXRfbGFiZWwoImVjYl9kZWNfb25lIiwxNik7Ci0rCSZhZXNuaV9pbmxp bmVfZ2VuZXJhdGUxKCJkZWMiKTsJIyAmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MyIpOwotKwkmbW92 dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7Ci0rCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsK LSsKLSsmc2V0X2xhYmVsKCJlY2JfZGVjX3R3byIsMTYpOwotKwkmY2FsbAkoIl9hZXNuaV9kZWNy eXB0MyIpOwotKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7Ci0rCSZtb3Z1cHMJKCZR V1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKLSsJJmptcAkoJmxhYmVsKCJlY2JfcmV0IikpOwotKwot KyZzZXRfbGFiZWwoImVjYl9kZWNfdGhyZWUiLDE2KTsKLSsJJmNhbGwJKCJfYWVzbmlfZGVjcnlw dDMiKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmbW92dXBzCSgmUVdQ KDB4MTAsJG91dCksJGlub3V0MSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQy KTsKLSsKLSsmc2V0X2xhYmVsKCJlY2JfcmV0Iik7Ci0rJmZ1bmN0aW9uX2VuZCgiYWVzbmlfZWNi X2VuY3J5cHQiKTsKLSt9Ci0rCi0rIyB2b2lkICRQUkVGSVhfY2JjX2VuY3J5cHQgKGNvbnN0IHZv aWQgKmlucCwgdm9pZCAqb3V0LAotKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg bGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCi0rIyAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKml2cCxjb25zdCBpbnQgZW5jKTsKLSsmZnVuY3Rpb25fYmVnaW4oIiR7 UFJFRklYfV9jYmNfZW5jcnlwdCIpOwotKwkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwotKwkmbW92 CSgkb3V0LCZ3cGFyYW0oMSkpOwotKwkmbW92CSgkbGVuLCZ3cGFyYW0oMikpOwotKwkmbW92CSgk a2V5LCZ3cGFyYW0oMykpOwotKwkmdGVzdAkoJGxlbiwkbGVuKTsKLSsJJm1vdgkoJGtleV8sJndw YXJhbSg0KSk7Ci0rCSZqegkoJmxhYmVsKCJjYmNfcmV0IikpOwotKwotKwkmY21wCSgmd3BhcmFt KDUpLDApOwotKwkmbW92dXBzCSgkaXZlYywmUVdQKDAsJGtleV8pKTsJIyBsb2FkIElWCi0rCSZt b3YJKCRyb3VuZHMsJkRXUCgyNDAsJGtleSkpOwotKwkmbW92CSgka2V5Xywka2V5KTsJCSMgYmFj a3VwICRrZXkKLSsJJm1vdgkoJHJvdW5kc18sJHJvdW5kcyk7CSMgYmFja3VwICRyb3VuZHMKLSsJ JmplCSgmbGFiZWwoImNiY19kZWNyeXB0IikpOwotKwotKwkmbW92YXBzCSgkaW5vdXQwLCRpdmVj KTsKLSsJJmNtcAkoJGxlbiwxNik7Ci0rCSZqYgkoJmxhYmVsKCJjYmNfZW5jX3RhaWwiKSk7Ci0r CSZzdWIJKCRsZW4sMTYpOwotKwkmam1wCSgmbGFiZWwoImNiY19lbmNfbG9vcCIpKTsKLSsKLSsm c2V0X2xhYmVsKCJjYmNfZW5jX2xvb3AiLDE2KTsKLSsJJm1vdnVwcwkoJGl2ZWMsJlFXUCgwLCRp bnApKTsKLSsJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKLSsJJnB4b3IJKCRpbm91dDAsJGl2 ZWMpOwotKwkmYWVzbmlfaW5saW5lX2dlbmVyYXRlMSgiZW5jIik7CSMgJmNhbGwJKCJfYWVzbmlf ZW5jcnlwdDMiKTsKLSsJJnN1YgkoJGxlbiwxNik7Ci0rCSZsZWEJKCRvdXQsJkRXUCgxNiwkb3V0 KSk7Ci0rCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOwkjIHJlc3RvcmUgJHJvdW5kcwotKwkmbW92 CSgka2V5LCRrZXlfKTsJCSMgcmVzdG9yZSAka2V5Ci0rCSZtb3Z1cHMJKCZRV1AoLTE2LCRvdXQp LCRpbm91dDApOwotKwkmam5jCSgmbGFiZWwoImNiY19lbmNfbG9vcCIpKTsKLSsJJmFkZAkoJGxl biwxNik7Ci0rCSZqbnoJKCZsYWJlbCgiY2JjX2VuY190YWlsIikpOwotKwkmbW92YXBzCSgkaXZl YywkaW5vdXQwKTsKLSsJJmptcAkoJmxhYmVsKCJjYmNfcmV0IikpOwotKwotKyZzZXRfbGFiZWwo ImNiY19lbmNfdGFpbCIpOwotKwkmbW92CSgiZWN4IiwkbGVuKTsJCSMgemFwcyAkcm91bmRzCi0r CSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CQkjIHJlcCBtb3ZzYgotKwkmbW92CSgiZWN4IiwxNik7 CQkjIHplcm8gdGFpbAotKwkmc3ViCSgiZWN4IiwkbGVuKTsKLSsJJnhvcgkoImVheCIsImVheCIp OwkJIyB6YXBzICRsZW4KLSsJJmRhdGFfd29yZCgweEFBRjNGNjg5KTsJCSMgcmVwIHN0b3NiCi0r CSZsZWEJKCRvdXQsJkRXUCgtMTYsJG91dCkpOwkjIHJld2luZCAkb3V0IGJ5IDEgYmxvY2sKLSsJ Jm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CSMgcmVzdG9yZSAkcm91bmRzCi0rCSZtb3YJKCRpbnAs JG91dCk7CQkjICRpbnAgYW5kICRvdXQgYXJlIHRoZSBzYW1lCi0rCSZtb3YJKCRrZXksJGtleV8p OwkJIyByZXN0b3JlICRrZXkKLSsJJmptcAkoJmxhYmVsKCJjYmNfZW5jX2xvb3AiKSk7Ci0rCi0r JnNldF9sYWJlbCgiY2JjX2RlY3J5cHQiLDE2KTsKLSsJJnN1YgkoJGxlbiwweDQwKTsKLSsJJmpi ZQkoJmxhYmVsKCJjYmNfZGVjX3RhaWwiKSk7Ci0rCSZqbXAJKCZsYWJlbCgiY2JjX2RlY19sb29w MyIpKTsKLSsKLSsmc2V0X2xhYmVsKCJjYmNfZGVjX2xvb3AzIiwxNik7Ci0rCSZtb3Z1cHMJKCRp bm91dDAsJlFXUCgwLCRpbnApKTsKLSsJJm1vdnVwcwkoJGlub3V0MSwmUVdQKDB4MTAsJGlucCkp OwotKwkmbW92dXBzCSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7Ci0rCSZtb3ZhcHMJKCRpbjAs JGlub3V0MCk7Ci0rCSZtb3ZhcHMJKCRpbjEsJGlub3V0MSk7Ci0rCSZjYWxsCSgiX2Flc25pX2Rl Y3J5cHQzIik7Ci0rCSZzdWIJKCRsZW4sMHgzMCk7Ci0rCSZsZWEJKCRpbnAsJkRXUCgweDMwLCRp bnApKTsKLSsJJmxlYQkoJG91dCwmRFdQKDB4MzAsJG91dCkpOwotKwkmcHhvcgkoJGlub3V0MCwk aXZlYyk7Ci0rCSZweG9yCSgkaW5vdXQxLCRpbjApOwotKwkmbW92dXBzCSgkaXZlYywmUVdQKC0w eDEwLCRpbnApKTsKLSsJJnB4b3IJKCRpbm91dDIsJGluMSk7Ci0rCSZtb3Z1cHMJKCZRV1AoLTB4 MzAsJG91dCksJGlub3V0MCk7Ci0rCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pCSMgcmVzdG9yZSAk cm91bmRzCi0rCSZtb3Z1cHMJKCZRV1AoLTB4MjAsJG91dCksJGlub3V0MSk7Ci0rCSZtb3YJKCRr ZXksJGtleV8pOwkJIyByZXN0b3JlICRrZXkKLSsJJm1vdnVwcwkoJlFXUCgtMHgxMCwkb3V0KSwk aW5vdXQyKTsKLSsJJmphCSgmbGFiZWwoImNiY19kZWNfbG9vcDMiKSk7Ci0rCi0rJnNldF9sYWJl bCgiY2JjX2RlY190YWlsIik7Ci0rCSZhZGQJKCRsZW4sMHg0MCk7Ci0rCSZqegkoJmxhYmVsKCJj YmNfcmV0IikpOwotKwotKwkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7Ci0rCSZjbXAJ KCRsZW4sMHgxMCk7Ci0rCSZtb3ZhcHMJKCRpbjAsJGlub3V0MCk7Ci0rCSZqYmUJKCZsYWJlbCgi Y2JjX2RlY19vbmUiKSk7Ci0rCSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsKLSsJ JmNtcAkoJGxlbiwweDIwKTsKLSsJJm1vdmFwcwkoJGluMSwkaW5vdXQxKTsKLSsJJmpiZQkoJmxh YmVsKCJjYmNfZGVjX3R3byIpKTsKLSsJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkp OwotKwkmY21wCSgkbGVuLDB4MzApOwotKwkmamJlCSgmbGFiZWwoImNiY19kZWNfdGhyZWUiKSk7 Ci0rCSZtb3Z1cHMJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKLSsJJmNhbGwJKCJfYWVzbmlf ZGVjcnlwdDQiKTsKLSsJJm1vdnVwcwkoJHJuZGtleTAsJlFXUCgweDEwLCRpbnApKTsKLSsJJm1v dnVwcwkoJHJuZGtleTEsJlFXUCgweDIwLCRpbnApKTsKLSsJJnB4b3IJKCRpbm91dDAsJGl2ZWMp OwotKwkmcHhvcgkoJGlub3V0MSwkaW4wKTsKLSsJJm1vdnVwcwkoJGl2ZWMsJlFXUCgweDMwLCRp bnApKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmcHhvcgkoJGlub3V0 Miwkcm5ka2V5MCk7Ci0rCSZweG9yCSgkaW5vdXQzLCRybmRrZXkxKTsKLSsJJm1vdnVwcwkoJlFX UCgweDEwLCRvdXQpLCRpbm91dDEpOwotKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCksJGlub3V0 Mik7Ci0rCSZtb3ZhcHMJKCRpbm91dDAsJGlub3V0Myk7Ci0rCSZsZWEJKCRvdXQsJkRXUCgweDMw LCRvdXQpKTsKLSsJJmptcAkoJmxhYmVsKCJjYmNfZGVjX3RhaWxfY29sbGVjdGVkIikpOwotKwot KyZzZXRfbGFiZWwoImNiY19kZWNfb25lIik7Ci0rCSZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJk ZWMiKTsJIyAmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MyIpOwotKwkmcHhvcgkoJGlub3V0MCwkaXZl Yyk7Ci0rCSZtb3ZhcHMJKCRpdmVjLCRpbjApOwotKwkmam1wCSgmbGFiZWwoImNiY19kZWNfdGFp bF9jb2xsZWN0ZWQiKSk7Ci0rCi0rJnNldF9sYWJlbCgiY2JjX2RlY190d28iKTsKLSsJJmNhbGwJ KCJfYWVzbmlfZGVjcnlwdDMiKTsKLSsJJnB4b3IJKCRpbm91dDAsJGl2ZWMpOwotKwkmcHhvcgko JGlub3V0MSwkaW4wKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmbW92 YXBzCSgkaW5vdXQwLCRpbm91dDEpOwotKwkmbW92YXBzCSgkaXZlYywkaW4xKTsKLSsJJmxlYQko JG91dCwmRFdQKDB4MTAsJG91dCkpOwotKwkmam1wCSgmbGFiZWwoImNiY19kZWNfdGFpbF9jb2xs ZWN0ZWQiKSk7Ci0rCi0rJnNldF9sYWJlbCgiY2JjX2RlY190aHJlZSIpOwotKwkmY2FsbAkoIl9h ZXNuaV9kZWNyeXB0MyIpOwotKwkmcHhvcgkoJGlub3V0MCwkaXZlYyk7Ci0rCSZweG9yCSgkaW5v dXQxLCRpbjApOwotKwkmcHhvcgkoJGlub3V0MiwkaW4xKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRv dXQpLCRpbm91dDApOwotKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7Ci0rCSZt b3ZhcHMJKCRpbm91dDAsJGlub3V0Mik7Ci0rCSZtb3Z1cHMJKCRpdmVjLCZRV1AoMHgyMCwkaW5w KSk7Ci0rCSZsZWEJKCRvdXQsJkRXUCgweDIwLCRvdXQpKTsKLSsKLSsmc2V0X2xhYmVsKCJjYmNf ZGVjX3RhaWxfY29sbGVjdGVkIik7Ci0rCSZhbmQJKCRsZW4sMTUpOwotKwkmam56CSgmbGFiZWwo ImNiY19kZWNfdGFpbF9wYXJ0aWFsIikpOwotKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0 MCk7Ci0rCSZqbXAJKCZsYWJlbCgiY2JjX3JldCIpKTsKLSsKLSsmc2V0X2xhYmVsKCJjYmNfZGVj X3RhaWxfcGFydGlhbCIpOwotKwkmbW92CSgka2V5XywiZXNwIik7Ci0rCSZzdWIJKCJlc3AiLDE2 KTsKLSsJJmFuZAkoImVzcCIsLTE2KTsKLSsJJm1vdmFwcwkoJlFXUCgwLCJlc3AiKSwkaW5vdXQw KTsKLSsJJm1vdgkoJGlucCwiZXNwIik7Ci0rCSZtb3YJKCJlY3giLCRsZW4pOwotKwkmZGF0YV93 b3JkKDB4QTRGM0Y2ODkpOwkJIyByZXAgbW92c2IKLSsJJm1vdgkoImVzcCIsJGtleV8pOwotKwot KyZzZXRfbGFiZWwoImNiY19yZXQiKTsKLSsJJm1vdgkoJGtleV8sJndwYXJhbSg0KSk7Ci0rCSZt b3Z1cHMJKCZRV1AoMCwka2V5XyksJGl2ZWMpOwkjIG91dHB1dCBJVgotKyZmdW5jdGlvbl9lbmQo IiR7UFJFRklYfV9jYmNfZW5jcnlwdCIpOwotKwotKyMgTWVjaGFuaWNhbCBwb3J0IGZyb20gYWVz bmkteDg2XzY0LnBsLgotKyMKLSsjIF9hZXNuaV9zZXRfZW5jcnlwdF9rZXkgaXMgcHJpdmF0ZSBp bnRlcmZhY2UsCi0rIyBpbnB1dDoKLSsjCSJlYXgiCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJL ZXkKLSsjCSRyb3VuZHMJaW50IGJpdHMKLSsjCSRrZXkJQUVTX0tFWSAqa2V5Ci0rIyBvdXRwdXQ6 Ci0rIwkiZWF4IglyZXR1cm4gY29kZQotKyMJJHJvdW5kCXJvdW5kcwotKwotKyZmdW5jdGlvbl9i ZWdpbl9CKCJfYWVzbmlfc2V0X2VuY3J5cHRfa2V5Iik7Ci0rCSZ0ZXN0CSgiZWF4IiwiZWF4Iik7 Ci0rCSZqegkoJmxhYmVsKCJiYWRfcG9pbnRlciIpKTsKLSsJJnRlc3QJKCRrZXksJGtleSk7Ci0r CSZqegkoJmxhYmVsKCJiYWRfcG9pbnRlciIpKTsKLSsKLSsJJm1vdnVwcwkoInhtbTAiLCZRV1Ao MCwiZWF4IikpOwkjIHB1bGwgZmlyc3QgMTI4IGJpdHMgb2YgKnVzZXJLZXkKLSsJJnB4b3IJKCJ4 bW00IiwieG1tNCIpOwkjIGxvdyBkd29yZCBvZiB4bW00IGlzIGFzc3VtZWQgMAotKwkmbGVhCSgk a2V5LCZEV1AoMTYsJGtleSkpOwotKwkmY21wCSgkcm91bmRzLDI1Nik7Ci0rCSZqZQkoJmxhYmVs KCIxNHJvdW5kcyIpKTsKLSsJJmNtcAkoJHJvdW5kcywxOTIpOwotKwkmamUJKCZsYWJlbCgiMTJy b3VuZHMiKSk7Ci0rCSZjbXAJKCRyb3VuZHMsMTI4KTsKLSsJJmpuZQkoJmxhYmVsKCJiYWRfa2V5 Yml0cyIpKTsKLSsKLSsmc2V0X2xhYmVsKCIxMHJvdW5kcyIsMTYpOwotKwkmbW92CQkoJHJvdW5k cyw5KTsKLSsJJiRtb3Zla2V5CSgmUVdQKC0xNiwka2V5KSwieG1tMCIpOwkjIHJvdW5kIDAKLSsJ JmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDEpOwkJIyByb3VuZCAxCi0rCSZjYWxs CQkoJmxhYmVsKCJrZXlfMTI4X2NvbGQiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4 bW0wIiwweDIpOwkJIyByb3VuZCAyCi0rCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOwotKwkm YWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMCIsMHgwNCk7CQkjIHJvdW5kIDMKLSsJJmNhbGwJ CSgmbGFiZWwoImtleV8xMjgiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiww eDA4KTsJCSMgcm91bmQgNAotKwkmY2FsbAkJKCZsYWJlbCgia2V5XzEyOCIpKTsKLSsJJmFlc2tl eWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MTApOwkJIyByb3VuZCA1Ci0rCSZjYWxsCQkoJmxh YmVsKCJrZXlfMTI4IikpOwotKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMCIsMHgyMCk7 CQkjIHJvdW5kIDYKLSsJJmNhbGwJCSgmbGFiZWwoImtleV8xMjgiKSk7Ci0rCSZhZXNrZXlnZW5h c3Npc3QoInhtbTEiLCJ4bW0wIiwweDQwKTsJCSMgcm91bmQgNwotKwkmY2FsbAkJKCZsYWJlbCgi a2V5XzEyOCIpKTsKLSsJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4ODApOwkJIyBy b3VuZCA4Ci0rCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOwotKwkmYWVza2V5Z2VuYXNzaXN0 KCJ4bW0xIiwieG1tMCIsMHgxYik7CQkjIHJvdW5kIDkKLSsJJmNhbGwJCSgmbGFiZWwoImtleV8x MjgiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDM2KTsJCSMgcm91bmQg MTAKLSsJJmNhbGwJCSgmbGFiZWwoImtleV8xMjgiKSk7Ci0rCSYkbW92ZWtleQkoJlFXUCgwLCRr ZXkpLCJ4bW0wIik7Ci0rCSZtb3YJCSgmRFdQKDgwLCRrZXkpLCRyb3VuZHMpOwotKwkmeG9yCQko ImVheCIsImVheCIpOwotKwkmcmV0KCk7Ci0rCi0rJnNldF9sYWJlbCgia2V5XzEyOCIsMTYpOwot KwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOwotKwkmbGVhCQkoJGtleSwmRFdQKDE2 LCRrZXkpKTsKLSsmc2V0X2xhYmVsKCJrZXlfMTI4X2NvbGQiKTsKLSsJJnNodWZwcwkJKCJ4bW00 IiwieG1tMCIsMGIwMDAxMDAwMCk7Ci0rCSZweG9yCQkoInhtbTAiLCJ4bW00Iik7Ci0rCSZzaHVm cHMJCSgieG1tNCIsInhtbTAiLDBiMTAwMDExMDAsKTsKLSsJJnB4b3IJCSgieG1tMCIsInhtbTQi KTsKLSsJJnBzaHVmZAkJKCJ4bW0xIiwieG1tMSIsMGIxMTExMTExMSk7CSMgY3JpdGljYWwgcGF0 aAotKwkmcHhvcgkJKCJ4bW0wIiwieG1tMSIpOwotKwkmcmV0KCk7Ci0rCi0rJnNldF9sYWJlbCgi MTJyb3VuZHMiLDE2KTsKLSsJJm1vdnEJCSgieG1tMiIsJlFXUCgxNiwiZWF4IikpOwkjIHJlbWFp bmluZyAxLzMgb2YgKnVzZXJLZXkKLSsJJm1vdgkJKCRyb3VuZHMsMTEpOwotKwkmJG1vdmVrZXkJ KCZRV1AoLTE2LCRrZXkpLCJ4bW0wIikJCSMgcm91bmQgMAotKwkmYWVza2V5Z2VuYXNzaXN0KCJ4 bW0xIiwieG1tMiIsMHgwMSk7CQkjIHJvdW5kIDEsMgotKwkmY2FsbAkJKCZsYWJlbCgia2V5XzE5 MmFfY29sZCIpKTsKLSsJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4MDIpOwkJIyBy b3VuZCAyLDMKLSsJJmNhbGwJCSgmbGFiZWwoImtleV8xOTJiIikpOwotKwkmYWVza2V5Z2VuYXNz aXN0KCJ4bW0xIiwieG1tMiIsMHgwNCk7CQkjIHJvdW5kIDQsNQotKwkmY2FsbAkJKCZsYWJlbCgi a2V5XzE5MmEiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDA4KTsJCSMg cm91bmQgNSw2Ci0rCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTkyYiIpKTsKLSsJJmFlc2tleWdlbmFz c2lzdCgieG1tMSIsInhtbTIiLDB4MTApOwkJIyByb3VuZCA3LDgKLSsJJmNhbGwJCSgmbGFiZWwo ImtleV8xOTJhIikpOwotKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHgyMCk7CQkj IHJvdW5kIDgsOQotKwkmY2FsbAkJKCZsYWJlbCgia2V5XzE5MmIiKSk7Ci0rCSZhZXNrZXlnZW5h c3Npc3QoInhtbTEiLCJ4bW0yIiwweDQwKTsJCSMgcm91bmQgMTAsMTEKLSsJJmNhbGwJCSgmbGFi ZWwoImtleV8xOTJhIikpOwotKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHg4MCk7 CQkjIHJvdW5kIDExLDEyCi0rCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTkyYiIpKTsKLSsJJiRtb3Zl a2V5CSgmUVdQKDAsJGtleSksInhtbTAiKTsKLSsJJm1vdgkJKCZEV1AoNDgsJGtleSksJHJvdW5k cyk7Ci0rCSZ4b3IJCSgiZWF4IiwiZWF4Iik7Ci0rCSZyZXQoKTsKLSsKLSsmc2V0X2xhYmVsKCJr ZXlfMTkyYSIsMTYpOwotKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOwotKwkmbGVh CQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKLSsmc2V0X2xhYmVsKCJrZXlfMTkyYV9jb2xkIiwxNik7 Ci0rCSZtb3ZhcHMJCSgieG1tNSIsInhtbTIiKTsKLSsmc2V0X2xhYmVsKCJrZXlfMTkyYl93YXJt Iik7Ci0rCSZzaHVmcHMJCSgieG1tNCIsInhtbTAiLDBiMDAwMTAwMDApOwotKwkmbW92YXBzCQko InhtbTMiLCJ4bW0yIik7Ci0rCSZweG9yCQkoInhtbTAiLCJ4bW00Iik7Ci0rCSZzaHVmcHMJCSgi eG1tNCIsInhtbTAiLDBiMTAwMDExMDApOwotKwkmcHNsbGRxCQkoInhtbTMiLDQpOwotKwkmcHhv cgkJKCJ4bW0wIiwieG1tNCIpOwotKwkmcHNodWZkCQkoInhtbTEiLCJ4bW0xIiwwYjAxMDEwMTAx KTsJIyBjcml0aWNhbCBwYXRoCi0rCSZweG9yCQkoInhtbTIiLCJ4bW0zIik7Ci0rCSZweG9yCQko InhtbTAiLCJ4bW0xIik7Ci0rCSZwc2h1ZmQJCSgieG1tMyIsInhtbTAiLDBiMTExMTExMTEpOwot KwkmcHhvcgkJKCJ4bW0yIiwieG1tMyIpOwotKwkmcmV0KCk7Ci0rCi0rJnNldF9sYWJlbCgia2V5 XzE5MmIiLDE2KTsKLSsJJm1vdmFwcwkJKCJ4bW0zIiwieG1tMCIpOwotKwkmc2h1ZnBzCQkoInht bTUiLCJ4bW0wIiwwYjAxMDAwMTAwKTsKLSsJJiRtb3Zla2V5CSgmUVdQKDAsJGtleSksInhtbTUi KTsKLSsJJnNodWZwcwkJKCJ4bW0zIiwieG1tMiIsMGIwMTAwMTExMCk7Ci0rCSYkbW92ZWtleQko JlFXUCgxNiwka2V5KSwieG1tMyIpOwotKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsKLSsJ JmptcAkJKCZsYWJlbCgia2V5XzE5MmJfd2FybSIpKTsKLSsKLSsmc2V0X2xhYmVsKCIxNHJvdW5k cyIsMTYpOwotKwkmbW92dXBzCQkoInhtbTIiLCZRV1AoMTYsImVheCIpKTsJIyByZW1haW5pbmcg aGFsZiBvZiAqdXNlcktleQotKwkmbW92CQkoJHJvdW5kcywxMyk7Ci0rCSZsZWEJCSgka2V5LCZE V1AoMTYsJGtleSkpOwotKwkmJG1vdmVrZXkJKCZRV1AoLTMyLCRrZXkpLCJ4bW0wIik7CSMgcm91 bmQgMAotKwkmJG1vdmVrZXkJKCZRV1AoLTE2LCRrZXkpLCJ4bW0yIik7CSMgcm91bmQgMQotKwkm YWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHgwMSk7CQkjIHJvdW5kIDIKLSsJJmNhbGwJ CSgmbGFiZWwoImtleV8yNTZhX2NvbGQiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4 bW0wIiwweDAxKTsJCSMgcm91bmQgMwotKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmIiKSk7Ci0r CSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDAyKTsJCSMgcm91bmQgNAotKwkmY2Fs bAkJKCZsYWJlbCgia2V5XzI1NmEiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0w IiwweDAyKTsJCSMgcm91bmQgNQotKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmIiKSk7Ci0rCSZh ZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDA0KTsJCSMgcm91bmQgNgotKwkmY2FsbAkJ KCZsYWJlbCgia2V5XzI1NmEiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiww eDA0KTsJCSMgcm91bmQgNwotKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmIiKSk7Ci0rCSZhZXNr ZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDA4KTsJCSMgcm91bmQgOAotKwkmY2FsbAkJKCZs YWJlbCgia2V5XzI1NmEiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDA4 KTsJCSMgcm91bmQgOQotKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmIiKSk7Ci0rCSZhZXNrZXln ZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDEwKTsJCSMgcm91bmQgMTAKLSsJJmNhbGwJCSgmbGFi ZWwoImtleV8yNTZhIikpOwotKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMCIsMHgxMCk7 CQkjIHJvdW5kIDExCi0rCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YiIpKTsKLSsJJmFlc2tleWdl bmFzc2lzdCgieG1tMSIsInhtbTIiLDB4MjApOwkJIyByb3VuZCAxMgotKwkmY2FsbAkJKCZsYWJl bCgia2V5XzI1NmEiKSk7Ci0rCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDIwKTsJ CSMgcm91bmQgMTMKLSsJJmNhbGwJCSgmbGFiZWwoImtleV8yNTZiIikpOwotKwkmYWVza2V5Z2Vu YXNzaXN0KCJ4bW0xIiwieG1tMiIsMHg0MCk7CQkjIHJvdW5kIDE0Ci0rCSZjYWxsCQkoJmxhYmVs KCJrZXlfMjU2YSIpKTsKLSsJJiRtb3Zla2V5CSgmUVdQKDAsJGtleSksInhtbTAiKTsKLSsJJm1v dgkJKCZEV1AoMTYsJGtleSksJHJvdW5kcyk7Ci0rCSZ4b3IJCSgiZWF4IiwiZWF4Iik7Ci0rCSZy ZXQoKTsKLSsKLSsmc2V0X2xhYmVsKCJrZXlfMjU2YSIsMTYpOwotKwkmJG1vdmVrZXkJKCZRV1Ao MCwka2V5KSwieG1tMiIpOwotKwkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKLSsmc2V0X2xh YmVsKCJrZXlfMjU2YV9jb2xkIik7Ci0rCSZzaHVmcHMJCSgieG1tNCIsInhtbTAiLDBiMDAwMTAw MDApOwotKwkmcHhvcgkJKCJ4bW0wIiwieG1tNCIpOwotKwkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0w IiwwYjEwMDAxMTAwKTsKLSsJJnB4b3IJCSgieG1tMCIsInhtbTQiKTsKLSsJJnBzaHVmZAkJKCJ4 bW0xIiwieG1tMSIsMGIxMTExMTExMSk7CSMgY3JpdGljYWwgcGF0aAotKwkmcHhvcgkJKCJ4bW0w IiwieG1tMSIpOwotKwkmcmV0KCk7Ci0rCi0rJnNldF9sYWJlbCgia2V5XzI1NmIiLDE2KTsKLSsJ JiRtb3Zla2V5CSgmUVdQKDAsJGtleSksInhtbTAiKTsKLSsJJmxlYQkJKCRrZXksJkRXUCgxNiwk a2V5KSk7Ci0rCi0rCSZzaHVmcHMJCSgieG1tNCIsInhtbTIiLDBiMDAwMTAwMDApOwotKwkmcHhv cgkJKCJ4bW0yIiwieG1tNCIpOwotKwkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0yIiwwYjEwMDAxMTAw KTsKLSsJJnB4b3IJCSgieG1tMiIsInhtbTQiKTsKLSsJJnBzaHVmZAkJKCJ4bW0xIiwieG1tMSIs MGIxMDEwMTAxMCk7CSMgY3JpdGljYWwgcGF0aAotKwkmcHhvcgkJKCJ4bW0yIiwieG1tMSIpOwot KwkmcmV0KCk7Ci0rCi0rJnNldF9sYWJlbCgiYmFkX3BvaW50ZXIiLDQpOwotKwkmbW92CSgiZWF4 IiwtMSk7Ci0rCSZyZXQJKCk7Ci0rJnNldF9sYWJlbCgiYmFkX2tleWJpdHMiLDQpOwotKwkmbW92 CSgiZWF4IiwtMik7Ci0rCSZyZXQJKCk7Ci0rJmZ1bmN0aW9uX2VuZF9CKCJfYWVzbmlfc2V0X2Vu Y3J5cHRfa2V5Iik7Ci0rCi0rIyBpbnQgJFBSRUZJWF9zZXRfZW5jcnlwdF9rZXkgKGNvbnN0IHVu c2lnbmVkIGNoYXIgKnVzZXJLZXksIGludCBiaXRzLAotKyMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBRVNfS0VZICprZXkpCi0rJmZ1bmN0aW9uX2JlZ2luX0IoIiR7UFJFRklYfV9zZXRf ZW5jcnlwdF9rZXkiKTsKLSsJJm1vdgkoImVheCIsJndwYXJhbSgwKSk7Ci0rCSZtb3YJKCRyb3Vu ZHMsJndwYXJhbSgxKSk7Ci0rCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7Ci0rCSZjYWxsCSgiX2Fl c25pX3NldF9lbmNyeXB0X2tleSIpOwotKwkmcmV0CSgpOwotKyZmdW5jdGlvbl9lbmRfQigiJHtQ UkVGSVh9X3NldF9lbmNyeXB0X2tleSIpOwotKwotKyMgaW50ICRQUkVGSVhfc2V0X2RlY3J5cHRf a2V5IChjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBpbnQgYml0cywKLSsjICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQotKyZmdW5jdGlvbl9iZWdpbl9CKCIk e1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5Iik7Ci0rCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMCkpOwot KwkmbW92CSgkcm91bmRzLCZ3cGFyYW0oMSkpOwotKwkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwot KwkmY2FsbAkoIl9hZXNuaV9zZXRfZW5jcnlwdF9rZXkiKTsKLSsJJm1vdgkoJGtleSwmd3BhcmFt KDIpKTsKLSsJJnNobAkoJHJvdW5kcyw0KQkjIHJvdW5kcy0xIGFmdGVyIF9hZXNuaV9zZXRfZW5j cnlwdF9rZXkKLSsJJnRlc3QJKCJlYXgiLCJlYXgiKTsKLSsJJmpuegkoJmxhYmVsKCJkZWNfa2V5 X3JldCIpKTsKLSsJJmxlYQkoImVheCIsJkRXUCgxNiwka2V5LCRyb3VuZHMpKTsJIyBlbmQgb2Yg a2V5IHNjaGVkdWxlCi0rCi0rCSYkbW92ZWtleQkoInhtbTAiLCZRV1AoMCwka2V5KSk7CSMganVz dCBzd2FwCi0rCSYkbW92ZWtleQkoInhtbTEiLCZRV1AoMCwiZWF4IikpOwotKwkmJG1vdmVrZXkJ KCZRV1AoMCwiZWF4IiksInhtbTAiKTsKLSsJJiRtb3Zla2V5CSgmUVdQKDAsJGtleSksInhtbTEi KTsKLSsJJmxlYQkJKCRrZXksJkRXUCgxNiwka2V5KSk7Ci0rCSZsZWEJCSgiZWF4IiwmRFdQKC0x NiwiZWF4IikpOwotKwotKyZzZXRfbGFiZWwoImRlY19rZXlfaW52ZXJzZSIpOwotKwkmJG1vdmVr ZXkJKCJ4bW0wIiwmUVdQKDAsJGtleSkpOwkjIHN3YXAgYW5kIGludmVyc2UKLSsJJiRtb3Zla2V5 CSgieG1tMSIsJlFXUCgwLCJlYXgiKSk7Ci0rCSZhZXNpbWMJCSgieG1tMCIsInhtbTAiKTsKLSsJ JmFlc2ltYwkJKCJ4bW0xIiwieG1tMSIpOwotKwkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsK LSsJJmxlYQkJKCJlYXgiLCZEV1AoLTE2LCJlYXgiKSk7Ci0rCSZjbXAJCSgiZWF4Iiwka2V5KTsK LSsJJiRtb3Zla2V5CSgmUVdQKDE2LCJlYXgiKSwieG1tMCIpOwotKwkmJG1vdmVrZXkJKCZRV1Ao LTE2LCRrZXkpLCJ4bW0xIik7Ci0rCSZqYQkJKCZsYWJlbCgiZGVjX2tleV9pbnZlcnNlIikpOwot KwotKwkmJG1vdmVrZXkJKCJ4bW0wIiwmUVdQKDAsJGtleSkpOwkjIGludmVyc2UgbWlkZGxlCi0r CSZhZXNpbWMJCSgieG1tMCIsInhtbTAiKTsKLSsJJiRtb3Zla2V5CSgmUVdQKDAsJGtleSksInht bTAiKTsKLSsKLSsJJnhvcgkJKCJlYXgiLCJlYXgiKTsJCSMgcmV0dXJuIHN1Y2Nlc3MKLSsmc2V0 X2xhYmVsKCJkZWNfa2V5X3JldCIpOwotKwkmcmV0CSgpOwotKyZmdW5jdGlvbl9lbmRfQigiJHtQ UkVGSVh9X3NldF9kZWNyeXB0X2tleSIpOwotKyZhc2NpeigiQUVTIGZvciBJbnRlbCBBRVMtTkks IENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKLSsKLSsmYXNtX2ZpbmlzaCgp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGIvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2XzY0LnBs LmFlc25pIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9hZXMvYXNtL2Flc25pLXg4Nl82NC5wbAotLS0t IG9wZW5zc2wtMS4wLjBiL2NyeXB0by9hZXMvYXNtL2Flc25pLXg4Nl82NC5wbC5hZXNuaQkyMDEw LTExLTE2IDE3OjMzOjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBiL2NyeXB0 by9hZXMvYXNtL2Flc25pLXg4Nl82NC5wbAkyMDEwLTExLTE2IDE3OjMzOjIzLjAwMDAwMDAwMCAr MDEwMAotQEAgLTAsMCArMSw5OTEgQEAKLSsjIS91c3IvYmluL2VudiBwZXJsCi0rIwotKyMgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMu c2U+IGZvciB0aGUgT3BlblNTTAotKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwg ZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAotKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBk ZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKLSsjIGRldGFpbHMg c2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgotKyMgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsjCi0rIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEludGVsIEFF Uy1OSSBleHRlbnNpb24uIEluCi0rIyBPcGVuU1NMIGNvbnRleHQgaXQncyB1c2VkIHdpdGggSW50 ZWwgZW5naW5lLCBidXQgY2FuIGFsc28gYmUgdXNlZCBhcwotKyMgZHJvcC1pbiByZXBsYWNlbWVu dCBmb3IgY3J5cHRvL2Flcy9hc20vYWVzLXg4Nl82NC5wbCBbc2VlIGJlbG93IGZvcgotKyMgZGV0 YWlsc10uCi0rCi0rJFBSRUZJWD0iYWVzbmkiOwkjIGlmICRQUkVGSVggaXMgc2V0IHRvICJBRVMi LCB0aGUgc2NyaXB0Ci0rCQkJIyBnZW5lcmF0ZXMgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IKLSsJ CQkjIGNyeXB0by9hZXMvYXNtL2Flcy14ODZfNjQucGw6LSkKLSsKLSskZmxhdm91ciA9IHNoaWZ0 OwotKyRvdXRwdXQgID0gc2hpZnQ7Ci0raWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9 ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQotKwotKyR3aW42ND0wOyAkd2luNjQ9MSBpZiAo JGZsYXZvdXIgPX4gL1tubV1hc218bWluZ3c2NC8gfHwgJG91dHB1dCA9fiAvXC5hc20kLyk7Ci0r Ci0rJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKLSsoICR4bGF0ZT0iJHtk aXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKLSsoICR4bGF0ZT0iJHtkaXJ9 Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCi0rZGllICJj YW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKLSsKLStvcGVuIFNURE9VVCwifCAkXlggJHhs YXRlICRmbGF2b3VyICRvdXRwdXQiOwotKwotKyRtb3ZrZXkgPSAkUFJFRklYIGVxICJhZXNuaSIg PyAibW92YXBzIiA6ICJtb3Z1cHMiOwotK0BfNGFyZ3M9JHdpbjY0PwkoIiVyY3giLCIlcmR4Iiwi JXI4IiwgIiVyOSIpIDoJIyBXaW42NCBvcmRlcgotKwkJKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIl cmN4Iik7CSMgVW5peCBvcmRlcgotKwotKyRjb2RlPSIudGV4dFxuIjsKLSsKLSskcm91bmRzPSIl ZWF4IjsJIyBpbnB1dCB0byBhbmQgY2hhbmdlZCBieSBhZXNuaV9bZW58ZGVdY3J5cHROICEhIQot KyMgdGhpcyBpcyBuYXR1cmFsIFVuaXggYXJndW1lbnQgb3JkZXIgZm9yIHB1YmxpYyAkUFJFRklY X1tlY2J8Y2JjXV9lbmNyeXB0IC4uLgotKyRpbnA9IiVyZGkiOwotKyRvdXQ9IiVyc2kiOwotKyRs ZW49IiVyZHgiOwotKyRrZXk9IiVyY3giOwkjIGlucHV0IHRvIGFuZCBjaGFuZ2VkIGJ5IGFlc25p X1tlbnxkZV1jcnlwdE4gISEhCi0rJGl2cD0iJXI4IjsJIyBjYmMKLSsKLSskcm5kc189IiVyMTBk IjsJIyBiYWNrdXAgY29weSBmb3IgJHJvdW5kcwotKyRrZXlfPSIlcjExIjsJIyBiYWNrdXAgY29w eSBmb3IgJGtleQotKwotKyMgJXhtbSByZWdpc3RlciBsYXlvdXQKLSskaW5vdXQwPSIleG1tMCI7 CSRpbm91dDE9IiV4bW0xIjsKLSskaW5vdXQyPSIleG1tMiI7CSRpbm91dDM9IiV4bW0zIjsKLSsk cm5ka2V5MD0iJXhtbTQiOwkkcm5ka2V5MT0iJXhtbTUiOwotKwotKyRpdj0iJXhtbTYiOwkJJGlu MD0iJXhtbTciOwkjIHVzZWQgaW4gQ0JDIGRlY3J5cHQKLSskaW4xPSIleG1tOCI7CQkkaW4yPSIl eG1tOSI7Ci0rDAotKyMgSW5saW5lIHZlcnNpb24gb2YgaW50ZXJuYWwgYWVzbmlfW2VufGRlXWNy eXB0MS4KLSsjCi0rIyBXaHkgZm9sZGVkIGxvb3A/IEJlY2F1c2UgYWVzW2VuY3xkZWNdIGlzIHNs b3cgZW5vdWdoIHRvIGFjY29tbW9kYXRlCi0rIyBjeWNsZXMgd2hpY2ggdGFrZSBjYXJlIG9mIGxv b3AgdmFyaWFibGVzLi4uCi0reyBteSAkc247Ci0rc3ViIGFlc25pX2dlbmVyYXRlMSB7Ci0rbXkg KCRwLCRrZXksJHJvdW5kcyk9QF87Ci0rKyskc247Ci0rJGNvZGUuPTw8X19fOwotKwkkbW92a2V5 CSgka2V5KSwkcm5ka2V5MAotKwkkbW92a2V5CTE2KCRrZXkpLCRybmRrZXkxCi0rCWxlYQkzMigk a2V5KSwka2V5Ci0rCXB4b3IJJHJuZGtleTAsJGlub3V0MAotKy5Mb29wXyR7cH0xXyRzbjoKLSsJ YWVzJHtwfQkkcm5ka2V5MSwkaW5vdXQwCi0rCWRlYwkkcm91bmRzCi0rCSRtb3ZrZXkJKCRrZXkp LCRybmRrZXkxCi0rCWxlYQkxNigka2V5KSwka2V5Ci0rCWpuegkuTG9vcF8ke3B9MV8kc24JIyBs b29wIGJvZHkgaXMgMTYgYnl0ZXMKLSsJYWVzJHtwfWxhc3QJJHJuZGtleTEsJGlub3V0MAotK19f XwotK319Ci0rIyB2b2lkICRQUkVGSVhfW2VufGRlXWNyeXB0IChjb25zdCB2b2lkICppbnAsdm9p ZCAqb3V0LGNvbnN0IEFFU19LRVkgKmtleSk7Ci0rIwotK3sgbXkgKCRpbnAsJG91dCwka2V5KSA9 IEBfNGFyZ3M7Ci0rCi0rJGNvZGUuPTw8X19fOwotKy5nbG9ibAkke1BSRUZJWH1fZW5jcnlwdAot Ky50eXBlCSR7UFJFRklYfV9lbmNyeXB0LFxAYWJpLW9tbmlwb3RlbnQKLSsuYWxpZ24JMTYKLSsk e1BSRUZJWH1fZW5jcnlwdDoKLSsJbW92dXBzCSgkaW5wKSwkaW5vdXQwCQkjIGxvYWQgaW5wdXQK LSsJbW92CTI0MCgka2V5KSwkcm91bmRzCSMgcHVsbCAkcm91bmRzCi0rX19fCi0rCSZhZXNuaV9n ZW5lcmF0ZTEoImVuYyIsJGtleSwkcm91bmRzKTsKLSskY29kZS49PDxfX187Ci0rCW1vdnVwcwkk aW5vdXQwLCgkb3V0KQkJIyBvdXRwdXQKLSsJcmV0Ci0rLnNpemUJJHtQUkVGSVh9X2VuY3J5cHQs Li0ke1BSRUZJWH1fZW5jcnlwdAotKwotKy5nbG9ibAkke1BSRUZJWH1fZGVjcnlwdAotKy50eXBl CSR7UFJFRklYfV9kZWNyeXB0LFxAYWJpLW9tbmlwb3RlbnQKLSsuYWxpZ24JMTYKLSske1BSRUZJ WH1fZGVjcnlwdDoKLSsJbW92dXBzCSgkaW5wKSwkaW5vdXQwCQkjIGxvYWQgaW5wdXQKLSsJbW92 CTI0MCgka2V5KSwkcm91bmRzCSMgcHVsbCAkcm91bmRzCi0rX19fCi0rCSZhZXNuaV9nZW5lcmF0 ZTEoImRlYyIsJGtleSwkcm91bmRzKTsKLSskY29kZS49PDxfX187Ci0rCW1vdnVwcwkkaW5vdXQw LCgkb3V0KQkJIyBvdXRwdXQKLSsJcmV0Ci0rLnNpemUJJHtQUkVGSVh9X2RlY3J5cHQsIC4tJHtQ UkVGSVh9X2RlY3J5cHQKLStfX18KLSt9Ci0rDAotKyMgX2Flc25pX1tlbnxkZV1jcnlwdFszNF0g YXJlIHByaXZhdGUgaW50ZXJmYWNlcywgTiBkZW5vdGVzIGludGVybGVhdmUKLSsjIGZhY3Rvci4g V2h5IDN4IHN1YnJvdXRpbmUgaXMgdXNlZCBpbiBsb29wcz8gRXZlbiB0aG91Z2ggYWVzW2VuY3xk ZWNdCi0rIyBsYXRlbmN5IGlzIDYsIGl0IHR1cm5lZCBvdXQgdGhhdCBpdCBjYW4gYmUgc2NoZWR1 bGVkIG9ubHkgZXZlcnkKLSsjICpzZWNvbmQqIGN5Y2xlLiBUaHVzIDN4IGludGVybGVhdmUgaXMg dGhlIG9uZSBwcm92aWRpbmcgb3B0aW1hbAotKyMgdXRpbGl6YXRpb24sIGkuZS4gd2hlbiBzdWJy b3V0aW5lJ3MgdGhyb3VnaHB1dCBpcyB2aXJ0dWFsbHkgc2FtZSBhcwotKyMgb2Ygbm9uLWludGVy bGVhdmVkIHN1YnJvdXRpbmUgW2ZvciBudW1iZXIgb2YgaW5wdXQgYmxvY2tzIHVwIHRvIDNdLgot KyMgVGhpcyBpcyB3aHkgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gaW1wbGVtZW50IDJ4IHN1YnJvdXRp bmUuIEFzIHNvb24KLSsjIGFzL2lmIEludGVsIGltcHJvdmVzIHRocm91Z2hwdXQgYnkgbWFraW5n IGl0IHBvc3NpYmxlIHRvIHNjaGVkdWxlCi0rIyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHF1ZXN0aW9u ICpldmVyeSogY3ljbGVzIEkgd291bGQgaGF2ZSB0bwotKyMgaW1wbGVtZW50IDZ4IGludGVybGVh dmUgYW5kIHVzZSBpdCBpbiBsb29wLi4uCi0rc3ViIGFlc25pX2dlbmVyYXRlMyB7Ci0rbXkgJGRp cj1zaGlmdDsKLSsjIEFzIGFscmVhZHkgbWVudGlvbmVkIGl0IHRha2VzIGluICRrZXkgYW5kICRy b3VuZHMsIHdoaWNoIGFyZSAqbm90KgotKyMgcHJlc2VydmVkLiAkaW5vdXRbMC0yXSBpcyBjaXBo ZXIvY2xlYXIgdGV4dC4uLgotKyRjb2RlLj08PF9fXzsKLSsudHlwZQlfYWVzbmlfJHtkaXJ9cnlw dDMsXEBhYmktb21uaXBvdGVudAotKy5hbGlnbgkxNgotK19hZXNuaV8ke2Rpcn1yeXB0MzoKLSsJ JG1vdmtleQkoJGtleSksJHJuZGtleTAKLSsJc2hyCVwkMSwkcm91bmRzCi0rCSRtb3ZrZXkJMTYo JGtleSksJHJuZGtleTEKLSsJbGVhCTMyKCRrZXkpLCRrZXkKLSsJcHhvcgkkcm5ka2V5MCwkaW5v dXQwCi0rCXB4b3IJJHJuZGtleTAsJGlub3V0MQotKwlweG9yCSRybmRrZXkwLCRpbm91dDIKLSsK LSsuTCR7ZGlyfV9sb29wMzoKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDAKLSsJJG1vdmtl eQkJKCRrZXkpLCRybmRrZXkwCi0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQxCi0rCWRlYwkJ JHJvdW5kcwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgotKwlhZXMke2Rpcn0JJHJuZGtl eTAsJGlub3V0MAotKwkkbW92a2V5CQkxNigka2V5KSwkcm5ka2V5MQotKwlhZXMke2Rpcn0JJHJu ZGtleTAsJGlub3V0MQotKwlsZWEJCTMyKCRrZXkpLCRrZXkKLSsJYWVzJHtkaXJ9CSRybmRrZXkw LCRpbm91dDIKLSsJam56CQkuTCR7ZGlyfV9sb29wMwotKwotKwlhZXMke2Rpcn0JJHJuZGtleTEs JGlub3V0MAotKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKLSsJYWVzJHtkaXJ9CSRybmRrZXkx LCRpbm91dDEKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKLSsJYWVzJHtkaXJ9bGFzdAkk cm5ka2V5MCwkaW5vdXQwCi0rCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0MQotKwlhZXMk e2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDIKLSsJcmV0Ci0rLnNpemUJX2Flc25pXyR7ZGlyfXJ5 cHQzLC4tX2Flc25pXyR7ZGlyfXJ5cHQzCi0rX19fCi0rfQotKyMgNHggaW50ZXJsZWF2ZSBpcyBp bXBsZW1lbnRlZCB0byBpbXByb3ZlIHNtYWxsIGJsb2NrIHBlcmZvcm1hbmNlLAotKyMgbW9zdCBu b3RhYmx5IFthbmQgbmF0dXJhbGx5XSA0IGJsb2NrIGJ5IH4zMCUuIE9uZSBjYW4gYXJndWUgdGhh dCBvbmUKLSsjIHNob3VsZCBoYXZlIGltcGxlbWVudGVkIDV4IGFzIHdlbGwsIGJ1dCBpbXByb3Zl bWVudCB3b3VsZCBiZSA8MjAlLAotKyMgc28gaXQncyBub3Qgd29ydGggaXQuLi4KLStzdWIgYWVz bmlfZ2VuZXJhdGU0IHsKLStteSAkZGlyPXNoaWZ0OwotKyMgQXMgYWxyZWFkeSBtZW50aW9uZWQg aXQgdGFrZXMgaW4gJGtleSBhbmQgJHJvdW5kcywgd2hpY2ggYXJlICpub3QqCi0rIyBwcmVzZXJ2 ZWQuICRpbm91dFswLTNdIGlzIGNpcGhlci9jbGVhciB0ZXh0Li4uCi0rJGNvZGUuPTw8X19fOwot Ky50eXBlCV9hZXNuaV8ke2Rpcn1yeXB0NCxcQGFiaS1vbW5pcG90ZW50Ci0rLmFsaWduCTE2Ci0r X2Flc25pXyR7ZGlyfXJ5cHQ0OgotKwkkbW92a2V5CSgka2V5KSwkcm5ka2V5MAotKwlzaHIJXCQx LCRyb3VuZHMKLSsJJG1vdmtleQkxNigka2V5KSwkcm5ka2V5MQotKwlsZWEJMzIoJGtleSksJGtl eQotKwlweG9yCSRybmRrZXkwLCRpbm91dDAKLSsJcHhvcgkkcm5ka2V5MCwkaW5vdXQxCi0rCXB4 b3IJJHJuZGtleTAsJGlub3V0MgotKwlweG9yCSRybmRrZXkwLCRpbm91dDMKLSsKLSsuTCR7ZGly fV9sb29wNDoKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDAKLSsJJG1vdmtleQkJKCRrZXkp LCRybmRrZXkwCi0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQxCi0rCWRlYwkJJHJvdW5kcwot KwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0 MwotKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MAotKwkkbW92a2V5CQkxNigka2V5KSwkcm5k a2V5MQotKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MQotKwlsZWEJCTMyKCRrZXkpLCRrZXkK LSsJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDIKLSsJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91 dDMKLSsJam56CQkuTCR7ZGlyfV9sb29wNAotKwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0 MAotKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91 dDEKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRp bm91dDMKLSsJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQwCi0rCWFlcyR7ZGlyfWxhc3QJ JHJuZGtleTAsJGlub3V0MQotKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDIKLSsJYWVz JHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQzCi0rCXJldAotKy5zaXplCV9hZXNuaV8ke2Rpcn1y eXB0NCwuLV9hZXNuaV8ke2Rpcn1yeXB0NAotK19fXwotK30KLSsmYWVzbmlfZ2VuZXJhdGUzKCJl bmMiKSBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKTsKLSsmYWVzbmlfZ2VuZXJhdGUzKCJkZWMiKTsK LSsmYWVzbmlfZ2VuZXJhdGU0KCJlbmMiKSBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKTsKLSsmYWVz bmlfZ2VuZXJhdGU0KCJkZWMiKTsKLSsMCi0raWYgKCRQUkVGSVggZXEgImFlc25pIikgewotKyMg dm9pZCBhZXNuaV9lY2JfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW4sIHZvaWQgKm91dCwKLSsjCQkJ ICBzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCi0rIwkJCSAgaW50IGVuYyk7Ci0r JGNvZGUuPTw8X19fOwotKy5nbG9ibAlhZXNuaV9lY2JfZW5jcnlwdAotKy50eXBlCWFlc25pX2Vj Yl9lbmNyeXB0LFxAZnVuY3Rpb24sNQotKy5hbGlnbgkxNgotK2Flc25pX2VjYl9lbmNyeXB0Ogot KwljbXAJXCQxNiwkbGVuCQkjIGNoZWNrIGxlbmd0aAotKwlqYgkuTGVjYl9yZXQKLSsKLSsJbW92 CTI0MCgka2V5KSwkcm91bmRzCSMgcHVsbCAkcm91bmRzCi0rCWFuZAlcJC0xNiwkbGVuCi0rCW1v dgkka2V5LCRrZXlfCQkjIGJhY2t1cCAka2V5Ci0rCXRlc3QJJXI4ZCwlcjhkCQkjIDV0aCBhcmd1 bWVudAotKwltb3YJJHJvdW5kcywkcm5kc18JCSMgYmFja3VwICRyb3VuZHMKLSsJanoJLkxlY2Jf ZGVjcnlwdAotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRUNCIEVOQ1JZUFQgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwotKwlzdWIJXCQweDQwLCRsZW4KLSsJamJlCS5MZWNi X2VuY190YWlsCi0rCWptcAkuTGVjYl9lbmNfbG9vcDMKLSsuYWxpZ24gMTYKLSsuTGVjYl9lbmNf bG9vcDM6Ci0rCW1vdnVwcwkoJGlucCksJGlub3V0MAotKwltb3Z1cHMJMHgxMCgkaW5wKSwkaW5v dXQxCi0rCW1vdnVwcwkweDIwKCRpbnApLCRpbm91dDIKLSsJY2FsbAlfYWVzbmlfZW5jcnlwdDMK LSsJc3ViCVwkMHgzMCwkbGVuCi0rCWxlYQkweDMwKCRpbnApLCRpbnAKLSsJbGVhCTB4MzAoJG91 dCksJG91dAotKwltb3Z1cHMJJGlub3V0MCwtMHgzMCgkb3V0KQotKwltb3YJJHJuZHNfLCRyb3Vu ZHMJCSMgcmVzdG9yZSAkcm91bmRzCi0rCW1vdnVwcwkkaW5vdXQxLC0weDIwKCRvdXQpCi0rCW1v dgkka2V5Xywka2V5CQkjIHJlc3RvcmUgJGtleQotKwltb3Z1cHMJJGlub3V0MiwtMHgxMCgkb3V0 KQotKwlqYQkuTGVjYl9lbmNfbG9vcDMKLSsKLSsuTGVjYl9lbmNfdGFpbDoKLSsJYWRkCVwkMHg0 MCwkbGVuCi0rCWp6CS5MZWNiX3JldAotKwotKwljbXAJXCQweDEwLCRsZW4KLSsJbW92dXBzCSgk aW5wKSwkaW5vdXQwCi0rCWplCS5MZWNiX2VuY19vbmUKLSsJY21wCVwkMHgyMCwkbGVuCi0rCW1v dnVwcwkweDEwKCRpbnApLCRpbm91dDEKLSsJamUJLkxlY2JfZW5jX3R3bwotKwljbXAJXCQweDMw LCRsZW4KLSsJbW92dXBzCTB4MjAoJGlucCksJGlub3V0MgotKwlqZQkuTGVjYl9lbmNfdGhyZWUK LSsJbW92dXBzCTB4MzAoJGlucCksJGlub3V0MwotKwljYWxsCV9hZXNuaV9lbmNyeXB0NAotKwlt b3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQotKwltb3Z1 cHMJJGlub3V0MiwweDIwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKLSsJam1w CS5MZWNiX3JldAotKy5hbGlnbgkxNgotKy5MZWNiX2VuY19vbmU6Ci0rX19fCi0rCSZhZXNuaV9n ZW5lcmF0ZTEoImVuYyIsJGtleSwkcm91bmRzKTsKLSskY29kZS49PDxfX187Ci0rCW1vdnVwcwkk aW5vdXQwLCgkb3V0KQotKwlqbXAJLkxlY2JfcmV0Ci0rLmFsaWduCTE2Ci0rLkxlY2JfZW5jX3R3 bzoKLSsJY2FsbAlfYWVzbmlfZW5jcnlwdDMKLSsJbW92dXBzCSRpbm91dDAsKCRvdXQpCi0rCW1v dnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSsJam1wCS5MZWNiX3JldAotKy5hbGlnbgkxNgotKy5M ZWNiX2VuY190aHJlZToKLSsJY2FsbAlfYWVzbmlfZW5jcnlwdDMKLSsJbW92dXBzCSRpbm91dDAs KCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSsJbW92dXBzCSRpbm91dDIsMHgy MCgkb3V0KQotKwlqbXAJLkxlY2JfcmV0Ci0rDCMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g RUNCIERFQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwotKy5hbGlnbgkxNgot Ky5MZWNiX2RlY3J5cHQ6Ci0rCXN1YglcJDB4NDAsJGxlbgotKwlqYmUJLkxlY2JfZGVjX3RhaWwK LSsJam1wCS5MZWNiX2RlY19sb29wMwotKy5hbGlnbiAxNgotKy5MZWNiX2RlY19sb29wMzoKLSsJ bW92dXBzCSgkaW5wKSwkaW5vdXQwCi0rCW1vdnVwcwkweDEwKCRpbnApLCRpbm91dDEKLSsJbW92 dXBzCTB4MjAoJGlucCksJGlub3V0MgotKwljYWxsCV9hZXNuaV9kZWNyeXB0MwotKwlzdWIJXCQw eDMwLCRsZW4KLSsJbGVhCTB4MzAoJGlucCksJGlucAotKwlsZWEJMHgzMCgkb3V0KSwkb3V0Ci0r CW1vdnVwcwkkaW5vdXQwLC0weDMwKCRvdXQpCi0rCW1vdgkkcm5kc18sJHJvdW5kcwkJIyByZXN0 b3JlICRyb3VuZHMKLSsJbW92dXBzCSRpbm91dDEsLTB4MjAoJG91dCkKLSsJbW92CSRrZXlfLCRr ZXkJCSMgcmVzdG9yZSAka2V5Ci0rCW1vdnVwcwkkaW5vdXQyLC0weDEwKCRvdXQpCi0rCWphCS5M ZWNiX2RlY19sb29wMwotKwotKy5MZWNiX2RlY190YWlsOgotKwlhZGQJXCQweDQwLCRsZW4KLSsJ anoJLkxlY2JfcmV0Ci0rCi0rCWNtcAlcJDB4MTAsJGxlbgotKwltb3Z1cHMJKCRpbnApLCRpbm91 dDAKLSsJamUJLkxlY2JfZGVjX29uZQotKwljbXAJXCQweDIwLCRsZW4KLSsJbW92dXBzCTB4MTAo JGlucCksJGlub3V0MQotKwlqZQkuTGVjYl9kZWNfdHdvCi0rCWNtcAlcJDB4MzAsJGxlbgotKwlt b3Z1cHMJMHgyMCgkaW5wKSwkaW5vdXQyCi0rCWplCS5MZWNiX2RlY190aHJlZQotKwltb3Z1cHMJ MHgzMCgkaW5wKSwkaW5vdXQzCi0rCWNhbGwJX2Flc25pX2RlY3J5cHQ0Ci0rCW1vdnVwcwkkaW5v dXQwLCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQy LDB4MjAoJG91dCkKLSsJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQotKwlqbXAJLkxlY2JfcmV0 Ci0rLmFsaWduCTE2Ci0rLkxlY2JfZGVjX29uZToKLStfX18KLSsJJmFlc25pX2dlbmVyYXRlMSgi ZGVjIiwka2V5LCRyb3VuZHMpOwotKyRjb2RlLj08PF9fXzsKLSsJbW92dXBzCSRpbm91dDAsKCRv dXQpCi0rCWptcAkuTGVjYl9yZXQKLSsuYWxpZ24JMTYKLSsuTGVjYl9kZWNfdHdvOgotKwljYWxs CV9hZXNuaV9kZWNyeXB0MwotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJbW92dXBzCSRpbm91 dDEsMHgxMCgkb3V0KQotKwlqbXAJLkxlY2JfcmV0Ci0rLmFsaWduCTE2Ci0rLkxlY2JfZGVjX3Ro cmVlOgotKwljYWxsCV9hZXNuaV9kZWNyeXB0MwotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJ bW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCi0r Ci0rLkxlY2JfcmV0OgotKwlyZXQKLSsuc2l6ZQlhZXNuaV9lY2JfZW5jcnlwdCwuLWFlc25pX2Vj Yl9lbmNyeXB0Ci0rX19fCi0rfQotKwwKLSsjIHZvaWQgJFBSRUZJWF9jYmNfZW5jcnlwdCAoY29u c3Qgdm9pZCAqaW5wLCB2b2lkICpvdXQsCi0rIwkJCSAgICBzaXplX3QgbGVuZ3RoLCBjb25zdCBB RVNfS0VZICprZXksCi0rIwkJCSAgICB1bnNpZ25lZCBjaGFyICppdnAsY29uc3QgaW50IGVuYyk7 Ci0rJHJlc2VydmVkID0gJHdpbjY0PzB4NDA6LTB4MTg7CSMgdXNlZCBpbiBkZWNyeXB0Ci0rJGNv ZGUuPTw8X19fOwotKy5nbG9ibAkke1BSRUZJWH1fY2JjX2VuY3J5cHQKLSsudHlwZQkke1BSRUZJ WH1fY2JjX2VuY3J5cHQsXEBmdW5jdGlvbiw2Ci0rLmFsaWduCTE2Ci0rJHtQUkVGSVh9X2NiY19l bmNyeXB0OgotKwl0ZXN0CSRsZW4sJGxlbgkJIyBjaGVjayBsZW5ndGgKLSsJanoJLkxjYmNfcmV0 Ci0rCi0rCW1vdgkyNDAoJGtleSksJHJuZHNfCSMgcHVsbCAkcm91bmRzCi0rCW1vdgkka2V5LCRr ZXlfCQkjIGJhY2t1cCAka2V5Ci0rCXRlc3QJJXI5ZCwlcjlkCQkjIDZ0aCBhcmd1bWVudAotKwlq egkuTGNiY19kZWNyeXB0Ci0rIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDQkMgRU5DUllQ VCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCi0rCW1vdnVwcwkoJGl2cCksJGlub3V0 MAkJIyBsb2FkIGl2IGFzIGluaXRpYWwgc3RhdGUKLSsJY21wCVwkMTYsJGxlbgotKwltb3YJJHJu ZHNfLCRyb3VuZHMKLSsJamIJLkxjYmNfZW5jX3RhaWwKLSsJc3ViCVwkMTYsJGxlbgotKwlqbXAJ LkxjYmNfZW5jX2xvb3AKLSsuYWxpZ24gMTYKLSsuTGNiY19lbmNfbG9vcDoKLSsJbW92dXBzCSgk aW5wKSwkaW5vdXQxCQkjIGxvYWQgaW5wdXQKLSsJbGVhCTE2KCRpbnApLCRpbnAKLSsJcHhvcgkk aW5vdXQxLCRpbm91dDAKLStfX18KLSsJJmFlc25pX2dlbmVyYXRlMSgiZW5jIiwka2V5LCRyb3Vu ZHMpOwotKyRjb2RlLj08PF9fXzsKLSsJc3ViCVwkMTYsJGxlbgotKwlsZWEJMTYoJG91dCksJG91 dAotKwltb3YJJHJuZHNfLCRyb3VuZHMJCSMgcmVzdG9yZSAkcm91bmRzCi0rCW1vdgkka2V5Xywk a2V5CQkjIHJlc3RvcmUgJGtleQotKwltb3Z1cHMJJGlub3V0MCwtMTYoJG91dCkJIyBzdG9yZSBv dXRwdXQKLSsJam5jCS5MY2JjX2VuY19sb29wCi0rCWFkZAlcJDE2LCRsZW4KLSsJam56CS5MY2Jj X2VuY190YWlsCi0rCW1vdnVwcwkkaW5vdXQwLCgkaXZwKQotKwlqbXAJLkxjYmNfcmV0Ci0rCi0r LkxjYmNfZW5jX3RhaWw6Ci0rCW1vdgkkbGVuLCVyY3gJIyB6YXBzICRrZXkKLSsJeGNoZwkkaW5w LCRvdXQJIyAkaW5wIGlzICVyc2kgYW5kICRvdXQgaXMgJXJkaSBub3cKLSsJLmxvbmcJMHg5MDY2 QTRGMwkjIHJlcCBtb3ZzYgotKwltb3YJXCQxNiwlZWN4CSMgemVybyB0YWlsCi0rCXN1YgkkbGVu LCVyY3gKLSsJeG9yCSVlYXgsJWVheAotKwkubG9uZwkweDkwNjZBQUYzCSMgcmVwIHN0b3NiCi0r CWxlYQktMTYoJXJkaSksJXJkaQkjIHJld2luZCAkb3V0IGJ5IDEgYmxvY2sKLSsJbW92CSRybmRz Xywkcm91bmRzCSMgcmVzdG9yZSAkcm91bmRzCi0rCW1vdgklcmRpLCVyc2kJIyAkaW5wIGFuZCAk b3V0IGFyZSB0aGUgc2FtZQotKwltb3YJJGtleV8sJGtleQkjIHJlc3RvcmUgJGtleQotKwl4b3IJ JGxlbiwkbGVuCSMgbGVuPTE2Ci0rCWptcAkuTGNiY19lbmNfbG9vcAkjIG9uZSBtb3JlIHNwaW4K LSsMIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDQkMgREVDUllQVCAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0jCi0rLmFsaWduCTE2Ci0rLkxjYmNfZGVjcnlwdDoKLStfX18KLSsk Y29kZS49PDxfX18gaWYgKCR3aW42NCk7Ci0rCWxlYQktMHg1OCglcnNwKSwlcnNwCi0rCW1vdmFw cwkleG1tNiwoJXJzcCkKLSsJbW92YXBzCSV4bW03LDB4MTAoJXJzcCkKLSsJbW92YXBzCSV4bW04 LDB4MjAoJXJzcCkKLSsJbW92YXBzCSV4bW05LDB4MzAoJXJzcCkKLSsuTGNiY19kZWNyeXB0X2Jv ZHk6Ci0rX19fCi0rJGNvZGUuPTw8X19fOwotKwltb3Z1cHMJKCRpdnApLCRpdgotKwlzdWIJXCQw eDQwLCRsZW4KLSsJbW92CSRybmRzXywkcm91bmRzCi0rCWpiZQkuTGNiY19kZWNfdGFpbAotKwlq bXAJLkxjYmNfZGVjX2xvb3AzCi0rLmFsaWduIDE2Ci0rLkxjYmNfZGVjX2xvb3AzOgotKwltb3Z1 cHMJKCRpbnApLCRpbm91dDAKLSsJbW92dXBzCTB4MTAoJGlucCksJGlub3V0MQotKwltb3Z1cHMJ MHgyMCgkaW5wKSwkaW5vdXQyCi0rCW1vdmFwcwkkaW5vdXQwLCRpbjAKLSsJbW92YXBzCSRpbm91 dDEsJGluMQotKwltb3ZhcHMJJGlub3V0MiwkaW4yCi0rCWNhbGwJX2Flc25pX2RlY3J5cHQzCi0r CXN1YglcJDB4MzAsJGxlbgotKwlsZWEJMHgzMCgkaW5wKSwkaW5wCi0rCWxlYQkweDMwKCRvdXQp LCRvdXQKLSsJcHhvcgkkaXYsJGlub3V0MAotKwlweG9yCSRpbjAsJGlub3V0MQotKwltb3ZhcHMJ JGluMiwkaXYKLSsJcHhvcgkkaW4xLCRpbm91dDIKLSsJbW92dXBzCSRpbm91dDAsLTB4MzAoJG91 dCkKLSsJbW92CSRybmRzXywkcm91bmRzCSMgcmVzdG9yZSAkcm91bmRzCi0rCW1vdnVwcwkkaW5v dXQxLC0weDIwKCRvdXQpCi0rCW1vdgkka2V5Xywka2V5CSMgcmVzdG9yZSAka2V5Ci0rCW1vdnVw cwkkaW5vdXQyLC0weDEwKCRvdXQpCi0rCWphCS5MY2JjX2RlY19sb29wMwotKwotKy5MY2JjX2Rl Y190YWlsOgotKwlhZGQJXCQweDQwLCRsZW4KLSsJbW92dXBzCSRpdiwoJGl2cCkKLSsJanoJLkxj YmNfZGVjX3JldAotKwotKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKLSsJY21wCVwkMHgxMCwkbGVu Ci0rCW1vdmFwcwkkaW5vdXQwLCRpbjAKLSsJamJlCS5MY2JjX2RlY19vbmUKLSsJbW92dXBzCTB4 MTAoJGlucCksJGlub3V0MQotKwljbXAJXCQweDIwLCRsZW4KLSsJbW92YXBzCSRpbm91dDEsJGlu MQotKwlqYmUJLkxjYmNfZGVjX3R3bwotKwltb3Z1cHMJMHgyMCgkaW5wKSwkaW5vdXQyCi0rCWNt cAlcJDB4MzAsJGxlbgotKwltb3ZhcHMJJGlub3V0MiwkaW4yCi0rCWpiZQkuTGNiY19kZWNfdGhy ZWUKLSsJbW92dXBzCTB4MzAoJGlucCksJGlub3V0MwotKwljYWxsCV9hZXNuaV9kZWNyeXB0NAot KwlweG9yCSRpdiwkaW5vdXQwCi0rCW1vdnVwcwkweDMwKCRpbnApLCRpdgotKwlweG9yCSRpbjAs JGlub3V0MQotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJcHhvcgkkaW4xLCRpbm91dDIKLSsJ bW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQotKwlweG9yCSRpbjIsJGlub3V0MwotKwltb3Z1cHMJ JGlub3V0MiwweDIwKCRvdXQpCi0rCW1vdmFwcwkkaW5vdXQzLCRpbm91dDAKLSsJbGVhCTB4MzAo JG91dCksJG91dAotKwlqbXAJLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkCi0rLmFsaWduCTE2Ci0r LkxjYmNfZGVjX29uZToKLStfX18KLSsJJmFlc25pX2dlbmVyYXRlMSgiZGVjIiwka2V5LCRyb3Vu ZHMpOwotKyRjb2RlLj08PF9fXzsKLSsJcHhvcgkkaXYsJGlub3V0MAotKwltb3ZhcHMJJGluMCwk aXYKLSsJam1wCS5MY2JjX2RlY190YWlsX2NvbGxlY3RlZAotKy5hbGlnbgkxNgotKy5MY2JjX2Rl Y190d286Ci0rCWNhbGwJX2Flc25pX2RlY3J5cHQzCi0rCXB4b3IJJGl2LCRpbm91dDAKLSsJcHhv cgkkaW4wLCRpbm91dDEKLSsJbW92dXBzCSRpbm91dDAsKCRvdXQpCi0rCW1vdmFwcwkkaW4xLCRp dgotKwltb3ZhcHMJJGlub3V0MSwkaW5vdXQwCi0rCWxlYQkweDEwKCRvdXQpLCRvdXQKLSsJam1w CS5MY2JjX2RlY190YWlsX2NvbGxlY3RlZAotKy5hbGlnbgkxNgotKy5MY2JjX2RlY190aHJlZToK LSsJY2FsbAlfYWVzbmlfZGVjcnlwdDMKLSsJcHhvcgkkaXYsJGlub3V0MAotKwlweG9yCSRpbjAs JGlub3V0MQotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJcHhvcgkkaW4xLCRpbm91dDIKLSsJ bW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQotKwltb3ZhcHMJJGluMiwkaXYKLSsJbW92YXBzCSRp bm91dDIsJGlub3V0MAotKwlsZWEJMHgyMCgkb3V0KSwkb3V0Ci0rCWptcAkuTGNiY19kZWNfdGFp bF9jb2xsZWN0ZWQKLSsuYWxpZ24JMTYKLSsuTGNiY19kZWNfdGFpbF9jb2xsZWN0ZWQ6Ci0rCWFu ZAlcJDE1LCRsZW4KLSsJbW92dXBzCSRpdiwoJGl2cCkKLSsJam56CS5MY2JjX2RlY190YWlsX3Bh cnRpYWwKLSsJbW92dXBzCSRpbm91dDAsKCRvdXQpCi0rCWptcAkuTGNiY19kZWNfcmV0Ci0rLkxj YmNfZGVjX3RhaWxfcGFydGlhbDoKLSsJbW92YXBzCSRpbm91dDAsJHJlc2VydmVkKCVyc3ApCi0r CW1vdgkkb3V0LCVyZGkKLSsJbW92CSRsZW4sJXJjeAotKwlsZWEJJHJlc2VydmVkKCVyc3ApLCVy c2kKLSsJLmxvbmcJMHg5MDY2QTRGMwkjIHJlcCBtb3ZzYgotKwotKy5MY2JjX2RlY19yZXQ6Ci0r X19fCi0rJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOwotKwltb3ZhcHMJKCVyc3ApLCV4bW02Ci0r CW1vdmFwcwkweDEwKCVyc3ApLCV4bW03Ci0rCW1vdmFwcwkweDIwKCVyc3ApLCV4bW04Ci0rCW1v dmFwcwkweDMwKCVyc3ApLCV4bW05Ci0rCWxlYQkweDU4KCVyc3ApLCVyc3AKLStfX18KLSskY29k ZS49PDxfX187Ci0rLkxjYmNfcmV0OgotKwlyZXQKLSsuc2l6ZQkke1BSRUZJWH1fY2JjX2VuY3J5 cHQsLi0ke1BSRUZJWH1fY2JjX2VuY3J5cHQKLStfX18KLSsMCi0rIyBpbnQgJFBSRUZJWF9zZXRf W2VufGRlXWNyeXB0X2tleSAoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwKLSsjCQkJCWlu dCBiaXRzLCBBRVNfS0VZICprZXkpCi0reyBteSAoJGlucCwkYml0cywka2V5KSA9IEBfNGFyZ3M7 Ci0rICAkYml0cyA9fiBzLyVyLyVlLzsKLSsKLSskY29kZS49PDxfX187Ci0rLmdsb2JsCSR7UFJF RklYfV9zZXRfZGVjcnlwdF9rZXkKLSsudHlwZQkke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5LFxA YWJpLW9tbmlwb3RlbnQKLSsuYWxpZ24JMTYKLSske1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5Ogot KwkuYnl0ZQkweDQ4LDB4ODMsMHhFQywweDA4CSMgc3ViIHJzcCw4Ci0rCWNhbGwJX2Flc25pX3Nl dF9lbmNyeXB0X2tleQotKwlzaGwJXCQ0LCRiaXRzCQkjIHJvdW5kcy0xIGFmdGVyIF9hZXNuaV9z ZXRfZW5jcnlwdF9rZXkKLSsJdGVzdAklZWF4LCVlYXgKLSsJam56CS5MZGVjX2tleV9yZXQKLSsJ bGVhCTE2KCRrZXksJGJpdHMpLCRpbnAJIyBwb2ludHMgYXQgdGhlIGVuZCBvZiBrZXkgc2NoZWR1 bGUKLSsKLSsJJG1vdmtleQkoJGtleSksJXhtbTAJCSMganVzdCBzd2FwCi0rCSRtb3ZrZXkJKCRp bnApLCV4bW0xCi0rCSRtb3ZrZXkJJXhtbTAsKCRpbnApCi0rCSRtb3ZrZXkJJXhtbTEsKCRrZXkp Ci0rCWxlYQkxNigka2V5KSwka2V5Ci0rCWxlYQktMTYoJGlucCksJGlucAotKwotKy5MZGVjX2tl eV9pbnZlcnNlOgotKwkkbW92a2V5CSgka2V5KSwleG1tMAkJIyBzd2FwIGFuZCBpbnZlcnNlCi0r CSRtb3ZrZXkJKCRpbnApLCV4bW0xCi0rCWFlc2ltYwkleG1tMCwleG1tMAotKwlhZXNpbWMJJXht bTEsJXhtbTEKLSsJbGVhCTE2KCRrZXkpLCRrZXkKLSsJbGVhCS0xNigkaW5wKSwkaW5wCi0rCWNt cAkka2V5LCRpbnAKLSsJJG1vdmtleQkleG1tMCwxNigkaW5wKQotKwkkbW92a2V5CSV4bW0xLC0x Nigka2V5KQotKwlqYQkuTGRlY19rZXlfaW52ZXJzZQotKwotKwkkbW92a2V5CSgka2V5KSwleG1t MAkJIyBpbnZlcnNlIG1pZGRsZQotKwlhZXNpbWMJJXhtbTAsJXhtbTAKLSsJJG1vdmtleQkleG1t MCwoJGlucCkKLSsuTGRlY19rZXlfcmV0OgotKwlhZGQJXCQ4LCVyc3AKLSsJcmV0Ci0rLkxTRUhf ZW5kX3NldF9kZWNyeXB0X2tleToKLSsuc2l6ZQkke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5LC4t JHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleQotK19fXwotKwwKLSsjIFRoaXMgaXMgYmFzZWQgb24g c3VibWlzc2lvbiBieQotKyMKLSsjCUh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgot KyMJVmlub2RoIEdvcGFsIDx2aW5vZGguZ29wYWxAaW50ZWwuY29tPgotKyMJS2FocmFtYW4gQWtk ZW1pcgotKyMKLSsjIEFncmVzc2l2ZWx5IG9wdGltaXplZCBpbiByZXNwZWN0IHRvIGFlc2tleWdl bmFzc2lzdCdzIGNyaXRpY2FsIHBhdGgKLSsjIGFuZCBpcyBjb250YWluZWQgaW4gJXhtbTAtNSB0 byBtZWV0IFdpbjY0IEFCSSByZXF1aXJlbWVudC4KLSsjCi0rJGNvZGUuPTw8X19fOwotKy5nbG9i bAkke1BSRUZJWH1fc2V0X2VuY3J5cHRfa2V5Ci0rLnR5cGUJJHtQUkVGSVh9X3NldF9lbmNyeXB0 X2tleSxcQGFiaS1vbW5pcG90ZW50Ci0rLmFsaWduCTE2Ci0rJHtQUkVGSVh9X3NldF9lbmNyeXB0 X2tleToKLStfYWVzbmlfc2V0X2VuY3J5cHRfa2V5OgotKwkuYnl0ZQkweDQ4LDB4ODMsMHhFQyww eDA4CSMgc3ViIHJzcCw4Ci0rCXRlc3QJJGlucCwkaW5wCi0rCW1vdglcJC0xLCVyYXgKLSsJanoJ LkxlbmNfa2V5X3JldAotKwl0ZXN0CSRrZXksJGtleQotKwlqegkuTGVuY19rZXlfcmV0Ci0rCi0r CW1vdnVwcwkoJGlucCksJXhtbTAJCSMgcHVsbCBmaXJzdCAxMjggYml0cyBvZiAqdXNlcktleQot KwlweG9yCSV4bW00LCV4bW00CQkjIGxvdyBkd29yZCBvZiB4bW00IGlzIGFzc3VtZWQgMAotKwls ZWEJMTYoJGtleSksJXJheAotKwljbXAJXCQyNTYsJGJpdHMKLSsJamUJLkwxNHJvdW5kcwotKwlj bXAJXCQxOTIsJGJpdHMKLSsJamUJLkwxMnJvdW5kcwotKwljbXAJXCQxMjgsJGJpdHMKLSsJam5l CS5MYmFkX2tleWJpdHMKLSsKLSsuTDEwcm91bmRzOgotKwltb3YJXCQ5LCRiaXRzCQkJIyAxMCBy b3VuZHMgZm9yIDEyOC1iaXQga2V5Ci0rCSRtb3ZrZXkJJXhtbTAsKCRrZXkpCQkJIyByb3VuZCAw Ci0rCWFlc2tleWdlbmFzc2lzdAlcJDB4MSwleG1tMCwleG1tMQkjIHJvdW5kIDEKLSsJY2FsbAkJ LkxrZXlfZXhwYW5zaW9uXzEyOF9jb2xkCi0rCWFlc2tleWdlbmFzc2lzdAlcJDB4MiwleG1tMCwl eG1tMQkjIHJvdW5kIDIKLSsJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzEyOAotKwlhZXNrZXlnZW5h c3Npc3QJXCQweDQsJXhtbTAsJXhtbTEJIyByb3VuZCAzCi0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lv bl8xMjgKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHg4LCV4bW0wLCV4bW0xCSMgcm91bmQgNAotKwlj YWxsCQkuTGtleV9leHBhbnNpb25fMTI4Ci0rCWFlc2tleWdlbmFzc2lzdAlcJDB4MTAsJXhtbTAs JXhtbTEJIyByb3VuZCA1Ci0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xMjgKLSsJYWVza2V5Z2Vu YXNzaXN0CVwkMHgyMCwleG1tMCwleG1tMQkjIHJvdW5kIDYKLSsJY2FsbAkJLkxrZXlfZXhwYW5z aW9uXzEyOAotKwlhZXNrZXlnZW5hc3Npc3QJXCQweDQwLCV4bW0wLCV4bW0xCSMgcm91bmQgNwot KwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4Ci0rCWFlc2tleWdlbmFzc2lzdAlcJDB4ODAsJXht bTAsJXhtbTEJIyByb3VuZCA4Ci0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xMjgKLSsJYWVza2V5 Z2VuYXNzaXN0CVwkMHgxYiwleG1tMCwleG1tMQkjIHJvdW5kIDkKLSsJY2FsbAkJLkxrZXlfZXhw YW5zaW9uXzEyOAotKwlhZXNrZXlnZW5hc3Npc3QJXCQweDM2LCV4bW0wLCV4bW0xCSMgcm91bmQg MTAKLSsJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzEyOAotKwkkbW92a2V5CSV4bW0wLCglcmF4KQot Kwltb3YJJGJpdHMsODAoJXJheCkJIyAyNDAoJXJkeCkKLSsJeG9yCSVlYXgsJWVheAotKwlqbXAJ LkxlbmNfa2V5X3JldAotKwotKy5hbGlnbgkxNgotKy5MMTJyb3VuZHM6Ci0rCW1vdnEJMTYoJGlu cCksJXhtbTIJCQkjIHJlbWFpbmluZyAxLzMgb2YgKnVzZXJLZXkKLSsJbW92CVwkMTEsJGJpdHMJ CQkjIDEyIHJvdW5kcyBmb3IgMTkyCi0rCSRtb3ZrZXkJJXhtbTAsKCRrZXkpCQkJIyByb3VuZCAw Ci0rCWFlc2tleWdlbmFzc2lzdAlcJDB4MSwleG1tMiwleG1tMQkjIHJvdW5kIDEsMgotKwljYWxs CQkuTGtleV9leHBhbnNpb25fMTkyYV9jb2xkCi0rCWFlc2tleWdlbmFzc2lzdAlcJDB4MiwleG1t MiwleG1tMQkjIHJvdW5kIDIsMwotKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTkyYgotKwlhZXNr ZXlnZW5hc3Npc3QJXCQweDQsJXhtbTIsJXhtbTEJIyByb3VuZCA0LDUKLSsJY2FsbAkJLkxrZXlf ZXhwYW5zaW9uXzE5MmEKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHg4LCV4bW0yLCV4bW0xCSMgcm91 bmQgNSw2Ci0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xOTJiCi0rCWFlc2tleWdlbmFzc2lzdAlc JDB4MTAsJXhtbTIsJXhtbTEJIyByb3VuZCA3LDgKLSsJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzE5 MmEKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHgyMCwleG1tMiwleG1tMQkjIHJvdW5kIDgsOQotKwlj YWxsCQkuTGtleV9leHBhbnNpb25fMTkyYgotKwlhZXNrZXlnZW5hc3Npc3QJXCQweDQwLCV4bW0y LCV4bW0xCSMgcm91bmQgMTAsMTEKLSsJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzE5MmEKLSsJYWVz a2V5Z2VuYXNzaXN0CVwkMHg4MCwleG1tMiwleG1tMQkjIHJvdW5kIDExLDEyCi0rCWNhbGwJCS5M a2V5X2V4cGFuc2lvbl8xOTJiCi0rCSRtb3ZrZXkJJXhtbTAsKCVyYXgpCi0rCW1vdgkkYml0cyw0 OCglcmF4KQkjIDI0MCglcmR4KQotKwl4b3IJJXJheCwgJXJheAotKwlqbXAJLkxlbmNfa2V5X3Jl dAotKwotKy5hbGlnbgkxNgotKy5MMTRyb3VuZHM6Ci0rCW1vdnVwcwkxNigkaW5wKSwleG1tMgkJ CSMgcmVtYW5pbmcgaGFsZiBvZiAqdXNlcktleQotKwltb3YJXCQxMywkYml0cwkJCSMgMTQgcm91 bmRzIGZvciAyNTYKLSsJbGVhCTE2KCVyYXgpLCVyYXgKLSsJJG1vdmtleQkleG1tMCwoJGtleSkJ CQkjIHJvdW5kIDAKLSsJJG1vdmtleQkleG1tMiwxNigka2V5KQkJCSMgcm91bmQgMQotKwlhZXNr ZXlnZW5hc3Npc3QJXCQweDEsJXhtbTIsJXhtbTEJIyByb3VuZCAyCi0rCWNhbGwJCS5Ma2V5X2V4 cGFuc2lvbl8yNTZhX2NvbGQKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHgxLCV4bW0wLCV4bW0xCSMg cm91bmQgMwotKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YgotKwlhZXNrZXlnZW5hc3Npc3QJ XCQweDIsJXhtbTIsJXhtbTEJIyByb3VuZCA0Ci0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8yNTZh Ci0rCWFlc2tleWdlbmFzc2lzdAlcJDB4MiwleG1tMCwleG1tMQkjIHJvdW5kIDUKLSsJY2FsbAkJ LkxrZXlfZXhwYW5zaW9uXzI1NmIKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHg0LCV4bW0yLCV4bW0x CSMgcm91bmQgNgotKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQotKwlhZXNrZXlnZW5hc3Np c3QJXCQweDQsJXhtbTAsJXhtbTEJIyByb3VuZCA3Ci0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8y NTZiCi0rCWFlc2tleWdlbmFzc2lzdAlcJDB4OCwleG1tMiwleG1tMQkjIHJvdW5kIDgKLSsJY2Fs bAkJLkxrZXlfZXhwYW5zaW9uXzI1NmEKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHg4LCV4bW0wLCV4 bW0xCSMgcm91bmQgOQotKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YgotKwlhZXNrZXlnZW5h c3Npc3QJXCQweDEwLCV4bW0yLCV4bW0xCSMgcm91bmQgMTAKLSsJY2FsbAkJLkxrZXlfZXhwYW5z aW9uXzI1NmEKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHgxMCwleG1tMCwleG1tMQkjIHJvdW5kIDEx Ci0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8yNTZiCi0rCWFlc2tleWdlbmFzc2lzdAlcJDB4MjAs JXhtbTIsJXhtbTEJIyByb3VuZCAxMgotKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQotKwlh ZXNrZXlnZW5hc3Npc3QJXCQweDIwLCV4bW0wLCV4bW0xCSMgcm91bmQgMTMKLSsJY2FsbAkJLkxr ZXlfZXhwYW5zaW9uXzI1NmIKLSsJYWVza2V5Z2VuYXNzaXN0CVwkMHg0MCwleG1tMiwleG1tMQkj IHJvdW5kIDE0Ci0rCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8yNTZhCi0rCSRtb3ZrZXkJJXhtbTAs KCVyYXgpCi0rCW1vdgkkYml0cywxNiglcmF4KQkjIDI0MCglcmR4KQotKwl4b3IJJXJheCwlcmF4 Ci0rCWptcAkuTGVuY19rZXlfcmV0Ci0rCi0rLmFsaWduCTE2Ci0rLkxiYWRfa2V5Yml0czoKLSsJ bW92CVwkLTIsJXJheAotKy5MZW5jX2tleV9yZXQ6Ci0rCWFkZAlcJDgsJXJzcAotKwlyZXQKLSsu TFNFSF9lbmRfc2V0X2VuY3J5cHRfa2V5OgotKwwKLSsuYWxpZ24JMTYKLSsuTGtleV9leHBhbnNp b25fMTI4OgotKwkkbW92a2V5CSV4bW0wLCglcmF4KQotKwlsZWEJMTYoJXJheCksJXJheAotKy5M a2V5X2V4cGFuc2lvbl8xMjhfY29sZDoKLSsJc2h1ZnBzCVwkMGIwMDAxMDAwMCwleG1tMCwleG1t NAotKwlweG9yCSV4bW00LCAleG1tMAotKwlzaHVmcHMJXCQwYjEwMDAxMTAwLCV4bW0wLCV4bW00 Ci0rCXB4b3IJJXhtbTQsICV4bW0wCi0rCXBzaHVmZAlcJDBiMTExMTExMTEsJXhtbTEsJXhtbTEJ IyBjcml0aWNhbCBwYXRoCi0rCXB4b3IJJXhtbTEsJXhtbTAKLSsJcmV0Ci0rCi0rLmFsaWduIDE2 Ci0rLkxrZXlfZXhwYW5zaW9uXzE5MmE6Ci0rCSRtb3ZrZXkJJXhtbTAsKCVyYXgpCi0rCWxlYQkx NiglcmF4KSwlcmF4Ci0rLkxrZXlfZXhwYW5zaW9uXzE5MmFfY29sZDoKLSsJbW92YXBzCSV4bW0y LCAleG1tNQotKy5Ma2V5X2V4cGFuc2lvbl8xOTJiX3dhcm06Ci0rCXNodWZwcwlcJDBiMDAwMTAw MDAsJXhtbTAsJXhtbTQKLSsJbW92YXBzCSV4bW0yLCV4bW0zCi0rCXB4b3IJJXhtbTQsJXhtbTAK LSsJc2h1ZnBzCVwkMGIxMDAwMTEwMCwleG1tMCwleG1tNAotKwlwc2xsZHEJXCQ0LCV4bW0zCi0r CXB4b3IJJXhtbTQsJXhtbTAKLSsJcHNodWZkCVwkMGIwMTAxMDEwMSwleG1tMSwleG1tMQkjIGNy aXRpY2FsIHBhdGgKLSsJcHhvcgkleG1tMywleG1tMgotKwlweG9yCSV4bW0xLCV4bW0wCi0rCXBz aHVmZAlcJDBiMTExMTExMTEsJXhtbTAsJXhtbTMKLSsJcHhvcgkleG1tMywleG1tMgotKwlyZXQK LSsKLSsuYWxpZ24gMTYKLSsuTGtleV9leHBhbnNpb25fMTkyYjoKLSsJbW92YXBzCSV4bW0wLCV4 bW0zCi0rCXNodWZwcwlcJDBiMDEwMDAxMDAsJXhtbTAsJXhtbTUKLSsJJG1vdmtleQkleG1tNSwo JXJheCkKLSsJc2h1ZnBzCVwkMGIwMTAwMTExMCwleG1tMiwleG1tMwotKwkkbW92a2V5CSV4bW0z LDE2KCVyYXgpCi0rCWxlYQkzMiglcmF4KSwlcmF4Ci0rCWptcAkuTGtleV9leHBhbnNpb25fMTky Yl93YXJtCi0rCi0rLmFsaWduCTE2Ci0rLkxrZXlfZXhwYW5zaW9uXzI1NmE6Ci0rCSRtb3ZrZXkJ JXhtbTIsKCVyYXgpCi0rCWxlYQkxNiglcmF4KSwlcmF4Ci0rLkxrZXlfZXhwYW5zaW9uXzI1NmFf Y29sZDoKLSsJc2h1ZnBzCVwkMGIwMDAxMDAwMCwleG1tMCwleG1tNAotKwlweG9yCSV4bW00LCV4 bW0wCi0rCXNodWZwcwlcJDBiMTAwMDExMDAsJXhtbTAsJXhtbTQKLSsJcHhvcgkleG1tNCwleG1t MAotKwlwc2h1ZmQJXCQwYjExMTExMTExLCV4bW0xLCV4bW0xCSMgY3JpdGljYWwgcGF0aAotKwlw eG9yCSV4bW0xLCV4bW0wCi0rCXJldAotKwotKy5hbGlnbiAxNgotKy5Ma2V5X2V4cGFuc2lvbl8y NTZiOgotKwkkbW92a2V5CSV4bW0wLCglcmF4KQotKwlsZWEJMTYoJXJheCksJXJheAotKwotKwlz aHVmcHMJXCQwYjAwMDEwMDAwLCV4bW0yLCV4bW00Ci0rCXB4b3IJJXhtbTQsJXhtbTIKLSsJc2h1 ZnBzCVwkMGIxMDAwMTEwMCwleG1tMiwleG1tNAotKwlweG9yCSV4bW00LCV4bW0yCi0rCXBzaHVm ZAlcJDBiMTAxMDEwMTAsJXhtbTEsJXhtbTEJIyBjcml0aWNhbCBwYXRoCi0rCXB4b3IJJXhtbTEs JXhtbTIKLSsJcmV0Ci0rLnNpemUJJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleSwuLSR7UFJFRklY fV9zZXRfZW5jcnlwdF9rZXkKLStfX18KLSt9Ci0rDAotKyRjb2RlLj08PF9fXzsKLSsuYXNjaXog ICJBRVMgZm9yIEludGVsIEFFUy1OSSwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3Jn PiIKLSsuYWxpZ24JNjQKLStfX18KLSsKLSsjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVy IChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKLSsjCQlDT05URVhUICpjb250 ZXh0LERJU1BBVENIRVJfQ09OVEVYVCAqZGlzcCkKLStpZiAoJHdpbjY0KSB7Ci0rJHJlYz0iJXJj eCI7Ci0rJGZyYW1lPSIlcmR4IjsKLSskY29udGV4dD0iJXI4IjsKLSskZGlzcD0iJXI5IjsKLSsK LSskY29kZS49PDxfX187Ci0rLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCi0rLnR5cGUJ Y2JjX3NlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAotKy5hbGlnbgkxNgotK2NiY19zZV9oYW5k bGVyOgotKwlwdXNoCSVyc2kKLSsJcHVzaAklcmRpCi0rCXB1c2gJJXJieAotKwlwdXNoCSVyYnAK LSsJcHVzaAklcjEyCi0rCXB1c2gJJXIxMwotKwlwdXNoCSVyMTQKLSsJcHVzaAklcjE1Ci0rCXB1 c2hmcQotKwlzdWIJXCQ2NCwlcnNwCi0rCi0rCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxs IGNvbnRleHQtPlJzcAotKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5S aXAKLSsKLSsJbGVhCS5MY2JjX2RlY3J5cHQoJXJpcCksJXIxMAotKwljbXAJJXIxMCwlcmJ4CQkj IGNvbnRleHQtPlJpcDwicHJvbG9ndWUiIGxhYmVsCi0rCWpiCS5MaW5fcHJvbG9ndWUKLSsKLSsJ bGVhCS5MY2JjX2RlY3J5cHRfYm9keSglcmlwKSwlcjEwCi0rCWNtcAklcjEwLCVyYngJCSMgY29u dGV4dC0+UmlwPGNiY19kZWNyeXB0X2JvZHkKLSsJamIJLkxyZXN0b3JlX3JheAotKwotKwlsZWEJ LkxjYmNfcmV0KCVyaXApLCVyMTAKLSsJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PSJl cGlsb2d1ZSIgbGFiZWwKLSsJamFlCS5MaW5fcHJvbG9ndWUKLSsKLSsJbGVhCTAoJXJheCksJXJz aQkJIyB0b3Agb2Ygc3RhY2sKLSsJbGVhCTUxMigkY29udGV4dCksJXJkaQkjICZjb250ZXh0Llht bTYKLSsJbW92CVwkOCwlZWN4CQkjIDQqc2l6ZW9mKCV4bW0wKS9zaXplb2YoJXJheCkKLSsJLmxv bmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQotKwlsZWEJMHg1OCglcmF4KSwlcmF4CQkj IGFkanVzdCBzdGFjayBwb2ludGVyCi0rCWptcAkuTGluX3Byb2xvZ3VlCi0rCi0rLkxyZXN0b3Jl X3JheDoKLSsJbW92CTEyMCgkY29udGV4dCksJXJheAotKy5MaW5fcHJvbG9ndWU6Ci0rCW1vdgk4 KCVyYXgpLCVyZGkKLSsJbW92CTE2KCVyYXgpLCVyc2kKLSsJbW92CSVyYXgsMTUyKCRjb250ZXh0 KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCi0rCW1vdgklcnNpLDE2OCgkY29udGV4dCkJIyByZXN0 b3JlIGNvbnRleHQtPlJzaQotKwltb3YJJXJkaSwxNzYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250 ZXh0LT5SZGkKLSsKLSsJam1wCS5MY29tbW9uX3NlaF9leGl0Ci0rLnNpemUJY2JjX3NlX2hhbmRs ZXIsLi1jYmNfc2VfaGFuZGxlcgotKwotKy50eXBlCWVjYl9zZV9oYW5kbGVyLFxAYWJpLW9tbmlw b3RlbnQKLSsuYWxpZ24JMTYKLStlY2Jfc2VfaGFuZGxlcjoKLSsJcHVzaAklcnNpCi0rCXB1c2gJ JXJkaQotKwlwdXNoCSVyYngKLSsJcHVzaAklcmJwCi0rCXB1c2gJJXIxMgotKwlwdXNoCSVyMTMK LSsJcHVzaAklcjE0Ci0rCXB1c2gJJXIxNQotKwlwdXNoZnEKLSsJc3ViCVwkNjQsJXJzcAotKwot Kwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKLSsJbW92CTgoJXJh eCksJXJkaQotKwltb3YJMTYoJXJheCksJXJzaQotKwltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMg cmVzdG9yZSBjb250ZXh0LT5Sc2kKLSsJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUg Y29udGV4dC0+UmRpCi0rCi0rLkxjb21tb25fc2VoX2V4aXQ6Ci0rCi0rCW1vdgk0MCgkZGlzcCks JXJkaQkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCi0rCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRl eHQKLSsJbW92CVwkMTU0LCVlY3gJCSMgc2l6ZW9mKENPTlRFWFQpCi0rCS5sb25nCTB4YTU0OGYz ZmMJCSMgY2xkOyByZXAgbW92c3EKLSsKLSsJbW92CSRkaXNwLCVyc2kKLSsJeG9yCSVyY3gsJXJj eAkJIyBhcmcxLCBVTldfRkxBR19OSEFORExFUgotKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIs IGRpc3AtPkltYWdlQmFzZQotKwltb3YJMCglcnNpKSwlcjgJCSMgYXJnMywgZGlzcC0+Q29udHJv bFBjCi0rCW1vdgkxNiglcnNpKSwlcjkJCSMgYXJnNCwgZGlzcC0+RnVuY3Rpb25FbnRyeQotKwlt b3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCi0rCWxlYQk1NiglcnNpKSwl cjExCQkjICZkaXNwLT5IYW5kbGVyRGF0YQotKwlsZWEJMjQoJXJzaSksJXIxMgkJIyAmZGlzcC0+ RXN0YWJsaXNoZXJGcmFtZQotKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1Ci0rCW1vdgklcjEx LDQwKCVyc3ApCQkjIGFyZzYKLSsJbW92CSVyMTIsNDgoJXJzcCkJCSMgYXJnNwotKwltb3YJJXJj eCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKLSsJY2FsbAkqX19pbXBfUnRsVmlydHVhbFVud2lu ZCglcmlwKQotKwotKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKLSsJ YWRkCVwkNjQsJXJzcAotKwlwb3BmcQotKwlwb3AJJXIxNQotKwlwb3AJJXIxNAotKwlwb3AJJXIx MwotKwlwb3AJJXIxMgotKwlwb3AJJXJicAotKwlwb3AJJXJieAotKwlwb3AJJXJkaQotKwlwb3AJ JXJzaQotKwlyZXQKLSsuc2l6ZQljYmNfc2VfaGFuZGxlciwuLWNiY19zZV9oYW5kbGVyCi0rCi0r LnNlY3Rpb24JLnBkYXRhCi0rLmFsaWduCTQKLSsJLnJ2YQkuTFNFSF9iZWdpbl8ke1BSRUZJWH1f ZWNiX2VuY3J5cHQKLSsJLnJ2YQkuTFNFSF9lbmRfJHtQUkVGSVh9X2VjYl9lbmNyeXB0Ci0rCS5y dmEJLkxTRUhfaW5mb19lY2IKLSsKLSsJLnJ2YQkuTFNFSF9iZWdpbl8ke1BSRUZJWH1fY2JjX2Vu Y3J5cHQKLSsJLnJ2YQkuTFNFSF9lbmRfJHtQUkVGSVh9X2NiY19lbmNyeXB0Ci0rCS5ydmEJLkxT RUhfaW5mb19jYmMKLSsKLSsJLnJ2YQkke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5Ci0rCS5ydmEJ LkxTRUhfZW5kX3NldF9kZWNyeXB0X2tleQotKwkucnZhCS5MU0VIX2luZm9fa2V5Ci0rCi0rCS5y dmEJJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleQotKwkucnZhCS5MU0VIX2VuZF9zZXRfZW5jcnlw dF9rZXkKLSsJLnJ2YQkuTFNFSF9pbmZvX2tleQotKy5zZWN0aW9uCS54ZGF0YQotKy5hbGlnbgk4 Ci0rLkxTRUhfaW5mb19lY2I6Ci0rCS5ieXRlCTksMCwwLDAKLSsJLnJ2YQllY2Jfc2VfaGFuZGxl cgotKy5MU0VIX2luZm9fY2JjOgotKwkuYnl0ZQk5LDAsMCwwCi0rCS5ydmEJY2JjX3NlX2hhbmRs ZXIKLSsuTFNFSF9pbmZvX2tleToKLSsJLmJ5dGUJMHgwMSwweDA0LDB4MDEsMHgwMAotKwkuYnl0 ZQkweDA0LDB4MDIsMHgwMCwweDAwCi0rX19fCi0rfQotKwotK3N1YiByZXggewotKyBsb2NhbCAq b3Bjb2RlPXNoaWZ0OwotKyBteSAoJGRzdCwkc3JjKT1AXzsKLSsKLSsgICBpZiAoJGRzdD49OCB8 fCAkc3JjPj04KSB7Ci0rCSRyZXg9MHg0MDsKLSsJJHJleHw9MHgwNCBpZigkZHN0Pj04KTsKLSsJ JHJleHw9MHgwMSBpZigkc3JjPj04KTsKLSsJcHVzaCBAb3Bjb2RlLCRyZXg7Ci0rICAgfQotK30K LSsKLStzdWIgYWVzbmkgewotKyAgbXkgJGxpbmU9c2hpZnQ7Ci0rICBteSBAb3Bjb2RlPSgweDY2 KTsKLSsKLSsgICAgaWYgKCRsaW5lPX4vKGFlc2tleWdlbmFzc2lzdClccytcJChbeDAtOWEtZl0r KSxccyoleG1tKFswLTldKyksXHMqJXhtbShbMC05XSspLykgewotKwlyZXgoXEBvcGNvZGUsJDQs JDMpOwotKwlwdXNoIEBvcGNvZGUsMHgwZiwweDNhLDB4ZGY7Ci0rCXB1c2ggQG9wY29kZSwweGMw fCgkMyY3KXwoKCQ0JjcpPDwzKTsJIyBNb2RSL00KLSsJbXkgJGM9JDI7Ci0rCXB1c2ggQG9wY29k ZSwkYz1+L14wLz9vY3QoJGMpOiRjOwotKwlyZXR1cm4gIi5ieXRlXHQiLmpvaW4oJywnLEBvcGNv ZGUpOwotKyAgICB9Ci0rICAgIGVsc2lmICgkbGluZT1+LyhhZXNbYS16XSspXHMrJXhtbShbMC05 XSspLFxzKiV4bW0oWzAtOV0rKS8pIHsKLSsJbXkgJW9wY29kZWxldCA9ICgKLSsJCSJhZXNpbWMi ID0+IDB4ZGIsCi0rCQkiYWVzZW5jIiA9PiAweGRjLAkiYWVzZW5jbGFzdCIgPT4gMHhkZCwKLSsJ CSJhZXNkZWMiID0+IDB4ZGUsCSJhZXNkZWNsYXN0IiA9PiAweGRmCi0rCSk7Ci0rCXJldHVybiB1 bmRlZiBpZiAoIWRlZmluZWQoJG9wY29kZWxldHskMX0pKTsKLSsJcmV4KFxAb3Bjb2RlLCQzLCQy KTsKLSsJcHVzaCBAb3Bjb2RlLDB4MGYsMHgzOCwkb3Bjb2RlbGV0eyQxfTsKLSsJcHVzaCBAb3Bj b2RlLDB4YzB8KCQyJjcpfCgoJDMmNyk8PDMpOwkjIE1vZFIvTQotKwlyZXR1cm4gIi5ieXRlXHQi LmpvaW4oJywnLEBvcGNvZGUpOwotKyAgICB9Ci0rICAgIHJldHVybiAkbGluZTsKLSt9Ci0rCi0r JGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2VtOwotKyRjb2RlID1+IHMvXGIoYWVz LioleG1tWzAtOV0rKS4qJC9hZXNuaSgkMSkvZ2VtOwotKwotK3ByaW50ICRjb2RlOwotKwotK2Ns b3NlIFNURE9VVDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9hZXMvTWFrZWZpbGUu YWVzbmkgb3BlbnNzbC0xLjAuMGIvY3J5cHRvL2Flcy9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4w LjBiL2NyeXB0by9hZXMvTWFrZWZpbGUuYWVzbmkJMjAwOC0xMi0yMyAxMjozMzowMC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9jcnlwdG8vYWVzL01ha2VmaWxlCTIwMTAtMTEt MTYgMTc6MzM6MjMuMDAwMDAwMDAwICswMTAwCi1AQCAtNTAsOSArNTAsMTMgQEAgYWVzLWlhNjQu czogYXNtL2Flcy1pYTY0LlMKLSAKLSBhZXMtNTg2LnM6CWFzbS9hZXMtNTg2LnBsIC4uL3Blcmxh c20veDg2YXNtLnBsCi0gCSQoUEVSTCkgYXNtL2Flcy01ODYucGwgJChQRVJMQVNNX1NDSEVNRSkg JChDRkxBR1MpICQoUFJPQ0VTU09SKSA+ICRACi0rYWVzbmkteDg2LnM6CWFzbS9hZXNuaS14ODYu cGwgLi4vcGVybGFzbS94ODZhc20ucGwKLSsJJChQRVJMKSBhc20vYWVzbmkteDg2LnBsICQoUEVS TEFTTV9TQ0hFTUUpICQoQ0ZMQUdTKSAkKFBST0NFU1NPUikgPiAkQAotIAotIGFlcy14ODZfNjQu czogYXNtL2Flcy14ODZfNjQucGwKLSAJJChQRVJMKSBhc20vYWVzLXg4Nl82NC5wbCAkKFBFUkxB U01fU0NIRU1FKSA+ICRACi0rYWVzbmkteDg2XzY0LnM6IGFzbS9hZXNuaS14ODZfNjQucGwKLSsJ JChQRVJMKSBhc20vYWVzbmkteDg2XzY0LnBsICQoUEVSTEFTTV9TQ0hFTUUpID4gJEAKLSAKLSBh ZXMtc3BhcmN2OS5zOiBhc20vYWVzLXNwYXJjdjkucGwKLSAJJChQRVJMKSBhc20vYWVzLXNwYXJj djkucGwgJChDRkxBR1MpID4gJEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9lbmdp bmUvZW5nX2Flc25pLmMuYWVzbmkgb3BlbnNzbC0xLjAuMGIvY3J5cHRvL2VuZ2luZS9lbmdfYWVz bmkuYwotLS0tIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9lbmdpbmUvZW5nX2Flc25pLmMuYWVzbmkJ MjAxMC0xMS0xNiAxNzozMzoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9j cnlwdG8vZW5naW5lL2VuZ19hZXNuaS5jCTIwMTAtMTEtMTYgMTc6MzM6MjMuMDAwMDAwMDAwICsw MTAwCi1AQCAtMCwwICsxLDQxMyBAQAotKy8qCi0rICogU3VwcG9ydCBmb3IgSW50ZWwgQUVTLU5J IGludHJ1Y3Rpb24gc2V0Ci0rICogICBBdXRob3I6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50 ZWwuY29tPgotKyAqCi0rICogSW50ZWwgQUVTLU5JIGlzIGEgbmV3IHNldCBvZiBTaW5nbGUgSW5z dHJ1Y3Rpb24gTXVsdGlwbGUgRGF0YQotKyAqIChTSU1EKSBpbnN0cnVjdGlvbnMgdGhhdCBhcmUg Z29pbmcgdG8gYmUgaW50cm9kdWNlZCBpbiB0aGUgbmV4dAotKyAqIGdlbmVyYXRpb24gb2YgSW50 ZWwgcHJvY2Vzc29yLCBhcyBvZiAyMDA5LiBUaGVzZSBpbnN0cnVjdGlvbnMKLSsgKiBlbmFibGUg ZmFzdCBhbmQgc2VjdXJlIGRhdGEgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiwgdXNpbmcgdGhl Ci0rICogQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCAoQUVTKSwgZGVmaW5lZCBieSBGSVBT IFB1YmxpY2F0aW9uCi0rICogbnVtYmVyIDE5Ny4gIFRoZSBhcmNoaXRlY3R1cmUgaW50cm9kdWNl cyBzaXggaW5zdHJ1Y3Rpb25zIHRoYXQKLSsgKiBvZmZlciBmdWxsIGhhcmR3YXJlIHN1cHBvcnQg Zm9yIEFFUy4gRm91ciBvZiB0aGVtIHN1cHBvcnQgaGlnaAotKyAqIHBlcmZvcm1hbmNlIGRhdGEg ZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiwgYW5kIHRoZSBvdGhlciB0d28KLSsgKiBpbnN0cnVj dGlvbnMgc3VwcG9ydCB0aGUgQUVTIGtleSBleHBhbnNpb24gcHJvY2VkdXJlLgotKyAqCi0rICog VGhlIHdoaXRlIHBhcGVyIGNhbiBiZSBkb3dubG9hZGVkIGZyb206Ci0rICogICBodHRwOi8vc29m dHdhcmVjb21tdW5pdHkuaW50ZWwuY29tL2lzbi9kb3dubG9hZHMvaW50ZWxhdngvQUVTLUluc3Ry dWN0aW9ucy1TZXRfV1AucGRmCi0rICoKLSsgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gZW5naW5l cy9lX3BhZGxvY2suYwotKyAqLwotKwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAxOTk5LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xj b25mLmg+Ci0rCi0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fSFcpICYmICFkZWZpbmVkKE9QRU5T U0xfTk9fSFdfQUVTX05JKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FFUykKLSsKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9k c28uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9tb2Rlcy5oPgotKwotKy8qIEFFUy1OSSBpcyBhdmFpbGFi bGUgKk9OTFkqIG9uIHNvbWUgeDg2IENQVXMuICBOb3Qgb25seSB0aGF0IGl0Ci0rICAgZG9lc24n dCBleGlzdCBlbHNld2hlcmUsIGJ1dCBpdCBldmVuIGNhbid0IGJlIGNvbXBpbGVkIG9uIG90aGVy Ci0rICAgcGxhdGZvcm1zISAqLwotKyN1bmRlZiBDT01QSUxFX0hXX0FFU05JCi0rI2lmIChkZWZp bmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKLSsgICAgIGRlZmluZWQo X01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBcCi0rICAgICBkZWZpbmVkKE9QRU5TU0xf SUEzMl9TU0UyKSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pCi0rI2RlZmluZSBDT01QSUxF X0hXX0FFU05JCi0rc3RhdGljIEVOR0lORSAqRU5HSU5FX2Flc25pICh2b2lkKTsKLSsjZW5kaWYK LSsKLSt2b2lkIEVOR0lORV9sb2FkX2Flc25pICh2b2lkKQotK3sKLSsvKiBPbiBub24teDg2IENQ VXMgaXQganVzdCByZXR1cm5zLiAqLwotKyNpZmRlZiBDT01QSUxFX0hXX0FFU05JCi0rCUVOR0lO RSAqdG9hZGQgPSBFTkdJTkVfYWVzbmkoKTsKLSsJaWYgKCF0b2FkZCkKLSsJCXJldHVybjsKLSsJ RU5HSU5FX2FkZCAodG9hZGQpOwotKwlFTkdJTkVfcmVnaXN0ZXJfY29tcGxldGUgKHRvYWRkKTsK LSsJRU5HSU5FX2ZyZWUgKHRvYWRkKTsKLSsJRVJSX2NsZWFyX2Vycm9yICgpOwotKyNlbmRpZgot K30KLSsKLSsjaWZkZWYgQ09NUElMRV9IV19BRVNOSQotK2ludCBhZXNuaV9zZXRfZW5jcnlwdF9r ZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgaW50IGJpdHMsCi0rCQkJICAgICAgQUVT X0tFWSAqa2V5KTsKLStpbnQgYWVzbmlfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKnVzZXJLZXksIGludCBiaXRzLAotKwkJCSAgICAgIEFFU19LRVkgKmtleSk7Ci0rCi0rdm9p ZCBhZXNuaV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpv dXQsCi0rCQkgICAgICAgY29uc3QgQUVTX0tFWSAqa2V5KTsKLSt2b2lkIGFlc25pX2RlY3J5cHQo Y29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCSAgICAgICBj b25zdCBBRVNfS0VZICprZXkpOwotKwotK3ZvaWQgYWVzbmlfZWNiX2VuY3J5cHQoY29uc3QgdW5z aWduZWQgY2hhciAqaW4sCi0rCQkJICAgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCSAgIHNpemVf dCBsZW5ndGgsCi0rCQkJICAgY29uc3QgQUVTX0tFWSAqa2V5LAotKwkJCSAgIGludCBlbmMpOwot K3ZvaWQgYWVzbmlfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCi0rCQkJICAg dW5zaWduZWQgY2hhciAqb3V0LAotKwkJCSAgIHNpemVfdCBsZW5ndGgsCi0rCQkJICAgY29uc3Qg QUVTX0tFWSAqa2V5LAotKwkJCSAgIHVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCBlbmMpOwotKwot Ky8qIEZ1bmN0aW9uIGZvciBFTkdJTkUgZGV0ZWN0aW9uIGFuZCBjb250cm9sICovCi0rc3RhdGlj IGludCBhZXNuaV9pbml0KEVOR0lORSAqZSk7Ci0rCi0rLyogQ2lwaGVyIFN0dWZmICovCi0rc3Rh dGljIGludCBhZXNuaV9jaXBoZXJzKEVOR0lORSAqZSwgY29uc3QgRVZQX0NJUEhFUiAqKmNpcGhl ciwKLSsJCQkJY29uc3QgaW50ICoqbmlkcywgaW50IG5pZCk7Ci0rCi0rI2RlZmluZSBBRVNOSV9N SU5fQUxJR04JMTYKLSsjZGVmaW5lIEFFU05JX0FMSUdOKHgpIFwKLSsJKCh2b2lkICopKCgodW5z aWduZWQgbG9uZykoeCkrQUVTTklfTUlOX0FMSUdOLTEpJn4oQUVTTklfTUlOX0FMSUdOLTEpKSkK LSsKLSsvKiBFbmdpbmUgbmFtZXMgKi8KLStzdGF0aWMgY29uc3QgY2hhciAgIGFlc25pX2lkW10g PSAiYWVzbmkiLAotKwkJICAgIGFlc25pX25hbWVbXSA9ICJJbnRlbCBBRVMtTkkgZW5naW5lIiwK LSsJCSAgICBub19hZXNuaV9uYW1lW10gPSAiSW50ZWwgQUVTLU5JIGVuZ2luZSAobm8tYWVzbmkp IjsKLSsKLSsvKiA9PT09PSBFbmdpbmUgIm1hbmFnZW1lbnQiIGZ1bmN0aW9ucyA9PT09PSAqLwot KwotKyNpZiBkZWZpbmVkKF9XSU4zMikKLSt0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgSUEzMkNB UDsKLSsjZWxzZQotK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElBMzJDQVA7Ci0rI2VuZGlm Ci0rCi0rLyogUHJlcGFyZSB0aGUgRU5HSU5FIHN0cnVjdHVyZSBmb3IgcmVnaXN0cmF0aW9uICov Ci0rc3RhdGljIGludAotK2Flc25pX2JpbmRfaGVscGVyKEVOR0lORSAqZSkKLSt7Ci0rCWludCBl bmdhZ2U7Ci0rCWlmIChzaXplb2YoT1BFTlNTTF9pYTMyY2FwX1ApID4gNCkgewotKwkJZW5nYWdl ID0gKE9QRU5TU0xfaWEzMmNhcF9QID4+IDU3KSAmIDE7Ci0rCX0gZWxzZSB7Ci0rCQlJQTMyQ0FQ IE9QRU5TU0xfaWEzMl9jcHVpZCh2b2lkKTsKLSsJCWVuZ2FnZSA9IChPUEVOU1NMX2lhMzJfY3B1 aWQoKSA+PiA1NykgJiAxOwotKwl9Ci0rCi0rCS8qIFJlZ2lzdGVyIGV2ZXJ5dGhpbmcgb3IgcmV0 dXJuIHdpdGggYW4gZXJyb3IgKi8KLSsJaWYgKCFFTkdJTkVfc2V0X2lkKGUsIGFlc25pX2lkKSB8 fAotKwkgICAgIUVOR0lORV9zZXRfbmFtZShlLCBlbmdhZ2UgPyBhZXNuaV9uYW1lIDogbm9fYWVz bmlfbmFtZSkgfHwKLSsKLSsJICAgICFFTkdJTkVfc2V0X2luaXRfZnVuY3Rpb24oZSwgYWVzbmlf aW5pdCkgfHwKLSsJICAgIChlbmdhZ2UgJiYgIUVOR0lORV9zZXRfY2lwaGVycyAoZSwgYWVzbmlf Y2lwaGVycykpCi0rCSAgICApCi0rCQlyZXR1cm4gMDsKLSsKLSsJLyogRXZlcnl0aGluZyBsb29r cyBnb29kICovCi0rCXJldHVybiAxOwotK30KLSsKLSsvKiBDb25zdHJ1Y3RvciAqLwotK3N0YXRp YyBFTkdJTkUgKgotK0VOR0lORV9hZXNuaSh2b2lkKQotK3sKLSsJRU5HSU5FICplbmcgPSBFTkdJ TkVfbmV3KCk7Ci0rCi0rCWlmICghZW5nKSB7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlp ZiAoIWFlc25pX2JpbmRfaGVscGVyKGVuZykpIHsKLSsJCUVOR0lORV9mcmVlKGVuZyk7Ci0rCQly ZXR1cm4gTlVMTDsKLSsJfQotKwotKwlyZXR1cm4gZW5nOwotK30KLSsKLSsvKiBDaGVjayBhdmFp bGFiaWxpdHkgb2YgdGhlIGVuZ2luZSAqLwotK3N0YXRpYyBpbnQKLSthZXNuaV9pbml0KEVOR0lO RSAqZSkKLSt7Ci0rCXJldHVybiAxOwotK30KLSsKLSsjaWYgZGVmaW5lZChOSURfYWVzXzEyOF9j ZmIxMjgpICYmICEgZGVmaW5lZCAoTklEX2Flc18xMjhfY2ZiKQotKyNkZWZpbmUgTklEX2Flc18x MjhfY2ZiCU5JRF9hZXNfMTI4X2NmYjEyOAotKyNlbmRpZgotKwotKyNpZiBkZWZpbmVkKE5JRF9h ZXNfMTI4X29mYjEyOCkgJiYgISBkZWZpbmVkIChOSURfYWVzXzEyOF9vZmIpCi0rI2RlZmluZSBO SURfYWVzXzEyOF9vZmIJTklEX2Flc18xMjhfb2ZiMTI4Ci0rI2VuZGlmCi0rCi0rI2lmIGRlZmlu ZWQoTklEX2Flc18xOTJfY2ZiMTI4KSAmJiAhIGRlZmluZWQgKE5JRF9hZXNfMTkyX2NmYikKLSsj ZGVmaW5lIE5JRF9hZXNfMTkyX2NmYglOSURfYWVzXzE5Ml9jZmIxMjgKLSsjZW5kaWYKLSsKLSsj aWYgZGVmaW5lZChOSURfYWVzXzE5Ml9vZmIxMjgpICYmICEgZGVmaW5lZCAoTklEX2Flc18xOTJf b2ZiKQotKyNkZWZpbmUgTklEX2Flc18xOTJfb2ZiCU5JRF9hZXNfMTkyX29mYjEyOAotKyNlbmRp ZgotKwotKyNpZiBkZWZpbmVkKE5JRF9hZXNfMjU2X2NmYjEyOCkgJiYgISBkZWZpbmVkIChOSURf YWVzXzI1Nl9jZmIpCi0rI2RlZmluZSBOSURfYWVzXzI1Nl9jZmIJTklEX2Flc18yNTZfY2ZiMTI4 Ci0rI2VuZGlmCi0rCi0rI2lmIGRlZmluZWQoTklEX2Flc18yNTZfb2ZiMTI4KSAmJiAhIGRlZmlu ZWQgKE5JRF9hZXNfMjU2X29mYikKLSsjZGVmaW5lIE5JRF9hZXNfMjU2X29mYglOSURfYWVzXzI1 Nl9vZmIxMjgKLSsjZW5kaWYKLSsKLSsvKiBMaXN0IG9mIHN1cHBvcnRlZCBjaXBoZXJzLiAqLwot K3N0YXRpYyBpbnQgYWVzbmlfY2lwaGVyX25pZHNbXSA9IHsKLSsJTklEX2Flc18xMjhfZWNiLAot KwlOSURfYWVzXzEyOF9jYmMsCi0rCU5JRF9hZXNfMTI4X2NmYiwKLSsJTklEX2Flc18xMjhfb2Zi LAotKwotKwlOSURfYWVzXzE5Ml9lY2IsCi0rCU5JRF9hZXNfMTkyX2NiYywKLSsJTklEX2Flc18x OTJfY2ZiLAotKwlOSURfYWVzXzE5Ml9vZmIsCi0rCi0rCU5JRF9hZXNfMjU2X2VjYiwKLSsJTklE X2Flc18yNTZfY2JjLAotKwlOSURfYWVzXzI1Nl9jZmIsCi0rCU5JRF9hZXNfMjU2X29mYiwKLSt9 OwotK3N0YXRpYyBpbnQgYWVzbmlfY2lwaGVyX25pZHNfbnVtID0KLSsJKHNpemVvZihhZXNuaV9j aXBoZXJfbmlkcykvc2l6ZW9mKGFlc25pX2NpcGhlcl9uaWRzWzBdKSk7Ci0rCi0rdHlwZWRlZiBz dHJ1Y3QKLSt7Ci0rCUFFU19LRVkga3M7Ci0rCXVuc2lnbmVkIGludCBfcGFkMVszXTsKLSt9IEFF U05JX0tFWTsKLSsKLStzdGF0aWMgaW50Ci0rYWVzbmlfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFgg KmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcl9rZXksCi0rCQkgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaXYsIGludCBlbmMpCi0rewotKwlpbnQgcmV0OwotKwlBRVNfS0VZICprZXkgPSBB RVNOSV9BTElHTihjdHgtPmNpcGhlcl9kYXRhKTsKLSsKLSsJaWYgKChjdHgtPmNpcGhlci0+Zmxh Z3MgJiBFVlBfQ0lQSF9NT0RFKSA9PSBFVlBfQ0lQSF9DRkJfTU9ERQotKwkgICAgfHwgKGN0eC0+ Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX01PREUpID09IEVWUF9DSVBIX09GQl9NT0RFCi0rCSAg ICB8fCBlbmMpCi0rCQlyZXQ9YWVzbmlfc2V0X2VuY3J5cHRfa2V5KHVzZXJfa2V5LCBjdHgtPmtl eV9sZW4gKiA4LCBrZXkpOwotKwllbHNlCi0rCQlyZXQ9YWVzbmlfc2V0X2RlY3J5cHRfa2V5KHVz ZXJfa2V5LCBjdHgtPmtleV9sZW4gKiA4LCBrZXkpOwotKwotKwlpZihyZXQgPCAwKSB7Ci0rCQlF VlBlcnIoRVZQX0ZfQUVTTklfSU5JVF9LRVksRVZQX1JfQUVTX0tFWV9TRVRVUF9GQUlMRUQpOwot KwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgYWVz bmlfY2lwaGVyX2VjYihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0r CQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCi0rewlBRVNfS0VZICprZXkg PSBBRVNOSV9BTElHTihjdHgtPmNpcGhlcl9kYXRhKTsKLSsJYWVzbmlfZWNiX2VuY3J5cHQoaW4s IG91dCwgaW5sLCBrZXksIGN0eC0+ZW5jcnlwdCk7Ci0rCXJldHVybiAxOwotK30KLStzdGF0aWMg aW50IGFlc25pX2NpcGhlcl9jYmMoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LAotKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQotK3sJQUVTX0tF WSAqa2V5ID0gQUVTTklfQUxJR04oY3R4LT5jaXBoZXJfZGF0YSk7Ci0rCWFlc25pX2NiY19lbmNy eXB0KGluLCBvdXQsIGlubCwga2V5LAotKwkJCSAgICAgIGN0eC0+aXYsIGN0eC0+ZW5jcnlwdCk7 Ci0rCXJldHVybiAxOwotK30KLStzdGF0aWMgaW50IGFlc25pX2NpcGhlcl9jZmIoRVZQX0NJUEhF Ul9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmluLCBzaXplX3QgaW5sKQotK3sJQUVTX0tFWSAqa2V5ID0gQUVTTklfQUxJR04oY3R4LT5jaXBo ZXJfZGF0YSk7Ci0rCUNSWVBUT19jZmIxMjhfZW5jcnlwdChpbiwgb3V0LCBpbmwsIGtleSwgY3R4 LT5pdiwKLSsJCQkJJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQsCi0rCQkJCShibG9jazEyOF9mKWFl c25pX2VuY3J5cHQpOwotKwlyZXR1cm4gMTsKLSt9Ci0rc3RhdGljIGludCBhZXNuaV9jaXBoZXJf b2ZiKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCSBjb25zdCB1 bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkKLSt7CUFFU19LRVkgKmtleSA9IEFFU05JX0FM SUdOKGN0eC0+Y2lwaGVyX2RhdGEpOwotKwlDUllQVE9fb2ZiMTI4X2VuY3J5cHQoaW4sIG91dCwg aW5sLCBrZXksIGN0eC0+aXYsCi0rCQkJCSZjdHgtPm51bSwgKGJsb2NrMTI4X2YpYWVzbmlfZW5j cnlwdCk7Ci0rCXJldHVybiAxOwotK30KLSsKLSsjZGVmaW5lIEFFU19CTE9DS19TSVpFCQkxNgot KwotKyNkZWZpbmUgRVZQX0NJUEhFUl9ibG9ja19zaXplX0VDQglBRVNfQkxPQ0tfU0laRQotKyNk ZWZpbmUgRVZQX0NJUEhFUl9ibG9ja19zaXplX0NCQwlBRVNfQkxPQ0tfU0laRQotKyNkZWZpbmUg RVZQX0NJUEhFUl9ibG9ja19zaXplX09GQgkxCi0rI2RlZmluZSBFVlBfQ0lQSEVSX2Jsb2NrX3Np emVfQ0ZCCTEKLSsKLSsvKiBEZWNsYXJpbmcgc28gbWFueSBjaXBoZXJzIGJ5IGhhbmQgd291bGQg YmUgYSBwYWluLgotKyAgIEluc3RlYWQgaW50cm9kdWNlIGEgYml0IG9mIHByZXByb2Nlc3NvciBt YWdpYyA6LSkgKi8KLSsjZGVmaW5lCURFQ0xBUkVfQUVTX0VWUChrc2l6ZSxsbW9kZSx1bW9kZSkJ XAotK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGFlc25pXyMja3NpemUjI18jI2xtb2RlID0gewlc Ci0rCU5JRF9hZXNfIyNrc2l6ZSMjXyMjbG1vZGUsCQkJXAotKwlFVlBfQ0lQSEVSX2Jsb2NrX3Np emVfIyN1bW9kZSwJCQlcCi0rCWtzaXplIC8gOCwJCQkJCVwKLSsJQUVTX0JMT0NLX1NJWkUsCQkJ CQlcCi0rCTAgfCBFVlBfQ0lQSF8jI3Vtb2RlIyNfTU9ERSwJCQlcCi0rCWFlc25pX2luaXRfa2V5 LAkJCQlcCi0rCWFlc25pX2NpcGhlcl8jI2xtb2RlLAkJCQlcCi0rCU5VTEwsCQkJCQkJXAotKwlz aXplb2YoQUVTTklfS0VZKSwJCQkJXAotKwlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAkJCQlcCi0r CUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCQkJCVwKLSsJTlVMTCwJCQkJCQlcCi0rCU5VTEwJCQkJ CQlcCi0rfQotKwotK0RFQ0xBUkVfQUVTX0VWUCgxMjgsZWNiLEVDQik7Ci0rREVDTEFSRV9BRVNf RVZQKDEyOCxjYmMsQ0JDKTsKLStERUNMQVJFX0FFU19FVlAoMTI4LGNmYixDRkIpOwotK0RFQ0xB UkVfQUVTX0VWUCgxMjgsb2ZiLE9GQik7Ci0rCi0rREVDTEFSRV9BRVNfRVZQKDE5MixlY2IsRUNC KTsKLStERUNMQVJFX0FFU19FVlAoMTkyLGNiYyxDQkMpOwotK0RFQ0xBUkVfQUVTX0VWUCgxOTIs Y2ZiLENGQik7Ci0rREVDTEFSRV9BRVNfRVZQKDE5MixvZmIsT0ZCKTsKLSsKLStERUNMQVJFX0FF U19FVlAoMjU2LGVjYixFQ0IpOwotK0RFQ0xBUkVfQUVTX0VWUCgyNTYsY2JjLENCQyk7Ci0rREVD TEFSRV9BRVNfRVZQKDI1NixjZmIsQ0ZCKTsKLStERUNMQVJFX0FFU19FVlAoMjU2LG9mYixPRkIp OwotKwotK3N0YXRpYyBpbnQKLSthZXNuaV9jaXBoZXJzIChFTkdJTkUgKmUsIGNvbnN0IEVWUF9D SVBIRVIgKipjaXBoZXIsCi0rCQkgICAgICBjb25zdCBpbnQgKipuaWRzLCBpbnQgbmlkKQotK3sK LSsJLyogTm8gc3BlY2lmaWMgY2lwaGVyID0+IHJldHVybiBhIGxpc3Qgb2Ygc3VwcG9ydGVkIG5p ZHMgLi4uICovCi0rCWlmICghY2lwaGVyKSB7Ci0rCQkqbmlkcyA9IGFlc25pX2NpcGhlcl9uaWRz OwotKwkJcmV0dXJuIGFlc25pX2NpcGhlcl9uaWRzX251bTsKLSsJfQotKwotKwkvKiAuLi4gb3Ig dGhlIHJlcXVlc3RlZCAiY2lwaGVyIiBvdGhlcndpc2UgKi8KLSsJc3dpdGNoIChuaWQpIHsKLSsJ Y2FzZSBOSURfYWVzXzEyOF9lY2I6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzEyOF9lY2I7Ci0rCQli cmVhazsKLSsJY2FzZSBOSURfYWVzXzEyOF9jYmM6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzEyOF9j YmM7Ci0rCQlicmVhazsKLSsJY2FzZSBOSURfYWVzXzEyOF9jZmI6Ci0rCQkqY2lwaGVyID0gJmFl c25pXzEyOF9jZmI7Ci0rCQlicmVhazsKLSsJY2FzZSBOSURfYWVzXzEyOF9vZmI6Ci0rCQkqY2lw aGVyID0gJmFlc25pXzEyOF9vZmI7Ci0rCQlicmVhazsKLSsKLSsJY2FzZSBOSURfYWVzXzE5Ml9l Y2I6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzE5Ml9lY2I7Ci0rCQlicmVhazsKLSsJY2FzZSBOSURf YWVzXzE5Ml9jYmM6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzE5Ml9jYmM7Ci0rCQlicmVhazsKLSsJ Y2FzZSBOSURfYWVzXzE5Ml9jZmI6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzE5Ml9jZmI7Ci0rCQli cmVhazsKLSsJY2FzZSBOSURfYWVzXzE5Ml9vZmI6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzE5Ml9v ZmI7Ci0rCQlicmVhazsKLSsKLSsJY2FzZSBOSURfYWVzXzI1Nl9lY2I6Ci0rCQkqY2lwaGVyID0g JmFlc25pXzI1Nl9lY2I7Ci0rCQlicmVhazsKLSsJY2FzZSBOSURfYWVzXzI1Nl9jYmM6Ci0rCQkq Y2lwaGVyID0gJmFlc25pXzI1Nl9jYmM7Ci0rCQlicmVhazsKLSsJY2FzZSBOSURfYWVzXzI1Nl9j ZmI6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzI1Nl9jZmI7Ci0rCQlicmVhazsKLSsJY2FzZSBOSURf YWVzXzI1Nl9vZmI6Ci0rCQkqY2lwaGVyID0gJmFlc25pXzI1Nl9vZmI7Ci0rCQlicmVhazsKLSsK LSsJZGVmYXVsdDoKLSsJCS8qIFNvcnJ5LCB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgTklEICovCi0r CQkqY2lwaGVyID0gTlVMTDsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCXJldHVybiAxOwotK30K LSsKLSsjZW5kaWYgLyogQ09NUElMRV9IV19BRVNOSSAqLwotKyNlbmRpZiAvKiAhZGVmaW5lZChP UEVOU1NMX05PX0hXKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0hXX0FFU05JKSAmJiAhZGVmaW5l ZChPUEVOU1NMX05PX0FFUykgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9lbmdp bmUvZW5nX2FsbC5jLmFlc25pIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5j Ci0tLS0gb3BlbnNzbC0xLjAuMGIvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuYWVzbmkJMjAxMC0x MS0xNiAxNzozMzoyMi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9jcnlwdG8v ZW5naW5lL2VuZ19hbGwuYwkyMDEwLTExLTE2IDE3OjMzOjIzLjAwMDAwMDAwMCArMDEwMAotQEAg LTg1LDYgKzg1LDkgQEAgdm9pZCBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXModm9pZCkKLSAj aWYgIWRlZmluZWQoT1BFTlNTTF9OT19IVykgJiYgKGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRl ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoSEFWRV9DUllQVE9ERVYpKQotIAlFTkdJTkVf bG9hZF9jcnlwdG9kZXYoKTsKLSAjZW5kaWYKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19IVykg JiYgIWRlZmluZWQoT1BFTlNTTF9OT19IV19BRVNOSSkKLSsJRU5HSU5FX2xvYWRfYWVzbmkoKTsK LSsjZW5kaWYKLSAJRU5HSU5FX2xvYWRfZHluYW1pYygpOwotICNpZm5kZWYgT1BFTlNTTF9OT19T VEFUSUNfRU5HSU5FCi0gI2lmbmRlZiBPUEVOU1NMX05PX0hXCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wYi9jcnlwdG8vZW5naW5lL2VuZ2luZS5oLmFlc25pIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9l bmdpbmUvZW5naW5lLmgKLS0tLSBvcGVuc3NsLTEuMC4wYi9jcnlwdG8vZW5naW5lL2VuZ2luZS5o LmFlc25pCTIwMTAtMTEtMTYgMTc6MzM6MjIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMGIvY3J5cHRvL2VuZ2luZS9lbmdpbmUuaAkyMDEwLTExLTE2IDE3OjMzOjIzLjAwMDAwMDAw MCArMDEwMAotQEAgLTMzOCw2ICszMzgsNyBAQCB2b2lkIEVOR0lORV9sb2FkX2dvc3Qodm9pZCk7 Ci0gI2VuZGlmCi0gI2VuZGlmCi0gdm9pZCBFTkdJTkVfbG9hZF9jcnlwdG9kZXYodm9pZCk7Ci0r dm9pZCBFTkdJTkVfbG9hZF9hZXNuaSh2b2lkKTsKLSB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5f ZW5naW5lcyh2b2lkKTsKLSAKLSAvKiBHZXQgYW5kIHNldCBnbG9iYWwgZmxhZ3MgKEVOR0lORV9U QUJMRV9GTEFHXyoqKikgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbgotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGIvY3J5cHRvL2VuZ2luZS9NYWtlZmlsZS5hZXNuaSBvcGVuc3NsLTEuMC4wYi9jcnlwdG8v ZW5naW5lL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMGIvY3J5cHRvL2VuZ2luZS9NYWtlZmls ZS5hZXNuaQkyMDEwLTExLTE1IDE1OjQ0OjQ5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjBiL2NyeXB0by9lbmdpbmUvTWFrZWZpbGUJMjAxMC0xMS0xNiAxNzozMzoyMy4wMDAwMDAw MDAgKzAxMDAKLUBAIC0yMSwxMiArMjEsMTQgQEAgTElCU1JDPSBlbmdfZXJyLmMgZW5nX2xpYi5j IGVuZ19saXN0LmMgZQotIAllbmdfdGFibGUuYyBlbmdfcGtleS5jIGVuZ19mYXQuYyBlbmdfYWxs LmMgXAotIAl0Yl9yc2EuYyB0Yl9kc2EuYyB0Yl9lY2RzYS5jIHRiX2RoLmMgdGJfZWNkaC5jIHRi X3JhbmQuYyB0Yl9zdG9yZS5jIFwKLSAJdGJfY2lwaGVyLmMgdGJfZGlnZXN0LmMgdGJfcGttZXRo LmMgdGJfYXNubXRoLmMgXAotLQllbmdfb3BlbnNzbC5jIGVuZ19jbmYuYyBlbmdfZHluLmMgZW5n X2NyeXB0b2Rldi5jCi0rCWVuZ19vcGVuc3NsLmMgZW5nX2NuZi5jIGVuZ19keW4uYyBlbmdfY3J5 cHRvZGV2LmMgXAotKwllbmdfYWVzbmkuYwotIExJQk9CSj0gZW5nX2Vyci5vIGVuZ19saWIubyBl bmdfbGlzdC5vIGVuZ19pbml0Lm8gZW5nX2N0cmwubyBcCi0gCWVuZ190YWJsZS5vIGVuZ19wa2V5 Lm8gZW5nX2ZhdC5vIGVuZ19hbGwubyBcCi0gCXRiX3JzYS5vIHRiX2RzYS5vIHRiX2VjZHNhLm8g dGJfZGgubyB0Yl9lY2RoLm8gdGJfcmFuZC5vIHRiX3N0b3JlLm8gXAotIAl0Yl9jaXBoZXIubyB0 Yl9kaWdlc3QubyB0Yl9wa21ldGgubyB0Yl9hc25tdGgubyBcCi0tCWVuZ19vcGVuc3NsLm8gZW5n X2NuZi5vIGVuZ19keW4ubyBlbmdfY3J5cHRvZGV2Lm8KLSsJZW5nX29wZW5zc2wubyBlbmdfY25m Lm8gZW5nX2R5bi5vIGVuZ19jcnlwdG9kZXYubyBcCi0rCWVuZ19hZXNuaS5vCi0gCi0gU1JDPSAk KExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9ldnAvZXZwX2Vyci5j LmFlc25pIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9ldnAvZXZwX2Vyci5jCi0tLS0gb3BlbnNzbC0x LjAuMGIvY3J5cHRvL2V2cC9ldnBfZXJyLmMuYWVzbmkJMjAxMC0xMS0xNiAxNzozMzoyMi4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9jcnlwdG8vZXZwL2V2cF9lcnIuYwkyMDEw LTExLTE2IDE3OjMzOjIzLjAwMDAwMDAwMCArMDEwMAotQEAgLTEsNiArMSw2IEBACi0gLyogY3J5 cHRvL2V2cC9ldnBfZXJyLmMgKi8KLSAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLSAqIENvcHlyaWdodCAoYykg MTk5OS0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq IENvcHlyaWdodCAoYykgMTk5OS0yMDA5IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotICAqCi0gICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1AQCAtNzAsNiAr NzAsNyBAQAotIAotIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9mdW5jdHNbXT0KLSAJ ewotK3tFUlJfRlVOQyhFVlBfRl9BRVNOSV9JTklUX0tFWSksCSJBRVNOSV9JTklUX0tFWSJ9LAot IHtFUlJfRlVOQyhFVlBfRl9BRVNfSU5JVF9LRVkpLAkiQUVTX0lOSVRfS0VZIn0sCi0ge0VSUl9G VU5DKEVWUF9GX0NBTUVMTElBX0lOSVRfS0VZKSwJIkNBTUVMTElBX0lOSVRfS0VZIn0sCi0ge0VS Ul9GVU5DKEVWUF9GX0QySV9QS0VZKSwJIkQySV9QS0VZIn0sCi1AQCAtODYsNyArODcsNyBAQCBz dGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKEVWUF9G X0VWUF9ESUdFU1RJTklUX0VYKSwJIkVWUF9EaWdlc3RJbml0X2V4In0sCi0ge0VSUl9GVU5DKEVW UF9GX0VWUF9FTkNSWVBURklOQUxfRVgpLAkiRVZQX0VuY3J5cHRGaW5hbF9leCJ9LAotIHtFUlJf RlVOQyhFVlBfRl9FVlBfTURfQ1RYX0NPUFlfRVgpLAkiRVZQX01EX0NUWF9jb3B5X2V4In0sCi0t e0VSUl9GVU5DKEVWUF9GX0VWUF9NRF9TSVpFKSwJIkVWUF9NRF9TSVpFIn0sCi0re0VSUl9GVU5D KEVWUF9GX0VWUF9NRF9TSVpFKSwJIkVWUF9NRF9zaXplIn0sCi0ge0VSUl9GVU5DKEVWUF9GX0VW UF9PUEVOSU5JVCksCSJFVlBfT3BlbkluaXQifSwKLSB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BCRV9B TEdfQUREKSwJIkVWUF9QQkVfYWxnX2FkZCJ9LAotIHtFUlJfRlVOQyhFVlBfRl9FVlBfUEJFX0FM R19BRERfVFlQRSksCSJFVlBfUEJFX2FsZ19hZGRfdHlwZSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGIvY3J5cHRvL2V2cC9ldnAuaC5hZXNuaSBvcGVuc3NsLTEuMC4wYi9jcnlwdG8vZXZwL2V2 cC5oCi0tLS0gb3BlbnNzbC0xLjAuMGIvY3J5cHRvL2V2cC9ldnAuaC5hZXNuaQkyMDEwLTExLTE2 IDE3OjMzOjIyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBiL2NyeXB0by9ldnAv ZXZwLmgJMjAxMC0xMS0xNiAxNzozMzoyMy4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMTY3LDYgKzEx NjcsNyBAQCB2b2lkIEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOwotIC8qIEVycm9yIGNvZGVz IGZvciB0aGUgRVZQIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsj ZGVmaW5lIEVWUF9GX0FFU05JX0lOSVRfS0VZCQkJCSAxNjMKLSAjZGVmaW5lIEVWUF9GX0FFU19J TklUX0tFWQkJCQkgMTMzCi0gI2RlZmluZSBFVlBfRl9DQU1FTExJQV9JTklUX0tFWQkJCQkgMTU5 Ci0gI2RlZmluZSBFVlBfRl9EMklfUEtFWQkJCQkJIDEwMAotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGIvdGVzdC90ZXN0X2Flc25pLmFlc25pIG9wZW5zc2wtMS4wLjBiL3Rlc3QvdGVzdF9hZXNuaQot LS0tIG9wZW5zc2wtMS4wLjBiL3Rlc3QvdGVzdF9hZXNuaS5hZXNuaQkyMDEwLTExLTE2IDE3OjMz OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBiL3Rlc3QvdGVzdF9hZXNuaQky MDEwLTExLTE2IDE3OjMzOjIzLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw2OSBAQAotKyMh L2Jpbi9zaAotKwotK1BST0c9JDEKLSsKLStpZiBbIC14ICRQUk9HIF07IHRoZW4KLSsgICAgaWYg ZXhwciAieGAkUFJPRyB2ZXJzaW9uYCIgOiAieE9wZW5TU0wiID4gL2Rldi9udWxsOyB0aGVuCi0r CToKLSsgICAgZWxzZQotKwllY2hvICIkUFJPRyBpcyBub3QgT3BlblNTTCBleGVjdXRhYmxlIgot KwlleGl0IDEKLSsgICAgZmkKLStlbHNlCi0rICAgIGVjaG8gIiRQUk9HIGlzIG5vdCBleGVjdXRh YmxlIgotKyAgICBleGl0IDE7Ci0rZmkKLSsKLStpZiAkUFJPRyBlbmdpbmUgYWVzbmkgfCBncmVw IC12IG5vLWFlc25pOyB0aGVuCi0rCi0rICAgIEhBU0g9YGNhdCAkUFJPRyB8ICRQUk9HIGRnc3Qg LWhleGAKLSsKLSsgICAgQUVTX0FMR1M9IglhZXMtMTI4LWVjYiBhZXMtMTkyLWVjYiBhZXMtMjU2 LWVjYiBcCi0rCQlhZXMtMTI4LWNiYyBhZXMtMTkyLWNiYyBhZXMtMjU2LWNiYyBcCi0rCQlhZXMt MTI4LWNmYiBhZXMtMTkyLWNmYiBhZXMtMjU2LWNmYiBcCi0rCQlhZXMtMTI4LW9mYiBhZXMtMTky LW9mYiBhZXMtMjU2LW9mYiIKLSsgICAgQlVGU0laRT0iMTYgMzIgNDggNjQgODAgOTYgMTI4IDE0 NCA5OTkiCi0rCi0rICAgIG5lcnI9MAotKwotKyAgICBmb3IgYWxnIGluICRBRVNfQUxHUzsgZG8K LSsJZWNobyAkYWxnCi0rCWZvciBidWZzaXplIGluICRCVUZTSVpFOyBkbwotKwkgICAgVEVTVD1g KAljYXQgJFBST0cgfCBcCi0rCQkkUFJPRyBlbmMgLWUgLWsgIiRIQVNIIiAtJGFsZyAtYnVmc2l6 ZSAkYnVmc2l6ZSAtZW5naW5lIGFlc25pIHwgXAotKwkJJFBST0cgZW5jIC1kIC1rICIkSEFTSCIg LSRhbGcgfCBcCi0rCQkkUFJPRyBkZ3N0IC1oZXggKSAyPi9kZXYvbnVsbGAKLSsJICAgIGlmIFsg IiRURVNUIiAhPSAiJEhBU0giIF07IHRoZW4KLSsJCWVjaG8gIi0kYWxnLyRidWZzaXplIGVuY3J5 cHQgdGVzdCBmYWlsZWQiCi0rCQluZXJyPWBleHByICRuZXJyICsgMWAKLSsJICAgIGZpCi0rCWRv bmUKLSsJZm9yIGJ1ZnNpemUgaW4gJEJVRlNJWkU7IGRvIAotKwkgICAgVEVTVD1gKAljYXQgJFBS T0cgfCBcCi0rCQkkUFJPRyBlbmMgLWUgLWsgIiRIQVNIIiAtJGFsZyB8IFwKLSsJCSRQUk9HIGVu YyAtZCAtayAiJEhBU0giIC0kYWxnIC1idWZzaXplICRidWZzaXplIC1lbmdpbmUgYWVzbmkgfCBc Ci0rCQkkUFJPRyBkZ3N0IC1oZXggKSAyPi9kZXYvbnVsbGAKLSsJICAgIGlmIFsgIiRURVNUIiAh PSAiJEhBU0giIF07IHRoZW4KLSsJCWVjaG8gIi0kYWxnLyRidWZzaXplIGRlY3J5cHQgdGVzdCBm YWlsZWQiCi0rCQluZXJyPWBleHByICRuZXJyICsgMWAKLSsJICAgIGZpCi0rCWRvbmUKLSsJVEVT VD1gKAljYXQgJFBST0cgfCBcCi0rCQkkUFJPRyBlbmMgLWUgLWsgIiRIQVNIIiAtJGFsZyAtZW5n aW5lIGFlc25pIHwgXAotKwkJJFBST0cgZW5jIC1kIC1rICIkSEFTSCIgLSRhbGcgLWVuZ2luZSBh ZXNuaSB8IFwKLSsJCSRQUk9HIGRnc3QgLWhleCApIDI+L2Rldi9udWxsYAotKwlpZiBbICIkVEVT VCIgIT0gIiRIQVNIIiBdOyB0aGVuCi0rCQllY2hvICItJGFsZyBlbi9kZWNyeXB0IHRlc3QgZmFp bGVkIgotKwkJbmVycj1gZXhwciAkbmVyciArIDFgCi0rCWZpCi0rICAgIGRvbmUKLSsKLSsgICAg aWYgWyAkbmVyciAtZ3QgMCBdOyB0aGVuCi0rCWVjaG8gIkFFU05JIGVuZ2luZSB0ZXN0IGZhaWxl ZC4iCi0rCWV4aXQgMTsKLSsgICAgZmkKLStlbHNlCi0rICAgIGVjaG8gIkFFU05JIGVuZ2luZSBp cyBub3QgYXZhaWxhYmxlIgotK2ZpCi0rCi0rZXhpdCAwCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0x LjAuMGItaXB2Ni1hcHBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMGItaXB2Ni1hcHBzLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODVhNWQ4Li4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjBiLWlwdjYtYXBwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5NiArMCwwIEBA Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYi9hcHBzL3NfYXBwcy5oLmlwdjYtYXBwcyBvcGVuc3Ns LTEuMC4wYi9hcHBzL3NfYXBwcy5oCi0tLS0gb3BlbnNzbC0xLjAuMGIvYXBwcy9zX2FwcHMuaC5p cHY2LWFwcHMJMjAxMC0xMS0xNiAxNzoxOToyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wYi9hcHBzL3NfYXBwcy5oCTIwMTAtMTEtMTYgMTc6MTk6MjkuMDAwMDAwMDAwICswMTAw Ci1AQCAtMTQ4LDcgKzE0OCw3IEBAIHR5cGVkZWYgZmRfbWFzayBmZF9zZXQ7Ci0gI2RlZmluZSBQ T1JUX1NUUiAgICAgICAgIjQ0MzMiCi0gI2RlZmluZSBQUk9UT0NPTCAgICAgICAgInRjcCIKLSAK LS1pbnQgZG9fc2VydmVyKGludCBwb3J0LCBpbnQgdHlwZSwgaW50ICpyZXQsIGludCAoKmNiKSAo Y2hhciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQg Y2hhciAqY29udGV4dCk7Ci0raW50IGRvX3NlcnZlcihjaGFyICpwb3J0LCBpbnQgdHlwZSwgaW50 ICpyZXQsIGludCAoKmNiKSAoY2hhciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpj b250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCk7Ci0gI2lmZGVmIEhFQURFUl9YNTA5X0gK LSBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5X2NhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFgg KmN0eCk7Ci0gI2VuZGlmCi1AQCAtMTU2LDEwICsxNTYsOSBAQCBpbnQgTVNfQ0FMTEJBQ0sgdmVy aWZ5X2NhbGxiYWNrKGludCBvaywgCi0gaW50IHNldF9jZXJ0X3N0dWZmKFNTTF9DVFggKmN0eCwg Y2hhciAqY2VydF9maWxlLCBjaGFyICprZXlfZmlsZSk7Ci0gaW50IHNldF9jZXJ0X2tleV9zdHVm ZihTU0xfQ1RYICpjdHgsIFg1MDkgKmNlcnQsIEVWUF9QS0VZICprZXkpOwotICNlbmRpZgotLWlu dCBpbml0X2NsaWVudChpbnQgKnNvY2ssIGNoYXIgKnNlcnZlciwgaW50IHBvcnQsIGludCB0eXBl KTsKLStpbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpzZXJ2ZXIsIGNoYXIgKnBvcnQs IGludCB0eXBlKTsKLSBpbnQgc2hvdWxkX3JldHJ5KGludCBpKTsKLS1pbnQgZXh0cmFjdF9wb3J0 KGNoYXIgKnN0ciwgc2hvcnQgKnBvcnRfcHRyKTsKLS1pbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hh ciAqc3RyLGNoYXIgKipob3N0X3B0cix1bnNpZ25lZCBjaGFyICppcCxzaG9ydCAqcCk7Ci0raW50 IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0cixjaGFyICoqaG9zdF9wdHIsY2hhciAqKnBvcnRf cHRyKTsKLSAKLSBsb25nIE1TX0NBTExCQUNLIGJpb19kdW1wX2NhbGxiYWNrKEJJTyAqYmlvLCBp bnQgY21kLCBjb25zdCBjaGFyICphcmdwLAotIAkJCQkgICBpbnQgYXJnaSwgbG9uZyBhcmdsLCBs b25nIHJldCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYi9hcHBzL3NfY2xpZW50LmMuaXB2Ni1h cHBzIG9wZW5zc2wtMS4wLjBiL2FwcHMvc19jbGllbnQuYwotLS0tIG9wZW5zc2wtMS4wLjBiL2Fw cHMvc19jbGllbnQuYy5pcHY2LWFwcHMJMjAxMC0xMS0xNiAxNzoxOToyOS4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9hcHBzL3NfY2xpZW50LmMJMjAxMC0xMS0xNiAxNzoxOToy OS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zODksNyArMzg5LDcgQEAgaW50IE1BSU4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotIAlpbnQgY2J1Zl9sZW4sY2J1Zl9vZmY7Ci0gCWludCBzYnVmX2xlbixz YnVmX29mZjsKLSAJZmRfc2V0IHJlYWRmZHMsd3JpdGVmZHM7Ci0tCXNob3J0IHBvcnQ9UE9SVDsK LSsJY2hhciAqcG9ydF9zdHIgPSBQT1JUX1NUUjsKLSAJaW50IGZ1bGxfbG9nPTE7Ci0gCWNoYXIg Kmhvc3Q9U1NMX0hPU1RfTkFNRTsKLSAJY2hhciAqY2VydF9maWxlPU5VTEwsKmtleV9maWxlPU5V TEw7Ci1AQCAtNDg4LDEzICs0ODgsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQotIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItcG9ydCIpID09IDApCi0gCQkJewotIAkJCWlm ICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKLS0JCQlwb3J0PWF0b2koKigrK2FyZ3YpKTsKLS0JCQlp ZiAocG9ydCA9PSAwKSBnb3RvIGJhZDsKLSsJCQlwb3J0X3N0cj0gKigrK2FyZ3YpOwotIAkJCX0K LSAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWNvbm5lY3QiKSA9PSAwKQotIAkJCXsKLSAJCQlp ZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci0tCQkJaWYgKCFleHRyYWN0X2hvc3RfcG9ydCgqKCsr YXJndiksJmhvc3QsTlVMTCwmcG9ydCkpCi0rCQkJaWYgKCFleHRyYWN0X2hvc3RfcG9ydCgqKCsr YXJndiksJmhvc3QsJnBvcnRfc3RyKSkKLSAJCQkJZ290byBiYWQ7Ci0gCQkJfQotIAkJZWxzZSBp Zgkoc3RyY21wKCphcmd2LCItdmVyaWZ5IikgPT0gMCkKLUBAIC05NjcsNyArOTY2LDcgQEAgYmFk OgotIAotIHJlX3N0YXJ0OgotIAotLQlpZiAoaW5pdF9jbGllbnQoJnMsaG9zdCxwb3J0LHNvY2tl dF90eXBlKSA9PSAwKQotKwlpZiAoaW5pdF9jbGllbnQoJnMsaG9zdCxwb3J0X3N0cixzb2NrZXRf dHlwZSkgPT0gMCkKLSAJCXsKLSAJCUJJT19wcmludGYoYmlvX2VyciwiY29ubmVjdDplcnJubz0l ZFxuIixnZXRfbGFzdF9zb2NrZXRfZXJyb3IoKSk7Ci0gCQlTSFVURE9XTihzKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBiL2FwcHMvc19zZXJ2ZXIuYy5pcHY2LWFwcHMgb3BlbnNzbC0xLjAuMGIv YXBwcy9zX3NlcnZlci5jCi0tLS0gb3BlbnNzbC0xLjAuMGIvYXBwcy9zX3NlcnZlci5jLmlwdjYt YXBwcwkyMDEwLTExLTE2IDE3OjE5OjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjBiL2FwcHMvc19zZXJ2ZXIuYwkyMDEwLTExLTE2IDE3OjE5OjI5LjAwMDAwMDAwMCArMDEwMAot QEAgLTgzOCw3ICs4MzgsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAl7 Ci0gCVg1MDlfVkVSSUZZX1BBUkFNICp2cG0gPSBOVUxMOwotIAlpbnQgYmFkYXJnID0gMDsKLS0J c2hvcnQgcG9ydD1QT1JUOwotKwljaGFyICpwb3J0X3N0ciA9IFBPUlRfU1RSOwotIAljaGFyICpD QXBhdGg9TlVMTCwqQ0FmaWxlPU5VTEw7Ci0gCXVuc2lnbmVkIGNoYXIgKmNvbnRleHQgPSBOVUxM OwotIAljaGFyICpkaGZpbGUgPSBOVUxMOwotQEAgLTkwOSw4ICs5MDksNyBAQCBpbnQgTUFJTihp bnQgYXJnYywgY2hhciAqYXJndltdKQotIAkJCSAoc3RyY21wKCphcmd2LCItYWNjZXB0IikgPT0g MCkpCi0gCQkJewotIAkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKLS0JCQlpZiAoIWV4dHJh Y3RfcG9ydCgqKCsrYXJndiksJnBvcnQpKQotLQkJCQlnb3RvIGJhZDsKLSsJCQlwb3J0X3N0cj0g KigrK2FyZ3YpOwotIAkJCX0KLSAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXZlcmlmeSIpID09 IDApCi0gCQkJewotQEAgLTE3MDAsOSArMTY5OSw5IEBAIGJhZDoKLSAJQklPX3ByaW50ZihiaW9f c19vdXQsIkFDQ0VQVFxuIik7Ci0gCSh2b2lkKUJJT19mbHVzaChiaW9fc19vdXQpOwotIAlpZiAo d3d3KQotLQkJZG9fc2VydmVyKHBvcnQsc29ja2V0X3R5cGUsJmFjY2VwdF9zb2NrZXQsd3d3X2Jv ZHksIGNvbnRleHQpOwotKwkJZG9fc2VydmVyKHBvcnRfc3RyLHNvY2tldF90eXBlLCZhY2NlcHRf c29ja2V0LHd3d19ib2R5LCBjb250ZXh0KTsKLSAJZWxzZQotLQkJZG9fc2VydmVyKHBvcnQsc29j a2V0X3R5cGUsJmFjY2VwdF9zb2NrZXQsc3ZfYm9keSwgY29udGV4dCk7Ci0rCQlkb19zZXJ2ZXIo cG9ydF9zdHIsc29ja2V0X3R5cGUsJmFjY2VwdF9zb2NrZXQsc3ZfYm9keSwgY29udGV4dCk7Ci0g CXByaW50X3N0YXRzKGJpb19zX291dCxjdHgpOwotIAlyZXQ9MDsKLSBlbmQ6Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wYi9hcHBzL3Nfc29ja2V0LmMuaXB2Ni1hcHBzIG9wZW5zc2wtMS4wLjBiL2Fw cHMvc19zb2NrZXQuYwotLS0tIG9wZW5zc2wtMS4wLjBiL2FwcHMvc19zb2NrZXQuYy5pcHY2LWFw cHMJMjAxMC0wNy0wNSAxMzowMzoyMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w Yi9hcHBzL3Nfc29ja2V0LmMJMjAxMC0xMS0xNiAxNzoyNzoxOC4wMDAwMDAwMDAgKzAxMDAKLUBA IC0xMDIsOSArMTAyLDcgQEAgc3RhdGljIHN0cnVjdCBob3N0ZW50ICpHZXRIb3N0QnlOYW1lKGNo YQotIHN0YXRpYyB2b2lkIHNzbF9zb2NrX2NsZWFudXAodm9pZCk7Ci0gI2VuZGlmCi0gc3RhdGlj IGludCBzc2xfc29ja19pbml0KHZvaWQpOwotLXN0YXRpYyBpbnQgaW5pdF9jbGllbnRfaXAoaW50 ICpzb2NrLHVuc2lnbmVkIGNoYXIgaXBbNF0sIGludCBwb3J0LCBpbnQgdHlwZSk7Ci0tc3RhdGlj IGludCBpbml0X3NlcnZlcihpbnQgKnNvY2ssIGludCBwb3J0LCBpbnQgdHlwZSk7Ci0tc3RhdGlj IGludCBpbml0X3NlcnZlcl9sb25nKGludCAqc29jaywgaW50IHBvcnQsY2hhciAqaXAsIGludCB0 eXBlKTsKLStzdGF0aWMgaW50IGluaXRfc2VydmVyKGludCAqc29jaywgY2hhciAqcG9ydCwgaW50 IHR5cGUpOwotIHN0YXRpYyBpbnQgZG9fYWNjZXB0KGludCBhY2Nfc29jaywgaW50ICpzb2NrLCBj aGFyICoqaG9zdCk7Ci0gc3RhdGljIGludCBob3N0X2lwKGNoYXIgKnN0ciwgdW5zaWduZWQgY2hh ciBpcFs0XSk7Ci0gCi1AQCAtMjM0LDU4ICsyMzIsNzAgQEAgc3RhdGljIGludCBzc2xfc29ja19p bml0KHZvaWQpCi0gCXJldHVybigxKTsKLSAJfQotIAotLWludCBpbml0X2NsaWVudChpbnQgKnNv Y2ssIGNoYXIgKmhvc3QsIGludCBwb3J0LCBpbnQgdHlwZSkKLStpbnQgaW5pdF9jbGllbnQoaW50 ICpzb2NrLCBjaGFyICpob3N0LCBjaGFyICpwb3J0LCBpbnQgdHlwZSkKLSAJewotLQl1bnNpZ25l ZCBjaGFyIGlwWzRdOwotLQotLQlpZiAoIWhvc3RfaXAoaG9zdCwmKGlwWzBdKSkpCi0tCQl7Ci0t CQlyZXR1cm4oMCk7Ci0tCQl9Ci0tCXJldHVybihpbml0X2NsaWVudF9pcChzb2NrLGlwLHBvcnQs dHlwZSkpOwotLQl9Ci0tCi0tc3RhdGljIGludCBpbml0X2NsaWVudF9pcChpbnQgKnNvY2ssIHVu c2lnbmVkIGNoYXIgaXBbNF0sIGludCBwb3J0LCBpbnQgdHlwZSkKLS0JewotLQl1bnNpZ25lZCBs b25nIGFkZHI7Ci0tCXN0cnVjdCBzb2NrYWRkcl9pbiB0aGVtOwotLQlpbnQgcyxpOwotKwlzdHJ1 Y3QgYWRkcmluZm8gKnJlcywgKnJlczAsIGhpbnRzOwotKwljaGFyICogZmFpbGVkX2NhbGwgPSBO VUxMOwotKwlpbnQgczsKLSsJaW50IGU7Ci0gCi0gCWlmICghc3NsX3NvY2tfaW5pdCgpKSByZXR1 cm4oMCk7Ci0gCi0tCW1lbXNldCgoY2hhciAqKSZ0aGVtLDAsc2l6ZW9mKHRoZW0pKTsKLS0JdGhl bS5zaW5fZmFtaWx5PUFGX0lORVQ7Ci0tCXRoZW0uc2luX3BvcnQ9aHRvbnMoKHVuc2lnbmVkIHNo b3J0KXBvcnQpOwotLQlhZGRyPSh1bnNpZ25lZCBsb25nKQotLQkJKCh1bnNpZ25lZCBsb25nKWlw WzBdPDwyNEwpfAotLQkJKCh1bnNpZ25lZCBsb25nKWlwWzFdPDwxNkwpfAotLQkJKCh1bnNpZ25l ZCBsb25nKWlwWzJdPDwgOEwpfAotLQkJKCh1bnNpZ25lZCBsb25nKWlwWzNdKTsKLS0JdGhlbS5z aW5fYWRkci5zX2FkZHI9aHRvbmwoYWRkcik7Ci0tCi0tCWlmICh0eXBlID09IFNPQ0tfU1RSRUFN KQotLQkJcz1zb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSxTT0NLRVRfUFJPVE9DT0wpOwotLQll bHNlIC8qICggdHlwZSA9PSBTT0NLX0RHUkFNKSAqLwotLQkJcz1zb2NrZXQoQUZfSU5FVCxTT0NL X0RHUkFNLElQUFJPVE9fVURQKTsKLS0JCQkKLS0JaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpIHsg cGVycm9yKCJzb2NrZXQiKTsgcmV0dXJuKDApOyB9Ci0rCW1lbXNldCgmaGludHMsICdcMCcsIHNp emVvZihoaW50cykpOwotKwloaW50cy5haV9zb2NrdHlwZSA9IHR5cGU7Ci0rCWhpbnRzLmFpX2Zs YWdzID0gQUlfQUREUkNPTkZJRzsKLSsKLSsJZSA9IGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsICZo aW50cywgJnJlcyk7Ci0rCWlmIChlKQotKwl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJp bmZvOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGUpKTsKLSsJCWlmIChlID09IEVBSV9TWVNURU0pCi0r CQkJcGVycm9yKCJnZXRhZGRyaW5mbyIpOwotKwkJcmV0dXJuICgwKTsKLSsJCX0KLSAKLSsJcmVz MCA9IHJlczsKLSsJd2hpbGUgKHJlcykKLSsJCXsKLSsJCXMgPSBzb2NrZXQocmVzLT5haV9mYW1p bHksIHJlcy0+YWlfc29ja3R5cGUsIHJlcy0+YWlfcHJvdG9jb2wpOwotKwkJaWYgKHMgPT0gSU5W QUxJRF9TT0NLRVQpCi0rCQkJewotKwkJCWZhaWxlZF9jYWxsID0gInNvY2tldCI7Ci0rCQkJZ290 byBuZXh0cmVzOwotKwkJCX0KLSAjaWYgZGVmaW5lZChTT19LRUVQQUxJVkUpICYmICFkZWZpbmVk KE9QRU5TU0xfU1lTX01QRSkKLSAJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCi0gCQl7Ci0tCQlp PTA7Ci0tCQlpPXNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX0tFRVBBTElWRSwoY2hhciAqKSZp LHNpemVvZihpKSk7Ci0tCQlpZiAoaSA8IDApIHsgcGVycm9yKCJrZWVwYWxpdmUiKTsgcmV0dXJu KDApOyB9Ci0rCQkJaW50IGk9MDsKLSsJCQlpPXNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX0tF RVBBTElWRSwKLSsJCQkJKGNoYXIgKikmaSxzaXplb2YoaSkpOwotKwkJCWlmIChpIDwgMCkgewot KwkJCQlmYWlsZWRfY2FsbCA9ICJrZWVwYWxpdmUiOwotKwkJCQlnb3RvIG5leHRyZXM7Ci0rCQkJ CX0KLSAJCX0KLSAjZW5kaWYKLS0KLS0JaWYgKGNvbm5lY3Qocywoc3RydWN0IHNvY2thZGRyICop JnRoZW0sc2l6ZW9mKHRoZW0pKSA9PSAtMSkKLS0JCXsgY2xvc2Vzb2NrZXQocyk7IHBlcnJvcigi Y29ubmVjdCIpOyByZXR1cm4oMCk7IH0KLSsJCWlmIChjb25uZWN0KHMsKHN0cnVjdCBzb2NrYWRk ciAqKXJlcy0+YWlfYWRkciwKLSsJCQlyZXMtPmFpX2FkZHJsZW4pID09IDApCi0rCQkJewotKwkJ CWZyZWVhZGRyaW5mbyhyZXMwKTsKLSAJKnNvY2s9czsKLSAJcmV0dXJuKDEpOwotIAl9Ci0gCi0t aW50IGRvX3NlcnZlcihpbnQgcG9ydCwgaW50IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikoY2hh ciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hh ciAqY29udGV4dCkKLSsJCWZhaWxlZF9jYWxsID0gInNvY2tldCI7Ci0rbmV4dHJlczoKLSsJCWlm IChzICE9IElOVkFMSURfU09DS0VUKQotKwkJCWNsb3NlKHMpOwotKwkJcmVzID0gcmVzLT5haV9u ZXh0OwotKwkJfQotKwlmcmVlYWRkcmluZm8ocmVzMCk7Ci0rCi0rCXBlcnJvcihmYWlsZWRfY2Fs bCk7Ci0rCXJldHVybigwKTsKLSsJfQotKwotK2ludCBkb19zZXJ2ZXIoY2hhciAqcG9ydCwgaW50 IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikoY2hhciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25l ZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCkKLSAJewotIAlpbnQgc29j azsKLSAJY2hhciAqbmFtZSA9IE5VTEw7Ci1AQCAtMzIzLDMzICszMzMsMzggQEAgaW50IGRvX3Nl cnZlcihpbnQgcG9ydCwgaW50IHR5cGUsIGludCAqcgotIAkJfQotIAl9Ci0gCi0tc3RhdGljIGlu dCBpbml0X3NlcnZlcl9sb25nKGludCAqc29jaywgaW50IHBvcnQsIGNoYXIgKmlwLCBpbnQgdHlw ZSkKLStzdGF0aWMgaW50IGluaXRfc2VydmVyKGludCAqc29jaywgY2hhciAqcG9ydCwgaW50IHR5 cGUpCi0gCXsKLS0JaW50IHJldD0wOwotLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOwotLQlp bnQgcz0gLTE7Ci0rCXN0cnVjdCBhZGRyaW5mbyAqcmVzLCAqcmVzMCwgaGludHM7Ci0rCWNoYXIg KiBmYWlsZWRfY2FsbCA9IE5VTEw7Ci0rCWNoYXIgcG9ydF9uYW1lWzhdOwotKwlpbnQgczsKLSsJ aW50IGU7Ci0gCi0gCWlmICghc3NsX3NvY2tfaW5pdCgpKSByZXR1cm4oMCk7Ci0gCi0tCW1lbXNl dCgoY2hhciAqKSZzZXJ2ZXIsMCxzaXplb2Yoc2VydmVyKSk7Ci0tCXNlcnZlci5zaW5fZmFtaWx5 PUFGX0lORVQ7Ci0tCXNlcnZlci5zaW5fcG9ydD1odG9ucygodW5zaWduZWQgc2hvcnQpcG9ydCk7 Ci0tCWlmIChpcCA9PSBOVUxMKQotLQkJc2VydmVyLnNpbl9hZGRyLnNfYWRkcj1JTkFERFJfQU5Z OwotLQllbHNlCi0tLyogQWRkZWQgZm9yIFQzRSwgYWRkcmVzcy1vZiBmYWlscyBvbiBiaXQgZmll bGQgKGJlY2ttYW5AYWNsLmxhbmwuZ292KSAqLwotLSNpZm5kZWYgQklUX0ZJRUxEX0xJTUlUUwot LQkJbWVtY3B5KCZzZXJ2ZXIuc2luX2FkZHIuc19hZGRyLGlwLDQpOwotLSNlbHNlCi0tCQltZW1j cHkoJnNlcnZlci5zaW5fYWRkcixpcCw0KTsKLS0jZW5kaWYKLSsJbWVtc2V0KCZoaW50cywgJ1ww Jywgc2l6ZW9mKGhpbnRzKSk7Ci0rCWhpbnRzLmFpX3NvY2t0eXBlID0gdHlwZTsKLSsJaGludHMu YWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQUREUkNPTkZJRzsKLSAJCi0tCQlpZiAodHlwZSA9 PSBTT0NLX1NUUkVBTSkKLS0JCQlzPXNvY2tldChBRl9JTkVULFNPQ0tfU1RSRUFNLFNPQ0tFVF9Q Uk9UT0NPTCk7Ci0tCQllbHNlIC8qIHR5cGUgPT0gU09DS19ER1JBTSAqLwotLQkJCXM9c29ja2V0 KEFGX0lORVQsIFNPQ0tfREdSQU0sSVBQUk9UT19VRFApOwotKwllID0gZ2V0YWRkcmluZm8oTlVM TCwgcG9ydCwgJmhpbnRzLCAmcmVzKTsKLSsJaWYgKGUpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgImdldGFkZHJpbmZvOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGUpKTsKLSsJCWlmIChlID09IEVB SV9TWVNURU0pCi0rCQkJcGVycm9yKCJnZXRhZGRyaW5mbyIpOwotKwkJcmV0dXJuICgwKTsKLSsJ CX0KLSAKLS0JaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpIGdvdG8gZXJyOwotKwlyZXMwID0gcmVz OwotKwl3aGlsZSAocmVzKQotKwkJewotKwkJcyA9IHNvY2tldChyZXMtPmFpX2ZhbWlseSwgcmVz LT5haV9zb2NrdHlwZSwgcmVzLT5haV9wcm90b2NvbCk7Ci0rCQlpZiAocyA9PSBJTlZBTElEX1NP Q0tFVCkKLSsJCQl7Ci0rCQkJZmFpbGVkX2NhbGwgPSAic29ja2V0IjsKLSsJCQlnb3RvIG5leHRy ZXM7Ci0rCQkJfQotICNpZiBkZWZpbmVkIFNPTF9TT0NLRVQgJiYgZGVmaW5lZCBTT19SRVVTRUFE RFIKLSAJCXsKLSAJCWludCBqID0gMTsKLUBAIC0zNTcsMzUgKzM3MiwzOSBAQCBzdGF0aWMgaW50 IGluaXRfc2VydmVyX2xvbmcoaW50ICpzb2NrLCBpCi0gCQkJICAgKHZvaWQgKikgJmosIHNpemVv ZiBqKTsKLSAJCX0KLSAjZW5kaWYKLS0JaWYgKGJpbmQocywoc3RydWN0IHNvY2thZGRyICopJnNl cnZlcixzaXplb2Yoc2VydmVyKSkgPT0gLTEpCi0rCi0rCQlpZiAoYmluZChzLChzdHJ1Y3Qgc29j a2FkZHIgKilyZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbikgPT0gLTEpCi0gCQl7Ci0tI2lm bmRlZiBPUEVOU1NMX1NZU19XSU5ET1dTCi0tCQlwZXJyb3IoImJpbmQiKTsKLS0jZW5kaWYKLS0J CWdvdG8gZXJyOwotKwkJCWZhaWxlZF9jYWxsID0gImJpbmQiOwotKwkJCWdvdG8gbmV4dHJlczsK LSAJCX0KLS0JLyogTWFrZSBpdCAxMjggZm9yIGxpbnV4ICovCi0tCWlmICh0eXBlPT1TT0NLX1NU UkVBTSAmJiBsaXN0ZW4ocywxMjgpID09IC0xKSBnb3RvIGVycjsKLS0JKnNvY2s9czsKLS0JcmV0 PTE7Ci0tZXJyOgotLQlpZiAoKHJldCA9PSAwKSAmJiAocyAhPSAtMSkpCi0rCQlpZiAodHlwZT09 U09DS19TVFJFQU0gJiYgbGlzdGVuKHMsMTI4KSA9PSAtMSkKLSAJCXsKLS0JCVNIVVRET1dOKHMp OwotKwkJCWZhaWxlZF9jYWxsID0gImxpc3RlbiI7Ci0rCQkJZ290byBuZXh0cmVzOwotIAkJfQot LQlyZXR1cm4ocmV0KTsKLSsKLSsJCSpzb2NrPXM7Ci0rCQlyZXR1cm4oMSk7Ci0rCi0rbmV4dHJl czoKLSsJCWlmIChzICE9IElOVkFMSURfU09DS0VUKQotKwkJCWNsb3NlKHMpOwotKwkJcmVzID0g cmVzLT5haV9uZXh0OwotIAl9Ci0rCWZyZWVhZGRyaW5mbyhyZXMwKTsKLSAKLS1zdGF0aWMgaW50 IGluaXRfc2VydmVyKGludCAqc29jaywgaW50IHBvcnQsIGludCB0eXBlKQotLQl7Ci0tCXJldHVy bihpbml0X3NlcnZlcl9sb25nKHNvY2ssIHBvcnQsIE5VTEwsIHR5cGUpKTsKLSsJaWYgKHMgPT0g SU5WQUxJRF9TT0NLRVQpIHsgcGVycm9yKCJzb2NrZXQiKTsgcmV0dXJuKDApOyB9Ci0rCi0rCXBl cnJvcihmYWlsZWRfY2FsbCk7Ci0rCXJldHVybigwKTsKLSAJfQotIAotIHN0YXRpYyBpbnQgZG9f YWNjZXB0KGludCBhY2Nfc29jaywgaW50ICpzb2NrLCBjaGFyICoqaG9zdCkKLSAJewotKwlzdGF0 aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKLSsJY2hhciBidWZmZXJbTklfTUFYSE9T VF07Ci0gCWludCByZXQ7Ci0tCXN0cnVjdCBob3N0ZW50ICpoMSwqaDI7Ci0tCXN0YXRpYyBzdHJ1 Y3Qgc29ja2FkZHJfaW4gZnJvbTsKLSAJaW50IGxlbjsKLSAvKglzdHJ1Y3QgbGluZ2VyIGxpbmc7 ICovCi0gCi1AQCAtNDMyLDEzNSArNDUxLDU4IEBAIHJlZG9pdDoKLSAqLwotIAotIAlpZiAoaG9z dCA9PSBOVUxMKSBnb3RvIGVuZDsKLS0jaWZuZGVmIEJJVF9GSUVMRF9MSU1JVFMKLS0JLyogSSBz aG91bGQgdXNlIFdTQUFzeW5jR2V0SG9zdEJ5TmFtZSgpIHVuZGVyIHdpbmRvd3MgKi8KLS0JaDE9 Z2V0aG9zdGJ5YWRkcigoY2hhciAqKSZmcm9tLnNpbl9hZGRyLnNfYWRkciwKLS0JCXNpemVvZihm cm9tLnNpbl9hZGRyLnNfYWRkciksQUZfSU5FVCk7Ci0tI2Vsc2UKLS0JaDE9Z2V0aG9zdGJ5YWRk cigoY2hhciAqKSZmcm9tLnNpbl9hZGRyLAotLQkJc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSxBRl9J TkVUKTsKLS0jZW5kaWYKLS0JaWYgKGgxID09IE5VTEwpCi0rCi0rCWlmIChnZXRuYW1laW5mbygo c3RydWN0IHNvY2thZGRyICopJmZyb20sIHNpemVvZihmcm9tKSwKLSsJCWJ1ZmZlciwgc2l6ZW9m KGJ1ZmZlciksCi0rCQlOVUxMLCAwLCAwKSkKLSAJCXsKLS0JCUJJT19wcmludGYoYmlvX2Vyciwi YmFkIGdldGhvc3RieWFkZHJcbiIpOwotKwkJQklPX3ByaW50ZihiaW9fZXJyLCJnZXRuYW1laW5m byBmYWlsZWRcbiIpOwotIAkJKmhvc3Q9TlVMTDsKLSAJCS8qIHJldHVybigwKTsgKi8KLSAJCX0K LSAJZWxzZQotIAkJewotLQkJaWYgKCgqaG9zdD0oY2hhciAqKU9QRU5TU0xfbWFsbG9jKHN0cmxl bihoMS0+aF9uYW1lKSsxKSkgPT0gTlVMTCkKLSsJCWlmICgoKmhvc3Q9KGNoYXIgKilPUEVOU1NM X21hbGxvYyhzdHJsZW4oYnVmZmVyKSsxKSkgPT0gTlVMTCkKLSAJCQl7Ci0gCQkJcGVycm9yKCJP UEVOU1NMX21hbGxvYyIpOwotIAkJCXJldHVybigwKTsKLSAJCQl9Ci0tCQlCVUZfc3RybGNweSgq aG9zdCxoMS0+aF9uYW1lLHN0cmxlbihoMS0+aF9uYW1lKSsxKTsKLS0KLS0JCWgyPUdldEhvc3RC eU5hbWUoKmhvc3QpOwotLQkJaWYgKGgyID09IE5VTEwpCi0tCQkJewotLQkJCUJJT19wcmludGYo YmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBmYWlsdXJlXG4iKTsKLS0JCQlyZXR1cm4oMCk7Ci0tCQkJ fQotLQkJaWYgKGgyLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpCi0tCQkJewotLQkJCUJJT19wcmlu dGYoYmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBhZGRyIGlzIG5vdCBBRl9JTkVUXG4iKTsKLS0JCQly ZXR1cm4oMCk7Ci0tCQkJfQotKwkJc3RyY3B5KCpob3N0LCBidWZmZXIpOwotIAkJfQotIGVuZDoK LSAJKnNvY2s9cmV0OwotIAlyZXR1cm4oMSk7Ci0gCX0KLSAKLS1pbnQgZXh0cmFjdF9ob3N0X3Bv cnQoY2hhciAqc3RyLCBjaGFyICoqaG9zdF9wdHIsIHVuc2lnbmVkIGNoYXIgKmlwLAotLQkgICAg IHNob3J0ICpwb3J0X3B0cikKLStpbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLCBjaGFy ICoqaG9zdF9wdHIsIAotKwkgICAgIGNoYXIgKipwb3J0X3B0cikKLSAJewotLQljaGFyICpoLCpw OwotKwljaGFyICpoLCpwLCp4OwotIAotLQloPXN0cjsKLS0JcD1zdHJjaHIoc3RyLCc6Jyk7Ci0r CXg9aD1zdHI7Ci0rCWlmICgqaCA9PSAnWycpCi0rCQl7Ci0rCQloKys7Ci0rCQlwPXN0cmNociho LCddJyk7Ci0gCWlmIChwID09IE5VTEwpCi0gCQl7Ci0tCQlCSU9fcHJpbnRmKGJpb19lcnIsIm5v IHBvcnQgZGVmaW5lZFxuIik7Ci0rCQkJQklPX3ByaW50ZihiaW9fZXJyLCJubyBlbmRpbmcgYnJh Y2tldCBmb3IgSVB2NiBhZGRyZXNzXG4iKTsKLSAJCXJldHVybigwKTsKLSAJCX0KLSAJKihwKysp PSdcMCc7Ci0tCi0tCWlmICgoaXAgIT0gTlVMTCkgJiYgIWhvc3RfaXAoc3RyLGlwKSkKLS0JCWdv dG8gZXJyOwotLQlpZiAoaG9zdF9wdHIgIT0gTlVMTCkgKmhvc3RfcHRyPWg7Ci0tCi0tCWlmICgh ZXh0cmFjdF9wb3J0KHAscG9ydF9wdHIpKQotLQkJZ290byBlcnI7Ci0tCXJldHVybigxKTsKLS1l cnI6Ci0tCXJldHVybigwKTsKLSsJCXggPSBwOwotIAl9Ci0tCi0tc3RhdGljIGludCBob3N0X2lw KGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciBpcFs0XSkKLS0JewotLQl1bnNpZ25lZCBpbnQgaW5b NF07IAotLQlpbnQgaTsKLS0KLS0JaWYgKHNzY2FuZihzdHIsIiV1LiV1LiV1LiV1IiwmKGluWzBd KSwmKGluWzFdKSwmKGluWzJdKSwmKGluWzNdKSkgPT0gNCkKLS0JCXsKLS0JCWZvciAoaT0wOyBp PDQ7IGkrKykKLS0JCQlpZiAoaW5baV0gPiAyNTUpCi0tCQkJCXsKLS0JCQkJQklPX3ByaW50Zihi aW9fZXJyLCJpbnZhbGlkIElQIGFkZHJlc3NcbiIpOwotLQkJCQlnb3RvIGVycjsKLS0JCQkJfQot LQkJaXBbMF09aW5bMF07Ci0tCQlpcFsxXT1pblsxXTsKLS0JCWlwWzJdPWluWzJdOwotLQkJaXBb M109aW5bM107Ci0tCQl9Ci0tCWVsc2UKLS0JCXsgLyogZG8gYSBnZXRob3N0YnluYW1lICovCi0t CQlzdHJ1Y3QgaG9zdGVudCAqaGU7Ci0tCi0tCQlpZiAoIXNzbF9zb2NrX2luaXQoKSkgcmV0dXJu KDApOwotLQotLQkJaGU9R2V0SG9zdEJ5TmFtZShzdHIpOwotLQkJaWYgKGhlID09IE5VTEwpCi0t CQkJewotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBmYWlsdXJlXG4iKTsK LS0JCQlnb3RvIGVycjsKLS0JCQl9Ci0tCQkvKiBjYXN0IHRvIHNob3J0IGJlY2F1c2Ugb2Ygd2lu MTYgd2luc29jayBkZWZpbml0aW9uICovCi0tCQlpZiAoKHNob3J0KWhlLT5oX2FkZHJ0eXBlICE9 IEFGX0lORVQpCi0rCXA9c3RyY2hyKHgsJzonKTsKLSsJaWYgKHAgPT0gTlVMTCkKLSAJCQl7Ci0t CQkJQklPX3ByaW50ZihiaW9fZXJyLCJnZXRob3N0YnluYW1lIGFkZHIgaXMgbm90IEFGX0lORVRc biIpOwotLQkJCXJldHVybigwKTsKLS0JCQl9Ci0tCQlpcFswXT1oZS0+aF9hZGRyX2xpc3RbMF1b MF07Ci0tCQlpcFsxXT1oZS0+aF9hZGRyX2xpc3RbMF1bMV07Ci0tCQlpcFsyXT1oZS0+aF9hZGRy X2xpc3RbMF1bMl07Ci0tCQlpcFszXT1oZS0+aF9hZGRyX2xpc3RbMF1bM107Ci0tCQl9Ci0tCXJl dHVybigxKTsKLS1lcnI6Ci0rCQlCSU9fcHJpbnRmKGJpb19lcnIsIm5vIHBvcnQgZGVmaW5lZFxu Iik7Ci0gCXJldHVybigwKTsKLSAJfQotKwkqKHArKyk9J1wwJzsKLSAKLS1pbnQgZXh0cmFjdF9w b3J0KGNoYXIgKnN0ciwgc2hvcnQgKnBvcnRfcHRyKQotLQl7Ci0tCWludCBpOwotLQlzdHJ1Y3Qg c2VydmVudCAqczsKLSsJaWYgKGhvc3RfcHRyICE9IE5VTEwpICpob3N0X3B0cj1oOwotKwlpZiAo cG9ydF9wdHIgIT0gTlVMTCkgKnBvcnRfcHRyPXA7Ci0gCi0tCWk9YXRvaShzdHIpOwotLQlpZiAo aSAhPSAwKQotLQkJKnBvcnRfcHRyPSh1bnNpZ25lZCBzaG9ydClpOwotLQllbHNlCi0tCQl7Ci0t CQlzPWdldHNlcnZieW5hbWUoc3RyLCJ0Y3AiKTsKLS0JCWlmIChzID09IE5VTEwpCi0tCQkJewot LQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0c2VydmJ5bmFtZSBmYWlsdXJlIGZvciAlc1xuIixz dHIpOwotLQkJCXJldHVybigwKTsKLS0JCQl9Ci0tCQkqcG9ydF9wdHI9bnRvaHMoKHVuc2lnbmVk IHNob3J0KXMtPnNfcG9ydCk7Ci0tCQl9Ci0gCXJldHVybigxKTsKLSAJfQotIAoKZGlmZiAtLWdp dCBhL29wZW5zc2wtMS4wLjBjLWFwcHMtaXB2Nmxpc3Rlbi5wYXRjaCBiL29wZW5zc2wtMS4wLjBj LWFwcHMtaXB2Nmxpc3Rlbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Mz ZDRhMC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wYy1hcHBzLWlwdjZsaXN0ZW4ucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYy9h cHBzL3Nfc29ja2V0LmMuaXB2Nmxpc3RlbiBvcGVuc3NsLTEuMC4wYy9hcHBzL3Nfc29ja2V0LmMK LS0tLSBvcGVuc3NsLTEuMC4wYy9hcHBzL3Nfc29ja2V0LmMuaXB2Nmxpc3RlbgkyMDExLTAxLTI0 IDE2OjQ0OjE4LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBjL2FwcHMvc19zb2Nr ZXQuYwkyMDExLTAxLTI0IDE2OjU2OjI1LjAwMDAwMDAwMCArMDEwMAotQEAgLTMzNSwxNSArMzM1 LDE2IEBAIGludCBkb19zZXJ2ZXIoY2hhciAqcG9ydCwgaW50IHR5cGUsIGludCAKLSAKLSBzdGF0 aWMgaW50IGluaXRfc2VydmVyKGludCAqc29jaywgY2hhciAqcG9ydCwgaW50IHR5cGUpCi0gCXsK LS0Jc3RydWN0IGFkZHJpbmZvICpyZXMsICpyZXMwLCBoaW50czsKLSsJc3RydWN0IGFkZHJpbmZv ICpyZXMsICpyZXMwID0gTlVMTCwgaGludHM7Ci0gCWNoYXIgKiBmYWlsZWRfY2FsbCA9IE5VTEw7 Ci0tCWNoYXIgcG9ydF9uYW1lWzhdOwotIAlpbnQgczsKLSAJaW50IGU7Ci0gCi0gCWlmICghc3Ns X3NvY2tfaW5pdCgpKSByZXR1cm4oMCk7Ci0gCi0gCW1lbXNldCgmaGludHMsICdcMCcsIHNpemVv ZihoaW50cykpOwotKyAgICAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7Ci0rdHJ5aXB2 NDoKLSAJaGludHMuYWlfc29ja3R5cGUgPSB0eXBlOwotIAloaW50cy5haV9mbGFncyA9IEFJX1BB U1NJVkUgfCBBSV9BRERSQ09ORklHOwotIAkKLUBAIC0zNjUsNiArMzY2LDEyIEBAIHN0YXRpYyBp bnQgaW5pdF9zZXJ2ZXIoaW50ICpzb2NrLCBjaGFyICoKLSAJCQlmYWlsZWRfY2FsbCA9ICJzb2Nr ZXQiOwotIAkJCWdvdG8gbmV4dHJlczsKLSAJCQl9Ci0rCQlpZiAoaGludHMuYWlfZmFtaWx5ID09 IEFGX0lORVQ2KQotKwkJCXsKLSsJCQlpbnQgaiA9IDA7Ci0rCQkJc2V0c29ja29wdChzLCBJUFBS T1RPX0lQVjYsIElQVjZfVjZPTkxZLAotKwkJCQkgICAodm9pZCAqKSAmaiwgc2l6ZW9mIGopOwot KwkJCX0KLSAjaWYgZGVmaW5lZCBTT0xfU09DS0VUICYmIGRlZmluZWQgU09fUkVVU0VBRERSCi0g CQl7Ci0gCQlpbnQgaiA9IDE7Ci1AQCAtMzkyLDkgKzM5OSwxOSBAQCBuZXh0cmVzOgotIAkJCWNs b3NlKHMpOwotIAkJcmVzID0gcmVzLT5haV9uZXh0OwotIAl9Ci0tCWZyZWVhZGRyaW5mbyhyZXMw KTsKLSsJaWYgKHJlczApCi0rCQlmcmVlYWRkcmluZm8ocmVzMCk7Ci0gCi0tCWlmIChzID09IElO VkFMSURfU09DS0VUKSB7IHBlcnJvcigic29ja2V0Iik7IHJldHVybigwKTsgfQotKwlpZiAocyA9 PSBJTlZBTElEX1NPQ0tFVCkKLSsJewotKwkJaWYgKGhpbnRzLmFpX2ZhbWlseSA9PSBBRl9JTkVU NikKLSsJCXsKLSsJCQloaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUOwotKwkJCWdvdG8gdHJ5aXB2 NDsKLSsJCX0KLSsJCXBlcnJvcigic29ja2V0Iik7Ci0rCQlyZXR1cm4oMCk7Ci0rCX0KLSAKLSAJ cGVycm9yKGZhaWxlZF9jYWxsKTsKLSAJcmV0dXJuKDApOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wt MS4wLjBjLWZpcHMxODYtMy5wYXRjaCBiL29wZW5zc2wtMS4wLjBjLWZpcHMxODYtMy5wYXRjaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUzZTVhYi4uMDAwMDAwMAotLS0gYS9vcGVu c3NsLTEuMC4wYy1maXBzMTg2LTMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzODQgKzAsMCBA QAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwczE4Ni0z IG9wZW5zc2wtMS4wLjBjL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMGMv Y3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwczE4Ni0zCTIwMTEtMDItMDMgMjE6MDQ6MTQuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxMS0w Mi0wNCAwODo1NDo0Mi4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMjAsMTEgKzEyMCwxMSBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCWludCBvaz0wOwotIAl1bnNp Z25lZCBjaGFyIHNlZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotIAl1bnNpZ25lZCBjaGFyIG1k W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLS0JdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VT VF9MRU5HVEhdLGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIGJ1 ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0gCUJJR05VTSAqcjAsKlcsKlgsKmMsKnRlc3Q7Ci0g CUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsKLSAJQk5fTU9OVF9DVFggKm1vbnQ9TlVM TDsKLS0JaW50IGksIGssIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0rCWludCBpLCBr LCBiLCBuPTAsIG09MCwgcXNpemUgPSBxYml0cyA+PiAzOwotIAlpbnQgY291bnRlcj0wOwotIAlp bnQgcj0wOwotIAlCTl9DVFggKmN0eD1OVUxMOwotQEAgLTEzOCw5ICsxMzgsMTMgQEAgaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkgICAgZ290byBlcnI7Ci0gCSAg ICB9Ci0gCi0tCWlmIChGSVBTX21vZGUoKSAmJiAoYml0cyA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykpCi0rCWlmIChGSVBTX21vZGUoKSAmJgotKwkgICAgKGJpdHMgIT0gMTAy NCB8fCBxYml0cyAhPSAxNjApICYmCi0rCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDIy NCkgJiYKLSsJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjU2KSAmJgotKwkgICAgKGJp dHMgIT0gMzA3MiB8fCBxYml0cyAhPSAyNTYpKQotIAkJewotLQkJRFNBZXJyKERTQV9GX0RTQV9C VUlMVElOX1BBUkFNR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJRFNBZXJyKERT QV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKLSAJCWdv dG8gZXJyOwotIAkJfQotICNlbmRpZgotQEAgLTE1MSwyMiArMTU1LDI1IEBAIGludCBkc2FfYnVp bHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCXJldHVybiAwOwotIAotIAlpZiAoZXZw bWQgPT0gTlVMTCkKLS0JCS8qIHVzZSBTSEExIGFzIGRlZmF1bHQgKi8KLS0JCWV2cG1kID0gRVZQ X3NoYTEoKTsKLSsJICAgIHsKLSsJCWlmIChxYml0cyA8PSAxNjApCi0rCQkJZXZwbWQgPSBFVlBf c2hhMSgpOwotKwkJZWxzZSBpZiAocWJpdHMgPD0gMjI0KQotKwkJCWV2cG1kID0gRVZQX3NoYTIy NCgpOwotKwkJZWxzZQotKwkJCWV2cG1kID0gRVZQX3NoYTI1NigpOwotKwkgICAgfQotIAotIAlp ZiAoYml0cyA8IDUxMikKLSAJCWJpdHMgPSA1MTI7Ci0gCi0gCWJpdHMgPSAoYml0cys2MykvNjQq NjQ7Ci0gCi0tCS8qIE5COiBzZWVkX2xlbiA9PSAwIGlzIHNwZWNpYWwgY2FzZTogY29weSBnZW5l cmF0ZWQgc2VlZCB0bwotLSAJICogc2VlZF9pbiBpZiBpdCBpcyBub3QgTlVMTC4KLS0gCSAqLwot IAlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkpCi0gCQlzZWVkX2lu ID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KLSAJaWYgKHNl ZWRfbGVuID4gKHNpemVfdClxc2l6ZSkgCi0gCQlzZWVkX2xlbiA9IHFzaXplOwkvKiBBcHAuIDIu MiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotLQkJCQkJICogYnV0IG91ciBp bnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDE2MCBiaXRzKi8KLSsJCQkJCSAqIGJ1 dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAyNTYgYml0cyovCi0gCWlm IChzZWVkX2luICE9IE5VTEwpCi0gCQltZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4pOwot IAotQEAgLTE4OSwxMyArMTk2LDE4IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJl dCwgc2l6ZV8KLSAJaWYgKCFCTl9sc2hpZnQodGVzdCxCTl92YWx1ZV9vbmUoKSxiaXRzLTEpKQot IAkJZ290byBlcnI7Ci0gCi0rCS8qIHN0ZXAgMyBuID0gXGxjZWlsIGJpdHMgLyBxYml0cyBccmNl aWwgLSAxICovCi0rCW4gPSAoYml0cytxYml0cy0xKS9xYml0cyAtIDE7Ci0rCS8qIHN0ZXAgNCBi ID0gYml0cyAtIDEgLSBuICogcWJpdHMgKi8KLSsJYiA9IGJpdHMgLSAxIC0gbipxYml0czsKLSsK LSAJZm9yICg7OykKLSAJCXsKLSAJCWZvciAoOzspIC8qIGZpbmQgcSAqLwotIAkJCXsKLSAJCQlp bnQgc2VlZF9pc19yYW5kb207Ci0gCi0tCQkJLyogc3RlcCAxICovCi0rCQkJLyogc3RlcCA1IGdl bmVyYXRlIHNlZWQgKi8KLSAJCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMCwgbSsrKSkKLSAJCQkJ Z290byBlcnI7Ci0gCi1AQCAtMjEwLDI4ICsyMjIsMTcgQEAgaW50IGRzYV9idWlsdGluX3BhcmFt Z2VuKERTQSAqcmV0LCBzaXplXwotIAkJCQlzZWVkX2xlbj0wOyAvKiB1c2UgcmFuZG9tIHNlZWQg aWYgJ3NlZWRfaW4nIHR1cm5zIG91dCB0byBiZSBiYWQqLwotIAkJCQl9Ci0gCQkJbWVtY3B5KGJ1 ZiAsIHNlZWQsIHFzaXplKTsKLS0JCQltZW1jcHkoYnVmMiwgc2VlZCwgcXNpemUpOwotLQkJCS8q IHByZWNvbXB1dGUgIlNFRUQgKyAxIiBmb3Igc3RlcCA3OiAqLwotLQkJCWZvciAoaSA9IHFzaXpl LTE7IGkgPj0gMDsgaS0tKQotLQkJCQl7Ci0tCQkJCWJ1ZltpXSsrOwotLQkJCQlpZiAoYnVmW2ld ICE9IDApCi0tCQkJCQlicmVhazsKLS0JCQkJfQotIAotLQkJCS8qIHN0ZXAgMiAqLwotKwkJCS8q IHN0ZXAgNiBVID0gaGFzaChzZWVkKSAqLwotIAkJCUVWUF9EaWdlc3Qoc2VlZCwgcXNpemUsIG1k LCAgIE5VTEwsIGV2cG1kLCBOVUxMKTsKLS0JCQlFVlBfRGlnZXN0KGJ1ZiwgIHFzaXplLCBidWYy LCBOVUxMLCBldnBtZCwgTlVMTCk7Ci0tCQkJZm9yIChpID0gMDsgaSA8IHFzaXplOyBpKyspCi0t CQkJCW1kW2ldXj1idWYyW2ldOwotIAotLQkJCS8qIHN0ZXAgMyAqLwotKwkJCS8qIHN0ZXAgNyBx ID0gMl4ocWJpdHMtMSkgKyBVICsgMSAtIChVIG1vZCAyKSAqLwotIAkJCW1kWzBdIHw9IDB4ODA7 Ci0gCQkJbWRbcXNpemUtMV0gfD0gMHgwMTsKLSAJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUs IHEpKQotIAkJCQlnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVwIDQgKi8KLSsJCQkvKiBzdGVwIDgg dGVzdCBmb3IgcHJpbWUgKDY0IHJvdW5kIG9mIFJhYmluLU1pbGxlcikgKi8KLSAJCQlyID0gQk5f aXNfcHJpbWVfZmFzdHRlc3RfZXgocSwgRFNTX3ByaW1lX2NoZWNrcywgY3R4LAotIAkJCQkJc2Vl ZF9pc19yYW5kb20sIGNiKTsKLSAJCQlpZiAociA+IDApCi1AQCAtMjM5LDI3ICsyNDAsMjIgQEAg aW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkJCWlmIChyICE9IDAp Ci0gCQkJCWdvdG8gZXJyOwotIAotLQkJCS8qIGRvIGEgY2FsbGJhY2sgY2FsbCAqLwotLQkJCS8q IHN0ZXAgNSAqLwotIAkJCX0KLSAKLSAJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAwKSkgZ290 byBlcnI7Ci0gCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpIGdvdG8gZXJyOwotIAotLQkJ Lyogc3RlcCA2ICovCi0rCQkvKiBzdGVwIDExICovCi0gCQljb3VudGVyPTA7Ci0tCQkvKiAib2Zm c2V0ID0gMiIgKi8KLS0KLS0JCW49KGJpdHMtMSkvMTYwOwotKwkJLyogIm9mZnNldCA9IDEiICov Ci0gCi0gCQlmb3IgKDs7KQotIAkJCXsKLSAJCQlpZiAoKGNvdW50ZXIgIT0gMCkgJiYgIUJOX0dF TkNCX2NhbGwoY2IsIDAsIGNvdW50ZXIpKQotIAkJCQlnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVw IDcgKi8KLSsJCQkvKiBzdGVwIDExLjEsIDExLjIgb2J0YWluIFcgKi8KLSAJCQlCTl96ZXJvKFcp OwotLQkJCS8qIG5vdyAnYnVmJyBjb250YWlucyAiU0VFRCArIG9mZnNldCAtIDEiICovCi0gCQkJ Zm9yIChrPTA7IGs8PW47IGsrKykKLSAJCQkJewotIAkJCQkvKiBvYnRhaW4gIlNFRUQgKyBvZmZz ZXQgKyBrIiBieSBpbmNyZW1lbnRpbmc6ICovCi1AQCAtMjcyLDI4ICsyNjgsMzAgQEAgaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAotIAkJCQlFVlBfRGlnZXN0KGJ1 ZiwgcXNpemUsIG1kICxOVUxMLCBldnBtZCwgTlVMTCk7Ci0gCi0tCQkJCS8qIHN0ZXAgOCAqLwot IAkJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHIwKSkKLSAJCQkJCWdvdG8gZXJyOwotLQkJ CQlpZiAoIUJOX2xzaGlmdChyMCxyMCwocXNpemUgPDwgMykqaykpIGdvdG8gZXJyOwotKwkJCQlp ZiAoayA9PSBuKQotKwkJCQkJQk5fbWFza19iaXRzKHIwLGIpOwotKwkJCQlpZiAoIUJOX2xzaGlm dChyMCxyMCxxYml0cyprKSkgZ290byBlcnI7Ci0gCQkJCWlmICghQk5fYWRkKFcsVyxyMCkpIGdv dG8gZXJyOwotIAkJCQl9Ci0gCi0tCQkJLyogbW9yZSBvZiBzdGVwIDggKi8KLS0JCQlpZiAoIUJO X21hc2tfYml0cyhXLGJpdHMtMSkpIGdvdG8gZXJyOwotKwkJCS8qIHN0ZXAgMTEuMyBYID0gVyAr IDJeKEwtMSkgKi8KLSAJCQlpZiAoIUJOX2NvcHkoWCxXKSkgZ290byBlcnI7Ci0gCQkJaWYgKCFC Tl9hZGQoWCxYLHRlc3QpKSBnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVwIDkgKi8KLSsJCQkvKiBz dGVwIDExLjQgYyA9IFggbW9kIDIqcSAqLwotIAkJCWlmICghQk5fbHNoaWZ0MShyMCxxKSkgZ290 byBlcnI7Ci0gCQkJaWYgKCFCTl9tb2QoYyxYLHIwLGN0eCkpIGdvdG8gZXJyOwotKwotKwkJCS8q IHN0ZXAgMTEuNSBwID0gWCAtIChjIC0gMSkgKi8KLSAJCQlpZiAoIUJOX3N1YihyMCxjLEJOX3Zh bHVlX29uZSgpKSkgZ290byBlcnI7Ci0gCQkJaWYgKCFCTl9zdWIocCxYLHIwKSkgZ290byBlcnI7 Ci0gCi0tCQkJLyogc3RlcCAxMCAqLwotKwkJCS8qIHN0ZXAgMTEuNiAqLwotIAkJCWlmIChCTl9j bXAocCx0ZXN0KSA+PSAwKQotIAkJCQl7Ci0tCQkJCS8qIHN0ZXAgMTEgKi8KLSsJCQkJLyogc3Rl cCAxMS43ICovCi0gCQkJCXIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChwLCBEU1NfcHJpbWVf Y2hlY2tzLAotIAkJCQkJCWN0eCwgMSwgY2IpOwotIAkJCQlpZiAociA+IDApCi1AQCAtMzAyLDEy ICszMDAsMTIgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkJ CQkJZ290byBlcnI7Ci0gCQkJCX0KLSAKLS0JCQkvKiBzdGVwIDEzICovCi0rCQkJLyogc3RlcCAx MS45ICovCi0gCQkJY291bnRlcisrOwotIAkJCS8qICJvZmZzZXQgPSBvZmZzZXQgKyBuICsgMSIg Ki8KLSAKLS0JCQkvKiBzdGVwIDE0ICovCi0tCQkJaWYgKGNvdW50ZXIgPj0gNDA5NikgYnJlYWs7 Ci0rCQkJLyogc3RlcCAxMiAqLwotKwkJCWlmIChjb3VudGVyID49IDQqYml0cykgYnJlYWs7Ci0g CQkJfQotIAkJfQotIGVuZDoKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBjL2NyeXB0by9kc2EvZHNh LmguZmlwczE4Ni0zIG9wZW5zc2wtMS4wLjBjL2NyeXB0by9kc2EvZHNhLmgKLS0tLSBvcGVuc3Ns LTEuMC4wYy9jcnlwdG8vZHNhL2RzYS5oLmZpcHMxODYtMwkyMDExLTAyLTAzIDIxOjA0OjE0LjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBjL2NyeXB0by9kc2EvZHNhLmgJMjAxMS0w Mi0wMyAyMTowNDoxNC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zMTYsNiArMzE2LDcgQEAgdm9pZCBF UlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdF X0ZPUl9LRVlfU0laRQkJIDEwMAotICNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQK LSAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2Ci0rI2RlZmluZSBEU0Ff Ul9LRVlfU0laRV9JTlZBTElECQkJCSAxMTMKLSAjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTAkJCSAxMTAKLSAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAj ZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjBjL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMxODYtMyBvcGVuc3NsLTEuMC4wYy9jcnlw dG8vZHNhL2RzYXRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjBjL2NyeXB0by9kc2EvZHNhdGVzdC5j LmZpcHMxODYtMwkyMDExLTAyLTAzIDIxOjE0OjA3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjBjL2NyeXB0by9kc2EvZHNhdGVzdC5jCTIwMTEtMDItMDQgMDg6NDA6MjQuMDAwMDAw MDAwICswMTAwCi1AQCAtOTYsMzYgKzk2LDQxIEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgZHNh X2NiKGludCBwLCBpbnQKLSAvKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9nIGFyZSB0YWtlbiBm cm9tIHRoZSB1cGRhdGVkIEFwcGVuZGl4IDUgdG8KLSAgKiBGSVBTIFBVQiAxODYgYW5kIGFsc28g YXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2LTEgKi8KLSBzdGF0aWMgdW5zaWdu ZWQgY2hhciBzZWVkWzIwXT17Ci0tCTB4ZDUsMHgwMSwweDRlLDB4NGIsMHg2MCwweGVmLDB4MmIs MHhhOCwweGI2LDB4MjEsMHgxYiwweDQwLAotLQkweDYyLDB4YmEsMHgzMiwweDI0LDB4ZTAsMHg0 MiwweDdkLDB4ZDMsCi0rCTB4MDIsMHg0NywweDExLDB4OTIsMHgxMSwweDg4LDB4QzgsMHhGQiww eEFGLDB4NDgsMHg0QywweDYyLAotKwkweERGLDB4QTUsMHhCRSwweEEwLDB4QTQsMHgzQywweDU2 LDB4RTMsCi0gCX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3BbXT17Ci0tCTB4OGQs MHhmMiwweGE0LDB4OTQsMHg0OSwweDIyLDB4NzYsMHhhYSwKLS0JMHgzZCwweDI1LDB4NzUsMHg5 YiwweGIwLDB4NjgsMHg2OSwweGNiLAotLQkweGVhLDB4YzAsMHhkOCwweDNhLDB4ZmIsMHg4ZCww eDBjLDB4ZjcsCi0tCTB4Y2IsMHhiOCwweDMyLDB4NGYsMHgwZCwweDc4LDB4ODIsMHhlNSwKLS0J MHhkMCwweDc2LDB4MmYsMHhjNSwweGI3LDB4MjEsMHgwZSwweGFmLAotLQkweGMyLDB4ZTksMHhh ZCwweGFjLDB4MzIsMHhhYiwweDdhLDB4YWMsCi0tCTB4NDksMHg2OSwweDNkLDB4ZmIsMHhmOCww eDM3LDB4MjQsMHhjMiwKLS0JMHhlYywweDA3LDB4MzYsMHhlZSwweDMxLDB4YzgsMHgwMiwweDkx LAotKwkweEFDLDB4Q0IsMHgxRSwweDYzLDB4NjAsMHg2OSwweDBDLDB4RkIsMHgwNiwweDE5LDB4 NjgsMHgzRSwKLSsJMHhBNSwweDAxLDB4NUEsMHhBMiwweDE1LDB4NUMsMHhFMiwweDk5LDB4MkQs MHhENSwweDMwLDB4OTksCi0rCTB4N0UsMHg1RiwweDhELDB4RTIsMHhGNywweEM2LDB4MkUsMHg4 RCwweEEzLDB4OUYsMHg1OCwweEFELAotKwkweEQ2LDB4QTksMHg3RCwweDBFLDB4MEQsMHg5NSww eDUzLDB4QTYsMHg3MSwweDNBLDB4REUsMHhBQiwKLSsJMHhBQywweEU5LDB4RjQsMHgzNiwweDU1 LDB4OUUsMHhCOSwweEQ2LDB4OTMsMHhCRiwweEYzLDB4MTgsCi0rCTB4MUMsMHgxNCwweDdCLDB4 QTUsMHg0MiwweDJFLDB4Q0QsMHgwMCwweEVCLDB4MzUsMHgzQiwweDFCLAotKwkweEE4LDB4NTEs MHhCQiwweEUxLDB4NTgsMHg0MiwweDg1LDB4ODQsMHgyMiwweEE3LDB4OTcsMHg1RSwKLSsJMHg5 OSwweDZGLDB4MzgsMHgyMCwweEJELDB4OUQsMHhCNiwweEQ5LDB4MzMsMHgzNywweDJBLDB4RkQs Ci0rCTB4QkIsMHhENCwweEJDLDB4MEMsMHgyQSwweDY3LDB4Q0IsMHg5RiwweEJCLDB4REYsMHhG OSwweDkzLAotKwkweEFBLDB4RDYsMHhGMCwweEQ2LDB4OTUsMHgwQiwweDVELDB4NjUsMHgxNCww eEQwLDB4MTgsMHg5RCwKLSsJMHhDNiwweEFGLDB4RjAsMHhDNiwweDM3LDB4N0MsMHhGMywweDVG LAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9xW109ewotLQkweGM3LDB4NzMs MHgyMSwweDhjLDB4NzMsMHg3ZSwweGM4LDB4ZWUsCi0tCTB4OTksMHgzYiwweDRmLDB4MmQsMHhl ZCwweDMwLDB4ZjQsMHg4ZSwKLS0JMHhkYSwweGNlLDB4OTEsMHg1ZiwKLSsJMHhFMywweDhFLDB4 NUUsMHg2RCwweEJGLDB4MkIsMHg3OSwweEY4LDB4QzUsMHg0QiwweDg5LDB4OEIsCi0rCTB4QkEs MHgyRCwweDkxLDB4QzMsMHg2QywweDgwLDB4QUMsMHg4NywKLSAJfTsKLSAKLSBzdGF0aWMgdW5z aWduZWQgY2hhciBvdXRfZ1tdPXsKLS0JMHg2MiwweDZkLDB4MDIsMHg3OCwweDM5LDB4ZWEsMHgw YSwweDEzLAotLQkweDQxLDB4MzEsMHg2MywweGE1LDB4NWIsMHg0YywweGI1LDB4MDAsCi0tCTB4 MjksMHg5ZCwweDU1LDB4MjIsMHg5NSwweDZjLDB4ZWYsMHhjYiwKLS0JMHgzYiwweGZmLDB4MTAs MHhmMywweDk5LDB4Y2UsMHgyYywweDJlLAotLQkweDcxLDB4Y2IsMHg5ZCwweGU1LDB4ZmEsMHgy NCwweGJhLDB4YmYsCi0tCTB4NTgsMHhlNSwweGI3LDB4OTUsMHgyMSwweDkyLDB4NWMsMHg5YywK LS0JMHhjNCwweDJlLDB4OWYsMHg2ZiwweDQ2LDB4NGIsMHgwOCwweDhjLAotLQkweGM1LDB4NzIs MHhhZiwweDUzLDB4ZTYsMHhkNywweDg4LDB4MDIsCi0rCTB4NDIsMHg0QSwweDA0LDB4NEUsMHg3 OSwweEI0LDB4OTksMHg3RiwweEZELDB4NTgsMHgzNiwweDJDLAotKwkweDFCLDB4NUYsMHgxOCww eDdFLDB4MEQsMHhDQywweEFCLDB4ODEsMHhDOSwweDVELDB4MTAsMHhDRSwKLSsJMHg0RSwweDgw LDB4N0UsMHg1OCwweEI0LDB4MzQsMHgzRiwweEE3LDB4NDUsMHhDNywweEFBLDB4MzYsCi0rCTB4 MjQsMHg0MiwweEE5LDB4M0IsMHhFOCwweDBFLDB4MDQsMHgwMiwweDJELDB4RkIsMHhBNiwweDEz LAotKwkweEI5LDB4QjUsMHgxNSwweEE1LDB4NTYsMHgwNywweDM1LDB4RTQsMHgwMywweEI2LDB4 NzksMHg3QywKLSsJMHg2MiwweERELDB4REYsMHgzRiwweDcxLDB4M0EsMHg5RCwweDhCLDB4QzQs MHhGNiwweEU3LDB4MUQsCi0rCTB4NTIsMHhBOCwweEE5LDB4NDMsMHgxRCwweDMzLDB4NTEsMHg4 OCwweDM5LDB4QkQsMHg3MywweEU5LAotKwkweDVGLDB4QkUsMHg4MiwweDQ5LDB4MjcsMHhFNiww eEI1LDB4NTMsMHhDMSwweDM4LDB4QUMsMHgyRiwKLSsJMHg2RCwweDk3LDB4NkMsMHhFQiwweDY3 LDB4QzEsMHg1RiwweDY3LDB4RjgsMHgzNSwweDA1LDB4NUUsCi0rCTB4RDUsMHg2OCwweDgwLDB4 QUEsMHg5NiwweENBLDB4MEIsMHg4QSwweEU2LDB4RjEsMHhCMSwweDQxLAotKwkweEM2LDB4NzUs MHg5NCwweDBBLDB4MEEsMHgyQSwweEZBLDB4MjksCi0gCX07Ci0gCi0gc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Ci1AQCAtMTU3LDcgKzE2 Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJQklPX3ByaW50ZihiaW9f ZXJyLCJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNBIHBhcmFtZXRlcnNcbiIpOwotIAotIAlCTl9HRU5D Ql9zZXQoJmNiLCBkc2FfY2IsIGJpb19lcnIpOwotLQlpZigoKGRzYSA9IERTQV9uZXcoKSkgPT0g TlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgNTEyLAotKwlpZigoKGRz YSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRz YSwgMTAyNCwKLSAJCQkJc2VlZCwgMjAsICZjb3VudGVyLCAmaCwgJmNiKSkKLSAJCWdvdG8gZW5k OwotIAotQEAgLTE3MCw5ICsxNzUsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Ci0gCUJJT19wcmludGYoYmlvX2VyciwiXG5jb3VudGVyPSVkIGg9JWxkXG4iLGNvdW50ZXIsaCk7 Ci0gCQkKLSAJRFNBX3ByaW50KGJpb19lcnIsZHNhLDApOwotLQlpZiAoY291bnRlciAhPSAxMDUp IAotKwlpZiAoY291bnRlciAhPSAyMzkpIAotIAkJewotLQkJQklPX3ByaW50ZihiaW9fZXJyLCJj b3VudGVyIHNob3VsZCBiZSAxMDVcbiIpOwotKwkJQklPX3ByaW50ZihiaW9fZXJyLCJjb3VudGVy IHNob3VsZCBiZSAyMzlcbiIpOwotIAkJZ290byBlbmQ7Ci0gCQl9Ci0gCWlmIChoICE9IDIpCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wYy9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZp cHMxODYtMyBvcGVuc3NsLTEuMC4wYy9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCi0t LS0gb3BlbnNzbC0xLjAuMGMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzMTg2 LTMJMjAxMS0wMi0wMyAyMTowNDoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w Yy9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTEtMDItMDQgMDk6MDM6MDMuMDAw MDAwMDAwICswMTAwCi1AQCAtNjgsNDQgKzY4LDQyIEBACi0gCi0gI2lmZGVmIE9QRU5TU0xfRklQ UwotIAotLS8qIHNlZWQsIG91dF9wLCBvdXRfcSwgb3V0X2cgYXJlIHRha2VuIHRoZSBOSVNUIHRl c3QgdmVjdG9ycyAqLwotLQotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0gewotLQkw eDc3LCAweDhmLCAweDQwLCAweDc0LCAweDZmLCAweDY2LCAweGJlLCAweDMzLCAweGNlLCAweGJl LCAweDk5LCAweDM0LAotLQkweDRjLCAweGZjLCAweGYzLCAweDI4LCAweGFhLCAweDcwLCAweDJk LCAweDNhCi0tICAJfTsKLSsJMHgwMiwweDQ3LDB4MTEsMHg5MiwweDExLDB4ODgsMHhDOCwweEZC LDB4QUYsMHg0OCwweDRDLDB4NjIsCi0rCTB4REYsMHhBNSwweEJFLDB4QTAsMHhBNCwweDNDLDB4 NTYsMHhFMywKLSsJfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0gewotLQkw eGY3LCAweDdjLCAweDFiLCAweDgzLCAweGQ4LCAweGU4LCAweDVjLCAweDdmLCAweDg1LCAweDMw LCAweDE3LCAweDU3LAotLQkweDIxLCAweDk1LCAweGZlLCAweDI2LCAweDA0LCAweGViLCAweDQ3 LCAweDRjLCAweDNhLCAweDRhLCAweDgxLCAweDRiLAotLQkweDcxLCAweDJlLCAweGVkLCAweDZl LCAweDRmLCAweDNkLCAweDExLCAweDBmLCAweDdjLCAweGZlLCAweDM2LCAweDQzLAotLQkweDUx LCAweGQ5LCAweDgxLCAweDM5LCAweDE3LCAweGRmLCAweDYyLCAweGY2LCAweDljLCAweDAxLCAw eGE4LCAweDY5LAotLQkweDcxLCAweGRkLCAweDI5LCAweDdmLCAweDQ3LCAweGU2LCAweDY1LCAw eGE2LCAweDIyLCAweGU4LCAweDZhLCAweDEyLAotLQkweDJiLCAweGMyLCAweDgxLCAweGZmLCAw eDMyLCAweDcwLCAweDJmLCAweDllLCAweGNhLCAweDUzLCAweDI2LCAweDQ3LAotLQkweDBmLCAw eDU5LCAweGQ3LCAweDllLCAweDJjLCAweGE1LCAweDA3LCAweGM0LCAweDQ5LCAweDUyLCAweGEz LCAweGU0LAotLQkweDZiLCAweDA0LCAweDAwLCAweDI1LCAweDQ5LCAweGUyLCAweGU2LCAweDdm LCAweDI4LCAweDc4LCAweDk3LCAweGI4LAotLQkweDNhLCAweDMyLCAweDE0LCAweDM4LCAweGEy LCAweDUxLCAweDMzLCAweDIyLCAweDQ0LCAweDdlLCAweGQ3LCAweGVmLAotLQkweDQ1LCAweGRi LCAweDA2LCAweDRhLCAweGQyLCAweDgyLCAweDRhLCAweDgyLCAweDJjLCAweGIxLCAweGQ3LCAw eGQ4LAotLQkweGI2LCAweDczLCAweDAwLCAweDRkLCAweDk0LCAweDc3LCAweDk0LCAweGVmCi0r CTB4QUMsMHhDQiwweDFFLDB4NjMsMHg2MCwweDY5LDB4MEMsMHhGQiwweDA2LDB4MTksMHg2OCww eDNFLAotKwkweEE1LDB4MDEsMHg1QSwweEEyLDB4MTUsMHg1QywweEUyLDB4OTksMHgyRCwweEQ1 LDB4MzAsMHg5OSwKLSsJMHg3RSwweDVGLDB4OEQsMHhFMiwweEY3LDB4QzYsMHgyRSwweDhELDB4 QTMsMHg5RiwweDU4LDB4QUQsCi0rCTB4RDYsMHhBOSwweDdELDB4MEUsMHgwRCwweDk1LDB4NTMs MHhBNiwweDcxLDB4M0EsMHhERSwweEFCLAotKwkweEFDLDB4RTksMHhGNCwweDM2LDB4NTUsMHg5 RSwweEI5LDB4RDYsMHg5MywweEJGLDB4RjMsMHgxOCwKLSsJMHgxQywweDE0LDB4N0IsMHhBNSww eDQyLDB4MkUsMHhDRCwweDAwLDB4RUIsMHgzNSwweDNCLDB4MUIsCi0rCTB4QTgsMHg1MSwweEJC LDB4RTEsMHg1OCwweDQyLDB4ODUsMHg4NCwweDIyLDB4QTcsMHg5NywweDVFLAotKwkweDk5LDB4 NkYsMHgzOCwweDIwLDB4QkQsMHg5RCwweEI2LDB4RDksMHgzMywweDM3LDB4MkEsMHhGRCwKLSsJ MHhCQiwweEQ0LDB4QkMsMHgwQywweDJBLDB4NjcsMHhDQiwweDlGLDB4QkIsMHhERiwweEY5LDB4 OTMsCi0rCTB4QUEsMHhENiwweEYwLDB4RDYsMHg5NSwweDBCLDB4NUQsMHg2NSwweDE0LDB4RDAs MHgxOCwweDlELAotKwkweEM2LDB4QUYsMHhGMCwweEM2LDB4MzcsMHg3QywweEYzLDB4NUYsCi0g CX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKLS0JMHhkNCwgMHgwYSwg MHhhYywgMHg5ZiwgMHhiZCwgMHg4YywgMHg4MCwgMHhjMiwgMHgzOCwgMHg3ZSwgMHgyZSwgMHgw YywKLS0JMHg1MiwgMHg1YywgMHhlYSwgMHgzNCwgMHhhMSwgMHg4MywgMHgzMiwgMHhmMwotKwkw eEUzLDB4OEUsMHg1RSwweDZELDB4QkYsMHgyQiwweDc5LDB4RjgsMHhDNSwweDRCLDB4ODksMHg4 QiwKLSsJMHhCQSwweDJELDB4OTEsMHhDMywweDZDLDB4ODAsMHhBQywweDg3LAotIAl9OwotIAot IHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7Ci0tCTB4MzQsIDB4NzMsIDB4OGIsIDB4 NTcsIDB4ODQsIDB4OGUsIDB4NTUsIDB4YmYsIDB4NTcsIDB4Y2MsIDB4NDEsIDB4YmIsCi0tCTB4 NWUsIDB4MmIsIDB4ZDUsIDB4NDIsIDB4ZGQsIDB4MjQsIDB4MjIsIDB4MmEsIDB4MDksIDB4ZWEs IDB4MjYsIDB4MWUsCi0tCTB4MTcsIDB4NjUsIDB4Y2IsIDB4MWEsIDB4YjMsIDB4MTIsIDB4NDQs IDB4YTMsIDB4OWUsIDB4OTksIDB4ZTksIDB4NjMsCi0tCTB4ZWIsIDB4MzAsIDB4YjEsIDB4Nzgs IDB4N2IsIDB4MDksIDB4NDAsIDB4MzAsIDB4ZmEsIDB4ODMsIDB4YzIsIDB4MzUsCi0tCTB4ZTEs IDB4YzQsIDB4MmQsIDB4NzQsIDB4MWEsIDB4YjEsIDB4ODMsIDB4NTQsIDB4ZDgsIDB4MjksIDB4 ZjQsIDB4Y2YsCi0tCTB4N2YsIDB4NmYsIDB4NjcsIDB4MWMsIDB4MzYsIDB4NDksIDB4ZWUsIDB4 NmMsIDB4YTIsIDB4M2MsIDB4MmQsIDB4NmEsCi0tCTB4ZTksIDB4ZDMsIDB4OWEsIDB4ZjYsIDB4 NTcsIDB4NzgsIDB4NmYsIDB4ZmQsIDB4MzMsIDB4Y2QsIDB4M2MsIDB4ZWQsCi0tCTB4ZmQsIDB4 ZDQsIDB4NDEsIDB4ZTYsIDB4NWMsIDB4OGIsIDB4ZTAsIDB4NjgsIDB4MzEsIDB4NDcsIDB4NDcs IDB4YWYsCi0tCTB4MTIsIDB4YTcsIDB4ZjksIDB4MzIsIDB4MGQsIDB4OTQsIDB4MTUsIDB4NDgs IDB4ZDAsIDB4NTQsIDB4ODUsIDB4YjIsCi0tCTB4MDQsIDB4YjUsIDB4NGQsIDB4ZDQsIDB4OWQs IDB4MDUsIDB4MjIsIDB4MjUsIDB4ZDksIDB4ZmQsIDB4NmMsIDB4MzYsCi0tCTB4ZWYsIDB4YmUs IDB4NjksIDB4NmMsIDB4NTUsIDB4ZjQsIDB4ZWUsIDB4ZWMKLSsJMHg0MiwweDRBLDB4MDQsMHg0 RSwweDc5LDB4QjQsMHg5OSwweDdGLDB4RkQsMHg1OCwweDM2LDB4MkMsCi0rCTB4MUIsMHg1Riww eDE4LDB4N0UsMHgwRCwweENDLDB4QUIsMHg4MSwweEM5LDB4NUQsMHgxMCwweENFLAotKwkweDRF LDB4ODAsMHg3RSwweDU4LDB4QjQsMHgzNCwweDNGLDB4QTcsMHg0NSwweEM3LDB4QUEsMHgzNiwK LSsJMHgyNCwweDQyLDB4QTksMHgzQiwweEU4LDB4MEUsMHgwNCwweDAyLDB4MkQsMHhGQiwweEE2 LDB4MTMsCi0rCTB4QjksMHhCNSwweDE1LDB4QTUsMHg1NiwweDA3LDB4MzUsMHhFNCwweDAzLDB4 QjYsMHg3OSwweDdDLAotKwkweDYyLDB4REQsMHhERiwweDNGLDB4NzEsMHgzQSwweDlELDB4OEIs MHhDNCwweEY2LDB4RTcsMHgxRCwKLSsJMHg1MiwweEE4LDB4QTksMHg0MywweDFELDB4MzMsMHg1 MSwweDg4LDB4MzksMHhCRCwweDczLDB4RTksCi0rCTB4NUYsMHhCRSwweDgyLDB4NDksMHgyNyww eEU2LDB4QjUsMHg1MywweEMxLDB4MzgsMHhBQywweDJGLAotKwkweDZELDB4OTcsMHg2QywweEVC LDB4NjcsMHhDMSwweDVGLDB4NjcsMHhGOCwweDM1LDB4MDUsMHg1RSwKLSsJMHhENSwweDY4LDB4 ODAsMHhBQSwweDk2LDB4Q0EsMHgwQiwweDhBLDB4RTYsMHhGMSwweEIxLDB4NDEsCi0rCTB4QzYs MHg3NSwweDk0LDB4MEEsMHgwQSwweDJBLDB4RkEsMHgyOSwKLSAJfTsKLSAKLSBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkwIjsKLUBAIC0xMzMs NyArMTMxLDcgQEAgaW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKLSAJZ290byBlcnI7Ci0gICAgIGlm KCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsc2VlZCwyMCwmY291bnRlciwm aCxOVUxMKSkKLSAJZ290byBlcnI7Ci0tICAgIGlmIChjb3VudGVyICE9IDM3OCkgCi0rICAgIGlm IChjb3VudGVyICE9IDIzOSkgCi0gCWdvdG8gZXJyOwotICAgICBpZiAoaCAhPSAyKQotIAlnb3Rv IGVycjsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wYy1wa2NzMTItZmlwcy1kZWZhdWx0LnBh dGNoIGIvb3BlbnNzbC0xLjAuMGMtcGtjczEyLWZpcHMtZGVmYXVsdC5wYXRjaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYTY3MTcyMi4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4w Yy1wa2NzMTItZmlwcy1kZWZhdWx0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBA QAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGMvYXBwcy9wa2NzMTIuYy5maXBzLWRlZmF1bHQgb3Bl bnNzbC0xLjAuMGMvYXBwcy9wa2NzMTIuYwotLS0tIG9wZW5zc2wtMS4wLjBjL2FwcHMvcGtjczEy LmMuZmlwcy1kZWZhdWx0CTIwMDktMDctMjcgMjM6MDg6NDUuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMGMvYXBwcy9wa2NzMTIuYwkyMDExLTAyLTA0IDE1OjI1OjM4LjAwMDAwMDAw MCArMDEwMAotQEAgLTY3LDYgKzY3LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot IAotICNkZWZpbmUgUFJPRyBwa2NzMTJfbWFpbgotIAotQEAgLTEzMCw2ICsxMzMsMTEgQEAgaW50 IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAotICAgICBhcHBzX3N0YXJ0dXAoKTsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSkKLSsJY2VydF9wYmUg PSBrZXlfcGJlOyAvKiBjYW5ub3QgdXNlIFJDMiBpbiB0aGUgRklQUyBtb2RlICovCi0rI2VuZGlm Ci0rCi0gICAgIGVuYyA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSAgICAgaWYgKGJpb19lcnIgPT0g TlVMTCApIGJpb19lcnIgPSBCSU9fbmV3X2ZwIChzdGRlcnIsIEJJT19OT0NMT1NFKTsKLSAKCmRp ZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wYy1zcGVlZC1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAu MGMtc3BlZWQtZmlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ4ZDY3 My4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wYy1zcGVlZC1maXBzLnBhdGNoCisrKyAvZGV2 L251bGwKQEAgLTEsOTQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGMvYXBwcy9zcGVl ZC5jLnNwZmlwcyBvcGVuc3NsLTEuMC4wYy9hcHBzL3NwZWVkLmMKLS0tLSBvcGVuc3NsLTEuMC4w Yy9hcHBzL3NwZWVkLmMuc3BmaXBzCTIwMTAtMTEtMTggMTQ6MjI6MjYuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMGMvYXBwcy9zcGVlZC5jCTIwMTEtMDEtMjQgMTc6MjU6MzIuMDAw MDAwMDAwICswMTAwCi1AQCAtMTAwLDYgKzEwMCw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0 cy5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2VuZGlmCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKQotICNpbmNsdWRlIE9QRU5T U0xfVU5JU1RECi0gI2VuZGlmCi1AQCAtOTA4LDcgKzkxMSwxMiBAQCBpbnQgTUFJTihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotIAkJCWlmIChzdHJjbXAo KmFyZ3YsInJzYSIpID09IDApCi0gCQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQkJaWYg KCFGSVBTX21vZGUoKSkKLSsjZW5kaWYKLSsJCQkJewotIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09 MTsKLSsJCQkJfQotIAkJCXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7Ci0gCQkJcnNhX2RvaXRbUl9S U0FfMjA0OF09MTsKLSAJCQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOwotQEAgLTkxOCw3ICs5MjYs MTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICNpZm5kZWYgT1BFTlNTTF9O T19EU0EKLSAJCQlpZiAoc3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQotIAkJCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCQkJCWlmICghRklQU19tb2RlKCkpCi0rI2VuZGlmCi0rCQkJCXsKLSAJ CQlkc2FfZG9pdFtSX0RTQV81MTJdPTE7Ci0rCQkJCX0KLSAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0 XT0xOwotIAkJCWRzYV9kb2l0W1JfRFNBXzIwNDhdPTE7Ci0gCQkJfQotQEAgLTExOTMsMzAgKzEy MDYsNTQgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAlBRVNfc2V0X2VuY3J5 cHRfa2V5KGtleTMyLDI1NiwmYWVzX2tzMyk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05P X0NBTUVMTElBCi0rCWlmIChkb2l0W0RfQ0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NN TF0gfHwgZG9pdFtEX0NCQ18yNTZfQ01MXSkKLSsJICAgIHsKLSAJQ2FtZWxsaWFfc2V0X2tleShr ZXkxNiwxMjgsJmNhbWVsbGlhX2tzMSk7Ci0gCUNhbWVsbGlhX3NldF9rZXkoY2tleTI0LDE5Miwm Y2FtZWxsaWFfa3MyKTsKLSAJQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsMjU2LCZjYW1lbGxpYV9r czMpOwotKwkgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCi0rCWlmIChk b2l0W0RfQ0JDX0lERUFdKQotKwkgICAgewotIAlpZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwm aWRlYV9rcyk7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKLSsJ aWYgKGRvaXRbRF9DQkNfU0VFRF0pCi0rCSAgICB7Ci0gCVNFRURfc2V0X2tleShrZXkxNiwmc2Vl ZF9rcyk7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JDNAotKwlpZiAo ZG9pdFtEX1JDNF0pCi0rCSAgICB7Ci0gCVJDNF9zZXRfa2V5KCZyYzRfa3MsMTYsa2V5MTYpOwot KwkgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SQzIKLSsJaWYgKGRvaXRbRF9D QkNfUkMyXSkKLSsJICAgIHsKLSAJUkMyX3NldF9rZXkoJnJjMl9rcywxNixrZXkxNiwxMjgpOwot KwkgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SQzUKLSsJaWYgKGRvaXRbRF9D QkNfUkM1XSkKLSsJICAgIHsKLSAJUkM1XzMyX3NldF9rZXkoJnJjNV9rcywxNixrZXkxNiwxMik7 Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0JGCi0rCWlmIChkb2l0W0Rf Q0JDX0JGXSkKLSsJICAgIHsKLSAJQkZfc2V0X2tleSgmYmZfa3MsMTYsa2V5MTYpOwotKwkgICAg fQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DQVNUCi0rCWlmIChkb2l0W0RfQ0JDX0NB U1RdKQotKwkgICAgewotIAlDQVNUX3NldF9rZXkoJmNhc3Rfa3MsMTYsa2V5MTYpOwotKwkgICAg fQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAJbWVtc2V0KHJzYV9jLDAsc2l6 ZW9mKHJzYV9jKSk7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMGQtY2F2cy5wYXRjaCBiL29w ZW5zc2wtMS4wLjBkLWNhdnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVl ZDg1NTkuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMGQtY2F2cy5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDIzMiArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vZHNh L2RzYV9nZW4uYy5jYXZzIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0g b3BlbnNzbC0xLjAuMGQvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuY2F2cwkyMDExLTA1LTIzIDE5OjU5 OjU2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9kc2EvZHNhX2dl bi5jCTIwMTEtMDUtMjMgMjI6MzI6NDUuMDAwMDAwMDAwICswMjAwCi1AQCAtODUsNiArODUsMTQg QEAKLSAjZW5kaWYKLSAjaW5jbHVkZSAiZHNhX2xvY2wuaCIKLSAKLSsjaWZuZGVmIE9QRU5TU0xf RklQUwotK3N0YXRpYyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVf dCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBj aGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCi0rCQlCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9y ZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYik7Ci0rc3RhdGljIGludCBGSVBTX2Rz YV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJCUJJR05V TSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLSsjZW5kaWYK LSsKLSBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAot IAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAotIAkJaW50ICpj b3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKLUBAIC0xMTMs MjIgKzEyMSwyNiBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsCi0g CQl9Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5f cGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rCWNvbnN0IEVW UF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xl biwKLSsJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpj YikKLSsJewotKwlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywK LSsJCWV2cG1kLCBzZWVkX2luLCBzZWVkX2xlbiwKLSsJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2Ip OwotKwl9Ci0rI2VuZGlmCi0rCi0gaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBz aXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotIAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCi0gCWludCAqY291bnRlcl9y ZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCi0gCXsKLSAJaW50IG9rPTA7 Ci0gCXVuc2lnbmVkIGNoYXIgc2VlZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0tCXVuc2lnbmVk IGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotLQl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEy NTZfRElHRVNUX0xFTkdUSF07Ci0tCUJJR05VTSAqcjAsKlcsKlgsKmMsKnRlc3Q7Ci0gCUJJR05V TSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsKLS0JQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLS0J aW50IGksIGssIGIsIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0tCWludCBjb3VudGVy PTA7Ci0tCWludCByPTA7Ci0rCXNpemVfdCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0gCUJOX0NUWCAq Y3R4PU5VTEw7Ci0tCXVuc2lnbmVkIGludCBoPTI7Ci0gCi0gI2lmZGVmIE9QRU5TU0xfRklQUwot IAlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotQEAgLTE0OCw2ICsxNjAsNjUgQEAgaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkJZ290byBlcnI7Ci0gCQl9Ci0g I2VuZGlmCi0rCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKLSsJ CXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLwot KwlpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpIAotKwkJc2VlZF9sZW4gPSBzaXplb2Yoc2Vl ZCk7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCi0rCQkJ CQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDI1NiBiaXRz Ki8KLSsJaWYgKHNlZWRfaW4gIT0gTlVMTCkKLSsJCW1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVk X2xlbik7Ci0rCWVsc2UKLSsJCXNlZWRfbGVuID0gMDsKLSsKLSsJaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwot KwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0cywgcWJpdHMsIGV2cG1kLAotKwkJ c2VlZCwgc2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQsIGNiKSkKLSsJCWdvdG8gZXJyOwot KwotKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2coY3R4LCBwLCBxLCAmZywgaF9yZXQsIGNiKSkK LSsJCWdvdG8gZXJyOwotKwotKwlvaz0xOwotK2VycjoKLSsJaWYgKG9rKQotKwkJewotKwkJaWYo cmV0LT5wKSBCTl9mcmVlKHJldC0+cCk7Ci0rCQlpZihyZXQtPnEpIEJOX2ZyZWUocmV0LT5xKTsK LSsJCWlmKHJldC0+ZykgQk5fZnJlZShyZXQtPmcpOwotKwkJcmV0LT5wPUJOX2R1cChwKTsKLSsJ CXJldC0+cT1CTl9kdXAocSk7Ci0rCQlyZXQtPmc9Qk5fZHVwKGcpOwotKwkJaWYgKHJldC0+cCA9 PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9PSBOVUxMKQotKwkJCW9rPTA7Ci0r CQl9Ci0rCWlmKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVl KGN0eCk7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSsJfQotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBT Ci0rc3RhdGljCi0rI2VuZGlmCi0raW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4 LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5z aWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAotKwkJQklHTlVNICoqcF9yZXQsIEJJR05V TSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9r PTA7Ci0rCXVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwl1bnNpZ25l ZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCUJJR05VTSAqcjAsKlcsKlgsKmMs KnRlc3Q7Ci0rCUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsKLSsJQk5fTU9OVF9DVFgg Km1vbnQ9TlVMTDsKLSsJaW50IGksIGssIGIsIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7 Ci0rCWludCBjb3VudGVyPTA7Ci0rCWludCByPTA7Ci0gCi0gCWlmIChxc2l6ZSAhPSBTSEFfRElH RVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgotIAkgICAgcXNp emUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCi1AQCAtMTY5LDI4ICsyNDAsMTIgQEAgaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAotIAliaXRzID0gKGJpdHMrNjMp LzY0KjY0OwotIAotLQlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkp Ci0tCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUg Ki8KLS0JaWYgKHNlZWRfbGVuID4gKHNpemVfdClxc2l6ZSkgCi0tCQlzZWVkX2xlbiA9IHFzaXpl OwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotLQkJCQkJ ICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDI1NiBiaXRzKi8K LS0JaWYgKHNlZWRfaW4gIT0gTlVMTCkKLS0JCW1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVkX2xl bik7Ci0tCi0tCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKLS0JCWdvdG8gZXJyOwot LQotLQlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0tCQlnb3RvIGVycjsK LS0KLS0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCXIwID0gQk5fQ1RYX2dldChjdHgpOwotLQlnID0g Qk5fQ1RYX2dldChjdHgpOwotIAlXID0gQk5fQ1RYX2dldChjdHgpOwotLQlxID0gQk5fQ1RYX2dl dChjdHgpOwotKwkqcV9yZXQgPSBxID0gQk5fQ1RYX2dldChjdHgpOwotIAlYID0gQk5fQ1RYX2dl dChjdHgpOwotIAljID0gQk5fQ1RYX2dldChjdHgpOwotLQlwID0gQk5fQ1RYX2dldChjdHgpOwot KwkqcF9yZXQgPSBwID0gQk5fQ1RYX2dldChjdHgpOwotIAl0ZXN0ID0gQk5fQ1RYX2dldChjdHgp OwotIAotIAlpZiAoIUJOX2xzaGlmdCh0ZXN0LEJOX3ZhbHVlX29uZSgpLGJpdHMtMSkpCi1AQCAt MzEyLDcgKzM2NywzMyBAQCBlbmQ6Ci0gCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAxKSkKLSAJ CWdvdG8gZXJyOwotIAotLQkvKiBXZSBub3cgbmVlZCB0byBnZW5lcmF0ZSBnICovCi0rCW9rPTE7 Ci0rZXJyOgotKwlpZiAob2spCi0rCQl7Ci0rCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNv dW50ZXJfcmV0PWNvdW50ZXI7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSsJfQotKwotKyNpZm5kZWYg T1BFTlNTTF9GSVBTCi0rc3RhdGljCi0rI2VuZGlmCi0raW50IEZJUFNfZHNhX2dlbmVyYXRlX2co Qk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAotKwkJQklHTlVNICoqZ19yZXQsIHVu c2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rPTA7Ci0rCUJJ R05VTSAqcjAsICp0ZXN0LCAqZyA9IE5VTEw7Ci0rCUJOX01PTlRfQ1RYICptb250OwotKwl1bnNp Z25lZCBpbnQgaD0yOwotKwotKwlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwp Ci0rCQlnb3RvIGVycjsKLSsKLSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCSpnX3JldCA9IGcg PSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0gCS8qIFNl dCByMD0ocC0xKS9xICovCi0gCWlmICghQk5fc3ViKHRlc3QscCxCTl92YWx1ZV9vbmUoKSkpIGdv dG8gZXJyOwotIAlpZiAoIUJOX2RpdihyMCxOVUxMLHRlc3QscSxjdHgpKSBnb3RvIGVycjsKLUBA IC0zMzYsMjUgKzQxNyw4IEBAIGVuZDoKLSBlcnI6Ci0gCWlmIChvaykKLSAJCXsKLS0JCWlmKHJl dC0+cCkgQk5fZnJlZShyZXQtPnApOwotLQkJaWYocmV0LT5xKSBCTl9mcmVlKHJldC0+cSk7Ci0t CQlpZihyZXQtPmcpIEJOX2ZyZWUocmV0LT5nKTsKLS0JCXJldC0+cD1CTl9kdXAocCk7Ci0tCQly ZXQtPnE9Qk5fZHVwKHEpOwotLQkJcmV0LT5nPUJOX2R1cChnKTsKLS0JCWlmIChyZXQtPnAgPT0g TlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKLS0JCQl7Ci0tCQkJb2s9 MDsKLS0JCQlnb3RvIGVycjsKLS0JCQl9Ci0tCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNv dW50ZXJfcmV0PWNvdW50ZXI7Ci0gCQlpZiAoaF9yZXQgIT0gTlVMTCkgKmhfcmV0PWg7Ci0gCQl9 Ci0tCWlmKGN0eCkKLS0JCXsKLS0JCUJOX0NUWF9lbmQoY3R4KTsKLS0JCUJOX0NUWF9mcmVlKGN0 eCk7Ci0tCQl9Ci0gCWlmIChtb250ICE9IE5VTEwpIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7Ci0g CXJldHVybiBvazsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL2RzYS9kc2Eu aC5jYXZzIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9kc2EvZHNhLmgKLS0tLSBvcGVuc3NsLTEuMC4w ZC9jcnlwdG8vZHNhL2RzYS5oLmNhdnMJMjAxMS0wNS0yMyAxOTo1OTo1Ni4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vZHNhL2RzYS5oCTIwMTEtMDUtMjMgMjI6MzM6 MzMuMDAwMDAwMDAwICswMjAwCi1AQCAtMjY2LDYgKzI2NiwxNyBAQCBpbnQJRFNBX3ByaW50X2Zw KEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCi0gREggKkRTQV9kdXBfREgoY29uc3QgRFNBICpyKTsK LSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5f cGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rCWNvbnN0IEVW UF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xl biwKLSsJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpj Yik7Ci0raW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywg c2l6ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2Vl ZCwgaW50IHNlZWRfbGVuLAotKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQg KmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOwotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJO X0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJCUJJR05VTSAqKmdfcmV0LCB1bnNp Z25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIEVW UF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cykgXAotIAlFVlBfUEtF WV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKLSAJ CQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUywgbmJpdHMsIE5VTEwpCgpkaWZmIC0t Z2l0IGEvb3BlbnNzbC0xLjAuMGQtaW50ZWxvcHRzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMGQtaW50 ZWxvcHRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWJhN2IzLi4wMDAw MDAwCi0tLSBhL29wZW5zc2wtMS4wLjBkLWludGVsb3B0cy5wYXRjaAorKysgL2Rldi9udWxsCkBA IC0xLDYyMjEgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL2Flcy9hc20v YWVzbmkteDg2LnBsLmludGVsb3B0cyBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vYWVzL2FzbS9hZXNu aS14ODYucGwKLS0tLSBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vYWVzL2FzbS9hZXNuaS14ODYucGwu aW50ZWxvcHRzCTIwMTEtMDgtMjQgMTI6NTA6NTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMGQvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2LnBsCTIwMTEtMDgtMjQgMTI6NTA6NTYu MDAwMDAwMDAwICswMjAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL2VudiBwZXJsCi0r IyEvdXNyL2Jpbi9wZXJsCi0gCi0gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICMgV3JpdHRlbiBieSBBbmR5IFBv bHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCi1AQCAtMTEsMTAg KzExLDM3IEBACi0gIyBPcGVuU1NMIGNvbnRleHQgaXQncyB1c2VkIHdpdGggSW50ZWwgZW5naW5l LCBidXQgY2FuIGFsc28gYmUgdXNlZCBhcwotICMgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgY3J5 cHRvL2Flcy9hc20vYWVzLTU4Ni5wbCBbc2VlIGJlbG93IGZvcgotICMgZGV0YWlsc10uCi0rIwot KyMgUGVyZm9ybWFuY2UuCi0rIwotKyMgVG8gc3RhcnQgd2l0aCBzZWUgY29ycmVzcG9uZGluZyBw YXJhZ3JhcGggaW4gYWVzbmkteDg2XzY0LnBsLi4uCi0rIyBJbnN0ZWFkIG9mIGZpbGxpbmcgdGFi bGUgc2ltaWxhciB0byBvbmUgZm91bmQgdGhlcmUgSSd2ZSBjaG9zZW4gdG8KLSsjIHN1bW1hcml6 ZSAqY29tcGFyaXNvbiogcmVzdWx0cyBmb3IgcmF3IEVDQiwgQ1RSIGFuZCBDQkMgYmVuY2htYXJr cy4KLSsjIFRoZSBzaW1wbGlmaWVkIHRhYmxlIGJlbG93IHJlcHJlc2VudHMgMzItYml0IHBlcmZv cm1hbmNlIHJlbGF0aXZlCi0rIyB0byA2NC1iaXQgb25lIGluIGV2ZXJ5IGdpdmVuIHBvaW50LiBS YXRpb3MgdmFyeSBmb3IgZGlmZmVyZW50Ci0rIyBlbmNyeXB0aW9uIG1vZGVzLCB0aGVyZWZvcmUg aW50ZXJ2YWwgdmFsdWVzLgotKyMKLSsjCTE2LWJ5dGUgICAgIDY0LWJ5dGUgICAgIDI1Ni1ieXRl ICAgIDEtS0IgICAgICAgIDgtS0IKLSsjCTUzLTY3JSAgICAgIDY3LTg0JSAgICAgIDkxLTk0JSAg ICAgIDk1LTk4JSAgICAgIDk3LTk5LjUlCi0rIwotKyMgTG93ZXIgcmF0aW9zIGZvciBzbWFsbGVy IGJsb2NrIHNpemVzIGFyZSBwZXJmZWN0bHkgdW5kZXJzdGFuZGFibGUsCi0rIyBiZWNhdXNlIGZ1 bmN0aW9uIGNhbGwgb3ZlcmhlYWQgaXMgaGlnaGVyIGluIDMyLWJpdCBtb2RlLiBMYXJnZXN0Ci0r IyA4LUtCIGJsb2NrIHBlcmZvcm1hbmNlIGlzIHZpcnR1YWxseSBzYW1lOiAzMi1iaXQgY29kZSBp cyBsZXNzIHRoYW4KLSsjIDElIHNsb3dlciBmb3IgRUNCLCBDQkMgYW5kIENDTSwgYW5kIH4zJSBz bG93ZXIgb3RoZXJ3aXNlLgotKwotKyMgSmFudWFyeSAyMDExCi0rIwotKyMgU2VlIGFlc25pLXg4 Nl82NC5wbCBmb3IgZGV0YWlscy4gVW5saWtlIHg4Nl82NCB2ZXJzaW9uIHRoaXMgbW9kdWxlCi0r IyBpbnRlcmxlYXZlcyBhdCBtb3N0IDYgYWVzW2VuY3xkZWNdIGluc3RydWN0aW9ucywgYmVjYXVz ZSB0aGVyZSBhcmUKLSsjIG5vdCBlbm91Z2ggcmVnaXN0ZXJzIGZvciA4eCBpbnRlcmxlYXZlIFt3 aGljaCBzaG91bGQgYmUgb3B0aW1hbCBmb3IKLSsjIFNhbmR5IEJyaWRnZV0uIEFjdHVhbGx5LCBw ZXJmb3JtYW5jZSByZXN1bHRzIGZvciA2eCBpbnRlcmxlYXZlCi0rIyBmYWN0b3IgcHJlc2VudGVk IGluIGFlc25pLXg4Nl82NC5wbCAoZXhjZXB0IGZvciBDVFIpIGFyZSBmb3IgdGhpcwotKyMgbW9k dWxlLgotIAotICRQUkVGSVg9ImFlc25pIjsJIyBpZiAkUFJFRklYIGlzIHNldCB0byAiQUVTIiwg dGhlIHNjcmlwdAotIAkJCSMgZ2VuZXJhdGVzIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCi0gCQkJ IyBjcnlwdG8vYWVzL2FzbS9hZXMtNTg2LnBsOi0pCi0rJGlubGluZT0xOwkJIyBpbmxpbmUgX2Fl c25pX1tlbnxkZV1jcnlwdAotIAotICQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9 JDE7Ci0gcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7Ci1AQCAtMjIs NyArNDksOCBAQCByZXF1aXJlICJ4ODZhc20ucGwiOwotIAotICZhc21faW5pdCgkQVJHVlswXSwk MCk7Ci0gCi0tJG1vdmVrZXkgPSBldmFsKCRSUkVGSVggZXEgImFzZW5pIiA/ICIqbW92YXBzIiA6 ICIqbW92dXBzIik7Ci0raWYgKCRQUkVGSVggZXEgImFlc25pIikJeyAkbW92ZWtleT0qbW92dXBz OyB9Ci0rZWxzZQkJCXsgJG1vdmVrZXk9Km1vdnVwczsgfQotIAotICRsZW49ImVheCI7Ci0gJHJv dW5kcz0iZWN4IjsKLUBAIC0zMiwxMTQgKzYwLDE0NCBAQCAkb3V0PSJlZGkiOwotICRyb3VuZHNf PSJlYngiOwkjIGJhY2t1cCBjb3B5IGZvciAkcm91bmRzCi0gJGtleV89ImVicCI7CSMgYmFja3Vw IGNvcHkgZm9yICRrZXkKLSAKLS0kaW5vdXQwPSJ4bW0wIjsKLS0kaW5vdXQxPSJ4bW0xIjsKLS0k aW5vdXQyPSJ4bW0yIjsKLS0kcm5ka2V5MD0ieG1tMyI7Ci0tJHJuZGtleTE9InhtbTQiOwotLSRp dmVjPSJ4bW01IjsKLS0kaW4wPSJ4bW02IjsKLS0kaW4xPSJ4bW03IjsJJGlub3V0Mz0ieG1tNyI7 Ci0tCi0rJHJuZGtleTA9InhtbTAiOwotKyRybmRrZXkxPSJ4bW0xIjsKLSskaW5vdXQwPSJ4bW0y IjsKLSskaW5vdXQxPSJ4bW0zIjsKLSskaW5vdXQyPSJ4bW00IjsKLSskaW5vdXQzPSJ4bW01IjsJ JGluMT0ieG1tNSI7Ci0rJGlub3V0ND0ieG1tNiI7CSRpbjA9InhtbTYiOwotKyRpbm91dDU9Inht bTciOwkkaXZlYz0ieG1tNyI7Ci0rCi0rIyBBRVNOSSBleHRlbnN0aW9uCi0rc3ViIGFlc2tleWdl bmFzc2lzdAotK3sgbXkoJGRzdCwkc3JjLCRpbW0pPUBfOwotKyAgICBpZiAoIiRkc3Q6JHNyYyIg PX4gL3htbShbMC03XSk6eG1tKFswLTddKS8pCi0rICAgIHsJJmRhdGFfYnl0ZSgweDY2LDB4MGYs MHgzYSwweGRmLDB4YzB8KCQxPDwzKXwkMiwkaW1tKTsJfQotK30KLStzdWIgYWVzY29tbW9uCi0r eyBteSgkb3Bjb2RlbGV0LCRkc3QsJHNyYyk9QF87Ci0rICAgIGlmICgiJGRzdDokc3JjIiA9fiAv eG1tKFswLTddKTp4bW0oWzAtN10pLykKLSsgICAgewkmZGF0YV9ieXRlKDB4NjYsMHgwZiwweDM4 LCRvcGNvZGVsZXQsMHhjMHwoJDE8PDMpfCQyKTt9Ci0rfQotK3N1YiBhZXNpbWMJeyBhZXNjb21t b24oMHhkYixAXyk7IH0KLStzdWIgYWVzZW5jCXsgYWVzY29tbW9uKDB4ZGMsQF8pOyB9Ci0rc3Vi IGFlc2VuY2xhc3QJeyBhZXNjb21tb24oMHhkZCxAXyk7IH0KLStzdWIgYWVzZGVjCXsgYWVzY29t bW9uKDB4ZGUsQF8pOyB9Ci0rc3ViIGFlc2RlY2xhc3QJeyBhZXNjb21tb24oMHhkZixAXyk7IH0K LSsMCi0gIyBJbmxpbmUgdmVyc2lvbiBvZiBpbnRlcm5hbCBhZXNuaV9bZW58ZGVdY3J5cHQxCi0r eyBteSAkc247Ci0gc3ViIGFlc25pX2lubGluZV9nZW5lcmF0ZTEKLS17IG15ICRwPXNoaWZ0Owot K3sgbXkgKCRwLCRpbm91dCwkaXZlYyk9QF87ICRpbm91dD0kaW5vdXQwIGlmICghZGVmaW5lZCgk aW5vdXQpKTsKLSsgICRzbisrOwotIAotICAgICAmJG1vdmVrZXkJCSgkcm5ka2V5MCwmUVdQKDAs JGtleSkpOwotICAgICAmJG1vdmVrZXkJCSgkcm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKLSsgICAg JnhvcnBzCQkoJGl2ZWMsJHJuZGtleTApCWlmIChkZWZpbmVkKCRpdmVjKSk7Ci0gICAgICZsZWEJ CSgka2V5LCZEV1AoMzIsJGtleSkpOwotLSAgICAmcHhvcgkJKCRpbm91dDAsJHJuZGtleTApOwot LSAgICAmc2V0X2xhYmVsKCIke3B9MV9sb29wIik7Ci0tCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAs JHJuZGtleTEpIjsKLSsgICAgJnhvcnBzCQkoJGlub3V0LCRpdmVjKQkJaWYgKGRlZmluZWQoJGl2 ZWMpKTsKLSsgICAgJnhvcnBzCQkoJGlub3V0LCRybmRrZXkwKQlpZiAoIWRlZmluZWQoJGl2ZWMp KTsKLSsgICAgJnNldF9sYWJlbCgiJHtwfTFfbG9vcF8kc24iKTsKLSsJZXZhbCImYWVzJHtwfQko JGlub3V0LCRybmRrZXkxKSI7Ci0gCSZkZWMJCSgkcm91bmRzKTsKLSAJJiRtb3Zla2V5CSgkcm5k a2V5MSwmUVdQKDAsJGtleSkpOwotIAkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKLS0gICAg JmpuegkJKCZsYWJlbCgiJHtwfTFfbG9vcCIpKTsKLS0gICAgZXZhbCImYWVzJHtwfWxhc3QJKCRp bm91dDAsJHJuZGtleTEpIjsKLS19Ci0rICAgICZqbnoJCSgmbGFiZWwoIiR7cH0xX2xvb3BfJHNu IikpOwotKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0LCRybmRrZXkxKSI7Ci0rfX0KLSAK LSBzdWIgYWVzbmlfZ2VuZXJhdGUxCSMgZnVsbHkgdW5yb2xsZWQgbG9vcAotLXsgbXkgJHA9c2hp ZnQ7Ci0reyBteSAoJHAsJGlub3V0KT1AXzsgJGlub3V0PSRpbm91dDAgaWYgKCFkZWZpbmVkKCRp bm91dCkpOwotIAotICAgICAmZnVuY3Rpb25fYmVnaW5fQigiX2Flc25pXyR7cH1yeXB0MSIpOwot LQkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7Ci0rCSZtb3Z1cHMJCSgkcm5ka2V5 MCwmUVdQKDAsJGtleSkpOwotIAkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMHgxMCwka2V5KSk7 Ci0tCSZjbXAJCSgkcm91bmRzLDExKTsKLS0JJnB4b3IJCSgkaW5vdXQwLCRybmRrZXkwKTsKLSsJ JnhvcnBzCQkoJGlub3V0LCRybmRrZXkwKTsKLSAJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDB4 MjAsJGtleSkpOwotIAkmbGVhCQkoJGtleSwmRFdQKDB4MzAsJGtleSkpOwotKwkmY21wCQkoJHJv dW5kcywxMSk7Ci0gCSZqYgkJKCZsYWJlbCgiJHtwfTEyOCIpKTsKLSAJJmxlYQkJKCRrZXksJkRX UCgweDIwLCRrZXkpKTsKLSAJJmplCQkoJmxhYmVsKCIke3B9MTkyIikpOwotIAkmbGVhCQkoJGtl eSwmRFdQKDB4MjAsJGtleSkpOwotLQlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkxKSI7 Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MSkiOwotIAkmJG1vdmVrZXkJKCRybmRr ZXkxLCZRV1AoLTB4NDAsJGtleSkpOwotLQlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkw KSI7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MCkiOwotIAkmJG1vdmVrZXkJKCRy bmRrZXkwLCZRV1AoLTB4MzAsJGtleSkpOwotICAgICAmc2V0X2xhYmVsKCIke3B9MTkyIik7Ci0t CWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKLSsJZXZhbCImYWVzJHtwfQkoJGlu b3V0LCRybmRrZXkxKSI7Ci0gCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgtMHgyMCwka2V5KSk7 Ci0tCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTApIjsKLSsJZXZhbCImYWVzJHtwfQko JGlub3V0LCRybmRrZXkwKSI7Ci0gCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgtMHgxMCwka2V5 KSk7Ci0gICAgICZzZXRfbGFiZWwoIiR7cH0xMjgiKTsKLS0JZXZhbCImYWVzJHtwfQkoJGlub3V0 MCwkcm5ka2V5MSkiOwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTEpIjsKLSAJJiRt b3Zla2V5CSgkcm5ka2V5MSwmUVdQKDAsJGtleSkpOwotLQlldmFsIiZhZXMke3B9CSgkaW5vdXQw LCRybmRrZXkwKSI7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MCkiOwotIAkmJG1v dmVrZXkJKCRybmRrZXkwLCZRV1AoMHgxMCwka2V5KSk7Ci0tCWV2YWwiJmFlcyR7cH0JKCRpbm91 dDAsJHJuZGtleTEpIjsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0LCRybmRrZXkxKSI7Ci0gCSYk bW92ZWtleQkoJHJuZGtleTEsJlFXUCgweDIwLCRrZXkpKTsKLS0JZXZhbCImYWVzJHtwfQkoJGlu b3V0MCwkcm5ka2V5MCkiOwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTApIjsKLSAJ JiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDB4MzAsJGtleSkpOwotLQlldmFsIiZhZXMke3B9CSgk aW5vdXQwLCRybmRrZXkxKSI7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MSkiOwot IAkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMHg0MCwka2V5KSk7Ci0tCWV2YWwiJmFlcyR7cH0J KCRpbm91dDAsJHJuZGtleTApIjsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0LCRybmRrZXkwKSI7 Ci0gCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgweDUwLCRrZXkpKTsKLS0JZXZhbCImYWVzJHtw fQkoJGlub3V0MCwkcm5ka2V5MSkiOwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTEp IjsKLSAJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDB4NjAsJGtleSkpOwotLQlldmFsIiZhZXMk e3B9CSgkaW5vdXQwLCRybmRrZXkwKSI7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5 MCkiOwotIAkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMHg3MCwka2V5KSk7Ci0tCWV2YWwiJmFl cyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKLS0gICAgZXZhbCImYWVzJHtwfWxhc3QJKCRpbm91 dDAsJHJuZGtleTApIjsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0LCRybmRrZXkxKSI7Ci0rICAg IGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQsJHJuZGtleTApIjsKLSAgICAgJnJldCgpOwotICAg ICAmZnVuY3Rpb25fZW5kX0IoIl9hZXNuaV8ke3B9cnlwdDEiKTsKLSB9Ci0tCi0rDAotICMgdm9p ZCAkUFJFRklYX2VuY3J5cHQgKGNvbnN0IHZvaWQgKmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tF WSAqa2V5KTsKLS0jICZhZXNuaV9nZW5lcmF0ZTEoImRlYyIpOwotKyZhZXNuaV9nZW5lcmF0ZTEo ImVuYyIpIGlmICghJGlubGluZSk7Ci0gJmZ1bmN0aW9uX2JlZ2luX0IoIiR7UFJFRklYfV9lbmNy eXB0Iik7Ci0gCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMCkpOwotIAkmbW92CSgka2V5LCZ3cGFyYW0o MikpOwotIAkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwiZWF4IikpOwotIAkmbW92CSgkcm91bmRz LCZEV1AoMjQwLCRrZXkpKTsKLSAJJm1vdgkoImVheCIsJndwYXJhbSgxKSk7Ci0tCSZhZXNuaV9p bmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJIyAmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MSIpOwotKwlp ZiAoJGlubGluZSkKLSsJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJfQotKwll bHNlCi0rCXsgICAmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MSIpOwl9Ci0gCSZtb3Z1cHMJKCZRV1Ao MCwiZWF4IiksJGlub3V0MCk7Ci0gCSZyZXQJKCk7Ci0gJmZ1bmN0aW9uX2VuZF9CKCIke1BSRUZJ WH1fZW5jcnlwdCIpOwotIAotICMgdm9pZCAkUFJFRklYX2RlY3J5cHQgKGNvbnN0IHZvaWQgKmlu cCx2b2lkICpvdXQsY29uc3QgQUVTX0tFWSAqa2V5KTsKLS0jICZhZXNuaV9nZW5lcmF0ZTEoImRl YyIpOwotKyZhZXNuaV9nZW5lcmF0ZTEoImRlYyIpIGlmKCEkaW5saW5lKTsKLSAmZnVuY3Rpb25f YmVnaW5fQigiJHtQUkVGSVh9X2RlY3J5cHQiKTsKLSAJJm1vdgkoImVheCIsJndwYXJhbSgwKSk7 Ci0gCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7Ci0gCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCJl YXgiKSk7Ci0gCSZtb3YJKCRyb3VuZHMsJkRXUCgyNDAsJGtleSkpOwotIAkmbW92CSgiZWF4Iiwm d3BhcmFtKDEpKTsKLS0JJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImRlYyIpOwkjICZjYWxsCSgi X2Flc25pX2RlY3J5cHQxIik7Ci0rCWlmICgkaW5saW5lKQotKwl7ICAgJmFlc25pX2lubGluZV9n ZW5lcmF0ZTEoImRlYyIpOwl9Ci0rCWVsc2UKLSsJeyAgICZjYWxsCSgiX2Flc25pX2RlY3J5cHQx Iik7CX0KLSAJJm1vdnVwcwkoJlFXUCgwLCJlYXgiKSwkaW5vdXQwKTsKLSAJJnJldAkoKTsKLSAm ZnVuY3Rpb25fZW5kX0IoIiR7UFJFRklYfV9kZWNyeXB0Iik7Ci0tDAotLSMgX2Flc25pX1tlbnxk ZV1jcnlwdFszNF0gYXJlIHByaXZhdGUgaW50ZXJmYWNlcywgTiBkZW5vdGVzIGludGVybGVhdmUK LS0jIGZhY3Rvci4gV2h5IDN4IHN1YnJvdXRpbmUgaXMgdXNlZCBpbiBsb29wcz8gRXZlbiB0aG91 Z2ggYWVzW2VuY3xkZWNdCi0tIyBsYXRlbmN5IGlzIDYsIGl0IHR1cm5lZCBvdXQgdGhhdCBpdCBj YW4gYmUgc2NoZWR1bGVkIG9ubHkgZXZlcnkKLS0jICpzZWNvbmQqIGN5Y2xlLiBUaHVzIDN4IGlu dGVybGVhdmUgaXMgdGhlIG9uZSBwcm92aWRpbmcgb3B0aW1hbAotKwotKyMgX2Flc25pX1tlbnxk ZV1jcnlwdE4gYXJlIHByaXZhdGUgaW50ZXJmYWNlcywgTiBkZW5vdGVzIGludGVybGVhdmUKLSsj IGZhY3Rvci4gV2h5IDN4IHN1YnJvdXRpbmUgd2VyZSBvcmlnaW5hbGx5IHVzZWQgaW4gbG9vcHM/ IEV2ZW4gdGhvdWdoCi0rIyBhZXNbZW5jfGRlY10gbGF0ZW5jeSB3YXMgb3JpZ2luYWxseSA2LCBp dCBjb3VsZCBiZSBzY2hlZHVsZWQgb25seQotKyMgZXZlcnkgKjJuZCogY3ljbGUuIFRodXMgM3gg aW50ZXJsZWF2ZSB3YXMgdGhlIG9uZSBwcm92aWRpbmcgb3B0aW1hbAotICMgdXRpbGl6YXRpb24s IGkuZS4gd2hlbiBzdWJyb3V0aW5lJ3MgdGhyb3VnaHB1dCBpcyB2aXJ0dWFsbHkgc2FtZSBhcwot ICMgb2Ygbm9uLWludGVybGVhdmVkIHN1YnJvdXRpbmUgW2ZvciBudW1iZXIgb2YgaW5wdXQgYmxv Y2tzIHVwIHRvIDNdLgotLSMgVGhpcyBpcyB3aHkgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gaW1wbGVt ZW50IDJ4IHN1YnJvdXRpbmUuIEFzIHNvb24KLS0jIGFzL2lmIEludGVsIGltcHJvdmVzIHRocm91 Z2hwdXQgYnkgbWFraW5nIGl0IHBvc3NpYmxlIHRvIHNjaGVkdWxlCi0tIyB0aGUgaW5zdHJ1Y3Rp b25zIGluIHF1ZXN0aW9uICpldmVyeSogY3ljbGVzIEkgd291bGQgaGF2ZSB0bwotLSMgaW1wbGVt ZW50IDZ4IGludGVybGVhdmUgYW5kIHVzZSBpdCBpbiBsb29wLi4uCi0rIyBUaGlzIGlzIHdoeSBp dCBtYWtlcyBubyBzZW5zZSB0byBpbXBsZW1lbnQgMnggc3Vicm91dGluZS4KLSsjIGFlc1tlbmN8 ZGVjXSBsYXRlbmN5IGluIG5leHQgcHJvY2Vzc29yIGdlbmVyYXRpb24gaXMgOCwgYnV0IHRoZQot KyMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzY2hlZHVsZWQgZXZlcnkgY3ljbGUuIE9wdGltYWwgaW50 ZXJsZWF2ZSBmb3IKLSsjIG5ldyBwcm9jZXNzb3IgaXMgdGhlcmVmb3JlIDh4LCBidXQgaXQncyB1 bmZlYXNpYmxlIHRvIGFjY29tbW9kYXRlIGl0Ci0rIyBpbiBYTU0gcmVnaXN0ZXJzIGFkZHJlYXNz YWJsZSBpbiAzMi1iaXQgbW9kZSBhbmQgdGhlcmVmb3JlIDZ4IGlzCi0rIyB1c2VkIGluc3RlYWQu Li4KLSsKLSBzdWIgYWVzbmlfZ2VuZXJhdGUzCi0geyBteSAkcD1zaGlmdDsKLSAKLUBAIC0xNDgs MjQgKzIwNiwyNCBAQCBzdWIgYWVzbmlfZ2VuZXJhdGUzCi0gCSZzaHIJCSgkcm91bmRzLDEpOwot IAkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleSkpOwotIAkmbGVhCQkoJGtleSwmRFdQ KDMyLCRrZXkpKTsKLS0JJnB4b3IJCSgkaW5vdXQwLCRybmRrZXkwKTsKLSsJJnhvcnBzCQkoJGlu b3V0MCwkcm5ka2V5MCk7Ci0gCSZweG9yCQkoJGlub3V0MSwkcm5ka2V5MCk7Ci0gCSZweG9yCQko JGlub3V0Miwkcm5ka2V5MCk7Ci0tCSZqbXAJCSgmbGFiZWwoIiR7cH0zX2xvb3AiKSk7Ci0tICAg ICZzZXRfbGFiZWwoIiR7cH0zX2xvb3AiLDE2KTsKLS0JZXZhbCImYWVzJHtwfQkoJGlub3V0MCwk cm5ka2V5MSkiOwotIAkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7Ci0rCi0rICAg ICZzZXRfbGFiZWwoIiR7cH0zX2xvb3AiKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5k a2V5MSkiOwotIAlldmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7Ci0gCSZkZWMJCSgk cm91bmRzKTsKLSAJZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5MSkiOwotIAkmJG1vdmVr ZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleSkpOwotIAlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRy bmRrZXkwKSI7Ci0tCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleSkpOwotIAlldmFsIiZhZXMke3B9 CSgkaW5vdXQxLCRybmRrZXkwKSI7Ci0rCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleSkpOwotIAll dmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkwKSI7Ci0rCSYkbW92ZWtleQkoJHJuZGtleTAs JlFXUCgwLCRrZXkpKTsKLSAJJmpuegkJKCZsYWJlbCgiJHtwfTNfbG9vcCIpKTsKLSAgICAgZXZh bCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOwotLSAgICAmJG1vdmVrZXkJCSgkcm5ka2V5 MCwmUVdQKDAsJGtleSkpOwotICAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7 Ci0gICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTEpIjsKLSAgICAgZXZhbCImYWVz JHtwfWxhc3QJKCRpbm91dDAsJHJuZGtleTApIjsKLUBAIC0xODcsMjcgKzI0NSwyOCBAQCBzdWIg YWVzbmlfZ2VuZXJhdGU0Ci0gCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5KSk7Ci0g CSZzaHIJCSgkcm91bmRzLDEpOwotIAkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsKLS0JJnB4 b3IJCSgkaW5vdXQwLCRybmRrZXkwKTsKLSsJJnhvcnBzCQkoJGlub3V0MCwkcm5ka2V5MCk7Ci0g CSZweG9yCQkoJGlub3V0MSwkcm5ka2V5MCk7Ci0gCSZweG9yCQkoJGlub3V0Miwkcm5ka2V5MCk7 Ci0gCSZweG9yCQkoJGlub3V0Mywkcm5ka2V5MCk7Ci0tCSZqbXAJCSgmbGFiZWwoIiR7cH0zX2xv b3AiKSk7Ci0tICAgICZzZXRfbGFiZWwoIiR7cH0zX2xvb3AiLDE2KTsKLS0JZXZhbCImYWVzJHtw fQkoJGlub3V0MCwkcm5ka2V5MSkiOwotIAkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5 KSk7Ci0rCi0rICAgICZzZXRfbGFiZWwoIiR7cH00X2xvb3AiKTsKLSsJZXZhbCImYWVzJHtwfQko JGlub3V0MCwkcm5ka2V5MSkiOwotIAlldmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7 Ci0gCSZkZWMJCSgkcm91bmRzKTsKLSAJZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5MSki OwotIAlldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkxKSI7Ci0gCSYkbW92ZWtleQkoJHJu ZGtleTEsJlFXUCgxNiwka2V5KSk7Ci0gCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTAp IjsKLS0JJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7Ci0gCWV2YWwiJmFlcyR7cH0JKCRpbm91 dDEsJHJuZGtleTApIjsKLSsJJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7Ci0gCWV2YWwiJmFl cyR7cH0JKCRpbm91dDIsJHJuZGtleTApIjsKLSAJZXZhbCImYWVzJHtwfQkoJGlub3V0Mywkcm5k a2V5MCkiOwotLQkmam56CQkoJmxhYmVsKCIke3B9M19sb29wIikpOwotKwkmJG1vdmVrZXkJKCRy bmRrZXkwLCZRV1AoMCwka2V5KSk7Ci0rICAgICZqbnoJCSgmbGFiZWwoIiR7cH00X2xvb3AiKSk7 Ci0rCi0gICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKLS0gICAgJiRtb3Zl a2V5CQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKLSAgICAgZXZhbCImYWVzJHtwfQkoJGlub3V0 MSwkcm5ka2V5MSkiOwotICAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkxKSI7Ci0g ICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDMsJHJuZGtleTEpIjsKLUBAIC0yMTgsMTIgKzI3Nyw3 NiBAQCBzdWIgYWVzbmlfZ2VuZXJhdGU0Ci0gICAgICZyZXQoKTsKLSAgICAgJmZ1bmN0aW9uX2Vu ZF9CKCJfYWVzbmlfJHtwfXJ5cHQ0Iik7Ci0gfQotKwotK3N1YiBhZXNuaV9nZW5lcmF0ZTYKLSt7 IG15ICRwPXNoaWZ0OwotKwotKyAgICAmZnVuY3Rpb25fYmVnaW5fQigiX2Flc25pXyR7cH1yeXB0 NiIpOwotKyAgICAmc3RhdGljX2xhYmVsKCJfYWVzbmlfJHtwfXJ5cHQ2X2VudGVyIik7Ci0rCSYk bW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKLSsJJnNocgkJKCRyb3VuZHMsMSk7Ci0r CSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5KSk7Ci0rCSZsZWEJCSgka2V5LCZEV1Ao MzIsJGtleSkpOwotKwkmeG9ycHMJCSgkaW5vdXQwLCRybmRrZXkwKTsKLSsJJnB4b3IJCSgkaW5v dXQxLCRybmRrZXkwKTsJIyBweG9yIGRvZXMgYmV0dGVyIGhlcmUKLSsJZXZhbCImYWVzJHtwfQko JGlub3V0MCwkcm5ka2V5MSkiOwotKwkmcHhvcgkJKCRpbm91dDIsJHJuZGtleTApOwotKwlldmFs IiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7Ci0rCSZweG9yCQkoJGlub3V0Mywkcm5ka2V5 MCk7Ci0rCSZkZWMJCSgkcm91bmRzKTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5 MSkiOwotKwkmcHhvcgkJKCRpbm91dDQsJHJuZGtleTApOwotKwlldmFsIiZhZXMke3B9CSgkaW5v dXQzLCRybmRrZXkxKSI7Ci0rCSZweG9yCQkoJGlub3V0NSwkcm5ka2V5MCk7Ci0rCWV2YWwiJmFl cyR7cH0JKCRpbm91dDQsJHJuZGtleTEpIjsKLSsJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAs JGtleSkpOwotKwlldmFsIiZhZXMke3B9CSgkaW5vdXQ1LCRybmRrZXkxKSI7Ci0rCSZqbXAJCSgm bGFiZWwoIl9hZXNuaV8ke3B9cnlwdDZfZW50ZXIiKSk7Ci0rCi0rICAgICZzZXRfbGFiZWwoIiR7 cH02X2xvb3AiLDE2KTsKLSsJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOwotKwll dmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7Ci0rCSZkZWMJCSgkcm91bmRzKTsKLSsJ ZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5MSkiOwotKwlldmFsIiZhZXMke3B9CSgkaW5v dXQzLCRybmRrZXkxKSI7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDQsJHJuZGtleTEpIjsKLSsJ ZXZhbCImYWVzJHtwfQkoJGlub3V0NSwkcm5ka2V5MSkiOwotKyAgICAmc2V0X2xhYmVsKCJfYWVz bmlfJHtwfXJ5cHQ2X2VudGVyIiwxNik7Ci0rCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwk a2V5KSk7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTApIjsKLSsJZXZhbCImYWVz JHtwfQkoJGlub3V0MSwkcm5ka2V5MCkiOwotKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsK LSsJZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5MCkiOwotKwlldmFsIiZhZXMke3B9CSgk aW5vdXQzLCRybmRrZXkwKSI7Ci0rCWV2YWwiJmFlcyR7cH0JKCRpbm91dDQsJHJuZGtleTApIjsK LSsJZXZhbCImYWVzJHtwfQkoJGlub3V0NSwkcm5ka2V5MCkiOwotKwkmJG1vdmVrZXkJKCRybmRr ZXkwLCZRV1AoMCwka2V5KSk7Ci0rICAgICZqbnoJCSgmbGFiZWwoIiR7cH02X2xvb3AiKSk7Ci0r Ci0rICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKLSsgICAgZXZhbCImYWVz JHtwfQkoJGlub3V0MSwkcm5ka2V5MSkiOwotKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRy bmRrZXkxKSI7Ci0rICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDMsJHJuZGtleTEpIjsKLSsgICAg ZXZhbCImYWVzJHtwfQkoJGlub3V0NCwkcm5ka2V5MSkiOwotKyAgICBldmFsIiZhZXMke3B9CSgk aW5vdXQ1LCRybmRrZXkxKSI7Ci0rICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQwLCRybmRr ZXkwKSI7Ci0rICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQxLCRybmRrZXkwKSI7Ci0rICAg IGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQyLCRybmRrZXkwKSI7Ci0rICAgIGV2YWwiJmFlcyR7 cH1sYXN0CSgkaW5vdXQzLCRybmRrZXkwKSI7Ci0rICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5v dXQ0LCRybmRrZXkwKSI7Ci0rICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQ1LCRybmRrZXkw KSI7Ci0rICAgICZyZXQoKTsKLSsgICAgJmZ1bmN0aW9uX2VuZF9CKCJfYWVzbmlfJHtwfXJ5cHQ2 Iik7Ci0rfQotICZhZXNuaV9nZW5lcmF0ZTMoImVuYyIpIGlmICgkUFJFRklYIGVxICJhZXNuaSIp OwotICZhZXNuaV9nZW5lcmF0ZTMoImRlYyIpOwotICZhZXNuaV9nZW5lcmF0ZTQoImVuYyIpIGlm ICgkUFJFRklYIGVxICJhZXNuaSIpOwotICZhZXNuaV9nZW5lcmF0ZTQoImRlYyIpOwotLQotKyZh ZXNuaV9nZW5lcmF0ZTYoImVuYyIpIGlmICgkUFJFRklYIGVxICJhZXNuaSIpOwotKyZhZXNuaV9n ZW5lcmF0ZTYoImRlYyIpOwotKwwKLSBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKSB7Ci0rIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwotICMgdm9pZCBhZXNuaV9lY2JfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW4sIHZvaWQg Km91dCwKLSAjICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFF U19LRVkgKmtleSwKLSAjICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmMpOwotQEAgLTIz Miw2MiArMzU1LDkzIEBAIGlmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKLSAJJm1vdgkoJG91dCwm d3BhcmFtKDEpKTsKLSAJJm1vdgkoJGxlbiwmd3BhcmFtKDIpKTsKLSAJJm1vdgkoJGtleSwmd3Bh cmFtKDMpKTsKLS0JJm1vdgkoJHJvdW5kcywmd3BhcmFtKDQpKTsKLS0JJmNtcAkoJGxlbiwxNik7 Ci0tCSZqYgkoJmxhYmVsKCJlY2JfcmV0IikpOwotKwkmbW92CSgkcm91bmRzXywmd3BhcmFtKDQp KTsKLSAJJmFuZAkoJGxlbiwtMTYpOwotLQkmdGVzdAkoJHJvdW5kcywkcm91bmRzKQotKwkmanoJ KCZsYWJlbCgiZWNiX3JldCIpKTsKLSAJJm1vdgkoJHJvdW5kcywmRFdQKDI0MCwka2V5KSk7Ci0r CSZ0ZXN0CSgkcm91bmRzXywkcm91bmRzXyk7Ci0rCSZqegkoJmxhYmVsKCJlY2JfZGVjcnlwdCIp KTsKLSsKLSAJJm1vdgkoJGtleV8sJGtleSk7CQkjIGJhY2t1cCAka2V5Ci0gCSZtb3YJKCRyb3Vu ZHNfLCRyb3VuZHMpOwkjIGJhY2t1cCAkcm91bmRzCi0tCSZqegkoJmxhYmVsKCJlY2JfZGVjcnlw dCIpKTsKLSsJJmNtcAkoJGxlbiwweDYwKTsKLSsJJmpiCSgmbGFiZWwoImVjYl9lbmNfdGFpbCIp KTsKLSAKLS0JJnN1YgkoJGxlbiwweDQwKTsKLS0JJmpiZQkoJmxhYmVsKCJlY2JfZW5jX3RhaWwi KSk7Ci0tCSZqbXAJKCZsYWJlbCgiZWNiX2VuY19sb29wMyIpKTsKLSsJJm1vdmRxdQkoJGlub3V0 MCwmUVdQKDAsJGlucCkpOwotKwkmbW92ZHF1CSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7Ci0r CSZtb3ZkcXUJKCRpbm91dDIsJlFXUCgweDIwLCRpbnApKTsKLSsJJm1vdmRxdQkoJGlub3V0Mywm UVdQKDB4MzAsJGlucCkpOwotKwkmbW92ZHF1CSgkaW5vdXQ0LCZRV1AoMHg0MCwkaW5wKSk7Ci0r CSZtb3ZkcXUJKCRpbm91dDUsJlFXUCgweDUwLCRpbnApKTsKLSsJJmxlYQkoJGlucCwmRFdQKDB4 NjAsJGlucCkpOwotKwkmc3ViCSgkbGVuLDB4NjApOwotKwkmam1wCSgmbGFiZWwoImVjYl9lbmNf bG9vcDZfZW50ZXIiKSk7Ci0rCi0rJnNldF9sYWJlbCgiZWNiX2VuY19sb29wNiIsMTYpOwotKwkm bW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7Ci0rCSZtb3ZkcXUJKCRpbm91dDAsJlFXUCgw LCRpbnApKTsKLSsJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOwotKwkmbW92ZHF1 CSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwk aW5vdXQyKTsKLSsJJm1vdmRxdQkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOwotKwkmbW92dXBz CSgmUVdQKDB4MzAsJG91dCksJGlub3V0Myk7Ci0rCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgweDMw LCRpbnApKTsKLSsJJm1vdnVwcwkoJlFXUCgweDQwLCRvdXQpLCRpbm91dDQpOwotKwkmbW92ZHF1 CSgkaW5vdXQ0LCZRV1AoMHg0MCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHg1MCwkb3V0KSwk aW5vdXQ1KTsKLSsJJmxlYQkoJG91dCwmRFdQKDB4NjAsJG91dCkpOwotKwkmbW92ZHF1CSgkaW5v dXQ1LCZRV1AoMHg1MCwkaW5wKSk7Ci0rCSZsZWEJKCRpbnAsJkRXUCgweDYwLCRpbnApKTsKLSsm c2V0X2xhYmVsKCJlY2JfZW5jX2xvb3A2X2VudGVyIik7Ci0rCi0rCSZjYWxsCSgiX2Flc25pX2Vu Y3J5cHQ2Iik7Ci0gCi0tJnNldF9sYWJlbCgiZWNiX2VuY19sb29wMyIsMTYpOwotLQkmbW92dXBz CSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7Ci0tCSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEwLCRp bnApKTsKLS0JJm1vdnVwcwkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOwotLQkmY2FsbAkoIl9h ZXNuaV9lbmNyeXB0MyIpOwotLQkmc3ViCSgkbGVuLDB4MzApOwotLQkmbGVhCSgkaW5wLCZEV1Ao MHgzMCwkaW5wKSk7Ci0tCSZsZWEJKCRvdXQsJkRXUCgweDMwLCRvdXQpKTsKLS0JJm1vdnVwcwko JlFXUCgtMHgzMCwkb3V0KSwkaW5vdXQwKTsKLSAJJm1vdgkoJGtleSwka2V5Xyk7CQkjIHJlc3Rv cmUgJGtleQotLQkmbW92dXBzCSgmUVdQKC0weDIwLCRvdXQpLCRpbm91dDEpOwotIAkmbW92CSgk cm91bmRzLCRyb3VuZHNfKTsJIyByZXN0b3JlICRyb3VuZHMKLS0JJm1vdnVwcwkoJlFXUCgtMHgx MCwkb3V0KSwkaW5vdXQyKTsKLS0JJmphCSgmbGFiZWwoImVjYl9lbmNfbG9vcDMiKSk7Ci0rCSZz dWIJKCRsZW4sMHg2MCk7Ci0rCSZqbmMJKCZsYWJlbCgiZWNiX2VuY19sb29wNiIpKTsKLSAKLS0m c2V0X2xhYmVsKCJlY2JfZW5jX3RhaWwiKTsKLS0JJmFkZAkoJGxlbiwweDQwKTsKLSsJJm1vdnVw cwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlu b3V0MSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKLSsJJm1vdnVwcwko JlFXUCgweDMwLCRvdXQpLCRpbm91dDMpOwotKwkmbW92dXBzCSgmUVdQKDB4NDAsJG91dCksJGlu b3V0NCk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHg1MCwkb3V0KSwkaW5vdXQ1KTsKLSsJJmxlYQkoJG91 dCwmRFdQKDB4NjAsJG91dCkpOwotKwkmYWRkCSgkbGVuLDB4NjApOwotIAkmanoJKCZsYWJlbCgi ZWNiX3JldCIpKTsKLSAKLS0JJmNtcAkoJGxlbiwweDEwKTsKLSsmc2V0X2xhYmVsKCJlY2JfZW5j X3RhaWwiKTsKLSAJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsJGlucCkpOwotLQkmamUJKCZsYWJl bCgiZWNiX2VuY19vbmUiKSk7Ci0gCSZjbXAJKCRsZW4sMHgyMCk7Ci0rCSZqYgkoJmxhYmVsKCJl Y2JfZW5jX29uZSIpKTsKLSAJJm1vdnVwcwkoJGlub3V0MSwmUVdQKDB4MTAsJGlucCkpOwotIAkm amUJKCZsYWJlbCgiZWNiX2VuY190d28iKSk7Ci0tCSZjbXAJKCRsZW4sMHgzMCk7Ci0gCSZtb3Z1 cHMJKCRpbm91dDIsJlFXUCgweDIwLCRpbnApKTsKLS0JJmplCSgmbGFiZWwoImVjYl9lbmNfdGhy ZWUiKSk7Ci0rCSZjbXAJKCRsZW4sMHg0MCk7Ci0rCSZqYgkoJmxhYmVsKCJlY2JfZW5jX3RocmVl IikpOwotIAkmbW92dXBzCSgkaW5vdXQzLCZRV1AoMHgzMCwkaW5wKSk7Ci0tCSZjYWxsCSgiX2Fl c25pX2VuY3J5cHQ0Iik7Ci0rCSZqZQkoJmxhYmVsKCJlY2JfZW5jX2ZvdXIiKSk7Ci0rCSZtb3Z1 cHMJKCRpbm91dDQsJlFXUCgweDQwLCRpbnApKTsKLSsJJnhvcnBzCSgkaW5vdXQ1LCRpbm91dDUp OwotKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0NiIpOwotIAkmbW92dXBzCSgmUVdQKDAsJG91dCks JGlub3V0MCk7Ci0gCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKLSAJJm1vdnVw cwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOwotIAkmbW92dXBzCSgmUVdQKDB4MzAsJG91dCks JGlub3V0Myk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHg0MCwkb3V0KSwkaW5vdXQ0KTsKLSAJam1wCSgm bGFiZWwoImVjYl9yZXQiKSk7Ci0gCi0gJnNldF9sYWJlbCgiZWNiX2VuY19vbmUiLDE2KTsKLS0J JmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImVuYyIpOwkjICZjYWxsCSgiX2Flc25pX2VuY3J5cHQx Iik7Ci0rCWlmICgkaW5saW5lKQotKwl7ICAgJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImVuYyIp Owl9Ci0rCWVsc2UKLSsJeyAgICZjYWxsCSgiX2Flc25pX2VuY3J5cHQxIik7CX0KLSAJJm1vdnVw cwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotIAkmam1wCSgmbGFiZWwoImVjYl9yZXQiKSk7Ci0g Ci0gJnNldF9sYWJlbCgiZWNiX2VuY190d28iLDE2KTsKLSsJJnhvcnBzCSgkaW5vdXQyLCRpbm91 dDIpOwotIAkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIpOwotIAkmbW92dXBzCSgmUVdQKDAsJG91 dCksJGlub3V0MCk7Ci0gCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKLUBAIC0z MDAsNTMgKzQ1NCw5NSBAQCBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKSB7Ci0gCSZtb3Z1cHMJKCZR V1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKLSAJJmptcAkoJmxhYmVsKCJlY2JfcmV0IikpOwotIAot KyZzZXRfbGFiZWwoImVjYl9lbmNfZm91ciIsMTYpOwotKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0 NCIpOwotKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7Ci0rCSZtb3Z1cHMJKCZRV1Ao MHgxMCwkb3V0KSwkaW5vdXQxKTsKLSsJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIp OwotKwkmbW92dXBzCSgmUVdQKDB4MzAsJG91dCksJGlub3V0Myk7Ci0rCSZqbXAJKCZsYWJlbCgi ZWNiX3JldCIpKTsKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gJnNldF9sYWJlbCgiZWNiX2RlY3J5cHQiLDE2 KTsKLS0JJnN1YgkoJGxlbiwweDQwKTsKLS0JJmpiZQkoJmxhYmVsKCJlY2JfZGVjX3RhaWwiKSk7 Ci0tCSZqbXAJKCZsYWJlbCgiZWNiX2RlY19sb29wMyIpKTsKLSsJJm1vdgkoJGtleV8sJGtleSk7 CQkjIGJhY2t1cCAka2V5Ci0rCSZtb3YJKCRyb3VuZHNfLCRyb3VuZHMpOwkjIGJhY2t1cCAkcm91 bmRzCi0rCSZjbXAJKCRsZW4sMHg2MCk7Ci0rCSZqYgkoJmxhYmVsKCJlY2JfZGVjX3RhaWwiKSk7 Ci0rCi0rCSZtb3ZkcXUJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKLSsJJm1vdmRxdQkoJGlub3V0 MSwmUVdQKDB4MTAsJGlucCkpOwotKwkmbW92ZHF1CSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7 Ci0rCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKLSsJJm1vdmRxdQkoJGlub3V0 NCwmUVdQKDB4NDAsJGlucCkpOwotKwkmbW92ZHF1CSgkaW5vdXQ1LCZRV1AoMHg1MCwkaW5wKSk7 Ci0rCSZsZWEJKCRpbnAsJkRXUCgweDYwLCRpbnApKTsKLSsJJnN1YgkoJGxlbiwweDYwKTsKLSsJ JmptcAkoJmxhYmVsKCJlY2JfZGVjX2xvb3A2X2VudGVyIikpOwotKwotKyZzZXRfbGFiZWwoImVj Yl9kZWNfbG9vcDYiLDE2KTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkm bW92ZHF1CSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0 KSwkaW5vdXQxKTsKLSsJJm1vdmRxdQkoJGlub3V0MSwmUVdQKDB4MTAsJGlucCkpOwotKwkmbW92 dXBzCSgmUVdQKDB4MjAsJG91dCksJGlub3V0Mik7Ci0rCSZtb3ZkcXUJKCRpbm91dDIsJlFXUCgw eDIwLCRpbnApKTsKLSsJJm1vdnVwcwkoJlFXUCgweDMwLCRvdXQpLCRpbm91dDMpOwotKwkmbW92 ZHF1CSgkaW5vdXQzLCZRV1AoMHgzMCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHg0MCwkb3V0 KSwkaW5vdXQ0KTsKLSsJJm1vdmRxdQkoJGlub3V0NCwmUVdQKDB4NDAsJGlucCkpOwotKwkmbW92 dXBzCSgmUVdQKDB4NTAsJG91dCksJGlub3V0NSk7Ci0rCSZsZWEJKCRvdXQsJkRXUCgweDYwLCRv dXQpKTsKLSsJJm1vdmRxdQkoJGlub3V0NSwmUVdQKDB4NTAsJGlucCkpOwotKwkmbGVhCSgkaW5w LCZEV1AoMHg2MCwkaW5wKSk7Ci0rJnNldF9sYWJlbCgiZWNiX2RlY19sb29wNl9lbnRlciIpOwot KwotKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0NiIpOwotIAotLSZzZXRfbGFiZWwoImVjYl9kZWNf bG9vcDMiLDE2KTsKLS0JJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsJGlucCkpOwotLQkmbW92dXBz CSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7Ci0tCSZtb3Z1cHMJKCRpbm91dDIsJlFXUCgweDIw LCRpbnApKTsKLS0JJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDMiKTsKLS0JJnN1YgkoJGxlbiwweDMw KTsKLS0JJmxlYQkoJGlucCwmRFdQKDB4MzAsJGlucCkpOwotLQkmbGVhCSgkb3V0LCZEV1AoMHgz MCwkb3V0KSk7Ci0tCSZtb3Z1cHMJKCZRV1AoLTB4MzAsJG91dCksJGlub3V0MCk7Ci0gCSZtb3YJ KCRrZXksJGtleV8pOwkJIyByZXN0b3JlICRrZXkKLS0JJm1vdnVwcwkoJlFXUCgtMHgyMCwkb3V0 KSwkaW5vdXQxKTsKLSAJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CSMgcmVzdG9yZSAkcm91bmRz Ci0tCSZtb3Z1cHMJKCZRV1AoLTB4MTAsJG91dCksJGlub3V0Mik7Ci0tCSZqYQkoJmxhYmVsKCJl Y2JfZGVjX2xvb3AzIikpOwotKwkmc3ViCSgkbGVuLDB4NjApOwotKwkmam5jCSgmbGFiZWwoImVj Yl9kZWNfbG9vcDYiKSk7Ci0gCi0tJnNldF9sYWJlbCgiZWNiX2RlY190YWlsIik7Ci0tCSZhZGQJ KCRsZW4sMHg0MCk7Ci0rCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKLSsJJm1vdnVw cwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOwotKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCks JGlub3V0Mik7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKLSsJJm1vdnVw cwkoJlFXUCgweDQwLCRvdXQpLCRpbm91dDQpOwotKwkmbW92dXBzCSgmUVdQKDB4NTAsJG91dCks JGlub3V0NSk7Ci0rCSZsZWEJKCRvdXQsJkRXUCgweDYwLCRvdXQpKTsKLSsJJmFkZAkoJGxlbiww eDYwKTsKLSAJJmp6CSgmbGFiZWwoImVjYl9yZXQiKSk7Ci0gCi0tCSZjbXAJKCRsZW4sMHgxMCk7 Ci0rJnNldF9sYWJlbCgiZWNiX2RlY190YWlsIik7Ci0gCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgw LCRpbnApKTsKLS0JJmplCSgmbGFiZWwoImVjYl9kZWNfb25lIikpOwotIAkmY21wCSgkbGVuLDB4 MjApOwotKwkmamIJKCZsYWJlbCgiZWNiX2RlY19vbmUiKSk7Ci0gCSZtb3Z1cHMJKCRpbm91dDEs JlFXUCgweDEwLCRpbnApKTsKLSAJJmplCSgmbGFiZWwoImVjYl9kZWNfdHdvIikpOwotLQkmY21w CSgkbGVuLDB4MzApOwotIAkmbW92dXBzCSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7Ci0tCSZq ZQkoJmxhYmVsKCJlY2JfZGVjX3RocmVlIikpOwotKwkmY21wCSgkbGVuLDB4NDApOwotKwkmamIJ KCZsYWJlbCgiZWNiX2RlY190aHJlZSIpKTsKLSAJJm1vdnVwcwkoJGlub3V0MywmUVdQKDB4MzAs JGlucCkpOwotLQkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0NCIpOwotKwkmamUJKCZsYWJlbCgiZWNi X2RlY19mb3VyIikpOwotKwkmbW92dXBzCSgkaW5vdXQ0LCZRV1AoMHg0MCwkaW5wKSk7Ci0rCSZ4 b3JwcwkoJGlub3V0NSwkaW5vdXQ1KTsKLSsJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDYiKTsKLSAJ Jm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotIAkmbW92dXBzCSgmUVdQKDB4MTAsJG91 dCksJGlub3V0MSk7Ci0gCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKLSAJJm1v dnVwcwkoJlFXUCgweDMwLCRvdXQpLCRpbm91dDMpOwotKwkmbW92dXBzCSgmUVdQKDB4NDAsJG91 dCksJGlub3V0NCk7Ci0gCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsKLSAKLSAmc2V0X2xhYmVs KCJlY2JfZGVjX29uZSIsMTYpOwotLQkmYWVzbmlfaW5saW5lX2dlbmVyYXRlMSgiZGVjIik7CSMg JmNhbGwJKCJfYWVzbmlfZGVjcnlwdDMiKTsKLSsJaWYgKCRpbmxpbmUpCi0rCXsgICAmYWVzbmlf aW5saW5lX2dlbmVyYXRlMSgiZGVjIik7CX0KLSsJZWxzZQotKwl7ICAgJmNhbGwJKCJfYWVzbmlf ZGVjcnlwdDEiKTsJfQotIAkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7Ci0gCSZqbXAJ KCZsYWJlbCgiZWNiX3JldCIpKTsKLSAKLSAmc2V0X2xhYmVsKCJlY2JfZGVjX3R3byIsMTYpOwot KwkmeG9ycHMJKCRpbm91dDIsJGlub3V0Mik7Ci0gCSZjYWxsCSgiX2Flc25pX2RlY3J5cHQzIik7 Ci0gCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKLSAJJm1vdnVwcwkoJlFXUCgweDEw LCRvdXQpLCRpbm91dDEpOwotQEAgLTM1NywyOCArNTUzLDQyIEBAIGlmICgkUFJFRklYIGVxICJh ZXNuaSIpIHsKLSAJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotIAkmbW92dXBzCSgm UVdQKDB4MTAsJG91dCksJGlub3V0MSk7Ci0gCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5v dXQyKTsKLSsJJmptcAkoJmxhYmVsKCJlY2JfcmV0IikpOwotKwotKyZzZXRfbGFiZWwoImVjYl9k ZWNfZm91ciIsMTYpOwotKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0NCIpOwotKwkmbW92dXBzCSgm UVdQKDAsJG91dCksJGlub3V0MCk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQx KTsKLSsJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOwotKwkmbW92dXBzCSgmUVdQ KDB4MzAsJG91dCksJGlub3V0Myk7Ci0gCi0gJnNldF9sYWJlbCgiZWNiX3JldCIpOwotICZmdW5j dGlvbl9lbmQoImFlc25pX2VjYl9lbmNyeXB0Iik7Ci0gfQotIAotKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAj IHZvaWQgJFBSRUZJWF9jYmNfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW5wLCB2b2lkICpvdXQsCi0g IyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkg KmtleSwKLSAjICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaXZwLGNv bnN0IGludCBlbmMpOwotICZmdW5jdGlvbl9iZWdpbigiJHtQUkVGSVh9X2NiY19lbmNyeXB0Iik7 Ci0gCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7Ci0rCSZtb3YJKCRyb3VuZHNfLCJlc3AiKTsKLSAJ Jm1vdgkoJG91dCwmd3BhcmFtKDEpKTsKLSsJJnN1YgkoJHJvdW5kc18sMjQpOwotIAkmbW92CSgk bGVuLCZ3cGFyYW0oMikpOwotKwkmYW5kCSgkcm91bmRzXywtMTYpOwotIAkmbW92CSgka2V5LCZ3 cGFyYW0oMykpOwotLQkmdGVzdAkoJGxlbiwkbGVuKTsKLSAJJm1vdgkoJGtleV8sJndwYXJhbSg0 KSk7Ci0tCSZqegkoJmxhYmVsKCJjYmNfcmV0IikpOwotKwkmdGVzdAkoJGxlbiwkbGVuKTsKLSsJ Jmp6CSgmbGFiZWwoImNiY19hYm9ydCIpKTsKLSAKLSAJJmNtcAkoJndwYXJhbSg1KSwwKTsKLS0J Jm1vdnVwcwkoJGl2ZWMsJlFXUCgwLCRrZXlfKSk7CSMgbG9hZCBJVgotKwkmeGNoZwkoJHJvdW5k c18sImVzcCIpOwkJIyBhbGxvY2EKLSsJJm1vdnVwcwkoJGl2ZWMsJlFXUCgwLCRrZXlfKSk7CQkj IGxvYWQgSVYKLSAJJm1vdgkoJHJvdW5kcywmRFdQKDI0MCwka2V5KSk7Ci0tCSZtb3YJKCRrZXlf LCRrZXkpOwkJIyBiYWNrdXAgJGtleQotLQkmbW92CSgkcm91bmRzXywkcm91bmRzKTsJIyBiYWNr dXAgJHJvdW5kcwotKwkmbW92CSgka2V5Xywka2V5KTsJCQkjIGJhY2t1cCAka2V5Ci0rCSZtb3YJ KCZEV1AoMTYsImVzcCIpLCRyb3VuZHNfKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKLSsJJm1vdgko JHJvdW5kc18sJHJvdW5kcyk7CQkjIGJhY2t1cCAkcm91bmRzCi0gCSZqZQkoJmxhYmVsKCJjYmNf ZGVjcnlwdCIpKTsKLSAKLSAJJm1vdmFwcwkoJGlub3V0MCwkaXZlYyk7Ci1AQCAtMzg4LDE1ICs1 OTgsMTcgQEAgaWYgKCRQUkVGSVggZXEgImFlc25pIikgewotIAkmam1wCSgmbGFiZWwoImNiY19l bmNfbG9vcCIpKTsKLSAKLSAmc2V0X2xhYmVsKCJjYmNfZW5jX2xvb3AiLDE2KTsKLS0JJm1vdnVw cwkoJGl2ZWMsJlFXUCgwLCRpbnApKTsKLSsJJm1vdnVwcwkoJGl2ZWMsJlFXUCgwLCRpbnApKTsJ CSMgaW5wdXQgYWN0dWFsbHkKLSAJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKLS0JJnB4b3IJ KCRpbm91dDAsJGl2ZWMpOwotLQkmYWVzbmlfaW5saW5lX2dlbmVyYXRlMSgiZW5jIik7CSMgJmNh bGwJKCJfYWVzbmlfZW5jcnlwdDMiKTsKLS0JJnN1YgkoJGxlbiwxNik7Ci0tCSZsZWEJKCRvdXQs JkRXUCgxNiwkb3V0KSk7Ci0rCWlmICgkaW5saW5lKQotKwl7ICAgJmFlc25pX2lubGluZV9nZW5l cmF0ZTEoImVuYyIsJGlub3V0MCwkaXZlYyk7CX0KLSsJZWxzZQotKwl7ICAgJnhvcnBzKCRpbm91 dDAsJGl2ZWMpOyAmY2FsbCgiX2Flc25pX2VuY3J5cHQxIik7CX0KLSAJJm1vdgkoJHJvdW5kcywk cm91bmRzXyk7CSMgcmVzdG9yZSAkcm91bmRzCi0gCSZtb3YJKCRrZXksJGtleV8pOwkJIyByZXN0 b3JlICRrZXkKLS0JJm1vdnVwcwkoJlFXUCgtMTYsJG91dCksJGlub3V0MCk7Ci0rCSZtb3Z1cHMJ KCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsJIyBzdG9yZSBvdXRwdXQKLSsJJmxlYQkoJG91dCwmRFdQ KDE2LCRvdXQpKTsKLSsJJnN1YgkoJGxlbiwxNik7Ci0gCSZqbmMJKCZsYWJlbCgiY2JjX2VuY19s b29wIikpOwotIAkmYWRkCSgkbGVuLDE2KTsKLSAJJmpuegkoJmxhYmVsKCJjYmNfZW5jX3RhaWwi KSk7Ci1AQCAtNDE1LDkwICs2MjcsMTUxIEBAIGlmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKLSAJ Jm1vdgkoJGlucCwkb3V0KTsJCSMgJGlucCBhbmQgJG91dCBhcmUgdGhlIHNhbWUKLSAJJm1vdgko JGtleSwka2V5Xyk7CQkjIHJlc3RvcmUgJGtleQotIAkmam1wCSgmbGFiZWwoImNiY19lbmNfbG9v cCIpKTsKLS0KLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gJnNldF9sYWJlbCgiY2JjX2RlY3J5cHQiLDE2KTsK LS0JJnN1YgkoJGxlbiwweDQwKTsKLSsJJmNtcAkoJGxlbiwweDUwKTsKLSAJJmpiZQkoJmxhYmVs KCJjYmNfZGVjX3RhaWwiKSk7Ci0tCSZqbXAJKCZsYWJlbCgiY2JjX2RlY19sb29wMyIpKTsKLSsJ Jm1vdmFwcwkoJlFXUCgwLCJlc3AiKSwkaXZlYyk7CQkjIHNhdmUgSVYKLSsJJnN1YgkoJGxlbiww eDUwKTsKLSsJJmptcAkoJmxhYmVsKCJjYmNfZGVjX2xvb3A2X2VudGVyIikpOwotKwotKyZzZXRf bGFiZWwoImNiY19kZWNfbG9vcDYiLDE2KTsKLSsJJm1vdmFwcwkoJlFXUCgwLCJlc3AiKSwkcm5k a2V5MCk7CSMgc2F2ZSBJVgotKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0NSk7Ci0rCSZs ZWEJKCRvdXQsJkRXUCgweDEwLCRvdXQpKTsKLSsmc2V0X2xhYmVsKCJjYmNfZGVjX2xvb3A2X2Vu dGVyIik7Ci0rCSZtb3ZkcXUJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKLSsJJm1vdmRxdQkoJGlu b3V0MSwmUVdQKDB4MTAsJGlucCkpOwotKwkmbW92ZHF1CSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5w KSk7Ci0rCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKLSsJJm1vdmRxdQkoJGlu b3V0NCwmUVdQKDB4NDAsJGlucCkpOwotKwkmbW92ZHF1CSgkaW5vdXQ1LCZRV1AoMHg1MCwkaW5w KSk7Ci0gCi0tJnNldF9sYWJlbCgiY2JjX2RlY19sb29wMyIsMTYpOwotLQkmbW92dXBzCSgkaW5v dXQwLCZRV1AoMCwkaW5wKSk7Ci0tCSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsK LS0JJm1vdnVwcwkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOwotLQkmbW92YXBzCSgkaW4wLCRp bm91dDApOwotLQkmbW92YXBzCSgkaW4xLCRpbm91dDEpOwotLQkmY2FsbAkoIl9hZXNuaV9kZWNy eXB0MyIpOwotLQkmc3ViCSgkbGVuLDB4MzApOwotLQkmbGVhCSgkaW5wLCZEV1AoMHgzMCwkaW5w KSk7Ci0tCSZsZWEJKCRvdXQsJkRXUCgweDMwLCRvdXQpKTsKLS0JJnB4b3IJKCRpbm91dDAsJGl2 ZWMpOwotLQkmcHhvcgkoJGlub3V0MSwkaW4wKTsKLS0JJm1vdnVwcwkoJGl2ZWMsJlFXUCgtMHgx MCwkaW5wKSk7Ci0tCSZweG9yCSgkaW5vdXQyLCRpbjEpOwotLQkmbW92dXBzCSgmUVdQKC0weDMw LCRvdXQpLCRpbm91dDApOwotLQkmbW92CSgkcm91bmRzLCRyb3VuZHNfKQkjIHJlc3RvcmUgJHJv dW5kcwotLQkmbW92dXBzCSgmUVdQKC0weDIwLCRvdXQpLCRpbm91dDEpOwotLQkmbW92CSgka2V5 LCRrZXlfKTsJCSMgcmVzdG9yZSAka2V5Ci0tCSZtb3Z1cHMJKCZRV1AoLTB4MTAsJG91dCksJGlu b3V0Mik7Ci0tCSZqYQkoJmxhYmVsKCJjYmNfZGVjX2xvb3AzIikpOwotKwkmY2FsbAkoIl9hZXNu aV9kZWNyeXB0NiIpOwotIAotKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDAsJGlucCkpOwotKwkm bW92dXBzCSgkcm5ka2V5MCwmUVdQKDB4MTAsJGlucCkpOwotKwkmeG9ycHMJKCRpbm91dDAsJlFX UCgwLCJlc3AiKSk7CSMgXj1JVgotKwkmeG9ycHMJKCRpbm91dDEsJHJuZGtleTEpOwotKwkmbW92 dXBzCSgkcm5ka2V5MSwmUVdQKDB4MjAsJGlucCkpOwotKwkmeG9ycHMJKCRpbm91dDIsJHJuZGtl eTApOwotKwkmbW92dXBzCSgkcm5ka2V5MCwmUVdQKDB4MzAsJGlucCkpOwotKwkmeG9ycHMJKCRp bm91dDMsJHJuZGtleTEpOwotKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDB4NDAsJGlucCkpOwot KwkmeG9ycHMJKCRpbm91dDQsJHJuZGtleTApOwotKwkmbW92dXBzCSgkcm5ka2V5MCwmUVdQKDB4 NTAsJGlucCkpOwkjIElWCi0rCSZ4b3JwcwkoJGlub3V0NSwkcm5ka2V5MSk7Ci0rCSZtb3Z1cHMJ KCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKLSsJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91 dDEpOwotKwkmbGVhCSgkaW5wLCZEV1AoMHg2MCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgy MCwkb3V0KSwkaW5vdXQyKTsKLSsJJm1vdgkoJHJvdW5kcywkcm91bmRzXykJCSMgcmVzdG9yZSAk cm91bmRzCi0rCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKLSsJJm1vdgkoJGtl eSwka2V5Xyk7CQkJIyByZXN0b3JlICRrZXkKLSsJJm1vdnVwcwkoJlFXUCgweDQwLCRvdXQpLCRp bm91dDQpOwotKwkmbGVhCSgkb3V0LCZEV1AoMHg1MCwkb3V0KSk7Ci0rCSZzdWIJKCRsZW4sMHg2 MCk7Ci0rCSZqYQkoJmxhYmVsKCJjYmNfZGVjX2xvb3A2IikpOwotKwotKwkmbW92YXBzCSgkaW5v dXQwLCRpbm91dDUpOwotKwkmbW92YXBzCSgkaXZlYywkcm5ka2V5MCk7Ci0rCSZhZGQJKCRsZW4s MHg1MCk7Ci0rCSZqbGUJKCZsYWJlbCgiY2JjX2RlY190YWlsX2NvbGxlY3RlZCIpKTsKLSsJJm1v dnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotKwkmbGVhCSgkb3V0LCZEV1AoMHgxMCwkb3V0 KSk7Ci0gJnNldF9sYWJlbCgiY2JjX2RlY190YWlsIik7Ci0tCSZhZGQJKCRsZW4sMHg0MCk7Ci0t CSZqegkoJmxhYmVsKCJjYmNfcmV0IikpOwotLQotIAkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwk aW5wKSk7Ci0tCSZjbXAJKCRsZW4sMHgxMCk7Ci0gCSZtb3ZhcHMJKCRpbjAsJGlub3V0MCk7Ci0r CSZjbXAJKCRsZW4sMHgxMCk7Ci0gCSZqYmUJKCZsYWJlbCgiY2JjX2RlY19vbmUiKSk7Ci0rCi0g CSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsKLS0JJmNtcAkoJGxlbiwweDIwKTsK LSAJJm1vdmFwcwkoJGluMSwkaW5vdXQxKTsKLSsJJmNtcAkoJGxlbiwweDIwKTsKLSAJJmpiZQko JmxhYmVsKCJjYmNfZGVjX3R3byIpKTsKLSsKLSAJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDB4MjAs JGlucCkpOwotIAkmY21wCSgkbGVuLDB4MzApOwotIAkmamJlCSgmbGFiZWwoImNiY19kZWNfdGhy ZWUiKSk7Ci0rCi0gCSZtb3Z1cHMJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKLS0JJmNhbGwJ KCJfYWVzbmlfZGVjcnlwdDQiKTsKLSsJJmNtcAkoJGxlbiwweDQwKTsKLSsJJmpiZQkoJmxhYmVs KCJjYmNfZGVjX2ZvdXIiKSk7Ci0rCi0rCSZtb3Z1cHMJKCRpbm91dDQsJlFXUCgweDQwLCRpbnAp KTsKLSsJJm1vdmFwcwkoJlFXUCgwLCJlc3AiKSwkaXZlYyk7CQkjIHNhdmUgSVYKLSsJJm1vdnVw cwkoJGlub3V0MCwmUVdQKDAsJGlucCkpOwotKwkmeG9ycHMJKCRpbm91dDUsJGlub3V0NSk7Ci0r CSZjYWxsCSgiX2Flc25pX2RlY3J5cHQ2Iik7Ci0rCSZtb3Z1cHMJKCRybmRrZXkxLCZRV1AoMCwk aW5wKSk7Ci0gCSZtb3Z1cHMJKCRybmRrZXkwLCZRV1AoMHgxMCwkaW5wKSk7Ci0rCSZ4b3Jwcwko JGlub3V0MCwmUVdQKDAsImVzcCIpKTsJIyBePSBJVgotKwkmeG9ycHMJKCRpbm91dDEsJHJuZGtl eTEpOwotIAkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDB4MjAsJGlucCkpOwotLQkmcHhvcgkoJGlu b3V0MCwkaXZlYyk7Ci0tCSZweG9yCSgkaW5vdXQxLCRpbjApOwotLQkmbW92dXBzCSgkaXZlYywm UVdQKDB4MzAsJGlucCkpOwotKwkmeG9ycHMJKCRpbm91dDIsJHJuZGtleTApOwotKwkmbW92dXBz CSgkcm5ka2V5MCwmUVdQKDB4MzAsJGlucCkpOwotKwkmeG9ycHMJKCRpbm91dDMsJHJuZGtleTEp OwotKwkmbW92dXBzCSgkaXZlYywmUVdQKDB4NDAsJGlucCkpOwkjIElWCi0rCSZ4b3JwcwkoJGlu b3V0NCwkcm5ka2V5MCk7Ci0gCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKLS0JJnB4 b3IJKCRpbm91dDIsJHJuZGtleTApOwotLQkmcHhvcgkoJGlub3V0Mywkcm5ka2V5MSk7Ci0gCSZt b3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKLSAJJm1vdnVwcwkoJlFXUCgweDIwLCRv dXQpLCRpbm91dDIpOwotLQkmbW92YXBzCSgkaW5vdXQwLCRpbm91dDMpOwotLQkmbGVhCSgkb3V0 LCZEV1AoMHgzMCwkb3V0KSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsK LSsJJmxlYQkoJG91dCwmRFdQKDB4NDAsJG91dCkpOwotKwkmbW92YXBzCSgkaW5vdXQwLCRpbm91 dDQpOwotKwkmc3ViCSgkbGVuLDB4NTApOwotIAkmam1wCSgmbGFiZWwoImNiY19kZWNfdGFpbF9j b2xsZWN0ZWQiKSk7Ci0gCi0tJnNldF9sYWJlbCgiY2JjX2RlY19vbmUiKTsKLS0JJmFlc25pX2lu bGluZV9nZW5lcmF0ZTEoImRlYyIpOwkjICZjYWxsCSgiX2Flc25pX2RlY3J5cHQzIik7Ci0tCSZw eG9yCSgkaW5vdXQwLCRpdmVjKTsKLSsmc2V0X2xhYmVsKCJjYmNfZGVjX29uZSIsMTYpOwotKwlp ZiAoJGlubGluZSkKLSsJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJkZWMiKTsJfQotKwll bHNlCi0rCXsgICAmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MSIpOwl9Ci0rCSZ4b3JwcwkoJGlub3V0 MCwkaXZlYyk7Ci0gCSZtb3ZhcHMJKCRpdmVjLCRpbjApOwotKwkmc3ViCSgkbGVuLDB4MTApOwot IAkmam1wCSgmbGFiZWwoImNiY19kZWNfdGFpbF9jb2xsZWN0ZWQiKSk7Ci0gCi0tJnNldF9sYWJl bCgiY2JjX2RlY190d28iKTsKLSsmc2V0X2xhYmVsKCJjYmNfZGVjX3R3byIsMTYpOwotKwkmeG9y cHMJKCRpbm91dDIsJGlub3V0Mik7Ci0gCSZjYWxsCSgiX2Flc25pX2RlY3J5cHQzIik7Ci0tCSZw eG9yCSgkaW5vdXQwLCRpdmVjKTsKLS0JJnB4b3IJKCRpbm91dDEsJGluMCk7Ci0rCSZ4b3Jwcwko JGlub3V0MCwkaXZlYyk7Ci0rCSZ4b3JwcwkoJGlub3V0MSwkaW4wKTsKLSAJJm1vdnVwcwkoJlFX UCgwLCRvdXQpLCRpbm91dDApOwotIAkmbW92YXBzCSgkaW5vdXQwLCRpbm91dDEpOwotLQkmbW92 YXBzCSgkaXZlYywkaW4xKTsKLSAJJmxlYQkoJG91dCwmRFdQKDB4MTAsJG91dCkpOwotKwkmbW92 YXBzCSgkaXZlYywkaW4xKTsKLSsJJnN1YgkoJGxlbiwweDIwKTsKLSAJJmptcAkoJmxhYmVsKCJj YmNfZGVjX3RhaWxfY29sbGVjdGVkIikpOwotIAotLSZzZXRfbGFiZWwoImNiY19kZWNfdGhyZWUi KTsKLSsmc2V0X2xhYmVsKCJjYmNfZGVjX3RocmVlIiwxNik7Ci0gCSZjYWxsCSgiX2Flc25pX2Rl Y3J5cHQzIik7Ci0tCSZweG9yCSgkaW5vdXQwLCRpdmVjKTsKLS0JJnB4b3IJKCRpbm91dDEsJGlu MCk7Ci0tCSZweG9yCSgkaW5vdXQyLCRpbjEpOwotKwkmeG9ycHMJKCRpbm91dDAsJGl2ZWMpOwot KwkmeG9ycHMJKCRpbm91dDEsJGluMCk7Ci0rCSZ4b3JwcwkoJGlub3V0MiwkaW4xKTsKLSAJJm1v dnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOwotLQkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCks JGlub3V0MSk7Ci0gCSZtb3ZhcHMJKCRpbm91dDAsJGlub3V0Mik7Ci0tCSZtb3Z1cHMJKCRpdmVj LCZRV1AoMHgyMCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsK LSAJJmxlYQkoJG91dCwmRFdQKDB4MjAsJG91dCkpOwotKwkmbW92dXBzCSgkaXZlYywmUVdQKDB4 MjAsJGlucCkpOwotKwkmc3ViCSgkbGVuLDB4MzApOwotKwkmam1wCSgmbGFiZWwoImNiY19kZWNf dGFpbF9jb2xsZWN0ZWQiKSk7Ci0rCi0rJnNldF9sYWJlbCgiY2JjX2RlY19mb3VyIiwxNik7Ci0r CSZjYWxsCSgiX2Flc25pX2RlY3J5cHQ0Iik7Ci0rCSZtb3Z1cHMJKCRybmRrZXkxLCZRV1AoMHgx MCwkaW5wKSk7Ci0rCSZtb3Z1cHMJKCRybmRrZXkwLCZRV1AoMHgyMCwkaW5wKSk7Ci0rCSZ4b3Jw cwkoJGlub3V0MCwkaXZlYyk7Ci0rCSZtb3Z1cHMJKCRpdmVjLCZRV1AoMHgzMCwkaW5wKSk7Ci0r CSZ4b3JwcwkoJGlub3V0MSwkaW4wKTsKLSsJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDAp OwotKwkmeG9ycHMJKCRpbm91dDIsJHJuZGtleTEpOwotKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91 dCksJGlub3V0MSk7Ci0rCSZ4b3JwcwkoJGlub3V0Mywkcm5ka2V5MCk7Ci0rCSZtb3Z1cHMJKCZR V1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKLSsJJmxlYQkoJG91dCwmRFdQKDB4MzAsJG91dCkpOwot KwkmbW92YXBzCSgkaW5vdXQwLCRpbm91dDMpOwotKwkmc3ViCSgkbGVuLDB4NDApOwotIAotICZz ZXRfbGFiZWwoImNiY19kZWNfdGFpbF9jb2xsZWN0ZWQiKTsKLSAJJmFuZAkoJGxlbiwxNSk7Ci1A QCAtNTA2LDIxICs3NzksMjEgQEAgaWYgKCRQUkVGSVggZXEgImFlc25pIikgewotIAkmbW92dXBz CSgmUVdQKDAsJG91dCksJGlub3V0MCk7Ci0gCSZqbXAJKCZsYWJlbCgiY2JjX3JldCIpKTsKLSAK LS0mc2V0X2xhYmVsKCJjYmNfZGVjX3RhaWxfcGFydGlhbCIpOwotLQkmbW92CSgka2V5XywiZXNw Iik7Ci0tCSZzdWIJKCJlc3AiLDE2KTsKLS0JJmFuZAkoImVzcCIsLTE2KTsKLSsmc2V0X2xhYmVs KCJjYmNfZGVjX3RhaWxfcGFydGlhbCIsMTYpOwotIAkmbW92YXBzCSgmUVdQKDAsImVzcCIpLCRp bm91dDApOwotKwkmbW92CSgiZWN4IiwxNik7Ci0gCSZtb3YJKCRpbnAsImVzcCIpOwotLQkmbW92 CSgiZWN4IiwkbGVuKTsKLSsJJnN1YgkoImVjeCIsJGxlbik7Ci0gCSZkYXRhX3dvcmQoMHhBNEYz RjY4OSk7CQkjIHJlcCBtb3ZzYgotLQkmbW92CSgiZXNwIiwka2V5Xyk7Ci0gCi0gJnNldF9sYWJl bCgiY2JjX3JldCIpOwotKwkmbW92CSgiZXNwIiwmRFdQKDE2LCJlc3AiKSk7CSMgcHVsbCBvcmln aW5hbCAlZXNwCi0gCSZtb3YJKCRrZXlfLCZ3cGFyYW0oNCkpOwotIAkmbW92dXBzCSgmUVdQKDAs JGtleV8pLCRpdmVjKTsJIyBvdXRwdXQgSVYKLSsmc2V0X2xhYmVsKCJjYmNfYWJvcnQiKTsKLSAm ZnVuY3Rpb25fZW5kKCIke1BSRUZJWH1fY2JjX2VuY3J5cHQiKTsKLS0KLSsMCi0rIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotICMgTWVjaGFuaWNhbCBwb3J0IGZyb20gYWVzbmkteDg2XzY0LnBsLgotICMKLSAjIF9h ZXNuaV9zZXRfZW5jcnlwdF9rZXkgaXMgcHJpdmF0ZSBpbnRlcmZhY2UsCi1AQCAtNTM5LDcgKzgx Miw3IEBAIGlmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKLSAJJmp6CSgmbGFiZWwoImJhZF9wb2lu dGVyIikpOwotIAotIAkmbW92dXBzCSgieG1tMCIsJlFXUCgwLCJlYXgiKSk7CSMgcHVsbCBmaXJz dCAxMjggYml0cyBvZiAqdXNlcktleQotLQkmcHhvcgkoInhtbTQiLCJ4bW00Iik7CSMgbG93IGR3 b3JkIG9mIHhtbTQgaXMgYXNzdW1lZCAwCi0rCSZ4b3JwcwkoInhtbTQiLCJ4bW00Iik7CSMgbG93 IGR3b3JkIG9mIHhtbTQgaXMgYXNzdW1lZCAwCi0gCSZsZWEJKCRrZXksJkRXUCgxNiwka2V5KSk7 Ci0gCSZjbXAJKCRyb3VuZHMsMjU2KTsKLSAJJmplCSgmbGFiZWwoIjE0cm91bmRzIikpOwotQEAg LTU4MSwxMSArODU0LDExIEBAIGlmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKLSAJJmxlYQkJKCRr ZXksJkRXUCgxNiwka2V5KSk7Ci0gJnNldF9sYWJlbCgia2V5XzEyOF9jb2xkIik7Ci0gCSZzaHVm cHMJCSgieG1tNCIsInhtbTAiLDBiMDAwMTAwMDApOwotLQkmcHhvcgkJKCJ4bW0wIiwieG1tNCIp OwotLQkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0wIiwwYjEwMDAxMTAwLCk7Ci0tCSZweG9yCQkoInht bTAiLCJ4bW00Iik7Ci0tCSZwc2h1ZmQJCSgieG1tMSIsInhtbTEiLDBiMTExMTExMTEpOwkjIGNy aXRpY2FsIHBhdGgKLS0JJnB4b3IJCSgieG1tMCIsInhtbTEiKTsKLSsJJnhvcnBzCQkoInhtbTAi LCJ4bW00Iik7Ci0rCSZzaHVmcHMJCSgieG1tNCIsInhtbTAiLDBiMTAwMDExMDApOwotKwkmeG9y cHMJCSgieG1tMCIsInhtbTQiKTsKLSsJJnNodWZwcwkJKCJ4bW0xIiwieG1tMSIsMGIxMTExMTEx MSk7CSMgY3JpdGljYWwgcGF0aAotKwkmeG9ycHMJCSgieG1tMCIsInhtbTEiKTsKLSAJJnJldCgp OwotIAotICZzZXRfbGFiZWwoIjEycm91bmRzIiwxNik7Ci1AQCAtNjIwLDExICs4OTMsMTEgQEAg aWYgKCRQUkVGSVggZXEgImFlc25pIikgewotIAkmbW92YXBzCQkoInhtbTUiLCJ4bW0yIik7Ci0g JnNldF9sYWJlbCgia2V5XzE5MmJfd2FybSIpOwotIAkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0wIiww YjAwMDEwMDAwKTsKLS0JJm1vdmFwcwkJKCJ4bW0zIiwieG1tMiIpOwotLQkmcHhvcgkJKCJ4bW0w IiwieG1tNCIpOwotKwkmbW92ZHFhCQkoInhtbTMiLCJ4bW0yIik7Ci0rCSZ4b3JwcwkJKCJ4bW0w IiwieG1tNCIpOwotIAkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0wIiwwYjEwMDAxMTAwKTsKLSAJJnBz bGxkcQkJKCJ4bW0zIiw0KTsKLS0JJnB4b3IJCSgieG1tMCIsInhtbTQiKTsKLSsJJnhvcnBzCQko InhtbTAiLCJ4bW00Iik7Ci0gCSZwc2h1ZmQJCSgieG1tMSIsInhtbTEiLDBiMDEwMTAxMDEpOwkj IGNyaXRpY2FsIHBhdGgKLSAJJnB4b3IJCSgieG1tMiIsInhtbTMiKTsKLSAJJnB4b3IJCSgieG1t MCIsInhtbTEiKTsKLUBAIC02ODMsMTEgKzk1NiwxMSBAQCBpZiAoJFBSRUZJWCBlcSAiYWVzbmki KSB7Ci0gCSZsZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOwotICZzZXRfbGFiZWwoImtleV8yNTZh X2NvbGQiKTsKLSAJJnNodWZwcwkJKCJ4bW00IiwieG1tMCIsMGIwMDAxMDAwMCk7Ci0tCSZweG9y CQkoInhtbTAiLCJ4bW00Iik7Ci0rCSZ4b3JwcwkJKCJ4bW0wIiwieG1tNCIpOwotIAkmc2h1ZnBz CQkoInhtbTQiLCJ4bW0wIiwwYjEwMDAxMTAwKTsKLS0JJnB4b3IJCSgieG1tMCIsInhtbTQiKTsK LS0JJnBzaHVmZAkJKCJ4bW0xIiwieG1tMSIsMGIxMTExMTExMSk7CSMgY3JpdGljYWwgcGF0aAot LQkmcHhvcgkJKCJ4bW0wIiwieG1tMSIpOwotKwkmeG9ycHMJCSgieG1tMCIsInhtbTQiKTsKLSsJ JnNodWZwcwkJKCJ4bW0xIiwieG1tMSIsMGIxMTExMTExMSk7CSMgY3JpdGljYWwgcGF0aAotKwkm eG9ycHMJCSgieG1tMCIsInhtbTEiKTsKLSAJJnJldCgpOwotIAotICZzZXRfbGFiZWwoImtleV8y NTZiIiwxNik7Ci1AQCAtNjk1LDExICs5NjgsMTEgQEAgaWYgKCRQUkVGSVggZXEgImFlc25pIikg ewotIAkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKLSAKLSAJJnNodWZwcwkJKCJ4bW00Iiwi eG1tMiIsMGIwMDAxMDAwMCk7Ci0tCSZweG9yCQkoInhtbTIiLCJ4bW00Iik7Ci0rCSZ4b3JwcwkJ KCJ4bW0yIiwieG1tNCIpOwotIAkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0yIiwwYjEwMDAxMTAwKTsK LS0JJnB4b3IJCSgieG1tMiIsInhtbTQiKTsKLS0JJnBzaHVmZAkJKCJ4bW0xIiwieG1tMSIsMGIx MDEwMTAxMCk7CSMgY3JpdGljYWwgcGF0aAotLQkmcHhvcgkJKCJ4bW0yIiwieG1tMSIpOwotKwkm eG9ycHMJCSgieG1tMiIsInhtbTQiKTsKLSsJJnNodWZwcwkJKCJ4bW0xIiwieG1tMSIsMGIxMDEw MTAxMCk7CSMgY3JpdGljYWwgcGF0aAotKwkmeG9ycHMJCSgieG1tMiIsInhtbTEiKTsKLSAJJnJl dCgpOwotIAotICZzZXRfbGFiZWwoImJhZF9wb2ludGVyIiw0KTsKLUBAIC03NDcsOSArMTAyMCw5 IEBAIGlmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKLSAJJmFlc2ltYwkJKCJ4bW0xIiwieG1tMSIp OwotIAkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKLSAJJmxlYQkJKCJlYXgiLCZEV1AoLTE2 LCJlYXgiKSk7Ci0tCSZjbXAJCSgiZWF4Iiwka2V5KTsKLSAJJiRtb3Zla2V5CSgmUVdQKDE2LCJl YXgiKSwieG1tMCIpOwotIAkmJG1vdmVrZXkJKCZRV1AoLTE2LCRrZXkpLCJ4bW0xIik7Ci0rCSZj bXAJCSgiZWF4Iiwka2V5KTsKLSAJJmphCQkoJmxhYmVsKCJkZWNfa2V5X2ludmVyc2UiKSk7Ci0g Ci0gCSYkbW92ZWtleQkoInhtbTAiLCZRV1AoMCwka2V5KSk7CSMgaW52ZXJzZSBtaWRkbGUKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9hZXMvYXNtL2Flc25pLXg4Nl82NC5wbC5pbnRl bG9wdHMgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2XzY0LnBsCi0tLS0g b3BlbnNzbC0xLjAuMGQvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2XzY0LnBsLmludGVsb3B0cwky MDExLTA4LTI0IDEyOjUwOjU1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBkL2Ny eXB0by9hZXMvYXNtL2Flc25pLXg4Nl82NC5wbAkyMDExLTA4LTI0IDEyOjUwOjU2LjAwMDAwMDAw MCArMDIwMAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9lbnYgcGVybAotKyMhL3Vzci9i aW4vcGVybAotICMKLSAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3Yg PGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLUBAIC0xMSw2ICsxMSwxNDUg QEAKLSAjIE9wZW5TU0wgY29udGV4dCBpdCdzIHVzZWQgd2l0aCBJbnRlbCBlbmdpbmUsIGJ1dCBj YW4gYWxzbyBiZSB1c2VkIGFzCi0gIyBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBjcnlwdG8vYWVz L2FzbS9hZXMteDg2XzY0LnBsIFtzZWUgYmVsb3cgZm9yCi0gIyBkZXRhaWxzXS4KLSsjCi0rIyBQ ZXJmb3JtYW5jZS4KLSsjCi0rIyBHaXZlbiBhZXMoZW5jfGRlYykgaW5zdHJ1Y3Rpb25zJyBsYXRl bmN5IGFzeW1wdG90aWMgcGVyZm9ybWFuY2UgZm9yCi0rIyBub24tcGFyYWxsZWxpemFibGUgbW9k ZXMgc3VjaCBhcyBDQkMgZW5jcnlwdCBpcyAzLjc1IGN5Y2xlcyBwZXIgYnl0ZQotKyMgcHJvY2Vz c2VkIHdpdGggMTI4LWJpdCBrZXkuIEFuZCBnaXZlbiB0aGVpciB0aHJvdWdocHV0IGFzeW1wdG90 aWMKLSsjIHBlcmZvcm1hbmNlIGZvciBwYXJhbGxlbGl6YWJsZSBtb2RlcyBpcyAxLjI1IGN5Y2xl cyBwZXIgYnl0ZS4gQmVpbmcKLSsjIGFzeW1wdG90aWMgbGltaXQgaXQncyBub3Qgc29tZXRoaW5n IHlvdSBjb21tb25seSBhY2hpZXZlIGluIHJlYWxpdHksCi0rIyBidXQgaG93IGNsb3NlIGRvZXMg b25lIGdldD8gQmVsb3cgYXJlIHJlc3VsdHMgY29sbGVjdGVkIGZvcgotKyMgZGlmZmVyZW50IG1v ZGVzIGFuZCBibG9jayBzaXplZC4gUGFpcnMgb2YgbnVtYmVycyBhcmUgZm9yIGVuLS8KLSsjIGRl Y3J5cHRpb24uCi0rIwotKyMJMTYtYnl0ZSAgICAgNjQtYnl0ZSAgICAgMjU2LWJ5dGUgICAgMS1L QiAgICAgICAgOC1LQgotKyMgRUNCCTQuMjUvNC4yNSAgIDEuMzgvMS4zOCAgIDEuMjgvMS4yOCAg IDEuMjYvMS4yNgkxLjI2LzEuMjYKLSsjIENUUgk1LjQyLzUuNDIgICAxLjkyLzEuOTIgICAxLjQ0 LzEuNDQgICAxLjI4LzEuMjggICAxLjI2LzEuMjYKLSsjIENCQwk0LjM4LzQuNDMgICA0LjE1LzEu NDMgICA0LjA3LzEuMzIgICA0LjA3LzEuMjkgICA0LjA2LzEuMjgKLSsjIENDTQk1LjY2LzkuNDIg ICA0LjQyLzUuNDEgICA0LjE2LzQuNDAgICA0LjA5LzQuMTUgICA0LjA2LzQuMDcgICAKLSsjIE9G Qgk1LjQyLzUuNDIgICA0LjY0LzQuNjQgICA0LjQ0LzQuNDQgICA0LjM5LzQuMzkgICA0LjM4LzQu MzgKLSsjIENGQgk1LjczLzUuODUgICA1LjU2LzUuNjIgICA1LjQ4LzUuNTYgICA1LjQ3LzUuNTUg ICA1LjQ3LzUuNTUKLSsjCi0rIyBFQ0IsIENUUiwgQ0JDIGFuZCBDQ00gcmVzdWx0cyBhcmUgZnJl ZSBmcm9tIEVWUCBvdmVyaGVhZC4gVGhpcyBtZWFucwotKyMgdGhhdCBvdGhlcndpc2UgdXNlZCAn b3BlbnNzbCBzcGVlZCAtZXZwIGFlcy0xMjgtPz8/IC1lbmdpbmUgYWVzbmkKLSsjIFstZGVjcnlw dF0nIHdpbGwgZXhoaWJpdCAxMC0xNSUgd29yc2UgcmVzdWx0cyBmb3Igc21hbGxlciBibG9ja3Mu Ci0rIyBUaGUgcmVzdWx0cyB3ZXJlIGNvbGxlY3RlZCB3aXRoIHNwZWNpYWxseSBjcmFmdGVkIHNw ZWVkLmMgYmVuY2htYXJrCi0rIyBpbiBvcmRlciB0byBjb21wYXJlIHRoZW0gd2l0aCByZXN1bHRz IHJlcG9ydGVkIGluICJJbnRlbCBBZHZhbmNlZAotKyMgRW5jcnlwdGlvbiBTdGFuZGFyZCAoQUVT KSBOZXcgSW5zdHJ1Y3Rpb24gU2V0IiBXaGl0ZSBQYXBlciBSZXZpc2lvbgotKyMgMy4wIGRhdGVk IE1heSAyMDEwLiBBbGwgYWJvdmUgcmVzdWx0cyBhcmUgY29uc2lzdGVudGx5IGJldHRlci4gVGhp cwotKyMgbW9kdWxlIGFsc28gcHJvdmlkZXMgYmV0dGVyIHBlcmZvcm1hbmNlIGZvciBibG9jayBz aXplcyBzbWFsbGVyIHRoYW4KLSsjIDEyOCBieXRlcyBpbiBwb2ludHMgKm5vdCogcmVwcmVzZW50 ZWQgaW4gdGhlIGFib3ZlIHRhYmxlLgotKyMKLSsjIExvb2tpbmcgYXQgdGhlIHJlc3VsdHMgZm9y IDgtS0IgYnVmZmVyLgotKyMKLSsjIENGQiBhbmQgT0ZCIHJlc3VsdHMgYXJlIGZhciBmcm9tIHRo ZSBsaW1pdCwgYmVjYXVzZSBpbXBsZW1lbnRhdGlvbgotKyMgdXNlcyAiZ2VuZXJpYyIgQ1JZUFRP X1tjfG9dZmIxMjhfZW5jcnlwdCBpbnRlcmZhY2VzIHJlbHlpbmcgb24KLSsjIHNpbmdsZS1ibG9j ayBhZXNuaV9lbmNyeXB0LCB3aGljaCBpcyBub3QgdGhlIG1vc3Qgb3B0aW1hbCB3YXkgdG8gZ28u Ci0rIyBDQkMgZW5jcnlwdCByZXN1bHQgaXMgdW5leHBlY3RlZGx5IGhpZ2ggYW5kIHRoZXJlIGlz IG5vIGRvY3VtZW50ZWQKLSsjIGV4cGxhbmF0aW9uIGZvciBpdC4gU2VlbWluZ2x5IHRoZXJlIGlz IGEgc21hbGwgcGVuYWx0eSBmb3IgZmVlZGluZwotKyMgdGhlIHJlc3VsdCBiYWNrIHRvIEFFUyB1 bml0IHRoZSB3YXkgaXQncyBkb25lIGluIENCQyBtb2RlLiBUaGVyZSBpcwotKyMgbm90aGluZyBv bmUgY2FuIGRvIGFuZCB0aGUgcmVzdWx0IGFwcGVhcnMgb3B0aW1hbC4gQ0NNIHJlc3VsdCBpcwot KyMgaWRlbnRpY2FsIHRvIENCQywgYmVjYXVzZSBDQkMtTUFDIGlzIGVzc2VudGlhbGx5IENCQyBl bmNyeXB0IHdpdGhvdXQKLSsjIHNhdmluZyBvdXRwdXQuIENDTSBDVFIgInN0YXlzIGludmlzaWJs ZSwiIGJlY2F1c2UgaXQncyBuZWF0bHkKLSsjIGludGVybGVhdmVkIHdpaCBDQkMtTUFDLiBUaGlz IHByb3ZpZGVzIH4zMCUgaW1wcm92ZW1lbnQgb3ZlcgotKyMgInN0cmFnaHRmb3J3YXJkIiBDQ00g aW1wbGVtZW50YXRpb24gd2l0aCBDVFIgYW5kIENCQy1NQUMgcGVyZm9ybWVkCi0rIyBkaXNqb2lu dGx5LiBQYXJhbGxlbGl6YWJsZSBtb2RlcyBwcmFjdGljYWxseSBhY2hpZXZlIHRoZSB0aGVvcmV0 aWNhbAotKyMgbGltaXQuCi0rIwotKyMgTG9va2luZyBhdCBob3cgcmVzdWx0cyB2YXJ5IHdpdGgg YnVmZmVyIHNpemUuCi0rIwotKyMgQ3VydmVzIGFyZSBwcmFjdGljYWxseSBzYXR1cmF0ZWQgYXQg MS1LQiBidWZmZXIgc2l6ZS4gSW4gbW9zdCBjYXNlcwotKyMgIjI1Ni1ieXRlIiBwZXJmb3JtYW5j ZSBpcyA+OTUlLCBhbmQgIjY0LWJ5dGUiIGlzIH45MCUgb2YgIjgtS0IiIG9uZS4KLSsjIENUUiBj dXJ2ZSBkb2Vzbid0IGZvbGxvdyB0aGlzIHBhdHRlcm4gYW5kIGlzICJzbG93ZXN0IiBjaGFuZ2lu ZyBvbmUKLSsjIHdpdGggIjI1Ni1ieXRlIiByZXN1bHQgYmVpbmcgODclIG9mICI4LUtCLiIgVGhp cyBpcyBiZWNhdXNlIG92ZXJoZWFkCi0rIyBpbiBDVFIgbW9kZSBpcyBtb3N0IGNvbXB1dGF0aW9u YWxseSBpbnRlbnNpdmUuIFNtYWxsLWJsb2NrIENDTQotKyMgZGVjcnlwdCBpcyBzbG93ZXIgdGhh biBlbmNyeXB0LCBiZWNhdXNlIGZpcnN0IENUUiBhbmQgbGFzdCBDQkMtTUFDCi0rIyBpdGVyYXRp b25zIGNhbid0IGJlIGludGVybGVhdmVkLgotKyMKLSsjIFJlc3VsdHMgZm9yIDE5Mi0gYW5kIDI1 Ni1iaXQga2V5cy4KLSsjCi0rIyBFVlAtZnJlZSByZXN1bHRzIHdlcmUgb2JzZXJ2ZWQgdG8gc2Nh bGUgcGVyZmVjdGx5IHdpdGggbnVtYmVyIG9mCi0rIyByb3VuZHMgZm9yIGxhcmdlciBibG9jayBz aXplcywgaS5lLiAxOTItYml0IHJlc3VsdCBiZWluZyAxMC8xMiB0aW1lcwotKyMgbG93ZXIgYW5k IDI1Ni1iaXQgb25lIC0gMTAvMTQuIFdlbGwsIGluIENCQyBlbmNyeXB0IGNhc2UgZGlmZmVyZW5j ZXMKLSsjIGFyZSBhIHRhZCBzbWFsbGVyLCBiZWNhdXNlIHRoZSBhYm92ZSBtZW50aW9uZWQgcGVu YWx0eSBiaWFzZXMgYWxsCi0rIyByZXN1bHRzIGJ5IHNhbWUgY29uc3RhbnQgdmFsdWUuIEluIHNp bWlsYXIgd2F5IGZ1bmN0aW9uIGNhbGwKLSsjIG92ZXJoZWFkIGFmZmVjdHMgc21hbGwtYmxvY2sg cGVyZm9ybWFuY2UsIGFzIHdlbGwgYXMgT0ZCIGFuZCBDRkIKLSsjIHJlc3VsdHMuIERpZmZlcmVu Y2VzIGFyZSBub3QgbGFyZ2UsIG1vc3QgY29tbW9uIGNvZWZmaWNpZW50cyBhcmUKLSsjIDEwLzEx LjcgYW5kIDEwLzEzLjQgKGFzIG9wcG9zaXRlIHRvIDEwLzEyLjAgYW5kIDEwLzE0LjApLCBidXQg b25lCi0rIyBvYnNlcnZlIGV2ZW4gMTAvMTEuMiBhbmQgMTAvMTIuNCAoQ1RSLCBPRkIsIENGQiku Li4KLSsKLSsjIEphbnVhcnkgMjAxMQotKyMKLSsjIFdoaWxlIFdlc3RtZXJlIHByb2Nlc3NvciBm ZWF0dXJlcyA2IGN5Y2xlcyBsYXRlbmN5IGZvciBhZXNbZW5jfGRlY10KLSsjIGluc3RydWN0aW9u cywgd2hpY2ggY2FuIGJlIHNjaGVkdWxlZCBldmVyeSBzZWNvbmQgY3ljbGUsIFNhbmR5Ci0rIyBC cmlkZ2Ugc3BlbmRzIDggY3ljbGVzIHBlciBpbnN0cnVjdGlvbiwgYnV0IGl0IGNhbiBzY2hlZHVs ZSB0aGVtCi0rIyBldmVyeSBjeWNsZS4gVGhpcyBtZWFucyB0aGF0IGNvZGUgdGFyZ2V0aW5nIFdl c3RtZXJlIHdvdWxkIHBlcmZvcm0KLSsjIHN1Ym9wdGltYWxseSBvbiBTYW5keSBCcmlkZ2UuIFRo ZXJlZm9yZSB0aGlzIHVwZGF0ZS4KLSsjCi0rIyBJbiBhZGRpdGlvbiwgbm9uLXBhcmFsbGVsaXph YmxlIENCQyBlbmNyeXB0IChhcyB3ZWxsIGFzIENDTSkgaXMKLSsjIG9wdGltaXplZC4gUmVsYXRp dmUgaW1wcm92ZW1lbnQgbWlnaHQgYXBwZWFyIG1vZGVzdCwgOCUgb24gV2VzdG1lcmUsCi0rIyBi dXQgaW4gYWJzb2x1dGUgdGVybXMgaXQncyAzLjc3IGN5Y2xlcyBwZXIgYnl0ZSBlbmNyeXB0ZWQg d2l0aAotKyMgMTI4LWJpdCBrZXkgb24gV2VzdG1lcmUsIGFuZCA1LjA3IC0gb24gU2FuZHkgQnJp ZGdlLiBUaGVzZSBudW1iZXJzCi0rIyBzaG91bGQgYmUgY29tcGFyZWQgdG8gYXN5bXB0b3RpYyBs aW1pdHMgb2YgMy43NSBmb3IgV2VzdG1lcmUgYW5kCi0rIyA1LjAwIGZvciBTYW5keSBCcmlkZ2Uu IEFjdHVhbGx5LCB0aGUgZmFjdCB0aGF0IHRoZXkgZ2V0IHRoaXMgY2xvc2UKLSsjIHRvIGFzeW1w dG90aWMgbGltaXRzIGlzIHF1aXRlIGFtYXppbmcuIEluZGVlZCwgdGhlIGxpbWl0IGlzCi0rIyBj YWxjdWxhdGVkIGFzIGxhdGVuY3kgdGltZXMgbnVtYmVyIG9mIHJvdW5kcywgMTAgZm9yIDEyOC1i aXQga2V5LAotKyMgYW5kIGRpdmlkZWQgYnkgMTYsIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYmxv Y2ssIG9yIGluIG90aGVyIHdvcmRzCi0rIyBpdCBhY2NvdW50cyAqc29sZWx5KiBmb3IgYWVzZW5j IGluc3RydWN0aW9ucy4gQnV0IHRoZXJlIGFyZSBleHRyYQotKyMgaW5zdHJ1Y3Rpb25zLCBhbmQg bnVtYmVycyBzbyBjbG9zZSB0byB0aGUgYXN5bXB0b3RpYyBsaW1pdHMgbWVhbgotKyMgdGhhdCBp dCdzIGFzIGlmIGl0IHRha2VzIGFzIGxpdHRsZSBhcyAqb25lKiBhZGRpdGlvbmFsIGN5Y2xlIHRv Ci0rIyBleGVjdXRlIGFsbCBvZiB0aGVtLiBIb3cgaXMgaXQgcG9zc2libGU/IEl0IGlzIHBvc3Np YmxlIHRoYW5rcyB0bwotKyMgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbiBsb2dpYywgd2hpY2ggbWFu YWdlcyB0byBvdmVybGFwIHBvc3QtCi0rIyBwcm9jZXNzaW5nIG9mIHByZXZpb3VzIGJsb2NrLCB0 aGluZ3MgbGlrZSBzYXZpbmcgdGhlIG91dHB1dCwgd2l0aAotKyMgYWN0dWFsIGVuY3J5cHRpb24g b2YgY3VycmVudCBibG9jaywgYXMgd2VsbCBhcyBwcmUtcHJvY2Vzc2luZyBvZgotKyMgY3VycmVu dCBibG9jaywgdGhpbmdzIGxpa2UgZmV0Y2hpbmcgaW5wdXQgYW5kIHhvci1pbmcgaXQgd2l0aAot KyMgMC1yb3VuZCBlbGVtZW50IG9mIHRoZSBrZXkgc2NoZWR1bGUsIHdpdGggYWN0dWFsIGVuY3J5 cHRpb24gb2YKLSsjIHByZXZpb3VzIGJsb2NrLiBLZWVwIHRoaXMgaW4gbWluZC4uLgotKyMKLSsj IEZvciBwYXJhbGxlbGl6YWJsZSBtb2Rlcywgc3VjaCBhcyBFQ0IsIENCQyBkZWNyeXB0LCBDVFIs IGhpZ2hlcgotKyMgcGVyZm9ybWFuY2UgaXMgYWNoaWV2ZWQgYnkgaW50ZXJsZWF2aW5nIGluc3Ry dWN0aW9ucyB3b3JraW5nIG9uCi0rIyBpbmRlcGVuZGVudCBibG9ja3MuIEluIHdoaWNoIGNhc2Ug YXN5bXB0b3RpYyBsaW1pdCBmb3Igc3VjaCBtb2RlcwotKyMgY2FuIGJlIG9idGFpbmVkIGJ5IGRp dmlkaW5nIGFib3ZlIG1lbnRpb25lZCBudW1iZXJzIGJ5IEFFUwotKyMgaW5zdHJ1Y3Rpb25zJyBp bnRlcmxlYXZlIGZhY3Rvci4gV2VzdG1lcmUgY2FuIGV4ZWN1dGUgYXQgbW9zdCAzIAotKyMgaW5z dHJ1Y3Rpb25zIGF0IGEgdGltZSwgbWVhbmluZyB0aGF0IG9wdGltYWwgaW50ZXJsZWF2ZSBmYWN0 b3IgaXMgMywKLSsjIGFuZCB0aGF0J3Mgd2hlcmUgdGhlICJtYWdpYyIgbnVtYmVyIG9mIDEuMjUg Y29tZSBmcm9tLiAiT3B0aW1hbAotKyMgaW50ZXJsZWF2ZSBmYWN0b3IiIG1lYW5zIHRoYXQgaW5j cmVhc2Ugb2YgaW50ZXJsZWF2ZSBmYWN0b3IgZG9lcwotKyMgbm90IGltcHJvdmUgcGVyZm9ybWFu Y2UuIFRoZSBmb3JtdWxhIGhhcyBwcm92ZW4gdG8gcmVmbGVjdCByZWFsaXR5Ci0rIyBwcmV0dHkg d2VsbCBvbiBXZXN0bWVyZS4uLiBTYW5keSBCcmlkZ2Ugb24gdGhlIG90aGVyIGhhbmQgY2FuCi0r IyBleGVjdXRlIHVwIHRvIDggQUVTIGluc3RydWN0aW9ucyBhdCBhIHRpbWUsIHNvIGhvdyBkb2Vz IHZhcnlpbmcKLSsjIGludGVybGVhdmUgZmFjdG9yIGFmZmVjdCB0aGUgcGVyZm9ybWFuY2U/IEhl cmUgaXMgdGFibGUgZm9yIEVDQgotKyMgKG51bWJlcnMgYXJlIGN5Y2xlcyBwZXIgYnl0ZSBwcm9j ZXNzZWQgd2l0aCAxMjgtYml0IGtleSk6Ci0rIwotKyMgaW5zdHJ1Y3Rpb24gaW50ZXJsZWF2ZSBm YWN0b3IJCTN4CTZ4CTh4Ci0rIyB0aGVvcmV0aWNhbCBhc3ltcHRvdGljIGxpbWl0CQkxLjY3CTAu ODMJMC42MjUKLSsjIG1lYXN1cmVkIHBlcmZvcm1hbmNlIGZvciA4S0IgYmxvY2sJMS4wNQkwLjg2 CTAuODQKLSsjCi0rIyAiYXMgaWYiIGludGVybGVhdmUgZmFjdG9yCQk0Ljd4CTUuOHgJNi4weAot KyMKLSsjIEZ1cnRoZXIgZGF0YSBmb3Igb3RoZXIgcGFyYWxsZWxpemFibGUgbW9kZXM6Ci0rIwot KyMgQ0JDIGRlY3J5cHQJCQkJMS4xNgkwLjkzCTAuOTMKLSsjIENUUgkJCQkJMS4xNAkwLjkxCW4v YQotKyMKLSsjIFdlbGwsIGdpdmVuIDN4IGNvbHVtbiBpdCdzIHByb2JhYmx5IGluYXBwcm9wcmlh dGUgdG8gY2FsbCB0aGUgbGltaXQKLSsjIGFzeW1wdG90aWMsIGlmIGl0IGNhbiBiZSBzdXJwYXNz ZWQsIGlzbid0IGl0PyBXaGF0IGhhcHBlbnMgdGhlcmU/Ci0rIyBSZXdpbmQgdG8gQ0JDIHBhcmFn cmFwaCBmb3IgdGhlIGFuc3dlci4gWWVzLCBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uCi0rIyBtYWdp YyBpcyByZXNwb25zaWJsZSBmb3IgdGhpcy4gUHJvY2Vzc29yIG92ZXJsYXBzIG5vdCBvbmx5IHRo ZQotKyMgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgd2l0aCBBRVMgb25lcywgYnV0IGV2ZW4gQUVT IGluc3R1Y3Rpb25zCi0rIyBwcm9jZXNzaW5nIGFkamFjZW50IHRyaXBsZXRzIG9mIGluZGVwZW5k ZW50IGJsb2Nrcy4gSW4gdGhlIDZ4IGNhc2UKLSsjIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zICBz dGlsbCBjbGFpbSBkaXNwcm9wb3J0aW9uYWxseSBzbWFsbCBhbW91bnQKLSsjIG9mIGFkZGl0aW9u YWwgY3ljbGVzLCBidXQgaW4gOHggY2FzZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIG11c3QgYmUK LSsjIGEgdGFkIHRvbyBoaWdoIGZvciBvdXQtb2Ytb3JkZXIgbG9naWMgdG8gY29wZSB3aXRoLCBh bmQgQUVTIHVuaXQKLSsjIHJlbWFpbnMgdW5kZXJ1dGlsaXplZC4uLiBBcyB5b3UgY2FuIHNlZSA4 eCBpbnRlcmxlYXZlIGlzIGhhcmRseQotKyMganVzdGlmaWFibGUsIHNvIHRoZXJlIG5vIG5lZWQg dG8gZmVlbCBiYWQgdGhhdCAzMi1iaXQgYWVzbmkteDg2LnBsCi0rIyB1dGlsaXppZXMgNnggaW50 ZXJsZWF2ZSBiZWNhdXNlIG9mIGxpbWl0ZWQgcmVnaXN0ZXIgYmFuayBjYXBhY2l0eS4KLSsjCi0r IyBIaWdoZXIgaW50ZXJsZWF2ZSBmYWN0b3JzIGRvIGhhdmUgbmVnYXRpdmUgaW1wYWN0IG9uIFdl c3RtZXJlCi0rIyBwZXJmb3JtYW5jZS4gV2hpbGUgZm9yIEVDQiBtb2RlIGl0J3MgbmVnbGlnaWJs ZSB+MS41JSwgb3RoZXIKLSsjIHBhcmFsbGVsaXphYmxlcyBwZXJmb3JtIH41JSB3b3JzZSwgd2hp Y2ggaXMgb3V0d2VpZ2hlZCBieSB+MjUlCi0rIyBpbXByb3ZlbWVudCBvbiBTYW5keSBCcmlkZ2Uu IFRvIGJhbGFuY2UgcmVncmVzc2lvbiBvbiBXZXN0bWVyZQotKyMgQ1RSIG1vZGUgd2FzIGltcGxl bWVudGVkIHdpdGggNnggYWVzZW5jIGludGVybGVhdmUgZmFjdG9yLgotIAotICRQUkVGSVg9ImFl c25pIjsJIyBpZiAkUFJFRklYIGlzIHNldCB0byAiQUVTIiwgdGhlIHNjcmlwdAotIAkJCSMgZ2Vu ZXJhdGVzIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCi1AQCAtMjksNyArMTY4LDcgQEAgZGllICJj YW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKLSAKLSBvcGVuIFNURE9VVCwifCAkXlggJHhs YXRlICRmbGF2b3VyICRvdXRwdXQiOwotIAotLSRtb3ZrZXkgPSAkUFJFRklYIGVxICJhZXNuaSIg PyAibW92YXBzIiA6ICJtb3Z1cHMiOwotKyRtb3ZrZXkgPSAkUFJFRklYIGVxICJhZXNuaSIgPyAi bW92dXBzIiA6ICJtb3Z1cHMiOwotIEBfNGFyZ3M9JHdpbjY0PwkoIiVyY3giLCIlcmR4IiwiJXI4 IiwgIiVyOSIpIDoJIyBXaW42NCBvcmRlcgotIAkJKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4 Iik7CSMgVW5peCBvcmRlcgotIAotQEAgLTQxLDE4ICsxODAsMjAgQEAgJGlucD0iJXJkaSI7Ci0g JG91dD0iJXJzaSI7Ci0gJGxlbj0iJXJkeCI7Ci0gJGtleT0iJXJjeCI7CSMgaW5wdXQgdG8gYW5k IGNoYW5nZWQgYnkgYWVzbmlfW2VufGRlXWNyeXB0TiAhISEKLS0kaXZwPSIlcjgiOwkjIGNiYwot KyRpdnA9IiVyOCI7CSMgY2JjLCBjdHIsIC4uLgotIAotICRybmRzXz0iJXIxMGQiOwkjIGJhY2t1 cCBjb3B5IGZvciAkcm91bmRzCi0gJGtleV89IiVyMTEiOwkjIGJhY2t1cCBjb3B5IGZvciAka2V5 Ci0gCi0gIyAleG1tIHJlZ2lzdGVyIGxheW91dAotLSRpbm91dDA9IiV4bW0wIjsJJGlub3V0MT0i JXhtbTEiOwotLSRpbm91dDI9IiV4bW0yIjsJJGlub3V0Mz0iJXhtbTMiOwotLSRybmRrZXkwPSIl eG1tNCI7CSRybmRrZXkxPSIleG1tNSI7Ci0rJHJuZGtleTA9IiV4bW0wIjsJJHJuZGtleTE9IiV4 bW0xIjsKLSskaW5vdXQwPSIleG1tMiI7CSRpbm91dDE9IiV4bW0zIjsKLSskaW5vdXQyPSIleG1t NCI7CSRpbm91dDM9IiV4bW01IjsKLSskaW5vdXQ0PSIleG1tNiI7CSRpbm91dDU9IiV4bW03IjsK LSskaW5vdXQ2PSIleG1tOCI7CSRpbm91dDc9IiV4bW05IjsKLSAKLS0kaXY9IiV4bW02IjsJCSRp bjA9IiV4bW03IjsJIyB1c2VkIGluIENCQyBkZWNyeXB0Ci0tJGluMT0iJXhtbTgiOwkJJGluMj0i JXhtbTkiOwotKyRpbjI9IiV4bW02IjsJCSRpbjE9IiV4bW03IjsJIyB1c2VkIGluIENCQyBkZWNy eXB0LCBDVFIsIC4uLgotKyRpbjA9IiV4bW04IjsJCSRpdj0iJXhtbTkiOwotIAwKLSAjIElubGlu ZSB2ZXJzaW9uIG9mIGludGVybmFsIGFlc25pX1tlbnxkZV1jcnlwdDEuCi0gIwotQEAgLTYwLDIw ICsyMDEsMjkgQEAgJGluMT0iJXhtbTgiOwkJJGluMj0iJXhtbTkiOwotICMgY3ljbGVzIHdoaWNo IHRha2UgY2FyZSBvZiBsb29wIHZhcmlhYmxlcy4uLgotIHsgbXkgJHNuOwotIHN1YiBhZXNuaV9n ZW5lcmF0ZTEgewotLW15ICgkcCwka2V5LCRyb3VuZHMpPUBfOwotK215ICgkcCwka2V5LCRyb3Vu ZHMsJGlub3V0LCRpdmVjKT1AXzsJJGlub3V0PSRpbm91dDAgaWYgKCFkZWZpbmVkKCRpbm91dCkp OwotICsrJHNuOwotICRjb2RlLj08PF9fXzsKLSAJJG1vdmtleQkoJGtleSksJHJuZGtleTAKLSAJ JG1vdmtleQkxNigka2V5KSwkcm5ka2V5MQotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoZGVmaW5l ZCgkaXZlYykpOwotKwl4b3Jwcwkkcm5ka2V5MCwkaXZlYwotIAlsZWEJMzIoJGtleSksJGtleQot LQlweG9yCSRybmRrZXkwLCRpbm91dDAKLSsJeG9ycHMJJGl2ZWMsJGlub3V0Ci0rX19fCi0rJGNv ZGUuPTw8X19fIGlmICghZGVmaW5lZCgkaXZlYykpOwotKwlsZWEJMzIoJGtleSksJGtleQotKwl4 b3Jwcwkkcm5ka2V5MCwkaW5vdXQKLStfX18KLSskY29kZS49PDxfX187Ci0gLkxvb3BfJHtwfTFf JHNuOgotLQlhZXMke3B9CSRybmRrZXkxLCRpbm91dDAKLSsJYWVzJHtwfQkkcm5ka2V5MSwkaW5v dXQKLSAJZGVjCSRyb3VuZHMKLSAJJG1vdmtleQkoJGtleSksJHJuZGtleTEKLSAJbGVhCTE2KCRr ZXkpLCRrZXkKLSAJam56CS5Mb29wXyR7cH0xXyRzbgkjIGxvb3AgYm9keSBpcyAxNiBieXRlcwot LQlhZXMke3B9bGFzdAkkcm5ka2V5MSwkaW5vdXQwCi0rCWFlcyR7cH1sYXN0CSRybmRrZXkxLCRp bm91dAotIF9fXwotIH19Ci0gIyB2b2lkICRQUkVGSVhfW2VufGRlXWNyeXB0IChjb25zdCB2b2lk ICppbnAsdm9pZCAqb3V0LGNvbnN0IEFFU19LRVkgKmtleSk7Ci1AQCAtODYsNyArMjM2LDcgQEAg JGNvZGUuPTw8X19fOwotIC5hbGlnbgkxNgotICR7UFJFRklYfV9lbmNyeXB0OgotIAltb3Z1cHMJ KCRpbnApLCRpbm91dDAJCSMgbG9hZCBpbnB1dAotLQltb3YJMjQwKCRrZXkpLCRyb3VuZHMJIyBw dWxsICRyb3VuZHMKLSsJbW92CTI0MCgka2V5KSwkcm91bmRzCSMga2V5LT5yb3VuZHMKLSBfX18K LSAJJmFlc25pX2dlbmVyYXRlMSgiZW5jIiwka2V5LCRyb3VuZHMpOwotICRjb2RlLj08PF9fXzsK LUBAIC05OSw3ICsyNDksNyBAQCAkY29kZS49PDxfX187Ci0gLmFsaWduCTE2Ci0gJHtQUkVGSVh9 X2RlY3J5cHQ6Ci0gCW1vdnVwcwkoJGlucCksJGlub3V0MAkJIyBsb2FkIGlucHV0Ci0tCW1vdgky NDAoJGtleSksJHJvdW5kcwkjIHB1bGwgJHJvdW5kcwotKwltb3YJMjQwKCRrZXkpLCRyb3VuZHMJ IyBrZXktPnJvdW5kcwotIF9fXwotIAkmYWVzbmlfZ2VuZXJhdGUxKCJkZWMiLCRrZXksJHJvdW5k cyk7Ci0gJGNvZGUuPTw8X19fOwotQEAgLTEwOSwxNiArMjU5LDE2IEBAICRjb2RlLj08PF9fXzsK LSBfX18KLSB9Ci0gDAotLSMgX2Flc25pX1tlbnxkZV1jcnlwdFszNF0gYXJlIHByaXZhdGUgaW50 ZXJmYWNlcywgTiBkZW5vdGVzIGludGVybGVhdmUKLS0jIGZhY3Rvci4gV2h5IDN4IHN1YnJvdXRp bmUgaXMgdXNlZCBpbiBsb29wcz8gRXZlbiB0aG91Z2ggYWVzW2VuY3xkZWNdCi0tIyBsYXRlbmN5 IGlzIDYsIGl0IHR1cm5lZCBvdXQgdGhhdCBpdCBjYW4gYmUgc2NoZWR1bGVkIG9ubHkgZXZlcnkK LS0jICpzZWNvbmQqIGN5Y2xlLiBUaHVzIDN4IGludGVybGVhdmUgaXMgdGhlIG9uZSBwcm92aWRp bmcgb3B0aW1hbAotKyMgX2Flc25pX1tlbnxkZV1jcnlwdE4gYXJlIHByaXZhdGUgaW50ZXJmYWNl cywgTiBkZW5vdGVzIGludGVybGVhdmUKLSsjIGZhY3Rvci4gV2h5IDN4IHN1YnJvdXRpbmUgd2Vy ZSBvcmlnaW5hbGx5IHVzZWQgaW4gbG9vcHM/IEV2ZW4gdGhvdWdoCi0rIyBhZXNbZW5jfGRlY10g bGF0ZW5jeSB3YXMgb3JpZ2luYWxseSA2LCBpdCBjb3VsZCBiZSBzY2hlZHVsZWQgb25seQotKyMg ZXZlcnkgKjJuZCogY3ljbGUuIFRodXMgM3ggaW50ZXJsZWF2ZSB3YXMgdGhlIG9uZSBwcm92aWRp bmcgb3B0aW1hbAotICMgdXRpbGl6YXRpb24sIGkuZS4gd2hlbiBzdWJyb3V0aW5lJ3MgdGhyb3Vn aHB1dCBpcyB2aXJ0dWFsbHkgc2FtZSBhcwotICMgb2Ygbm9uLWludGVybGVhdmVkIHN1YnJvdXRp bmUgW2ZvciBudW1iZXIgb2YgaW5wdXQgYmxvY2tzIHVwIHRvIDNdLgotLSMgVGhpcyBpcyB3aHkg aXQgbWFrZXMgbm8gc2Vuc2UgdG8gaW1wbGVtZW50IDJ4IHN1YnJvdXRpbmUuIEFzIHNvb24KLS0j IGFzL2lmIEludGVsIGltcHJvdmVzIHRocm91Z2hwdXQgYnkgbWFraW5nIGl0IHBvc3NpYmxlIHRv IHNjaGVkdWxlCi0tIyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHF1ZXN0aW9uICpldmVyeSogY3ljbGVz IEkgd291bGQgaGF2ZSB0bwotLSMgaW1wbGVtZW50IDZ4IGludGVybGVhdmUgYW5kIHVzZSBpdCBp biBsb29wLi4uCi0rIyBUaGlzIGlzIHdoeSBpdCBtYWtlcyBubyBzZW5zZSB0byBpbXBsZW1lbnQg Mnggc3Vicm91dGluZS4KLSsjIGFlc1tlbmN8ZGVjXSBsYXRlbmN5IGluIG5leHQgcHJvY2Vzc29y IGdlbmVyYXRpb24gaXMgOCwgYnV0IHRoZQotKyMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzY2hlZHVs ZWQgZXZlcnkgY3ljbGUuIE9wdGltYWwgaW50ZXJsZWF2ZSBmb3IKLSsjIG5ldyBwcm9jZXNzb3Ig aXMgdGhlcmVmb3JlIDh4Li4uCi0gc3ViIGFlc25pX2dlbmVyYXRlMyB7Ci0gbXkgJGRpcj1zaGlm dDsKLSAjIEFzIGFscmVhZHkgbWVudGlvbmVkIGl0IHRha2VzIGluICRrZXkgYW5kICRyb3VuZHMs IHdoaWNoIGFyZSAqbm90KgotQEAgLTEzMSwyNSArMjgxLDI1IEBAIF9hZXNuaV8ke2Rpcn1yeXB0 MzoKLSAJc2hyCVwkMSwkcm91bmRzCi0gCSRtb3ZrZXkJMTYoJGtleSksJHJuZGtleTEKLSAJbGVh CTMyKCRrZXkpLCRrZXkKLS0JcHhvcgkkcm5ka2V5MCwkaW5vdXQwCi0tCXB4b3IJJHJuZGtleTAs JGlub3V0MQotLQlweG9yCSRybmRrZXkwLCRpbm91dDIKLSsJeG9ycHMJJHJuZGtleTAsJGlub3V0 MAotKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQxCi0rCXhvcnBzCSRybmRrZXkwLCRpbm91dDIKLSsJ JG1vdmtleQkJKCRrZXkpLCRybmRrZXkwCi0gCi0gLkwke2Rpcn1fbG9vcDM6Ci0gCWFlcyR7ZGly fQkkcm5ka2V5MSwkaW5vdXQwCi0tCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAotIAlhZXMke2Rp cn0JJHJuZGtleTEsJGlub3V0MQotIAlkZWMJCSRyb3VuZHMKLSAJYWVzJHtkaXJ9CSRybmRrZXkx LCRpbm91dDIKLS0JYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDAKLSAJJG1vdmtleQkJMTYoJGtl eSksJHJuZGtleTEKLSsJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDAKLSAJYWVzJHtkaXJ9CSRy bmRrZXkwLCRpbm91dDEKLSAJbGVhCQkzMigka2V5KSwka2V5Ci0gCWFlcyR7ZGlyfQkkcm5ka2V5 MCwkaW5vdXQyCi0rCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAotIAlqbnoJCS5MJHtkaXJ9X2xv b3AzCi0gCi0gCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCi0tCSRtb3ZrZXkJCSgka2V5KSwk cm5ka2V5MAotIAlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MQotIAlhZXMke2Rpcn0JJHJuZGtl eTEsJGlub3V0MgotIAlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDAKLUBAIC0xNzUsMjgg KzMyNSwyOCBAQCBfYWVzbmlfJHtkaXJ9cnlwdDQ6Ci0gCXNocglcJDEsJHJvdW5kcwotIAkkbW92 a2V5CTE2KCRrZXkpLCRybmRrZXkxCi0gCWxlYQkzMigka2V5KSwka2V5Ci0tCXB4b3IJJHJuZGtl eTAsJGlub3V0MAotLQlweG9yCSRybmRrZXkwLCRpbm91dDEKLS0JcHhvcgkkcm5ka2V5MCwkaW5v dXQyCi0tCXB4b3IJJHJuZGtleTAsJGlub3V0MwotKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQwCi0r CXhvcnBzCSRybmRrZXkwLCRpbm91dDEKLSsJeG9ycHMJJHJuZGtleTAsJGlub3V0MgotKwl4b3Jw cwkkcm5ka2V5MCwkaW5vdXQzCi0rCSRtb3ZrZXkJKCRrZXkpLCRybmRrZXkwCi0gCi0gLkwke2Rp cn1fbG9vcDQ6Ci0gCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCi0tCSRtb3ZrZXkJCSgka2V5 KSwkcm5ka2V5MAotIAlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MQotIAlkZWMJCSRyb3VuZHMK LSAJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKLSAJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91 dDMKLS0JYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDAKLSAJJG1vdmtleQkJMTYoJGtleSksJHJu ZGtleTEKLSsJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDAKLSAJYWVzJHtkaXJ9CSRybmRrZXkw LCRpbm91dDEKLSAJbGVhCQkzMigka2V5KSwka2V5Ci0gCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5v dXQyCi0gCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQzCi0rCSRtb3ZrZXkJCSgka2V5KSwkcm5k a2V5MAotIAlqbnoJCS5MJHtkaXJ9X2xvb3A0Ci0gCi0gCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5v dXQwCi0tCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAotIAlhZXMke2Rpcn0JJHJuZGtleTEsJGlu b3V0MQotIAlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgotIAlhZXMke2Rpcn0JJHJuZGtleTEs JGlub3V0MwotQEAgLTIwOCwxMiArMzU4LDE1OCBAQCBfYWVzbmlfJHtkaXJ9cnlwdDQ6Ci0gLnNp emUJX2Flc25pXyR7ZGlyfXJ5cHQ0LC4tX2Flc25pXyR7ZGlyfXJ5cHQ0Ci0gX19fCi0gfQotK3N1 YiBhZXNuaV9nZW5lcmF0ZTYgewotK215ICRkaXI9c2hpZnQ7Ci0rIyBBcyBhbHJlYWR5IG1lbnRp b25lZCBpdCB0YWtlcyBpbiAka2V5IGFuZCAkcm91bmRzLCB3aGljaCBhcmUgKm5vdCoKLSsjIHBy ZXNlcnZlZC4gJGlub3V0WzAtNV0gaXMgY2lwaGVyL2NsZWFyIHRleHQuLi4KLSskY29kZS49PDxf X187Ci0rLnR5cGUJX2Flc25pXyR7ZGlyfXJ5cHQ2LFxAYWJpLW9tbmlwb3RlbnQKLSsuYWxpZ24J MTYKLStfYWVzbmlfJHtkaXJ9cnlwdDY6Ci0rCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAotKwlz aHIJCVwkMSwkcm91bmRzCi0rCSRtb3ZrZXkJCTE2KCRrZXkpLCRybmRrZXkxCi0rCWxlYQkJMzIo JGtleSksJGtleQotKwl4b3JwcwkJJHJuZGtleTAsJGlub3V0MAotKwlweG9yCQkkcm5ka2V5MCwk aW5vdXQxCi0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCi0rCXB4b3IJCSRybmRrZXkwLCRp bm91dDIKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKLSsJcHhvcgkJJHJuZGtleTAsJGlu b3V0MwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgotKwlweG9yCQkkcm5ka2V5MCwkaW5v dXQ0Ci0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCi0rCXB4b3IJCSRybmRrZXkwLCRpbm91 dDUKLSsJZGVjCQkkcm91bmRzCi0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQ0Ci0rCSRtb3Zr ZXkJCSgka2V5KSwkcm5ka2V5MAotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NQotKwlqbXAJ CS5MJHtkaXJ9X2xvb3A2X2VudGVyCi0rLmFsaWduCTE2Ci0rLkwke2Rpcn1fbG9vcDY6Ci0rCWFl cyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCi0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQxCi0r CWRlYwkJJHJvdW5kcwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgotKwlhZXMke2Rpcn0J JHJuZGtleTEsJGlub3V0MwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NAotKwlhZXMke2Rp cn0JJHJuZGtleTEsJGlub3V0NQotKy5MJHtkaXJ9X2xvb3A2X2VudGVyOgkJCQkjIGhhcHBlbnMg dG8gYmUgMTYtYnl0ZSBhbGlnbmVkCi0rCSRtb3ZrZXkJCTE2KCRrZXkpLCRybmRrZXkxCi0rCWFl cyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQwCi0rCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQxCi0r CWxlYQkJMzIoJGtleSksJGtleQotKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MgotKwlhZXMk e2Rpcn0JJHJuZGtleTAsJGlub3V0MwotKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0NAotKwlh ZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0NQotKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKLSsJ am56CQkuTCR7ZGlyfV9sb29wNgotKwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MAotKwlh ZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MQotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0Mgot KwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0 NAotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NQotKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkw LCRpbm91dDAKLSsJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQxCi0rCWFlcyR7ZGlyfWxh c3QJJHJuZGtleTAsJGlub3V0MgotKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDMKLSsJ YWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQ0Ci0rCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAs JGlub3V0NQotKwlyZXQKLSsuc2l6ZQlfYWVzbmlfJHtkaXJ9cnlwdDYsLi1fYWVzbmlfJHtkaXJ9 cnlwdDYKLStfX18KLSt9Ci0rc3ViIGFlc25pX2dlbmVyYXRlOCB7Ci0rbXkgJGRpcj1zaGlmdDsK LSsjIEFzIGFscmVhZHkgbWVudGlvbmVkIGl0IHRha2VzIGluICRrZXkgYW5kICRyb3VuZHMsIHdo aWNoIGFyZSAqbm90KgotKyMgcHJlc2VydmVkLiAkaW5vdXRbMC03XSBpcyBjaXBoZXIvY2xlYXIg dGV4dC4uLgotKyRjb2RlLj08PF9fXzsKLSsudHlwZQlfYWVzbmlfJHtkaXJ9cnlwdDgsXEBhYmkt b21uaXBvdGVudAotKy5hbGlnbgkxNgotK19hZXNuaV8ke2Rpcn1yeXB0ODoKLSsJJG1vdmtleQkJ KCRrZXkpLCRybmRrZXkwCi0rCXNocgkJXCQxLCRyb3VuZHMKLSsJJG1vdmtleQkJMTYoJGtleSks JHJuZGtleTEKLSsJbGVhCQkzMigka2V5KSwka2V5Ci0rCXhvcnBzCQkkcm5ka2V5MCwkaW5vdXQw Ci0rCXhvcnBzCQkkcm5ka2V5MCwkaW5vdXQxCi0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQw Ci0rCXB4b3IJCSRybmRrZXkwLCRpbm91dDIKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEK LSsJcHhvcgkJJHJuZGtleTAsJGlub3V0MwotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0Mgot KwlweG9yCQkkcm5ka2V5MCwkaW5vdXQ0Ci0rCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCi0r CXB4b3IJCSRybmRrZXkwLCRpbm91dDUKLSsJZGVjCQkkcm91bmRzCi0rCWFlcyR7ZGlyfQkkcm5k a2V5MSwkaW5vdXQ0Ci0rCXB4b3IJCSRybmRrZXkwLCRpbm91dDYKLSsJYWVzJHtkaXJ9CSRybmRr ZXkxLCRpbm91dDUKLSsJcHhvcgkJJHJuZGtleTAsJGlub3V0NwotKwkkbW92a2V5CQkoJGtleSks JHJuZGtleTAKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDYKLSsJYWVzJHtkaXJ9CSRybmRr ZXkxLCRpbm91dDcKLSsJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKLSsJam1wCQkuTCR7ZGly fV9sb29wOF9lbnRlcgotKy5hbGlnbgkxNgotKy5MJHtkaXJ9X2xvb3A4OgotKwlhZXMke2Rpcn0J JHJuZGtleTEsJGlub3V0MAotKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MQotKwlkZWMJCSRy b3VuZHMKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKLSsJYWVzJHtkaXJ9CSRybmRrZXkx LCRpbm91dDMKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDQKLSsJYWVzJHtkaXJ9CSRybmRr ZXkxLCRpbm91dDUKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDYKLSsJYWVzJHtkaXJ9CSRy bmRrZXkxLCRpbm91dDcKLSsJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKLSsuTCR7ZGlyfV9s b29wOF9lbnRlcjoJCQkJIyBoYXBwZW5zIHRvIGJlIDE2LWJ5dGUgYWxpZ25lZAotKwlhZXMke2Rp cn0JJHJuZGtleTAsJGlub3V0MAotKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MQotKwlsZWEJ CTMyKCRrZXkpLCRrZXkKLSsJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDIKLSsJYWVzJHtkaXJ9 CSRybmRrZXkwLCRpbm91dDMKLSsJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDQKLSsJYWVzJHtk aXJ9CSRybmRrZXkwLCRpbm91dDUKLSsJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDYKLSsJYWVz JHtkaXJ9CSRybmRrZXkwLCRpbm91dDcKLSsJJG1vdmtleQkJKCRrZXkpLCRybmRrZXkwCi0rCWpu egkJLkwke2Rpcn1fbG9vcDgKLSsKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDAKLSsJYWVz JHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKLSsJ YWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDMKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDQK LSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDUKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91 dDYKLSsJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDcKLSsJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5 MCwkaW5vdXQwCi0rCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0MQotKwlhZXMke2Rpcn1s YXN0CSRybmRrZXkwLCRpbm91dDIKLSsJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQzCi0r CWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0NAotKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkw LCRpbm91dDUKLSsJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQ2Ci0rCWFlcyR7ZGlyfWxh c3QJJHJuZGtleTAsJGlub3V0NwotKwlyZXQKLSsuc2l6ZQlfYWVzbmlfJHtkaXJ9cnlwdDgsLi1f YWVzbmlfJHtkaXJ9cnlwdDgKLStfX18KLSt9Ci0gJmFlc25pX2dlbmVyYXRlMygiZW5jIikgaWYg KCRQUkVGSVggZXEgImFlc25pIik7Ci0gJmFlc25pX2dlbmVyYXRlMygiZGVjIik7Ci0gJmFlc25p X2dlbmVyYXRlNCgiZW5jIikgaWYgKCRQUkVGSVggZXEgImFlc25pIik7Ci0gJmFlc25pX2dlbmVy YXRlNCgiZGVjIik7Ci0rJmFlc25pX2dlbmVyYXRlNigiZW5jIikgaWYgKCRQUkVGSVggZXEgImFl c25pIik7Ci0rJmFlc25pX2dlbmVyYXRlNigiZGVjIik7Ci0rJmFlc25pX2dlbmVyYXRlOCgiZW5j IikgaWYgKCRQUkVGSVggZXEgImFlc25pIik7Ci0rJmFlc25pX2dlbmVyYXRlOCgiZGVjIik7Ci0g DAotIGlmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAjIHZvaWQg YWVzbmlfZWNiX2VuY3J5cHQgKGNvbnN0IHZvaWQgKmluLCB2b2lkICpvdXQsCi0gIwkJCSAgc2l6 ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAotICMJCQkgIGludCBlbmMpOwotQEAgLTIy Miw1NCArNTE4LDk4IEBAICRjb2RlLj08PF9fXzsKLSAudHlwZQlhZXNuaV9lY2JfZW5jcnlwdCxc QGZ1bmN0aW9uLDUKLSAuYWxpZ24JMTYKLSBhZXNuaV9lY2JfZW5jcnlwdDoKLS0JY21wCVwkMTYs JGxlbgkJIyBjaGVjayBsZW5ndGgKLS0JamIJLkxlY2JfcmV0Ci0tCi0tCW1vdgkyNDAoJGtleSks JHJvdW5kcwkjIHB1bGwgJHJvdW5kcwotIAlhbmQJXCQtMTYsJGxlbgotKwlqegkuTGVjYl9yZXQK LSsKLSsJbW92CTI0MCgka2V5KSwkcm91bmRzCSMga2V5LT5yb3VuZHMKLSsJJG1vdmtleQkoJGtl eSksJHJuZGtleTAKLSAJbW92CSRrZXksJGtleV8JCSMgYmFja3VwICRrZXkKLS0JdGVzdAklcjhk LCVyOGQJCSMgNXRoIGFyZ3VtZW50Ci0gCW1vdgkkcm91bmRzLCRybmRzXwkJIyBiYWNrdXAgJHJv dW5kcwotKwl0ZXN0CSVyOGQsJXI4ZAkJIyA1dGggYXJndW1lbnQKLSAJanoJLkxlY2JfZGVjcnlw dAotICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRUNCIEVOQ1JZUFQgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tIwotLQlzdWIJXCQweDQwLCRsZW4KLS0JamJlCS5MZWNiX2VuY190 YWlsCi0tCWptcAkuTGVjYl9lbmNfbG9vcDMKLSsJY21wCVwkMHg4MCwkbGVuCi0rCWpiCS5MZWNi X2VuY190YWlsCi0rCi0rCW1vdmRxdQkoJGlucCksJGlub3V0MAotKwltb3ZkcXUJMHgxMCgkaW5w KSwkaW5vdXQxCi0rCW1vdmRxdQkweDIwKCRpbnApLCRpbm91dDIKLSsJbW92ZHF1CTB4MzAoJGlu cCksJGlub3V0MwotKwltb3ZkcXUJMHg0MCgkaW5wKSwkaW5vdXQ0Ci0rCW1vdmRxdQkweDUwKCRp bnApLCRpbm91dDUKLSsJbW92ZHF1CTB4NjAoJGlucCksJGlub3V0NgotKwltb3ZkcXUJMHg3MCgk aW5wKSwkaW5vdXQ3Ci0rCWxlYQkweDgwKCRpbnApLCRpbnAKLSsJc3ViCVwkMHg4MCwkbGVuCi0r CWptcAkuTGVjYl9lbmNfbG9vcDhfZW50ZXIKLSAuYWxpZ24gMTYKLS0uTGVjYl9lbmNfbG9vcDM6 Ci0tCW1vdnVwcwkoJGlucCksJGlub3V0MAotLQltb3Z1cHMJMHgxMCgkaW5wKSwkaW5vdXQxCi0t CW1vdnVwcwkweDIwKCRpbnApLCRpbm91dDIKLS0JY2FsbAlfYWVzbmlfZW5jcnlwdDMKLS0Jc3Vi CVwkMHgzMCwkbGVuCi0tCWxlYQkweDMwKCRpbnApLCRpbnAKLS0JbGVhCTB4MzAoJG91dCksJG91 dAotLQltb3Z1cHMJJGlub3V0MCwtMHgzMCgkb3V0KQotLQltb3YJJHJuZHNfLCRyb3VuZHMJCSMg cmVzdG9yZSAkcm91bmRzCi0tCW1vdnVwcwkkaW5vdXQxLC0weDIwKCRvdXQpCi0rLkxlY2JfZW5j X2xvb3A4OgotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSAJbW92CSRrZXlfLCRrZXkJCSMgcmVz dG9yZSAka2V5Ci0tCW1vdnVwcwkkaW5vdXQyLC0weDEwKCRvdXQpCi0tCWphCS5MZWNiX2VuY19s b29wMwotKwltb3ZkcXUJKCRpbnApLCRpbm91dDAKLSsJbW92CSRybmRzXywkcm91bmRzCQkjIHJl c3RvcmUgJHJvdW5kcwotKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCi0rCW1vdmRxdQkweDEw KCRpbnApLCRpbm91dDEKLSsJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQotKwltb3ZkcXUJMHgy MCgkaW5wKSwkaW5vdXQyCi0rCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKLSsJbW92ZHF1CTB4 MzAoJGlucCksJGlub3V0MwotKwltb3Z1cHMJJGlub3V0NCwweDQwKCRvdXQpCi0rCW1vdmRxdQkw eDQwKCRpbnApLCRpbm91dDQKLSsJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQotKwltb3ZkcXUJ MHg1MCgkaW5wKSwkaW5vdXQ1Ci0rCW1vdnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKLSsJbW92ZHF1 CTB4NjAoJGlucCksJGlub3V0NgotKwltb3Z1cHMJJGlub3V0NywweDcwKCRvdXQpCi0rCWxlYQkw eDgwKCRvdXQpLCRvdXQKLSsJbW92ZHF1CTB4NzAoJGlucCksJGlub3V0NwotKwlsZWEJMHg4MCgk aW5wKSwkaW5wCi0rLkxlY2JfZW5jX2xvb3A4X2VudGVyOgotIAotLS5MZWNiX2VuY190YWlsOgot LQlhZGQJXCQweDQwLCRsZW4KLSsJY2FsbAlfYWVzbmlfZW5jcnlwdDgKLSsKLSsJc3ViCVwkMHg4 MCwkbGVuCi0rCWpuYwkuTGVjYl9lbmNfbG9vcDgKLSsKLSsJbW92dXBzCSRpbm91dDAsKCRvdXQp Ci0rCW1vdgkka2V5Xywka2V5CQkjIHJlc3RvcmUgJGtleQotKwltb3Z1cHMJJGlub3V0MSwweDEw KCRvdXQpCi0rCW1vdgkkcm5kc18sJHJvdW5kcwkJIyByZXN0b3JlICRyb3VuZHMKLSsJbW92dXBz CSRpbm91dDIsMHgyMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCi0rCW1vdnVw cwkkaW5vdXQ0LDB4NDAoJG91dCkKLSsJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQotKwltb3Z1 cHMJJGlub3V0NiwweDYwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQ3LDB4NzAoJG91dCkKLSsJbGVh CTB4ODAoJG91dCksJG91dAotKwlhZGQJXCQweDgwLCRsZW4KLSAJanoJLkxlY2JfcmV0Ci0gCi0t CWNtcAlcJDB4MTAsJGxlbgotKy5MZWNiX2VuY190YWlsOgotIAltb3Z1cHMJKCRpbnApLCRpbm91 dDAKLS0JamUJLkxlY2JfZW5jX29uZQotIAljbXAJXCQweDIwLCRsZW4KLSsJamIJLkxlY2JfZW5j X29uZQotIAltb3Z1cHMJMHgxMCgkaW5wKSwkaW5vdXQxCi0gCWplCS5MZWNiX2VuY190d28KLS0J Y21wCVwkMHgzMCwkbGVuCi0gCW1vdnVwcwkweDIwKCRpbnApLCRpbm91dDIKLS0JamUJLkxlY2Jf ZW5jX3RocmVlCi0rCWNtcAlcJDB4NDAsJGxlbgotKwlqYgkuTGVjYl9lbmNfdGhyZWUKLSAJbW92 dXBzCTB4MzAoJGlucCksJGlub3V0MwotLQljYWxsCV9hZXNuaV9lbmNyeXB0NAotKwlqZQkuTGVj Yl9lbmNfZm91cgotKwltb3Z1cHMJMHg0MCgkaW5wKSwkaW5vdXQ0Ci0rCWNtcAlcJDB4NjAsJGxl bgotKwlqYgkuTGVjYl9lbmNfZml2ZQotKwltb3Z1cHMJMHg1MCgkaW5wKSwkaW5vdXQ1Ci0rCWpl CS5MZWNiX2VuY19zaXgKLSsJbW92ZHF1CTB4NjAoJGlucCksJGlub3V0NgotKwljYWxsCV9hZXNu aV9lbmNyeXB0OAotIAltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSAJbW92dXBzCSRpbm91dDEsMHgx MCgkb3V0KQotIAltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCi0gCW1vdnVwcwkkaW5vdXQzLDB4 MzAoJG91dCkKLSsJbW92dXBzCSRpbm91dDQsMHg0MCgkb3V0KQotKwltb3Z1cHMJJGlub3V0NSww eDUwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKLSAJam1wCS5MZWNiX3JldAot IC5hbGlnbgkxNgotIC5MZWNiX2VuY19vbmU6Ci1AQCAtMjgwLDYgKzYyMCw3IEBAICRjb2RlLj08 PF9fXzsKLSAJam1wCS5MZWNiX3JldAotIC5hbGlnbgkxNgotIC5MZWNiX2VuY190d286Ci0rCXhv cnBzCSRpbm91dDIsJGlub3V0MgotIAljYWxsCV9hZXNuaV9lbmNyeXB0MwotIAltb3Z1cHMJJGlu b3V0MCwoJG91dCkKLSAJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQotQEAgLTI5MSw0NyArNjMy LDEyMSBAQCAkY29kZS49PDxfX187Ci0gCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSAJbW92 dXBzCSRpbm91dDIsMHgyMCgkb3V0KQotIAlqbXAJLkxlY2JfcmV0Ci0rLmFsaWduCTE2Ci0rLkxl Y2JfZW5jX2ZvdXI6Ci0rCWNhbGwJX2Flc25pX2VuY3J5cHQ0Ci0rCW1vdnVwcwkkaW5vdXQwLCgk b3V0KQotKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQyLDB4MjAo JG91dCkKLSsJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQotKwlqbXAJLkxlY2JfcmV0Ci0rLmFs aWduCTE2Ci0rLkxlY2JfZW5jX2ZpdmU6Ci0rCXhvcnBzCSRpbm91dDUsJGlub3V0NQotKwljYWxs CV9hZXNuaV9lbmNyeXB0NgotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJbW92dXBzCSRpbm91 dDEsMHgxMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCi0rCW1vdnVwcwkkaW5v dXQzLDB4MzAoJG91dCkKLSsJbW92dXBzCSRpbm91dDQsMHg0MCgkb3V0KQotKwlqbXAJLkxlY2Jf cmV0Ci0rLmFsaWduCTE2Ci0rLkxlY2JfZW5jX3NpeDoKLSsJY2FsbAlfYWVzbmlfZW5jcnlwdDYK LSsJbW92dXBzCSRpbm91dDAsKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSsJ bW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCi0r CW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91dCkKLSsJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQot KwlqbXAJLkxlY2JfcmV0Ci0gDCMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRUNCIERFQ1JZ UFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwotIC5hbGlnbgkxNgotIC5MZWNiX2Rl Y3J5cHQ6Ci0tCXN1YglcJDB4NDAsJGxlbgotLQlqYmUJLkxlY2JfZGVjX3RhaWwKLS0Jam1wCS5M ZWNiX2RlY19sb29wMwotKwljbXAJXCQweDgwLCRsZW4KLSsJamIJLkxlY2JfZGVjX3RhaWwKLSsK LSsJbW92ZHF1CSgkaW5wKSwkaW5vdXQwCi0rCW1vdmRxdQkweDEwKCRpbnApLCRpbm91dDEKLSsJ bW92ZHF1CTB4MjAoJGlucCksJGlub3V0MgotKwltb3ZkcXUJMHgzMCgkaW5wKSwkaW5vdXQzCi0r CW1vdmRxdQkweDQwKCRpbnApLCRpbm91dDQKLSsJbW92ZHF1CTB4NTAoJGlucCksJGlub3V0NQot Kwltb3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2Ci0rCW1vdmRxdQkweDcwKCRpbnApLCRpbm91dDcK LSsJbGVhCTB4ODAoJGlucCksJGlucAotKwlzdWIJXCQweDgwLCRsZW4KLSsJam1wCS5MZWNiX2Rl Y19sb29wOF9lbnRlcgotIC5hbGlnbiAxNgotLS5MZWNiX2RlY19sb29wMzoKLS0JbW92dXBzCSgk aW5wKSwkaW5vdXQwCi0tCW1vdnVwcwkweDEwKCRpbnApLCRpbm91dDEKLS0JbW92dXBzCTB4MjAo JGlucCksJGlub3V0MgotLQljYWxsCV9hZXNuaV9kZWNyeXB0MwotLQlzdWIJXCQweDMwLCRsZW4K LS0JbGVhCTB4MzAoJGlucCksJGlucAotLQlsZWEJMHgzMCgkb3V0KSwkb3V0Ci0tCW1vdnVwcwkk aW5vdXQwLC0weDMwKCRvdXQpCi0tCW1vdgkkcm5kc18sJHJvdW5kcwkJIyByZXN0b3JlICRyb3Vu ZHMKLS0JbW92dXBzCSRpbm91dDEsLTB4MjAoJG91dCkKLSsuTGVjYl9kZWNfbG9vcDg6Ci0rCW1v dnVwcwkkaW5vdXQwLCgkb3V0KQotIAltb3YJJGtleV8sJGtleQkJIyByZXN0b3JlICRrZXkKLS0J bW92dXBzCSRpbm91dDIsLTB4MTAoJG91dCkKLS0JamEJLkxlY2JfZGVjX2xvb3AzCi0rCW1vdmRx dQkoJGlucCksJGlub3V0MAotKwltb3YJJHJuZHNfLCRyb3VuZHMJCSMgcmVzdG9yZSAkcm91bmRz Ci0rCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSsJbW92ZHF1CTB4MTAoJGlucCksJGlub3V0 MQotKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCi0rCW1vdmRxdQkweDIwKCRpbnApLCRpbm91 dDIKLSsJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQotKwltb3ZkcXUJMHgzMCgkaW5wKSwkaW5v dXQzCi0rCW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91dCkKLSsJbW92ZHF1CTB4NDAoJGlucCksJGlu b3V0NAotKwltb3Z1cHMJJGlub3V0NSwweDUwKCRvdXQpCi0rCW1vdmRxdQkweDUwKCRpbnApLCRp bm91dDUKLSsJbW92dXBzCSRpbm91dDYsMHg2MCgkb3V0KQotKwltb3ZkcXUJMHg2MCgkaW5wKSwk aW5vdXQ2Ci0rCW1vdnVwcwkkaW5vdXQ3LDB4NzAoJG91dCkKLSsJbGVhCTB4ODAoJG91dCksJG91 dAotKwltb3ZkcXUJMHg3MCgkaW5wKSwkaW5vdXQ3Ci0rCWxlYQkweDgwKCRpbnApLCRpbnAKLSsu TGVjYl9kZWNfbG9vcDhfZW50ZXI6Ci0rCi0rCWNhbGwJX2Flc25pX2RlY3J5cHQ4Ci0rCi0rCSRt b3ZrZXkJKCRrZXlfKSwkcm5ka2V5MAotKwlzdWIJXCQweDgwLCRsZW4KLSsJam5jCS5MZWNiX2Rl Y19sb29wOAotIAotLS5MZWNiX2RlY190YWlsOgotLQlhZGQJXCQweDQwLCRsZW4KLSsJbW92dXBz CSRpbm91dDAsKCRvdXQpCi0rCW1vdgkka2V5Xywka2V5CQkjIHJlc3RvcmUgJGtleQotKwltb3Z1 cHMJJGlub3V0MSwweDEwKCRvdXQpCi0rCW1vdgkkcm5kc18sJHJvdW5kcwkJIyByZXN0b3JlICRy b3VuZHMKLSsJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MywweDMw KCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91dCkKLSsJbW92dXBzCSRpbm91dDUsMHg1 MCgkb3V0KQotKwltb3Z1cHMJJGlub3V0NiwweDYwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQ3LDB4 NzAoJG91dCkKLSsJbGVhCTB4ODAoJG91dCksJG91dAotKwlhZGQJXCQweDgwLCRsZW4KLSAJanoJ LkxlY2JfcmV0Ci0gCi0tCWNtcAlcJDB4MTAsJGxlbgotKy5MZWNiX2RlY190YWlsOgotIAltb3Z1 cHMJKCRpbnApLCRpbm91dDAKLS0JamUJLkxlY2JfZGVjX29uZQotIAljbXAJXCQweDIwLCRsZW4K LSsJamIJLkxlY2JfZGVjX29uZQotIAltb3Z1cHMJMHgxMCgkaW5wKSwkaW5vdXQxCi0gCWplCS5M ZWNiX2RlY190d28KLS0JY21wCVwkMHgzMCwkbGVuCi0gCW1vdnVwcwkweDIwKCRpbnApLCRpbm91 dDIKLS0JamUJLkxlY2JfZGVjX3RocmVlCi0rCWNtcAlcJDB4NDAsJGxlbgotKwlqYgkuTGVjYl9k ZWNfdGhyZWUKLSAJbW92dXBzCTB4MzAoJGlucCksJGlub3V0MwotLQljYWxsCV9hZXNuaV9kZWNy eXB0NAotKwlqZQkuTGVjYl9kZWNfZm91cgotKwltb3Z1cHMJMHg0MCgkaW5wKSwkaW5vdXQ0Ci0r CWNtcAlcJDB4NjAsJGxlbgotKwlqYgkuTGVjYl9kZWNfZml2ZQotKwltb3Z1cHMJMHg1MCgkaW5w KSwkaW5vdXQ1Ci0rCWplCS5MZWNiX2RlY19zaXgKLSsJbW92dXBzCTB4NjAoJGlucCksJGlub3V0 NgotKwkkbW92a2V5CSgka2V5KSwkcm5ka2V5MAotKwljYWxsCV9hZXNuaV9kZWNyeXB0OAotIAlt b3Z1cHMJJGlub3V0MCwoJG91dCkKLSAJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQotIAltb3Z1 cHMJJGlub3V0MiwweDIwKCRvdXQpCi0gCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKLSsJbW92 dXBzCSRpbm91dDQsMHg0MCgkb3V0KQotKwltb3Z1cHMJJGlub3V0NSwweDUwKCRvdXQpCi0rCW1v dnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKLSAJam1wCS5MZWNiX3JldAotIC5hbGlnbgkxNgotIC5M ZWNiX2RlY19vbmU6Ci1AQCAtMzQyLDYgKzc1Nyw3IEBAICRjb2RlLj08PF9fXzsKLSAJam1wCS5M ZWNiX3JldAotIC5hbGlnbgkxNgotIC5MZWNiX2RlY190d286Ci0rCXhvcnBzCSRpbm91dDIsJGlu b3V0MgotIAljYWxsCV9hZXNuaV9kZWNyeXB0MwotIAltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSAJ bW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQotQEAgLTM1Miw2ICs3NjgsMzQgQEAgJGNvZGUuPTw8 X19fOwotIAltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSAJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0 KQotIAltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCi0rCWptcAkuTGVjYl9yZXQKLSsuYWxpZ24J MTYKLSsuTGVjYl9kZWNfZm91cjoKLSsJY2FsbAlfYWVzbmlfZGVjcnlwdDQKLSsJbW92dXBzCSRp bm91dDAsKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSsJbW92dXBzCSRpbm91 dDIsMHgyMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCi0rCWptcAkuTGVjYl9y ZXQKLSsuYWxpZ24JMTYKLSsuTGVjYl9kZWNfZml2ZToKLSsJeG9ycHMJJGlub3V0NSwkaW5vdXQ1 Ci0rCWNhbGwJX2Flc25pX2RlY3J5cHQ2Ci0rCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQotKwltb3Z1 cHMJJGlub3V0MSwweDEwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKLSsJbW92 dXBzCSRpbm91dDMsMHgzMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0NCwweDQwKCRvdXQpCi0rCWpt cAkuTGVjYl9yZXQKLSsuYWxpZ24JMTYKLSsuTGVjYl9kZWNfc2l4OgotKwljYWxsCV9hZXNuaV9k ZWNyeXB0NgotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJbW92dXBzCSRpbm91dDEsMHgxMCgk b3V0KQotKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQzLDB4MzAo JG91dCkKLSsJbW92dXBzCSRpbm91dDQsMHg0MCgkb3V0KQotKwltb3Z1cHMJJGlub3V0NSwweDUw KCRvdXQpCi0gCi0gLkxlY2JfcmV0OgotIAlyZXQKLUBAIC0zNjIsNyArODA2LDggQEAgX19fCi0g IyB2b2lkICRQUkVGSVhfY2JjX2VuY3J5cHQgKGNvbnN0IHZvaWQgKmlucCwgdm9pZCAqb3V0LAot ICMJCQkgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAotICMJCQkgICAgdW5z aWduZWQgY2hhciAqaXZwLGNvbnN0IGludCBlbmMpOwotLSRyZXNlcnZlZCA9ICR3aW42ND8weDQw Oi0weDE4OwkjIHVzZWQgaW4gZGVjcnlwdAotK3sKLStteSAkcmVzZXJ2ZWQgPSAkd2luNjQ/MHg0 MDotMHgxODsJIyB1c2VkIGluIGRlY3J5cHQKLSAkY29kZS49PDxfX187Ci0gLmdsb2JsCSR7UFJF RklYfV9jYmNfZW5jcnlwdAotIC50eXBlCSR7UFJFRklYfV9jYmNfZW5jcnlwdCxcQGZ1bmN0aW9u LDYKLUBAIC0zNzEsMzAgKzgxNiwzMCBAQCAke1BSRUZJWH1fY2JjX2VuY3J5cHQ6Ci0gCXRlc3QJ JGxlbiwkbGVuCQkjIGNoZWNrIGxlbmd0aAotIAlqegkuTGNiY19yZXQKLSAKLS0JbW92CTI0MCgk a2V5KSwkcm5kc18JIyBwdWxsICRyb3VuZHMKLSsJbW92CTI0MCgka2V5KSwkcm5kc18JIyBrZXkt PnJvdW5kcwotIAltb3YJJGtleSwka2V5XwkJIyBiYWNrdXAgJGtleQotIAl0ZXN0CSVyOWQsJXI5 ZAkJIyA2dGggYXJndW1lbnQKLSAJanoJLkxjYmNfZGVjcnlwdAotICMtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gQ0JDIEVOQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwot IAltb3Z1cHMJKCRpdnApLCRpbm91dDAJCSMgbG9hZCBpdiBhcyBpbml0aWFsIHN0YXRlCi0tCWNt cAlcJDE2LCRsZW4KLSAJbW92CSRybmRzXywkcm91bmRzCi0rCWNtcAlcJDE2LCRsZW4KLSAJamIJ LkxjYmNfZW5jX3RhaWwKLSAJc3ViCVwkMTYsJGxlbgotIAlqbXAJLkxjYmNfZW5jX2xvb3AKLS0u YWxpZ24gMTYKLSsuYWxpZ24JMTYKLSAuTGNiY19lbmNfbG9vcDoKLSAJbW92dXBzCSgkaW5wKSwk aW5vdXQxCQkjIGxvYWQgaW5wdXQKLSAJbGVhCTE2KCRpbnApLCRpbnAKLS0JcHhvcgkkaW5vdXQx LCRpbm91dDAKLSsJI3hvcnBzCSRpbm91dDEsJGlub3V0MAotIF9fXwotLQkmYWVzbmlfZ2VuZXJh dGUxKCJlbmMiLCRrZXksJHJvdW5kcyk7Ci0rCSZhZXNuaV9nZW5lcmF0ZTEoImVuYyIsJGtleSwk cm91bmRzLCRpbm91dDAsJGlub3V0MSk7Ci0gJGNvZGUuPTw8X19fOwotLQlzdWIJXCQxNiwkbGVu Ci0tCWxlYQkxNigkb3V0KSwkb3V0Ci0gCW1vdgkkcm5kc18sJHJvdW5kcwkJIyByZXN0b3JlICRy b3VuZHMKLSAJbW92CSRrZXlfLCRrZXkJCSMgcmVzdG9yZSAka2V5Ci0tCW1vdnVwcwkkaW5vdXQw LC0xNigkb3V0KQkjIHN0b3JlIG91dHB1dAotKwltb3Z1cHMJJGlub3V0MCwwKCRvdXQpCQkjIHN0 b3JlIG91dHB1dAotKwlsZWEJMTYoJG91dCksJG91dAotKwlzdWIJXCQxNiwkbGVuCi0gCWpuYwku TGNiY19lbmNfbG9vcAotIAlhZGQJXCQxNiwkbGVuCi0gCWpuegkuTGNiY19lbmNfdGFpbAotQEAg LTQyOSw5MiArODc0LDIzOCBAQCAkY29kZS49PDxfX18gaWYgKCR3aW42NCk7Ci0gX19fCi0gJGNv ZGUuPTw8X19fOwotIAltb3Z1cHMJKCRpdnApLCRpdgotLQlzdWIJXCQweDQwLCRsZW4KLSAJbW92 CSRybmRzXywkcm91bmRzCi0rCWNtcAlcJDB4NzAsJGxlbgotIAlqYmUJLkxjYmNfZGVjX3RhaWwK LS0Jam1wCS5MY2JjX2RlY19sb29wMwotLS5hbGlnbiAxNgotLS5MY2JjX2RlY19sb29wMzoKLS0J bW92dXBzCSgkaW5wKSwkaW5vdXQwCi0rCXNocglcJDEsJHJuZHNfCi0rCXN1YglcJDB4NzAsJGxl bgotKwltb3YJJHJuZHNfLCRyb3VuZHMKLSsJbW92YXBzCSRpdiwkcmVzZXJ2ZWQoJXJzcCkKLSsJ am1wCS5MY2JjX2RlY19sb29wOF9lbnRlcgotKy5hbGlnbgkxNgotKy5MY2JjX2RlY19sb29wODoK LSsJbW92YXBzCSRybmRrZXkwLCRyZXNlcnZlZCglcnNwKQkjIHNhdmUgSVYKLSsJbW92dXBzCSRp bm91dDcsKCRvdXQpCi0rCWxlYQkweDEwKCRvdXQpLCRvdXQKLSsuTGNiY19kZWNfbG9vcDhfZW50 ZXI6Ci0rCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAotKwltb3Z1cHMJKCRpbnApLCRpbm91dDAJ CQkjIGxvYWQgaW5wdXQKLSAJbW92dXBzCTB4MTAoJGlucCksJGlub3V0MQotLQltb3Z1cHMJMHgy MCgkaW5wKSwkaW5vdXQyCi0tCW1vdmFwcwkkaW5vdXQwLCRpbjAKLS0JbW92YXBzCSRpbm91dDEs JGluMQotLQltb3ZhcHMJJGlub3V0MiwkaW4yCi0tCWNhbGwJX2Flc25pX2RlY3J5cHQzCi0tCXN1 YglcJDB4MzAsJGxlbgotLQlsZWEJMHgzMCgkaW5wKSwkaW5wCi0tCWxlYQkweDMwKCRvdXQpLCRv dXQKLS0JcHhvcgkkaXYsJGlub3V0MAotLQlweG9yCSRpbjAsJGlub3V0MQotLQltb3ZhcHMJJGlu MiwkaXYKLS0JcHhvcgkkaW4xLCRpbm91dDIKLS0JbW92dXBzCSRpbm91dDAsLTB4MzAoJG91dCkK LS0JbW92CSRybmRzXywkcm91bmRzCSMgcmVzdG9yZSAkcm91bmRzCi0tCW1vdnVwcwkkaW5vdXQx LC0weDIwKCRvdXQpCi0tCW1vdgkka2V5Xywka2V5CSMgcmVzdG9yZSAka2V5Ci0tCW1vdnVwcwkk aW5vdXQyLC0weDEwKCRvdXQpCi0tCWphCS5MY2JjX2RlY19sb29wMwotKwkkbW92a2V5CQkxNigk a2V5KSwkcm5ka2V5MQotIAotLS5MY2JjX2RlY190YWlsOgotLQlhZGQJXCQweDQwLCRsZW4KLS0J bW92dXBzCSRpdiwoJGl2cCkKLS0JanoJLkxjYmNfZGVjX3JldAotKwlsZWEJCTMyKCRrZXkpLCRr ZXkKLSsJbW92ZHF1CTB4MjAoJGlucCksJGlub3V0MgotKwl4b3JwcwkJJHJuZGtleTAsJGlub3V0 MAotKwltb3ZkcXUJMHgzMCgkaW5wKSwkaW5vdXQzCi0rCXhvcnBzCQkkcm5ka2V5MCwkaW5vdXQx Ci0rCW1vdmRxdQkweDQwKCRpbnApLCRpbm91dDQKLSsJYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQw Ci0rCXB4b3IJCSRybmRrZXkwLCRpbm91dDIKLSsJbW92ZHF1CTB4NTAoJGlucCksJGlub3V0NQot KwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDEKLSsJcHhvcgkJJHJuZGtleTAsJGlub3V0MwotKwlt b3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2Ci0rCWFlc2RlYwkJJHJuZGtleTEsJGlub3V0MgotKwlw eG9yCQkkcm5ka2V5MCwkaW5vdXQ0Ci0rCW1vdmRxdQkweDcwKCRpbnApLCRpbm91dDcKLSsJYWVz ZGVjCQkkcm5ka2V5MSwkaW5vdXQzCi0rCXB4b3IJCSRybmRrZXkwLCRpbm91dDUKLSsJZGVjCQkk cm91bmRzCi0rCWFlc2RlYwkJJHJuZGtleTEsJGlub3V0NAotKwlweG9yCQkkcm5ka2V5MCwkaW5v dXQ2Ci0rCWFlc2RlYwkJJHJuZGtleTEsJGlub3V0NQotKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQ3 Ci0rCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAotKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDYK LSsJYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQ3Ci0rCSRtb3ZrZXkJCTE2KCRrZXkpLCRybmRrZXkx Ci0rCi0rCWNhbGwJCS5MZGVjX2xvb3A4X2VudGVyCi0gCi0rCW1vdnVwcwkoJGlucCksJHJuZGtl eTEJCSMgcmUtbG9hZCBpbnB1dAotKwltb3Z1cHMJMHgxMCgkaW5wKSwkcm5ka2V5MAotKwl4b3Jw cwkkcmVzZXJ2ZWQoJXJzcCksJGlub3V0MAkjIF49IElWCi0rCXhvcnBzCSRybmRrZXkxLCRpbm91 dDEKLSsJbW92dXBzCTB4MjAoJGlucCksJHJuZGtleTEKLSsJeG9ycHMJJHJuZGtleTAsJGlub3V0 MgotKwltb3Z1cHMJMHgzMCgkaW5wKSwkcm5ka2V5MAotKwl4b3Jwcwkkcm5ka2V5MSwkaW5vdXQz Ci0rCW1vdnVwcwkweDQwKCRpbnApLCRybmRrZXkxCi0rCXhvcnBzCSRybmRrZXkwLCRpbm91dDQK LSsJbW92dXBzCTB4NTAoJGlucCksJHJuZGtleTAKLSsJeG9ycHMJJHJuZGtleTEsJGlub3V0NQot Kwltb3Z1cHMJMHg2MCgkaW5wKSwkcm5ka2V5MQotKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQ2Ci0r CW1vdnVwcwkweDcwKCRpbnApLCRybmRrZXkwCSMgSVYKLSsJeG9ycHMJJHJuZGtleTEsJGlub3V0 NwotKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKLSsJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQot Kwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkK LSsJbW92CSRybmRzXywkcm91bmRzCQkjIHJlc3RvcmUgJHJvdW5kcwotKwltb3Z1cHMJJGlub3V0 NCwweDQwKCRvdXQpCi0rCW1vdgkka2V5Xywka2V5CQkjIHJlc3RvcmUgJGtleQotKwltb3Z1cHMJ JGlub3V0NSwweDUwKCRvdXQpCi0rCWxlYQkweDgwKCRpbnApLCRpbnAKLSsJbW92dXBzCSRpbm91 dDYsMHg2MCgkb3V0KQotKwlsZWEJMHg3MCgkb3V0KSwkb3V0Ci0rCXN1YglcJDB4ODAsJGxlbgot KwlqYQkuTGNiY19kZWNfbG9vcDgKLSsKLSsJbW92YXBzCSRpbm91dDcsJGlub3V0MAotKwltb3Zh cHMJJHJuZGtleTAsJGl2Ci0rCWFkZAlcJDB4NzAsJGxlbgotKwlqbGUJLkxjYmNfZGVjX3RhaWxf Y29sbGVjdGVkCi0rCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQotKwlsZWEJMSgkcm5kc18sJHJuZHNf KSwkcm91bmRzCi0rCWxlYQkweDEwKCRvdXQpLCRvdXQKLSsuTGNiY19kZWNfdGFpbDoKLSAJbW92 dXBzCSgkaW5wKSwkaW5vdXQwCi0tCWNtcAlcJDB4MTAsJGxlbgotIAltb3ZhcHMJJGlub3V0MCwk aW4wCi0rCWNtcAlcJDB4MTAsJGxlbgotIAlqYmUJLkxjYmNfZGVjX29uZQotKwotIAltb3Z1cHMJ MHgxMCgkaW5wKSwkaW5vdXQxCi0tCWNtcAlcJDB4MjAsJGxlbgotIAltb3ZhcHMJJGlub3V0MSwk aW4xCi0rCWNtcAlcJDB4MjAsJGxlbgotIAlqYmUJLkxjYmNfZGVjX3R3bwotKwotIAltb3Z1cHMJ MHgyMCgkaW5wKSwkaW5vdXQyCi0tCWNtcAlcJDB4MzAsJGxlbgotIAltb3ZhcHMJJGlub3V0Miwk aW4yCi0rCWNtcAlcJDB4MzAsJGxlbgotIAlqYmUJLkxjYmNfZGVjX3RocmVlCi0rCi0gCW1vdnVw cwkweDMwKCRpbnApLCRpbm91dDMKLS0JY2FsbAlfYWVzbmlfZGVjcnlwdDQKLS0JcHhvcgkkaXYs JGlub3V0MAotLQltb3Z1cHMJMHgzMCgkaW5wKSwkaXYKLS0JcHhvcgkkaW4wLCRpbm91dDEKLSsJ Y21wCVwkMHg0MCwkbGVuCi0rCWpiZQkuTGNiY19kZWNfZm91cgotKwotKwltb3Z1cHMJMHg0MCgk aW5wKSwkaW5vdXQ0Ci0rCWNtcAlcJDB4NTAsJGxlbgotKwlqYmUJLkxjYmNfZGVjX2ZpdmUKLSsK LSsJbW92dXBzCTB4NTAoJGlucCksJGlub3V0NQotKwljbXAJXCQweDYwLCRsZW4KLSsJamJlCS5M Y2JjX2RlY19zaXgKLSsKLSsJbW92dXBzCTB4NjAoJGlucCksJGlub3V0NgotKwltb3ZhcHMJJGl2 LCRyZXNlcnZlZCglcnNwKQkjIHNhdmUgSVYKLSsJY2FsbAlfYWVzbmlfZGVjcnlwdDgKLSsJbW92 dXBzCSgkaW5wKSwkcm5ka2V5MQotKwltb3Z1cHMJMHgxMCgkaW5wKSwkcm5ka2V5MAotKwl4b3Jw cwkkcmVzZXJ2ZWQoJXJzcCksJGlub3V0MAkjIF49IElWCi0rCXhvcnBzCSRybmRrZXkxLCRpbm91 dDEKLSsJbW92dXBzCTB4MjAoJGlucCksJHJuZGtleTEKLSsJeG9ycHMJJHJuZGtleTAsJGlub3V0 MgotKwltb3Z1cHMJMHgzMCgkaW5wKSwkcm5ka2V5MAotKwl4b3Jwcwkkcm5ka2V5MSwkaW5vdXQz Ci0rCW1vdnVwcwkweDQwKCRpbnApLCRybmRrZXkxCi0rCXhvcnBzCSRybmRrZXkwLCRpbm91dDQK LSsJbW92dXBzCTB4NTAoJGlucCksJHJuZGtleTAKLSsJeG9ycHMJJHJuZGtleTEsJGlub3V0NQot Kwltb3Z1cHMJMHg2MCgkaW5wKSwkaXYJCSMgSVYKLSsJeG9ycHMJJHJuZGtleTAsJGlub3V0Ngot IAltb3Z1cHMJJGlub3V0MCwoJG91dCkKLS0JcHhvcgkkaW4xLCRpbm91dDIKLSAJbW92dXBzCSRp bm91dDEsMHgxMCgkb3V0KQotLQlweG9yCSRpbjIsJGlub3V0MwotIAltb3Z1cHMJJGlub3V0Miww eDIwKCRvdXQpCi0tCW1vdmFwcwkkaW5vdXQzLCRpbm91dDAKLS0JbGVhCTB4MzAoJG91dCksJG91 dAotKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91 dCkKLSsJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQotKwlsZWEJMHg2MCgkb3V0KSwkb3V0Ci0r CW1vdmFwcwkkaW5vdXQ2LCRpbm91dDAKLSsJc3ViCVwkMHg3MCwkbGVuCi0gCWptcAkuTGNiY19k ZWNfdGFpbF9jb2xsZWN0ZWQKLSAuYWxpZ24JMTYKLSAuTGNiY19kZWNfb25lOgotIF9fXwotIAkm YWVzbmlfZ2VuZXJhdGUxKCJkZWMiLCRrZXksJHJvdW5kcyk7Ci0gJGNvZGUuPTw8X19fOwotLQlw eG9yCSRpdiwkaW5vdXQwCi0rCXhvcnBzCSRpdiwkaW5vdXQwCi0gCW1vdmFwcwkkaW4wLCRpdgot KwlzdWIJXCQweDEwLCRsZW4KLSAJam1wCS5MY2JjX2RlY190YWlsX2NvbGxlY3RlZAotIC5hbGln bgkxNgotIC5MY2JjX2RlY190d286Ci0rCXhvcnBzCSRpbm91dDIsJGlub3V0MgotIAljYWxsCV9h ZXNuaV9kZWNyeXB0MwotLQlweG9yCSRpdiwkaW5vdXQwCi0tCXB4b3IJJGluMCwkaW5vdXQxCi0r CXhvcnBzCSRpdiwkaW5vdXQwCi0rCXhvcnBzCSRpbjAsJGlub3V0MQotIAltb3Z1cHMJJGlub3V0 MCwoJG91dCkKLSAJbW92YXBzCSRpbjEsJGl2Ci0gCW1vdmFwcwkkaW5vdXQxLCRpbm91dDAKLSAJ bGVhCTB4MTAoJG91dCksJG91dAotKwlzdWIJXCQweDIwLCRsZW4KLSAJam1wCS5MY2JjX2RlY190 YWlsX2NvbGxlY3RlZAotIC5hbGlnbgkxNgotIC5MY2JjX2RlY190aHJlZToKLSAJY2FsbAlfYWVz bmlfZGVjcnlwdDMKLS0JcHhvcgkkaXYsJGlub3V0MAotLQlweG9yCSRpbjAsJGlub3V0MQotKwl4 b3JwcwkkaXYsJGlub3V0MAotKwl4b3JwcwkkaW4wLCRpbm91dDEKLSAJbW92dXBzCSRpbm91dDAs KCRvdXQpCi0tCXB4b3IJJGluMSwkaW5vdXQyCi0rCXhvcnBzCSRpbjEsJGlub3V0MgotIAltb3Z1 cHMJJGlub3V0MSwweDEwKCRvdXQpCi0gCW1vdmFwcwkkaW4yLCRpdgotIAltb3ZhcHMJJGlub3V0 MiwkaW5vdXQwCi0gCWxlYQkweDIwKCRvdXQpLCRvdXQKLSsJc3ViCVwkMHgzMCwkbGVuCi0rCWpt cAkuTGNiY19kZWNfdGFpbF9jb2xsZWN0ZWQKLSsuYWxpZ24JMTYKLSsuTGNiY19kZWNfZm91cjoK LSsJY2FsbAlfYWVzbmlfZGVjcnlwdDQKLSsJeG9ycHMJJGl2LCRpbm91dDAKLSsJbW92dXBzCTB4 MzAoJGlucCksJGl2Ci0rCXhvcnBzCSRpbjAsJGlub3V0MQotKwltb3Z1cHMJJGlub3V0MCwoJG91 dCkKLSsJeG9ycHMJJGluMSwkaW5vdXQyCi0rCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSsJ eG9ycHMJJGluMiwkaW5vdXQzCi0rCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKLSsJbW92YXBz CSRpbm91dDMsJGlub3V0MAotKwlsZWEJMHgzMCgkb3V0KSwkb3V0Ci0rCXN1YglcJDB4NDAsJGxl bgotKwlqbXAJLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkCi0rLmFsaWduCTE2Ci0rLkxjYmNfZGVj X2ZpdmU6Ci0rCXhvcnBzCSRpbm91dDUsJGlub3V0NQotKwljYWxsCV9hZXNuaV9kZWNyeXB0Ngot Kwltb3Z1cHMJMHgxMCgkaW5wKSwkcm5ka2V5MQotKwltb3Z1cHMJMHgyMCgkaW5wKSwkcm5ka2V5 MAotKwl4b3JwcwkkaXYsJGlub3V0MAotKwl4b3JwcwkkaW4wLCRpbm91dDEKLSsJeG9ycHMJJHJu ZGtleTEsJGlub3V0MgotKwltb3Z1cHMJMHgzMCgkaW5wKSwkcm5ka2V5MQotKwl4b3Jwcwkkcm5k a2V5MCwkaW5vdXQzCi0rCW1vdnVwcwkweDQwKCRpbnApLCRpdgotKwl4b3Jwcwkkcm5ka2V5MSwk aW5vdXQ0Ci0rCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MSwweDEwKCRv dXQpCi0rCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKLSsJbW92dXBzCSRpbm91dDMsMHgzMCgk b3V0KQotKwlsZWEJMHg0MCgkb3V0KSwkb3V0Ci0rCW1vdmFwcwkkaW5vdXQ0LCRpbm91dDAKLSsJ c3ViCVwkMHg1MCwkbGVuCi0rCWptcAkuTGNiY19kZWNfdGFpbF9jb2xsZWN0ZWQKLSsuYWxpZ24J MTYKLSsuTGNiY19kZWNfc2l4OgotKwljYWxsCV9hZXNuaV9kZWNyeXB0NgotKwltb3Z1cHMJMHgx MCgkaW5wKSwkcm5ka2V5MQotKwltb3Z1cHMJMHgyMCgkaW5wKSwkcm5ka2V5MAotKwl4b3Jwcwkk aXYsJGlub3V0MAotKwl4b3JwcwkkaW4wLCRpbm91dDEKLSsJeG9ycHMJJHJuZGtleTEsJGlub3V0 MgotKwltb3Z1cHMJMHgzMCgkaW5wKSwkcm5ka2V5MQotKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQz Ci0rCW1vdnVwcwkweDQwKCRpbnApLCRybmRrZXkwCi0rCXhvcnBzCSRybmRrZXkxLCRpbm91dDQK LSsJbW92dXBzCTB4NTAoJGlucCksJGl2Ci0rCXhvcnBzCSRybmRrZXkwLCRpbm91dDUKLSsJbW92 dXBzCSRpbm91dDAsKCRvdXQpCi0rCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKLSsJbW92dXBz CSRpbm91dDIsMHgyMCgkb3V0KQotKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCi0rCW1vdnVw cwkkaW5vdXQ0LDB4NDAoJG91dCkKLSsJbGVhCTB4NTAoJG91dCksJG91dAotKwltb3ZhcHMJJGlu b3V0NSwkaW5vdXQwCi0rCXN1YglcJDB4NjAsJGxlbgotIAlqbXAJLkxjYmNfZGVjX3RhaWxfY29s bGVjdGVkCi0gLmFsaWduCTE2Ci0gLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkOgotQEAgLTUyMywx MCArMTExNCwxMiBAQCAkY29kZS49PDxfX187Ci0gCWpuegkuTGNiY19kZWNfdGFpbF9wYXJ0aWFs Ci0gCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQotIAlqbXAJLkxjYmNfZGVjX3JldAotKy5hbGlnbgkx NgotIC5MY2JjX2RlY190YWlsX3BhcnRpYWw6Ci0gCW1vdmFwcwkkaW5vdXQwLCRyZXNlcnZlZCgl cnNwKQotKwltb3YJXCQxNiwlcmN4Ci0gCW1vdgkkb3V0LCVyZGkKLS0JbW92CSRsZW4sJXJjeAot KwlzdWIJJGxlbiwlcmN4Ci0gCWxlYQkkcmVzZXJ2ZWQoJXJzcCksJXJzaQotIAkubG9uZwkweDkw NjZBNEYzCSMgcmVwIG1vdnNiCi0gCi1AQCAtNTQ0LDcgKzExMzcsNyBAQCAkY29kZS49PDxfX187 Ci0gCXJldAotIC5zaXplCSR7UFJFRklYfV9jYmNfZW5jcnlwdCwuLSR7UFJFRklYfV9jYmNfZW5j cnlwdAotIF9fXwotLQwKLSt9IAwKLSAjIGludCAkUFJFRklYX3NldF9bZW58ZGVdY3J5cHRfa2V5 IChjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LAotICMJCQkJaW50IGJpdHMsIEFFU19LRVkg KmtleSkKLSB7IG15ICgkaW5wLCRiaXRzLCRrZXkpID0gQF80YXJnczsKLUBAIC01NTYsNyArMTE0 OSw3IEBAICRjb2RlLj08PF9fXzsKLSAuYWxpZ24JMTYKLSAke1BSRUZJWH1fc2V0X2RlY3J5cHRf a2V5OgotIAkuYnl0ZQkweDQ4LDB4ODMsMHhFQywweDA4CSMgc3ViIHJzcCw4Ci0tCWNhbGwJX2Fl c25pX3NldF9lbmNyeXB0X2tleQotKwljYWxsCV9fYWVzbmlfc2V0X2VuY3J5cHRfa2V5Ci0gCXNo bAlcJDQsJGJpdHMJCSMgcm91bmRzLTEgYWZ0ZXIgX2Flc25pX3NldF9lbmNyeXB0X2tleQotIAl0 ZXN0CSVlYXgsJWVheAotIAlqbnoJLkxkZWNfa2V5X3JldAotQEAgLTU3Niw5ICsxMTY5LDkgQEAg JHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleToKLSAJYWVzaW1jCSV4bW0xLCV4bW0xCi0gCWxlYQkx Nigka2V5KSwka2V5Ci0gCWxlYQktMTYoJGlucCksJGlucAotLQljbXAJJGtleSwkaW5wCi0gCSRt b3ZrZXkJJXhtbTAsMTYoJGlucCkKLSAJJG1vdmtleQkleG1tMSwtMTYoJGtleSkKLSsJY21wCSRr ZXksJGlucAotIAlqYQkuTGRlY19rZXlfaW52ZXJzZQotIAotIAkkbW92a2V5CSgka2V5KSwleG1t MAkJIyBpbnZlcnNlIG1pZGRsZQotQEAgLTYwNSwxNiArMTE5OCwxNiBAQCAkY29kZS49PDxfX187 Ci0gLnR5cGUJJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleSxcQGFiaS1vbW5pcG90ZW50Ci0gLmFs aWduCTE2Ci0gJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleToKLS1fYWVzbmlfc2V0X2VuY3J5cHRf a2V5OgotK19fYWVzbmlfc2V0X2VuY3J5cHRfa2V5OgotIAkuYnl0ZQkweDQ4LDB4ODMsMHhFQyww eDA4CSMgc3ViIHJzcCw4Ci0tCXRlc3QJJGlucCwkaW5wCi0gCW1vdglcJC0xLCVyYXgKLSsJdGVz dAkkaW5wLCRpbnAKLSAJanoJLkxlbmNfa2V5X3JldAotIAl0ZXN0CSRrZXksJGtleQotIAlqegku TGVuY19rZXlfcmV0Ci0gCi0gCW1vdnVwcwkoJGlucCksJXhtbTAJCSMgcHVsbCBmaXJzdCAxMjgg Yml0cyBvZiAqdXNlcktleQotLQlweG9yCSV4bW00LCV4bW00CQkjIGxvdyBkd29yZCBvZiB4bW00 IGlzIGFzc3VtZWQgMAotKwl4b3JwcwkleG1tNCwleG1tNAkJIyBsb3cgZHdvcmQgb2YgeG1tNCBp cyBhc3N1bWVkIDAKLSAJbGVhCTE2KCRrZXkpLCVyYXgKLSAJY21wCVwkMjU2LCRiaXRzCi0gCWpl CS5MMTRyb3VuZHMKLUBAIC03MjksMTEgKzEzMjIsMTEgQEAgX2Flc25pX3NldF9lbmNyeXB0X2tl eToKLSAJbGVhCTE2KCVyYXgpLCVyYXgKLSAuTGtleV9leHBhbnNpb25fMTI4X2NvbGQ6Ci0gCXNo dWZwcwlcJDBiMDAwMTAwMDAsJXhtbTAsJXhtbTQKLS0JcHhvcgkleG1tNCwgJXhtbTAKLSsJeG9y cHMJJXhtbTQsICV4bW0wCi0gCXNodWZwcwlcJDBiMTAwMDExMDAsJXhtbTAsJXhtbTQKLS0JcHhv cgkleG1tNCwgJXhtbTAKLS0JcHNodWZkCVwkMGIxMTExMTExMSwleG1tMSwleG1tMQkjIGNyaXRp Y2FsIHBhdGgKLS0JcHhvcgkleG1tMSwleG1tMAotKwl4b3JwcwkleG1tNCwgJXhtbTAKLSsJc2h1 ZnBzCVwkMGIxMTExMTExMSwleG1tMSwleG1tMQkjIGNyaXRpY2FsIHBhdGgKLSsJeG9ycHMJJXht bTEsJXhtbTAKLSAJcmV0Ci0gCi0gLmFsaWduIDE2Ci1AQCAtNzQ0LDExICsxMzM3LDExIEBAIF9h ZXNuaV9zZXRfZW5jcnlwdF9rZXk6Ci0gCW1vdmFwcwkleG1tMiwgJXhtbTUKLSAuTGtleV9leHBh bnNpb25fMTkyYl93YXJtOgotIAlzaHVmcHMJXCQwYjAwMDEwMDAwLCV4bW0wLCV4bW00Ci0tCW1v dmFwcwkleG1tMiwleG1tMwotLQlweG9yCSV4bW00LCV4bW0wCi0rCW1vdmRxYQkleG1tMiwleG1t MwotKwl4b3JwcwkleG1tNCwleG1tMAotIAlzaHVmcHMJXCQwYjEwMDAxMTAwLCV4bW0wLCV4bW00 Ci0gCXBzbGxkcQlcJDQsJXhtbTMKLS0JcHhvcgkleG1tNCwleG1tMAotKwl4b3JwcwkleG1tNCwl eG1tMAotIAlwc2h1ZmQJXCQwYjAxMDEwMTAxLCV4bW0xLCV4bW0xCSMgY3JpdGljYWwgcGF0aAot IAlweG9yCSV4bW0zLCV4bW0yCi0gCXB4b3IJJXhtbTEsJXhtbTAKLUBAIC03NzIsMTEgKzEzNjUs MTEgQEAgX2Flc25pX3NldF9lbmNyeXB0X2tleToKLSAJbGVhCTE2KCVyYXgpLCVyYXgKLSAuTGtl eV9leHBhbnNpb25fMjU2YV9jb2xkOgotIAlzaHVmcHMJXCQwYjAwMDEwMDAwLCV4bW0wLCV4bW00 Ci0tCXB4b3IJJXhtbTQsJXhtbTAKLSsJeG9ycHMJJXhtbTQsJXhtbTAKLSAJc2h1ZnBzCVwkMGIx MDAwMTEwMCwleG1tMCwleG1tNAotLQlweG9yCSV4bW00LCV4bW0wCi0tCXBzaHVmZAlcJDBiMTEx MTExMTEsJXhtbTEsJXhtbTEJIyBjcml0aWNhbCBwYXRoCi0tCXB4b3IJJXhtbTEsJXhtbTAKLSsJ eG9ycHMJJXhtbTQsJXhtbTAKLSsJc2h1ZnBzCVwkMGIxMTExMTExMSwleG1tMSwleG1tMQkjIGNy aXRpY2FsIHBhdGgKLSsJeG9ycHMJJXhtbTEsJXhtbTAKLSAJcmV0Ci0gCi0gLmFsaWduIDE2Ci1A QCAtNzg1LDE3ICsxMzc4LDI4IEBAIF9hZXNuaV9zZXRfZW5jcnlwdF9rZXk6Ci0gCWxlYQkxNigl cmF4KSwlcmF4Ci0gCi0gCXNodWZwcwlcJDBiMDAwMTAwMDAsJXhtbTIsJXhtbTQKLS0JcHhvcgkl eG1tNCwleG1tMgotKwl4b3JwcwkleG1tNCwleG1tMgotIAlzaHVmcHMJXCQwYjEwMDAxMTAwLCV4 bW0yLCV4bW00Ci0tCXB4b3IJJXhtbTQsJXhtbTIKLS0JcHNodWZkCVwkMGIxMDEwMTAxMCwleG1t MSwleG1tMQkjIGNyaXRpY2FsIHBhdGgKLS0JcHhvcgkleG1tMSwleG1tMgotKwl4b3JwcwkleG1t NCwleG1tMgotKwlzaHVmcHMJXCQwYjEwMTAxMDEwLCV4bW0xLCV4bW0xCSMgY3JpdGljYWwgcGF0 aAotKwl4b3JwcwkleG1tMSwleG1tMgotIAlyZXQKLSAuc2l6ZQkke1BSRUZJWH1fc2V0X2VuY3J5 cHRfa2V5LC4tJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleQotKy5zaXplCV9fYWVzbmlfc2V0X2Vu Y3J5cHRfa2V5LC4tX19hZXNuaV9zZXRfZW5jcnlwdF9rZXkKLSBfX18KLSB9Ci0gDAotICRjb2Rl Lj08PF9fXzsKLSsuYWxpZ24JNjQKLSsuTGJzd2FwX21hc2s6Ci0rCS5ieXRlCTE1LDE0LDEzLDEy LDExLDEwLDksOCw3LDYsNSw0LDMsMiwxLDAKLSsuTGluY3JlbWVudDMyOgotKwkubG9uZwk2LDYs NiwwCi0rLkxpbmNyZW1lbnQ2NDoKLSsJLmxvbmcJMSwwLDAsMAotKy5MeHRzX21hZ2ljOgotKwku bG9uZwkweDg3LDAsMSwwCi0rCi0gLmFzY2l6ICAiQUVTIGZvciBJbnRlbCBBRVMtTkksIENSWVBU T0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi0gLmFsaWduCTY0Ci0gX19fCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vY3J5cHRsaWIuYy5pbnRlbG9wdHMgb3BlbnNzbC0xLjAu MGQvY3J5cHRvL2NyeXB0bGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vY3J5cHRsaWIu Yy5pbnRlbG9wdHMJMjAxMC0xMS0xOSAwMToxMToyNy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wZC9jcnlwdG8vY3J5cHRsaWIuYwkyMDExLTA4LTI0IDEyOjUwOjU1LjAwMDAwMDAw MCArMDIwMAotQEAgLTY2MiwyMiArNjYyLDIzIEBAIGNvbnN0IGNoYXIgKkNSWVBUT19nZXRfbG9j a19uYW1lKGludCB0eXAKLSAJZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9f KSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkKLSAKLSB1bnNpZ25lZCBs b25nICBPUEVOU1NMX2lhMzJjYXBfUD0wOwotK3Vuc2lnbmVkIGxvbmcgbG9uZyAgT1BFTlNTTF9p YTMyY2FwX1g9MDsKLSB1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpIHsg cmV0dXJuICZPUEVOU1NMX2lhMzJjYXBfUDsgfQotIAotICNpZiBkZWZpbmVkKE9QRU5TU0xfQ1BV SURfT0JKKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoSTM4Nl9PTkxZ KQotICNkZWZpbmUgT1BFTlNTTF9DUFVJRF9TRVRVUAotIHZvaWQgT1BFTlNTTF9jcHVpZF9zZXR1 cCh2b2lkKQotIHsgc3RhdGljIGludCB0cmlnZ2VyPTA7Ci0tICB1bnNpZ25lZCBsb25nIE9QRU5T U0xfaWEzMl9jcHVpZCh2b2lkKTsKLSsgIHVuc2lnbmVkIGxvbmcgbG9uZyBPUEVOU1NMX2lhMzJf Y3B1aWQodm9pZCk7Ci0gICBjaGFyICplbnY7Ci0gCi0gICAgIGlmICh0cmlnZ2VyKQlyZXR1cm47 Ci0gCi0gICAgIHRyaWdnZXI9MTsKLSAgICAgaWYgKChlbnY9Z2V0ZW52KCJPUEVOU1NMX2lhMzJj YXAiKSkpCi0tCU9QRU5TU0xfaWEzMmNhcF9QID0gc3RydG91bChlbnYsTlVMTCwwKXwoMTw8MTAp OwotKwlPUEVOU1NMX2lhMzJjYXBfWCA9IE9QRU5TU0xfaWEzMmNhcF9QID0gc3RydG91bChlbnYs TlVMTCwwKXwoMTw8MTApOwotICAgICBlbHNlCi0tCU9QRU5TU0xfaWEzMmNhcF9QID0gT1BFTlNT TF9pYTMyX2NwdWlkKCl8KDE8PDEwKTsKLSsJT1BFTlNTTF9pYTMyY2FwX1AgPSBPUEVOU1NMX2lh MzJjYXBfWCA9IE9QRU5TU0xfaWEzMl9jcHVpZCgpfCgxPDwxMCk7Ci0gICAgIC8qCi0gICAgICAq IHwoMTw8MTApIHNldHMgYSByZXNlcnZlZCBiaXQgdG8gc2lnbmFsIHRoYXQgdmFyaWFibGUKLSAg ICAgICogd2FzIGluaXRpYWxpemVkIGFscmVhZHkuLi4gVGhpcyBpcyB0byBhdm9pZCBpbnRlcmZl cmVuY2UKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9lbmdpbmUvZW5nX2Flc25pLmMu aW50ZWxvcHRzIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9lbmdpbmUvZW5nX2Flc25pLmMKLS0tLSBv cGVuc3NsLTEuMC4wZC9jcnlwdG8vZW5naW5lL2VuZ19hZXNuaS5jLmludGVsb3B0cwkyMDExLTA4 LTI0IDEyOjUwOjU1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9l bmdpbmUvZW5nX2Flc25pLmMJMjAxMS0wOC0yNCAxMjo1MDo1NS4wMDAwMDAwMDAgKzAyMDAKLUBA IC0xNTcsMTYgKzE1NywyMCBAQCB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgSUEzMkNBUDsKLSB0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBJQTMyQ0FQOwotICNlbmRpZgotIAotK2V4dGVybiBJ QTMyQ0FQIE9QRU5TU0xfaWEzMmNhcF9YOwotKwotIC8qIFByZXBhcmUgdGhlIEVOR0lORSBzdHJ1 Y3R1cmUgZm9yIHJlZ2lzdHJhdGlvbiAqLwotIHN0YXRpYyBpbnQKLSBhZXNuaV9iaW5kX2hlbHBl cihFTkdJTkUgKmUpCi0gewotIAlpbnQgZW5nYWdlOwotLQlpZiAoc2l6ZW9mKE9QRU5TU0xfaWEz MmNhcF9QKSA+IDQpIHsKLS0JCWVuZ2FnZSA9IChPUEVOU1NMX2lhMzJjYXBfUCA+PiA1NykgJiAx OwotLQl9IGVsc2UgewotLQkJSUEzMkNBUCBPUEVOU1NMX2lhMzJfY3B1aWQodm9pZCk7Ci0tCQll bmdhZ2UgPSAoT1BFTlNTTF9pYTMyX2NwdWlkKCkgPj4gNTcpICYgMTsKLSsJZW5nYWdlID0gKE9Q RU5TU0xfaWEzMmNhcF9YID4+IDU3KSAmIDE7Ci0rCi0rCS8qIERpc2FibGUgdGhlIEFFUy1OSSBz dXBwb3J0IGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotKwkgKiBPUEVOU1NMX0RJU0FCTEVf QUVTX05JIGlzIHNldCB0byBhbnkgdmFsdWUKLSsJICovCi0rCWlmIChnZXRlbnYoIk9QRU5TU0xf RElTQUJMRV9BRVNfTkkiKSAhPSBOVUxMKSB7Ci0rCQllbmdhZ2UgPSAwOwotIAl9Ci0gCi0gCS8q IFJlZ2lzdGVyIGV2ZXJ5dGhpbmcgb3IgcmV0dXJuIHdpdGggYW4gZXJyb3IgKi8KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBkL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMuaW50ZWxv cHRzIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMKLS0t LSBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jLmludGVs b3B0cwkyMDExLTA4LTI0IDEyOjUwOjU1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjBkL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMJMjAxMS0wOC0yNCAxMjo1MDo1 NS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Miw2ICs2Miw4IEBAIHZvaWQgT1BFTlNTTF9jbGVhbnNl KHZvaWQgKnAsc2l6ZV90IGxlbikKLSAKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0gCi0rdW5zaWdu ZWQgbG9uZyBsb25nIE9QRU5TU0xfaWEzMmNhcF9YID0gMDsKLSsKLSBzdGF0aWMgdm9pZCBobWFj X2luaXQoU0hBMjU2X0NUWCAqbWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4LAotIAkJICAgICAgY29u c3QgY2hhciAqa2V5KQotICAgICB7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vcGVy bGFzbS94ODZhc20ucGwuaW50ZWxvcHRzIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9wZXJsYXNtL3g4 NmFzbS5wbAotLS0tIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9wZXJsYXNtL3g4NmFzbS5wbC5pbnRl bG9wdHMJMjAwOC0xMi0xNyAyMDo1Njo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wZC9jcnlwdG8vcGVybGFzbS94ODZhc20ucGwJMjAxMS0wOC0yNCAxMjo1MDo1Ni4wMDAwMDAw MDAgKzAyMDAKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vZW52IHBlcmwKLSsjIS91c3Iv YmluL3BlcmwKLSAKLSAjIHJlcXVpcmUgJ3g4NmFzbS5wbCc7Ci0gIyAmYXNtX2luaXQoPGZsYXZv cj4sImRlcy01ODYucGwiWywkaTM4Nm9ubHldKTsKLUBAIC04MCw2ICs4MCw1NyBAQCBzdWIgOjpt b3ZxCi0gICAgIHsJJjo6Z2VuZXJpYygibW92cSIsQF8pOwkJCX0KLSB9Ci0gCi0rIyBTU0U+MiBp bnN0cnVjdGlvbnMKLStteSAlcmVncm0gPSAoCSJlYXgiPT4wLCAiZWN4Ij0+MSwgImVkeCI9PjIs ICJlYngiPT4zLAotKwkJImVzcCI9PjQsICJlYnAiPT41LCAiZXNpIj0+NiwgImVkaSI9PjcJKTsK LStzdWIgOjpwZXh0cmQKLSt7IG15KCRkc3QsJHNyYywkaW1tKT1AXzsKLSsgICAgaWYgKCIkZHN0 OiRzcmMiID1+IC8oZVthLWRzZF1baXhwXSk6eG1tKFswLTddKS8pCi0rICAgIHsJJjo6ZGF0YV9i eXRlKDB4NjYsMHgwZiwweDNhLDB4MTYsMHhjMHwoJDI8PDMpfCRyZWdybXskMX0sJGltbSk7CX0K LSsgICAgZWxzZQotKyAgICB7CSY6OmdlbmVyaWMoInBleHRyZCIsQF8pOwkJfQotK30KLSsKLStz dWIgOjpwaW5zcmQKLSt7IG15KCRkc3QsJHNyYywkaW1tKT1AXzsKLSsgICAgaWYgKCIkZHN0OiRz cmMiID1+IC94bW0oWzAtN10pOihlW2EtZHNkXVtpeHBdKS8pCi0rICAgIHsJJjo6ZGF0YV9ieXRl KDB4NjYsMHgwZiwweDNhLDB4MjIsMHhjMHwoJDE8PDMpfCRyZWdybXskMn0sJGltbSk7CX0KLSsg ICAgZWxzZQotKyAgICB7CSY6OmdlbmVyaWMoInBpbnNyZCIsQF8pOwkJfQotK30KLSsKLStzdWIg Ojpwc2h1ZmIKLSt7IG15KCRkc3QsJHNyYyk9QF87Ci0rICAgIGlmICgiJGRzdDokc3JjIiA9fiAv eG1tKFswLTddKTp4bW0oWzAtN10pLykKLSsgICAgewkmZGF0YV9ieXRlKDB4NjYsMHgwZiwweDM4 LDB4MDAsMHhjMHwoJDE8PDMpfCQyKTsJfQotKyAgICBlbHNlCi0rICAgIHsJJjo6Z2VuZXJpYygi cHNodWZiIixAXyk7CQl9Ci0rfQotKwotK3N1YiA6OnBhbGlnbnIKLSt7IG15KCRkc3QsJHNyYywk aW1tKT1AXzsKLSsgICAgaWYgKCIkZHN0OiRzcmMiID1+IC94bW0oWzAtN10pOnhtbShbMC03XSkv KQotKyAgICB7CSY6OmRhdGFfYnl0ZSgweDY2LDB4MGYsMHgzYSwweDBmLDB4YzB8KCQxPDwzKXwk MiwkaW1tKTsJfQotKyAgICBlbHNlCi0rICAgIHsJJjo6Z2VuZXJpYygicGFsaWduciIsQF8pOwkJ fQotK30KLSsKLStzdWIgOjpwY2xtdWxxZHEKLSt7IG15KCRkc3QsJHNyYywkaW1tKT1AXzsKLSsg ICAgaWYgKCIkZHN0OiRzcmMiID1+IC94bW0oWzAtN10pOnhtbShbMC03XSkvKQotKyAgICB7CSY6 OmRhdGFfYnl0ZSgweDY2LDB4MGYsMHgzYSwweDQ0LDB4YzB8KCQxPDwzKXwkMiwkaW1tKTsJfQot KyAgICBlbHNlCi0rICAgIHsJJjo6Z2VuZXJpYygicGNsbXVscWRxIixAXyk7CQl9Ci0rfQotKwot K3N1YiA6OnJkcmFuZAotK3sgbXkgKCRkc3QpPUBfOwotKyAgICBpZiAoJGRzdCA9fiAvKGVbYS1k c2RdW2l4cF0pLykKLSsgICAgewkmOjpkYXRhX2J5dGUoMHgwZiwweGM3LDB4ZjB8JHJlZ3JteyRk c3R9KTsJfQotKyAgICBlbHNlCi0rICAgIHsJJjo6Z2VuZXJpYygicmRyYW5kIixAXyk7CX0KLSt9 Ci0rCi0gIyBsYWJlbCBtYW5hZ2VtZW50Ci0gJGxiZGVjb3I9IkwiOwkJIyBsb2NhbCBsYWJlbCBk ZWNvcmF0aW9uLCBzZXQgYnkgcGFja2FnZQotICRsYWJlbD0iMDAwIjsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjBkL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbC5pbnRlbG9wdHMgb3BlbnNzbC0xLjAu MGQvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCi0tLS0gb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3Bl cmxhc20veDg2Z2FzLnBsLmludGVsb3B0cwkyMDA4LTEyLTE3IDIwOjU2OjQ3LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbAkyMDExLTA4 LTI0IDEyOjUwOjU2LjAwMDAwMDAwMCArMDIwMAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNyL2Jp bi9lbnYgcGVybAotKyMhL3Vzci9iaW4vcGVybAotIAotIHBhY2thZ2UgeDg2Z2FzOwotIAotQEAg LTkxLDYgKzkxLDcgQEAgc3ViIDo6RFdQCi0gfQotIHN1YiA6OlFXUAl7ICY6OkRXUChAXyk7CX0K LSBzdWIgOjpCUAl7ICY6OkRXUChAXyk7CX0KLStzdWIgOjpXUAl7ICY6OkRXUChAXyk7CX0KLSBz dWIgOjpCQwl7IEBfOwkJfQotIHN1YiA6OkRXQwl7IEBfOwkJfQotIAotQEAgLTE2MSwxMCArMTYy LDE2IEBAIHN1YiA6OmZpbGVfZW5kCi0gCSAgICB7CXB1c2goQG91dCwiJG5vbl9sYXp5X3B0cnsk aX06XG4uaW5kaXJlY3Rfc3ltYm9sXHQkaVxuLmxvbmdcdDBcbiIpOyAgIH0KLSAJfQotICAgICB9 Ci0rICAgIGlmIChncmVwIHsvXGIke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1hcYi9pfSBAb3V0 KSB7Ci0rCW15ICR0bXA9Ii5jb21tXHQke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1gsOCI7Ci0r CWlmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiJHRtcCw0XG4iKTsgfQotKwllbHNlCQl7IHB1c2gg KEBvdXQsIiR0bXBcbiIpOyB9Ci0rICAgIH0KLSAgICAgcHVzaChAb3V0LCRpbml0c2VnKSBpZiAo JGluaXRzZWcpOwotIH0KLSAKLSBzdWIgOjpkYXRhX2J5dGUJeyAgIHB1c2goQG91dCwiLmJ5dGVc dCIuam9pbignLCcsQF8pLiJcbiIpOyAgIH0KLStzdWIgOjpkYXRhX3Nob3J0eyAgIHB1c2goQG91 dCwiLnZhbHVlXHQiLmpvaW4oJywnLEBfKS4iXG4iKTsgIH0KLSBzdWIgOjpkYXRhX3dvcmQgeyAg IHB1c2goQG91dCwiLmxvbmdcdCIuam9pbignLCcsQF8pLiJcbiIpOyAgIH0KLSAKLSBzdWIgOjph bGlnbgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRl LnBsLmludGVsb3B0cyBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUu cGwKLS0tLSBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwuaW50 ZWxvcHRzCTIwMTAtMTAtMTAgMjM6MTQ6MTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMGQvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCTIwMTEtMDgtMjQgMTI6NTA6NTYu MDAwMDAwMDAwICswMjAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS91c3IvYmluL2VudiBwZXJsCi0r IyEvdXNyL2Jpbi9wZXJsCi0gCi0gIyBBc2NldGljIHg4Nl82NCBBVCZUIHRvIE1BU00vTkFTTSBh c3NlbWJsZXIgdHJhbnNsYXRvciBieSA8YXBwcm8+LgotICMKLUBAIC0xMjEsNyArMTIxLDExIEBA IG15ICVnbG9iYWxzOwotIAkJJHNlbGYtPntzen0gPSAiYiI7Ci0gCSAgICB9IGVsc2lmICgkc2Vs Zi0+e29wfSA9fiAvY2FsbHxqbXAvKSB7Ci0gCQkkc2VsZi0+e3N6fSA9ICIiOwotLQkgICAgfSBl bHNpZiAoJHNlbGYtPntvcH0gPX4gL15wLyAmJiAkJyAhfiAvXih1c2h8b3ApLykgeyAjIFNTRW4K LSsJICAgIH0gZWxzaWYgKCRzZWxmLT57b3B9ID1+IC9ecC8gJiYgJCcgIX4gL14odXNofG9wfGlu c3J3KS8pIHsgIyBTU0VuCi0rCQkkc2VsZi0+e3N6fSA9ICIiOwotKwkgICAgfSBlbHNpZiAoJHNl bGYtPntvcH0gPX4gL152LykgeyAjIFZFWAotKwkJJHNlbGYtPntzen0gPSAiIjsKLSsJICAgIH0g ZWxzaWYgKCRzZWxmLT57b3B9ID1+IC9tb3ZxLyAmJiAkbGluZSA9fiAvJXhtbS8pIHsKLSAJCSRz ZWxmLT57c3p9ID0gIiI7Ci0gCSAgICB9IGVsc2lmICgkc2VsZi0+e29wfSA9fiAvKFthLXpdezMs fSkoW3Fsd2JdKSQvKSB7Ci0gCQkkc2VsZi0+e29wfSA9ICQxOwotQEAgLTI0NiwzNSArMjUwLDM4 IEBAIG15ICVnbG9iYWxzOwotIAkkc2VsZi0+e2luZGV4fSA9fiBzL15bZXJdKC4/WzAtOXhwaV0p W2RdPyQvclwxLzsKLSAJJHNlbGYtPntiYXNlfSAgPX4gcy9eW2VyXSguP1swLTl4cGldKVtkXT8k L3JcMS87Ci0gCi0rCSMgU29sYXJpcyAvdXNyL2Njcy9iaW4vYXMgY2FuJ3QgaGFuZGxlIG11bHRp cGxpY2F0aW9ucwotKwkjIGluICRzZWxmLT57bGFiZWx9LCBuZXcgZ2FzIHJlcXVpcmVzIHNpZ24g ZXh0ZW5zaW9uLi4uCi0rCXVzZSBpbnRlZ2VyOwotKwkkc2VsZi0+e2xhYmVsfSA9fiBzLyg/PCFb XHdcJFwuXSkoMHg/WzAtOWEtZl0rKS9vY3QoJDEpL2VnaTsKLSsJJHNlbGYtPntsYWJlbH0gPX4g cy8oWzAtOV0rXHMqW1wqXC9cJV1ccypbMC05XSspL2V2YWwoJDEpL2VnOwotKwkkc2VsZi0+e2xh YmVsfSA9fiBzLyhbMC05XSspLyQxPDwzMj4+MzIvZWc7Ci0rCi0gCWlmICgkZ2FzKSB7Ci0tCSAg ICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMK LS0JICAgICMgaW4gJHNlbGYtPntsYWJlbH0sIG5ldyBnYXMgcmVxdWlyZXMgc2lnbiBleHRlbnNp b24uLi4KLS0JICAgIHVzZSBpbnRlZ2VyOwotLQkgICAgJHNlbGYtPntsYWJlbH0gPX4gcy8oPzwh W1x3XCRcLl0pKDB4P1swLTlhLWZdKykvb2N0KCQxKS9lZ2k7Ci0tCSAgICAkc2VsZi0+e2xhYmVs fSA9fiBzLyhbMC05XStccypbXCpcL1wlXVxzKlswLTldKykvZXZhbCgkMSkvZWc7Ci0tCSAgICAk c2VsZi0+e2xhYmVsfSA9fiBzLyhbMC05XSspLyQxPDwzMj4+MzIvZWc7Ci0gCSAgICAkc2VsZi0+ e2xhYmVsfSA9fiBzL15fX19pbXBfL19faW1wX18vICAgaWYgKCRmbGF2b3VyIGVxICJtaW5ndzY0 Iik7Ci0gCi0gCSAgICBpZiAoZGVmaW5lZCgkc2VsZi0+e2luZGV4fSkpIHsKLS0JCXNwcmludGYg IiVzJXMoJSUlcywlJSVzLCVkKSIsJHNlbGYtPnthc3Rlcmlza30sCi0tCQkJCQkkc2VsZi0+e2xh YmVsfSwkc2VsZi0+e2Jhc2V9LAotKwkJc3ByaW50ZiAiJXMlcyglcywlJSVzLCVkKSIsJHNlbGYt Pnthc3Rlcmlza30sCi0rCQkJCQkkc2VsZi0+e2xhYmVsfSwKLSsJCQkJCSRzZWxmLT57YmFzZX0/ IiUkc2VsZi0+e2Jhc2V9IjoiIiwKLSAJCQkJCSRzZWxmLT57aW5kZXh9LCRzZWxmLT57c2NhbGV9 OwotIAkgICAgfSBlbHNlIHsKLSAJCXNwcmludGYgIiVzJXMoJSUlcykiLAkkc2VsZi0+e2FzdGVy aXNrfSwkc2VsZi0+e2xhYmVsfSwkc2VsZi0+e2Jhc2V9OwotIAkgICAgfQotIAl9IGVsc2Ugewot LQkgICAgJXN6bWFwID0gKCBiPT4iQllURSRQVFIiLCB3PT4iV09SRCRQVFIiLCBsPT4iRFdPUkQk UFRSIiwgcT0+IlFXT1JEJFBUUiIgKTsKLSsJICAgICVzem1hcCA9ICgJYj0+IkJZVEUkUFRSIiwg dz0+IldPUkQkUFRSIiwgbD0+IkRXT1JEJFBUUiIsCi0rCSAgICAJCXE9PiJRV09SRCRQVFIiLG89 PiJPV09SRCRQVFIiLHg9PiJYTU1XT1JEJFBUUiIgKTsKLSAKLSAJICAgICRzZWxmLT57bGFiZWx9 ID1+IHMvXC4vXCQvZzsKLSAJICAgICRzZWxmLT57bGFiZWx9ID1+IHMvKD88IVtcd1wkXC5dKTB4 KFswLTlhLWZdKykvMCQxaC9pZzsKLSAJICAgICRzZWxmLT57bGFiZWx9ID0gIigkc2VsZi0+e2xh YmVsfSkiIGlmICgkc2VsZi0+e2xhYmVsfSA9fiAvW1wqXCtcLVwvXS8pOwotLQkgICAgJHN6PSJx IiBpZiAoJHNlbGYtPnthc3Rlcmlza30pOwotKwkgICAgJHN6PSJxIiBpZiAoJHNlbGYtPnthc3Rl cmlza30gfHwgb3Bjb2RlLT5tbmVtb25pYygpIGVxICJtb3ZxIik7Ci0gCi0gCSAgICBpZiAoZGVm aW5lZCgkc2VsZi0+e2luZGV4fSkpIHsKLS0JCXNwcmludGYgIiVzWyVzJXMqJWQrJXNdIiwkc3pt YXB7JHN6fSwKLSsJCXNwcmludGYgIiVzWyVzJXMqJWQlc10iLCRzem1hcHskc3p9LAotIAkJCQkJ JHNlbGYtPntsYWJlbH0/IiRzZWxmLT57bGFiZWx9KyI6IiIsCi0gCQkJCQkkc2VsZi0+e2luZGV4 fSwkc2VsZi0+e3NjYWxlfSwKLS0JCQkJCSRzZWxmLT57YmFzZX07Ci0rCQkJCQkkc2VsZi0+e2Jh c2V9PyIrJHNlbGYtPntiYXNlfSI6IiI7Ci0gCSAgICB9IGVsc2lmICgkc2VsZi0+e2Jhc2V9IGVx ICJyaXAiKSB7Ci0gCQlzcHJpbnRmICIlc1slc10iLCRzem1hcHskc3p9LCRzZWxmLT57bGFiZWx9 OwotIAkgICAgfSBlbHNlIHsKLUBAIC01MDYsNiArNTEzLDExIEBAIG15ICVnbG9iYWxzOwotIAkJ ICAgIH0KLSAJCX0gZWxzaWYgKCRkaXIgPX4gL1wuKHRleHR8ZGF0YSkvKSB7Ci0gCQkgICAgJGN1 cnJlbnRfc2VnbWVudD0iLiQxIjsKLSsJCX0gZWxzaWYgKCRkaXIgPX4gL1wuaGlkZGVuLykgewot KwkJICAgIGlmICAgICgkZmxhdm91ciBlcSAibWFjb3N4IikgIHsgJHNlbGYtPnt2YWx1ZX0gPSAi LnByaXZhdGVfZXh0ZXJuXHQkcHJlZml4JGxpbmUiOyB9Ci0rCQkgICAgZWxzaWYgKCRmbGF2b3Vy IGVxICJtaW5ndzY0IikgeyAkc2VsZi0+e3ZhbHVlfSA9ICIiOyB9Ci0rCQl9IGVsc2lmICgkZGly ID1+IC9cLmNvbW0vKSB7Ci0rCQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAiJGRpclx0JHByZWZpeCRs aW5lIjsKLSAJCX0KLSAJCSRsaW5lID0gIiI7Ci0gCQlyZXR1cm4gJHNlbGY7Ci1AQCAtNjEzLDYg KzYyNSwxOSBAQCBteSAlZ2xvYmFsczsKLSAJCQkJCQkuam9pbigiLCIsQHN0cikgaWYgKEBzdHIp OwotIAkJCQkgICAgbGFzdDsKLSAJCQkJICB9OwotKwkJL1wuY29tbS8gICAgJiYgZG8geyBteSBA c3RyPXNwbGl0KC8sXHMqLywkbGluZSk7Ci0rCQkJCSAgICBteSAkdj11bmRlZjsKLSsJCQkJICAg IGlmICgkbmFzbSkgewotKwkJCQkJJHYuPSJjb21tb24JJHByZWZpeEBzdHJbMF0gQHN0clsxXSI7 Ci0rCQkJCSAgICB9IGVsc2UgewotKwkJCQkJJHY9IiRjdXJyZW50X3NlZ21lbnRcdEVORFNcbiIg aWYgKCRjdXJyZW50X3NlZ21lbnQpOwotKwkJCQkJJGN1cnJlbnRfc2VnbWVudCA9ICJfREFUQSI7 Ci0rCQkJCQkkdi49IiRjdXJyZW50X3NlZ21lbnRcdFNFR01FTlRcbiI7Ci0rCQkJCQkkdi49IkNP TU0JQHN0clswXTpEV09SRDoiLkBzdHJbMV0vNDsKLSsJCQkJICAgIH0KLSsJCQkJICAgICRzZWxm LT57dmFsdWV9ID0gJHY7Ci0rCQkJCSAgICBsYXN0OwotKwkJCQkgIH07Ci0gCSAgICB9Ci0gCSAg ICAkbGluZSA9ICIiOwotIAl9Ci1AQCAtNjI1LDkgKzY1MCwxMzMgQEAgbXkgJWdsb2JhbHM7Ci0g ICAgIH0KLSB9Ci0gCi0rc3ViIHJleCB7Ci0rIGxvY2FsICpvcGNvZGU9c2hpZnQ7Ci0rIG15ICgk ZHN0LCRzcmMsJHJleCk9QF87Ci0rCi0rICAgJHJleHw9MHgwNCBpZigkZHN0Pj04KTsKLSsgICAk cmV4fD0weDAxIGlmKCRzcmM+PTgpOwotKyAgIHB1c2ggQG9wY29kZSwoJHJleHwweDQwKSBpZiAo JHJleCk7Ci0rfQotKwotKyMgb2xkZXIgZ2FzIGFuZCBtbDY0IGRvbid0IGhhbmRsZSBTU0U+MiBp bnN0cnVjdGlvbnMKLStteSAlcmVncm0gPSAoCSIlZWF4Ij0+MCwgIiVlY3giPT4xLCAiJWVkeCI9 PjIsICIlZWJ4Ij0+MywKLSsJCSIlZXNwIj0+NCwgIiVlYnAiPT41LCAiJWVzaSI9PjYsICIlZWRp Ij0+NwkpOwotKwotK215ICRtb3ZxID0gc3ViIHsJIyBlbGRlcmx5IGdhcyBjYW4ndCBoYW5kbGUg aW50ZXItcmVnaXN0ZXIgbW92cQotKyAgbXkgJGFyZyA9IHNoaWZ0OwotKyAgbXkgQG9wY29kZT0o MHg2Nik7Ci0rICAgIGlmICgkYXJnID1+IC8leG1tKFswLTldKyksJXIoXHcrKS8pIHsKLSsJbXkg KCRzcmMsJGRzdCk9KCQxLCQyKTsKLSsJaWYgKCRkc3QgIX4gL1swLTldKy8pCXsgJGRzdCA9ICRy ZWdybXsiJWUkZHN0In07IH0KLSsJcmV4KFxAb3Bjb2RlLCRzcmMsJGRzdCwweDgpOwotKwlwdXNo IEBvcGNvZGUsMHgwZiwweDdlOwotKwlwdXNoIEBvcGNvZGUsMHhjMHwoKCRzcmMmNyk8PDMpfCgk ZHN0JjcpOwkjIE1vZFIvTQotKwlAb3Bjb2RlOwotKyAgICB9IGVsc2lmICgkYXJnID1+IC8lcihc dyspLCV4bW0oWzAtOV0rKS8pIHsKLSsJbXkgKCRzcmMsJGRzdCk9KCQyLCQxKTsKLSsJaWYgKCRk c3QgIX4gL1swLTldKy8pCXsgJGRzdCA9ICRyZWdybXsiJWUkZHN0In07IH0KLSsJcmV4KFxAb3Bj b2RlLCRzcmMsJGRzdCwweDgpOwotKwlwdXNoIEBvcGNvZGUsMHgwZiwweDZlOwotKwlwdXNoIEBv cGNvZGUsMHhjMHwoKCRzcmMmNyk8PDMpfCgkZHN0JjcpOwkjIE1vZFIvTQotKwlAb3Bjb2RlOwot KyAgICB9IGVsc2UgewotKwkoKTsKLSsgICAgfQotK307Ci0rCi0rbXkgJHBleHRyZCA9IHN1YiB7 Ci0rICAgIGlmIChzaGlmdCA9fiAvXCQoWzAtOV0rKSwleG1tKFswLTldKyksKCVcdyspLykgewot KyAgICAgIG15IEBvcGNvZGU9KDB4NjYpOwotKwkkaW1tPSQxOwotKwkkc3JjPSQyOwotKwkkZHN0 PSQzOwotKwlpZiAoJGRzdCA9fiAvJXIoWzAtOV0rKWQvKQl7ICRkc3QgPSAkMTsgfQotKwllbHNp ZiAoJGRzdCA9fiAvJWUvKQkJeyAkZHN0ID0gJHJlZ3JteyRkc3R9OyB9Ci0rCXJleChcQG9wY29k ZSwkc3JjLCRkc3QpOwotKwlwdXNoIEBvcGNvZGUsMHgwZiwweDNhLDB4MTY7Ci0rCXB1c2ggQG9w Y29kZSwweGMwfCgoJHNyYyY3KTw8Myl8KCRkc3QmNyk7CSMgTW9kUi9NCi0rCXB1c2ggQG9wY29k ZSwkaW1tOwotKwlAb3Bjb2RlOwotKyAgICB9IGVsc2UgewotKwkoKTsKLSsgICAgfQotK307Ci0r Ci0rbXkgJHBpbnNyZCA9IHN1YiB7Ci0rICAgIGlmIChzaGlmdCA9fiAvXCQoWzAtOV0rKSwoJVx3 KyksJXhtbShbMC05XSspLykgewotKyAgICAgIG15IEBvcGNvZGU9KDB4NjYpOwotKwkkaW1tPSQx OwotKwkkc3JjPSQyOwotKwkkZHN0PSQzOwotKwlpZiAoJHNyYyA9fiAvJXIoWzAtOV0rKS8pCXsg JHNyYyA9ICQxOyB9Ci0rCWVsc2lmICgkc3JjID1+IC8lZS8pCQl7ICRzcmMgPSAkcmVncm17JHNy Y307IH0KLSsJcmV4KFxAb3Bjb2RlLCRkc3QsJHNyYyk7Ci0rCXB1c2ggQG9wY29kZSwweDBmLDB4 M2EsMHgyMjsKLSsJcHVzaCBAb3Bjb2RlLDB4YzB8KCgkZHN0JjcpPDwzKXwoJHNyYyY3KTsJIyBN b2RSL00KLSsJcHVzaCBAb3Bjb2RlLCRpbW07Ci0rCUBvcGNvZGU7Ci0rICAgIH0gZWxzZSB7Ci0r CSgpOwotKyAgICB9Ci0rfTsKLSsKLStteSAkcHNodWZiID0gc3ViIHsKLSsgICAgaWYgKHNoaWZ0 ID1+IC8leG1tKFswLTldKyksJXhtbShbMC05XSspLykgewotKyAgICAgIG15IEBvcGNvZGU9KDB4 NjYpOwotKwlyZXgoXEBvcGNvZGUsJDIsJDEpOwotKwlwdXNoIEBvcGNvZGUsMHgwZiwweDM4LDB4 MDA7Ci0rCXB1c2ggQG9wY29kZSwweGMwfCgkMSY3KXwoKCQyJjcpPDwzKTsJCSMgTW9kUi9NCi0r CUBvcGNvZGU7Ci0rICAgIH0gZWxzZSB7Ci0rCSgpOwotKyAgICB9Ci0rfTsKLSsKLStteSAkcGFs aWduciA9IHN1YiB7Ci0rICAgIGlmIChzaGlmdCA9fiAvXCQoWzAtOV0rKSwleG1tKFswLTldKyks JXhtbShbMC05XSspLykgewotKyAgICAgIG15IEBvcGNvZGU9KDB4NjYpOwotKwlyZXgoXEBvcGNv ZGUsJDMsJDIpOwotKwlwdXNoIEBvcGNvZGUsMHgwZiwweDNhLDB4MGY7Ci0rCXB1c2ggQG9wY29k ZSwweGMwfCgkMiY3KXwoKCQzJjcpPDwzKTsJCSMgTW9kUi9NCi0rCXB1c2ggQG9wY29kZSwkMTsK LSsJQG9wY29kZTsKLSsgICAgfSBlbHNlIHsKLSsJKCk7Ci0rICAgIH0KLSt9OwotKwotK215ICRw Y2xtdWxxZHEgPSBzdWIgewotKyAgICBpZiAoc2hpZnQgPX4gL1wkKFt4MC05YS1mXSspLFxzKiV4 bW0oWzAtOV0rKSxccyoleG1tKFswLTldKykvKSB7Ci0rICAgICAgbXkgQG9wY29kZT0oMHg2Nik7 Ci0rCXJleChcQG9wY29kZSwkMywkMik7Ci0rCXB1c2ggQG9wY29kZSwweDBmLDB4M2EsMHg0NDsK LSsJcHVzaCBAb3Bjb2RlLDB4YzB8KCQyJjcpfCgoJDMmNyk8PDMpOwkJIyBNb2RSL00KLSsJbXkg JGM9JDE7Ci0rCXB1c2ggQG9wY29kZSwkYz1+L14wLz9vY3QoJGMpOiRjOwotKwlAb3Bjb2RlOwot KyAgICB9IGVsc2UgewotKwkoKTsKLSsgICAgfQotK307Ci0rCi0rbXkgJHJkcmFuZCA9IHN1YiB7 Ci0rICAgIGlmIChzaGlmdCA9fiAvJVtlcl0oXHcrKS8pIHsKLSsgICAgICBteSBAb3Bjb2RlPSgp OwotKyAgICAgIG15ICRkc3Q9JDE7Ci0rCWlmICgkZHN0ICF+IC9bMC05XSsvKSB7ICRkc3QgPSAk cmVncm17IiVlJGRzdCJ9OyB9Ci0rCXJleChcQG9wY29kZSwwLCQxLDgpOwotKwlwdXNoIEBvcGNv ZGUsMHgwZiwweGM3LDB4ZjB8KCRkc3QmNyk7Ci0rCUBvcGNvZGU7Ci0rICAgIH0gZWxzZSB7Ci0r CSgpOwotKyAgICB9Ci0rfTsKLSsKLSBpZiAoJG5hc20pIHsKLSAgICAgcHJpbnQgPDxfX187Ci0g ZGVmYXVsdAlyZWwKLSslZGVmaW5lIFhNTVdPUkQKLSBfX18KLSB9IGVsc2lmICgkbWFzbSkgewot ICAgICBwcmludCA8PF9fXzsKLUBAIC02NDQsMTQgKzc5MywyMiBAQCB3aGlsZSgkbGluZT08Pikg ewotIAotICAgICB1bmRlZiAkbGFiZWw7Ci0gICAgIHVuZGVmICRvcGNvZGU7Ci0tICAgIHVuZGVm ICRzejsKLSAgICAgdW5kZWYgQGFyZ3M7Ci0gCi0gICAgIGlmICgkbGFiZWw9bGFiZWwtPnJlKFwk bGluZSkpCXsgcHJpbnQgJGxhYmVsLT5vdXQoKTsgfQotIAotICAgICBpZiAoZGlyZWN0aXZlLT5y ZShcJGxpbmUpKSB7Ci0gCXByaW50ZiAiJXMiLGRpcmVjdGl2ZS0+b3V0KCk7Ci0tICAgIH0gZWxz aWYgKCRvcGNvZGU9b3Bjb2RlLT5yZShcJGxpbmUpKSB7IEFSR1VNRU5UOiB3aGlsZSAoMSkgewot KyAgICB9IGVsc2lmICgkb3Bjb2RlPW9wY29kZS0+cmUoXCRsaW5lKSkgewotKwlteSAkYXNtID0g ZXZhbCgiXCQiLiRvcGNvZGUtPm1uZW1vbmljKCkpOwotKwl1bmRlZiBAYnl0ZXM7Ci0rCQotKwlp ZiAoKHJlZigkYXNtKSBlcSAnQ09ERScpICYmIHNjYWxhcihAYnl0ZXM9JiRhc20oJGxpbmUpKSkg ewotKwkgICAgcHJpbnQgJGdhcz8iLmJ5dGVcdCI6IkRCXHQiLGpvaW4oJywnLEBieXRlcyksIlxu IjsKLSsJICAgIG5leHQ7Ci0rCX0KLSsKLSsJQVJHVU1FTlQ6IHdoaWxlICgxKSB7Ci0gCW15ICRh cmc7Ci0gCi0gCWlmICgkYXJnPXJlZ2lzdGVyLT5yZShcJGxpbmUpKQl7IG9wY29kZS0+c2l6ZSgk YXJnLT5zaXplKCkpOyB9Ci1AQCAtNjY3LDE5ICs4MjQsMjYgQEAgd2hpbGUoJGxpbmU9PD4pIHsK LSAJJGxpbmUgPX4gcy9eLFxzKi8vOwotIAl9ICMgQVJHVU1FTlQ6Ci0gCi0tCSRzej1vcGNvZGUt PnNpemUoKTsKLS0KLSAJaWYgKCQjYXJncz49MCkgewotIAkgICAgbXkgJGluc247Ci0rCSAgICBt eSAkc3o9b3Bjb2RlLT5zaXplKCk7Ci0rCi0gCSAgICBpZiAoJGdhcykgewotIAkJJGluc24gPSAk b3Bjb2RlLT5vdXQoJCNhcmdzPj0xPyRhcmdzWyQjYXJnc10tPnNpemUoKTokc3opOwotKwkJQGFy Z3MgPSBtYXAoJF8tPm91dCgkc3opLEBhcmdzKTsKLSsJCXByaW50ZiAiXHQlc1x0JXMiLCRpbnNu LGpvaW4oIiwiLEBhcmdzKTsKLSAJICAgIH0gZWxzZSB7Ci0gCQkkaW5zbiA9ICRvcGNvZGUtPm91 dCgpOwotLQkJJGluc24gLj0gJHN6IGlmIChtYXAoJF8tPm91dCgpID1+IC94P21tLyxAYXJncykp OwotKwkJZm9yZWFjaCAoQGFyZ3MpIHsKLSsJCSAgICBteSAkYXJnID0gJF8tPm91dCgpOwotKwkJ ICAgICMgJGluc24uPSRzeiBjb21wZW5zYXRlcyBmb3IgbW92cSwgcGluc3J3LCAuLi4KLSsJCSAg ICBpZiAoJGFyZyA9fiAvXnhtbVswLTldKyQvKSB7ICRpbnNuLj0kc3o7ICRzej0ieCIgaWYoISRz eik7IGxhc3Q7IH0KLSsJCSAgICBpZiAoJGFyZyA9fiAvXm1tWzAtOV0rJC8pICB7ICRpbnNuLj0k c3o7ICRzej0icSIgaWYoISRzeik7IGxhc3Q7IH0KLSsJCX0KLSAJCUBhcmdzID0gcmV2ZXJzZShA YXJncyk7Ci0gCQl1bmRlZiAkc3ogaWYgKCRuYXNtICYmICRvcGNvZGUtPm1uZW1vbmljKCkgZXEg ImxlYSIpOwotKwkJcHJpbnRmICJcdCVzXHQlcyIsJGluc24sam9pbigiLCIsbWFwKCRfLT5vdXQo JHN6KSxAYXJncykpOwotIAkgICAgfQotLQkgICAgcHJpbnRmICJcdCVzXHQlcyIsJGluc24sam9p bigiLCIsbWFwKCRfLT5vdXQoJHN6KSxAYXJncykpOwotIAl9IGVsc2UgewotIAkgICAgcHJpbnRm ICJcdCVzIiwkb3Bjb2RlLT5vdXQoKTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGQvY3J5 cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbC5pbnRlbG9wdHMgb3BlbnNzbC0xLjAuMGQvY3J5cHRv L3JjNC9hc20vcmM0LXg4Nl82NC5wbAotLS0tIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9yYzQvYXNt L3JjNC14ODZfNjQucGwuaW50ZWxvcHRzCTIwMTEtMDgtMjQgMTI6NTA6NTUuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAkyMDEx LTA4LTI0IDEyOjUwOjU2LjAwMDAwMDAwMCArMDIwMAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNy L2Jpbi9lbnYgcGVybAotKyMhL3Vzci9iaW4vcGVybAotICMKLSAjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIyBX cml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9w ZW5TU0wKLUBAIC03LDYgKzcsOCBAQAotICMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCi0gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICMKLSsjIEp1bHkgMjAw NAotKyMKLSAjIDIuMjJ4IFJDNCB0dW5lLXVwOi0pIEl0IHNob3VsZCBiZSBub3RlZCB0aG91Z2gg dGhhdCBteSBoYW5kIFthcyBpbgotICMgImhhbmQtY29kZWQgYXNzZW1ibGVyIl0gZG9lc24ndCBz dGFuZCBmb3IgdGhlIHdob2xlIGltcHJvdmVtZW50Ci0gIyBjb2VmZmljaWVudC4gSXQgdHVybmVk IG91dCB0aGF0IGVsaW1pbmF0aW5nIFJDNF9DSEFSIGZyb20gY29uZmlnCi1AQCAtMTksNiArMjEs OCBAQAotICMgdG8gb3BlcmF0ZSBvbiBwYXJ0aWFsIHJlZ2lzdGVycywgaXQgdHVybmVkIG91dCB0 byBiZSB0aGUgYmVzdCBiZXQuCi0gIyBBdCBsZWFzdCBmb3IgQU1ELi4uIEhvdyBJQTMyRSB3b3Vs ZCBwZXJmb3JtIHJlbWFpbnMgdG8gYmUgc2Vlbi4uLgotIAotKyMgTm92ZW1iZXIgMjAwNAotKyMK LSAjIEFzIHdhcyBzaG93biBieSBNYXJjIEJldmFuZCByZW9yZGVyaW5nIG9mIGNvdXBsZSBvZiBs b2FkIG9wZXJhdGlvbnMKLSAjIHJlc3VsdHMgaW4gZXZlbiBoaWdoZXIgcGVyZm9ybWFuY2UgZ2Fp biBvZiAzLjN4Oi0pIEF0IGxlYXN0IG9uCi0gIyBPcHRlcm9uLi4uIEZvciByZWZlcmVuY2UsIDF4 IGluIHRoaXMgY2FzZSBpcyBSQzRfQ0hBUiBDLWNvZGUKLUBAIC0yNiw2ICszMCw4IEBACi0gIyBM YXR0ZXIgbWVhbnMgdGhhdCBpZiB5b3Ugd2FudCB0byAqZXN0aW1hdGUqIHdoYXQgdG8gZXhwZWN0 IGZyb20KLSAjICp5b3VyKiBPcHRlcm9uLCB0aGVuIG11bHRpcGx5IDU0IGJ5IDMuMyBhbmQgY2xv Y2sgZnJlcXVlbmN5IGluIEdIei4KLSAKLSsjIE5vdmVtYmVyIDIwMDQKLSsjCi0gIyBJbnRlbCBQ NCBFTTY0VCBjb3JlIHdhcyBmb3VuZCB0byBydW4gdGhlIEFNRDY0IGNvZGUgcmVhbGx5IHNsb3cu Li4KLSAjIFRoZSBvbmx5IHdheSB0byBhY2hpZXZlIGNvbXBhcmFibGUgcGVyZm9ybWFuY2Ugb24g UDQgd2FzIHRvIGtlZXAKLSAjIFJDNF9DSEFSLiBLaW5kIG9mIGlyb25pYywgaHVoPyBBcyBpdCdz IGFwcGFyZW50bHkgaW1wb3NzaWJsZSB0bwotQEAgLTMzLDEwICszOSwxNCBAQAotICMgb24gZWl0 aGVyIEFNRCBhbmQgSW50ZWwgcGxhdGZvcm1zLCBJIGltcGxlbWVudCBib3RoIGNhc2VzLiBTZWUK LSAjIHJjNF9za2V5LmMgZm9yIGZ1cnRoZXIgZGV0YWlscy4uLgotIAotKyMgQXByaWwgMjAwNQot KyMKLSAjIFA0IEVNNjRUIGNvcmUgYXBwZWFycyB0byBiZSAiYWxsZXJnaWMiIHRvIDY0LWJpdCBp bmMvZGVjLiBSZXBsYWNpbmcgCi0gIyB0aG9zZSB3aXRoIGFkZC9zdWIgcmVzdWx0cyBpbiA1MCUg cGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb2YgZm9sZGVkCi0gIyBsb29wLi4uCi0gCi0rIyBNYXkg MjAwNQotKyMKLSAjIEFzIHdhcyBzaG93biBieSBab3UgTmFuaGFpIGxvb3AgdW5yb2xsaW5nIGNh biBpbXByb3ZlIEludGVsIEVNNjRUCi0gIyBwZXJmb3JtYW5jZSBieSA+MzAlIFt1bmxpa2UgUDQg MzItYml0IGNhc2UgdGhhdCBpc10uIEJ1dCB0aGlzIGlzCi0gIyBwcm92aWRlZCB0aGF0IGxvYWRz IGFyZSByZW9yZGVyZWQgZXZlbiBtb3JlIGFnZ3Jlc3NpdmVseSEgQm90aCBjb2RlCi1AQCAtNTAs NiArNjAsOCBAQAotICMgaXMgbm90IGltcGxlbWVudGVkLCB0aGVuIHRoaXMgZmluYWwgUkM0X0NI QVIgY29kZS1wYXRoIHNob3VsZCBiZQotICMgcHJlZmVycmVkLCBhcyBpdCBwcm92aWRlcyBiZXR0 ZXIgKmFsbC1yb3VuZCogcGVyZm9ybWFuY2VdLgotIAotKyMgTWFyY2ggMjAwNwotKyMKLSAjIElu dGVsIENvcmUyIHdhcyBvYnNlcnZlZCB0byBwZXJmb3JtIHBvb3JseSBvbiBib3RoIGNvZGUgcGF0 aHM6LSggSXQKLSAjIGFwcGFyZW50bHkgc3VmZmVycyBmcm9tIHNvbWUga2luZCBvZiBwYXJ0aWFs IHJlZ2lzdGVyIHN0YWxsLCB3aGljaAotICMgb2NjdXJzIGluIDY0LWJpdCBtb2RlIG9ubHkgW2Fz IHZpcnR1YWxseSBpZGVudGljYWwgMzItYml0IGxvb3Agd2FzCi1AQCAtNTgsNiArNzAsMzQgQEAK LSAjIGZpdCBmb3IgQ29yZTIgYW5kIHRoZXJlZm9yZSB0aGUgY29kZSB3YXMgbW9kaWZpZWQgdG8g c2tpcCBjbG9vcDggb24KLSAjIHRoaXMgQ1BVLgotIAotKyMgTWF5IDIwMTAKLSsjCi0rIyBJbnRl bCBXZXN0bWVyZSB3YXMgb2JzZXJ2ZWQgdG8gcGVyZm9ybSBzdWJvcHRpbWFsbHkuIEFkZGluZyB5 ZXQKLSsjIGFub3RoZXIgbW92emIgdG8gY2xvb3AxIGltcHJvdmVkIHBlcmZvcm1hbmNlIGJ5IGFs bW9zdCA1MCUhIENvcmUyCi0rIyBwZXJmb3JtYW5jZSBpcyBpbXByb3ZlZCB0b28sIGJ1dCBub21p bmFsbHkuLi4KLSsKLSsjIE1heSAyMDExCi0rIwotKyMgVGhlIG9ubHkgY29kZSBwYXRoIHRoYXQg d2FzIG5vdCBtb2RpZmllZCBpcyBQNC1zcGVjaWZpYyBvbmUuIE5vbi1QNAotKyMgSW50ZWwgY29k ZSBwYXRoIG9wdGltaXphdGlvbiBpcyBoZWF2aWx5IGJhc2VkIG9uIHN1Ym1pc3Npb24gYnkgTWF4 aW0KLSsjIFBlcm1pbm92LCBNYXhpbSBMb2NrdHl1a2hpbiBhbmQgSmltIEd1aWxmb3JkIG9mIElu dGVsLiBJJ3ZlIHVzZWQKLSsjIHNvbWUgb2YgdGhlIGlkZWFzIGV2ZW4gaW4gYXR0ZW1wdCB0byBv cHRtaXplIHRoZSBvcmlnaW5hbCBSQzRfSU5UCi0rIyBjb2RlIHBhdGguLi4gQ3VycmVudCBwZXJm b3JtYW5jZSBpbiBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIChsZXNzCi0rIyBpcyBiZXR0ZXIp IGFuZCBpbXByb3ZlbWVudCBjb2VmZmljaWVudHMgcmVsYXRpdmUgdG8gcHJldmlvdXMKLSsjIHZl cnNpb24gb2YgdGhpcyBtb2R1bGUgYXJlOgotKyMKLSsjIE9wdGVyb24JNS4zLyswJQotKyMgUDQJ CTYuNQotKyMgQ29yZTIJCTYuMi8rMTUlKCopCi0rIyBXZXN0bWVyZQk0LjIvKzYwJQotKyMgU2Fu ZHkgQnJpZGdlCTQuMi8rMTIwJQotKyMgQXRvbQkJOS4zLys4MCUKLSsjCi0rIyAoKikJTm90ZSB0 aGF0IENvcmUyIHJlc3VsdCBpcyB+MTUlIGxvd2VyIHRoYW4gY29ycmVzcG9uZGluZyByZXN1bHQK LSsjCWZvciAzMi1iaXQgY29kZSwgbWVhbmluZyB0aGF0IGl0J3MgcG9zc2libGUgdG8gaW1wcm92 ZSBpdCwKLSsjCWJ1dCBtb3JlIHRoYW4gbGlrZWx5IGF0IHRoZSBjb3N0IG9mIHRoZSBvdGhlcnMg KHNlZSByYzQtNTg2LnBsCi0rIwl0byBnZXQgdGhlIGlkZWEpLi4uCi0rCi0gJGZsYXZvdXIgPSBz aGlmdDsKLSAkb3V0cHV0ICA9IHNoaWZ0OwotIGlmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRw dXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KLUBAIC03NiwxMyArMTE2LDEwIEBAICRs ZW49IiVyc2kiOwkgICAgIyBhcmcyCi0gJGlucD0iJXJkeCI7CSAgICAjIGFyZzMKLSAkb3V0PSIl cmN4IjsJICAgICMgYXJnNAotIAotLUBYWD0oIiVyOCIsIiVyMTAiKTsKLS1AVFg9KCIlcjkiLCIl cjExIik7Ci0tJFlZPSIlcjEyIjsKLS0kVFk9IiVyMTMiOwotLQotK3sKLSAkY29kZT08PF9fXzsK LSAudGV4dAotKy5leHRlcm4JT1BFTlNTTF9pYTMyY2FwX1AKLSAKLSAuZ2xvYmwJUkM0Ci0gLnR5 cGUJUkM0LFxAZnVuY3Rpb24sNAotQEAgLTk1LDQ4ICsxMzIsMTczIEBAIFJDNDoJb3IJJGxlbiwk bGVuCi0gCXB1c2gJJXIxMgotIAlwdXNoCSVyMTMKLSAuTHByb2xvZ3VlOgotKwltb3YJJGxlbiwl cjExCi0rCW1vdgkkaW5wLCVyMTIKLSsJbW92CSRvdXQsJXIxMwotK19fXwotK215ICRsZW49IiVy MTEiOwkJIyByZWFzc2lnbiBpbnB1dCBhcmd1bWVudHMKLStteSAkaW5wPSIlcjEyIjsKLStteSAk b3V0PSIlcjEzIjsKLSsKLStteSBAWFg9KCIlcjEwIiwiJXJzaSIpOwotK215IEBUWD0oIiVyYXgi LCIlcmJ4Iik7Ci0rbXkgJFlZPSIlcmN4IjsKLStteSAkVFk9IiVyZHgiOwotIAotLQlhZGQJXCQ4 LCRkYXQKLS0JbW92bAktOCgkZGF0KSwkWFhbMF0jZAotLQltb3ZsCS00KCRkYXQpLCRZWSNkCi0r JGNvZGUuPTw8X19fOwotKwl4b3IJJFhYWzBdLCRYWFswXQotKwl4b3IJJFlZLCRZWQotKwotKwls ZWEJOCgkZGF0KSwkZGF0Ci0rCW1vdgktOCgkZGF0KSwkWFhbMF0jYgotKwltb3YJLTQoJGRhdCks JFlZI2IKLSAJY21wbAlcJC0xLDI1NigkZGF0KQotIAlqZQkuTFJDNF9DSEFSCi0rCW1vdglPUEVO U1NMX2lhMzJjYXBfUCglcmlwKSwlcjhkCi0rCXhvcgkkVFhbMV0sJFRYWzFdCi0gCWluYwkkWFhb MF0jYgotKwlzdWIJJFhYWzBdLCRUWFsxXQotKwlzdWIJJGlucCwkb3V0Ci0gCW1vdmwJKCRkYXQs JFhYWzBdLDQpLCRUWFswXSNkCi0tCXRlc3QJXCQtOCwkbGVuCi0rCXRlc3QJXCQtMTYsJGxlbgot IAlqegkuTGxvb3AxCi0tCWptcAkuTGxvb3A4Ci0rCWJ0CVwkMzAsJXI4ZAkjIEludGVsIENQVT8K LSsJamMJLkxpbnRlbAotKwlhbmQJXCQ3LCRUWFsxXQotKwlsZWEJMSgkWFhbMF0pLCRYWFsxXQot KwlqegkuTG9vcDgKLSsJc3ViCSRUWFsxXSwkbGVuCi0rLkxvb3A4X3dhcm11cDoKLSsJYWRkCSRU WFswXSNiLCRZWSNiCi0rCW1vdmwJKCRkYXQsJFlZLDQpLCRUWSNkCi0rCW1vdmwJJFRYWzBdI2Qs KCRkYXQsJFlZLDQpCi0rCW1vdmwJJFRZI2QsKCRkYXQsJFhYWzBdLDQpCi0rCWFkZAkkVFkjYiwk VFhbMF0jYgotKwlpbmMJJFhYWzBdI2IKLSsJbW92bAkoJGRhdCwkVFhbMF0sNCksJFRZI2QKLSsJ bW92bAkoJGRhdCwkWFhbMF0sNCksJFRYWzBdI2QKLSsJeG9yYgkoJGlucCksJFRZI2IKLSsJbW92 YgkkVFkjYiwoJG91dCwkaW5wKQotKwlsZWEJMSgkaW5wKSwkaW5wCi0rCWRlYwkkVFhbMV0KLSsJ am56CS5Mb29wOF93YXJtdXAKLSsKLSsJbGVhCTEoJFhYWzBdKSwkWFhbMV0KLSsJam1wCS5Mb29w OAotIC5hbGlnbgkxNgotLS5MbG9vcDg6Ci0rLkxvb3A4OgotIF9fXwotIGZvciAoJGk9MDskaTw4 OyRpKyspIHsKLSskY29kZS49PDxfX18gaWYgKCRpPT03KTsKLSsJYWRkCVwkOCwkWFhbMV0jYgot K19fXwotICRjb2RlLj08PF9fXzsKLSAJYWRkCSRUWFswXSNiLCRZWSNiCi0tCW1vdgkkWFhbMF0s JFhYWzFdCi0gCW1vdmwJKCRkYXQsJFlZLDQpLCRUWSNkCi0tCXJvcglcJDgsJXJheAkJCSMgcm9y IGlzIHJlZHVuZGFudCB3aGVuICRpPTAKLS0JaW5jCSRYWFsxXSNiCi0tCW1vdmwJKCRkYXQsJFhY WzFdLDQpLCRUWFsxXSNkCi0tCWNtcAkkWFhbMV0sJFlZCi0gCW1vdmwJJFRYWzBdI2QsKCRkYXQs JFlZLDQpCi0tCWNtb3ZlCSRUWFswXSwkVFhbMV0KLS0JbW92bAkkVFkjZCwoJGRhdCwkWFhbMF0s NCkKLSsJbW92bAlgNCooJGk9PTc/LTE6JGkpYCgkZGF0LCRYWFsxXSw0KSwkVFhbMV0jZAotKwly b3IJXCQ4LCVyOAkJCQkjIHJvciBpcyByZWR1bmRhbnQgd2hlbiAkaT0wCi0rCW1vdmwJJFRZI2Qs NCokaSgkZGF0LCRYWFswXSw0KQotIAlhZGQJJFRYWzBdI2IsJFRZI2IKLS0JbW92YgkoJGRhdCwk VFksNCksJWFsCi0rCW1vdmIJKCRkYXQsJFRZLDQpLCVyOGIKLSBfX18KLS1wdXNoKEBUWCxzaGlm dChAVFgpKTsgcHVzaChAWFgsc2hpZnQoQFhYKSk7CSMgInJvdGF0ZSIgcmVnaXN0ZXJzCi0rcHVz aChAVFgsc2hpZnQoQFRYKSk7ICNwdXNoKEBYWCxzaGlmdChAWFgpKTsJIyAicm90YXRlIiByZWdp c3RlcnMKLSB9Ci0gJGNvZGUuPTw8X19fOwotLQlyb3IJXCQ4LCVyYXgKLSsJYWRkCVwkOCwkWFhb MF0jYgotKwlyb3IJXCQ4LCVyOAotIAlzdWIJXCQ4LCRsZW4KLSAKLS0JeG9yCSgkaW5wKSwlcmF4 Ci0tCWFkZAlcJDgsJGlucAotLQltb3YJJXJheCwoJG91dCkKLS0JYWRkCVwkOCwkb3V0Ci0rCXhv cgkoJGlucCksJXI4Ci0rCW1vdgklcjgsKCRvdXQsJGlucCkKLSsJbGVhCTgoJGlucCksJGlucAot IAotIAl0ZXN0CVwkLTgsJGxlbgotLQlqbnoJLkxsb29wOAotKwlqbnoJLkxvb3A4Ci0rCWNtcAlc JDAsJGxlbgotKwlqbmUJLkxsb29wMQotKwlqbXAJLkxleGl0Ci0rCi0rLmFsaWduCTE2Ci0rLkxp bnRlbDoKLSsJdGVzdAlcJC0zMiwkbGVuCi0rCWp6CS5MbG9vcDEKLSsJYW5kCVwkMTUsJFRYWzFd Ci0rCWp6CS5Mb29wMTZfaXNfaG90Ci0rCXN1YgkkVFhbMV0sJGxlbgotKy5Mb29wMTZfd2FybXVw OgotKwlhZGQJJFRYWzBdI2IsJFlZI2IKLSsJbW92bAkoJGRhdCwkWVksNCksJFRZI2QKLSsJbW92 bAkkVFhbMF0jZCwoJGRhdCwkWVksNCkKLSsJbW92bAkkVFkjZCwoJGRhdCwkWFhbMF0sNCkKLSsJ YWRkCSRUWSNiLCRUWFswXSNiCi0rCWluYwkkWFhbMF0jYgotKwltb3ZsCSgkZGF0LCRUWFswXSw0 KSwkVFkjZAotKwltb3ZsCSgkZGF0LCRYWFswXSw0KSwkVFhbMF0jZAotKwl4b3JiCSgkaW5wKSwk VFkjYgotKwltb3ZiCSRUWSNiLCgkb3V0LCRpbnApCi0rCWxlYQkxKCRpbnApLCRpbnAKLSsJZGVj CSRUWFsxXQotKwlqbnoJLkxvb3AxNl93YXJtdXAKLSsKLSsJbW92CSRZWSwkVFhbMV0KLSsJeG9y CSRZWSwkWVkKLSsJbW92CSRUWFsxXSNiLCRZWSNiCi0rCi0rLkxvb3AxNl9pc19ob3Q6Ci0rCWxl YQkoJGRhdCwkWFhbMF0sNCksJFhYWzFdCi0rX19fCi0rc3ViIFJDNF9sb29wIHsKLSsgIG15ICRp PXNoaWZ0OwotKyAgbXkgJGo9JGk8MD8wOiRpOwotKyAgbXkgJHhtbT0iJXhtbSIuKCRqJjEpOwot KwotKyAgICAkY29kZS49IglhZGQJXCQxNiwkWFhbMF0jYlxuIgkJaWYgKCRpPT0xNSk7Ci0rICAg ICRjb2RlLj0iCW1vdmRxdQkoJGlucCksJXhtbTJcbiIJCQlpZiAoJGk9PTE1KTsKLSsgICAgJGNv ZGUuPSIJYWRkCSRUWFswXSNiLCRZWSNiXG4iCQlpZiAoJGk8PTApOwotKyAgICAkY29kZS49Iglt b3ZsCSgkZGF0LCRZWSw0KSwkVFkjZFxuIjsKLSsgICAgJGNvZGUuPSIJcHhvcgkleG1tMCwleG1t MlxuIgkJCWlmICgkaT09MCk7Ci0rICAgICRjb2RlLj0iCXBzbGxxCVwkOCwleG1tMVxuIgkJCWlm ICgkaT09MCk7Ci0rICAgICRjb2RlLj0iCXB4b3IJJHhtbSwkeG1tXG4iCQkJaWYgKCRpPD0xKTsK LSsgICAgJGNvZGUuPSIJbW92bAkkVFhbMF0jZCwoJGRhdCwkWVksNClcbiI7Ci0rICAgICRjb2Rl Lj0iCWFkZAkkVFkjYiwkVFhbMF0jYlxuIjsKLSsgICAgJGNvZGUuPSIJbW92bAlgNCooJGorMSlg KCRYWFsxXSksJFRYWzFdI2RcbiIJaWYgKCRpPDE1KTsKLSsgICAgJGNvZGUuPSIJbW92egkkVFhb MF0jYiwkVFhbMF0jZFxuIjsKLSsgICAgJGNvZGUuPSIJbW92bAkkVFkjZCxgNCokamAoJFhYWzFd KVxuIjsKLSsgICAgJGNvZGUuPSIJcHhvcgkleG1tMSwleG1tMlxuIgkJCWlmICgkaT09MCk7Ci0r ICAgICRjb2RlLj0iCWxlYQkoJGRhdCwkWFhbMF0sNCksJFhYWzFdXG4iCWlmICgkaT09MTUpOwot KyAgICAkY29kZS49IglhZGQJJFRYWzFdI2IsJFlZI2JcbiIJCWlmICgkaTwxNSk7Ci0rICAgICRj b2RlLj0iCXBpbnNydwlcJGAkaj4+MWAsKCRkYXQsJFRYWzBdLDQpLCR4bW1cbiI7Ci0rICAgICRj b2RlLj0iCW1vdmRxdQkleG1tMiwoJG91dCwkaW5wKVxuIgkJaWYgKCRpPT0wKTsKLSsgICAgJGNv ZGUuPSIJbGVhCTE2KCRpbnApLCRpbnBcbiIJCWlmICgkaT09MCk7Ci0rICAgICRjb2RlLj0iCW1v dmwJKCRYWFsxXSksJFRYWzFdI2RcbiIJCWlmICgkaT09MTUpOwotK30KLSsJUkM0X2xvb3AoLTEp OwotKyRjb2RlLj08PF9fXzsKLSsJam1wCS5Mb29wMTZfZW50ZXIKLSsuYWxpZ24JMTYKLSsuTG9v cDE2OgotK19fXwotKwotK2ZvciAoJGk9MDskaTwxNjskaSsrKSB7Ci0rICAgICRjb2RlLj0iLkxv b3AxNl9lbnRlcjpcbiIJCWlmICgkaT09MSk7Ci0rCVJDNF9sb29wKCRpKTsKLSsJcHVzaChAVFgs c2hpZnQoQFRYKSk7IAkJIyAicm90YXRlIiByZWdpc3RlcnMKLSt9Ci0rJGNvZGUuPTw8X19fOwot Kwltb3YJJFlZLCRUWFsxXQotKwl4b3IJJFlZLCRZWQkJCSMga2V5d29yZCB0byBwYXJ0aWFsIHJl Z2lzdGVyCi0rCXN1YglcJDE2LCRsZW4KLSsJbW92CSRUWFsxXSNiLCRZWSNiCi0rCXRlc3QJXCQt MTYsJGxlbgotKwlqbnoJLkxvb3AxNgotKwotKwlwc2xscQlcJDgsJXhtbTEKLSsJcHhvcgkleG1t MCwleG1tMgotKwlweG9yCSV4bW0xLCV4bW0yCi0rCW1vdmRxdQkleG1tMiwoJG91dCwkaW5wKQot KwlsZWEJMTYoJGlucCksJGlucAotKwotIAljbXAJXCQwLCRsZW4KLSAJam5lCS5MbG9vcDEKLSAJ am1wCS5MZXhpdAotQEAgLTE1Miw5ICszMTQsOCBAQCAkY29kZS49PDxfX187Ci0gCW1vdmwJKCRk YXQsJFRYWzBdLDQpLCRUWSNkCi0gCW1vdmwJKCRkYXQsJFhYWzBdLDQpLCRUWFswXSNkCi0gCXhv cmIJKCRpbnApLCRUWSNiCi0tCWluYwkkaW5wCi0tCW1vdmIJJFRZI2IsKCRvdXQpCi0tCWluYwkk b3V0Ci0rCW1vdmIJJFRZI2IsKCRvdXQsJGlucCkKLSsJbGVhCTEoJGlucCksJGlucAotIAlkZWMJ JGxlbgotIAlqbnoJLkxsb29wMQotIAlqbXAJLkxleGl0Ci1AQCAtMTY1LDEzICszMjYsMTEgQEAg JGNvZGUuPTw8X19fOwotIAltb3Z6YgkoJGRhdCwkWFhbMF0pLCRUWFswXSNkCi0gCXRlc3QJXCQt OCwkbGVuCi0gCWp6CS5MY2xvb3AxCi0tCWNtcGwJXCQwLDI2MCgkZGF0KQotLQlqbnoJLkxjbG9v cDEKLSAJam1wCS5MY2xvb3A4Ci0gLmFsaWduCTE2Ci0gLkxjbG9vcDg6Ci0tCW1vdgkoJGlucCks JWVheAotLQltb3YJNCgkaW5wKSwlZWJ4Ci0rCW1vdgkoJGlucCksJXI4ZAotKwltb3YJNCgkaW5w KSwlcjlkCi0gX19fCi0gIyB1bnJvbGwgMng0LXdpc2UsIGJlY2F1c2UgNjQtYml0IHJvdGF0ZXMg a2lsbCBJbnRlbCBQNC4uLgotIGZvciAoJGk9MDskaTw0OyRpKyspIHsKLUBAIC0xODgsOCArMzQ3 LDggQEAgJGNvZGUuPTw8X19fOwotIAltb3YJJFRYWzBdLCRUWFsxXQotIC5MY21vdiRpOgotIAlh ZGQJJFRYWzBdI2IsJFRZI2IKLS0JeG9yCSgkZGF0LCRUWSksJWFsCi0tCXJvcglcJDgsJWVheAot Kwl4b3IJKCRkYXQsJFRZKSwlcjhiCi0rCXJvcglcJDgsJXI4ZAotIF9fXwotIHB1c2goQFRYLHNo aWZ0KEBUWCkpOyBwdXNoKEBYWCxzaGlmdChAWFgpKTsJIyAicm90YXRlIiByZWdpc3RlcnMKLSB9 Ci1AQCAtMjA3LDE2ICszNjYsMTYgQEAgJGNvZGUuPTw8X19fOwotIAltb3YJJFRYWzBdLCRUWFsx XQotIC5MY21vdiRpOgotIAlhZGQJJFRYWzBdI2IsJFRZI2IKLS0JeG9yCSgkZGF0LCRUWSksJWJs Ci0tCXJvcglcJDgsJWVieAotKwl4b3IJKCRkYXQsJFRZKSwlcjliCi0rCXJvcglcJDgsJXI5ZAot IF9fXwotIHB1c2goQFRYLHNoaWZ0KEBUWCkpOyBwdXNoKEBYWCxzaGlmdChAWFgpKTsJIyAicm90 YXRlIiByZWdpc3RlcnMKLSB9Ci0gJGNvZGUuPTw8X19fOwotIAlsZWEJLTgoJGxlbiksJGxlbgot LQltb3YJJWVheCwoJG91dCkKLSsJbW92CSVyOGQsKCRvdXQpCi0gCWxlYQk4KCRpbnApLCRpbnAK LS0JbW92CSVlYngsNCgkb3V0KQotKwltb3YJJXI5ZCw0KCRvdXQpCi0gCWxlYQk4KCRvdXQpLCRv dXQKLSAKLSAJdGVzdAlcJC04LCRsZW4KLUBAIC0yMjksNiArMzg4LDcgQEAgJGNvZGUuPTw8X19f OwotIC5hbGlnbgkxNgotIC5MY2xvb3AxOgotIAlhZGQJJFRYWzBdI2IsJFlZI2IKLSsJbW92emIJ JFlZI2IsJFlZI2QKLSAJbW92emIJKCRkYXQsJFlZKSwkVFkjZAotIAltb3ZiCSRUWFswXSNiLCgk ZGF0LCRZWSkKLSAJbW92YgkkVFkjYiwoJGRhdCwkWFhbMF0pCi1AQCAtMjYwLDEyICs0MjAsMTIg QEAgJGNvZGUuPTw8X19fOwotIAlyZXQKLSAuc2l6ZQlSQzQsLi1SQzQKLSBfX18KLSt9Ci0gCi0g JGlkeD0iJXI4IjsKLSAkaWRvPSIlcjkiOwotIAotICRjb2RlLj08PF9fXzsKLS0uZXh0ZXJuCU9Q RU5TU0xfaWEzMmNhcF9QCi0gLmdsb2JsCVJDNF9zZXRfa2V5Ci0gLnR5cGUJUkM0X3NldF9rZXks XEBmdW5jdGlvbiwzCi0gLmFsaWduCTE2Ci1AQCAtMjgwLDEyICs0NDAsOSBAQCBSQzRfc2V0X2tl eToKLSAJeG9yCSVyMTEsJXIxMQotIAotIAltb3YJT1BFTlNTTF9pYTMyY2FwX1AoJXJpcCksJGlk eCNkCi0tCWJ0CVwkMjAsJGlkeCNkCi0tCWpuYwkuTHcxc3Rsb29wCi0tCWJ0CVwkMzAsJGlkeCNk Ci0tCXNldGMJJGlkbyNiCi0tCW1vdgkkaWRvI2QsMjYwKCRkYXQpCi0tCWptcAkuTGMxc3Rsb29w Ci0rCWJ0CVwkMjAsJGlkeCNkCSMgUkM0X0NIQVI/Ci0rCWpjCS5MYzFzdGxvb3AKLSsJam1wCS5M dzFzdGxvb3AKLSAKLSAuYWxpZ24JMTYKLSAuTHcxc3Rsb29wOgotQEAgLTM0OCwxOCArNTA1LDIw IEBAIFJDNF9vcHRpb25zOgotIAlsZWEJLkxvcHRzKCVyaXApLCVyYXgKLSAJbW92CU9QRU5TU0xf aWEzMmNhcF9QKCVyaXApLCVlZHgKLSAJYnQJXCQyMCwlZWR4Ci0tCWpuYwkuTGRvbmUKLS0JYWRk CVwkMTIsJXJheAotKwlqYwkuTDh4Y2hhcgotIAlidAlcJDMwLCVlZHgKLSAJam5jCS5MZG9uZQot LQlhZGQJXCQxMywlcmF4Ci0rCWFkZAlcJDI1LCVyYXgKLSsJcmV0Ci0rLkw4eGNoYXI6Ci0rCWFk ZAlcJDEyLCVyYXgKLSAuTGRvbmU6Ci0gCXJldAotIC5hbGlnbgk2NAotIC5Mb3B0czoKLSAuYXNj aXoJInJjNCg4eCxpbnQpIgotIC5hc2NpegkicmM0KDh4LGNoYXIpIgotLS5hc2NpegkicmM0KDF4 LGNoYXIpIgotKy5hc2NpegkicmM0KDE2eCxpbnQpIgotIC5hc2NpegkiUkM0IGZvciB4ODZfNjQs IENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi0gLmFsaWduCTY0Ci0gLnNpemUJ UkM0X29wdGlvbnMsLi1SQzRfb3B0aW9ucwotQEAgLTQ5Nyw4ICs2NTYsMTcgQEAga2V5X3NlX2hh bmRsZXI6Ci0gX19fCi0gfQotIAotLSRjb2RlID1+IHMvIyhbYndkXSkvJDEvZ207Ci0rc3ViIHJl Z19wYXJ0IHsKLStteSAoJHJlZywkY29udik9QF87Ci0rICAgIGlmICgkcmVnID1+IC8lclswLTld Ky8pCXsgJHJlZyAuPSAkY29udjsgfQotKyAgICBlbHNpZiAoJGNvbnYgZXEgImIiKQl7ICRyZWcg PX4gcy8lW2VyXShbXnhdKyl4Py8lJDFsLzsJfQotKyAgICBlbHNpZiAoJGNvbnYgZXEgInciKQl7 ICRyZWcgPX4gcy8lW2VyXSguKykvJSQxLzsJCX0KLSsgICAgZWxzaWYgKCRjb252IGVxICJkIikJ eyAkcmVnID1+IHMvJVtlcl0oLispLyVlJDEvOwkJfQotKyAgICByZXR1cm4gJHJlZzsKLSt9Ci0g Ci0rJGNvZGUgPX4gcy8oJVthLXowLTldKykjKFtid2RdKS9yZWdfcGFydCgkMSwkMikvZ2VtOwot KyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwotICRjb2RlID1+IHMvUkM0X3Nl dF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKLSAKLSBw cmludCAkY29kZTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9yYzQvYXNtL3JjNC01 ODYucGwuaW50ZWxvcHRzIG9wZW5zc2wtMS4wLjBkL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwK LS0tLSBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsLmludGVsb3B0cwky MDExLTA4LTI0IDEyOjUwOjU1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBkL2Ny eXB0by9yYzQvYXNtL3JjNC01ODYucGwJMjAxMS0wOC0yNCAxMjo1MDo1Ni4wMDAwMDAwMDAgKzAy MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9iaW4vZW52IHBlcmwKLSsjIS91c3IvYmluL3Bl cmwKLSAKLSAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0gIyBbUmVdd3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxh cHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCi1AQCAtMjgsNiArMjgsMzMgQEAK LSAjCi0gIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgotIAotKyMgTWF5IDIwMTEKLSsjCi0r IyBPcHRpbWl6ZSBmb3IgQ29yZTIgYW5kIFdlc3RtZXJlIFthbmQgaW5jaWRlbnRhbGx5IE9wdGVy b25dLiBDdXJyZW50Ci0rIyBwZXJmb3JtYW5jZSBpbiBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRl IChsZXNzIGlzIGJldHRlcikgaXM6Ci0rIwotKyMgUGVudGl1bQkxMC4yCQkJIyBvcmlnaW5hbCBu dW1iZXJzCi0rIyBQZW50aXVtIElJSQk3LjgoKikKLSsjIEludGVsIFA0CTcuNQotKyMKLSsjIE9w dGVyb24JNi4xLysyMCUJCSMgbmV3IE1NWCBudW1iZXJzCi0rIyBDb3JlMgkJNS4zLys2NyUoKiop Ci0rIyBXZXN0bWVyZQk1LjEvKzk0JSgqKikKLSsjIFNhbmR5IEJyaWRnZQk1LjAvKzglCi0rIyBB dG9tCQkxMi42Lys2JQotKyMKLSsjICgqKQlQSUlJIGNhbiBhY3R1YWxseSBkZWxpdmVyIDYuNiBj eWNsZXMgcGVyIGJ5dGUgd2l0aCBNTVggY29kZSwKLSsjCWJ1dCB0aGlzIHNwZWNpZmljIGNvZGUg cGVyZm9ybXMgcG9vcmx5IG9uIENvcmUyLiBBbmQgdmljZQotKyMJdmVyc2EsIGJlbG93IE1NWC9T U0UgY29kZSBkZWxpdmVyaW5nIDUuOC83LjEgb24gQ29yZTIgcGVyZm9ybXMKLSsjCXBvb3JseSBv biBQSUlJLCBhdCA4LjAvMTQuNTotKCBBcyBQSUlJIGlzIG5vdCBhICJob3QiIENQVQotKyMJW2Fu eW1vcmVdLCBJIGNob3NlIHRvIGRpc2NhcmQgUElJSS1zcGVjaWZpYyBjb2RlIHBhdGggYW5kIG9w dAotKyMJZm9yIG9yaWdpbmFsIElBTFUtb25seSBjb2RlLCB3aGljaCBpcyB3aHkgTU1YL1NTRSBj b2RlIHBhdGgKLSsjCWlzIGd1YXJkZWQgYnkgU1NFMiBiaXQgKHNlZSBiZWxvdyksIG5vdCBNTVgv U1NFLgotKyMgKCoqKQlQZXJmb3JtYW5jZSB2cy4gYmxvY2sgc2l6ZSBvbiBDb3JlMiBhbmQgV2Vz dG1lcmUgaGFkIGEgbWF4aW11bQotKyMJYXQgLi4uIDY0IGJ5dGVzIGJsb2NrIHNpemUuIEFuZCBp dCB3YXMgcXVpdGUgYSBtYXhpbXVtLCA0MC02MCUKLSsjCWluIGNvbXBhcmlzb24gdG8gbGFyZ2Vz dCA4S0IgYmxvY2sgc2l6ZS4gQWJvdmUgaW1wcm92ZW1lbnQKLSsjCWNvZWZmaWNpZW50cyBhcmUg Zm9yIHRoZSBsYXJnZXN0IGJsb2NrIHNpemUuCi0rCi0gJDAgPX4gbS8oLipbXC9cXF0pW15cL1xc XSskLzsgJGRpcj0kMTsKLSBwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20i KTsKLSByZXF1aXJlICJ4ODZhc20ucGwiOwotQEAgLTYyLDYgKzg5LDY4IEBAIHN1YiBSQzRfbG9v cCB7Ci0gCSYkZnVuYwkoJG91dCwmRFdQKDAsJGRhdCwkdHksNCkpOwotIH0KLSAKLStpZiAoJGFs dD0wKSB7Ci0rICAjID4yMCUgZmFzdGVyIG9uIEF0b20gYW5kIFNhbmR5IEJyaWRnZVshXSwgOCUg ZmFzdGVyIG9uIE9wdGVyb24sCi0rICAjIGJ1dCB+NDAlIHNsb3dlciBvbiBDb3JlMiBhbmQgV2Vz dG1lcmUuLi4gQXR0ZW1wdCB0byBhZGQgbW92egotKyAgIyBicmluZ3MgZG93biBPcHRlcm9uIGJ5 IDI1JSwgQXRvbSBhbmQgU2FuZHkgQnJpZGdlIGJ5IDE1JSwgeWV0Ci0rICAjIG9uIENvcmUyIHdp dGggbW92eiBpdCdzIGFsbW9zdCAyMCUgc2xvd2VyIHRoYW4gYmVsb3cgYWx0ZXJuYXRpdmUKLSsg ICMgY29kZS4uLiBZZXMsIGl0J3MgYSB0b3RhbCBtZXNzLi4uCi0rICBteSBAWFg9KCR4eCwkb3V0 KTsKLSsgICRSQzRfbG9vcF9tbXggPSBzdWIgewkJIyBTU0UgYWN0dWFsbHkuLi4KLSsgICAgbXkg JGk9c2hpZnQ7Ci0rICAgIG15ICRqPSRpPD0wPzA6JGk+PjE7Ci0rICAgIG15ICRtbT0kaTw9MD8i bW0wIjoibW0iLigkaSYxKTsKLSsKLSsJJmFkZAkoJkxCKCR5eSksJkxCKCR0eCkpOwotKwkmbGVh CShAWFhbMV0sJkRXUCgxLEBYWFswXSkpOwotKwkmcHhvcgkoIm1tMiIsIm1tMCIpCQkJCWlmICgk aT09MCk7Ci0rCSZwc2xscQkoIm1tMSIsOCkJCQkJaWYgKCRpPT0wKTsKLSsJJmFuZAkoQFhYWzFd LDB4ZmYpOwotKwkmcHhvcgkoIm1tMCIsIm1tMCIpCQkJCWlmICgkaTw9MCk7Ci0rCSZtb3YJKCR0 eSwmRFdQKDAsJGRhdCwkeXksNCkpOwotKwkmbW92CSgmRFdQKDAsJGRhdCwkeXksNCksJHR4KTsK LSsJJnB4b3IJKCJtbTEiLCJtbTIiKQkJCQlpZiAoJGk9PTApOwotKwkmbW92CSgmRFdQKDAsJGRh dCwkWFhbMF0sNCksJHR5KTsKLSsJJmFkZAkoJkxCKCR0eSksJkxCKCR0eCkpOwotKwkmbW92ZAko QFhYWzBdLCJtbTciKQkJCQlpZiAoJGk9PTApOwotKwkmbW92CSgkdHgsJkRXUCgwLCRkYXQsQFhY WzFdLDQpKTsKLSsJJnB4b3IJKCJtbTEiLCJtbTEiKQkJCQlpZiAoJGk9PTEpOwotKwkmbW92cQko Im1tMiIsJlFXUCgwLCRpbnApKQkJCWlmICgkaT09MSk7Ci0rCSZtb3ZxCSgmUVdQKC04LChAWFhb MF0sJGlucCkpLCJtbTEiKQkJaWYgKCRpPT0wKTsKLSsJJnBpbnNydwkoJG1tLCZEV1AoMCwkZGF0 LCR0eSw0KSwkaik7Ci0rCi0rCXB1c2gJKEBYWCxzaGlmdChAWFgpKQkJCWlmICgkaT49MCk7Ci0r ICB9Ci0rfSBlbHNlIHsKLSsgICMgVXNpbmcgcGluc3J3IGhlcmUgaW1wcm92ZXMgcGVyZm9ybWFu ZSBvbiBJbnRlbCBDUFVzIGJ5IDItMyUsIGJ1dAotKyAgIyBicmluZ3MgZG93biBBTUQgYnkgNyUu Li4KLSsgICRSQzRfbG9vcF9tbXggPSBzdWIgewotKyAgICBteSAkaT1zaGlmdDsKLSsKLSsJJmFk ZAkoJkxCKCR5eSksJkxCKCR0eCkpOwotKwkmcHNsbHEJKCJtbTEiLDgqKCgkaS0xKSY3KSkJCQlp ZiAoYWJzKCRpKSE9MSk7Ci0rCSZtb3YJKCR0eSwmRFdQKDAsJGRhdCwkeXksNCkpOwotKwkmbW92 CSgmRFdQKDAsJGRhdCwkeXksNCksJHR4KTsKLSsJJm1vdgkoJkRXUCgwLCRkYXQsJHh4LDQpLCR0 eSk7Ci0rCSZpbmMJKCR4eCk7Ci0rCSZhZGQJKCR0eSwkdHgpOwotKwkmbW92egkoJHh4LCZMQigk eHgpKTsJCQkJIyAoKikKLSsJJm1vdnoJKCR0eSwmTEIoJHR5KSk7CQkJCSMgKCopCi0rCSZweG9y CSgibW0yIiwkaT09MT8ibW0wIjoibW0xIikJCWlmICgkaT49MCk7Ci0rCSZtb3ZxCSgibW0wIiwm UVdQKDAsJGlucCkpCQkJaWYgKCRpPD0wKTsKLSsJJm1vdnEJKCZRV1AoLTgsKCRvdXQsJGlucCkp LCJtbTIiKQkJaWYgKCRpPT0wKTsKLSsJJm1vdgkoJHR4LCZEV1AoMCwkZGF0LCR4eCw0KSk7Ci0r CSZtb3ZkCSgkaT4wPyJtbTEiOiJtbTIiLCZEV1AoMCwkZGF0LCR0eSw0KSk7Ci0rCi0rCSMgKCop CVRoaXMgaXMgdGhlIGtleSB0byBDb3JlMiBhbmQgV2VzdG1lcmUgcGVyZm9ybWFuY2UuCi0rCSMJ V2hpdGhvdXQgbW92eiBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uIGxvZ2ljIGNvbmZ1c2VzCi0rCSMJ aXRzZWxmIGFuZCBmYWlscyB0byByZW9yZGVyIGxvYWRzIGFuZCBzdG9yZXMuIFByb2JsZW0KLSsJ IwlhcHBlYXJzIHRvIGJlIGZpeGVkIGluIFNhbmR5IEJyaWRnZS4uLgotKyAgfQotK30KLSsKLSsm ZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7Ci0rCi0gIyB2b2lkIFJDNChSQzRf S0VZICprZXksc2l6ZV90IGxlbixjb25zdCB1bnNpZ25lZCBjaGFyICppbnAsdW5zaWduZWQgY2hh ciAqb3V0KTsKLSAmZnVuY3Rpb25fYmVnaW4oIlJDNCIpOwotIAkmbW92CSgkZGF0LCZ3cGFyYW0o MCkpOwkjIGxvYWQga2V5IHNjaGVkdWxlIHBvaW50ZXIKLUBAIC05NCwxMSArMTgzLDU2IEBAIHN1 YiBSQzRfbG9vcCB7Ci0gCSZhbmQJKCR0eSwtNCk7CQkjIGhvdyBtYW55IDQtYnl0ZSBjaHVua3M/ Ci0gCSZqegkoJmxhYmVsKCJsb29wMSIpKTsKLSAKLSsJJnRlc3QJKCR0eSwtOCk7Ci0rCSZtb3YJ KCZ3cGFyYW0oMyksJG91dCk7CSMgJG91dCBhcyBhY2N1bXVsYXRvciBpbiB0aGVzZSBsb29wcwot KwkmanoJKCZsYWJlbCgiZ280bG9vcDQiKSk7Ci0rCi0rCSZwaWNtZXVwKCRvdXQsIk9QRU5TU0xf aWEzMmNhcF9QIik7Ci0rCSZidAkoJkRXUCgwLCRvdXQpLDI2KTsJIyBjaGVjayBTU0UyIGJpdCBb Y291bGQgaGF2ZSBiZWVuIE1NWF0KLSsJJmpuYwkoJmxhYmVsKCJnbzRsb29wNCIpKTsKLSsKLSsJ Jm1vdgkoJG91dCwmd3BhcmFtKDMpKQlpZiAoISRhbHQpOwotKwkmbW92ZAkoIm1tNyIsJndwYXJh bSgzKSkJaWYgKCRhbHQpOwotKwkmYW5kCSgkdHksLTgpOwotKwkmbGVhCSgkdHksJkRXUCgtOCwk aW5wLCR0eSkpOwotKwkmbW92CSgmRFdQKC00LCRkYXQpLCR0eSk7CSMgc2F2ZSBpbnB1dCsobGVu LzgpKjgtOAotKwotKwkmJFJDNF9sb29wX21teCgtMSk7Ci0rCSZqbXAoJmxhYmVsKCJsb29wX21t eF9lbnRlciIpKTsKLSsKLSsJJnNldF9sYWJlbCgibG9vcF9tbXgiLDE2KTsKLSsJCSYkUkM0X2xv b3BfbW14KDApOwotKwkmc2V0X2xhYmVsKCJsb29wX21teF9lbnRlciIpOwotKwkJZm9yIAkoJGk9 MTskaTw4OyRpKyspIHsgJiRSQzRfbG9vcF9tbXgoJGkpOyB9Ci0rCQkmbW92CSgkdHksJHl5KTsK LSsJCSZ4b3IJKCR5eSwkeXkpOwkJIyB0aGlzIGlzIHNlY29uZCBrZXkgdG8gQ29yZTIKLSsJCSZt b3YJKCZMQigkeXkpLCZMQigkdHkpKTsJIyBhbmQgV2VzdG1lcmUgcGVyZm9ybWFuY2UuLi4KLSsJ CSZjbXAJKCRpbnAsJkRXUCgtNCwkZGF0KSk7Ci0rCQkmbGVhCSgkaW5wLCZEV1AoOCwkaW5wKSk7 Ci0rCSZqYgkoJmxhYmVsKCJsb29wX21teCIpKTsKLSsKLSsgICAgaWYgKCRhbHQpIHsKLSsJJm1v dmQJKCRvdXQsIm1tNyIpOwotKwkmcHhvcgkoIm1tMiIsIm1tMCIpOwotKwkmcHNsbHEJKCJtbTEi LDgpOwotKwkmcHhvcgkoIm1tMSIsIm1tMiIpOwotKwkmbW92cQkoJlFXUCgtOCwkb3V0LCRpbnAp LCJtbTEiKTsKLSsgICAgfSBlbHNlIHsKLSsJJnBzbGxxCSgibW0xIiw1Nik7Ci0rCSZweG9yCSgi bW0yIiwibW0xIik7Ci0rCSZtb3ZxCSgmUVdQKC04LCRvdXQsJGlucCksIm1tMiIpOwotKyAgICB9 Ci0rCSZlbW1zCSgpOwotKwotKwkmY21wCSgkaW5wLCZ3cGFyYW0oMSkpOwkjIGNvbXBhcmUgdG8g aW5wdXQrbGVuCi0rCSZqZQkoJmxhYmVsKCJkb25lIikpOwotKwkmam1wCSgmbGFiZWwoImxvb3Ax IikpOwotKwotKyZzZXRfbGFiZWwoImdvNGxvb3A0IiwxNik7Ci0gCSZsZWEJKCR0eSwmRFdQKC00 LCRpbnAsJHR5KSk7Ci0gCSZtb3YJKCZ3cGFyYW0oMiksJHR5KTsJIyBzYXZlIGlucHV0KyhsZW4v NCkqNC00Ci0tCSZtb3YJKCZ3cGFyYW0oMyksJG91dCk7CSMgJG91dCBhcyBhY2N1bXVsYXRvciBp biB0aGlzIGxvb3AKLSAKLS0JJnNldF9sYWJlbCgibG9vcDQiLDE2KTsKLSsJJnNldF9sYWJlbCgi bG9vcDQiKTsKLSAJCWZvciAoJGk9MDskaTw0OyRpKyspIHsgUkM0X2xvb3AoJGkpOyB9Ci0gCQkm cm9yCSgkb3V0LDgpOwotIAkJJnhvcgkoJG91dCwmRFdQKDAsJGlucCkpOwotQEAgLTE1MSw3ICsy ODUsNyBAQCBzdWIgUkM0X2xvb3AgewotIAotICZzZXRfbGFiZWwoImRvbmUiKTsKLSAJJmRlYwko JkxCKCR4eCkpOwotLQkmbW92CSgmQlAoLTQsJGRhdCksJkxCKCR5eSkpOwkjIHNhdmUga2V5LT55 Ci0rCSZtb3YJKCZEV1AoLTQsJGRhdCksJHl5KTsJCSMgc2F2ZSBrZXktPnkKLSAJJm1vdgkoJkJQ KC04LCRkYXQpLCZMQigkeHgpKTsJIyBzYXZlIGtleS0+eAotICZzZXRfbGFiZWwoImFib3J0Iik7 Ci0gJmZ1bmN0aW9uX2VuZCgiUkM0Iik7Ci1AQCAtMTY0LDEyICsyOTgsOSBAQCAkaWRpPSJlYnAi OwotICRpZG89ImVjeCI7Ci0gJGlkeD0iZWR4IjsKLSAKLS0mZXh0ZXJuYWxfbGFiZWwoIk9QRU5T U0xfaWEzMmNhcF9QIik7Ci0tCi0gJHNldGtleWZ1bmMgPSAiUkM0X3NldF9rZXkiOwotICRzZXRr ZXlmdW5jID0gInByaXZhdGVfUkM0X3NldF9rZXkiIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKLSAK LS0KLSAjIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LGludCBsZW4sY29uc3QgdW5zaWdu ZWQgY2hhciAqZGF0YSk7Ci0gJmZ1bmN0aW9uX2JlZ2luKCRzZXRrZXlmdW5jKTsKLSAJJm1vdgko JG91dCwmd3BhcmFtKDApKTsJCSMgbG9hZCBrZXkKLUBAIC0yNTgsMTQgKzM4OSwyMSBAQCAkc2V0 a2V5ZnVuYyA9ICJwcml2YXRlX1JDNF9zZXRfa2V5IiBpZiAoCi0gCSZibGluZHBvcCgiZWF4Iik7 Ci0gCSZsZWEJKCJlYXgiLCZEV1AoJmxhYmVsKCJvcHRzIikuIi0iLiZsYWJlbCgicGljX3BvaW50 IiksImVheCIpKTsKLSAJJnBpY21ldXAoImVkeCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7Ci0tCSZi dAkoJkRXUCgwLCJlZHgiKSwyMCk7Ci0tCSZqbmMJKCZsYWJlbCgic2tpcCIpKTsKLS0JICAmYWRk CSgiZWF4IiwxMik7Ci0tCSZzZXRfbGFiZWwoInNraXAiKTsKLSsJJm1vdgkoImVkeCIsJkRXUCgw LCJlZHgiKSk7Ci0rCSZidAkoImVkeCIsMjApOwotKwkmamMJKCZsYWJlbCgiMXhjaGFyIikpOwot KwkmYnQJKCJlZHgiLDI2KTsKLSsJJmpuYwkoJmxhYmVsKCJyZXQiKSk7Ci0rCSZhZGQJKCJlYXgi LDI1KTsKLSsJJnJldAkoKTsKLSsmc2V0X2xhYmVsKCIxeGNoYXIiKTsKLSsJJmFkZAkoImVheCIs MTIpOwotKyZzZXRfbGFiZWwoInJldCIpOwotIAkmcmV0CSgpOwotICZzZXRfbGFiZWwoIm9wdHMi LDY0KTsKLSAmYXNjaXoJKCJyYzQoNHgsaW50KSIpOwotICZhc2NpegkoInJjNCgxeCxjaGFyKSIp OwotKyZhc2NpegkoInJjNCg4eCxtbXgpIik7Ci0gJmFzY2l6CSgiUkM0IGZvciB4ODYsIENSWVBU T0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKLSAmYWxpZ24JKDY0KTsKLSAmZnVuY3Rp b25fZW5kX0IoIlJDNF9vcHRpb25zIik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZC9jcnlwdG8v c2hhL2FzbS9zaGExLXg4Nl82NC5wbC5pbnRlbG9wdHMgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3No YS9hc20vc2hhMS14ODZfNjQucGwKLS0tLSBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vc2hhL2FzbS9z aGExLXg4Nl82NC5wbC5pbnRlbG9wdHMJMjAxMC0wMS0xNyAxNzo1ODo1Ni4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wZC9jcnlwdG8vc2hhL2FzbS9zaGExLXg4Nl82NC5wbAkyMDEx LTA4LTI0IDEyOjUwOjU2LjAwMDAwMDAwMCArMDIwMAotQEAgLTEsNCArMSw0IEBACi0tIyEvdXNy L2Jpbi9lbnYgcGVybAotKyMhL3Vzci9iaW4vcGVybAotICMKLSAjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIyBX cml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9w ZW5TU0wKLUBAIC0xNiw3ICsxNiw3IEBACi0gIyBUaGVyZSB3YXMgc3VnZ2VzdGlvbiB0byBtZWNo YW5pY2FsbHkgdHJhbnNsYXRlIDMyLWJpdCBjb2RlLCBidXQgSQotICMgZGlzbWlzc2VkIGl0LCBy ZWFzb25pbmcgdGhhdCB4ODZfNjQgb2ZmZXJzIGVub3VnaCByZWdpc3RlciBiYW5rCi0gIyBjYXBh Y2l0eSB0byBmdWxseSB1dGlsaXplIFNIQS0xIHBhcmFsbGVsaXNtLiBUaGVyZWZvcmUgdGhpcyBm cmVzaAotLSMgaW1wbGVtZW50YXRpb246LSkgSG93ZXZlciEgV2hpbGUgNjQtYml0IGNvZGUgZG9l cyBwZXJmb3JtcyBiZXR0ZXIKLSsjIGltcGxlbWVudGF0aW9uOi0pIEhvd2V2ZXIhIFdoaWxlIDY0 LWJpdCBjb2RlIGRvZXMgcGVyZm9ybSBiZXR0ZXIKLSAjIG9uIE9wdGVyb24sIEkgZmFpbGVkIHRv IGJlYXQgMzItYml0IGFzc2VtYmxlciBvbiBFTTY0VCBjb3JlLiBXZWxsLAotICMgeDg2XzY0IGRv ZXMgb2ZmZXIgbGFyZ2VyICphZGRyZXNzYWJsZSogYmFuaywgYnV0IG91dC1vZi1vcmRlciBjb3Jl Ci0gIyByZWFjaGVzIGZvciBldmVuIG1vcmUgcmVnaXN0ZXJzIHRocm91Z2ggZHluYW1pYyBhbGlh c2luZywgYW5kIEVNNjRUCi1AQCAtMjksNiArMjksMzggQEAKLSAjIFhlb24gUDQJKzY1JQkJKzAl CQk5LjkKLSAjIENvcmUyCQkrNjAlCQkrMTAlCQk3LjAKLSAKLSsjIEF1Z3VzdCAyMDA5LgotKyMK LSsjIFRoZSBjb2RlIHdhcyByZXZpc2VkIHRvIG1pbmltaXplIGNvZGUgc2l6ZSBhbmQgdG8gbWF4 aW1pemUKLSsjICJkaXN0YW5jZSIgYmV0d2VlbiBpbnN0cnVjdGlvbnMgcHJvZHVjaW5nIGlucHV0 IHRvICdsZWEnCi0rIyBpbnN0cnVjdGlvbiBhbmQgdGhlICdsZWEnIGluc3RydWN0aW9uIGl0c2Vs Ziwgd2hpY2ggaXMgZXNzZW50aWFsCi0rIyBmb3IgSW50ZWwgQXRvbSBjb3JlLgotKwotKyMgT2N0 b2JlciAyMDEwLgotKyMKLSsjIEFkZCBTU1NFMywgU3VwcGxlbWVudGFsWyFdIFNTRTMsIGltcGxl bWVudGF0aW9uLiBUaGUgaWRlYSBiZWhpbmQgaXQKLSsjIGlzIHRvIG9mZmxvYWQgbWVzc2FnZSBz Y2hlZHVsZSBkZW5vdGVkIGJ5IFd0IGluIE5JU1Qgc3BlY2lmaWNhdGlvbiwKLSsjIG9yIFh1cGRh dGUgaW4gT3BlblNTTCBzb3VyY2UsIHRvIFNJTUQgdW5pdC4gU2VlIHNoYTEtNTg2LnBsIG1vZHVs ZQotKyMgZm9yIGJhY2tncm91bmQgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFRoZSBvbmx5 IGRpZmZlcmVuY2UgZnJvbQotKyMgMzItYml0IGNvZGUgaXMgdGhhdCA2NC1iaXQgY29kZSBkb2Vz bid0IGhhdmUgdG8gc3BpbGwgQFhbXSBlbGVtZW50cwotKyMgdG8gZnJlZSB0ZW1wb3JhcnkgcmVn aXN0ZXJzLgotKwotKyMgQXByaWwgMjAxMS4KLSsjCi0rIyBBZGQgQVZYIGNvZGUgcGF0aC4gU2Vl IHNoYTEtNTg2LnBsIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgotKwotKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK LSsjIEN1cnJlbnQgcGVyZm9ybWFuY2UgaXMgc3VtbWFyaXplZCBpbiBmb2xsb3dpbmcgdGFibGUu IE51bWJlcnMgYXJlCi0rIyBDUFUgY2xvY2sgY3ljbGVzIHNwZW50IHRvIHByb2Nlc3Mgc2luZ2xl IGJ5dGUgKGxlc3MgaXMgYmV0dGVyKS4KLSsjCi0rIwkJeDg2XzY0CQlTU1NFMwkJQVZYCi0rIyBQ NAkJOS44CQktCi0rIyBPcHRlcm9uCTYuNgkJLQotKyMgQ29yZTIJCTYuNwkJNi4xLysxMCUJLQot KyMgQXRvbQkJMTEuMAkJOS43LysxMyUJLQotKyMgV2VzdG1lcmUJNy4xCQk1LjYvKzI3JQktCi0r IyBTYW5keSBCcmlkZ2UJNy45CQk2LjMvKzI1JQk1LjIvKzUxJQotKwotICRmbGF2b3VyID0gc2hp ZnQ7Ci0gJG91dHB1dCAgPSBzaGlmdDsKLSBpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0 ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9Ci1AQCAtNDAsNiArNzIsMTMgQEAgJDAgPX4g bS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKLSAoICR4bGF0ZT0iJHtkaXJ9Li4vLi4v cGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCi0gZGllICJjYW4ndCBs b2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKLSAKLSskYXZ4PTEgaWYgKGAkRU5We0NDfSAtV2EsLXYg LWMgLW8gL2Rldi9udWxsIC14IGFzc2VtYmxlciAvZGV2L251bGwgMj4mMWAKLSsJCT1+IC9HTlUg YXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgotKwkgICAkMT49Mi4xOSk7Ci0r JGF2eD0xIGlmICghJGF2eCAmJiAkZmxhdm91ciA9fiAvbmFzbS8gJiYKLSsJICAgYG5hc20gLXYg Mj4mMWAgPX4gL05BU00gdmVyc2lvbiAoWzItOV1cLlswLTldKykvICYmCi0rCSAgICQxPj0yLjAz KTsKLSsKLSBvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOwotIAot ICRjdHg9IiVyZGkiOwkjIDFzdCBhcmcKLUBAIC01MSwxOTYgKzkwLDk5NCBAQCAkY3R4PSIlcjgi OwotICRpbnA9IiVyOSI7Ci0gJG51bT0iJXIxMCI7Ci0gCi0tJHhpPSIlZWF4IjsKLS0kdDA9IiVl YngiOwotLSR0MT0iJWVjeCI7Ci0tJEE9IiVlZHgiOwotLSRCPSIlZXNpIjsKLS0kQz0iJWVkaSI7 Ci0tJEQ9IiVlYnAiOwotLSRFPSIlcjExZCI7Ci0tJFQ9IiVyMTJkIjsKLS0KLS1AVj0oJEEsJEIs JEMsJEQsJEUsJFQpOwotKyR0MD0iJWVheCI7Ci0rJHQxPSIlZWJ4IjsKLSskdDI9IiVlY3giOwot K0B4aT0oIiVlZHgiLCIlZWJwIik7Ci0rJEE9IiVlc2kiOwotKyRCPSIlZWRpIjsKLSskQz0iJXIx MWQiOwotKyREPSIlcjEyZCI7Ci0rJEU9IiVyMTNkIjsKLSAKLS1zdWIgUFJPTE9HVUUgewotLW15 ICRmdW5jPXNoaWZ0OwotLSRjb2RlLj08PF9fXzsKLS0uZ2xvYmwJJGZ1bmMKLS0udHlwZQkkZnVu YyxcQGZ1bmN0aW9uLDMKLS0uYWxpZ24JMTYKLS0kZnVuYzoKLS0JcHVzaAklcmJ4Ci0tCXB1c2gJ JXJicAotLQlwdXNoCSVyMTIKLS0JbW92CSVyc3AsJXIxMQotLQltb3YJJXJkaSwkY3R4CSMgcmVh c3NpZ25lZCBhcmd1bWVudAotLQlzdWIJXCRgOCsxNio0YCwlcnNwCi0tCW1vdgklcnNpLCRpbnAJ IyByZWFzc2lnbmVkIGFyZ3VtZW50Ci0tCWFuZAlcJC02NCwlcnNwCi0tCW1vdgklcmR4LCRudW0J IyByZWFzc2lnbmVkIGFyZ3VtZW50Ci0tCW1vdgklcjExLGAxNio0YCglcnNwKQotLS5McHJvbG9n dWU6Ci0tCi0tCW1vdgkwKCRjdHgpLCRBCi0tCW1vdgk0KCRjdHgpLCRCCi0tCW1vdgk4KCRjdHgp LCRDCi0tCW1vdgkxMigkY3R4KSwkRAotLQltb3YJMTYoJGN0eCksJEUKLS1fX18KLS19Ci0tCi0t c3ViIEVQSUxPR1VFIHsKLS1teSAkZnVuYz1zaGlmdDsKLS0kY29kZS49PDxfX187Ci0tCW1vdglg MTYqNGAoJXJzcCksJXJzaQotLQltb3YJKCVyc2kpLCVyMTIKLS0JbW92CTgoJXJzaSksJXJicAot LQltb3YJMTYoJXJzaSksJXJieAotLQlsZWEJMjQoJXJzaSksJXJzcAotLS5MZXBpbG9ndWU6Ci0t CXJldAotLS5zaXplCSRmdW5jLC4tJGZ1bmMKLS1fX18KLS19Ci0rQFY9KCRBLCRCLCRDLCRELCRF KTsKLSAKLSBzdWIgQk9EWV8wMF8xOSB7Ci0tbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRob3N0 KT1AXzsKLStteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOwotIG15ICRqPSRpKzE7Ci0gJGNvZGUu PTw8X19fIGlmICgkaT09MCk7Ci0tCW1vdglgNCokaWAoJGlucCksJHhpCQotLQlgImJzd2FwCSR4 aSIJaWYoIWRlZmluZWQoJGhvc3QpKWAKLS0JbW92CSR4aSxgNCokaWAoJXJzcCkKLSsJbW92CWA0 KiRpYCgkaW5wKSwkeGlbMF0KLSsJYnN3YXAJJHhpWzBdCi0rCW1vdgkkeGlbMF0sYDQqJGlgKCVy c3ApCi0gX19fCi0gJGNvZGUuPTw8X19fIGlmICgkaTwxNSk7Ci0tCWxlYQkweDVhODI3OTk5KCR4 aSwkZSksJGYKLSAJbW92CSRjLCR0MAotLQltb3YJYDQqJGpgKCRpbnApLCR4aQotLQltb3YJJGEs JGUKLSsJbW92CWA0KiRqYCgkaW5wKSwkeGlbMV0KLSsJbW92CSRhLCR0MgotIAl4b3IJJGQsJHQw Ci0tCWAiYnN3YXAJJHhpIglpZighZGVmaW5lZCgkaG9zdCkpYAkKLS0Jcm9sCVwkNSwkZQotKwli c3dhcAkkeGlbMV0KLSsJcm9sCVwkNSwkdDIKLSsJbGVhCTB4NWE4Mjc5OTkoJHhpWzBdLCRlKSwk ZQotIAlhbmQJJGIsJHQwCi0tCW1vdgkkeGksYDQqJGpgKCVyc3ApCi0tCWFkZAkkZSwkZgotKwlt b3YJJHhpWzFdLGA0KiRqYCglcnNwKQotKwlhZGQJJHQyLCRlCi0gCXhvcgkkZCwkdDAKLSAJcm9s CVwkMzAsJGIKLS0JYWRkCSR0MCwkZgotKwlhZGQJJHQwLCRlCi0gX19fCi0gJGNvZGUuPTw8X19f IGlmICgkaT49MTUpOwotLQlsZWEJMHg1YTgyNzk5OSgkeGksJGUpLCRmCi0tCW1vdglgNCooJGol MTYpYCglcnNwKSwkeGkKLSsJbW92CWA0KigkaiUxNilgKCVyc3ApLCR4aVsxXQotIAltb3YJJGMs JHQwCi0tCW1vdgkkYSwkZQotLQl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3ApLCR4aQotKwltb3YJ JGEsJHQyCi0rCXhvcglgNCooKCRqKzIpJTE2KWAoJXJzcCksJHhpWzFdCi0gCXhvcgkkZCwkdDAK LS0Jcm9sCVwkNSwkZQotLQl4b3IJYDQqKCgkais4KSUxNilgKCVyc3ApLCR4aQotKwlyb2wJXCQ1 LCR0MgotKwl4b3IJYDQqKCgkais4KSUxNilgKCVyc3ApLCR4aVsxXQotIAlhbmQJJGIsJHQwCi0t CWFkZAkkZSwkZgotLQl4b3IJYDQqKCgkaisxMyklMTYpYCglcnNwKSwkeGkKLSsJbGVhCTB4NWE4 Mjc5OTkoJHhpWzBdLCRlKSwkZQotKwl4b3IJYDQqKCgkaisxMyklMTYpYCglcnNwKSwkeGlbMV0K LSAJeG9yCSRkLCR0MAotKwlyb2wJXCQxLCR4aVsxXQotKwlhZGQJJHQyLCRlCi0gCXJvbAlcJDMw LCRiCi0tCWFkZAkkdDAsJGYKLS0Jcm9sCVwkMSwkeGkKLS0JbW92CSR4aSxgNCooJGolMTYpYCgl cnNwKQotKwltb3YJJHhpWzFdLGA0KigkaiUxNilgKCVyc3ApCi0rCWFkZAkkdDAsJGUKLSBfX18K LSt1bnNoaWZ0KEB4aSxwb3AoQHhpKSk7Ci0gfQotIAotIHN1YiBCT0RZXzIwXzM5IHsKLS1teSAo JGksJGEsJGIsJGMsJGQsJGUsJGYpPUBfOwotK215ICgkaSwkYSwkYiwkYywkZCwkZSk9QF87Ci0g bXkgJGo9JGkrMTsKLSBteSAkSz0oJGk8NDApPzB4NmVkOWViYTE6MHhjYTYyYzFkNjsKLSAkY29k ZS49PDxfX18gaWYgKCRpPDc5KTsKLS0JbGVhCSRLKCR4aSwkZSksJGYKLS0JbW92CWA0KigkaiUx NilgKCVyc3ApLCR4aQotKwltb3YJYDQqKCRqJTE2KWAoJXJzcCksJHhpWzFdCi0gCW1vdgkkYywk dDAKLS0JbW92CSRhLCRlCi0tCXhvcglgNCooKCRqKzIpJTE2KWAoJXJzcCksJHhpCi0rCW1vdgkk YSwkdDIKLSsJeG9yCWA0KigoJGorMiklMTYpYCglcnNwKSwkeGlbMV0KLSAJeG9yCSRiLCR0MAot LQlyb2wJXCQ1LCRlCi0tCXhvcglgNCooKCRqKzgpJTE2KWAoJXJzcCksJHhpCi0rCXJvbAlcJDUs JHQyCi0rCWxlYQkkSygkeGlbMF0sJGUpLCRlCi0rCXhvcglgNCooKCRqKzgpJTE2KWAoJXJzcCks JHhpWzFdCi0gCXhvcgkkZCwkdDAKLS0JYWRkCSRlLCRmCi0tCXhvcglgNCooKCRqKzEzKSUxNilg KCVyc3ApLCR4aQotKwlhZGQJJHQyLCRlCi0rCXhvcglgNCooKCRqKzEzKSUxNilgKCVyc3ApLCR4 aVsxXQotIAlyb2wJXCQzMCwkYgotLQlhZGQJJHQwLCRmCi0tCXJvbAlcJDEsJHhpCi0rCWFkZAkk dDAsJGUKLSsJcm9sCVwkMSwkeGlbMV0KLSBfX18KLSAkY29kZS49PDxfX18gaWYgKCRpPDc2KTsK LS0JbW92CSR4aSxgNCooJGolMTYpYCglcnNwKQotKwltb3YJJHhpWzFdLGA0KigkaiUxNilgKCVy c3ApCi0gX19fCi0gJGNvZGUuPTw8X19fIGlmICgkaT09NzkpOwotLQlsZWEJJEsoJHhpLCRlKSwk ZgotIAltb3YJJGMsJHQwCi0tCW1vdgkkYSwkZQotKwltb3YJJGEsJHQyCi0gCXhvcgkkYiwkdDAK LS0Jcm9sCVwkNSwkZQotKwlsZWEJJEsoJHhpWzBdLCRlKSwkZQotKwlyb2wJXCQ1LCR0MgotIAl4 b3IJJGQsJHQwCi0tCWFkZAkkZSwkZgotKwlhZGQJJHQyLCRlCi0gCXJvbAlcJDMwLCRiCi0tCWFk ZAkkdDAsJGYKLSsJYWRkCSR0MCwkZQotIF9fXwotK3Vuc2hpZnQoQHhpLHBvcChAeGkpKTsKLSB9 Ci0gCi0gc3ViIEJPRFlfNDBfNTkgewotLW15ICgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87Ci0r bXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKLSBteSAkaj0kaSsxOwotICRjb2RlLj08PF9fXzsK LS0JbGVhCTB4OGYxYmJjZGMoJHhpLCRlKSwkZgotLQltb3YJYDQqKCRqJTE2KWAoJXJzcCksJHhp Ci0tCW1vdgkkYiwkdDAKLS0JbW92CSRiLCR0MQotLQl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3Ap LCR4aQotLQltb3YJJGEsJGUKLS0JYW5kCSRjLCR0MAotLQl4b3IJYDQqKCgkais4KSUxNilgKCVy c3ApLCR4aQotLQlvcgkkYywkdDEKLS0Jcm9sCVwkNSwkZQotLQl4b3IJYDQqKCgkaisxMyklMTYp YCglcnNwKSwkeGkKLS0JYW5kCSRkLCR0MQotLQlhZGQJJGUsJGYKLS0Jcm9sCVwkMSwkeGkKLS0J b3IJJHQxLCR0MAotKwltb3YJYDQqKCRqJTE2KWAoJXJzcCksJHhpWzFdCi0rCW1vdgkkYywkdDAK LSsJbW92CSRjLCR0MQotKwl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3ApLCR4aVsxXQotKwlhbmQJ JGQsJHQwCi0rCW1vdgkkYSwkdDIKLSsJeG9yCWA0KigoJGorOCklMTYpYCglcnNwKSwkeGlbMV0K LSsJeG9yCSRkLCR0MQotKwlsZWEJMHg4ZjFiYmNkYygkeGlbMF0sJGUpLCRlCi0rCXJvbAlcJDUs JHQyCi0rCXhvcglgNCooKCRqKzEzKSUxNilgKCVyc3ApLCR4aVsxXQotKwlhZGQJJHQwLCRlCi0r CWFuZAkkYiwkdDEKLSsJcm9sCVwkMSwkeGlbMV0KLSsJYWRkCSR0MSwkZQotIAlyb2wJXCQzMCwk YgotLQltb3YJJHhpLGA0KigkaiUxNilgKCVyc3ApCi0tCWFkZAkkdDAsJGYKLSsJbW92CSR4aVsx XSxgNCooJGolMTYpYCglcnNwKQotKwlhZGQJJHQyLCRlCi0gX19fCi0rdW5zaGlmdChAeGkscG9w KEB4aSkpOwotIH0KLSAKLS0kY29kZT0iLnRleHRcbiI7Ci0rJGNvZGUuPTw8X19fOwotKy50ZXh0 Ci0rLmV4dGVybglPUEVOU1NMX2lhMzJjYXBfWAotKwotKy5nbG9ibAlzaGExX2Jsb2NrX2RhdGFf b3JkZXIKLSsudHlwZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsXEBmdW5jdGlvbiwzCi0rLmFsaWdu CTE2Ci0rc2hhMV9ibG9ja19kYXRhX29yZGVyOgotKwltb3YJT1BFTlNTTF9pYTMyY2FwX1grMCgl cmlwKSwlcjlkCi0rCW1vdglPUEVOU1NMX2lhMzJjYXBfWCs0KCVyaXApLCVyOGQKLSsJdGVzdAlc JGAxPDw5YCwlcjhkCQkjIGNoZWNrIFNTU0UzIGJpdAotKwlqegkuTGlhbHUKLStfX18KLSskY29k ZS49PDxfX18gaWYgKCRhdngpOwotKwlhbmQJXCRgMTw8MjhgLCVyOGQJCSMgbWFzayBBVlggYml0 Ci0rCWFuZAlcJGAxPDwzMGAsJXI5ZAkJIyBtYXNrICJJbnRlbCBDUFUiIGJpdAotKwlvcgklcjlk LCVyOGQKLSsJY21wCVwkYDE8PDI4fDE8PDMwYCwlcjhkCi0rCWplCV9hdnhfc2hvcnRjdXQKLStf X18KLSskY29kZS49PDxfX187Ci0rCWptcAlfc3NzZTNfc2hvcnRjdXQKLSsKLSsuYWxpZ24JMTYK LSsuTGlhbHU6Ci0rCXB1c2gJJXJieAotKwlwdXNoCSVyYnAKLSsJcHVzaAklcjEyCi0rCXB1c2gJ JXIxMwotKwltb3YJJXJzcCwlcjExCi0rCW1vdgklcmRpLCRjdHgJIyByZWFzc2lnbmVkIGFyZ3Vt ZW50Ci0rCXN1YglcJGA4KzE2KjRgLCVyc3AKLSsJbW92CSVyc2ksJGlucAkjIHJlYXNzaWduZWQg YXJndW1lbnQKLSsJYW5kCVwkLTY0LCVyc3AKLSsJbW92CSVyZHgsJG51bQkjIHJlYXNzaWduZWQg YXJndW1lbnQKLSsJbW92CSVyMTEsYDE2KjRgKCVyc3ApCi0rLkxwcm9sb2d1ZToKLSsKLSsJbW92 CTAoJGN0eCksJEEKLSsJbW92CTQoJGN0eCksJEIKLSsJbW92CTgoJGN0eCksJEMKLSsJbW92CTEy KCRjdHgpLCRECi0rCW1vdgkxNigkY3R4KSwkRQotKwlqbXAJLkxsb29wCi0gCi0tJlBST0xPR1VF KCJzaGExX2Jsb2NrX2RhdGFfb3JkZXIiKTsKLS0kY29kZS49Ii5hbGlnbgk0XG4uTGxvb3A6XG4i OwotKy5hbGlnbgkxNgotKy5MbG9vcDoKLStfX18KLSBmb3IoJGk9MDskaTwyMDskaSsrKQl7ICZC T0RZXzAwXzE5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQotIGZvcig7JGk8NDA7JGkr KykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KLSBmb3IoOyRp PDYwOyRpKyspCXsgJkJPRFlfNDBfNTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Ci0g Zm9yKDskaTw4MDskaSsrKQl7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYp KTsgfQotICRjb2RlLj08PF9fXzsKLS0JYWRkCTAoJGN0eCksJEUKLS0JYWRkCTQoJGN0eCksJFQK LS0JYWRkCTgoJGN0eCksJEEKLS0JYWRkCTEyKCRjdHgpLCRCCi0tCWFkZAkxNigkY3R4KSwkQwot LQltb3YJJEUsMCgkY3R4KQotLQltb3YJJFQsNCgkY3R4KQotLQltb3YJJEEsOCgkY3R4KQotLQlt b3YJJEIsMTIoJGN0eCkKLS0JbW92CSRDLDE2KCRjdHgpCi0tCi0tCXhjaGcJJEUsJEEJIyBtb3YJ JEUsJEEKLS0JeGNoZwkkVCwkQgkjIG1vdgkkVCwkQgotLQl4Y2hnCSRFLCRDCSMgbW92CSRBLCRD Ci0tCXhjaGcJJFQsJEQJIyBtb3YJJEIsJEQKLS0JCQkjIG1vdgkkQywkRQotLQlsZWEJYDE2KjRg KCRpbnApLCRpbnAKLSsJYWRkCTAoJGN0eCksJEEKLSsJYWRkCTQoJGN0eCksJEIKLSsJYWRkCTgo JGN0eCksJEMKLSsJYWRkCTEyKCRjdHgpLCRECi0rCWFkZAkxNigkY3R4KSwkRQotKwltb3YJJEEs MCgkY3R4KQotKwltb3YJJEIsNCgkY3R4KQotKwltb3YJJEMsOCgkY3R4KQotKwltb3YJJEQsMTIo JGN0eCkKLSsJbW92CSRFLDE2KCRjdHgpCi0rCi0gCXN1YglcJDEsJG51bQotKwlsZWEJYDE2KjRg KCRpbnApLCRpbnAKLSAJam56CS5MbG9vcAotKwotKwltb3YJYDE2KjRgKCVyc3ApLCVyc2kKLSsJ bW92CSglcnNpKSwlcjEzCi0rCW1vdgk4KCVyc2kpLCVyMTIKLSsJbW92CTE2KCVyc2kpLCVyYnAK LSsJbW92CTI0KCVyc2kpLCVyYngKLSsJbGVhCTMyKCVyc2kpLCVyc3AKLSsuTGVwaWxvZ3VlOgot KwlyZXQKLSsuc2l6ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGExX2Jsb2NrX2RhdGFfb3Jk ZXIKLSBfX18KLS0mRVBJTE9HVUUoInNoYTFfYmxvY2tfZGF0YV9vcmRlciIpOwotK3t7ewotK215 ICRYaT00OwotK215IEBYPW1hcCgiJXhtbSRfIiwoNC4uNywwLi4zKSk7Ci0rbXkgQFR4PW1hcCgi JXhtbSRfIiwoOC4uMTApKTsKLStteSBAVj0oJEEsJEIsJEMsJEQsJEUpPSgiJWVheCIsIiVlYngi LCIlZWN4IiwiJWVkeCIsIiVlYnAiKTsJIyBzaXplIG9wdGltaXphdGlvbgotK215IEBUPSgiJWVz aSIsIiVlZGkiKTsKLStteSAkaj0wOwotK215ICRLX1hYX1hYPSIlcjExIjsKLSsKLStteSAkX3Jv bD1zdWIgeyAmcm9sKEBfKSB9OwotK215ICRfcm9yPXN1YiB7ICZyb3IoQF8pIH07Ci0rCi0gJGNv ZGUuPTw8X19fOwotLS5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIHg4Nl82NCwgQ1JZ UFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKLSsudHlwZQlzaGExX2Jsb2NrX2RhdGFf b3JkZXJfc3NzZTMsXEBmdW5jdGlvbiwzCi0gLmFsaWduCTE2Ci0rc2hhMV9ibG9ja19kYXRhX29y ZGVyX3Nzc2UzOgotK19zc3NlM19zaG9ydGN1dDoKLSsJcHVzaAklcmJ4Ci0rCXB1c2gJJXJicAot KwlwdXNoCSVyMTIKLSsJbGVhCWAtNjQtKCR3aW42ND81KjE2OjApYCglcnNwKSwlcnNwCi0rX19f Ci0rJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOwotKwltb3ZhcHMJJXhtbTYsNjQrMCglcnNwKQot Kwltb3ZhcHMJJXhtbTcsNjQrMTYoJXJzcCkKLSsJbW92YXBzCSV4bW04LDY0KzMyKCVyc3ApCi0r CW1vdmFwcwkleG1tOSw2NCs0OCglcnNwKQotKwltb3ZhcHMJJXhtbTEwLDY0KzY0KCVyc3ApCi0r Lkxwcm9sb2d1ZV9zc3NlMzoKLStfX18KLSskY29kZS49PDxfX187Ci0rCW1vdgklcmRpLCRjdHgJ IyByZWFzc2lnbmVkIGFyZ3VtZW50Ci0rCW1vdgklcnNpLCRpbnAJIyByZWFzc2lnbmVkIGFyZ3Vt ZW50Ci0rCW1vdgklcmR4LCRudW0JIyByZWFzc2lnbmVkIGFyZ3VtZW50Ci0rCi0rCXNobAlcJDYs JG51bQotKwlhZGQJJGlucCwkbnVtCi0rCWxlYQlLX1hYX1hYKCVyaXApLCRLX1hYX1hYCi0rCi0r CW1vdgkwKCRjdHgpLCRBCQkjIGxvYWQgY29udGV4dAotKwltb3YJNCgkY3R4KSwkQgotKwltb3YJ OCgkY3R4KSwkQwotKwltb3YJMTIoJGN0eCksJEQKLSsJbW92CSRCLEBUWzBdCQkjIG1hZ2ljIHNl ZWQKLSsJbW92CTE2KCRjdHgpLCRFCi0rCi0rCW1vdmRxYQk2NCgkS19YWF9YWCksQFhbMl0JIyBw YnN3YXAgbWFzawotKwltb3ZkcWEJMCgkS19YWF9YWCksQFR4WzFdCSMgS18wMF8xOQotKwltb3Zk cXUJMCgkaW5wKSxAWFstNCY3XQkjIGxvYWQgaW5wdXQgdG8gJXhtbVswLTNdCi0rCW1vdmRxdQkx NigkaW5wKSxAWFstMyY3XQotKwltb3ZkcXUJMzIoJGlucCksQFhbLTImN10KLSsJbW92ZHF1CTQ4 KCRpbnApLEBYWy0xJjddCi0rCXBzaHVmYglAWFsyXSxAWFstNCY3XQkJIyBieXRlIHN3YXAKLSsJ YWRkCVwkNjQsJGlucAotKwlwc2h1ZmIJQFhbMl0sQFhbLTMmN10KLSsJcHNodWZiCUBYWzJdLEBY Wy0yJjddCi0rCXBzaHVmYglAWFsyXSxAWFstMSY3XQotKwlwYWRkZAlAVHhbMV0sQFhbLTQmN10J CSMgYWRkIEtfMDBfMTkKLSsJcGFkZGQJQFR4WzFdLEBYWy0zJjddCi0rCXBhZGRkCUBUeFsxXSxA WFstMiY3XQotKwltb3ZkcWEJQFhbLTQmN10sMCglcnNwKQkjIFhbXStLIHhmZXIgdG8gSUFMVQot Kwlwc3ViZAlAVHhbMV0sQFhbLTQmN10JCSMgcmVzdG9yZSBYW10KLSsJbW92ZHFhCUBYWy0zJjdd LDE2KCVyc3ApCi0rCXBzdWJkCUBUeFsxXSxAWFstMyY3XQotKwltb3ZkcWEJQFhbLTImN10sMzIo JXJzcCkKLSsJcHN1YmQJQFR4WzFdLEBYWy0yJjddCi0rCWptcAkuTG9vcF9zc3NlMwotK19fXwot KwotK3N1YiBBVVRPTE9BRCgpCQkjIHRodW5rIFtzaW1wbGlmaWVkXSAzMi1iaXQgc3R5bGUgcGVy bGFzbQotK3sgbXkgJG9wY29kZSA9ICRBVVRPTE9BRDsgJG9wY29kZSA9fiBzLy4qOjovLzsKLSsg IG15ICRhcmcgPSBwb3A7Ci0rICAgICRhcmcgPSAiXCQkYXJnIiBpZiAoJGFyZyoxIGVxICRhcmcp OwotKyAgICAkY29kZSAuPSAiXHQkb3Bjb2RlXHQiLmpvaW4oJywnLCRhcmcscmV2ZXJzZSBAXyku IlxuIjsKLSt9Ci0rCi0rc3ViIFh1cGRhdGVfc3NzZTNfMTZfMzEoKQkJIyByZWNhbGwgdGhhdCAk WGkgc3RhcnRzIHd0aWggNAotK3sgdXNlIGludGVnZXI7Ci0rICBteSAkYm9keSA9IHNoaWZ0Owot KyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgNDAgaW5zdHJ1 Y3Rpb25zCi0rICBteSAoJGEsJGIsJGMsJGQsJGUpOwotKwotKwkmbW92ZHFhCShAWFswXSxAWFst MyY3XSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsK LSsJJm1vdmRxYQkoQFR4WzBdLEBYWy0xJjddKTsKLSsJJnBhbGlnbnIoQFhbMF0sQFhbLTQmN10s OCk7CSMgY29tcG9zZSAiWFstMTRdIiBpbiAiWFswXSIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7 Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkgICZwYWRkZAkoQFR4WzFdLEBYWy0xJjdd KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkm cHNybGRxCShAVHhbMF0sNCk7CQkjICJYWy0zXSIsIDMgZHdvcmRzCi0rCSBldmFsKHNoaWZ0KEBp bnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJJnB4b3IJKEBYWzBdLEBYWy00Jjdd KTsJIyAiWFswXSJePSJYWy0xNl0iCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChz aGlmdChAaW5zbnMpKTsKLSsKLSsJJnB4b3IJKEBUeFswXSxAWFstMiY3XSk7CSMgIlhbLTNdIl4i WFstOF0iCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsK LSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkm cHhvcgkoQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iXj0iWFstM10iXiJYWy04XSIKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgICZtb3ZkcWEJKGV2 YWwoMTYqKCgkWGktMSkmMykpLiIoJXJzcCkiLEBUeFsxXSk7CSMgWFtdK0sgeGZlciB0byBJQUxV Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJ Jm1vdmRxYQkoQFR4WzJdLEBYWzBdKTsKLSsJJm1vdmRxYQkoQFR4WzBdLEBYWzBdKTsKLSsJIGV2 YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlm dChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZwc2xsZHEJKEBUeFsy XSwxMik7CQkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCi0rCSZwYWRkZAkoQFhbMF0s QFhbMF0pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7 Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJ JnBzcmxkCShAVHhbMF0sMzEpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSZtb3ZkcWEJKEBUeFsxXSxAVHhbMl0pOwotKwkgZXZhbChzaGlmdChA aW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZwc3JsZAkoQFR4WzJdLDMw KTsKLSsJJnBvcgkoQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTEKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZwc2xsZAkoQFR4WzFdLDIpOwotKwkm cHhvcgkoQFhbMF0sQFR4WzJdKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNo aWZ0KEBpbnNucykpOwotKwkgICZtb3ZkcWEJKEBUeFsyXSxldmFsKDE2KigoJFhpKS81KSkuIigk S19YWF9YWCkiKTsJIyBLX1hYX1hYCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChz aGlmdChAaW5zbnMpKTsKLSsKLSsJJnB4b3IJKEBYWzBdLEBUeFsxXSk7CQkjICJYWzBdIl49KCJY WzBdIj4+OTYpPDw8MgotKwotKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5p bmcgaW5zdHJ1Y3Rpb25zIFtpZiBhbnldCi0rCi0rICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkp OwkjICJyb3RhdGUiIFhbXQotKwkJcHVzaChAVHgsc2hpZnQoQFR4KSk7Ci0rfQotKwotK3N1YiBY dXBkYXRlX3Nzc2UzXzMyXzc5KCkKLSt7IHVzZSBpbnRlZ2VyOwotKyAgbXkgJGJvZHkgPSBzaGlm dDsKLSsgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIHRv IDQ4IGluc3RydWN0aW9ucwotKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKLSsKLSsJJm1vdmRxYQko QFR4WzBdLEBYWy0xJjddKQlpZiAoJFhpPT04KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkj IGJvZHlfMjBfMzkKLSsJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSI9IlhbLTMyXSJe IlhbLTE2XSIKLSsJJnBhbGlnbnIoQFR4WzBdLEBYWy0yJjddLDgpOwkjIGNvbXBvc2UgIlhbLTZd IgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBl dmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKLSsKLSsJJnB4b3IJKEBYWzBdLEBYWy03JjddKTsJ IyAiWFswXSJePSJYWy0yOF0iCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlm dChAaW5zbnMpKQlpZiAoQGluc25zWzBdICF+IC8mcm9bcmxdLyk7Ci0rCWlmICgkWGklNSkgewot KwkgICZtb3ZkcWEJKEBUeFsyXSxAVHhbMV0pOyMgInBlcnBldHVhdGUiIEtfWFhfWFguLi4KLSsJ fSBlbHNlIHsJCQkjIC4uLiBvciBsb2FkIG5leHQgb25lCi0rCSAgJm1vdmRxYQkoQFR4WzJdLGV2 YWwoMTYqKCRYaS81KSkuIigkS19YWF9YWCkiKTsKLSsJfQotKwkgICZwYWRkZAkoQFR4WzFdLEBY Wy0xJjddKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChA aW5zbnMpKTsKLSsKLSsJJnB4b3IJKEBYWzBdLEBUeFswXSk7CQkjICJYWzBdIl49IlhbLTZdIgot KwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJ IyByb2wKLSsKLSsJJm1vdmRxYQkoQFR4WzBdLEBYWzBdKTsKLSsJICAmbW92ZHFhCShldmFsKDE2 KigoJFhpLTEpJjMpKS4iKCVyc3ApIixAVHhbMV0pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQotKwkg ZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNo aWZ0KEBpbnNucykpOwkJIyByb3IKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZwc2xs ZAkoQFhbMF0sMik7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5Ci0rCSBl dmFsKHNoaWZ0KEBpbnNucykpOwotKwkmcHNybGQJKEBUeFswXSwzMCk7Ci0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCi0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25z KSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJJnBvcgkoQFhbMF0sQFR4 WzBdKTsJCSMgIlhbMF0iPDw8PTIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBf MzkKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSAgJm1vdmRxYQkoQFR4WzFdLEBYWzBdKQlp ZiAoJFhpPDE5KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwkJIyByb2wKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCi0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwotKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1 Y3Rpb25zCi0rCi0rICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQot KwkJcHVzaChAVHgsc2hpZnQoQFR4KSk7Ci0rfQotKwotK3N1YiBYdXBsYXN0X3Nzc2UzXzgwKCkK LSt7IHVzZSBpbnRlZ2VyOwotKyAgbXkgJGJvZHkgPSBzaGlmdDsKLSsgIG15IEBpbnNucyA9ICgm JGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwotKyAgbXkgKCRh LCRiLCRjLCRkLCRlKTsKLSsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSAgJnBhZGRkCShA VHhbMV0sQFhbLTEmN10pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsKLSsJICAmbW92ZHFhCShldmFsKDE2KigoJFhpLTEpJjMpKS4iKCVyc3ApIixAVHhbMV0p OwkjIFhbXStLIHhmZXIgSUFMVQotKwotKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JCSMg cmVtYWluaW5nIGluc3RydWN0aW9ucwotKwotKwkmY21wCSgkaW5wLCRudW0pOwotKwkmamUJKCIu TGRvbmVfc3NzZTMiKTsKLSsKLSsJdW5zaGlmdChAVHgscG9wKEBUeCkpOwotKwotKwkmbW92ZHFh CShAWFsyXSwiNjQoJEtfWFhfWFgpIik7CQkjIHBic3dhcCBtYXNrCi0rCSZtb3ZkcWEJKEBUeFsx XSwiMCgkS19YWF9YWCkiKTsJCSMgS18wMF8xOQotKwkmbW92ZHF1CShAWFstNCY3XSwiMCgkaW5w KSIpOwkJIyBsb2FkIGlucHV0Ci0rCSZtb3ZkcXUJKEBYWy0zJjddLCIxNigkaW5wKSIpOwotKwkm bW92ZHF1CShAWFstMiY3XSwiMzIoJGlucCkiKTsKLSsJJm1vdmRxdQkoQFhbLTEmN10sIjQ4KCRp bnApIik7Ci0rCSZwc2h1ZmIJKEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2FwCi0rCSZhZGQJ KCRpbnAsNjQpOwotKwotKyAgJFhpPTA7Ci0rfQotKwotK3N1YiBYbG9vcF9zc3NlMygpCi0reyB1 c2UgaW50ZWdlcjsKLSsgIG15ICRib2R5ID0gc2hpZnQ7Ci0rICBteSBAaW5zbnMgPSAoJiRib2R5 LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKLSsgIG15ICgkYSwkYiwk YywkZCwkZSk7Ci0rCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsJJnBzaHVmYgkoQFhbKCRYaS0zKSY3XSxAWFsyXSk7Ci0rCSBldmFsKHNoaWZ0KEBp bnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJJnBhZGRkCShAWFsoJFhpLTQpJjdd LEBUeFsxXSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkm bW92ZHFhCShldmFsKDE2KiRYaSkuIiglcnNwKSIsQFhbKCRYaS00KSY3XSk7CSMgWFtdK0sgeGZl ciB0byBJQUxVCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJJnBzdWJkCShAWFsoJFhpLTQpJjddLEBUeFsxXSk7Ci0rCi0rCWZvcmVhY2ggKEBpbnNu cykgeyBldmFsOyB9Ci0rICAkWGkrKzsKLSt9Ci0rCi0rc3ViIFh0YWlsX3Nzc2UzKCkKLSt7IHVz ZSBpbnRlZ2VyOwotKyAgbXkgJGJvZHkgPSBzaGlmdDsKLSsgIG15IEBpbnNucyA9ICgmJGJvZHks JiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwotKyAgbXkgKCRhLCRiLCRj LCRkLCRlKTsKLSsKLSsJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KLSt9Ci0rCi0rc3ViIGJv ZHlfMDBfMTkgKCkgewotKwkoCi0rCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCi0rCScmYWRkCSgk ZSxldmFsKDQqKCRqJjE1KSkuIiglcnNwKSIpOycsCSMgWFtdK0sgeGZlcgotKwknJnhvcgkoJGMs JGQpOycsCi0rCScmbW92CShAVFsxXSwkYSk7JywJIyAkYiBpbiBuZXh0IHJvdW5kCi0rCScmJF9y b2wJKCRhLDUpOycsCi0rCScmYW5kCShAVFswXSwkYyk7JywJIyAoJGImKCRjXiRkKSkKLSsJJyZ4 b3IJKCRjLCRkKTsnLAkjIHJlc3RvcmUgJGMKLSsJJyZ4b3IJKEBUWzBdLCRkKTsnLAotKwknJmFk ZAkoJGUsJGEpOycsCi0rCScmJF9yb3IJKCRiLCRqPzc6Mik7JywJIyAkYj4+PjIKLSsJJyZhZGQJ KCRlLEBUWzBdKTsnCS4nJGorKzsgdW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3Ao QFQpKTsnCi0rCSk7Ci0rfQotKwotK3N1YiBib2R5XzIwXzM5ICgpIHsKLSsJKAotKwknKCRhLCRi LCRjLCRkLCRlKT1AVjsnLgotKwknJmFkZAkoJGUsZXZhbCg0KigkaisrJjE1KSkuIiglcnNwKSIp OycsCSMgWFtdK0sgeGZlcgotKwknJnhvcgkoQFRbMF0sJGQpOycsCSMgKCRiXiRkKQotKwknJm1v dgkoQFRbMV0sJGEpOycsCSMgJGIgaW4gbmV4dCByb3VuZAotKwknJiRfcm9sCSgkYSw1KTsnLAot KwknJnhvcgkoQFRbMF0sJGMpOycsCSMgKCRiXiRkXiRjKQotKwknJmFkZAkoJGUsJGEpOycsCi0r CScmJF9yb3IJKCRiLDcpOycsCSMgJGI+Pj4yCi0rCScmYWRkCSgkZSxAVFswXSk7JwkuJ3Vuc2hp ZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JwotKwkpOwotK30KLSsKLStzdWIg Ym9keV80MF81OSAoKSB7Ci0rCSgKLSsJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KLSsJJyZtb3YJ KEBUWzFdLCRjKTsnLAotKwknJnhvcgkoJGMsJGQpOycsCi0rCScmYWRkCSgkZSxldmFsKDQqKCRq KysmMTUpKS4iKCVyc3ApIik7JywJIyBYW10rSyB4ZmVyCi0rCScmYW5kCShAVFsxXSwkZCk7JywK LSsJJyZhbmQJKEBUWzBdLCRjKTsnLAkjICgkYiYoJGNeJGQpKQotKwknJiRfcm9yCSgkYiw3KTsn LAkjICRiPj4+MgotKwknJmFkZAkoJGUsQFRbMV0pOycsCi0rCScmbW92CShAVFsxXSwkYSk7JywJ IyAkYiBpbiBuZXh0IHJvdW5kCi0rCScmJF9yb2wJKCRhLDUpOycsCi0rCScmYWRkCSgkZSxAVFsw XSk7JywKLSsJJyZ4b3IJKCRjLCRkKTsnLAkjIHJlc3RvcmUgJGMKLSsJJyZhZGQJKCRlLCRhKTsn CS4ndW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCi0rCSk7Ci0rfQot KyRjb2RlLj08PF9fXzsKLSsuYWxpZ24JMTYKLSsuTG9vcF9zc3NlMzoKLStfX18KLSsJJlh1cGRh dGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZi b2R5XzAwXzE5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKLSsJJlh1 cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJfNzko XCZib2R5XzAwXzE5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKLSsJ Jlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJf NzkoXCZib2R5XzIwXzM5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsK LSsJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKLSsJJlh1cGRhdGVfc3NzZTNf MzJfNzkoXCZib2R5XzQwXzU5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5 KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKLSsJJlh1cGRhdGVfc3Nz ZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQw XzU5KTsKLSsJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKLSsJJlh1cGxhc3Rf c3NzZTNfODAoXCZib2R5XzIwXzM5KTsJIyBjYW4ganVtcCB0byAiZG9uZSIKLSsKLSsJCQkJJHNh dmVkX2o9JGo7IEBzYXZlZF9WPUBWOwotKwotKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsK LSsJJlhsb29wX3Nzc2UzKFwmYm9keV8yMF8zOSk7Ci0rCSZYbG9vcF9zc3NlMyhcJmJvZHlfMjBf MzkpOwotKwotKyRjb2RlLj08PF9fXzsKLSsJYWRkCTAoJGN0eCksJEEJCQkjIHVwZGF0ZSBjb250 ZXh0Ci0rCWFkZAk0KCRjdHgpLEBUWzBdCi0rCWFkZAk4KCRjdHgpLCRDCi0rCWFkZAkxMigkY3R4 KSwkRAotKwltb3YJJEEsMCgkY3R4KQotKwlhZGQJMTYoJGN0eCksJEUKLSsJbW92CUBUWzBdLDQo JGN0eCkKLSsJbW92CUBUWzBdLCRCCQkJIyBtYWdpYyBzZWVkCi0rCW1vdgkkQyw4KCRjdHgpCi0r CW1vdgkkRCwxMigkY3R4KQotKwltb3YJJEUsMTYoJGN0eCkKLSsJam1wCS5Mb29wX3Nzc2UzCi0r Ci0rLmFsaWduCTE2Ci0rLkxkb25lX3Nzc2UzOgotK19fXwotKwkJCQkkaj0kc2F2ZWRfajsgQFY9 QHNhdmVkX1Y7Ci0rCi0rCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOwotKwkmWHRhaWxfc3Nz ZTMoXCZib2R5XzIwXzM5KTsKLSsJJlh0YWlsX3Nzc2UzKFwmYm9keV8yMF8zOSk7Ci0rCi0rJGNv ZGUuPTw8X19fOwotKwlhZGQJMCgkY3R4KSwkQQkJCSMgdXBkYXRlIGNvbnRleHQKLSsJYWRkCTQo JGN0eCksQFRbMF0KLSsJYWRkCTgoJGN0eCksJEMKLSsJbW92CSRBLDAoJGN0eCkKLSsJYWRkCTEy KCRjdHgpLCRECi0rCW1vdglAVFswXSw0KCRjdHgpCi0rCWFkZAkxNigkY3R4KSwkRQotKwltb3YJ JEMsOCgkY3R4KQotKwltb3YJJEQsMTIoJGN0eCkKLSsJbW92CSRFLDE2KCRjdHgpCi0rX19fCi0r JGNvZGUuPTw8X19fIGlmICgkd2luNjQpOwotKwltb3ZhcHMJNjQrMCglcnNwKSwleG1tNgotKwlt b3ZhcHMJNjQrMTYoJXJzcCksJXhtbTcKLSsJbW92YXBzCTY0KzMyKCVyc3ApLCV4bW04Ci0rCW1v dmFwcwk2NCs0OCglcnNwKSwleG1tOQotKwltb3ZhcHMJNjQrNjQoJXJzcCksJXhtbTEwCi0rX19f Ci0rJGNvZGUuPTw8X19fOwotKwlsZWEJYDY0Kygkd2luNjQ/NioxNjowKWAoJXJzcCksJXJzaQot Kwltb3YJMCglcnNpKSwlcjEyCi0rCW1vdgk4KCVyc2kpLCVyYnAKLSsJbW92CTE2KCVyc2kpLCVy YngKLSsJbGVhCTI0KCVyc2kpLCVyc3AKLSsuTGVwaWxvZ3VlX3Nzc2UzOgotKwlyZXQKLSsuc2l6 ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXJfc3NzZTMsLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXJfc3Nz ZTMKLStfX18KLSsKLStpZiAoJGF2eCkgewotK215ICRYaT00OwotK215IEBYPW1hcCgiJXhtbSRf IiwoNC4uNywwLi4zKSk7Ci0rbXkgQFR4PW1hcCgiJXhtbSRfIiwoOC4uMTApKTsKLStteSBAVj0o JEEsJEIsJEMsJEQsJEUpPSgiJWVheCIsIiVlYngiLCIlZWN4IiwiJWVkeCIsIiVlYnAiKTsJIyBz aXplIG9wdGltaXphdGlvbgotK215IEBUPSgiJWVzaSIsIiVlZGkiKTsKLStteSAkaj0wOwotK215 ICRLX1hYX1hYPSIlcjExIjsKLSsKLStteSAkX3JvbD1zdWIgeyAmc2hsZChAX1swXSxAXykgfTsK LStteSAkX3Jvcj1zdWIgeyAmc2hyZChAX1swXSxAXykgfTsKLSsKLSskY29kZS49PDxfX187Ci0r LnR5cGUJc2hhMV9ibG9ja19kYXRhX29yZGVyX2F2eCxcQGZ1bmN0aW9uLDMKLSsuYWxpZ24JMTYK LStzaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4OgotK19hdnhfc2hvcnRjdXQ6Ci0rCXB1c2gJJXJi eAotKwlwdXNoCSVyYnAKLSsJcHVzaAklcjEyCi0rCWxlYQlgLTY0LSgkd2luNjQ/NSoxNjowKWAo JXJzcCksJXJzcAotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKLSsJbW92YXBzCSV4 bW02LDY0KzAoJXJzcCkKLSsJbW92YXBzCSV4bW03LDY0KzE2KCVyc3ApCi0rCW1vdmFwcwkleG1t OCw2NCszMiglcnNwKQotKwltb3ZhcHMJJXhtbTksNjQrNDgoJXJzcCkKLSsJbW92YXBzCSV4bW0x MCw2NCs2NCglcnNwKQotKy5McHJvbG9ndWVfYXZ4OgotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJ bW92CSVyZGksJGN0eAkjIHJlYXNzaWduZWQgYXJndW1lbnQKLSsJbW92CSVyc2ksJGlucAkjIHJl YXNzaWduZWQgYXJndW1lbnQKLSsJbW92CSVyZHgsJG51bQkjIHJlYXNzaWduZWQgYXJndW1lbnQK LSsJdnplcm9hbGwKLSsKLSsJc2hsCVwkNiwkbnVtCi0rCWFkZAkkaW5wLCRudW0KLSsJbGVhCUtf WFhfWFgoJXJpcCksJEtfWFhfWFgKLSsKLSsJbW92CTAoJGN0eCksJEEJCSMgbG9hZCBjb250ZXh0 Ci0rCW1vdgk0KCRjdHgpLCRCCi0rCW1vdgk4KCRjdHgpLCRDCi0rCW1vdgkxMigkY3R4KSwkRAot Kwltb3YJJEIsQFRbMF0JCSMgbWFnaWMgc2VlZAotKwltb3YJMTYoJGN0eCksJEUKLSsKLSsJdm1v dmRxYQk2NCgkS19YWF9YWCksQFhbMl0JIyBwYnN3YXAgbWFzawotKwl2bW92ZHFhCTAoJEtfWFhf WFgpLEBUeFsxXQkjIEtfMDBfMTkKLSsJdm1vdmRxdQkwKCRpbnApLEBYWy00JjddCSMgbG9hZCBp bnB1dCB0byAleG1tWzAtM10KLSsJdm1vdmRxdQkxNigkaW5wKSxAWFstMyY3XQotKwl2bW92ZHF1 CTMyKCRpbnApLEBYWy0yJjddCi0rCXZtb3ZkcXUJNDgoJGlucCksQFhbLTEmN10KLSsJdnBzaHVm YglAWFsyXSxAWFstNCY3XSxAWFstNCY3XQkjIGJ5dGUgc3dhcAotKwlhZGQJXCQ2NCwkaW5wCi0r CXZwc2h1ZmIJQFhbMl0sQFhbLTMmN10sQFhbLTMmN10KLSsJdnBzaHVmYglAWFsyXSxAWFstMiY3 XSxAWFstMiY3XQotKwl2cHNodWZiCUBYWzJdLEBYWy0xJjddLEBYWy0xJjddCi0rCXZwYWRkZAlA VHhbMV0sQFhbLTQmN10sQFhbMF0JIyBhZGQgS18wMF8xOQotKwl2cGFkZGQJQFR4WzFdLEBYWy0z JjddLEBYWzFdCi0rCXZwYWRkZAlAVHhbMV0sQFhbLTImN10sQFhbMl0KLSsJdm1vdmRxYQlAWFsw XSwwKCVyc3ApCQkjIFhbXStLIHhmZXIgdG8gSUFMVQotKwl2bW92ZHFhCUBYWzFdLDE2KCVyc3Ap Ci0rCXZtb3ZkcWEJQFhbMl0sMzIoJXJzcCkKLSsJam1wCS5Mb29wX2F2eAotK19fXwotKwotK3N1 YiBYdXBkYXRlX2F2eF8xNl8zMSgpCQkjIHJlY2FsbCB0aGF0ICRYaSBzdGFydHMgd3RpaCA0Ci0r eyB1c2UgaW50ZWdlcjsKLSsgIG15ICRib2R5ID0gc2hpZnQ7Ci0rICBteSBAaW5zbnMgPSAoJiRi b2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyA0MCBpbnN0cnVjdGlvbnMKLSsgIG15ICgkYSwk YiwkYywkZCwkZSk7Ci0rCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChA aW5zbnMpKTsKLSsJJnZwYWxpZ25yKEBYWzBdLEBYWy0zJjddLEBYWy00JjddLDgpOwkjIGNvbXBv c2UgIlhbLTE0XSIgaW4gIlhbMF0iCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChz aGlmdChAaW5zbnMpKTsKLSsKLSsJICAmdnBhZGRkCShAVHhbMV0sQFR4WzFdLEBYWy0xJjddKTsK LSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkmdnBz cmxkcShAVHhbMF0sQFhbLTEmN10sNCk7CSMgIlhbLTNdIiwgMyBkd29yZHMKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkmdnB4b3IJKEBYWzBdLEBY WzBdLEBYWy00JjddKTsJCSMgIlhbMF0iXj0iWFstMTZdIgotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZ2cHhvcgkoQFR4WzBdLEBUeFswXSxA WFstMiY3XSk7CSMgIlhbLTNdIl4iWFstOF0iCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkg ZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNo aWZ0KEBpbnNucykpOwotKwotKwkmdnB4b3IJKEBYWzBdLEBYWzBdLEBUeFswXSk7CQkjICJYWzBd Il49IlhbLTNdIl4iWFstOF0iCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlm dChAaW5zbnMpKTsKLSsJICAmdm1vdmRxYQkoZXZhbCgxNiooKCRYaS0xKSYzKSkuIiglcnNwKSIs QFR4WzFdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0r CSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkmdnBzcmxkCShAVHhbMF0sQFhbMF0sMzEpOwot KwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFs KHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJJnZwc2xsZHEo QFR4WzJdLEBYWzBdLDEyKTsJCSMgIlhbMF0iPDw5NiwgZXh0cmFjdCBvbmUgZHdvcmQKLSsJJnZw YWRkZAkoQFhbMF0sQFhbMF0sQFhbMF0pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2 YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlm dChAaW5zbnMpKTsKLSsKLSsJJnZwc3JsZAkoQFR4WzFdLEBUeFsyXSwzMCk7Ci0rCSZ2cG9yCShA WFswXSxAWFswXSxAVHhbMF0pOwkJIyAiWFswXSI8PDw9MQotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkg ZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJJnZwc2xsZAkoQFR4WzJdLEBUeFsyXSwyKTsKLSsJ JnZweG9yCShAWFswXSxAWFswXSxAVHhbMV0pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJ IGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChz aGlmdChAaW5zbnMpKTsKLSsKLSsJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMl0pOwkJIyAiWFsw XSJePSgiWFswXSI+Pjk2KTw8PDIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNo aWZ0KEBpbnNucykpOwotKwkgICZ2bW92ZHFhCShAVHhbMl0sZXZhbCgxNiooKCRYaSkvNSkpLiIo JEtfWFhfWFgpIik7CSMgS19YWF9YWAotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCi0rCi0rCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJl bWFpbmluZyBpbnN0cnVjdGlvbnMgW2lmIGFueV0KLSsKLSsgICRYaSsrOwlwdXNoKEBYLHNoaWZ0 KEBYKSk7CSMgInJvdGF0ZSIgWFtdCi0rCQlwdXNoKEBUeCxzaGlmdChAVHgpKTsKLSt9Ci0rCi0r c3ViIFh1cGRhdGVfYXZ4XzMyXzc5KCkKLSt7IHVzZSBpbnRlZ2VyOwotKyAgbXkgJGJvZHkgPSBz aGlmdDsKLSsgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMy IHRvIDQ4IGluc3RydWN0aW9ucwotKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKLSsKLSsJJnZwYWxp Z25yKEBUeFswXSxAWFstMSY3XSxAWFstMiY3XSw4KTsJIyBjb21wb3NlICJYWy02XSIKLSsJJnZw eG9yCShAWFswXSxAWFswXSxAWFstNCY3XSk7CQkjICJYWzBdIj0iWFstMzJdIl4iWFstMTZdIgot KwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJ IyByb2wKLSsKLSsJJnZweG9yCShAWFswXSxAWFswXSxAWFstNyY3XSk7CQkjICJYWzBdIl49Ilhb LTI4XSIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpCWlm IChAaW5zbnNbMF0gIX4gLyZyb1tybF0vKTsKLSsJaWYgKCRYaSU1KSB7Ci0rCSAgJnZtb3ZkcWEJ KEBUeFsyXSxAVHhbMV0pOyMgInBlcnBldHVhdGUiIEtfWFhfWFguLi4KLSsJfSBlbHNlIHsJCQkj IC4uLiBvciBsb2FkIG5leHQgb25lCi0rCSAgJnZtb3ZkcWEJKEBUeFsyXSxldmFsKDE2KigkWGkv NSkpLiIoJEtfWFhfWFgpIik7Ci0rCX0KLSsJICAmdnBhZGRkCShAVHhbMV0sQFR4WzFdLEBYWy0x JjddKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsKLSsJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMF0pOwkJIyAiWFswXSJePSJYWy02 XSIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsJCSMgcm9sCi0rCi0rCSZ2cHNybGQJKEBUeFswXSxAWFswXSwzMCk7Ci0rCSAgJnZtb3ZkcWEJ KGV2YWwoMTYqKCgkWGktMSkmMykpLiIoJXJzcCkiLEBUeFsxXSk7CSMgWFtdK0sgeGZlciB0byBJ QUxVCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJ IGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsK LSsJJnZwc2xsZAkoQFhbMF0sQFhbMF0sMik7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBi b2R5XzIwXzM5Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBy b3IKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZ2cG9yCShAWFswXSxAWFswXSxAVHhb MF0pOwkJIyAiWFswXSI8PDw9MgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8z OQotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJICAmdm1vdmRxYQkoQFR4WzFdLEBYWzBdKQlp ZiAoJFhpPDE5KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwkJIyByb2wKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCi0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwotKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1 Y3Rpb25zCi0rCi0rICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQot KwkJcHVzaChAVHgsc2hpZnQoQFR4KSk7Ci0rfQotKwotK3N1YiBYdXBsYXN0X2F2eF84MCgpCi0r eyB1c2UgaW50ZWdlcjsKLSsgIG15ICRib2R5ID0gc2hpZnQ7Ci0rICBteSBAaW5zbnMgPSAoJiRi b2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKLSsgIG15ICgkYSwk YiwkYywkZCwkZSk7Ci0rCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgICZ2cGFkZGQJKEBU eFsxXSxAVHhbMV0sQFhbLTEmN10pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChA aW5zbnMpKTsKLSsKLSsJICAmbW92ZHFhCShldmFsKDE2KigoJFhpLTEpJjMpKS4iKCVyc3ApIixA VHhbMV0pOwkjIFhbXStLIHhmZXIgSUFMVQotKwotKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7 IH0JCSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwotKwotKwkmY21wCSgkaW5wLCRudW0pOwotKwkm amUJKCIuTGRvbmVfYXZ4Iik7Ci0rCi0rCXVuc2hpZnQoQFR4LHBvcChAVHgpKTsKLSsKLSsJJnZt b3ZkcWEoQFhbMl0sIjY0KCRLX1hYX1hYKSIpOwkJIyBwYnN3YXAgbWFzawotKwkmdm1vdmRxYShA VHhbMV0sIjAoJEtfWFhfWFgpIik7CQkjIEtfMDBfMTkKLSsJJnZtb3ZkcXUoQFhbLTQmN10sIjAo JGlucCkiKTsJCSMgbG9hZCBpbnB1dAotKwkmdm1vdmRxdShAWFstMyY3XSwiMTYoJGlucCkiKTsK LSsJJnZtb3ZkcXUoQFhbLTImN10sIjMyKCRpbnApIik7Ci0rCSZ2bW92ZHF1KEBYWy0xJjddLCI0 OCgkaW5wKSIpOwotKwkmdnBzaHVmYihAWFstNCY3XSxAWFstNCY3XSxAWFsyXSk7CSMgYnl0ZSBz d2FwCi0rCSZhZGQJKCRpbnAsNjQpOwotKwotKyAgJFhpPTA7Ci0rfQotKwotK3N1YiBYbG9vcF9h dngoKQotK3sgdXNlIGludGVnZXI7Ci0rICBteSAkYm9keSA9IHNoaWZ0OwotKyAgbXkgQGluc25z ID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCi0rICBt eSAoJGEsJGIsJGMsJGQsJGUpOwotKwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSZ2cHNodWZiKEBYWygkWGktMykmN10sQFhbKCRYaS0zKSY3XSxA WFsyXSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsK LSsJJnZwYWRkZAkoQFhbJFhpJjddLEBYWygkWGktNCkmN10sQFR4WzFdKTsKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSZ2bW92ZHFhKGV2YWwoMTYqJFhpKS4i KCVyc3ApIixAWFskWGkmN10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQotKwkgZXZhbChzaGlmdChA aW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCWZvcmVhY2ggKEBpbnNucykg eyBldmFsOyB9Ci0rICAkWGkrKzsKLSt9Ci0rCi0rc3ViIFh0YWlsX2F2eCgpCi0reyB1c2UgaW50 ZWdlcjsKLSsgIG15ICRib2R5ID0gc2hpZnQ7Ci0rICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9k eSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKLSsgIG15ICgkYSwkYiwkYywkZCwk ZSk7Ci0rCi0rCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9Ci0rfQotKwotKyRjb2RlLj08PF9f XzsKLSsuYWxpZ24JMTYKLSsuTG9vcF9hdng6Ci0rX19fCi0rCSZYdXBkYXRlX2F2eF8xNl8zMShc JmJvZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9hdnhfMTZfMzEoXCZib2R5XzAwXzE5KTsKLSsJJlh1 cGRhdGVfYXZ4XzE2XzMxKFwmYm9keV8wMF8xOSk7Ci0rCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJv ZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzAwXzE5KTsKLSsJJlh1cGRh dGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7Ci0rCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlf MjBfMzkpOwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzIwXzM5KTsKLSsJJlh1cGRhdGVf YXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7Ci0rCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBf MzkpOwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKLSsJJlh1cGRhdGVfYXZ4 XzMyXzc5KFwmYm9keV80MF81OSk7Ci0rCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkp OwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKLSsJJlh1cGRhdGVfYXZ4XzMy Xzc5KFwmYm9keV80MF81OSk7Ci0rCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOwot KwkmWHVwbGFzdF9hdnhfODAoXCZib2R5XzIwXzM5KTsJIyBjYW4ganVtcCB0byAiZG9uZSIKLSsK LSsJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOwotKwotKwkmWGxvb3BfYXZ4KFwmYm9keV8y MF8zOSk7Ci0rCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKLSsJJlhsb29wX2F2eChcJmJvZHlf MjBfMzkpOwotKwotKyRjb2RlLj08PF9fXzsKLSsJYWRkCTAoJGN0eCksJEEJCQkjIHVwZGF0ZSBj b250ZXh0Ci0rCWFkZAk0KCRjdHgpLEBUWzBdCi0rCWFkZAk4KCRjdHgpLCRDCi0rCWFkZAkxMigk Y3R4KSwkRAotKwltb3YJJEEsMCgkY3R4KQotKwlhZGQJMTYoJGN0eCksJEUKLSsJbW92CUBUWzBd LDQoJGN0eCkKLSsJbW92CUBUWzBdLCRCCQkJIyBtYWdpYyBzZWVkCi0rCW1vdgkkQyw4KCRjdHgp Ci0rCW1vdgkkRCwxMigkY3R4KQotKwltb3YJJEUsMTYoJGN0eCkKLSsJam1wCS5Mb29wX2F2eAot KwotKy5hbGlnbgkxNgotKy5MZG9uZV9hdng6Ci0rX19fCi0rCQkJCSRqPSRzYXZlZF9qOyBAVj1A c2F2ZWRfVjsKLSsKLSsJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOwotKwkmWHRhaWxfYXZ4KFwm Ym9keV8yMF8zOSk7Ci0rCSZYdGFpbF9hdngoXCZib2R5XzIwXzM5KTsKLSsKLSskY29kZS49PDxf X187Ci0rCXZ6ZXJvYWxsCi0rCi0rCWFkZAkwKCRjdHgpLCRBCQkJIyB1cGRhdGUgY29udGV4dAot KwlhZGQJNCgkY3R4KSxAVFswXQotKwlhZGQJOCgkY3R4KSwkQwotKwltb3YJJEEsMCgkY3R4KQot KwlhZGQJMTIoJGN0eCksJEQKLSsJbW92CUBUWzBdLDQoJGN0eCkKLSsJYWRkCTE2KCRjdHgpLCRF Ci0rCW1vdgkkQyw4KCRjdHgpCi0rCW1vdgkkRCwxMigkY3R4KQotKwltb3YJJEUsMTYoJGN0eCkK LStfX18KLSskY29kZS49PDxfX18gaWYgKCR3aW42NCk7Ci0rCW1vdmFwcwk2NCswKCVyc3ApLCV4 bW02Ci0rCW1vdmFwcwk2NCsxNiglcnNwKSwleG1tNwotKwltb3ZhcHMJNjQrMzIoJXJzcCksJXht bTgKLSsJbW92YXBzCTY0KzQ4KCVyc3ApLCV4bW05Ci0rCW1vdmFwcwk2NCs2NCglcnNwKSwleG1t MTAKLStfX18KLSskY29kZS49PDxfX187Ci0rCWxlYQlgNjQrKCR3aW42ND82KjE2OjApYCglcnNw KSwlcnNpCi0rCW1vdgkwKCVyc2kpLCVyMTIKLSsJbW92CTgoJXJzaSksJXJicAotKwltb3YJMTYo JXJzaSksJXJieAotKwlsZWEJMjQoJXJzaSksJXJzcAotKy5MZXBpbG9ndWVfYXZ4OgotKwlyZXQK LSsuc2l6ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4LC4tc2hhMV9ibG9ja19kYXRhX29yZGVy X2F2eAotK19fXwotK30KLSskY29kZS49PDxfX187Ci0rLmFsaWduCTY0Ci0rS19YWF9YWDoKLSsu bG9uZwkweDVhODI3OTk5LDB4NWE4Mjc5OTksMHg1YTgyNzk5OSwweDVhODI3OTk5CSMgS18wMF8x OQotKy5sb25nCTB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSwweDZlZDllYmExLDB4NmVkOWViYTEJIyBL XzIwXzM5Ci0rLmxvbmcJMHg4ZjFiYmNkYywweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNk YwkjIEtfNDBfNTkKLSsubG9uZwkweGNhNjJjMWQ2LDB4Y2E2MmMxZDYsMHhjYTYyYzFkNiwweGNh NjJjMWQ2CSMgS182MF83OQotKy5sb25nCTB4MDAwMTAyMDMsMHgwNDA1MDYwNywweDA4MDkwYTBi LDB4MGMwZDBlMGYJIyBwYnN3YXAgbWFzawotK19fXwotK319fQotKyRjb2RlLj08PF9fXzsKLSsu YXNjaXoJIlNIQTEgYmxvY2sgdHJhbnNmb3JtIGZvciB4ODZfNjQsIENSWVBUT0dBTVMgYnkgPGFw cHJvXEBvcGVuc3NsLm9yZz4iCi0rLmFsaWduCTY0Ci0gX19fCi0gCi0gIyBFWENFUFRJT05fRElT UE9TSVRJT04gaGFuZGxlciAoRVhDRVBUSU9OX1JFQ09SRCAqcmVjLFVMT05HNjQgZnJhbWUsCi1A QCAtMjcyLDI1ICsxMTA5LDczIEBAIHNlX2hhbmRsZXI6Ci0gCi0gCWxlYQkuTHByb2xvZ3VlKCVy aXApLCVyMTAKLSAJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8Lkxwcm9sb2d1ZQotLQlq YgkuTGluX3Byb2xvZ3VlCi0rCWpiCS5MY29tbW9uX3NlaF90YWlsCi0gCi0gCW1vdgkxNTIoJGNv bnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAotIAotIAlsZWEJLkxlcGlsb2d1ZSglcmlw KSwlcjEwCi0gCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj0uTGVwaWxvZ3VlCi0tCWph ZQkuTGluX3Byb2xvZ3VlCi0rCWphZQkuTGNvbW1vbl9zZWhfdGFpbAotIAotIAltb3YJYDE2KjRg KCVyYXgpLCVyYXgJIyBwdWxsIHNhdmVkIHN0YWNrIHBvaW50ZXIKLS0JbGVhCTI0KCVyYXgpLCVy YXgKLSsJbGVhCTMyKCVyYXgpLCVyYXgKLSAKLSAJbW92CS04KCVyYXgpLCVyYngKLSAJbW92CS0x NiglcmF4KSwlcmJwCi0gCW1vdgktMjQoJXJheCksJXIxMgotKwltb3YJLTMyKCVyYXgpLCVyMTMK LSAJbW92CSVyYngsMTQ0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4Ci0gCW1vdgkl cmJwLDE2MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJicAotIAltb3YJJXIxMiwyMTYo JGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKLSsJbW92CSVyMTMsMjI0KCRjb250ZXh0 KQkjIHJlc3RvcmUgY29udGV4dC0+UjEzCi0rCi0rCWptcAkuTGNvbW1vbl9zZWhfdGFpbAotKy5z aXplCXNlX2hhbmRsZXIsLi1zZV9oYW5kbGVyCi0rCi0rLnR5cGUJc3NzZTNfaGFuZGxlcixcQGFi aS1vbW5pcG90ZW50Ci0rLmFsaWduCTE2Ci0rc3NzZTNfaGFuZGxlcjoKLSsJcHVzaAklcnNpCi0r CXB1c2gJJXJkaQotKwlwdXNoCSVyYngKLSsJcHVzaAklcmJwCi0rCXB1c2gJJXIxMgotKwlwdXNo CSVyMTMKLSsJcHVzaAklcjE0Ci0rCXB1c2gJJXIxNQotKwlwdXNoZnEKLSsJc3ViCVwkNjQsJXJz cAotKwotKwltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKLSsJbW92 CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCi0rCi0rCW1vdgk4KCRkaXNw KSwlcnNpCQkjIGRpc3AtPkltYWdlQmFzZQotKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+ SGFuZGxlckRhdGEKLSsKLSsJbW92CTAoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMF0KLSsJ bGVhCSglcnNpLCVyMTApLCVyMTAJIyBwcm9sb2d1ZSBsYWJlbAotKwljbXAJJXIxMCwlcmJ4CQkj IGNvbnRleHQtPlJpcDxwcm9sb2d1ZSBsYWJlbAotKwlqYgkuTGNvbW1vbl9zZWhfdGFpbAotKwot Kwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKLSAKLS0uTGluX3By b2xvZ3VlOgotKwltb3YJNCglcjExKSwlcjEwZAkJIyBIYW5kbGVyRGF0YVsxXQotKwlsZWEJKCVy c2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCi0rCWNtcAklcjEwLCVyYngJCSMgY29udGV4 dC0+UmlwPj1lcGlsb2d1ZSBsYWJlbAotKwlqYWUJLkxjb21tb25fc2VoX3RhaWwKLSsKLSsJbGVh CTY0KCVyYXgpLCVyc2kKLSsJbGVhCTUxMigkY29udGV4dCksJXJkaQkjICZjb250ZXh0LlhtbTYK LSsJbW92CVwkMTAsJWVjeAotKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCi0r CWxlYQkyNCs1KjE2KCVyYXgpLCVyYXgJIyBhZGp1c3Qgc3RhY2sgcG9pbnRlcgotKwotKwltb3YJ LTgoJXJheCksJXJieAotKwltb3YJLTE2KCVyYXgpLCVyYnAKLSsJbW92CSVyYngsMTQ0KCRjb250 ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4Ci0rCW1vdgklcmJwLDE2MCgkY29udGV4dCkJIyBy ZXN0b3JlIGNvbnRleHQtPlJicAotKwotKy5MY29tbW9uX3NlaF90YWlsOgotIAltb3YJOCglcmF4 KSwlcmRpCi0gCW1vdgkxNiglcmF4KSwlcnNpCi0gCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyBy ZXN0b3JlIGNvbnRleHQtPlJzcAotQEAgLTMyOCwxOSArMTIxMywzOCBAQCBzZV9oYW5kbGVyOgot IAlwb3AJJXJkaQotIAlwb3AJJXJzaQotIAlyZXQKLS0uc2l6ZQlzZV9oYW5kbGVyLC4tc2VfaGFu ZGxlcgotKy5zaXplCXNzc2UzX2hhbmRsZXIsLi1zc3NlM19oYW5kbGVyCi0gCi0gLnNlY3Rpb24J LnBkYXRhCi0gLmFsaWduCTQKLSAJLnJ2YQkuTFNFSF9iZWdpbl9zaGExX2Jsb2NrX2RhdGFfb3Jk ZXIKLSAJLnJ2YQkuTFNFSF9lbmRfc2hhMV9ibG9ja19kYXRhX29yZGVyCi0gCS5ydmEJLkxTRUhf aW5mb19zaGExX2Jsb2NrX2RhdGFfb3JkZXIKLS0KLSsJLnJ2YQkuTFNFSF9iZWdpbl9zaGExX2Js b2NrX2RhdGFfb3JkZXJfc3NzZTMKLSsJLnJ2YQkuTFNFSF9lbmRfc2hhMV9ibG9ja19kYXRhX29y ZGVyX3Nzc2UzCi0rCS5ydmEJLkxTRUhfaW5mb19zaGExX2Jsb2NrX2RhdGFfb3JkZXJfc3NzZTMK LStfX18KLSskY29kZS49PDxfX18gaWYgKCRhdngpOwotKwkucnZhCS5MU0VIX2JlZ2luX3NoYTFf YmxvY2tfZGF0YV9vcmRlcl9hdngKLSsJLnJ2YQkuTFNFSF9lbmRfc2hhMV9ibG9ja19kYXRhX29y ZGVyX2F2eAotKwkucnZhCS5MU0VIX2luZm9fc2hhMV9ibG9ja19kYXRhX29yZGVyX2F2eAotK19f XwotKyRjb2RlLj08PF9fXzsKLSAuc2VjdGlvbgkueGRhdGEKLSAuYWxpZ24JOAotIC5MU0VIX2lu Zm9fc2hhMV9ibG9ja19kYXRhX29yZGVyOgotIAkuYnl0ZQk5LDAsMCwwCi0gCS5ydmEJc2VfaGFu ZGxlcgotKy5MU0VIX2luZm9fc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzOgotKwkuYnl0ZQk5 LDAsMCwwCi0rCS5ydmEJc3NzZTNfaGFuZGxlcgotKwkucnZhCS5McHJvbG9ndWVfc3NzZTMsLkxl cGlsb2d1ZV9zc3NlMwkjIEhhbmRsZXJEYXRhW10KLStfX18KLSskY29kZS49PDxfX18gaWYgKCRh dngpOwotKy5MU0VIX2luZm9fc2hhMV9ibG9ja19kYXRhX29yZGVyX2F2eDoKLSsJLmJ5dGUJOSww LDAsMAotKwkucnZhCXNzc2UzX2hhbmRsZXIKLSsJLnJ2YQkuTHByb2xvZ3VlX2F2eCwuTGVwaWxv Z3VlX2F2eAkJIyBIYW5kbGVyRGF0YVtdCi0gX19fCi0gfQotIAotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGQvY3J5cHRvL3NoYS9hc20vc2hhMS01ODYucGwuaW50ZWxvcHRzIG9wZW5zc2wtMS4wLjBk L2NyeXB0by9zaGEvYXNtL3NoYTEtNTg2LnBsCi0tLS0gb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3No YS9hc20vc2hhMS01ODYucGwuaW50ZWxvcHRzCTIwMDgtMDctMTcgMTE6NTA6NTYuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3NoYS9hc20vc2hhMS01ODYucGwJMjAx MS0wOC0yNCAxMjo1MDo1Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vz ci9iaW4vZW52IHBlcmwKLSsjIS91c3IvYmluL3BlcmwKLSAKLSAjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIyBb UmVdd3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRo ZSBPcGVuU1NMCi1AQCAtMTIsNiArMTIsOCBAQAotICMgY29tbWVudGFyeSBiZWxvd10sIGFuZCBp biAyMDA2IHRoZSByZXN0IHdhcyByZXdyaXR0ZW4gaW4gb3JkZXIgdG8KLSAjIGdhaW4gZnJlZWRv bSB0byBsaWJlcmF0ZSBsaWNlbnNpbmcgdGVybXMuCi0gCi0rIyBKYW51YXJ5LCBTZXB0ZW1iZXIg MjAwNC4KLSsjCi0gIyBJdCB3YXMgbm90ZWQgdGhhdCBJbnRlbCBJQS0zMiBDIGNvbXBpbGVyIGdl bmVyYXRlcyBjb2RlIHdoaWNoCi0gIyBwZXJmb3JtcyB+MzAlICpmYXN0ZXIqIG9uIFA0IENQVSB0 aGFuIG9yaWdpbmFsICpoYW5kLWNvZGVkKgotICMgU0hBMSBhc3NlbWJsZXIgaW1wbGVtZW50YXRp b24uIFRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtIChhbmQKLUBAIC0zMSwxMiArMzMsOTIgQEAKLSAj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSAjCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+Ci0gCi0rIyBBdWd1c3QgMjAw OS4KLSsjCi0rIyBHZW9yZ2UgU3BlbHZpbiBoYXMgdGlwcGVkIHRoYXQgRl80MF81OShiLGMsZCkg Y2FuIGJlIHJld3JpdHRlbiBhcwotKyMgJyhjJmQpICsgKGImKGNeZCkpJywgd2hpY2ggYWxsb3dz IHRvIGFjY3VtdWxhdGUgcGFydGlhbCByZXN1bHRzCi0rIyBhbmQgbGlnaHRlbiAicHJlc3N1cmUi IG9uIHNjcmF0Y2ggcmVnaXN0ZXJzLiBUaGlzIHJlc3VsdGVkIGluCi0rIyA+MTIlIHBlcmZvcm1h bmNlIGltcHJvdmVtZW50IG9uIGNvbnRlbXBvcmFyeSBBTUQgY29yZXMgKHdpdGggbm8KLSsjIGRl Z3JhZGF0aW9uIG9uIG90aGVyIENQVXM6LSkuIEFsc28sIHRoZSBjb2RlIHdhcyByZXZpc2VkIHRv IG1heGltaXplCi0rIyAiZGlzdGFuY2UiIGJldHdlZW4gaW5zdHJ1Y3Rpb25zIHByb2R1Y2luZyBp bnB1dCB0byAnbGVhJyBpbnN0cnVjdGlvbgotKyMgYW5kIHRoZSAnbGVhJyBpbnN0cnVjdGlvbiBp dHNlbGYsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgSW50ZWwgQXRvbQotKyMgY29yZSBhbmQgcmVz dWx0ZWQgaW4gfjE1JSBpbXByb3ZlbWVudC4KLSsKLSsjIE9jdG9iZXIgMjAxMC4KLSsjCi0rIyBB ZGQgU1NTRTMsIFN1cHBsZW1lbnRhbFshXSBTU0UzLCBpbXBsZW1lbnRhdGlvbi4gVGhlIGlkZWEg YmVoaW5kIGl0Ci0rIyBpcyB0byBvZmZsb2FkIG1lc3NhZ2Ugc2NoZWR1bGUgZGVub3RlZCBieSBX dCBpbiBOSVNUIHNwZWNpZmljYXRpb24sCi0rIyBvciBYdXBkYXRlIGluIE9wZW5TU0wgc291cmNl LCB0byBTSU1EIHVuaXQuIFRoZSBpZGVhIGlzIG5vdCBub3ZlbCwKLSsjIGFuZCBpbiBTU0UyIGNv bnRleHQgd2FzIGZpcnN0IGV4cGxvcmVkIGJ5IERlYW4gR2F1ZGV0IGluIDIwMDQsIHNlZQotKyMg aHR0cDovL2FyY3RpYy5vcmcvfmRlYW4vY3J5cHRvL3NoYTEuaHRtbC4gU2luY2UgdGhlbiBzZXZl cmFsIHRoaW5ncwotKyMgaGF2ZSBjaGFuZ2VkIHRoYXQgbWFkZSBpdCBpbnRlcmVzdGluZyBhZ2Fp bjoKLSsjCi0rIyBhKSBYTU0gdW5pdHMgYmVjYW1lIGZhc3RlciBhbmQgd2lkZXI7Ci0rIyBiKSBp bnN0cnVjdGlvbiBzZXQgYmVjYW1lIG1vcmUgdmVyc2F0aWxlOwotKyMgYykgYW4gaW1wb3J0YW50 IG9ic2VydmF0aW9uIHdhcyBtYWRlIGJ5IE1heCBMb2NrdHlraGluLCB3aGljaCBtYWRlCi0rIyAg ICBpdCBwb3NzaWJsZSB0byByZWR1Y2UgYW1vdW50IG9mIGluc3RydWN0aW9ucyByZXF1aXJlZCB0 byBwZXJmb3JtCi0rIyAgICB0aGUgb3BlcmF0aW9uIGluIHF1ZXN0aW9uLCBmb3IgZnVydGhlciBk ZXRhaWxzIHNlZQotKyMgICAgaHR0cDovL3NvZnR3YXJlLmludGVsLmNvbS9lbi11cy9hcnRpY2xl cy9pbXByb3ZpbmctdGhlLXBlcmZvcm1hbmNlLW9mLXRoZS1zZWN1cmUtaGFzaC1hbGdvcml0aG0t MS8uCi0rCi0rIyBBcHJpbCAyMDExLgotKyMKLSsjIEFkZCBBVlggY29kZSBwYXRoLCBwcm9iYWJs eSBtb3N0IGNvbnRyb3ZlcnNpYWwuLi4gVGhlIHRoaW5nIGlzIHRoYXQKLSsjIHN3aXRjaCB0byBB VlggYWxvbmUgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkgYXMgbGl0dGxlIGFzIDQlIGluCi0rIyBj b21wYXJpc29uIHRvIFNTU0UzIGNvZGUgcGF0aC4gQnV0IGJlbG93IHJlc3VsdCBkb2Vzbid0IGxv b2sgbGlrZQotKyMgNCUgaW1wcm92ZW1lbnQuLi4gVHJvdWJsZSBpcyB0aGF0IFNhbmR5IEJyaWRn ZSBkZWNvZGVzICdyb1tybF0nIGFzCi0rIyBwYWlyIG9mIMK1LW9wcywgYW5kIGl0J3MgdGhlIGFk ZGl0aW9uYWwgwrUtb3BzLCB0d28gcGVyIHJvdW5kLCB0aGF0Ci0rIyBtYWtlIGl0IHJ1biBzbG93 ZXIgdGhhbiBDb3JlMiBhbmQgV2VzdG1lcmUuIEJ1dCAnc2hbcmxdZCcgaXMgZGVjb2RlZAotKyMg YXMgc2luZ2xlIMK1LW9wIGJ5IFNhbmR5IEJyaWRnZSBhbmQgaXQncyByZXBsYWNpbmcgJ3JvW3Js XScgd2l0aAotKyMgZXF1aXZhbGVudCAnc2hbcmxdZCcgdGhhdCBpcyByZXNwb25zaWJsZSBmb3Ig dGhlIGltcHJlc3NpdmUgNS4xCi0rIyBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlLiBCdXQgJ3No W3JsXWQnIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB1c2VkCi0rIyB0byBiZSBmYXN0LCBub3IgZG9l cyBpdCBhcHBlYXIgdG8gYmUgZmFzdCBpbiB1cGNvbWluZyBCdWxsZG96ZXIKLSsjIFthY2NvcmRp bmcgdG8gaXRzIG9wdGltaXphdGlvbiBtYW51YWxdLiBXaGljaCBpcyB3aHkgQVZYIGNvZGUgcGF0 aAotKyMgaXMgZ3VhcmRlZCBieSAqYm90aCogQVZYIGFuZCBzeW50aGV0aWMgYml0IGRlbm90aW5n IEludGVsIENQVXMuCi0rIyBPbmUgY2FuIGFyZ3VlIHRoYXQgaXQncyB1bmZhaXIgdG8gQU1ELCBi dXQgd2l0aG91dCAnc2hbcmxdZCcgaXQKLSsjIG1ha2VzIG5vIHNlbnNlIHRvIGtlZXAgdGhlIEFW WCBjb2RlIHBhdGguIElmIHNvbWVib2R5IGZlZWxzIHRoYXQKLSsjIHN0cm9uZ2x5LCBpdCdzIHBy b2JhYmx5IG1vcmUgYXBwcm9wcmlhdGUgdG8gZGlzY3VzcyBwb3NzaWJpbGl0eSBvZgotKyMgdXNp bmcgdmVjdG9yIHJvdGF0ZSBYT1Agb24gQU1ELi4uCi0rCi0rIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotKyMgQ3Vy cmVudCBwZXJmb3JtYW5jZSBpcyBzdW1tYXJpemVkIGluIGZvbGxvd2luZyB0YWJsZS4gTnVtYmVy cyBhcmUKLSsjIENQVSBjbG9jayBjeWNsZXMgc3BlbnQgdG8gcHJvY2VzcyBzaW5nbGUgYnl0ZSAo bGVzcyBpcyBiZXR0ZXIpLgotKyMKLSsjCQl4ODYJCVNTU0UzCQlBVlgKLSsjIFBlbnRpdW0JMTUu NwkJLQotKyMgUElJSQkJMTEuNQkJLQotKyMgUDQJCTEwLjYJCS0KLSsjIEFNRCBLOAk3LjEJCS0K LSsjIENvcmUyCQk3LjMJCTYuMS8rMjAlCS0KLSsjIEF0b20JCTEyLjUJCTkuNSgqKS8rMzIlCS0K LSsjIFdlc3RtZXJlCTcuMwkJNS42LyszMCUJLQotKyMgU2FuZHkgQnJpZGdlCTguOAkJNi4yLys0 MCUJNS4xKCoqKS8rNzAlCi0rIwotKyMgKCopCUxvb3AgaXMgMTA1NiBpbnN0cnVjdGlvbnMgbG9u ZyBhbmQgZXhwZWN0ZWQgcmVzdWx0IGlzIH44LjI1LgotKyMJSXQgcmVtYWlucyBteXN0ZXJ5IFt0 byBtZV0gd2h5IElMUCBpcyBsaW1pdGVkIHRvIDEuNy4KLSsjCi0rIyAoKiopCUFzIHBlciBhYm92 ZSBjb21tZW50LCB0aGUgcmVzdWx0IGlzIGZvciBBVlggKnBsdXMqIHNoW3JsXWQuCi0rCi0gJDAg PX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKLSBwdXNoKEBJTkMsIiR7ZGlyfSIs IiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKLSByZXF1aXJlICJ4ODZhc20ucGwiOwotIAotICZhc21f aW5pdCgkQVJHVlswXSwic2hhMS01ODYucGwiLCRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOwotIAot KyR4bW09MTsgJHltbT0wOwotK2ZvciAoQEFSR1YpIHsgJHhtbT0xIGlmICgvLURPUEVOU1NMX0lB MzJfU1NFMi8pOyB9Ci0rCi0rJHltbT0xIGlmICgkeG1tICYmCi0rCQlgJEVOVntDQ30gLVdhLC12 IC1jIC1vIC9kZXYvbnVsbCAteCBhc3NlbWJsZXIgL2Rldi9udWxsIDI+JjFgCi0rCQkJPX4gL0dO VSBhc3NlbWJsZXIgdmVyc2lvbiAoWzItOV1cLlswLTldKykvICYmCi0rCQkkMT49Mi4xOSk7CSMg Zmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIEFWWAotKwotKyR5bW09MSBpZiAoJHhtbSAmJiAhJHlt bSAmJiAkQVJHVlswXSBlcSAid2luMzJuIiAmJiAKLSsJCWBuYXNtIC12IDI+JjFgID1+IC9OQVNN IHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgotKwkJJDE+PTIuMDMpOwkjIGZpcnN0IHZlcnNp b24gc3VwcG9ydGluZyBBVlgKLSsKLSsmZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9Y IikgaWYgKCR4bW0pOwotKwotKwotICRBPSJlYXgiOwotICRCPSJlYngiOwotICRDPSJlY3giOwot QEAgLTQ3LDYgKzEyOSwxMCBAQCAkdG1wMT0iZWJwIjsKLSAKLSBAVj0oJEEsJEIsJEMsJEQsJEUs JFQpOwotIAotKyRhbHQ9MDsJIyAxIGRlbm90ZXMgYWx0ZXJuYXRpdmUgSUFMVSBpbXBsZW1lbnRh dGlvbiwgd2hpY2ggcGVyZm9ybXMKLSsJIyA4JSAqd29yc2UqIG9uIFA0LCBzYW1lIG9uIFdlc3Rt ZXJlIGFuZCBBdG9tLCAyJSBiZXR0ZXIgb24KLSsJIyBTYW5keSBCcmlkZ2UuLi4KLSsKLSBzdWIg Qk9EWV8wMF8xNQotIAl7Ci0gCWxvY2FsKCRuLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKLUBAIC01 OSwxNiArMTQ1LDE4IEBAIHN1YiBCT0RZXzAwXzE1Ci0gCSZyb3RsKCR0bXAxLDUpOwkJCSMgdG1w MT1ST1RBVEUoYSw1KQotIAkgJnhvcigkZiwkZCk7Ci0gCSZhZGQoJHRtcDEsJGUpOwkJCSMgdG1w MSs9ZTsKLS0JICZhbmQoJGYsJGIpOwotLQkmbW92KCRlLCZzd3RtcCgkbiUxNikpOwkJIyBlIGJl Y29tZXMgdm9sYXRpbGUgYW5kIGlzIGxvYWRlZAotKwkgJm1vdigkZSwmc3d0bXAoJG4lMTYpKTsJ IyBlIGJlY29tZXMgdm9sYXRpbGUgYW5kIGlzIGxvYWRlZAotIAkgCQkJCSMgd2l0aCB4aSwgYWxz byBub3RlIHRoYXQgZSBiZWNvbWVzCi0gCQkJCQkjIGYgaW4gbmV4dCByb3VuZC4uLgotLQkgJnhv cigkZiwkZCk7CQkJIyBmIGhvbGRzIEZfMDBfMTkoYixjLGQpCi0rCSZhbmQoJGYsJGIpOwotIAkm cm90cigkYiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCi0tCSAmbGVhKCR0bXAxLCZEV1AoMHg1YTgy Nzk5OSwkdG1wMSwkZSkpOwkjIHRtcDErPUtfMDBfMTkreGkKLSsJICZ4b3IoJGYsJGQpOwkJCSMg ZiBob2xkcyBGXzAwXzE5KGIsYyxkKQotKwkmbGVhKCR0bXAxLCZEV1AoMHg1YTgyNzk5OSwkdG1w MSwkZSkpOwkjIHRtcDErPUtfMDBfMTkreGkKLSAKLS0JaWYgKCRuPT0xNSkgeyAmYWRkKCRmLCR0 bXAxKTsgfQkjIGYrPXRtcDEKLSsJaWYgKCRuPT0xNSkgeyAmbW92KCRlLCZzd3RtcCgoJG4rMSkl MTYpKTsjIHByZS1mZXRjaCBmIGZvciBuZXh0IHJvdW5kCi0rCQkgICAgICAmYWRkKCRmLCR0bXAx KTsgfQkjIGYrPXRtcDEKLSAJZWxzZSAgICAgICAgeyAmYWRkKCR0bXAxLCRmKTsgfQkjIGYgYmVj b21lcyBhIGluIG5leHQgcm91bmQKLSsJJm1vdigkdG1wMSwkYSkJCQlpZiAoJGFsdCAmJiAkbj09 MTUpOwotIAl9Ci0gCi0gc3ViIEJPRFlfMTZfMTkKLUBAIC03NywyMiArMTY1LDQxIEBAIHN1YiBC T0RZXzE2XzE5Ci0gCi0gCSZjb21tZW50KCIxNl8xOSAkbiIpOwotIAotLQkmbW92KCRmLCZzd3Rt cCgkbiUxNikpOwkJIyBmIHRvIGhvbGQgWHVwZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKLS0JICZtb3Yo JHRtcDEsJGMpOwkJIyB0bXAxIHRvIGhvbGQgRl8wMF8xOShiLGMsZCkKLS0JJnhvcigkZiwmc3d0 bXAoKCRuKzIpJTE2KSk7Ci0tCSAmeG9yKCR0bXAxLCRkKTsKLS0JJnhvcigkZiwmc3d0bXAoKCRu KzgpJTE2KSk7Ci0tCSAmYW5kKCR0bXAxLCRiKTsJCSMgdG1wMSBob2xkcyBGXzAwXzE5KGIsYyxk KQotLQkmcm90cigkYiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCi0raWYgKCRhbHQpIHsKLSsJJnhv cigkYywkZCk7Ci0rCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsJIyBmIHRvIGhvbGQgWHVw ZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKLSsJJmFuZCgkdG1wMSwkYyk7CQkJIyB0bXAxIHRvIGhvbGQg Rl8wMF8xOShiLGMsZCksIGImPWNeZAotKwkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7Ci0r CSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMT1GXzAwXzE5KGIsYyxkKQotKwkgJnhvcigkZiwmc3d0 bXAoKCRuKzEzKSUxNikpOwkjIGYgaG9sZHMgeGFeeGJeeGNeeGQKLSsJJnJvdGwoJGYsMSk7CQkJ IyBmPVJPVEFURShmLDEpCi0rCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9Rl8wMF8xOShiLGMsZCkK LSsJJnhvcigkYywkZCk7CQkJIyByZXN0b3JlICRjCi0rCSAmbW92KCR0bXAxLCRhKTsJCSMgYiBp biBuZXh0IHJvdW5kCi0rCSZyb3RyKCRiLCRuPT0xNj8yOjcpOwkJIyBiPVJPVEFURShiLDMwKQot KwkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKTsJIyB4aT1mCi0rCSZyb3RsKCRhLDUpOwkJCSMgUk9U QVRFKGEsNSkKLSsJICZsZWEoJGYsJkRXUCgweDVhODI3OTk5LCRmLCRlKSk7IyBmKz1GXzAwXzE5 KGIsYyxkKStlCi0rCSZtb3YoJGUsJnN3dG1wKCgkbisxKSUxNikpOwkjIHByZS1mZXRjaCBmIGZv ciBuZXh0IHJvdW5kCi0rCSAmYWRkKCRmLCRhKTsJCQkjIGYrPVJPVEFURShhLDUpCi0rfSBlbHNl IHsKLSsJJm1vdigkdG1wMSwkYyk7CQkJIyB0bXAxIHRvIGhvbGQgRl8wMF8xOShiLGMsZCkKLSsJ ICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhi LHhjLHhkKQotKwkmeG9yKCR0bXAxLCRkKTsKLSsJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikp OwotKwkmYW5kKCR0bXAxLCRiKTsKLSAJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBm IGhvbGRzIHhhXnhiXnhjXnhkCi0gCSZyb3RsKCRmLDEpOwkJCSMgZj1ST1RBVEUoZiwxKQotIAkg JnhvcigkdG1wMSwkZCk7CQkjIHRtcDE9Rl8wMF8xOShiLGMsZCkKLS0JJm1vdigmc3d0bXAoJG4l MTYpLCRmKTsJCSMgeGk9ZgotLQkmbGVhKCRmLCZEV1AoMHg1YTgyNzk5OSwkZiwkZSkpOyMgZis9 S18wMF8xOStlCi0tCSAmbW92KCRlLCRhKTsJCQkjIGUgYmVjb21lcyB2b2xhdGlsZQotLQkmcm90 bCgkZSw1KTsJCQkjIGU9Uk9UQVRFKGEsNSkKLS0JICZhZGQoJGYsJHRtcDEpOwkJIyBmKz1GXzAw XzE5KGIsYyxkKQotLQkmYWRkKCRmLCRlKTsJCQkjIGYrPVJPVEFURShhLDUpCi0rCSZhZGQoJGUs JHRtcDEpOwkJCSMgZSs9Rl8wMF8xOShiLGMsZCkKLSsJICZtb3YoJHRtcDEsJGEpOwotKwkmcm90 cigkYiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCi0rCSAmbW92KCZzd3RtcCgkbiUxNiksJGYpOwkj IHhpPWYKLSsJJnJvdGwoJHRtcDEsNSk7CQkJIyBST1RBVEUoYSw1KQotKwkgJmxlYSgkZiwmRFdQ KDB4NWE4Mjc5OTksJGYsJGUpKTsjIGYrPUZfMDBfMTkoYixjLGQpK2UKLSsJJm1vdigkZSwmc3d0 bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKLSsJICZhZGQoJGYs JHRtcDEpOwkJIyBmKz1ST1RBVEUoYSw1KQotK30KLSAJfQotIAotIHN1YiBCT0RZXzIwXzM5Ci1A QCAtMTAyLDIxICsyMDksNDEgQEAgc3ViIEJPRFlfMjBfMzkKLSAKLSAJJmNvbW1lbnQoIjIwXzM5 ICRuIik7Ci0gCi0raWYgKCRhbHQpIHsKLSsJJnhvcigkdG1wMSwkYyk7CQkJIyB0bXAxIHRvIGhv bGQgRl8yMF8zOShiLGMsZCksIGJePWMKLSsJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkj IGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQotKwkmeG9yKCR0bXAxLCRkKTsJCQkj IHRtcDEgaG9sZHMgRl8yMF8zOShiLGMsZCkKLSsJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikp OwotKwkmYWRkKCRlLCR0bXAxKTsJCQkjIGUrPUZfMjBfMzkoYixjLGQpCi0rCSAmeG9yKCRmLCZz d3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAotKwkmcm90bCgkZiwxKTsJ CQkjIGY9Uk9UQVRFKGYsMSkKLSsJICZtb3YoJHRtcDEsJGEpOwkJIyBiIGluIG5leHQgcm91bmQK LSsJJnJvdHIoJGIsNyk7CQkJIyBiPVJPVEFURShiLDMwKQotKwkgJm1vdigmc3d0bXAoJG4lMTYp LCRmKQkJaWYoJG48NzcpOyMgeGk9ZgotKwkmcm90bCgkYSw1KTsJCQkjIFJPVEFURShhLDUpCi0r CSAmeG9yKCRiLCRjKQkJCWlmKCRuPT0zOSk7IyB3YXJtIHVwIGZvciBCT0RZXzQwXzU5Ci0rCSZh bmQoJHRtcDEsJGIpCQkJaWYoJG49PTM5KTsKLSsJICZsZWEoJGYsJkRXUCgkSywkZiwkZSkpOwkj IGYrPWUrS19YWF9ZWQotKwkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKQlpZigkbjw3OSk7IyBw cmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAotKwkgJmFkZCgkZiwkYSk7CQkJIyBmKz1ST1RBVEUo YSw1KQotKwkmcm90cigkYSw1KQkJCWlmICgkbj09NzkpOwotK30gZWxzZSB7Ci0gCSZtb3YoJHRt cDEsJGIpOwkJCSMgdG1wMSB0byBob2xkIEZfMjBfMzkoYixjLGQpCi0tCSAmbW92KCRmLCZzd3Rt cCgkbiUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQotLQkmcm90cigk YiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCi0tCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsK LSsJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhh LHhiLHhjLHhkKQotIAkmeG9yKCR0bXAxLCRjKTsKLSAJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUx NikpOwotIAkmeG9yKCR0bXAxLCRkKTsJCQkjIHRtcDEgaG9sZHMgRl8yMF8zOShiLGMsZCkKLSAJ ICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCi0gCSZy b3RsKCRmLDEpOwkJCSMgZj1ST1RBVEUoZiwxKQotLQkgJmFkZCgkdG1wMSwkZSk7Ci0tCSZtb3Yo JnN3dG1wKCRuJTE2KSwkZik7CQkjIHhpPWYKLS0JICZtb3YoJGUsJGEpOwkJCSMgZSBiZWNvbWVz IHZvbGF0aWxlCi0tCSZyb3RsKCRlLDUpOwkJCSMgZT1ST1RBVEUoYSw1KQotLQkgJmxlYSgkZiwm RFdQKCRLLCRmLCR0bXAxKSk7CSMgZis9S18yMF8zOStlCi0tCSZhZGQoJGYsJGUpOwkJCSMgZis9 Uk9UQVRFKGEsNSkKLSsJICZhZGQoJGUsJHRtcDEpOwkJIyBlKz1GXzIwXzM5KGIsYyxkKQotKwkm cm90cigkYiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCi0rCSAmbW92KCR0bXAxLCRhKTsKLSsJJnJv dGwoJHRtcDEsNSk7CQkJIyBST1RBVEUoYSw1KQotKwkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKSBp Zigkbjw3Nyk7IyB4aT1mCi0rCSZsZWEoJGYsJkRXUCgkSywkZiwkZSkpOwkjIGYrPWUrS19YWF9Z WQotKwkgJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSkgaWYoJG48NzkpOyMgcHJlLWZldGNoIGYg Zm9yIG5leHQgcm91bmQKLSsJJmFkZCgkZiwkdG1wMSk7CQkJIyBmKz1ST1RBVEUoYSw1KQotK30K LSAJfQotIAotIHN1YiBCT0RZXzQwXzU5Ci1AQCAtMTI1LDQxICsyNTIsODYgQEAgc3ViIEJPRFlf NDBfNTkKLSAKLSAJJmNvbW1lbnQoIjQwXzU5ICRuIik7Ci0gCi0tCSZtb3YoJGYsJnN3dG1wKCRu JTE2KSk7CQkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQotLQkgJm1vdigkdG1w MSwmc3d0bXAoKCRuKzIpJTE2KSk7Ci0tCSZ4b3IoJGYsJHRtcDEpOwotLQkgJm1vdigkdG1wMSwm c3d0bXAoKCRuKzgpJTE2KSk7Ci0tCSZ4b3IoJGYsJHRtcDEpOwotLQkgJm1vdigkdG1wMSwmc3d0 bXAoKCRuKzEzKSUxNikpOwotLQkmeG9yKCRmLCR0bXAxKTsJCQkjIGYgaG9sZHMgeGFeeGJeeGNe eGQKLS0JICZtb3YoJHRtcDEsJGIpOwkJIyB0bXAxIHRvIGhvbGQgRl80MF81OShiLGMsZCkKLStp ZiAoJGFsdCkgewotKwkmYWRkKCRlLCR0bXAxKTsJCQkjIGUrPWImKGNeZCkKLSsJICZ4b3IoJGYs JnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQot KwkmbW92KCR0bXAxLCRkKTsKLSsJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikpOwotKwkmeG9y KCRjLCRkKTsJCQkjIHJlc3RvcmUgJGMKLSsJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJ IyBmIGhvbGRzIHhhXnhiXnhjXnhkCi0gCSZyb3RsKCRmLDEpOwkJCSMgZj1ST1RBVEUoZiwxKQot LQkgJm9yKCR0bXAxLCRjKTsKLS0JJm1vdigmc3d0bXAoJG4lMTYpLCRmKTsJCSMgeGk9ZgotLQkg JmFuZCgkdG1wMSwkZCk7Ci0tCSZsZWEoJGYsJkRXUCgweDhmMWJiY2RjLCRmLCRlKSk7IyBmKz1L XzQwXzU5K2UKLS0JICZtb3YoJGUsJGIpOwkJCSMgZSBiZWNvbWVzIHZvbGF0aWxlIGFuZCBpcyB1 c2VkCi0tCQkJCQkjIHRvIGNhbGN1bGF0ZSBGXzQwXzU5KGIsYyxkKQotKwkgJmFuZCgkdG1wMSwk Yyk7Ci0rCSZyb3RyKCRiLDcpOwkJCSMgYj1ST1RBVEUoYiwzMCkKLSsJICZhZGQoJGUsJHRtcDEp OwkJIyBlKz1jJmQKLSsJJm1vdigkdG1wMSwkYSk7CQkJIyBiIGluIG5leHQgcm91bmQKLSsJICZt b3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgotKwkmcm90bCgkYSw1KTsJCQkjIFJPVEFURShh LDUpCi0rCSAmeG9yKCRiLCRjKQkJCWlmICgkbjw1OSk7Ci0rCSZhbmQoJHRtcDEsJGIpCQkJaWYg KCRuPDU5KTsjIHRtcDEgdG8gaG9sZCBGXzQwXzU5KGIsYyxkKQotKwkgJmxlYSgkZiwmRFdQKDB4 OGYxYmJjZGMsJGYsJGUpKTsjIGYrPUtfNDBfNTkrZSsoYiYoY15kKSkKLSsJJm1vdigkZSwmc3d0 bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKLSsJICZhZGQoJGYs JGEpOwkJCSMgZis9Uk9UQVRFKGEsNSkKLSt9IGVsc2UgewotKwkmbW92KCR0bXAxLCRjKTsJCQkj IHRtcDEgdG8gaG9sZCBGXzQwXzU5KGIsYyxkKQotKwkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2 KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCi0rCSZ4b3IoJHRtcDEsJGQp OwotKwkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7Ci0rCSZhbmQoJHRtcDEsJGIpOwotKwkg JnhvcigkZiwmc3d0bXAoKCRuKzEzKSUxNikpOwkjIGYgaG9sZHMgeGFeeGJeeGNeeGQKLSsJJnJv dGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCi0rCSAmYWRkKCR0bXAxLCRlKTsJCSMgYiYoY15k KSs9ZQotIAkmcm90cigkYiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCi0tCSAmYW5kKCRlLCRjKTsK LS0JJm9yKCR0bXAxLCRlKTsJCQkjIHRtcDEgaG9sZHMgRl80MF81OShiLGMsZCkJCQotLQkgJm1v digkZSwkYSk7Ci0tCSZyb3RsKCRlLDUpOwkJCSMgZT1ST1RBVEUoYSw1KQotLQkgJmFkZCgkZiwk dG1wMSk7CQkjIGYrPXRtcDE7Ci0rCSAmbW92KCRlLCRhKTsJCQkjIGUgYmVjb21lcyB2b2xhdGls ZQotKwkmcm90bCgkZSw1KTsJCQkjIFJPVEFURShhLDUpCi0rCSAmbW92KCZzd3RtcCgkbiUxNiks JGYpOwkjIHhpPWYKLSsJJmxlYSgkZiwmRFdQKDB4OGYxYmJjZGMsJGYsJHRtcDEpKTsjIGYrPUtf NDBfNTkrZSsoYiYoY15kKSkKLSsJICZtb3YoJHRtcDEsJGMpOwotIAkmYWRkKCRmLCRlKTsJCQkj IGYrPVJPVEFURShhLDUpCi0rCSAmYW5kKCR0bXAxLCRkKTsKLSsJJm1vdigkZSwmc3d0bXAoKCRu KzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKLSsJICZhZGQoJGYsJHRtcDEp OwkJIyBmKz1jJmQKLSt9Ci0gCX0KLSAKLSAmZnVuY3Rpb25fYmVnaW4oInNoYTFfYmxvY2tfZGF0 YV9vcmRlciIpOwotK2lmICgkeG1tKSB7Ci0rICAmc3RhdGljX2xhYmVsKCJzc3NlM19zaG9ydGN1 dCIpOwotKyAgJnN0YXRpY19sYWJlbCgiYXZ4X3Nob3J0Y3V0IikJCWlmICgkeW1tKTsKLSsgICZz dGF0aWNfbGFiZWwoIktfWFhfWFgiKTsKLSsKLSsJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50Iikp OwkjIG1ha2UgaXQgUElDIQotKyAgJnNldF9sYWJlbCgicGljX3BvaW50Iik7Ci0rCSZibGluZHBv cCgkdG1wMSk7Ci0rCSZwaWNtZXVwKCRULCJPUEVOU1NMX2lhMzJjYXBfWCIsJHRtcDEsJmxhYmVs KCJwaWNfcG9pbnQiKSk7Ci0rCSZsZWEJKCR0bXAxLCZEV1AoJmxhYmVsKCJLX1hYX1hYIikuIi0i LiZsYWJlbCgicGljX3BvaW50IiksJHRtcDEpKTsKLSsKLSsJJm1vdgkoJEEsJkRXUCgwLCRUKSk7 Ci0rCSZtb3YJKCRELCZEV1AoNCwkVCkpOwotKwkmdGVzdAkoJEQsMTw8OSk7CQkjIGNoZWNrIFNT U0UzIGJpdAotKwkmanoJKCZsYWJlbCgieDg2IikpOwotKwkmdGVzdAkoJEEsMTw8MjQpOwkJIyBj aGVjayBGWFNSIGJpdAotKwkmanoJKCZsYWJlbCgieDg2IikpOwotKwlpZiAoJHltbSkgewotKwkJ JmFuZAkoJEQsMTw8MjgpOwkJIyBtYXNrIEFWWCBiaXQKLSsJCSZhbmQJKCRBLDE8PDMwKTsJCSMg bWFzayAiSW50ZWwgQ1BVIiBiaXQKLSsJCSZvcgkoJEEsJEQpOwotKwkJJmNtcAkoJEEsMTw8Mjh8 MTw8MzApOwotKwkJJmplCSgmbGFiZWwoImF2eF9zaG9ydGN1dCIpKTsKLSsJfQotKwkmam1wCSgm bGFiZWwoInNzc2UzX3Nob3J0Y3V0IikpOwotKyAgJnNldF9sYWJlbCgieDg2IiwxNik7Ci0rfQot IAkmbW92KCR0bXAxLCZ3cGFyYW0oMCkpOwkjIFNIQV9DVFggKmMKLSAJJm1vdigkVCwmd3BhcmFt KDEpKTsJIyBjb25zdCB2b2lkICppbnB1dAotIAkmbW92KCRBLCZ3cGFyYW0oMikpOwkjIHNpemVf dCBudW0KLS0JJnN0YWNrX3B1c2goMTYpOwkjIGFsbG9jYXRlIFhbMTZdCi0rCSZzdGFja19wdXNo KDE2KzMpOwkjIGFsbG9jYXRlIFhbMTZdCi0gCSZzaGwoJEEsNik7Ci0gCSZhZGQoJEEsJFQpOwot IAkmbW92KCZ3cGFyYW0oMiksJEEpOwkjIHBvaW50ZXIgYmV5b25kIHRoZSBlbmQgb2YgaW5wdXQK LSAJJm1vdigkRSwmRFdQKDE2LCR0bXAxKSk7IyBwcmUtbG9hZCBFCi0rCSZqbXAoJmxhYmVsKCJs b29wIikpOwotIAotLQkmc2V0X2xhYmVsKCJsb29wIiwxNik7Ci0rJnNldF9sYWJlbCgibG9vcCIs MTYpOwotIAotIAkjIGNvcHkgaW5wdXQgY2h1bmsgdG8gWCwgYnV0IHJldmVyc2luZyBieXRlIG9y ZGVyIQotIAlmb3IgKCRpPTA7ICRpPDE2OyAkaSs9NCkKLUBAIC0yMTMsOCArMzg1LDg0NSBAQCBz dWIgQk9EWV80MF81OQotIAkmbW92KCZEV1AoMTYsJHRtcDEpLCRDKTsKLSAJJmpiKCZsYWJlbCgi bG9vcCIpKTsKLSAKLS0JJnN0YWNrX3BvcCgxNik7Ci0rCSZzdGFja19wb3AoMTYrMyk7Ci0gJmZ1 bmN0aW9uX2VuZCgic2hhMV9ibG9ja19kYXRhX29yZGVyIik7Ci0rCi0raWYgKCR4bW0pIHsKLSsj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCi0rIyBUaGUgU1NTRTMgaW1wbGVtZW50YXRpb24uCi0rIwotKyMgJXhtbVsw LTddIGFyZSB1c2VkIGFzIHJpbmcgQFhbXSBidWZmZXIgY29udGFpbmluZyBxdWFkcnVwbGVzIG9m IGxhc3QKLSsjIDMyIGVsZW1lbnRzIG9mIHRoZSBtZXNzYWdlIHNjaGVkdWxlIG9yIFh1cGRhdGUg b3V0cHV0cy4gRmlyc3QgNAotKyMgcXVhZHJ1cGxlcyBhcmUgc2ltcGx5IGJ5dGUtc3dhcHBlZCBp bnB1dCwgbmV4dCA0IGFyZSBjYWxjdWxhdGVkCi0rIyBhY2NvcmRpbmcgdG8gbWV0aG9kIG9yaWdp bmFsbHkgc3VnZ2VzdGVkIGJ5IERlYW4gR2F1ZGV0IChtb2R1bG8KLSsjIGJlaW5nIGltcGxlbWVu dGVkIGluIFNTU0UzKS4gT25jZSA4IHF1YWRydXBsZXMgb3IgMzIgZWxlbWVudHMgYXJlCi0rIyBj b2xsZWN0ZWQsIGl0IHN3aXRjaGVzIHRvIHJvdXRpbmUgcHJvcG9zZWQgYnkgTWF4IExvY2t0eXVr aGluLgotKyMKLSsjIENhbGN1bGF0aW9ucyBpbmV2aXRhYmx5IHJlcXVpcmUgdGVtcG9yYXJ5IHJl cWlzdGVycywgYW5kIHRoZXJlIGFyZQotKyMgbm8gJXhtbSByZWdpc3RlcnMgbGVmdCB0byBzcGFy ZS4gRm9yIHRoaXMgcmVhc29uIHBhcnQgb2YgdGhlIHJpbmcKLSsjIGJ1ZmZlciwgWFsyLi40XSB0 byBiZSBzcGVjaWZpYywgaXMgb2ZmbG9hZGVkIHRvIDMgcXVhZHJpcGxlcyByaW5nCi0rIyBidWZm ZXIgb24gdGhlIHN0YWNrLiBLZWVwIGluIG1pbmQgdGhhdCBYWzJdIGlzIGFsaWFzIFhbLTZdLCBY WzNdIC0KLSsjIFhbLTVdLCBhbmQgWFs0XSAtIFhbLTRdLi4uCi0rIwotKyMgQW5vdGhlciBub3Rh YmxlIG9wdGltaXphdGlvbiBpcyBhZ2dyZXNzaXZlIHN0YWNrIGZyYW1lIGNvbXByZXNzaW9uCi0r IyBhaW1pbmcgdG8gbWluaW1pemUgYW1vdW50IG9mIDktYnl0ZSBpbnN0cnVjdGlvbnMuLi4KLSsj Ci0rIyBZZXQgYW5vdGhlciBub3RhYmxlIG9wdGltaXphdGlvbiBpcyAianVtcGluZyIgJEIgdmFy aWFibGUuIEl0IG1lYW5zCi0rIyB0aGF0IHRoZXJlIGlzIG5vIHJlZ2lzdGVyIHBlcm1hbmVudGx5 IGFsbG9jYXRlZCBmb3IgJEIgdmFsdWUuIFRoaXMKLSsjIGFsbG93ZWQgdG8gZWxpbWluYXRlIG9u ZSBpbnN0cnVjdGlvbiBmcm9tIGJvZHlfMjBfMzkuLi4KLSsjCi0rbXkgJFhpPTQ7CQkJIyA0eFNJ TUQgWHVwZGF0ZSByb3VuZCwgc3RhcnQgcHJlLXNlZWRlZAotK215IEBYPW1hcCgieG1tJF8iLCg0 Li43LDAuLjMpKTsJIyBwcmUtc2VlZGVkIGZvciAkWGk9NAotK215IEBWPSgkQSwkQiwkQywkRCwk RSk7Ci0rbXkgJGo9MDsJCQkjIGhhc2ggcm91bmQKLStteSBAVD0oJFQsJHRtcDEpOwotK215ICRp bnA7Ci0rCi0rbXkgJF9yb2w9c3ViIHsgJnJvbChAXykgfTsKLStteSAkX3Jvcj1zdWIgeyAmcm9y KEBfKSB9OwotKwotKyZmdW5jdGlvbl9iZWdpbigiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3Nl MyIpOwotKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCi0rCSZz ZXRfbGFiZWwoInBpY19wb2ludCIpOwotKwkmYmxpbmRwb3AoJHRtcDEpOwotKwkmbGVhCSgkdG1w MSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7 Ci0rJnNldF9sYWJlbCgic3NzZTNfc2hvcnRjdXQiKTsKLSsKLSsJJm1vdmRxYQkoQFhbM10sJlFX UCgwLCR0bXAxKSk7CQkjIEtfMDBfMTkKLSsJJm1vdmRxYQkoQFhbNF0sJlFXUCgxNiwkdG1wMSkp OwkJIyBLXzIwXzM5Ci0rCSZtb3ZkcWEJKEBYWzVdLCZRV1AoMzIsJHRtcDEpKTsJCSMgS180MF81 OQotKwkmbW92ZHFhCShAWFs2XSwmUVdQKDQ4LCR0bXAxKSk7CQkjIEtfNjBfNzkKLSsJJm1vdmRx YQkoQFhbMl0sJlFXUCg2NCwkdG1wMSkpOwkJIyBwYnN3YXAgbWFzawotKwotKwkmbW92CSgkRSwm d3BhcmFtKDApKTsJCSMgbG9hZCBhcmd1bWVudCBibG9jawotKwkmbW92CSgkaW5wPUBUWzFdLCZ3 cGFyYW0oMSkpOwotKwkmbW92CSgkRCwmd3BhcmFtKDIpKTsKLSsJJm1vdgkoQFRbMF0sImVzcCIp OwotKwotKwkjIHN0YWNrIGZyYW1lIGxheW91dAotKwkjCi0rCSMgKzAJWFswXStLCVhbMV0rSwlY WzJdK0sJWFszXStLCSMgWE1NLT5JQUxVIHhmZXIgYXJlYQotKwkjCVhbNF0rSwlYWzVdK0sJWFs2 XStLCVhbN10rSwotKwkjCVhbOF0rSwlYWzldK0sJWFsxMF0rSwlYWzExXStLCi0rCSMJWFsxMl0r SwlYWzEzXStLCVhbMTRdK0sJWFsxNV0rSwotKwkjCi0rCSMgKzY0CVhbMF0JWFsxXQlYWzJdCVhb M10JIyBYTU0tPlhNTSBiYWNrdHJhY2UgYXJlYQotKwkjCVhbNF0JWFs1XQlYWzZdCVhbN10KLSsJ IwlYWzhdCVhbOV0JWFsxMF0JWFsxMV0JIyBldmVuIGJvcnJvd2VkIGZvciBLXzAwXzE5Ci0rCSMK LSsJIyArMTEyCUtfMjBfMzkJS18yMF8zOQlLXzIwXzM5CUtfMjBfMzkJIyBjb25zdGFudHMKLSsJ IwlLXzQwXzU5CUtfNDBfNTkJS180MF81OQlLXzQwXzU5Ci0rCSMJS182MF83OQlLXzYwXzc5CUtf NjBfNzkJS182MF83OQotKwkjCUtfMDBfMTkJS18wMF8xOQlLXzAwXzE5CUtfMDBfMTkKLSsJIwlw YnN3YXAgbWFzawotKwkjCi0rCSMgKzE5MgljdHgJCQkJIyBhcmd1bWVudCBibG9jawotKwkjICsx OTYJaW5wCi0rCSMgKzIwMAllbmQKLSsJIyArMjA0CWVzcAotKwkmc3ViCSgiZXNwIiwyMDgpOwot KwkmYW5kCSgiZXNwIiwtNjQpOwotKwotKwkmbW92ZHFhCSgmUVdQKDExMiswLCJlc3AiKSxAWFs0 XSk7CSMgY29weSBjb25zdGFudHMKLSsJJm1vdmRxYQkoJlFXUCgxMTIrMTYsImVzcCIpLEBYWzVd KTsKLSsJJm1vdmRxYQkoJlFXUCgxMTIrMzIsImVzcCIpLEBYWzZdKTsKLSsJJnNobAkoJEQsNik7 CQkJCSMgbGVuKjY0Ci0rCSZtb3ZkcWEJKCZRV1AoMTEyKzQ4LCJlc3AiKSxAWFszXSk7Ci0rCSZh ZGQJKCRELCRpbnApOwkJCSMgZW5kIG9mIGlucHV0Ci0rCSZtb3ZkcWEJKCZRV1AoMTEyKzY0LCJl c3AiKSxAWFsyXSk7Ci0rCSZhZGQJKCRpbnAsNjQpOwotKwkmbW92CSgmRFdQKDE5MiswLCJlc3Ai KSwkRSk7CQkjIHNhdmUgYXJndW1lbnQgYmxvY2sKLSsJJm1vdgkoJkRXUCgxOTIrNCwiZXNwIiks JGlucCk7Ci0rCSZtb3YJKCZEV1AoMTkyKzgsImVzcCIpLCREKTsKLSsJJm1vdgkoJkRXUCgxOTIr MTIsImVzcCIpLEBUWzBdKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKLSsKLSsJJm1vdgkoJEEsJkRX UCgwLCRFKSk7CQkjIGxvYWQgY29udGV4dAotKwkmbW92CSgkQiwmRFdQKDQsJEUpKTsKLSsJJm1v dgkoJEMsJkRXUCg4LCRFKSk7Ci0rCSZtb3YJKCRELCZEV1AoMTIsJEUpKTsKLSsJJm1vdgkoJEUs JkRXUCgxNiwkRSkpOwotKwkmbW92CShAVFswXSwkQik7CQkJIyBtYWdpYyBzZWVkCi0rCi0rCSZt b3ZkcXUJKEBYWy00JjddLCZRV1AoLTY0LCRpbnApKTsJIyBsb2FkIGlucHV0IHRvICV4bW1bMC0z XQotKwkmbW92ZHF1CShAWFstMyY3XSwmUVdQKC00OCwkaW5wKSk7Ci0rCSZtb3ZkcXUJKEBYWy0y JjddLCZRV1AoLTMyLCRpbnApKTsKLSsJJm1vdmRxdQkoQFhbLTEmN10sJlFXUCgtMTYsJGlucCkp OwotKwkmcHNodWZiCShAWFstNCY3XSxAWFsyXSk7CQkjIGJ5dGUgc3dhcAotKwkmcHNodWZiCShA WFstMyY3XSxAWFsyXSk7Ci0rCSZwc2h1ZmIJKEBYWy0yJjddLEBYWzJdKTsKLSsJJm1vdmRxYQko JlFXUCgxMTItMTYsImVzcCIpLEBYWzNdKTsJIyBib3Jyb3cgbGFzdCBiYWNrdHJhY2Ugc2xvdAot KwkmcHNodWZiCShAWFstMSY3XSxAWFsyXSk7Ci0rCSZwYWRkZAkoQFhbLTQmN10sQFhbM10pOwkJ IyBhZGQgS18wMF8xOQotKwkmcGFkZGQJKEBYWy0zJjddLEBYWzNdKTsKLSsJJnBhZGRkCShAWFst MiY3XSxAWFszXSk7Ci0rCSZtb3ZkcWEJKCZRV1AoMCwiZXNwIiksQFhbLTQmN10pOwkjIFhbXStL IHhmZXIgdG8gSUFMVQotKwkmcHN1YmQJKEBYWy00JjddLEBYWzNdKTsJCSMgcmVzdG9yZSBYW10K LSsJJm1vdmRxYQkoJlFXUCgwKzE2LCJlc3AiKSxAWFstMyY3XSk7Ci0rCSZwc3ViZAkoQFhbLTMm N10sQFhbM10pOwotKwkmbW92ZHFhCSgmUVdQKDArMzIsImVzcCIpLEBYWy0yJjddKTsKLSsJJnBz dWJkCShAWFstMiY3XSxAWFszXSk7Ci0rCSZtb3ZkcWEJKEBYWzBdLEBYWy0zJjddKTsKLSsJJmpt cAkoJmxhYmVsKCJsb29wIikpOwotKwotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSsjIFNTRSBpbnN0cnVjdGlv biBzZXF1ZW5jZSBpcyBmaXJzdCBicm9rZW4gdG8gZ3JvdXBzIG9mIGluZGVwZW50ZW50Ci0rIyBp bnN0cnVjdGlvbnMsIGluZGVwZW5kZW50IGluIHJlc3BlY3QgdG8gdGhlaXIgaW5wdXRzIGFuZCBz aGlmdGVyCi0rIyAobm90IGFsbCBhcmNoaXRlY3R1cmVzIGhhdmUgbW9yZSB0aGFuIG9uZSkuIFRo ZW4gSUFMVSBpbnN0cnVjdGlvbnMKLSsjIGFyZSAia25pdHRlZCBpbiIgYmV0d2VlbiB0aGUgU1NF IGdyb3Vwcy4gRGlzdGFuY2UgaXMgbWFpbnRhaW5lZCBmb3IKLSsjIFNTRSBsYXRlbmN5IG9mIDIg aW4gaG9wZSB0aGF0IGl0IGZpdHMgYmV0dGVyIHVwY29taW5nIEFNRCBCdWxsZG96ZXIKLSsjIFt3 aGljaCBhbGxlZ2VkbHkgYWxzbyBpbXBsZW1lbnRzIFNTU0UzXS4uLgotKyMKLSsjIFRlbXBvcmFy eSByZWdpc3RlcnMgdXNhZ2UuIFhbMl0gaXMgdm9sYXRpbGUgYXQgdGhlIGVudHJ5IGFuZCBhdCB0 aGUKLSsjIGVuZCBpcyByZXN0b3JlZCBmcm9tIGJhY2t0cmFjZSByaW5nIGJ1ZmZlci4gWFszXSBp cyBleHBlY3RlZCB0bwotKyMgY29udGFpbiBjdXJyZW50IEtfWFhfWFggY29uc3RhbnQgYW5kIGlz IHVzZWQgdG8gY2FjbHVsYXRlIFhbLTFdK0sKLSsjIGZyb20gcHJldmlvdXMgcm91bmQsIGl0IGJl Y29tZXMgdm9sYXRpbGUgdGhlIG1vbWVudCB0aGUgdmFsdWUgaXMKLSsjIHNhdmVkIHRvIHN0YWNr IGZvciB0cmFuc2ZlciB0byBJQUxVLiBYWzRdIGJlY29tZXMgdm9sYXRpbGUgd2hlbmV2ZXIKLSsj IFhbLTRdIGlzIGFjY3VtdWxhdGVkIGFuZCBvZmZsb2FkZWQgdG8gYmFja3RyYWNlIHJpbmcgYnVm ZmVyLCBhdCB0aGUKLSsjIGVuZCBpdCBpcyBsb2FkZWQgd2l0aCBuZXh0IEtfWFhfWFggW3doaWNo IGJlY29tZXMgWFszXSBpbiBuZXh0Ci0rIyByb3VuZF0uLi4KLSsjCi0rc3ViIFh1cGRhdGVfc3Nz ZTNfMTZfMzEoKQkJIyByZWNhbGwgdGhhdCAkWGkgc3RhcnRzIHd0aWggNAotK3sgdXNlIGludGVn ZXI7Ci0rICBteSAkYm9keSA9IHNoaWZ0OwotKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHks JiRib2R5LCYkYm9keSk7CSMgNDAgaW5zdHJ1Y3Rpb25zCi0rICBteSAoJGEsJGIsJGMsJGQsJGUp OwotKwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0r CSZwYWxpZ25yKEBYWzBdLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0i Ci0rCSZtb3ZkcWEJKEBYWzJdLEBYWy0xJjddKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0r CSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkgICZwYWRkZAkoQFhbM10sQFhbLTEmN10pOwot KwkgICZtb3ZkcWEJKCZRV1AoNjQrMTYqKCgkWGktNCklMyksImVzcCIpLEBYWy00JjddKTsjIHNh dmUgWFtdIHRvIGJhY2t0cmFjZSBidWZmZXIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBl dmFsKHNoaWZ0KEBpbnNucykpOwotKwkmcHNybGRxCShAWFsyXSw0KTsJCSMgIlhbLTNdIiwgMyBk d29yZHMKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwot KwkmcHhvcgkoQFhbMF0sQFhbLTQmN10pOwkjICJYWzBdIl49IlhbLTE2XSIKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkmcHhvcgkoQFhbMl0s QFhbLTImN10pOwkjICJYWy0zXSJeIlhbLThdIgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJ IGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChz aGlmdChAaW5zbnMpKTsKLSsKLSsJJnB4b3IJKEBYWzBdLEBYWzJdKTsJCSMgIlhbMF0iXj0iWFst M10iXiJYWy04XSIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwkgICZtb3ZkcWEJKCZRV1AoMCsxNiooKCRYaS0xKSYzKSwiZXNwIiksQFhbM10pOwkj IFhbXStLIHhmZXIgdG8gSUFMVQotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCi0rCSZtb3ZkcWEJKEBYWzRdLEBYWzBdKTsKLSsJJm1vdmRxYQkoQFhb Ml0sQFhbMF0pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25z KSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsK LSsJJnBzbGxkcQkoQFhbNF0sMTIpOwkJIyAiWFswXSI8PDk2LCBleHRyYWN0IG9uZSBkd29yZAot KwkmcGFkZGQJKEBYWzBdLEBYWzBdKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFs KHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCi0rCSZwc3JsZAkoQFhbMl0sMzEpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSZtb3ZkcWEJKEBYWzNdLEBYWzRdKTsKLSsJ IGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkmcHNy bGQJKEBYWzRdLDMwKTsKLSsJJnBvcgkoQFhbMF0sQFhbMl0pOwkJIyAiWFswXSI8PDw9MQotKwkg ZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSAgJm1vdmRx YQkoQFhbMl0sJlFXUCg2NCsxNiooKCRYaS02KSUzKSwiZXNwIikpIGlmICgkWGk+NSk7CSMgcmVz dG9yZSBYW10gZnJvbSBiYWNrdHJhY2UgYnVmZmVyCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwot KwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJJnBzbGxkCShAWFszXSwyKTsKLSsJJnB4b3IJ KEBYWzBdLEBYWzRdKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBp bnNucykpOwotKwkgICZtb3ZkcWEJKEBYWzRdLCZRV1AoMTEyLTE2KzE2KigoJFhpKS81KSwiZXNw IikpOwkjIEtfWFhfWFgKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBp bnNucykpOwotKwotKwkmcHhvcgkoQFhbMF0sQFhbM10pOwkJIyAiWFswXSJePSgiWFswXSI8PDk2 KTw8PDIKLSsJICAmbW92ZHFhCShAWFsxXSxAWFstMiY3XSkJaWYgKCRYaTw3KTsKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkgZm9yZWFjaCAo QGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zIFtpZiBhbnldCi0rCi0r ICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQotK30KLSsKLStzdWIg WHVwZGF0ZV9zc3NlM18zMl83OSgpCi0reyB1c2UgaW50ZWdlcjsKLSsgIG15ICRib2R5ID0gc2hp ZnQ7Ci0rICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiB0 byA0OCBpbnN0cnVjdGlvbnMKLSsgIG15ICgkYSwkYiwkYywkZCwkZSk7Ci0rCi0rCSZtb3ZkcWEJ KEBYWzJdLEBYWy0xJjddKQlpZiAoJFhpPT04KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkj IGJvZHlfMjBfMzkKLSsJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSI9IlhbLTMyXSJe IlhbLTE2XSIKLSsJJnBhbGlnbnIoQFhbMl0sQFhbLTImN10sOCk7CSMgY29tcG9zZSAiWFstNl0i Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2 YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAotKwotKwkmcHhvcgkoQFhbMF0sQFhbLTcmN10pOwkj ICJYWzBdIl49IlhbLTI4XSIKLSsJICAmbW92ZHFhCSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJl c3AiKSxAWFstNCY3XSk7CSMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgotKwkgZXZhbChz aGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBpZiAoJFhpJTUpIHsK LSsJICAmbW92ZHFhCShAWFs0XSxAWFszXSk7CSMgInBlcnBldHVhdGUiIEtfWFhfWFguLi4KLSsJ IH0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQotKwkgICZtb3ZkcWEJKEBYWzRdLCZR V1AoMTEyLTE2KzE2KigkWGkvNSksImVzcCIpKTsKLSsJIH0KLSsJICAmcGFkZGQJKEBYWzNdLEBY Wy0xJjddKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChA aW5zbnMpKTsKLSsKLSsJJnB4b3IJKEBYWzBdLEBYWzJdKTsJCSMgIlhbMF0iXj0iWFstNl0iCi0r CSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkj IHJvbAotKwotKwkmbW92ZHFhCShAWFsyXSxAWFswXSk7Ci0rCSAgJm1vdmRxYQkoJlFXUCgwKzE2 KigoJFhpLTEpJjMpLCJlc3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCi0rCSBldmFs KHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJJnBzbGxkCShA WFswXSwyKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSZwc3JsZAkoQFhbMl0sMzApOwotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJ IyByb3IKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZwb3IJKEBYWzBdLEBYWzJdKTsJ CSMgIlhbMF0iPDw8PTIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKLSsJ IGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSAgJm1vdmRxYQkoQFhbMl0sJlFXUCg2NCsxNiooKCRY aS02KSUzKSwiZXNwIikpIGlmKCRYaTwxOSk7CSMgcmVzdG9yZSBYW10gZnJvbSBiYWNrdHJhY2Ug YnVmZmVyCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJ CSMgcm9sCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsK LSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgotKwkgICZtb3ZkcWEJKEBYWzNdLEBYWzBd KQlpZiAoJFhpPDE5KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSBmb3JlYWNoIChA aW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKLSsKLSsgICRYaSsrOwlw dXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCi0rfQotKwotK3N1YiBYdXBsYXN0X3Nz c2UzXzgwKCkKLSt7IHVzZSBpbnRlZ2VyOwotKyAgbXkgJGJvZHkgPSBzaGlmdDsKLSsgIG15IEBp bnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwot KyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKLSsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSAg JnBhZGRkCShAWFszXSxAWFstMSY3XSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZh bChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwotKwkgICZtb3ZkcWEJKCZRV1AoMCsxNiooKCRYaS0xKSYzKSwiZXNwIiks QFhbM10pOwkjIFhbXStLIHhmZXIgSUFMVQotKwotKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7 IH0JCSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwotKwotKwkmbW92CSgkaW5wPUBUWzFdLCZEV1Ao MTkyKzQsImVzcCIpKTsKLSsJJmNtcAkoJGlucCwmRFdQKDE5Mis4LCJlc3AiKSk7Ci0rCSZqZQko JmxhYmVsKCJkb25lIikpOwotKwotKwkmbW92ZHFhCShAWFszXSwmUVdQKDExMis0OCwiZXNwIikp OwkjIEtfMDBfMTkKLSsJJm1vdmRxYQkoQFhbMl0sJlFXUCgxMTIrNjQsImVzcCIpKTsJIyBwYnN3 YXAgbWFzawotKwkmbW92ZHF1CShAWFstNCY3XSwmUVdQKDAsJGlucCkpOwkjIGxvYWQgaW5wdXQK LSsJJm1vdmRxdQkoQFhbLTMmN10sJlFXUCgxNiwkaW5wKSk7Ci0rCSZtb3ZkcXUJKEBYWy0yJjdd LCZRV1AoMzIsJGlucCkpOwotKwkmbW92ZHF1CShAWFstMSY3XSwmUVdQKDQ4LCRpbnApKTsKLSsJ JmFkZAkoJGlucCw2NCk7Ci0rCSZwc2h1ZmIJKEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2Fw Ci0rCSZtb3YJKCZEV1AoMTkyKzQsImVzcCIpLCRpbnApOwotKwkmbW92ZHFhCSgmUVdQKDExMi0x NiwiZXNwIiksQFhbM10pOwkjIGJvcnJvdyBsYXN0IGJhY2t0cmFjZSBzbG90Ci0rCi0rICAkWGk9 MDsKLSt9Ci0rCi0rc3ViIFhsb29wX3Nzc2UzKCkKLSt7IHVzZSBpbnRlZ2VyOwotKyAgbXkgJGJv ZHkgPSBzaGlmdDsKLSsgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkp OwkjIDMyIGluc3RydWN0aW9ucwotKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKLSsKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkmcHNodWZiCShAWFso JFhpLTMpJjddLEBYWzJdKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwkmcGFkZGQJKEBYWygkWGktNCkmN10sQFhbM10pOwotKwkgZXZhbChzaGlm dChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJJm1vdmRxYQkoJlFXUCgwKzE2KiRYaSwi ZXNwIiksQFhbKCRYaS00KSY3XSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCi0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJJnBzdWJkCShAWFsoJFhpLTQp JjddLEBYWzNdKTsKLSsKLSsJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KLSsgICRYaSsrOwot K30KLSsKLStzdWIgWHRhaWxfc3NzZTMoKQotK3sgdXNlIGludGVnZXI7Ci0rICBteSAkYm9keSA9 IHNoaWZ0OwotKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMg MzIgaW5zdHJ1Y3Rpb25zCi0rICBteSAoJGEsJGIsJGMsJGQsJGUpOwotKwotKwlmb3JlYWNoIChA aW5zbnMpIHsgZXZhbDsgfQotK30KLSsKLStzdWIgYm9keV8wMF8xOSAoKSB7Ci0rCSgKLSsJJygk YSwkYiwkYywkZCwkZSk9QFY7Jy4KLSsJJyZhZGQJKCRlLCZEV1AoNCooJGomMTUpLCJlc3AiKSk7 JywJIyBYW10rSyB4ZmVyCi0rCScmeG9yCSgkYywkZCk7JywKLSsJJyZtb3YJKEBUWzFdLCRhKTsn LAkjICRiIGluIG5leHQgcm91bmQKLSsJJyYkX3JvbAkoJGEsNSk7JywKLSsJJyZhbmQJKEBUWzBd LCRjKTsnLAkjICgkYiYoJGNeJGQpKQotKwknJnhvcgkoJGMsJGQpOycsCSMgcmVzdG9yZSAkYwot KwknJnhvcgkoQFRbMF0sJGQpOycsCi0rCScmYWRkCSgkZSwkYSk7JywKLSsJJyYkX3JvcgkoJGIs JGo/NzoyKTsnLAkjICRiPj4+MgotKwknJmFkZAkoJGUsQFRbMF0pOycJLickaisrOyB1bnNoaWZ0 KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBULHBvcChAVCkpOycKLSsJKTsKLSt9Ci0rCi0rc3ViIGJv ZHlfMjBfMzkgKCkgewotKwkoCi0rCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCi0rCScmYWRkCSgk ZSwmRFdQKDQqKCRqKysmMTUpLCJlc3AiKSk7JywJIyBYW10rSyB4ZmVyCi0rCScmeG9yCShAVFsw XSwkZCk7JywJIyAoJGJeJGQpCi0rCScmbW92CShAVFsxXSwkYSk7JywJIyAkYiBpbiBuZXh0IHJv dW5kCi0rCScmJF9yb2wJKCRhLDUpOycsCi0rCScmeG9yCShAVFswXSwkYyk7JywJIyAoJGJeJGRe JGMpCi0rCScmYWRkCSgkZSwkYSk7JywKLSsJJyYkX3JvcgkoJGIsNyk7JywJIyAkYj4+PjIKLSsJ JyZhZGQJKCRlLEBUWzBdKTsnCS4ndW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3Ao QFQpKTsnCi0rCSk7Ci0rfQotKwotK3N1YiBib2R5XzQwXzU5ICgpIHsKLSsJKAotKwknKCRhLCRi LCRjLCRkLCRlKT1AVjsnLgotKwknJm1vdgkoQFRbMV0sJGMpOycsCi0rCScmeG9yCSgkYywkZCk7 JywKLSsJJyZhZGQJKCRlLCZEV1AoNCooJGorKyYxNSksImVzcCIpKTsnLAkjIFhbXStLIHhmZXIK LSsJJyZhbmQJKEBUWzFdLCRkKTsnLAotKwknJmFuZAkoQFRbMF0sJGMpOycsCSMgKCRiJigkY14k ZCkpCi0rCScmJF9yb3IJKCRiLDcpOycsCSMgJGI+Pj4yCi0rCScmYWRkCSgkZSxAVFsxXSk7JywK LSsJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGluIG5leHQgcm91bmQKLSsJJyYkX3JvbAkoJGEs NSk7JywKLSsJJyZhZGQJKCRlLEBUWzBdKTsnLAotKwknJnhvcgkoJGMsJGQpOycsCSMgcmVzdG9y ZSAkYwotKwknJmFkZAkoJGUsJGEpOycJLid1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBU LHBvcChAVCkpOycKLSsJKTsKLSt9Ci0rCi0rJnNldF9sYWJlbCgibG9vcCIsMTYpOwotKwkmWHVw ZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9zc3NlM18xNl8zMShc JmJvZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOwotKwkm WHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9zc3NlM18zMl83 OShcJmJvZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwot KwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwotKwkmWHVwZGF0ZV9zc3NlM18z Ml83OShcJmJvZHlfMjBfMzkpOwotKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkp OwotKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwotKwkmWHVwZGF0ZV9zc3Nl M18zMl83OShcJmJvZHlfNDBfNTkpOwotKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBf NTkpOwotKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOwotKwkmWHVwZGF0ZV9z c3NlM18zMl83OShcJmJvZHlfNDBfNTkpOwotKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlf NDBfNTkpOwotKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOwotKwkmWHVwbGFz dF9zc3NlM184MChcJmJvZHlfMjBfMzkpOwkjIGNhbiBqdW1wIHRvICJkb25lIgotKwotKwkJCQkk c2F2ZWRfaj0kajsgQHNhdmVkX1Y9QFY7Ci0rCi0rCSZYbG9vcF9zc3NlMyhcJmJvZHlfMjBfMzkp OwotKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKLSsJJlhsb29wX3Nzc2UzKFwmYm9keV8y MF8zOSk7Ci0rCi0rCSZtb3YJKEBUWzFdLCZEV1AoMTkyLCJlc3AiKSk7CSMgdXBkYXRlIGNvbnRl eHQKLSsJJmFkZAkoJEEsJkRXUCgwLEBUWzFdKSk7Ci0rCSZhZGQJKEBUWzBdLCZEV1AoNCxAVFsx XSkpOwkJIyAkYgotKwkmYWRkCSgkQywmRFdQKDgsQFRbMV0pKTsKLSsJJm1vdgkoJkRXUCgwLEBU WzFdKSwkQSk7Ci0rCSZhZGQJKCRELCZEV1AoMTIsQFRbMV0pKTsKLSsJJm1vdgkoJkRXUCg0LEBU WzFdKSxAVFswXSk7Ci0rCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKLSsJJm1vdgkoJkRXUCg4 LEBUWzFdKSwkQyk7Ci0rCSZtb3YJKCRCLEBUWzBdKTsKLSsJJm1vdgkoJkRXUCgxMixAVFsxXSks JEQpOwotKwkmbW92CSgmRFdQKDE2LEBUWzFdKSwkRSk7Ci0rCSZtb3ZkcWEJKEBYWzBdLEBYWy0z JjddKTsKLSsKLSsJJmptcAkoJmxhYmVsKCJsb29wIikpOwotKwotKyZzZXRfbGFiZWwoImRvbmUi LDE2KTsJCSRqPSRzYXZlZF9qOyBAVj1Ac2F2ZWRfVjsKLSsKLSsJJlh0YWlsX3Nzc2UzKFwmYm9k eV8yMF8zOSk7Ci0rCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOwotKwkmWHRhaWxfc3NzZTMo XCZib2R5XzIwXzM5KTsKLSsKLSsJJm1vdgkoQFRbMV0sJkRXUCgxOTIsImVzcCIpKTsJIyB1cGRh dGUgY29udGV4dAotKwkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKLSsJJm1vdgkoImVzcCIsJkRX UCgxOTIrMTIsImVzcCIpKTsJIyByZXN0b3JlICVlc3AKLSsJJmFkZAkoQFRbMF0sJkRXUCg0LEBU WzFdKSk7CQkjICRiCi0rCSZhZGQJKCRDLCZEV1AoOCxAVFsxXSkpOwotKwkmbW92CSgmRFdQKDAs QFRbMV0pLCRBKTsKLSsJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOwotKwkmbW92CSgmRFdQKDQs QFRbMV0pLEBUWzBdKTsKLSsJJmFkZAkoJEUsJkRXUCgxNixAVFsxXSkpOwotKwkmbW92CSgmRFdQ KDgsQFRbMV0pLCRDKTsKLSsJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOwotKwkmbW92CSgmRFdQ KDE2LEBUWzFdKSwkRSk7Ci0rCi0rJmZ1bmN0aW9uX2VuZCgiX3NoYTFfYmxvY2tfZGF0YV9vcmRl cl9zc3NlMyIpOwotKwotK2lmICgkeW1tKSB7Ci0rbXkgJFhpPTQ7CQkJIyA0eFNJTUQgWHVwZGF0 ZSByb3VuZCwgc3RhcnQgcHJlLXNlZWRlZAotK215IEBYPW1hcCgieG1tJF8iLCg0Li43LDAuLjMp KTsJIyBwcmUtc2VlZGVkIGZvciAkWGk9NAotK215IEBWPSgkQSwkQiwkQywkRCwkRSk7Ci0rbXkg JGo9MDsJCQkjIGhhc2ggcm91bmQKLStteSBAVD0oJFQsJHRtcDEpOwotK215ICRpbnA7Ci0rCi0r bXkgJF9yb2w9c3ViIHsgJnNobGQoQF9bMF0sQF8pIH07Ci0rbXkgJF9yb3I9c3ViIHsgJnNocmQo QF9bMF0sQF8pIH07Ci0rCi0rJmZ1bmN0aW9uX2JlZ2luKCJfc2hhMV9ibG9ja19kYXRhX29yZGVy X2F2eCIpOwotKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCi0r CSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwotKwkmYmxpbmRwb3AoJHRtcDEpOwotKwkmbGVhCSgk dG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAx KSk7Ci0rJnNldF9sYWJlbCgiYXZ4X3Nob3J0Y3V0Iik7Ci0rCSZ2emVyb2FsbCgpOwotKwotKwkm dm1vdmRxYShAWFszXSwmUVdQKDAsJHRtcDEpKTsJCSMgS18wMF8xOQotKwkmdm1vdmRxYShAWFs0 XSwmUVdQKDE2LCR0bXAxKSk7CQkjIEtfMjBfMzkKLSsJJnZtb3ZkcWEoQFhbNV0sJlFXUCgzMiwk dG1wMSkpOwkJIyBLXzQwXzU5Ci0rCSZ2bW92ZHFhKEBYWzZdLCZRV1AoNDgsJHRtcDEpKTsJCSMg S182MF83OQotKwkmdm1vdmRxYShAWFsyXSwmUVdQKDY0LCR0bXAxKSk7CQkjIHBic3dhcCBtYXNr Ci0rCi0rCSZtb3YJKCRFLCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGFyZ3VtZW50IGJsb2NrCi0rCSZt b3YJKCRpbnA9QFRbMV0sJndwYXJhbSgxKSk7Ci0rCSZtb3YJKCRELCZ3cGFyYW0oMikpOwotKwkm bW92CShAVFswXSwiZXNwIik7Ci0rCi0rCSMgc3RhY2sgZnJhbWUgbGF5b3V0Ci0rCSMKLSsJIyAr MAlYWzBdK0sJWFsxXStLCVhbMl0rSwlYWzNdK0sJIyBYTU0tPklBTFUgeGZlciBhcmVhCi0rCSMJ WFs0XStLCVhbNV0rSwlYWzZdK0sJWFs3XStLCi0rCSMJWFs4XStLCVhbOV0rSwlYWzEwXStLCVhb MTFdK0sKLSsJIwlYWzEyXStLCVhbMTNdK0sJWFsxNF0rSwlYWzE1XStLCi0rCSMKLSsJIyArNjQJ WFswXQlYWzFdCVhbMl0JWFszXQkjIFhNTS0+WE1NIGJhY2t0cmFjZSBhcmVhCi0rCSMJWFs0XQlY WzVdCVhbNl0JWFs3XQotKwkjCVhbOF0JWFs5XQlYWzEwXQlYWzExXQkjIGV2ZW4gYm9ycm93ZWQg Zm9yIEtfMDBfMTkKLSsJIwotKwkjICsxMTIJS18yMF8zOQlLXzIwXzM5CUtfMjBfMzkJS18yMF8z OQkjIGNvbnN0YW50cwotKwkjCUtfNDBfNTkJS180MF81OQlLXzQwXzU5CUtfNDBfNTkKLSsJIwlL XzYwXzc5CUtfNjBfNzkJS182MF83OQlLXzYwXzc5Ci0rCSMJS18wMF8xOQlLXzAwXzE5CUtfMDBf MTkJS18wMF8xOQotKwkjCXBic3dhcCBtYXNrCi0rCSMKLSsJIyArMTkyCWN0eAkJCQkjIGFyZ3Vt ZW50IGJsb2NrCi0rCSMgKzE5NglpbnAKLSsJIyArMjAwCWVuZAotKwkjICsyMDQJZXNwCi0rCSZz dWIJKCJlc3AiLDIwOCk7Ci0rCSZhbmQJKCJlc3AiLC02NCk7Ci0rCi0rCSZ2bW92ZHFhKCZRV1Ao MTEyKzAsImVzcCIpLEBYWzRdKTsJIyBjb3B5IGNvbnN0YW50cwotKwkmdm1vdmRxYSgmUVdQKDEx MisxNiwiZXNwIiksQFhbNV0pOwotKwkmdm1vdmRxYSgmUVdQKDExMiszMiwiZXNwIiksQFhbNl0p OwotKwkmc2hsCSgkRCw2KTsJCQkJIyBsZW4qNjQKLSsJJnZtb3ZkcWEoJlFXUCgxMTIrNDgsImVz cCIpLEBYWzNdKTsKLSsJJmFkZAkoJEQsJGlucCk7CQkJIyBlbmQgb2YgaW5wdXQKLSsJJnZtb3Zk cWEoJlFXUCgxMTIrNjQsImVzcCIpLEBYWzJdKTsKLSsJJmFkZAkoJGlucCw2NCk7Ci0rCSZtb3YJ KCZEV1AoMTkyKzAsImVzcCIpLCRFKTsJCSMgc2F2ZSBhcmd1bWVudCBibG9jawotKwkmbW92CSgm RFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKLSsJJm1vdgkoJkRXUCgxOTIrOCwiZXNwIiksJEQpOwot KwkmbW92CSgmRFdQKDE5MisxMiwiZXNwIiksQFRbMF0pOwkjIHNhdmUgb3JpZ2luYWwgJWVzcAot KwotKwkmbW92CSgkQSwmRFdQKDAsJEUpKTsJCSMgbG9hZCBjb250ZXh0Ci0rCSZtb3YJKCRCLCZE V1AoNCwkRSkpOwotKwkmbW92CSgkQywmRFdQKDgsJEUpKTsKLSsJJm1vdgkoJEQsJkRXUCgxMiwk RSkpOwotKwkmbW92CSgkRSwmRFdQKDE2LCRFKSk7Ci0rCSZtb3YJKEBUWzBdLCRCKTsJCQkjIG1h Z2ljIHNlZWQKLSsKLSsJJnZtb3ZkcXUoQFhbLTQmN10sJlFXUCgtNjQsJGlucCkpOwkjIGxvYWQg aW5wdXQgdG8gJXhtbVswLTNdCi0rCSZ2bW92ZHF1KEBYWy0zJjddLCZRV1AoLTQ4LCRpbnApKTsK LSsJJnZtb3ZkcXUoQFhbLTImN10sJlFXUCgtMzIsJGlucCkpOwotKwkmdm1vdmRxdShAWFstMSY3 XSwmUVdQKC0xNiwkaW5wKSk7Ci0rCSZ2cHNodWZiKEBYWy00JjddLEBYWy00JjddLEBYWzJdKTsJ IyBieXRlIHN3YXAKLSsJJnZwc2h1ZmIoQFhbLTMmN10sQFhbLTMmN10sQFhbMl0pOwotKwkmdnBz aHVmYihAWFstMiY3XSxAWFstMiY3XSxAWFsyXSk7Ci0rCSZ2bW92ZHFhKCZRV1AoMTEyLTE2LCJl c3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKLSsJJnZwc2h1ZmIoQFhb LTEmN10sQFhbLTEmN10sQFhbMl0pOwotKwkmdnBhZGRkCShAWFswXSxAWFstNCY3XSxAWFszXSk7 CQkjIGFkZCBLXzAwXzE5Ci0rCSZ2cGFkZGQJKEBYWzFdLEBYWy0zJjddLEBYWzNdKTsKLSsJJnZw YWRkZAkoQFhbMl0sQFhbLTImN10sQFhbM10pOwotKwkmdm1vdmRxYSgmUVdQKDAsImVzcCIpLEBY WzBdKTsJCSMgWFtdK0sgeGZlciB0byBJQUxVCi0rCSZ2bW92ZHFhKCZRV1AoMCsxNiwiZXNwIiks QFhbMV0pOwotKwkmdm1vdmRxYSgmUVdQKDArMzIsImVzcCIpLEBYWzJdKTsKLSsJJmptcAkoJmxh YmVsKCJsb29wIikpOwotKwotK3N1YiBYdXBkYXRlX2F2eF8xNl8zMSgpCQkjIHJlY2FsbCB0aGF0 ICRYaSBzdGFydHMgd3RpaCA0Ci0reyB1c2UgaW50ZWdlcjsKLSsgIG15ICRib2R5ID0gc2hpZnQ7 Ci0rICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyA0MCBpbnN0 cnVjdGlvbnMKLSsgIG15ICgkYSwkYiwkYywkZCwkZSk7Ci0rCi0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJJnZwYWxpZ25yKEBYWzBdLEBYWy0zJjdd LEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCi0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJICAmdnBhZGRkCShAWFsz XSxAWFszXSxAWFstMSY3XSk7Ci0rCSAgJnZtb3ZkcWEJKCZRV1AoNjQrMTYqKCgkWGktNCklMyks ImVzcCIpLEBYWy00JjddKTsjIHNhdmUgWFtdIHRvIGJhY2t0cmFjZSBidWZmZXIKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkmdnBzcmxkcShAWFsy XSxAWFstMSY3XSw0KTsJCSMgIlhbLTNdIiwgMyBkd29yZHMKLSsJIGV2YWwoc2hpZnQoQGluc25z KSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWy00 JjddKTsJCSMgIlhbMF0iXj0iWFstMTZdIgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2 YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZ2cHhvcgkoQFhbMl0sQFhbMl0sQFhbLTImN10pOwkJ IyAiWFstM10iXiJYWy04XSIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwkgICZ2bW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBY WzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBl dmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWzJdKTsJCSMg IlhbMF0iXj0iWFstM10iXiJYWy04XSIKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFs KHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCi0rCSZ2cHNybGQJKEBYWzJdLEBYWzBdLDMxKTsKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCi0rCSZ2cHNsbGRxKEBYWzRdLEBYWzBdLDEy KTsJCSMgIlhbMF0iPDw5NiwgZXh0cmFjdCBvbmUgZHdvcmQKLSsJJnZwYWRkZAkoQFhbMF0sQFhb MF0sQFhbMF0pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25z KSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsK LSsJJnZwc3JsZAkoQFhbM10sQFhbNF0sMzApOwotKwkmdnBvcgkoQFhbMF0sQFhbMF0sQFhbMl0p OwkJIyAiWFswXSI8PDw9MQotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsKLSsJJnZwc2xsZAkoQFhbNF0sQFhbNF0sMik7Ci0rCSAgJnZtb3ZkcWEJKEBYWzJdLCZR V1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZiAoJFhpPjUpOwkjIHJlc3RvcmUgWFtdIGZy b20gYmFja3RyYWNlIGJ1ZmZlcgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbM10pOwotKwkgZXZhbChzaGlm dChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNu cykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJJnZweG9yCShAWFswXSxAWFswXSxA WFs0XSk7CQkjICJYWzBdIl49KCJYWzBdIjw8OTYpPDw8MgotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSAgJnZtb3ZkcWEJKEBYWzRdLCZRV1AoMTEy LTE2KzE2KigoJFhpKS81KSwiZXNwIikpOwkjIEtfWFhfWFgKLSsJIGV2YWwoc2hpZnQoQGluc25z KSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2 YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zIFtpZiBhbnldCi0rCi0rICAkWGkrKzsJcHVz aChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQotK30KLSsKLStzdWIgWHVwZGF0ZV9hdnhf MzJfNzkoKQotK3sgdXNlIGludGVnZXI7Ci0rICBteSAkYm9keSA9IHNoaWZ0OwotKyAgbXkgQGlu c25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgdG8gNDggaW5zdHJ1Y3Rp b25zCi0rICBteSAoJGEsJGIsJGMsJGQsJGUpOwotKwotKwkmdnBhbGlnbnIoQFhbMl0sQFhbLTEm N10sQFhbLTImN10sOCk7CSMgY29tcG9zZSAiWFstNl0iCi0rCSZ2cHhvcgkoQFhbMF0sQFhbMF0s QFhbLTQmN10pOwkjICJYWzBdIj0iWFstMzJdIl4iWFstMTZdIgotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsJCSMgYm9keV8yMF8zOQotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKLSsKLSsJJnZweG9y CShAWFswXSxAWFswXSxAWFstNyY3XSk7CSMgIlhbMF0iXj0iWFstMjhdIgotKwkgICZ2bW92ZHFh CSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJlc3AiKSxAWFstNCY3XSk7CSMgc2F2ZSBYW10gdG8g YmFja3RyYWNlIGJ1ZmZlcgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQo QGluc25zKSk7Ci0rCSBpZiAoJFhpJTUpIHsKLSsJICAmdm1vdmRxYQkoQFhbNF0sQFhbM10pOwkj ICJwZXJwZXR1YXRlIiBLX1hYX1hYLi4uCi0rCSB9IGVsc2UgewkJCSMgLi4uIG9yIGxvYWQgbmV4 dCBvbmUKLSsJICAmdm1vdmRxYQkoQFhbNF0sJlFXUCgxMTItMTYrMTYqKCRYaS81KSwiZXNwIikp OwotKwkgfQotKwkgICZ2cGFkZGQJKEBYWzNdLEBYWzNdLEBYWy0xJjddKTsKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJJnZweG9y CShAWFswXSxAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTZdIgotKwkgZXZhbChzaGlmdChA aW5zbnMpKTsJCSMgYm9keV8yMF8zOQotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwo c2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKLSsKLSsJJnZw c3JsZAkoQFhbMl0sQFhbMF0sMzApOwotKwkgICZ2bW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkm MyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKLSsJIGV2YWwoc2hpZnQoQGlu c25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJ CSMgcm9yCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwotKwkmdnBzbGxkCShAWFswXSxAWFsw XSwyKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsJCSMgcm9sCi0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChAaW5z bnMpKTsKLSsKLSsJJnZwb3IJKEBYWzBdLEBYWzBdLEBYWzJdKTsJIyAiWFswXSI8PDw9MgotKwkg ZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQotKwkgZXZhbChzaGlmdChAaW5zbnMp KTsKLSsJICAmdm1vdmRxYQkoQFhbMl0sJlFXUCg2NCsxNiooKCRYaS02KSUzKSwiZXNwIikpIGlm KCRYaTwxOSk7CSMgcmVzdG9yZSBYW10gZnJvbSBiYWNrdHJhY2UgYnVmZmVyCi0rCSBldmFsKHNo aWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCi0rCSBldmFsKHNo aWZ0KEBpbnNucykpOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGlu c25zKSk7CQkjIHJvcgotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsKLSsJIGZvcmVhY2ggKEBp bnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwotKwotKyAgJFhpKys7CXB1 c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KLSt9Ci0rCi0rc3ViIFh1cGxhc3RfYXZ4 XzgwKCkKLSt7IHVzZSBpbnRlZ2VyOwotKyAgbXkgJGJvZHkgPSBzaGlmdDsKLSsgIG15IEBpbnNu cyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwotKyAg bXkgKCRhLCRiLCRjLCRkLCRlKTsKLSsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSAgJnZw YWRkZAkoQFhbM10sQFhbM10sQFhbLTEmN10pOwotKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKLSsJ IGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZhbChz aGlmdChAaW5zbnMpKTsKLSsKLSsJICAmdm1vdmRxYQkoJlFXUCgwKzE2KigoJFhpLTEpJjMpLCJl c3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciBJQUxVCi0rCi0rCSBmb3JlYWNoIChAaW5zbnMpIHsg ZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCi0rCi0rCSZtb3YJKCRpbnA9QFRbMV0s JkRXUCgxOTIrNCwiZXNwIikpOwotKwkmY21wCSgkaW5wLCZEV1AoMTkyKzgsImVzcCIpKTsKLSsJ JmplCSgmbGFiZWwoImRvbmUiKSk7Ci0rCi0rCSZ2bW92ZHFhKEBYWzNdLCZRV1AoMTEyKzQ4LCJl c3AiKSk7CSMgS18wMF8xOQotKwkmdm1vdmRxYShAWFsyXSwmUVdQKDExMis2NCwiZXNwIikpOwkj IHBic3dhcCBtYXNrCi0rCSZ2bW92ZHF1KEBYWy00JjddLCZRV1AoMCwkaW5wKSk7CSMgbG9hZCBp bnB1dAotKwkmdm1vdmRxdShAWFstMyY3XSwmUVdQKDE2LCRpbnApKTsKLSsJJnZtb3ZkcXUoQFhb LTImN10sJlFXUCgzMiwkaW5wKSk7Ci0rCSZ2bW92ZHF1KEBYWy0xJjddLCZRV1AoNDgsJGlucCkp OwotKwkmYWRkCSgkaW5wLDY0KTsKLSsJJnZwc2h1ZmIoQFhbLTQmN10sQFhbLTQmN10sQFhbMl0p OwkJIyBieXRlIHN3YXAKLSsJJm1vdgkoJkRXUCgxOTIrNCwiZXNwIiksJGlucCk7Ci0rCSZ2bW92 ZHFhKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNs b3QKLSsKLSsgICRYaT0wOwotK30KLSsKLStzdWIgWGxvb3BfYXZ4KCkKLSt7IHVzZSBpbnRlZ2Vy OwotKyAgbXkgJGJvZHkgPSBzaGlmdDsKLSsgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYk Ym9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucwotKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsK LSsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkm dnBzaHVmYgkoQFhbKCRYaS0zKSY3XSxAWFsoJFhpLTMpJjddLEBYWzJdKTsKLSsJIGV2YWwoc2hp ZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkmdnBhZGRkCShAWFskWGkm N10sQFhbKCRYaS00KSY3XSxAWFszXSk7Ci0rCSBldmFsKHNoaWZ0KEBpbnNucykpOwotKwkgZXZh bChzaGlmdChAaW5zbnMpKTsKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNoaWZ0 KEBpbnNucykpOwotKwkmdm1vdmRxYQkoJlFXUCgwKzE2KiRYaSwiZXNwIiksQFhbJFhpJjddKTsJ IyBYW10rSyB4ZmVyIHRvIElBTFUKLSsJIGV2YWwoc2hpZnQoQGluc25zKSk7Ci0rCSBldmFsKHNo aWZ0KEBpbnNucykpOwotKwotKwlmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQotKyAgJFhpKys7 Ci0rfQotKwotK3N1YiBYdGFpbF9hdngoKQotK3sgdXNlIGludGVnZXI7Ci0rICBteSAkYm9keSA9 IHNoaWZ0OwotKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMg MzIgaW5zdHJ1Y3Rpb25zCi0rICBteSAoJGEsJGIsJGMsJGQsJGUpOwotKwotKwlmb3JlYWNoIChA aW5zbnMpIHsgZXZhbDsgfQotK30KLSsKLSsmc2V0X2xhYmVsKCJsb29wIiwxNik7Ci0rCSZYdXBk YXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9hdnhfMTZfMzEoXCZib2R5 XzAwXzE5KTsKLSsJJlh1cGRhdGVfYXZ4XzE2XzMxKFwmYm9keV8wMF8xOSk7Ci0rCSZYdXBkYXRl X2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzAw XzE5KTsKLSsJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7Ci0rCSZYdXBkYXRlX2F2 eF8zMl83OShcJmJvZHlfMjBfMzkpOwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzIwXzM5 KTsKLSsJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV8yMF8zOSk7Ci0rCSZYdXBkYXRlX2F2eF8z Ml83OShcJmJvZHlfMjBfMzkpOwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsK LSsJJlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV80MF81OSk7Ci0rCSZYdXBkYXRlX2F2eF8zMl83 OShcJmJvZHlfNDBfNTkpOwotKwkmWHVwZGF0ZV9hdnhfMzJfNzkoXCZib2R5XzQwXzU5KTsKLSsJ Jlh1cGRhdGVfYXZ4XzMyXzc5KFwmYm9keV80MF81OSk7Ci0rCSZYdXBkYXRlX2F2eF8zMl83OShc JmJvZHlfMjBfMzkpOwotKwkmWHVwbGFzdF9hdnhfODAoXCZib2R5XzIwXzM5KTsJIyBjYW4ganVt cCB0byAiZG9uZSIKLSsKLSsJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOwotKwotKwkmWGxv b3BfYXZ4KFwmYm9keV8yMF8zOSk7Ci0rCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKLSsJJlhs b29wX2F2eChcJmJvZHlfMjBfMzkpOwotKwotKwkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikp OwkjIHVwZGF0ZSBjb250ZXh0Ci0rCSZhZGQJKCRBLCZEV1AoMCxAVFsxXSkpOwotKwkmYWRkCShA VFswXSwmRFdQKDQsQFRbMV0pKTsJCSMgJGIKLSsJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7Ci0r CSZtb3YJKCZEV1AoMCxAVFsxXSksJEEpOwotKwkmYWRkCSgkRCwmRFdQKDEyLEBUWzFdKSk7Ci0r CSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOwotKwkmYWRkCSgkRSwmRFdQKDE2LEBUWzFdKSk7 Ci0rCSZtb3YJKCZEV1AoOCxAVFsxXSksJEMpOwotKwkmbW92CSgkQixAVFswXSk7Ci0rCSZtb3YJ KCZEV1AoMTIsQFRbMV0pLCREKTsKLSsJJm1vdgkoJkRXUCgxNixAVFsxXSksJEUpOwotKwotKwkm am1wCSgmbGFiZWwoImxvb3AiKSk7Ci0rCi0rJnNldF9sYWJlbCgiZG9uZSIsMTYpOwkJJGo9JHNh dmVkX2o7IEBWPUBzYXZlZF9WOwotKwotKwkmWHRhaWxfYXZ4KFwmYm9keV8yMF8zOSk7Ci0rCSZY dGFpbF9hdngoXCZib2R5XzIwXzM5KTsKLSsJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOwotKwot Kwkmdnplcm9hbGwoKTsKLSsKLSsJJm1vdgkoQFRbMV0sJkRXUCgxOTIsImVzcCIpKTsJIyB1cGRh dGUgY29udGV4dAotKwkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKLSsJJm1vdgkoImVzcCIsJkRX UCgxOTIrMTIsImVzcCIpKTsJIyByZXN0b3JlICVlc3AKLSsJJmFkZAkoQFRbMF0sJkRXUCg0LEBU WzFdKSk7CQkjICRiCi0rCSZhZGQJKCRDLCZEV1AoOCxAVFsxXSkpOwotKwkmbW92CSgmRFdQKDAs QFRbMV0pLCRBKTsKLSsJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOwotKwkmbW92CSgmRFdQKDQs QFRbMV0pLEBUWzBdKTsKLSsJJmFkZAkoJEUsJkRXUCgxNixAVFsxXSkpOwotKwkmbW92CSgmRFdQ KDgsQFRbMV0pLCRDKTsKLSsJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOwotKwkmbW92CSgmRFdQ KDE2LEBUWzFdKSwkRSk7Ci0rJmZ1bmN0aW9uX2VuZCgiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9h dngiKTsKLSt9Ci0rJnNldF9sYWJlbCgiS19YWF9YWCIsNjQpOwotKyZkYXRhX3dvcmQoMHg1YTgy Nzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTksMHg1YTgyNzk5OSk7CSMgS18wMF8xOQotKyZkYXRh X3dvcmQoMHg2ZWQ5ZWJhMSwweDZlZDllYmExLDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSk7CSMgS18y MF8zOQotKyZkYXRhX3dvcmQoMHg4ZjFiYmNkYywweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFi YmNkYyk7CSMgS180MF81OQotKyZkYXRhX3dvcmQoMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2 MmMxZDYsMHhjYTYyYzFkNik7CSMgS182MF83OQotKyZkYXRhX3dvcmQoMHgwMDAxMDIwMywweDA0 MDUwNjA3LDB4MDgwOTBhMGIsMHgwYzBkMGUwZik7CSMgcGJzd2FwIG1hc2sKLSt9Ci0gJmFzY2l6 KCJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3Bl bnNzbC5vcmc+Iik7Ci0gCi0gJmFzbV9maW5pc2goKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBk L2NyeXB0by94ODZjcHVpZC5wbC5pbnRlbG9wdHMgb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3g4NmNw dWlkLnBsCi0tLS0gb3BlbnNzbC0xLjAuMGQvY3J5cHRvL3g4NmNwdWlkLnBsLmludGVsb3B0cwky MDEwLTAyLTEyIDE4OjAyOjEyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBkL2Ny eXB0by94ODZjcHVpZC5wbAkyMDExLTExLTAzIDA5OjU1OjQyLjAwMDAwMDAwMCArMDEwMAotQEAg LTEsNCArMSw0IEBACi0tIyEvdXNyL2Jpbi9lbnYgcGVybAotKyMhL3Vzci9iaW4vcGVybAotIAot ICQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7Ci0gcHVzaChASU5DLCAiJHtk aXJ9cGVybGFzbSIsICJwZXJsYXNtIik7Ci1AQCAtMjAsNyArMjAsNyBAQCBmb3IgKEBBUkdWKSB7 ICRzc2UyPTEgaWYgKC8tRE9QRU5TU0xfSUEzCi0gCSZwb3AJKCJlYXgiKTsKLSAJJnhvcgkoImVj eCIsImVheCIpOwotIAkmYnQJKCJlY3giLDIxKTsKLS0JJmpuYwkoJmxhYmVsKCJkb25lIikpOwot Kwkmam5jCSgmbGFiZWwoImdlbmVyaWMiKSk7Ci0gCSZ4b3IJKCJlYXgiLCJlYXgiKTsKLSAJJmNw dWlkCSgpOwotIAkmbW92CSgiZWRpIiwiZWF4Iik7CQkjIG1heCB2YWx1ZSBmb3Igc3RhbmRhcmQg cXVlcnkgbGV2ZWwKLUBAIC01MSw3ICs1MSwxNCBAQCBmb3IgKEBBUkdWKSB7ICRzc2UyPTEgaWYg KC8tRE9QRU5TU0xfSUEzCi0gCSMgQU1EIHNwZWNpZmljCi0gCSZtb3YJKCJlYXgiLDB4ODAwMDAw MDApOwotIAkmY3B1aWQJKCk7Ci0tCSZjbXAJKCJlYXgiLDB4ODAwMDAwMDgpOwotKwkmY21wCSgi ZWF4IiwweDgwMDAwMDAxKTsKLSsJJmpiCSgmbGFiZWwoImludGVsIikpOwotKwkmbW92CSgiZXNp IiwiZWF4Iik7Ci0rCSZtb3YJKCJlYXgiLDB4ODAwMDAwMDEpOwotKwkmY3B1aWQJKCk7Ci0rCSZv cgkoImVicCIsImVjeCIpOwotKwkmYW5kCSgiZWJwIiwxPDwxMXwxKTsJIyBpc29sYXRlIFhPUCBi aXQKLSsJJmNtcAkoImVzaSIsMHg4MDAwMDAwOCk7Ci0gCSZqYgkoJmxhYmVsKCJpbnRlbCIpKTsK LSAKLSAJJm1vdgkoImVheCIsMHg4MDAwMDAwOCk7Ci1AQCAtNjIsMTMgKzY5LDEzIEBAIGZvciAo QEFSR1YpIHsgJHNzZTI9MSBpZiAoLy1ET1BFTlNTTF9JQTMKLSAJJm1vdgkoImVheCIsMSk7Ci0g CSZjcHVpZAkoKTsKLSAJJmJ0CSgiZWR4IiwyOCk7Ci0tCSZqbmMJKCZsYWJlbCgiZG9uZSIpKTsK LSsJJmpuYwkoJmxhYmVsKCJnZW5lcmljIikpOwotIAkmc2hyCSgiZWJ4IiwxNik7Ci0gCSZhbmQJ KCJlYngiLDB4ZmYpOwotIAkmY21wCSgiZWJ4IiwiZXNpIik7Ci0tCSZqYQkoJmxhYmVsKCJkb25l IikpOwotKwkmamEJKCZsYWJlbCgiZ2VuZXJpYyIpKTsKLSAJJmFuZAkoImVkeCIsMHhlZmZmZmZm Zik7CSMgY2xlYXIgaHlwZXItdGhyZWFkaW5nIGJpdAotLQkmam1wCSgmbGFiZWwoImRvbmUiKSk7 Ci0rCSZqbXAJKCZsYWJlbCgiZ2VuZXJpYyIpKTsKLSAJCi0gJnNldF9sYWJlbCgiaW50ZWwiKTsK LSAJJmNtcAkoImVkaSIsNCk7Ci1AQCAtODUsMjcgKzkyLDQ1IEBAIGZvciAoQEFSR1YpIHsgJHNz ZTI9MSBpZiAoLy1ET1BFTlNTTF9JQTMKLSAmc2V0X2xhYmVsKCJub2NhY2hlaW5mbyIpOwotIAkm bW92CSgiZWF4IiwxKTsKLSAJJmNwdWlkCSgpOwotKwkmYW5kCSgiZWR4IiwweGJmZWZmZmZmKTsJ IyBmb3JjZSByZXNlcnZlZCBiaXRzICMyMCwgIzMwIHRvIDAKLSAJJmNtcAkoImVicCIsMCk7Ci0t CSZqbmUJKCZsYWJlbCgibm90UDQiKSk7Ci0rCSZqbmUJKCZsYWJlbCgibm90aW50ZWwiKSk7Ci0r CSZvcgkoImVkeCIsMTw8MzApOwkJIyBzZXQgcmVzZXJ2ZWQgYml0IzMwIG9uIEludGVsIENQVXMK LSAJJmFuZAkoJkhCKCJlYXgiKSwxNSk7CSMgZmFtaWxpeSBJRAotIAkmY21wCSgmSEIoImVheCIp LDE1KTsJIyBQND8KLS0JJmpuZQkoJmxhYmVsKCJub3RQNCIpKTsKLS0JJm9yCSgiZWR4IiwxPDwy MCk7CQkjIHVzZSByZXNlcnZlZCBiaXQgdG8gZW5nYWdlIFJDNF9DSEFSCi0tJnNldF9sYWJlbCgi bm90UDQiKTsKLSsJJmpuZQkoJmxhYmVsKCJub3RpbnRlbCIpKTsKLSsJJm9yCSgiZWR4IiwxPDwy MCk7CQkjIHNldCByZXNlcnZlZCBiaXQjMjAgdG8gZW5nYWdlIFJDNF9DSEFSCi0rJnNldF9sYWJl bCgibm90aW50ZWwiKTsKLSAJJmJ0CSgiZWR4IiwyOCk7CQkjIHRlc3QgaHlwZXItdGhyZWFkaW5n IGJpdAotLQkmam5jCSgmbGFiZWwoImRvbmUiKSk7Ci0rCSZqbmMJKCZsYWJlbCgiZ2VuZXJpYyIp KTsKLSAJJmFuZAkoImVkeCIsMHhlZmZmZmZmZik7Ci0gCSZjbXAJKCJlZGkiLDApOwotLQkmamUJ KCZsYWJlbCgiZG9uZSIpKTsKLSsJJmplCSgmbGFiZWwoImdlbmVyaWMiKSk7Ci0gCi0gCSZvcgko ImVkeCIsMHgxMDAwMDAwMCk7Ci0gCSZzaHIJKCJlYngiLDE2KTsKLSAJJmNtcAkoJkxCKCJlYngi KSwxKTsKLS0JJmphCSgmbGFiZWwoImRvbmUiKSk7Ci0rCSZqYQkoJmxhYmVsKCJnZW5lcmljIikp OwotIAkmYW5kCSgiZWR4IiwweGVmZmZmZmZmKTsJIyBjbGVhciBoeXBlci10aHJlYWRpbmcgYml0 IGlmIG5vdAotKwotKyZzZXRfbGFiZWwoImdlbmVyaWMiKTsKLSsJJmFuZAkoImVicCIsMTw8MTEp OwkJIyBpc29sYXRlIEFNRCBYT1AgZmxhZwotKwkmYW5kCSgiZWN4IiwweGZmZmZmN2ZmKTsJIyBm b3JjZSAxMXRoIGJpdCB0byAwCi0rCSZtb3YJKCJlc2kiLCJlZHgiKTsKLSsJJm9yCSgiZWJwIiwi ZWN4Iik7CQkjIG1lcmdlIEFNRCBYT1AgZmxhZwotKwotKwkmYnQJKCJlY3giLDI3KTsJCSMgY2hl Y2sgT1NYU0FWRSBiaXQKLSsJJmpuYwkoJmxhYmVsKCJjbGVhcl9hdngiKSk7Ci0rCSZ4b3IJKCJl Y3giLCJlY3giKTsgICAgICAgICAgIyBYQ1IwCi0rCSZkYXRhX2J5dGUoMHgwZiwweDAxLDB4ZDAp OwkjIHhnZXRidgotKwkmYW5kCSgiZWF4Iiw2KTsgICAgICAgICAgICAgICMgaXNvbGF0ZSBYTU0g YW5kIFlNTSBzdGF0ZSBzdXBwb3J0Ci0rCSZjbXAJKCJlYXgiLDYpOwotKwkmamUJKCZsYWJlbCgi ZG9uZSIpKTsKLSsmc2V0X2xhYmVsKCJjbGVhcl9hdngiKTsKLSsJJmFuZAkoImVicCIsMHhlZmZm ZTdmZik7CSMgY2xlYXIgQVZYLCBGTUEgYW5kIEFNRCBYT1AgYml0cwotICZzZXRfbGFiZWwoImRv bmUiKTsKLS0JJm1vdgkoImVheCIsImVkeCIpOwotLQkmbW92CSgiZWR4IiwiZWN4Iik7Ci0rCSZt b3YJKCJlYXgiLCJlc2kiKTsKLSsJJm1vdgkoImVkeCIsImVicCIpOwotICZmdW5jdGlvbl9lbmQo Ik9QRU5TU0xfaWEzMl9jcHVpZCIpOwotIAotICZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMy Y2FwX1AiKTsKLUBAIC0xOTksOCArMjI0LDkgQEAgZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgv LURPUEVOU1NMX0lBMwotIAkmYnQJKCZEV1AoMCwiZWN4IiksMSk7Ci0gCSZqbmMJKCZsYWJlbCgi bm9feDg3IikpOwotIAlpZiAoJHNzZTIpIHsKLS0JCSZidAkoJkRXUCgwLCJlY3giKSwyNik7Ci0t CQkmam5jCSgmbGFiZWwoIm5vX3NzZTIiKSk7Ci0rCQkmYW5kCSgiZWN4IiwxPDwyNnwxPDwyNCk7 CSMgY2hlY2sgU1NFMiBhbmQgRlhTUiBiaXRzCi0rCQkmY21wCSgiZWN4IiwxPDwyNnwxPDwyNCk7 Ci0rCQkmam5lCSgmbGFiZWwoIm5vX3NzZTIiKSk7Ci0gCQkmcHhvcgkoInhtbTAiLCJ4bW0wIik7 Ci0gCQkmcHhvcgkoInhtbTEiLCJ4bW0xIik7Ci0gCQkmcHhvcgkoInhtbTIiLCJ4bW0yIik7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wZC9jcnlwdG8veDg2XzY0Y3B1aWQucGwuaW50ZWxvcHRzIG9w ZW5zc2wtMS4wLjBkL2NyeXB0by94ODZfNjRjcHVpZC5wbAotLS0tIG9wZW5zc2wtMS4wLjBkL2Ny eXB0by94ODZfNjRjcHVpZC5wbC5pbnRlbG9wdHMJMjAxMC0wNC0xNCAyMToyNTowOS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wZC9jcnlwdG8veDg2XzY0Y3B1aWQucGwJMjAxMS0w OC0yNCAxMjo1MDo1Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xLDQgKzEsNCBAQAotLSMhL3Vzci9i aW4vZW52IHBlcmwKLSsjIS91c3IvYmluL3BlcmwKLSAKLSAkZmxhdm91ciA9IHNoaWZ0OwotICRv dXRwdXQgID0gc2hpZnQ7Ci1AQCAtNywxMiArNywxOCBAQCBpZiAoJGZsYXZvdXIgPX4gL1wuLykg eyAkb3V0cHV0ID0gJGZsYXZvCi0gJHdpbjY0PTA7ICR3aW42ND0xIGlmICgkZmxhdm91ciA9fiAv W25tXWFzbXxtaW5ndzY0LyB8fCAkb3V0cHV0ID1+IC9cLmFzbSQvKTsKLSAKLSAkMCA9fiBtLygu KltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwotLW9wZW4gU1RET1VULCJ8ICReWCAke2Rpcn1w ZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCAkZmxhdm91ciAkb3V0cHV0IjsKLSsoICR4bGF0ZT0iJHtk aXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKLSsoICR4bGF0ZT0iJHtkaXJ9 cGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCi0rZGllICJjYW4ndCBs b2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKLSsKLStvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRm bGF2b3VyICRvdXRwdXQiOwotKwotKygkYXJnMSwkYXJnMiwkYXJnMywkYXJnNCk9JHdpbjY0Pygi JXJjeCIsIiVyZHgiLCIlcjgiLCAiJXI5IikgOgkjIFdpbjY0IG9yZGVyCi0rCQkJCSAoIiVyZGki LCIlcnNpIiwiJXJkeCIsIiVyY3giKTsJIyBVbml4IG9yZGVyCi0gCi0taWYgKCR3aW42NCkJeyAk YXJnMT0iJXJjeCI7ICRhcmcyPSIlcmR4IjsgfQotLWVsc2UJCXsgJGFyZzE9IiVyZGkiOyAkYXJn Mj0iJXJzaSI7IH0KLSBwcmludDw8X19fOwotIC5leHRlcm4JCU9QRU5TU0xfY3B1aWRfc2V0dXAK LSsuaGlkZGVuCQlPUEVOU1NMX2NwdWlkX3NldHVwCi0gLnNlY3Rpb24JLmluaXQKLSAJY2FsbAlP UEVOU1NMX2NwdWlkX3NldHVwCi0gCi1AQCAtNDYsNyArNTIsNyBAQCBPUEVOU1NMX3JkdHNjOgot IC50eXBlCU9QRU5TU0xfaWEzMl9jcHVpZCxcQGFiaS1vbW5pcG90ZW50Ci0gLmFsaWduCTE2Ci0g T1BFTlNTTF9pYTMyX2NwdWlkOgotLQltb3YJJXJieCwlcjgKLSsJbW92CSVyYngsJXI4CQkjIHNh dmUgJXJieAotIAotIAl4b3IJJWVheCwlZWF4Ci0gCWNwdWlkCi1AQCAtNzgsNyArODQsMTUgQEAg T1BFTlNTTF9pYTMyX2NwdWlkOgotIAkjIEFNRCBzcGVjaWZpYwotIAltb3YJXCQweDgwMDAwMDAw LCVlYXgKLSAJY3B1aWQKLS0JY21wCVwkMHg4MDAwMDAwOCwlZWF4Ci0rCWNtcAlcJDB4ODAwMDAw MDEsJWVheAotKwlqYgkuTGludGVsCi0rCW1vdgklZWF4LCVyMTBkCi0rCW1vdglcJDB4ODAwMDAw MDEsJWVheAotKwljcHVpZAotKwlvcgklZWN4LCVyOWQKLSsJYW5kCVwkMHgwMDAwMDgwMSwlcjlk CSMgaXNvbGF0ZSBBTUQgWE9QIGJpdCwgMTw8MTEKLSsKLSsJY21wCVwkMHg4MDAwMDAwOCwlcjEw ZAotIAlqYgkuTGludGVsCi0gCi0gCW1vdglcJDB4ODAwMDAwMDgsJWVheAotQEAgLTg5LDEyICsx MDMsMTIgQEAgT1BFTlNTTF9pYTMyX2NwdWlkOgotIAltb3YJXCQxLCVlYXgKLSAJY3B1aWQKLSAJ YnQJXCQyOCwlZWR4CQkjIHRlc3QgaHlwZXItdGhyZWFkaW5nIGJpdAotLQlqbmMJLkxkb25lCi0r CWpuYwkuTGdlbmVyaWMKLSAJc2hyCVwkMTYsJWVieAkJIyBudW1iZXIgb2YgbG9naWNhbCBwcm9j ZXNzb3JzCi0gCWNtcAklcjEwYiwlYmwKLS0JamEJLkxkb25lCi0rCWphCS5MZ2VuZXJpYwotIAlh bmQJXCQweGVmZmZmZmZmLCVlZHgJIyB+KDE8PDI4KQotLQlqbXAJLkxkb25lCi0rCWptcAkuTGdl bmVyaWMKLSAKLSAuTGludGVsOgotIAljbXAJXCQ0LCVyMTFkCi1AQCAtMTExLDMwICsxMjUsNDcg QEAgT1BFTlNTTF9pYTMyX2NwdWlkOgotIC5Mbm9jYWNoZWluZm86Ci0gCW1vdglcJDEsJWVheAot IAljcHVpZAotKwlhbmQJXCQweGJmZWZmZmZmLCVlZHgJIyBmb3JjZSByZXNlcnZlZCBiaXRzIHRv IDAKLSAJY21wCVwkMCwlcjlkCi0gCWpuZQkuTG5vdGludGVsCi0tCW9yCVwkMHgwMDEwMDAwMCwl ZWR4CSMgdXNlIHJlc2VydmVkIDIwdGggYml0IHRvIGVuZ2FnZSBSQzRfQ0hBUgotKwlvcglcJDB4 NDAwMDAwMDAsJWVkeAkjIHNldCByZXNlcnZlZCBiaXQjMzAgb24gSW50ZWwgQ1BVcwotIAlhbmQJ XCQxNSwlYWgKLSAJY21wCVwkMTUsJWFoCQkjIGV4YW1pbmUgRmFtaWx5IElECi0tCWplCS5Mbm90 aW50ZWwKLS0Jb3IJXCQweDQwMDAwMDAwLCVlZHgJIyB1c2UgcmVzZXJ2ZWQgYml0IHRvIHNraXAg dW5yb2xsZWQgbG9vcAotKwlqbmUJLkxub3RpbnRlbAotKwlvcglcJDB4MDAxMDAwMDAsJWVkeAkj IHNldCByZXNlcnZlZCBiaXQjMjAgdG8gZW5nYWdlIFJDNF9DSEFSCi0gLkxub3RpbnRlbDoKLSAJ YnQJXCQyOCwlZWR4CQkjIHRlc3QgaHlwZXItdGhyZWFkaW5nIGJpdAotLQlqbmMJLkxkb25lCi0r CWpuYwkuTGdlbmVyaWMKLSAJYW5kCVwkMHhlZmZmZmZmZiwlZWR4CSMgfigxPDwyOCkKLSAJY21w CVwkMCwlcjEwZAotLQlqZQkuTGRvbmUKLSsJamUJLkxnZW5lcmljCi0gCi0gCW9yCVwkMHgxMDAw MDAwMCwlZWR4CSMgMTw8MjgKLSAJc2hyCVwkMTYsJWVieAotIAljbXAJXCQxLCVibAkJCSMgc2Vl IGlmIGNhY2hlIGlzIHNoYXJlZAotLQlqYQkuTGRvbmUKLSsJamEJLkxnZW5lcmljCi0gCWFuZAlc JDB4ZWZmZmZmZmYsJWVkeAkjIH4oMTw8MjgpCi0rLkxnZW5lcmljOgotKwlhbmQJXCQweDAwMDAw ODAwLCVyOWQJIyBpc29sYXRlIEFNRCBYT1AgZmxhZwotKwlhbmQJXCQweGZmZmZmN2ZmLCVlY3gK LSsJb3IJJWVjeCwlcjlkCQkjIG1lcmdlIEFNRCBYT1AgZmxhZwotKwotKwltb3YJJWVkeCwlcjEw ZAkJIyAlcjlkOiVyMTBkIGlzIGNvcHkgb2YgJWVjeDolZWR4Ci0rCWJ0CVwkMjcsJXI5ZAkJIyBj aGVjayBPU1hTQVZFIGJpdAotKwlqbmMJLkxjbGVhcl9hdngKLSsJeG9yCSVlY3gsJWVjeAkJIyBY Q1IwCi0rCS5ieXRlCTB4MGYsMHgwMSwweGQwCQkjIHhnZXRidgotKwlhbmQJXCQ2LCVlYXgJCSMg aXNvbGF0ZSBYTU0gYW5kIFlNTSBzdGF0ZSBzdXBwb3J0Ci0rCWNtcAlcJDYsJWVheAotKwlqZQku TGRvbmUKLSsuTGNsZWFyX2F2eDoKLSsJbW92CVwkMHhlZmZmZTdmZiwlZWF4CSMgfigxPDwyOHwx PDwxMnwxPDwxMSkKLSsJYW5kCSVlYXgsJXI5ZAkJIyBjbGVhciBBVlgsIEZNQSBhbmQgQU1EIFhP UCBiaXRzCi0gLkxkb25lOgotLQlzaGwJXCQzMiwlcmN4Ci0tCW1vdgklZWR4LCVlYXgKLS0JbW92 CSVyOCwlcmJ4Ci0tCW9yCSVyY3gsJXJheAotKwlzaGwJXCQzMiwlcjkKLSsJbW92CSVyMTBkLCVl YXgKLSsJbW92CSVyOCwlcmJ4CQkjIHJlc3RvcmUgJXJieAotKwlvcgklcjksJXJheAotIAlyZXQK LSAuc2l6ZQlPUEVOU1NMX2lhMzJfY3B1aWQsLi1PUEVOU1NMX2lhMzJfY3B1aWQKLSAKCmRpZmYg LS1naXQgYS9vcGVuc3NsLTEuMC4wZC1wYWRsb2NrNjQucGF0Y2ggYi9vcGVuc3NsLTEuMC4wZC1w YWRsb2NrNjQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWZiZTguLjAw MDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMGQtcGFkbG9jazY0LnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsMjE0ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBkL2VuZ2luZXMvZV9wYWRs b2NrLmMucGFkbG9jazY0IG9wZW5zc2wtMS4wLjBkL2VuZ2luZXMvZV9wYWRsb2NrLmMKLS0tLSBv cGVuc3NsLTEuMC4wZC9lbmdpbmVzL2VfcGFkbG9jay5jLnBhZGxvY2s2NAkyMDExLTAxLTMwIDAy OjA1OjM4LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBkL2VuZ2luZXMvZV9wYWRs b2NrLmMJMjAxMS0wNC0yOCAyMTowMzoyNi4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMDEsMTAgKzEw MSwxNSBAQAotICAgIGNvbXBpbGVyIGNob2ljZSBpcyBsaW1pdGVkIHRvIEdDQyBhbmQgTWljcm9z b2Z0IEMuICovCi0gI3VuZGVmIENPTVBJTEVfSFdfUEFETE9DSwotICNpZiAhZGVmaW5lZChJMzg2 X09OTFkpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSU5MSU5FX0FTTSkKLS0jIGlmIChkZWZpbmVk KF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpKSkgfHwg XAotKyMgaWYgKGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yICYmIFwKLSsJKGRlZmlu ZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBcCi0rCSBkZWZpbmVkKF9feDg2XzY0 X18pIHx8IGRlZmluZWQoX194ODZfNjQpKSBcCi0rICAgICApIHx8IFwKLSAgICAgIChkZWZpbmVk KF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9NX0lYODYpKQotICMgIGRlZmluZSBDT01QSUxFX0hXX1BB RExPQ0sKLSsjICBpZmRlZiBPUEVOU1NMX05PX0RZTkFNSUNfRU5HSU5FCi0gc3RhdGljIEVOR0lO RSAqRU5HSU5FX3BhZGxvY2sgKHZvaWQpOwotKyMgIGVuZGlmCi0gIyBlbmRpZgotICNlbmRpZgot IAotQEAgLTEzNSw3ICsxNDAsNyBAQCB2b2lkIEVOR0lORV9sb2FkX3BhZGxvY2sgKHZvaWQpCi0g IyBlbmRpZgotICNlbGlmIGRlZmluZWQoX19HTlVDX18pCi0gIyBpZm5kZWYgYWxsb2NhCi0tIyAg ZGVmaW5lIGFsbG9jYShzKSBfX2J1aWx0aW5fYWxsb2NhKHMpCi0rIyAgZGVmaW5lIGFsbG9jYShz KSBfX2J1aWx0aW5fYWxsb2NhKChzKSkKLSAjIGVuZGlmCi0gI2VuZGlmCi0gCi1AQCAtMTk3LDYg KzIwMiw3IEBAIHBhZGxvY2tfYmluZF9oZWxwZXIoRU5HSU5FICplKQotIAlyZXR1cm4gMTsKLSB9 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfTk9fRFlOQU1JQ19FTkdJTkUKLSAvKiBDb25zdHJ1Y3RvciAq LwotIHN0YXRpYyBFTkdJTkUgKgotIEVOR0lORV9wYWRsb2NrKHZvaWQpCi1AQCAtMjE0LDYgKzIy MCw3IEBAIEVOR0lORV9wYWRsb2NrKHZvaWQpCi0gCi0gCXJldHVybiBlbmc7Ci0gfQotKyNlbmRp ZgotIAotIC8qIENoZWNrIGF2YWlsYWJpbGl0eSBvZiB0aGUgZW5naW5lICovCi0gc3RhdGljIGlu dAotQEAgLTI5OCw2ICszMDUsNyBAQCBzdGF0aWMgdm9sYXRpbGUgc3RydWN0IHBhZGxvY2tfY2lw aGVyX2RhCi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotICAqLwotICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49Mgot KyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikKLSAvKgotICAqIEFzIGZv ciBleGNlc3NpdmUgInB1c2ggJWVieCIvInBvcCAlZWJ4IiBmb3VuZCBhbGwgb3Zlci4KLSAgKiBX aGVuIGdlbmVyYXRpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSBHQ0Mgd29uJ3QgbGV0Ci1A QCAtMzc3LDIxICszODUsNiBAQCBwYWRsb2NrX2F2YWlsYWJsZSh2b2lkKQotIAlyZXR1cm4gcGFk bG9ja191c2VfYWNlICsgcGFkbG9ja191c2Vfcm5nOwotIH0KLSAKLS0jaWZuZGVmIE9QRU5TU0xf Tk9fQUVTCi0tLyogT3VyIG93biBodG9ubCgpL250b2hsKCkgKi8KLS1zdGF0aWMgaW5saW5lIHZv aWQKLS1wYWRsb2NrX2Jzd2FwbChBRVNfS0VZICprcykKLS17Ci0tCXNpemVfdCBpID0gc2l6ZW9m KGtzLT5yZF9rZXkpL3NpemVvZihrcy0+cmRfa2V5WzBdKTsKLS0JdW5zaWduZWQgaW50ICprZXkg PSBrcy0+cmRfa2V5OwotLQotLQl3aGlsZSAoaS0tKSB7Ci0tCQlhc20gdm9sYXRpbGUgKCJic3dh cGwgJTAiIDogIityIigqa2V5KSk7Ci0tCQlrZXkrKzsKLS0JfQotLX0KLS0jZW5kaWYKLS0KLSAv KiBGb3JjZSBrZXkgcmVsb2FkIGZyb20gbWVtb3J5IHRvIHRoZSBDUFUgbWljcm9jb2RlLgotICAg IExvYWRpbmcgRUZMQUdTIGZyb20gdGhlIHN0YWNrIGNsZWFycyBFRkxBR1NbMzBdIAotICAgIHdo aWNoIGRvZXMgdGhlIHRyaWNrLiAqLwotQEAgLTQ0OSwxMiArNDQyLDEyNyBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgKm5hbWUoc2l6ZV90IGNudCwJCVwKLSAJCTogImVkeCIsICJjYyIsICJtZW1vcnki KTsJXAotIAlyZXR1cm4gaXY7CQkJCVwKLSB9Ci0rI2VuZGlmCi0rCi0rI2VsaWYgZGVmaW5lZChf X3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KQotKwotKy8qIExvYWQgc3VwcG9ydGVkIGZl YXR1cmVzIG9mIHRoZSBDUFUgdG8gc2VlIGlmCi0rICAgdGhlIFBhZExvY2sgaXMgYXZhaWxhYmxl LiAqLwotK3N0YXRpYyBpbnQKLStwYWRsb2NrX2F2YWlsYWJsZSh2b2lkKQotK3sKLSsJY2hhciB2 ZW5kb3Jfc3RyaW5nWzE2XTsKLSsJdW5zaWduZWQgaW50IGVheCwgZWR4OwotKwotKwkvKiBBcmUg d2UgcnVubmluZyBvbiB0aGUgQ2VudGF1ciAoVklBKSBDUFU/ICovCi0rCWVheCA9IDB4MDAwMDAw MDA7Ci0rCXZlbmRvcl9zdHJpbmdbMTJdID0gMDsKLSsJYXNtIHZvbGF0aWxlICgKLSsJCSJjcHVp ZFxuIgotKwkJIm1vdmwJJSVlYngsKCUxKVxuIgotKwkJIm1vdmwJJSVlZHgsNCglMSlcbiIKLSsJ CSJtb3ZsCSUlZWN4LDgoJTEpXG4iCi0rCQk6ICIrYSIoZWF4KSA6ICJyIih2ZW5kb3Jfc3RyaW5n KSA6ICJyYngiLCAicmN4IiwgInJkeCIpOwotKwlpZiAoc3RyY21wKHZlbmRvcl9zdHJpbmcsICJD ZW50YXVySGF1bHMiKSAhPSAwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCS8qIENoZWNrIGZvciBDZW50 YXVyIEV4dGVuZGVkIEZlYXR1cmUgRmxhZ3MgcHJlc2VuY2UgKi8KLSsJZWF4ID0gMHhDMDAwMDAw MDsKLSsJYXNtIHZvbGF0aWxlICgiY3B1aWQiCi0rCQk6ICIrYSIoZWF4KSA6IDogInJieCIsICJy Y3giLCAicmR4Iik7Ci0rCWlmIChlYXggPCAweEMwMDAwMDAxKQotKwkJcmV0dXJuIDA7Ci0rCi0r CS8qIFJlYWQgdGhlIENlbnRhdXIgRXh0ZW5kZWQgRmVhdHVyZSBGbGFncyAqLwotKwllYXggPSAw eEMwMDAwMDAxOwotKwlhc20gdm9sYXRpbGUgKCJjcHVpZCIKLSsJCTogIithIihlYXgpLCAiPWQi KGVkeCkgOiA6ICJyYngiLCAicmN4Iik7Ci0rCi0rCS8qIEZpbGwgdXAgc29tZSBmbGFncyAqLwot KwlwYWRsb2NrX3VzZV9hY2UgPSAoKGVkeCAmICgweDM8PDYpKSA9PSAoMHgzPDw2KSk7Ci0rCXBh ZGxvY2tfdXNlX3JuZyA9ICgoZWR4ICYgKDB4Mzw8MikpID09ICgweDM8PDIpKTsKLSsKLSsJcmV0 dXJuIHBhZGxvY2tfdXNlX2FjZSArIHBhZGxvY2tfdXNlX3JuZzsKLSt9Ci0gCi0rLyogRm9yY2Ug a2V5IHJlbG9hZCBmcm9tIG1lbW9yeSB0byB0aGUgQ1BVIG1pY3JvY29kZS4KLSsgICBMb2FkaW5n IEVGTEFHUyBmcm9tIHRoZSBzdGFjayBjbGVhcnMgRUZMQUdTWzMwXSAKLSsgICB3aGljaCBkb2Vz IHRoZSB0cmljay4gKi8KLStzdGF0aWMgaW5saW5lIHZvaWQKLStwYWRsb2NrX3JlbG9hZF9rZXko dm9pZCkKLSt7Ci0rCWFzbSB2b2xhdGlsZSAoInB1c2hmcTsgcG9wZnEiKTsKLSt9Ci0rCi0rI2lm bmRlZiBPUEVOU1NMX05PX0FFUwotKy8qCi0rICogVGhpcyBpcyBoZXVyaXN0aWMga2V5IGNvbnRl eHQgdHJhY2luZy4gQXQgZmlyc3Qgb25lCi0rICogYmVsaWV2ZXMgdGhhdCBvbmUgc2hvdWxkIHVz ZSBhdG9taWMgc3dhcCBpbnN0cnVjdGlvbnMsCi0rICogYnV0IGl0J3Mgbm90IGFjdHVhbGx5IG5l Y2Vzc2FyeS4gUG9pbnQgaXMgdGhhdCBpZgotKyAqIHBhZGxvY2tfc2F2ZWRfY29udGV4dCB3YXMg Y2hhbmdlZCBieSBhbm90aGVyIHRocmVhZAotKyAqIGFmdGVyIHdlJ3ZlIHJlYWQgaXQgYW5kIGJl Zm9yZSB3ZSBjb21wYXJlIGl0IHdpdGggY2RhdGEsCi0rICogb3VyIGtleSAqc2hhbGwqIGJlIHJl bG9hZGVkIHVwb24gdGhyZWFkIGNvbnRleHQgc3dpdGNoCi0rICogYW5kIHdlIGFyZSB0aGVyZWZv cmUgc2V0IGluIGVpdGhlciBjYXNlLi4uCi0rICovCi0rc3RhdGljIGlubGluZSB2b2lkCi0rcGFk bG9ja192ZXJpZnlfY29udGV4dChzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGEpCi0r ewotKwlhc20gdm9sYXRpbGUgKAotKwkicHVzaGZxXG4iCi0rIglidGwJJDMwLCglJXJzcClcbiIK LSsiCWpuYwkxZlxuIgotKyIJY21wcQklMiwlMVxuIgotKyIJamUJMWZcbiIKLSsiCXBvcGZxXG4i Ci0rIglzdWJxCSQ4LCUlcnNwXG4iCi0rIjE6CWFkZHEJJDgsJSVyc3BcbiIKLSsiCW1vdnEJJTIs JTAiCi0rCToiK20iKHBhZGxvY2tfc2F2ZWRfY29udGV4dCkKLSsJOiAiciIocGFkbG9ja19zYXZl ZF9jb250ZXh0KSwgInIiKGNkYXRhKSA6ICJjYyIpOwotK30KLSsKLSsvKiBUZW1wbGF0ZSBmb3Ig cGFkbG9ja194Y3J5cHRfKiBtb2RlcyAqLwotKy8qIEJJRyBGQVQgV0FSTklORzogCi0rICogCVRo ZSBvZmZzZXRzIHVzZWQgd2l0aCAnbGVhbCcgaW5zdHJ1Y3Rpb25zCi0rICogCWRlc2NyaWJlIGl0 ZW1zIG9mIHRoZSAncGFkbG9ja19jaXBoZXJfZGF0YScKLSsgKiAJc3RydWN0dXJlLgotKyAqLwot KyNkZWZpbmUgUEFETE9DS19YQ1JZUFRfQVNNKG5hbWUscmVwX3hjcnlwdCkJXAotK3N0YXRpYyBp bmxpbmUgdm9pZCAqbmFtZShzaXplX3QgY250LAkJXAotKwlzdHJ1Y3QgcGFkbG9ja19jaXBoZXJf ZGF0YSAqY2RhdGEsCVwKLSsJdm9pZCAqb3V0LCBjb25zdCB2b2lkICppbnApIAkJXAotK3sJdm9p ZCAqaXY7IAkJCQlcCi0rCWFzbSB2b2xhdGlsZSAoICJsZWFxCTE2KCUwKSwlJXJkeFxuIglcCi0r CQkiCWxlYXEJMzIoJTApLCUlcmJ4XG4iCVwKLSsJCQlyZXBfeGNyeXB0ICJcbiIJCVwKLSsJCTog Ij1hIihpdiksICI9YyIoY250KSwgIj1EIihvdXQpLCAiPVMiKGlucCkgXAotKwkJOiAiMCIoY2Rh dGEpLCAiMSIoY250KSwgIjIiKG91dCksICIzIihpbnApICBcCi0rCQk6ICJyYngiLCAicmR4Iiwg ImNjIiwgIm1lbW9yeSIpOwlcCi0rCXJldHVybiBpdjsJCQkJXAotK30KLSsjZW5kaWYKLSsKLSsj ZW5kaWYJLyogY3B1ICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotIC8qIEdlbmVyYXRl IGFsbCBmdW5jdGlvbnMgd2l0aCBhcHByb3ByaWF0ZSBvcGNvZGVzICovCi0gUEFETE9DS19YQ1JZ UFRfQVNNKHBhZGxvY2tfeGNyeXB0X2VjYiwgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4YzgiKQkv KiByZXAgeGNyeXB0ZWNiICovCi0gUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNyeXB0X2Ni YywgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4ZDAiKQkvKiByZXAgeGNyeXB0Y2JjICovCi0gUEFE TE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNyeXB0X2NmYiwgIi5ieXRlIDB4ZjMsMHgwZiwweGE3 LDB4ZTAiKQkvKiByZXAgeGNyeXB0Y2ZiICovCi0gUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tf eGNyeXB0X29mYiwgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4ZTgiKQkvKiByZXAgeGNyeXB0b2Zi ICovCi0rCi0rLyogT3VyIG93biBodG9ubCgpL250b2hsKCkgKi8KLStzdGF0aWMgaW5saW5lIHZv aWQKLStwYWRsb2NrX2Jzd2FwbChBRVNfS0VZICprcykKLSt7Ci0rCXNpemVfdCBpID0gc2l6ZW9m KGtzLT5yZF9rZXkpL3NpemVvZihrcy0+cmRfa2V5WzBdKTsKLSsJdW5zaWduZWQgaW50ICprZXkg PSBrcy0+cmRfa2V5OwotKwotKwl3aGlsZSAoaS0tKSB7Ci0rCQlhc20gdm9sYXRpbGUgKCJic3dh cGwgJTAiIDogIityIigqa2V5KSk7Ci0rCQlrZXkrKzsKLSsJfQotK30KLSAjZW5kaWYKLSAKLSAv KiBUaGUgUk5HIGNhbGwgaXRzZWxmICovCi1AQCAtNDg1LDggKzU5Myw4IEBAIHBhZGxvY2tfeHN0 b3JlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCAKLSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNo YXIgKgotIHBhZGxvY2tfbWVtY3B5KHZvaWQgKmRzdCxjb25zdCB2b2lkICpzcmMsc2l6ZV90IG4p Ci0gewotLQlsb25nICAgICAgICpkPWRzdDsKLS0JY29uc3QgbG9uZyAqcz1zcmM7Ci0rCXNpemVf dCAgICAgICAqZD1kc3Q7Ci0rCWNvbnN0IHNpemVfdCAqcz1zcmM7Ci0gCi0gCW4gLz0gc2l6ZW9m KCpkKTsKLSAJZG8geyAqZCsrID0gKnMrKzsgfSB3aGlsZSAoLS1uKTsKCmRpZmYgLS1naXQgYS9v cGVuc3NsLTEuMC4wZS1kb2Mtbm9lb2YucGF0Y2ggYi9vcGVuc3NsLTEuMC4wZS1kb2Mtbm9lb2Yu cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4NjU3NQotLS0gL2Rl di9udWxsCisrKyBiL29wZW5zc2wtMS4wLjBlLWRvYy1ub2VvZi5wYXRjaApAQCAtMCwwICsxLDIz IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZS9kb2MvYXBwcy9zX2NsaWVudC5wb2QuZG9jLW5v ZW9mIG9wZW5zc2wtMS4wLjBlL2RvYy9hcHBzL3NfY2xpZW50LnBvZAorLS0tIG9wZW5zc2wtMS4w LjBlL2RvYy9hcHBzL3NfY2xpZW50LnBvZC5kb2Mtbm9lb2YJMjAwOS0wNi0yNiAxMzoyODo1MS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wZS9kb2MvYXBwcy9zX2NsaWVudC5wb2QJ MjAxMS0xMS0wMyAwODozMDozNS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNyw2ICsyNyw3IEBAIEI8 b3BlbnNzbD4gQjxzX2NsaWVudD4KKyBbQjwtbmJpbz5dCisgW0I8LWNybGY+XQorIFtCPC1pZ25f ZW9mPl0KKytbQjwtbm9faWduX2VvZj5dCisgW0I8LXF1aWV0Pl0KKyBbQjwtc3NsMj5dCisgW0I8 LXNzbDM+XQorQEAgLTE2MSw2ICsxNjIsMTEgQEAgYnkgc29tZSBzZXJ2ZXJzLgorIGluaGliaXQg c2h1dHRpbmcgZG93biB0aGUgY29ubmVjdGlvbiB3aGVuIGVuZCBvZiBmaWxlIGlzIHJlYWNoZWQg aW4gdGhlCisgaW5wdXQuCisgCisrPWl0ZW0gQjwtbm9faWduX2VvZj4KKysKKytzaHV0IGRvd24g dGhlIGNvbm5lY3Rpb24gd2hlbiBlbmQgb2YgZmlsZSBpcyByZWFjaGVkIGluIHRoZQorK2lucHV0 LiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgaW1wbGljaXQgQjwtaWduX2VvZj4gYWZ0ZXIg QjwtcXVpZXQ+LgorKworID1pdGVtIEI8LXF1aWV0PgorIAorIGluaGliaXQgcHJpbnRpbmcgb2Yg c2Vzc2lvbiBhbmQgY2VydGlmaWNhdGUgaW5mb3JtYXRpb24uICBUaGlzIGltcGxpY2l0bHkKCmRp ZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wZi1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMGYtZmlw cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1ZDcyZi4uMDAwMDAwMAot LS0gYS9vcGVuc3NsLTEuMC4wZi1maXBzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIxNjQg KzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0x LjAuMGYvQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMGYvQ29uZmlndXJlLmZpcHMJMjAxMi0w MS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9Db25maWd1 cmUJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02NjMsNiArNjYzLDcg QEAgbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbAotIG15ICRwcm9jZXNz b3I9IiI7Ci0gbXkgJGRlZmF1bHRfcmFubGliOwotIG15ICRwZXJsOwotK215ICRmaXBzPTA7Ci0g Ci0gCi0gIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUg d2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKLUBAIC04MDksNiArODEwLDEwIEBAIFBST0NFU1Nf QVJHUzoKLSAJCQl9Ci0gCQllbHNpZiAoL14zODYkLykKLSAJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9 Ci0rCQllbHNpZiAoL15maXBzJC8pCi0rCQkJewotKwkJCSRmaXBzPTE7Ci0rCQkgICAgICAgIH0K LSAJCWVsc2lmICgvXnJzYXJlZiQvKQotIAkJCXsKLSAJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFu eSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KLUBAIC0xMzgzLDYgKzEzODgsMTEgQEAgJGNm bGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRubwotIAotICRjZmxhZ3MuPSIgLURP UEVOU1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvLW1vbnQvKTsKLSAKLStpZiAoJGZp cHMpCi0rCXsKLSsJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBT XG4iOwotKwl9Ci0rCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmog PX4gL1wubyQvKTsKLSAkZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8k Lyk7Ci0gJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKLUBAIC0x NTUwLDYgKzE1NjAsMTAgQEAgd2hpbGUgKDxJTj4pCi0gCXMvXkxJQktSQjU9LiovTElCS1JCNT0k d2l0aGFyZ3N7ImtyYjUtbGliIn0vOwotIAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdpdGhhcmdz eyJ6bGliLWxpYiJ9LzsKLSAJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0aGFy Z3N7InpsaWItaW5jbHVkZSJ9LzsKLSsJaWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQUz0uKi9G SVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJl ZF90YXJnZXQvOwotIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsK LSAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hB UkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vYmYvYmZfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JmL2JmX3NrZXkuYwot LS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcwkyMDA4LTExLTEyIDA0 OjU3OjUyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9iZi9iZl9z a2V5LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC01OSwxMCArNTks MTUgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1 ZGUgPG9wZW5zc2wvYmxvd2Zpc2guaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot KwotICNpbmNsdWRlICJiZl9sb2NsLmgiCi0gI2luY2x1ZGUgImJmX3BpLmgiCi0gCi0tdm9pZCBC Rl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh KQotK0ZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KEJGKQotIAl7Ci0gCWludCBpOwotIAlCRl9M T05HICpwLHJpLGluWzJdOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JmL2Jsb3dm aXNoLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vYmYvYmxvd2Zpc2guaAotLS0tIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9iZi9ibG93ZmlzaC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vYmYvYmxvd2Zpc2guaAky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTEwNCw3ICsxMDQsOSBAQCB0 eXBlZGVmIHN0cnVjdCBiZl9rZXlfc3QKLSAJQkZfTE9ORyBTWzQqMjU2XTsKLSAJfSBCRl9LRVk7 Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBwcml2YXRlX0JGX3NldF9rZXko QkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNlbmRp ZgotIHZvaWQgQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSk7Ci0gCi0gdm9pZCBCRl9lbmNyeXB0KEJGX0xPTkcgKmRhdGEsY29uc3QgQkZf S0VZICprZXkpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JuL2JuLmguZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vYm4vYm4uaAotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9i bi9ibi5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vYm4vYm4uaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAotQEAgLTU1OCw2ICs1NTgsMTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNvbnN0IEJJR05V TSAqcCxpbnQgbgotIGludAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdOVU0gKnAs aW50IG5jaGVja3MsIEJOX0NUWCAqY3R4LAotIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9uLCBCTl9H RU5DQiAqY2IpOwotIAotK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdO VU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KTsKLSsKLStpbnQgQk5fWDkzMV9kZXJpdmVf cHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCWNvbnN0IEJJ R05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsJCQljb25z dCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpOwotK2ludCBCTl9YOTMxX2dl bmVyYXRlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKLSsJCQlC SUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwKLSsJCQljb25z dCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYik7Ci0rCi0gQk5fTU9O VF9DVFggKkJOX01PTlRfQ1RYX25ldyh2b2lkICk7Ci0gdm9pZCBCTl9NT05UX0NUWF9pbml0KEJO X01PTlRfQ1RYICpjdHgpOwotIGludCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVNICpyLGNv bnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vYm4vYm5feDkzMXAuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ibi9ibl94OTMx cC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JuL2JuX3g5MzFwLmMuZmlwcwkyMDEyLTAx LTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9i bi9ibl94OTMxcC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCww ICsxLDI3MiBAQAotKy8qIGJuX3g5MzFwLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0 IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0r ICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotKwotKy8qIFg5LjMxIHJvdXRpbmVzIGZvciBwcmltZSBkZXJpdmF0aW9uICovCi0rCi0rLyog WDkuMzEgcHJpbWUgZGVyaXZhdGlvbi4gVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwcmlt ZXMgcGkKLSsgKiAocDEsIHAyLCBxMSwgcTIpIGZyb20gYSBwYXJhbWV0ZXIgWHBpIGJ5IGNoZWNr aW5nIHN1Y2Nlc3NpdmUgb2RkCi0rICogaW50ZWdlcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBi bl94OTMxX2Rlcml2ZV9waShCSUdOVU0gKnBpLCBjb25zdCBCSUdOVU0gKlhwaSwgQk5fQ1RYICpj dHgsCi0rCQkJQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCBpID0gMDsKLSsJaWYgKCFCTl9jb3B5 KHBpLCBYcGkpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghQk5faXNfb2RkKHBpKSAmJiAhQk5fYWRk X3dvcmQocGksIDEpKQotKwkJcmV0dXJuIDA7Ci0rCWZvcig7OykKLSsJCXsKLSsJCWkrKzsKLSsJ CUJOX0dFTkNCX2NhbGwoY2IsIDAsIGkpOwotKwkJLyogTkIgMjcgTVIgaXMgc3BlY2lmaWNlZCBp biBYOS4zMSAqLwotKwkJaWYgKEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHBpLCAyNywgY3R4LCAx LCBjYikpCi0rCQkJYnJlYWs7Ci0rCQlpZiAoIUJOX2FkZF93b3JkKHBpLCAyKSkKLSsJCQlyZXR1 cm4gMDsKLSsJCX0KLSsJQk5fR0VOQ0JfY2FsbChjYiwgMiwgaSk7Ci0rCXJldHVybiAxOwotKwl9 Ci0rCi0rLyogVGhpcyBpcyB0aGUgbWFpbiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uIGZ1bmN0aW9u LiBGcm9tIHBhcmFtZXRlcnMKLSsgKiBYcDEsIFhwMiBhbmQgWHAgZGVyaXZlIHRoZSBwcmltZSBw LiBJZiB0aGUgcGFyYW1ldGVycyBwMSBvciBwMiBhcmUKLSsgKiBub3QgTlVMTCB0aGV5IHdpbGwg YmUgcmV0dXJuZWQgdG9vOiB0aGlzIGlzIG5lZWRlZCBmb3IgdGVzdGluZy4KLSsgKi8KLSsKLStp bnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0g KnAyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdO VU0gKlhwMiwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2Ip Ci0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCUJJR05VTSAqdCwgKnAxcDIsICpwbTE7Ci0rCi0r CS8qIE9ubHkgZXZlbiBlIHN1cHBvcnRlZCAqLwotKwlpZiAoIUJOX2lzX29kZChlKSkKLSsJCXJl dHVybiAwOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJaWYgKCFwMSkKLSsJCXAxID0gQk5f Q1RYX2dldChjdHgpOwotKwotKwlpZiAoIXAyKQotKwkJcDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0r Ci0rCXQgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCXAxcDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0r Ci0rCXBtMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKCFibl94OTMxX2Rlcml2ZV9waShw MSwgWHAxLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIWJuX3g5MzFfZGVyaXZl X3BpKHAyLCBYcDIsIGN0eCwgY2IpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbXVsKHAx cDIsIHAxLCBwMiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBGaXJzdCBzZXQgcCB0byB2 YWx1ZSBvZiBScCAqLwotKwotKwlpZiAoIUJOX21vZF9pbnZlcnNlKHAsIHAyLCBwMSwgY3R4KSkK LSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX211bChwLCBwLCBwMiwgY3R4KSkKLSsJCWdvdG8g ZXJyOwotKwotKwlpZiAoIUJOX21vZF9pbnZlcnNlKHQsIHAxLCBwMiwgY3R4KSkKLSsJCWdvdG8g ZXJyOwotKwotKwlpZiAoIUJOX211bCh0LCB0LCBwMSwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwot KwlpZiAoIUJOX3N1YihwLCBwLCB0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAocC0+bmVnICYm ICFCTl9hZGQocCwgcCwgcDFwMikpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogcCBub3cgZXF1YWxz IFJwICovCi0rCi0rCWlmICghQk5fbW9kX3N1YihwLCBwLCBYcCwgcDFwMiwgY3R4KSkKLSsJCWdv dG8gZXJyOwotKwotKwlpZiAoIUJOX2FkZChwLCBwLCBYcCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJ LyogcCBub3cgZXF1YWxzIFlwMCAqLwotKwotKwlmb3IgKDs7KQotKwkJewotKwkJaW50IGkgPSAx OwotKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSsrKTsKLSsJCWlmICghQk5fY29weShwbTEsIHAp KQotKwkJCWdvdG8gZXJyOwotKwkJaWYgKCFCTl9zdWJfd29yZChwbTEsIDEpKQotKwkJCWdvdG8g ZXJyOwotKwkJaWYgKCFCTl9nY2QodCwgcG0xLCBlLCBjdHgpKQotKwkJCWdvdG8gZXJyOwotKwkJ aWYgKEJOX2lzX29uZSh0KQotKwkJLyogWDkuMzEgc3BlY2lmaWVzIDggTVIgYW5kIDEgTHVjYXMg dGVzdCBvciBhbnkgcHJpbWUgdGVzdAotKwkJICogb2ZmZXJpbmcgc2ltaWxhciBvciBiZXR0ZXIg Z3VhcmFudGVlcyA1MCBNUiBpcyBjb25zaWRlcmFibHkgCi0rCQkgKiBiZXR0ZXIuCi0rCQkgKi8K LSsJCQkmJiBCTl9pc19wcmltZV9mYXN0dGVzdF9leChwLCA1MCwgY3R4LCAxLCBjYikpCi0rCQkJ YnJlYWs7Ci0rCQlpZiAoIUJOX2FkZChwLCBwLCBwMXAyKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0K LSsKLSsJQk5fR0VOQ0JfY2FsbChjYiwgMywgMCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycjoK LSsKLSsJQk5fQ1RYX2VuZChjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyogR2Vu ZXJhdGUgcGFpciBvZiBwYXJhbXRlcnMgWHAsIFhxIGZvciBYOS4zMSBwcmltZSBnZW5lcmF0aW9u LgotKyAqIE5vdGU6IG5iaXRzIHBhcmFtdGVyIGlzIHN1bSBvZiBudW1iZXIgb2YgYml0cyBpbiBi b3RoLgotKyAqLwotKwotK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdO VU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KQotKwl7Ci0rCUJJR05VTSAqdDsKLSsJaW50 IGk7Ci0rCS8qIE51bWJlciBvZiBiaXRzIGZvciBlYWNoIHByaW1lIGlzIG9mIHRoZSBmb3JtCi0r CSAqIDUxMisxMjhzIGZvciBzID0gMCwgMSwgLi4uCi0rCSAqLwotKwlpZiAoKG5iaXRzIDwgMTAy NCkgfHwgKG5iaXRzICYgMHhmZikpCi0rCQlyZXR1cm4gMDsKLSsJbmJpdHMgPj49IDE7Ci0rCS8q IFRoZSByYW5kb20gdmFsdWUgWHAgbXVzdCBiZSBiZXR3ZWVuIHNxcnQoMikgKiAyXihuYml0cy0x KSBhbmQKLSsJICogMl5uYml0cyAtIDEuIEJ5IHNldHRpbmcgdGhlIHRvcCB0d28gYml0cyB3ZSBl bnN1cmUgdGhhdCB0aGUgbG93ZXIKLSsJICogYm91bmQgaXMgZXhjZWVkZWQuCi0rCSAqLwotKwlp ZiAoIUJOX3JhbmQoWHAsIG5iaXRzLCAxLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlCTl9DVFhf c3RhcnQoY3R4KTsKLSsJdCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJZm9yIChpID0gMDsgaSA8 IDEwMDA7IGkrKykKLSsJCXsKLSsJCWlmICghQk5fcmFuZChYcSwgbmJpdHMsIDEsIDApKQotKwkJ CXJldHVybiAwOwotKwkJLyogQ2hlY2sgdGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAtIDEwMCkg Ki8KLSsJCUJOX3N1Yih0LCBYcCwgWHEpOwotKwkJaWYgKEJOX251bV9iaXRzKHQpID4gKG5iaXRz IC0gMTAwKSkKLSsJCQlicmVhazsKLSsJCX0KLSsKLSsJQk5fQ1RYX2VuZChjdHgpOwotKwotKwlp ZiAoaSA8IDEwMDApCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLSsKLSsv KiBHZW5lcmF0ZSBwcmltZXMgdXNpbmcgWDkuMzEgYWxnb3JpdGhtLiBPZiB0aGUgdmFsdWVzIHAs IHAxLCBwMiwgWHAxCi0rICogYW5kIFhwMiBvbmx5ICdwJyBuZWVkcyB0byBiZSBub24tTlVMTC4g SWYgYW55IG9mIHRoZSBvdGhlcnMgYXJlIG5vdCBOVUxMCi0rICogdGhlIHJlbGV2YW50IHBhcmFt ZXRlciB3aWxsIGJlIHN0b3JlZCBpbiBpdC4KLSsgKgotKyAqIER1ZSB0byB0aGUgZmFjdCB0aGF0 IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSBtdXN0IGJlIHNhdGlzZmllZCBYcCBhbmQgWHEK LSsgKiBhcmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBhbmQgc3VwcGxp ZWQgYXMgaW5wdXQuCi0rICovCi0rCi0raW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklH TlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0g KlhwMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RY ICpjdHgsCi0rCQkJQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlCTl9D VFhfc3RhcnQoY3R4KTsKLSsJaWYgKCFYcDEpCi0rCQlYcDEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0r CWlmICghWHAyKQotKwkJWHAyID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAoIUJOX3JhbmQo WHAxLCAxMDEsIDAsIDApKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFCTl9yYW5kKFhwMiwgMTAx LCAwLCAwKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgo cCwgcDEsIHAyLCBYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsK LSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCUJOX0NUWF9lbmQoY3R4KTsKLSsKLSsJcmV0dXJu IHJldDsKLSsKLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JuL01ha2Vm aWxlLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JuL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2JuL01ha2VmaWxlLmZpcHMJMjAwOC0xMS0xMiAwOToxOTowMi4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vYm4vTWFrZWZpbGUJMjAxMi0wMS0w NSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yNiwxMyArMjYsMTMgQEAgTElCU1JDPQli bl9hZGQuYyBibl9kaXYuYyBibl9leHAuYyBibl9saQotIAlibl9wcmludC5jIGJuX3JhbmQuYyBi bl9zaGlmdC5jIGJuX3dvcmQuYyBibl9ibGluZC5jIFwKLSAJYm5fa3Jvbi5jIGJuX3NxcnQuYyBi bl9nY2QuYyBibl9wcmltZS5jIGJuX2Vyci5jIGJuX3Nxci5jIGJuX2FzbS5jIFwKLSAJYm5fcmVj cC5jIGJuX21vbnQuYyBibl9tcGkuYyBibl9leHAyLmMgYm5fZ2YybS5jIGJuX25pc3QuYyBcCi0t CWJuX2RlcHIuYyBibl9jb25zdC5jCi0rCWJuX2RlcHIuYyBibl9jb25zdC5jIGJuX3g5MzFwLmMK LSAKLSBMSUJPQko9CWJuX2FkZC5vIGJuX2Rpdi5vIGJuX2V4cC5vIGJuX2xpYi5vIGJuX2N0eC5v IGJuX211bC5vIGJuX21vZC5vIFwKLSAJYm5fcHJpbnQubyBibl9yYW5kLm8gYm5fc2hpZnQubyBi bl93b3JkLm8gYm5fYmxpbmQubyBcCi0gCWJuX2tyb24ubyBibl9zcXJ0Lm8gYm5fZ2NkLm8gYm5f cHJpbWUubyBibl9lcnIubyBibl9zcXIubyAkKEJOX0FTTSkgXAotIAlibl9yZWNwLm8gYm5fbW9u dC5vIGJuX21waS5vIGJuX2V4cDIubyBibl9nZjJtLm8gYm5fbmlzdC5vIFwKLS0JYm5fZGVwci5v IGJuX2NvbnN0Lm8KLSsJYm5fZGVwci5vIGJuX2NvbnN0Lm8gYm5feDkzMXAubwotIAotIFNSQz0g JChMSUJTUkMpCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvYXNt L2NtbGwteDg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxs LXg4Ni5wbAotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYu cGwuZmlwcwkyMDA5LTA0LTA2IDE2OjI1OjAyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYucGwJMjAxMi0wMS0wNSAxMzoyMjoz MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC03MjIsMTIgKzcyMiwxNSBAQCBteSAkYmlhcz1pbnQoQFRb MF0pP3NoaWZ0KEBUKTowOwotIH0KLSAmZnVuY3Rpb25fZW5kKCJDYW1lbGxpYV9Fa2V5Z2VuIik7 Ci0gCi0rJHNldGtleWZ1bmMgPSAiQ2FtZWxsaWFfc2V0X2tleSI7Ci0rJHNldGtleWZ1bmMgPSAi cHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gaWYg KCRPUEVOU1NMKSB7Ci0gIyBpbnQgQ2FtZWxsaWFfc2V0X2tleSAoCi0gIwkJY29uc3QgdW5zaWdu ZWQgY2hhciAqdXNlcktleSwKLSAjCQlpbnQgYml0cywKLSAjCQlDQU1FTExJQV9LRVkgKmtleSkK LS0mZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxsaWFfc2V0X2tleSIpOwotKyZmdW5jdGlvbl9iZWdp bl9CKCRzZXRrZXlmdW5jKTsKLSAJJnB1c2gJKCJlYngiKTsKLSAJJm1vdgkoImVjeCIsJndwYXJh bSgwKSk7CSMgcHVsbCBhcmd1bWVudHMKLSAJJm1vdgkoImVieCIsJndwYXJhbSgxKSk7Ci1AQCAt NzYwLDcgKzc2Myw3IEBAIGlmICgkT1BFTlNTTCkgewotICZzZXRfbGFiZWwoImRvbmUiLDQpOwot IAkmcG9wCSgiZWJ4Iik7Ci0gCSZyZXQJKCk7Ci0tJmZ1bmN0aW9uX2VuZF9CKCJDYW1lbGxpYV9z ZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2VuZF9CKCRzZXRrZXlmdW5jKTsKLSB9Ci0gCi0gQFNCT1g9 KAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmguZmlw cyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAotLS0tIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoy OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvY2Ft ZWxsaWEuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTg4LDYgKzg4 LDExIEBAIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgCi0gCX07Ci0gdHlwZWRlZiBzdHJ1Y3QgY2Ft ZWxsaWFfa2V5X3N0IENBTUVMTElBX0tFWTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50 IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBj b25zdCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICprZXkpOwotKyNlbmRpZgotKwotIGludCBD YW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBi aXRzLAotIAlDQU1FTExJQV9LRVkgKmtleSk7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2Ft ZWxsaWEvY21sbF9mYmxrLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvY21s bF9mYmxrLmMuZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYwkyMDEyLTAxLTA1IDEzOjIy OjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw2OCBAQAotKy8qIGNyeXB0by9jYW1lbGxp YS9jYW1lbGxpYV9taXNjLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8K LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqLwotKyAKLSsjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+Ci0r I2luY2x1ZGUgImNtbGxfbG9jbC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotKwlDQU1FTExJQV9LRVkgKmtleSkK LSsJewotKwlpZiAoRklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9SVChDQU1FTExJQSkKLSsJ cmV0dXJuIHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwotKwl9 Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvY21sbF9t aXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMKLS0t LSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMuZmlwcwkyMDA4LTEw LTI4IDEzOjEzOjUyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9j YW1lbGxpYS9jbWxsX21pc2MuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAot QEAgLTUyLDExICs1MiwyMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KLSAjaW5jbHVkZSAiY21sbF9sb2NsLmgiCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBjb25zdCBjaGFyIENBTUVMTElBX3ZlcnNp b25bXT0iQ0FNRUxMSUEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0raW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFy ICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICprZXkpCi0rI2Vsc2UK LSBpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25z dCBpbnQgYml0cywKLSAJQ0FNRUxMSUFfS0VZICprZXkpCi0rI2VuZGlmCi0gCXsKLSAJaWYoIXVz ZXJLZXkgfHwgIWtleSkKLSAJCXJldHVybiAtMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxp YS9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5m aXBzCTIwMDgtMTItMjMgMTI6MzM6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCi1AQCAtMjMsOSArMjMsOSBAQCBBUFBTPQotIAotIExJQj0kKFRPUCkvbGliY3J5cHRv LmEKLSBMSUJTUkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxsX2VjYi5jIGNtbGxfY2JjLmMg Y21sbF9vZmIuYyBcCi0tCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIuYyAKLSsJICAgY21sbF9jZmIu YyBjbWxsX2N0ci5jIGNtbGxfZmJsay5jCi0gCi0tTElCT0JKPSBjbWxsX2VjYi5vIGNtbGxfb2Zi Lm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpCi0rTElCT0JKPSBjbWxsX2VjYi5v IGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpIGNtbGxfZmJsay5v Ci0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9j YXN0L2Nhc3QuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYXN0L2Nhc3QuaAotLS0tIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9jYXN0L2Nhc3QuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6Mjku MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Nhc3QvY2FzdC5oCTIw MTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtODMsNyArODMsOSBAQCB0eXBl ZGVmIHN0cnVjdCBjYXN0X2tleV9zdAotIAlpbnQgc2hvcnRfa2V5OwkvKiBVc2UgcmVkdWNlZCBy b3VuZHMgZm9yIHNob3J0IGtleSAqLwotIAl9IENBU1RfS0VZOwotIAotLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9DQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50 IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0rI2VuZGlmCi0gdm9pZCBDQVNUX3Nl dF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7 Ci0gdm9pZCBDQVNUX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25l ZCBjaGFyICpvdXQsIGNvbnN0IENBU1RfS0VZICprZXksCi0gCQkgICAgICBpbnQgZW5jKTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2Nhc3QvY19za2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2Fz dC9jX3NrZXkuYy5maXBzCTIwMDAtMDYtMDMgMTY6MTM6MzUuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Nhc3QvY19za2V5LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKLUBAIC01Nyw2ICs1NywxMSBAQAotICAqLwotIAotICNpbmNsdWRlIDxv cGVuc3NsL2Nhc3QuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNs dWRlICJjYXN0X2xjbC5oIgotICNpbmNsdWRlICJjYXN0X3MuaCIKLSAKLUBAIC03Miw3ICs3Nyw3 IEBACi0gI2RlZmluZSBTNiBDQVNUX1NfdGFibGU2Ci0gI2RlZmluZSBTNyBDQVNUX1NfdGFibGU3 Ci0gCi0tdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSkKLStGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChDQVNUKQotIAl7 Ci0gCUNBU1RfTE9ORyB4WzE2XTsKLSAJQ0FTVF9MT05HIHpbMTZdOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NyeXB0 by5oCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAxMi0wMS0wNSAx MzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY3J5cHRv LmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC01NDcsMTIgKzU0Nyw3 MCBAQCB1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCi0gI2RlZmluZSBP UEVOU1NMX2lhMzJjYXAgKCooT1BFTlNTTF9pYTMyY2FwX2xvYygpKSkKLSBpbnQgT1BFTlNTTF9p c3NlcnZpY2Uodm9pZCk7Ci0gCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNkZWZpbmUgRklQ U19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLSsJ CWFsZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7 Ci0rCi0rI2RlZmluZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9f TElORV9fLCBcCi0rCQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUiKTsK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTX1NUUklDVAotKyNkZWZpbmUgRklQU19CQURfQUxHT1JJ VEhNKGFsZykgRklQU19CQURfQUJPUlQoYWxnKQotKyNlbHNlCi0rI2RlZmluZSBGSVBTX0JBRF9B TEdPUklUSE0oYWxnKSBcCi0rCXsgXAotKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNf Ul9OT05fRklQU19NRVRIT0QpOyBcCi0rCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxnb3JpdGht PSIsICNhbGcpOyBcCi0rCXJldHVybiAwOyBcCi0rCX0KLSsjZW5kaWYKLSsKLSsvKiBMb3cgbGV2 ZWwgZGlnZXN0IEFQSSBibG9ja2luZyBtYWNybyAqLwotKwotKyNkZWZpbmUgRklQU19OT05fRklQ U19NRF9Jbml0KGFsZykgXAotKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwKLSsJCXsg XAotKwkJaWYgKEZJUFNfbW9kZSgpKSBcCi0rCQkJRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAot KwkJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCi0rCQl9IFwKLSsJaW50IHByaXZh dGVfIyNhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykKLSsKLSsvKiBGb3IgY2lwaGVycyB0aGUgQVBJ IG9mdGVuIHZhcmllcyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVhY2ggbmVlZHMgdG8KLSsg KiBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhl cnMgKEJsb3dmaXNoLCBSQzQsCi0rICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1pbGFyIGFu ZCBjYW4gdXNlIGEgYmxvY2tpbmcgbWFjcm8uCi0rICovCi0rCi0rI2RlZmluZSBGSVBTX05PTl9G SVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKLSsJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBcCi0rCQl7IFwKLSsJCWlm IChGSVBTX21vZGUoKSkgXAotKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykgXAotKwkJcHJpdmF0ZV8j I2FsZyMjX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOyBcCi0rCQl9IFwKLSsJdm9pZCBwcml2YXRl XyMjYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgXAotKwkJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqZGF0YSkKLSsKLSsjZWxzZQotKwotKyNkZWZpbmUgRklQU19OT05fRklQ U19WQ0lQSEVSX0luaXQoYWxnKSBcCi0rCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtl eSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsKLSsjZGVmaW5lIEZJUFNf Tk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKLSsJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpjKSAK LSsKLSsjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLwotKwotIC8qIEJFR0lOIEVSUk9SIENP REVTICovCi0gLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhl IHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQg bWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KLSAgKi8KLSB2 b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOwotIAotKyNkZWZpbmUgT1BFTlNTTF9I QVZFX0lOSVQJMQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0gLyogRXJy b3IgY29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNv ZGVzLiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RoL2RoX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2RoL2RoX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTozNy4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGhfZXJyLmMJMjAxMi0wMS0wNSAxMzoyMjoz MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RB VEEgREhfc3RyX2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhESF9GX0NPTVBVVEVfS0VZKSwJIkNPTVBV VEVfS0VZIn0sCi0ge0VSUl9GVU5DKERIX0ZfREhQQVJBTVNfUFJJTlRfRlApLAkiREhwYXJhbXNf cHJpbnRfZnAifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyksCSJESF9C VUlMVElOX0dFTlBBUkFNUyJ9LAotK3tFUlJfRlVOQyhESF9GX0RIX0NPTVBVVEVfS0VZKSwJIkRI X2NvbXB1dGVfa2V5In0sCi0re0VSUl9GVU5DKERIX0ZfREhfR0VORVJBVEVfS0VZKSwJIkRIX2dl bmVyYXRlX2tleSJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX05FV19NRVRIT0QpLAkiREhfbmV3X21l dGhvZCJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX1BBUkFNX0RFQ09ERSksCSJESF9QQVJBTV9ERUNP REUifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9QUklWX0RFQ09ERSksCSJESF9QUklWX0RFQ09ERSJ9 LAotQEAgLTk0LDYgKzk2LDcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBESF9zdHJfcmVhc29u c1tdPQotIHtFUlJfUkVBU09OKERIX1JfQk5fRVJST1IpICAgICAgICAgICAgICAgLCJibiBlcnJv ciJ9LAotIHtFUlJfUkVBU09OKERIX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAgLCJkZWNvZGUg ZXJyb3IifSwKLSB7RVJSX1JFQVNPTihESF9SX0lOVkFMSURfUFVCS0VZKSAgICAgICAgICwiaW52 YWxpZCBwdWJsaWMga2V5In0sCi0re0VSUl9SRUFTT04oREhfUl9LRVlfU0laRV9UT09fU01BTEwp ICAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAotIHtFUlJfUkVBU09OKERIX1JfS0VZU19OT1Rf U0VUKSAgICAgICAgICAgLCJrZXlzIG5vdCBzZXQifSwKLSB7RVJSX1JFQVNPTihESF9SX01PRFVM VVNfVE9PX0xBUkdFKSAgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKLSB7RVJSX1JFQVNPTihE SF9SX05PX1BBUkFNRVRFUlNfU0VUKSAgICAgICwibm8gcGFyYW1ldGVycyBzZXQifSwKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9kaC9kaF9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kaC9kaF9nZW4u Yy5maXBzCTIwMDUtMDQtMjYgMjA6NTM6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2RoL2RoX2dlbi5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICsw MTAwCi1AQCAtNjUsNiArNjUsMTAgQEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpy ZXQsIGludCBwcmltZV9sZW4sIGludCBnZW5lcmF0b3IsIEJOX0dFTkNCICpjYik7Ci0gCi1AQCAt MTA2LDYgKzExMCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQs Ci0gCWludCBnLG9rPSAtMTsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJ UFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwg T1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9E SF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBl cnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0g TlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGguaAot LS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoy OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGguaAkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTc3LDYgKzc3LDggQEAKLSAjIGRl ZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYKLSAKLSsjZGVm aW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERI X0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAxCi0gI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05T VFRJTUUgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMg Y29uc3RhbnQgdGltZQotQEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmlu Z3Modm9pZCk7Ci0gI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0Ci0gI2Rl ZmluZSBESF9GX1BLRVlfREhfREVSSVZFCQkJCSAxMTIKLSAjZGVmaW5lIERIX0ZfUEtFWV9ESF9L RVlHRU4JCQkJIDExMwotKyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0Ci0rI2Rl ZmluZSBESF9GX0RIX0dFTkVSQVRFX0tFWQkJCSAxMTUKLSAKLSAvKiBSZWFzb24gY29kZXMuICov Ci0gI2RlZmluZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQotQEAgLTI1Myw2ICsyNTcsNyBA QCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBESF9SX05PX1BBUkFN RVRFUlNfU0VUCQkJCSAxMDcKLSAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAw Ci0gI2RlZmluZSBESF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKLSsjZGVmaW5l IERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJCSAxMTAKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVz Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL2RoL2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2RoL2RoX2tleS5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyMy4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKLUBAIC02MSw2ICs2MSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotIAotIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Ci0gc3RhdGljIGludCBjb21w dXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRo KTsKLUBAIC0xMDcsNiArMTEwLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCkK LSAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLSAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZf a2V5PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYg KEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK LSsJCXsKLSsJCURIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFM TCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4ID0gQk5fQ1RYX25ldygp OwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAotQEAgLTE4NCw2ICsxOTUsMTMgQEAg c3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQotIAkJREhlcnIoREhfRl9D T01QVVRFX0tFWSxESF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLSAJCWdvdG8gZXJyOwotIAkJfQot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhk aC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlESGVy cihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVy cjsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJY3R4ID0gQk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09 IE5VTEwpIGdvdG8gZXJyOwotQEAgLTI1MSw2ICsyNjksOSBAQCBzdGF0aWMgaW50IGRoX2JuX21v ZF9leHAoY29uc3QgREggKmRoLCBCCi0gCi0gc3RhdGljIGludCBkaF9pbml0KERIICpkaCkKLSAJ ewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRp ZgotIAlkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSAJ fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9kc2EvZHNhX2dlbi5jLmZpcHMJMjAxMC0wNi0xNSAxOToyNTowNy4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDEyLTAxLTA1IDEzOjIy OjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTc3LDggKzc3LDEyIEBACi0gI2luY2x1ZGUgImNyeXB0 bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSAiZHNhX2xvY2wuaCIKLSAK LSBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAotQEAg LTEyNiw2ICsxMzAsMjEgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXpl XwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAl1bnNpZ25lZCBpbnQgaD0yOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAg IEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsKLSsJaWYgKEZJ UFNfbW9kZSgpICYmIChiaXRzIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK LSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNBX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAocXNp emUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEgg JiYKLSAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotIAkJLyogaW52YWxpZCBx IHNpemUgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kc2EvZHNhLmguZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2RzYS9kc2EuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RzYS9kc2EuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAw MDAwMCArMDEwMAotQEAgLTg4LDYgKzg4LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhf TU9EVUxVU19CSVRTCTEwMDAwCi0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9Q CTB4MDEKLSAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBu ZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFu dCB0aW1lCi1AQCAtOTcsNiArOTksMjEgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwgZXhwb25lbnRzLgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotIAotKy8qIElmIHRoaXMg ZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1 c2VkCi0rICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVs ZSBtZXRob2QuIElmIGFuCi0rICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93 biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKLSsgKiB0byBlbnN1cmUgdGhlIHJlc3Vs dCBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhPRAkJ CTB4MDQwMAotKwotKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFs bHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQotKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRo ZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCi0rICogdXNh Z2UgaXMgY29tcGxpYW50LgotKyAqLwotKwotKyNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cJCQkweDA0MDAKLSsKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7Ci0gI2Vu ZGlmCi1AQCAtMjcwLDggKzI4NywxMSBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQp OwotICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKLSAjZGVmaW5lIERTQV9GX0RT QVBBUkFNU19QUklOVAkJCQkgMTAwCi0gI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAJ CQkgMTAxCi0rI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0Ci0rI2RlZmlu ZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKLSAjZGVmaW5lIERTQV9GX0RTQV9E T19TSUdOCQkJCSAxMTIKLSAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMwotKyNk ZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTI1Ci0gI2RlZmluZSBEU0Ff Rl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCi0gI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RF CQkJCSAxMTkKLSAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAtMjk2LDkg KzMxNiwxMiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRFNB X1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAwCi0gI2RlZmluZSBEU0FfUl9ERUNP REVfRVJST1IJCQkJIDEwNAotICNkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAx MDYKLSsjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKLSAjZGVmaW5lIERT QV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9P X0xBUkdFCQkJCSAxMDMKLSsjZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTExCi0g I2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBEU0FfUl9P UEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxMTIKLSAjZGVmaW5lIERTQV9SX1BB UkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9kc2EvZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Rz YS9kc2Ffa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI1LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTItMDEtMDUgMTM6MjI6MzAu MDAwMDAwMDAwICswMTAwCi1AQCAtNjMsOSArNjMsNTUgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tl eWdlbihEU0EgKmRzYSk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBpbnQg Zmlwc19kc2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tl eWdlbih2b2lkKQotKwl7Ci0rCWZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0r aW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVWUF9QS0VZICpwazsKLSsJdW5z aWduZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rCWludCByZXQg PSAwOwotKwotKyAgICAJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8g ZXJyOwotKwotKwlFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJCQlOVUxMLCAwLCBFVlBfc2hhMSgp LCAwLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotK2VycjoKLSsJaWYg KHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJ CX0KLSsKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVybiByZXQ7 Ci0rCX0KLSsjZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAJewot IAlpZihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCi1AQCAtNzksNiArMTI1LDE0IEBAIHN0YXRpYyBp bnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9DVFggKmN0eD1OVUxMOwotIAlC SUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xf RFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0JV SUxUSU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0r CQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBl cnI7Ci0gCi0gCWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCi1AQCAtMTE3LDYgKzE3MSwxNSBA QCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKLSAKLSAJZHNhLT5wcml2 X2tleT1wcml2X2tleTsKLSAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoZmlwc19kc2FfcGFpcndpc2Vf ZmFpbCkKLSsJCQlCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwkJaWYoIWZpcHNfY2hl Y2tfZHNhKGRzYSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7Ci0g Ci0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZp cHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCi0tLS0gb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAxMS0wMi0wMSAxMzo1NDowNC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAxMi0w MS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02NSw2ICs2NSw5IEBACi0gI2luY2x1 ZGUgPG9wZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRl IDxvcGVuc3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25z dCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOwotIHN0YXRpYyBpbnQg ZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdOVU0gKipraW52cCwg QklHTlVNICoqcnApOwotQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwgLyogZHNhX21vZF9leHAsICov Ci0gTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCi0gZHNhX2luaXQsCi0gZHNhX2ZpbmlzaCwK LS0wLAotK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0gTlVMTCwKLSBOVUxMCi1AQCAt MTM3LDYgKzE0MCwyMCBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWdu Ci0gCWludCByZWFzb249RVJSX1JfQk5fTElCOwotIAlEU0FfU0lHICpyZXQ9TlVMTDsKLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7 Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOwotKwkgICAgcmV0dXJuIE5VTEw7Ci0rCSAgICB9Ci0rCi0rCWlmIChGSVBTX21vZGUo KSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJQk5faW5p dCgmbSk7Ci0gCUJOX2luaXQoJnhyKTsKLSAKLUBAIC0zMDMsNiArMzIwLDIwIEBAIHN0YXRpYyBp bnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCAKLSAJCXJldHVybiAtMTsKLSAJCX0KLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAg ICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZLEZJUFNfUl9GSVBTX1NFTEZU RVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCi0rCWlmIChGSVBTX21v ZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVM VVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJldHVybiAtMTsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJaSA9 IEJOX251bV9iaXRzKGRzYS0+cSk7Ci0gCS8qIGZpcHMgMTg2LTMgYWxsb3dzIG9ubHkgZGlmZmVy ZW50IHNpemVzIGZvciBxICovCi0gCWlmIChpICE9IDE2MCAmJiBpICE9IDIyNCAmJiBpICE9IDI1 NikKLUBAIC0zODUsNiArNDE2LDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVu c2lnbmVkIAotIAotIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCi0gewotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlkc2EtPmZs YWdzfD1EU0FfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSB9Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9lcnIvZXJyX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Vyci9lcnJfYWxs LmMuZmlwcwkyMDA5LTA4LTA5IDE2OjU4OjA1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCi1AQCAtOTYsNiArOTYsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC90cy5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gI2lm bmRlZiBPUEVOU1NMX05PX0NNUwotICNpbmNsdWRlIDxvcGVuc3NsL2Ntcy5oPgotICNlbmRpZgot QEAgLTE0OSw2ICsxNTIsOSBAQCB2b2lkIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKHZvaWQpCi0g I2VuZGlmCi0gCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOwotIAlFUlJfbG9hZF9VSV9zdHJpbmdz KCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlFUlJfbG9hZF9GSVBTX3N0cmluZ3MoKTsKLSsj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0gCUVSUl9sb2FkX0NNU19zdHJpbmdzKCk7 Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9kaWdlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDEwLTAzLTA1IDE0OjMzOjQzLjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZGlnZXN0LmMJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMTYsNiArMTE2LDcgQEAKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCi0gI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0gI2VuZGlmCi0r I2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gdm9pZCBFVlBfTURfQ1RYX2luaXQoRVZQX01EX0NU WCAqY3R4KQotIAl7Ci1AQCAtMTM4LDkgKzEzOSw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQ X01EX0NUWCAqY3R4LCBjb25zCi0gCXJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUs IE5VTEwpOwotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3Nl IG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQ UwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsg Ki8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKLSsJeyBGSVBTX0VS Uk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJh ZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0r c3RhdGljIGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KLSsKLStz dGF0aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwK LSsJYmFkX2luaXQsCi0rCWJhZF91cGRhdGUsCi0rCWJhZF9maW5hbCwKLSsJTlVMTCwKLSsJTlVM TCwKLSsJTlVMTCwKLSsJMCwKLSsJezAsMCwwLDB9LAotKwl9OwotKwotKyNlbmRpZgotKwotIGlu dCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwg RU5HSU5FICppbXBsKQotIAl7Ci0gCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9D VFhfRkxBR19DTEVBTkVEKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQot IAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZp bmFsIidkIGNvbnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFu IEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAgLTE5Nyw2ICsyMzksMTggQEAgaW50 IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYwotICNlbmRpZgotIAlpZiAoY3R4 LT5kaWdlc3QgIT0gdHlwZSkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQ U19tb2RlKCkpCi0rCQkJewotKwkJCWlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQ UykgCi0rCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExP VykpCi0rCQkJCXsKLSsJCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9E SVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCQkJcmV0 dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rI2VuZGlmCi0gCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4 LT5kaWdlc3QtPmN0eF9zaXplKQotIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJ Y3R4LT5kaWdlc3Q9dHlwZTsKLUBAIC0yMzAsNiArMjg0LDkgQEAgc2tpcF90b19pbml0OgotIAot IGludCBFVlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGNvdW50KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0 X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7 Ci0gCX0KLSAKLUBAIC0yNDYsNiArMzAzLDkgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURf Q1RYICpjdHgsIHVucwotIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQotIAl7Ci0gCWludCByZXQ7Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0g Ci0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhfTURfU0la RSk7Ci0gCXJldD1jdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LG1kKTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAv ZV9hZXMuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMDQt MDEtMjggMjA6MDU6MzMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2V2cC9lX2Flcy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjks MzIgKzY5LDI5IEBAIHR5cGVkZWYgc3RydWN0Ci0gCi0gSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihh ZXNfMTI4LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLSAJCSAgICAgICBOSURfYWVzXzEyOCwgMTYs IDE2LCAxNiwgMTI4LAotLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCi0tCQkgICAg ICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24x X2l2LAotLQkJICAgICAgIE5VTEwpCi0rCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9D SVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICAgIGFlc19pbml0X2tleSwKLSsJCSAgICAg ICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzE5 Miwga3MsIEFFUywgRVZQX0FFU19LRVksCi0gCQkgICAgICAgTklEX2Flc18xOTIsIDE2LCAyNCwg MTYsIDEyOCwKLS0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJICAgICAgIEVW UF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwK LS0JCSAgICAgICBOVUxMKQotKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9G TEFHX0RFRkFVTFRfQVNOMSwKLSsJCSAgICAgICBhZXNfaW5pdF9rZXksCi0rCQkgICAgICAgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18yNTYsIGtz LCBBRVMsIEVWUF9BRVNfS0VZLAotIAkJICAgICAgIE5JRF9hZXNfMjU2LCAxNiwgMzIsIDE2LCAx MjgsCi0tCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0JCSAgICAgICBFVlBfQ0lQ SEVSX3NldF9hc24xX2l2LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0tCQkg ICAgICAgTlVMTCkKLS0KLS0jZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cykJ SU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywxNikKLS0K LS1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDE5MiwxKQot LUlNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSkKLS0KLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgp Ci0tSU1QTEVNRU5UX0FFU19DRkJSKDE5Miw4KQotLUlNUExFTUVOVF9BRVNfQ0ZCUigyNTYsOCkK LSsJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEs Ci0rCQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwpCi0rCi0rI2RlZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3NpemUsY2JpdHMsZmxhZ3MpCUlN UExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQX0FFU19LRVksa3Msa3NpemUsY2JpdHMsMTYsZmxhZ3Mp Ci0rCi0rSU1QTEVNRU5UX0FFU19DRkJSKDEyOCwxLEVWUF9DSVBIX0ZMQUdfRklQUykKLStJTVBM RU1FTlRfQUVTX0NGQlIoMTkyLDEsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNf Q0ZCUigyNTYsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCi0rSU1QTEVNRU5UX0FFU19DRkJSKDEy OCw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLStJTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgsRVZQX0NJ UEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsOCxFVlBfQ0lQSF9GTEFHX0ZJ UFMpCi0gCi0gc3RhdGljIGludCBhZXNfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGlu dCBlbmMpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5m aXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jCi0tLS0gb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMuZmlwcwkyMDA2LTA4LTMxIDIyOjU2OjIwLjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5j CTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtOTMsNyArOTMsNyBAQCBJ TVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGNhbWVsbGlhXzI1Niwga3MsCi0gCUVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0gCU5VTEwpCi0gCi0tI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihr c2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElB X0tFWSxrcyxrc2l6ZSxjYml0cywxNikKLSsjZGVmaW5lIElNUExFTUVOVF9DQU1FTExJQV9DRkJS KGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBfQ0FNRUxM SUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2LDApCi0gCi0gSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIo MTI4LDEpCi0gSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoMTkyLDEpCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2 cC9lX2RlczMuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcwky MDA4LTEyLTI5IDEzOjM1OjQ3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9ldnAvZV9kZXMzLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBA IC0yMDYsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQ SAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5J RF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVf aW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJ UEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQ U3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5LAotKwkJ CU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUgZGVzX2VkZTNf Y2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE3LDIxICsyMTcsMjEgQEAg QkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIAotICNkZWZpbmUgZGVzX2Vk ZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhk ZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0LAotLQkJCUVW UF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhF Ul9zZXRfYXNuMV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhf UkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAot KwkJCWRlc19lZGUzX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19j dHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9k ZXNfZWRlMywyNCw4LDEsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0 X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBf Q0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19G SVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tl eSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIEJM T0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4 LDgsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAot LQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9h c24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBI X0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAg TlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIHN0YXRpYyBpbnQgZGVz X2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpr ZXksCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX251bGwuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9ldnAvZV9udWxsLmMuZmlwcwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9udWxsLmMJMjAxMi0wMS0wNSAxMzoyMjoz MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfQ0lQ SEVSIG5fY2lwaGVyPQotIAl7Ci0gCU5JRF91bmRlZiwKLSAJMSwwLDAsCi0tCTAsCi0rCUVWUF9D SVBIX0ZMQUdfRklQUywKLSAJbnVsbF9pbml0X2tleSwKLSAJbnVsbF9jaXBoZXIsCi0gCU5VTEws Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2VfcmM0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vZXZwL2VfcmM0LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZw L2VfcmM0LmMuZmlwcwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9yYzQuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAw MDAwMCArMDEwMAotQEAgLTY0LDYgKzY0LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+ Ci0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gLyogRklYTUU6IHN1cmVseSB0aGlzIGlzIGF2 YWlsYWJsZSBlbHNld2hlcmU/ICovCi0gI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZXZwL2V2cF9lbmMuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAv ZXZwX2VuYy5jLmZpcHMJMjAxMC0xMC0xMiAwMToyNDo0OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cF9lbmMuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAw MDAwMDAwMCArMDEwMAotQEAgLTY4LDggKzY4LDUzIEBACi0gCi0gY29uc3QgY2hhciBFVlBfdmVy c2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0 IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5k IGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX0NJ UEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVy IGluaXQiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQ SEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVy IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rLyogTkI6IG5vIGNsZWFudXAgYmVjYXVzZSBpdCBp cyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCi0rCi0rc3RhdGljIGludCBiYWRfc2V0X2Fz bjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsgRklQU19FUlJPUl9J R05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRpYyBpbnQgYmFkX2dl dF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQotKwl7IEZJUFNfRVJS T1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7IHJldHVybiAwO30KLStzdGF0aWMgaW50IGJh ZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIp Ci0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIpOyByZXR1cm4gMDt9Ci0rCi0r c3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhlciA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJ MCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF9kb19jaXBoZXIsCi0rCU5VTEwsCi0r CTAsCi0rCWJhZF9zZXRfYXNuMSwKLSsJYmFkX2dldF9hc24xLAotKwliYWRfY3RybCwKLSsJTlVM TAotKwl9OwotKwotKyNlbmRpZgotKwotIHZvaWQgRVZQX0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQ SEVSX0NUWCAqY3R4KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0 X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldChjdHgsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgp KTsKLSAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KLSAJfQotQEAgLTEwMSw2ICsxNDYsMTQgQEAg aW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJCWVuYyA9IDE7Ci0g CQljdHgtPmVuY3J5cHQgPSBlbmM7Ci0gCQl9Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRVZQX0NJUEhF UklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCWN0eC0+Y2lwaGVyID0g JmJhZF9jaXBoZXI7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4g YmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBjb250ZXh0IG1heSBh bHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAtMjIwLDYg KzI3MywyMiBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdl cyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJs aW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwotKwlpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKQotKwkJ ewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQotKwkJ CSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCi0rCQkJewot KwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJ UFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJ fQotKwkJfQotKyNlbmRpZgotKwotIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVW UF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0gCQlpZighY3R4LT5jaXBoZXItPmluaXQoY3R4 LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2V2cC9ldnBfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cF9lcnIu YwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2Vyci5jLmZpcHMJMjAxMC0wMi0w NyAxNDo0MToyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZw L2V2cF9lcnIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTE1NSw2 ICsxNTUsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfcmVhc29uc1tdCi0ge0VS Ul9SRUFTT04oRVZQX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAot IHtFUlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMpICAgLCJkaWZmZXJlbnQga2V5 IHR5cGVzIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMpICAsImRp ZmZlcmVudCBwYXJhbWV0ZXJzIn0sCi0re0VSUl9SRUFTT04oRVZQX1JfRElTQUJMRURfRk9SX0ZJ UFMpICAgICAsImRpc2FibGVkIGZvciBmaXBzIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRU5DT0RF X0VSUk9SKSAgICAgICAgICAsImVuY29kZSBlcnJvciJ9LAotIHtFUlJfUkVBU09OKEVWUF9SX0VW UF9QQkVfQ0lQSEVSSU5JVF9FUlJPUiksImV2cCBwYmUgY2lwaGVyaW5pdCBlcnJvciJ9LAotIHtF UlJfUkVBU09OKEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZKSAgLCJleHBlY3RpbmcgYW4gcnNh IGtleSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v ZXZwL2V2cC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cC5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAw MDAwICswMTAwCi1AQCAtNzUsNiArNzUsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K LSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotKwotIC8qCi0gI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgotICNk ZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYKLUBAIC0xOTcsNiArMjAxLDggQEAgdHlwZWRlZiBp bnQgZXZwX3ZlcmlmeV9tZXRob2QoaW50IHR5cGUsYwotIAotICNkZWZpbmUgRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFCTB4MDAwNAotIAotKyNkZWZpbmUgRVZQX01EX0ZMQUdfRklQ UwkweDA0MDAgLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLwotKwot IC8qIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIgZmxhZ3MuLi4gKi8KLSAKLSAjZGVmaW5lIEVW UF9NRF9GTEFHX0RJR0FMR0lEX01BU0sJCTB4MDAxOAotQEAgLTI2OSwxMCArMjc1LDYgQEAgc3Ry dWN0IGVudl9tZF9jdHhfc3QKLSAJCQkJCQkqIGNsZWFuZWQgKi8KLSAjZGVmaW5lIEVWUF9NRF9D VFhfRkxBR19SRVVTRQkJMHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCi0gCQkJ CQkJKiBpbiBFVlBfTURfQ1RYX2NsZWFudXAgKi8KLS0vKiBGSVBTIGFuZCBwYWQgb3B0aW9ucyBh cmUgaWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKLS0gKiBzbyB3ZSBkb24n dCBhY2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCi0tICov Ci0tCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4CS8qIEFs bG93IHVzZSBvZiBub24gRklQUyBkaWdlc3QKLSAJCQkJCQkgKiBpbiBGSVBTIG1vZGUgKi8KLSAK LUBAIC0yODQsNiArMjg2LDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gI2RlZmluZSBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BLQ1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLwotICNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLwotICNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KLSsjZGVmaW5l IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCkgXAotKwkJKChjdHgtPmZsYWdzPj4xNikg JjB4RkZGRikgLyogc2VlZCBsZW5ndGggKi8KLSsjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1Nf TURMRU4JMHhGRkZGCS8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCi0rI2RlZmluZSBFVlBf TURfQ1RYX0ZMQUdfUFNTX01SRUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVjb3ZlcmVk ICovCi0gCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8qIERvbid0 IGluaXRpYWxpemUgbWRfZGF0YSAqLwotIAotQEAgLTMzMCwxMiArMzM2LDE2IEBAIHN0cnVjdCBl dnBfY2lwaGVyX3N0Ci0gI2RlZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJMHgxMDAKLSAvKiBj aXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlFVlBfQ0lQ SF9SQU5EX0tFWQkJMHgyMDAKLS0vKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5 aW5nIGxvZ2ljICovCi0tI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwCi0rLyog Tm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLwotKyNkZWZpbmUJCUVWUF9D SVBIX0ZMQUdfRklQUwkJMHg0MDAKLSsvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBt b2RlICovCi0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAotIC8q IEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLwotICNkZWZpbmUJCUVWUF9DSVBI X0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAotIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3Qg Ynl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxBR19MRU5HVEhf QklUUwkweDIwMDAKLSsvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxv Z2ljICovCi0rI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwMAotIAotIC8qIGN0 cmwoKSB2YWx1ZXMgKi8KLSAKLUBAIC0xMjM5LDYgKzEyNDksNyBAQCB2b2lkIEVSUl9sb2FkX0VW UF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9SCQkJCSAxMTQKLSAj ZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMJCQkgMTAxCi0gI2RlZmluZSBFVlBfUl9E SUZGRVJFTlRfUEFSQU1FVEVSUwkJCSAxNTMKLSsjZGVmaW5lIEVWUF9SX0RJU0FCTEVEX0ZPUl9G SVBTCQkJCSAxNjAKLSAjZGVmaW5lIEVWUF9SX0VOQ09ERV9FUlJPUgkJCQkgMTE1Ci0gI2RlZmlu ZSBFVlBfUl9FVlBfUEJFX0NJUEhFUklOSVRfRVJST1IJCQkgMTE5Ci0gI2RlZmluZSBFVlBfUl9F WFBFQ1RJTkdfQU5fUlNBX0tFWQkJCSAxMjcKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9ldnBfbGliLmMK LS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMTAtMDEtMjYg MTU6MzM6NTEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9l dnBfbGliLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Nyw2ICs2 Nyw4IEBAIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8KLSAKLSAJaWYg KGMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMtPmNpcGhl ci0+c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBoZXItPmZs YWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhFUl9zZXRf YXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0KTsKLUBA IC03OCw2ICs4MCw4IEBAIGludCBFVlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQX0NJUEhFUl8K LSAKLSAJaWYgKGMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0 PWMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5j aXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJ UEhFUl9nZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4o cmV0KTsKLUBAIC0xODYsNiArMTkwLDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUo Y29uc3QgRVZQXwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwp Ci0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj ZW5kaWYKLSAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpOwot IAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlw cyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2xvY2wuaAkyMDEyLTAx LTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTI1NCwxNCArMjU0LDMyIEBAIGNvbnN0 IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQKLSAKLSAjZGVmaW5lIEVWUF9DX0RB VEEoa3N0cnVjdCwgY3R4KQkoKGtzdHJ1Y3QgKikoY3R4KS0+Y2lwaGVyX2RhdGEpCi0gCi0tI2Rl ZmluZSBJTVBMRU1FTlRfQ0ZCUihjaXBoZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXpl LGNiaXRzLGl2X2xlbikgXAotKyNkZWZpbmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVyLGNwcmVmaXgs a3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4sZmwpIFwKLSAJQkxPQ0tfQ0lQSEVS X2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNiaXRzLGtzdHJ1Y3Qsa3NjaGVk KSBcCi0gCUJMT0NLX0NJUEhFUl9kZWZfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxrc3RydWN0LCBc Ci0gCQkJICAgICBOSURfIyNjaXBoZXIjI18jI2tleXNpemUsIGtleXNpemUvOCwgaXZfbGVuLCBj Yml0cywgXAotLQkJCSAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIFwKLS0JCQkgICAg IEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsIFwKLS0JCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFf aXYsIFwKLS0JCQkgICAgIE5VTEwpCi0rCQkJICAgICAoZmwpfEVWUF9DSVBIX0ZMQUdfREVGQVVM VF9BU04xLCBcCi0rCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCkKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmluZSBSQzJfc2V0X2tleQlwcml2 YXRlX1JDMl9zZXRfa2V5Ci0rI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5 Ci0rI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKLSsjZGVmaW5lIFJD NV8zMl9zZXRfa2V5CXByaXZhdGVfUkM1XzMyX3NldF9rZXkKLSsjZGVmaW5lIEJGX3NldF9rZXkJ cHJpdmF0ZV9CRl9zZXRfa2V5Ci0rI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3Nl dF9rZXkKLSsjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5 Ci0rI2RlZmluZSBpZGVhX3NldF9lbmNyeXB0X2tleSBwcml2YXRlX2lkZWFfc2V0X2VuY3J5cHRf a2V5Ci0rCi0rI2RlZmluZSBNRDVfSW5pdAlwcml2YXRlX01ENV9Jbml0Ci0rI2RlZmluZSBNRDRf SW5pdAlwcml2YXRlX01ENF9Jbml0Ci0rI2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01EMl9Jbml0 Ci0rI2RlZmluZSBNREMyX0luaXQJcHJpdmF0ZV9NREMyX0luaXQKLSsjZGVmaW5lIFNIQV9Jbml0 CXByaXZhdGVfU0hBX0luaXQKLSsjZGVmaW5lIFJJUEVNRDE2MF9Jbml0CXByaXZhdGVfUklQRU1E MTYwX0luaXQKLSsjZGVmaW5lIFdISVJMUE9PTF9Jbml0CXByaXZhdGVfV0hJUkxQT09MX0luaXQK LSsKLSsjZW5kaWYKLSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0Ci0gCXsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9ldnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9kc3MuYy5maXBz CTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1A QCAtODEsNyArODEsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzYV9tZD0KLSAJTklEX2RzYVdp dGhTSEEsCi0gCU5JRF9kc2FXaXRoU0hBLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01E X0ZMQUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFH X0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9t X2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcwkyMDA2 LTA0LTE5IDE5OjA1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9ldnAvbV9kc3MxLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC04 Miw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KLSAJTklEX2RzYSwKLSAJ TklEX2RzYVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtF WV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0g CWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZXZwL21fbWRjMi5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX21kYzIuYwot LS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9tZGMyLmMuZmlwcwkyMDEwLTAyLTAyIDE0 OjM2OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9t ZGMyLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02OCw2ICs2OCw3 IEBACi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgot ICNlbmRpZgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBf TURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIE1EQzJfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZXZwL21fbWQyLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fbWQy LmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0g c3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gTUQyX0luaXQoY3R4 LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX21kNC5j LmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX21kNC5jCi0tLS0gb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2V2cC9tX21kNC5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fbWQ0LmMJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02OCw2ICs2OCw3IEBACi0gI2lmbmRlZiBPUEVO U1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNlbmRpZgotKyNpbmNsdWRl ICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsg cmV0dXJuIE1ENF9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9ldnAvbV9tZDUuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9tZDUu YwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9tZDUuYy5maXBzCTIwMDUtMDctMTYg MTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9t X21kNS5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjgsNiArNjgs NyBAQAotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4K LSAjZW5kaWYKLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGluaXQoRVZQ X01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBNRDVfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fcmlwZW1kLmMuZmlwcyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZXZwL21fcmlwZW1kLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZw L21fcmlwZW1kLmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9yaXBlbWQuYwkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9f UlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9s b2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4g UklQRU1EMTYwX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9zaGEx LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAwOC0wMy0x MiAyMjoxNDoyNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZw L21fc2hhMS5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtODIsNyAr ODIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFfbWQ9Ci0gCU5JRF9zaGExLAotIAlOSURf c2hhMVdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWws Ci1AQCAtMTE5LDcgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kPQotIAlO SURfc2hhMjI0LAotIAlOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTIyNF9ESUdF U1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZM QUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5p dDIyNCwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xMzgsNyArMTQwLDggQEAgc3Rh dGljIGNvbnN0IEVWUF9NRCBzaGEyNTZfbWQ9Ci0gCU5JRF9zaGEyNTYsCi0gCU5JRF9zaGEyNTZX aXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjU2X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFH X1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0MjU2LAotIAl1cGRhdGUyNTYsCi0gCWZp bmFsMjU2LAotQEAgLTE2OSw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9t ZD0KLSAJTklEX3NoYTM4NCwKLSAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEz ODRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVW UF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMs Ci0gCWluaXQzODQsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1AQCAtMTg4LDcgKzE5Miw4 IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kPQotIAlOSURfc2hhNTEyLAotIAlOSURf c2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTUxMl9ESUdFU1RfTEVOR1RILAotLQlFVlBf TURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5U LAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxH SURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDUxMiwKLSAJdXBkYXRlNTEy LAotIAlmaW5hbDUxMiwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV93cC5j LmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX3dwLmMKLS0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZXZwL21fd3AuYy5maXBzCTIwMDUtMTEtMzAgMjE6NTc6MjMuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX3dwLmMJMjAxMi0wMS0wNSAxMzoy MjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC05LDYgKzksNyBAQAotICNpbmNsdWRlIDxvcGVuc3Ns L29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0gI2luY2x1ZGUgPG9wZW5z c2wvd2hybHBvb2wuaD4KLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGlu aXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBXSElSTFBPT0xfSW5pdChjdHgtPm1kX2Rh dGEpOyB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL25hbWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZXZwL25hbWVzLmMuZmlwcwkyMDEwLTAzLTA2IDIxOjQ3OjQ1LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbmFtZXMuYwkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAotQEAgLTY2LDYgKzY2LDEwIEBAIGludCBFVlBfYWRkX2NpcGhlcihj b25zdCBFVlBfQ0lQSEVSICpjKQotIAl7Ci0gCWludCByOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJcj1PQkpfTkFNRV9h ZGQoT0JKX25pZDJzbihjLT5uaWQpLE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01FVEgsKGNvbnN0IGNo YXIgKiljKTsKLSAJaWYgKHIgPT0gMCkgcmV0dXJuKDApOwotIAljaGVja19kZWZlcihjLT5uaWQp OwotQEAgLTc5LDYgKzgzLDEwIEBAIGludCBFVlBfYWRkX2RpZ2VzdChjb25zdCBFVlBfTUQgKm1k KQotIAlpbnQgcjsKLSAJY29uc3QgY2hhciAqbmFtZTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rI2VuZGlmCi0rCi0gCW5hbWU9T0JKX25pZDJz bihtZC0+dHlwZSk7Ci0gCXI9T0JKX05BTUVfYWRkKG5hbWUsT0JKX05BTUVfVFlQRV9NRF9NRVRI LChjb25zdCBjaGFyICopbWQpOwotIAlpZiAociA9PSAwKSByZXR1cm4oMCk7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2V2cC9wX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvcF9zaWduLmMu ZmlwcwkyMDEwLTExLTI3IDE4OjM0OjU3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9ldnAvcF9zaWduLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAx MDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1 ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2b2lkIEVWUF9TaWduSW5p dChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAqdHlwZSkKLUBAIC0xMDEsNiArMTAyLDIyIEBAIGlu dCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKLSAJCQlnb3RvIGVycjsKLSAJ CWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9 IDApCi0gCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSkKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNB X1g5MzFfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsKLSsJCQlp ZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURE SU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZM QUdfUFNTX1NBTFQoY3R4KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNT X01ETEVOKQotKwkJCQlzYWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBf TURfQ1RYX0ZMQUdfUFNTX01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAoRVZQX1BL RVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rCQkJCWdv dG8gZXJyOwotKwkJCX0KLSAJCWlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRt cCwgbSwgbV9sZW4pIDw9IDApCi0gCQkJZ290byBlcnI7Ci0gCQkqc2lnbGVuID0gc2x0bXA7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v ZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDEwLTExLTI3IDE4OjM0OjU3LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDEyLTAxLTA1IDEzOjIy OjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5z c2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAotIGludCBFVlBfVmVyaWZ5 RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCi0gCSAg ICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCi1AQCAtODYsNiArODcsMjIg QEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgotIAkJCWdvdG8gZXJy OwotIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2Vz dCkgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX1BBRF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4 LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZs YWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwot KwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNT X1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9D VFhfRkxBR19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxB R19QU1NfTURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09 IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChF VlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJ CQkJZ290byBlcnI7Ci0rCQkJfQotIAkJaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVm LCBzaWdsZW4sIG0sIG1fbGVuKTsKLSAJCWVycjoKLSAJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4 KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMu Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwotLS0t IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzCTIwMTIt MDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICsw MTAwCi1AQCAtMCwwICsxLDkzOSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoK LSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK LSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNUIEFFUyBB bGdvcml0aG0gVmFsaWRhdGlvbiBTdWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBEb25hdGVk IHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2VudHVyeSBC bHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4KLSsgIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNpbmNs dWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxj dHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMg QUVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKyNkZWZp bmUgQUVTX0JMT0NLX1NJWkUgMTYKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBBRVNU ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwg dW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAg IGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVk IGNoYXIgKnBsYWludGV4dCwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKLSsg ICAgewotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAgICBpZiAo c3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0r CQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJYnJl YWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOwotKwkJ YnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwot KwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwg IkVDQiIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5 MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNl IDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0r CX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDApCi0rCXsK LSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9h ZXNfMTI4X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMTkyX2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsg ICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7Ci0rCXN3 aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEy OF9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVz XzE5Ml9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBf YWVzXzI1Nl9vZmIoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNh c2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNh c2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0r CQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJyZWFrOwot KwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCQlicmVh azsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0r CXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVW UF9hZXNfMTI4X2NmYjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIg PSBFVlBfYWVzXzE5Ml9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lw aGVyID0gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxz ZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4g MDsKLSsJfQotKyAgICBpZiAoIWNpcGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNp emU6ICVkXG4iLCBha2V5c3opOwotKwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVWUF9DaXBo ZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJl dHVybiAwOwotKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBI RVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwotKyAgICBp ZiAoZGlyKQotKwkJRVZQX0NpcGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsK LSsJZWxzZQotKwkJRVZQX0NpcGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwg IkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNG QjEiLCJDRkI4IiwiQ0ZCMTI4In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBD RkI4LCBDRkIxMjh9OwotK2VudW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9OwotKwotKy8q PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBUZXN0cyAg ICAgICAgICAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKy8qI2Rl ZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVmaW5lIHNi KGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8 PCAoKGIpJTgpKSkqLwotKwotKyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIp JTgpKSYxKQotKyNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8 PCAoNy0oYiklOCkpKXwoISEodikgPDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0KGNoYXIg KmFtb2RlLCAKLSsJICAgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBj aGFyICppVmVjLAotKwkgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAot KwkgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVk IGNoYXIga2V5WzEwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NL X1NJWkVdOwotKyAgICB1bnNpZ25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWdu ZWQgY2hhciBjdGV4dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2 NCs0XTsKLSsgICAgaW50IGksIGosIG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0gMCwgbmtl eXN6ID0gYWtleXN6Lzg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXByaW50Zigi XG4+Pj4+IExlbmd0aCBleGNlZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkgICAgICAg YW1vZGUsIGFrZXlzeik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2RlID0gMDsg aW1vZGUgPCA2OyArK2ltb2RlKQotKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9 PSAwKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYo IlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsK LSsgICAgbWVtY3B5KGtleVswXSwgYUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMpCi0rCW1l bWNweShpdlswXSwgaVZlYywgQUVTX0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09IFhFTkNS WVBUKQotKwltZW1jcHkocHRleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJbWVtY3B5 KGN0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCi0r CXsKLSsJLyogcHJpbnRmKCJJdGVyYXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+IDApCi0r CSAgICB7Ci0rCSAgICBmcHJpbnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAgIE91dHB1 dFZhbHVlKCJLRVkiLGtleVtpXSxua2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2RlICE9IEVD QikgIC8qIEVDQiAqLwotKwkJT3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxy ZnAsMCk7Ci0rCSAgICAvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwkgICAg T3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJm cCwKLSsJCQlpbW9kZSA9PSBDRkIxKTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8IDEwMDA7 ICsraikKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVD QjoKLSsJCWlmIChqID09IDApCi0rCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLwotKwkJ ICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKLSsJ CQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtq XSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1j cHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShj dGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewot KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwg Y3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtq XSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgs IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRb al0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDQkM6 Ci0rCSAgICBjYXNlIE9GQjogIAotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9PSAwKQot KwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtp XSwgaXZbaV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwot KwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNS WVBUKQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0r CQkJbWVtY3B5KGN0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJ CSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhl cigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0s IGN0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0Np cGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2or MV0sIHB0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkg ICAgY2FzZSBDRkI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVT VGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAv KiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0s IGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhF TkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwot KwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVu KTsKLSsJCSAgICB9Ci0rCQlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBp ZiAoaiA8IDE2KQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkg ICAgZWxzZQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAg ICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KGN0 ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0 W2orMV0sIHB0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAg Y2FzZSBDRkIxOgotKwkJaWYoaiA9PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAgIC8qIGNv bXBlbnNhdGUgZm9yIHdyb25nIGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJICAgIGlm KGkgPT0gMCkKLSsJCQlwdGV4dFswXVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0ID0gQUVT VGVzdCgmY3R4LGFtb2RlLGFrZXlzeixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4dFtqXSwg Y3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAo ZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pd LCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4 dFtqXSwgbGVuKTsKLSsKLSsJCSAgICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAg ewotKwkJICAgIGlmKGogPCAxMjgpCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsK LSsJCSAgICBlbHNlCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7Ci0r CQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKGN0 ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0W2orMV0s MCxnYihwdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAg fQotKwktLWo7IC8qIHJlc2V0IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0IENpcGhl cnRleHQgfCBQbGFpbnRleHQgKi8KLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4 dFtqXSA6IHB0ZXh0W2pdLGxlbixyZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0rCWZwcmlu dGYocmZwLCAiXG4iKTsgIC8qIGFkZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0ZSBuZXh0 IEtFWSAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYgKGltb2Rl ID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENU W2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEs IC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJ ICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0x IDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihj dGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJ CSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0s IDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0 ZXh0LCBjdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0 W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lw aGVydGV4dCwgY3RleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBj dGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJZWxzZQot KwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0g fHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5 c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBw dGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsK LSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkg ICAgc2IoY2lwaGVydGV4dCxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNl Ci0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTky OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1l bWNweShjaXBoZXJ0ZXh0KzgsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNl IDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwotKwkJICAg IG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJ ICAgIH0KLSsJICAgIH0KLSsJLyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0g eG9yIGN0ICovCi0rCWZvciAobiA9IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtleVtpKzFd W25dID0ga2V5W2ldW25dIF4gY2lwaGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUgbmV4dCBJ ViBhbmQgdGV4dCAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgc3dp dGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0WzBdLCBj dGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJ ICAgIGNhc2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgY3Rl eHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwg QUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkvKiBJVltp KzFdID0gY3QgKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4y KQotKwkJICAgIGl2W2krMV1bbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFswXVswXSA9 IGN0ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9 MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdi KGN0ZXh0W2otbjJdLDApKTsKLSsJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOwot KwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAo aW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwgcHRleHRb al0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBj YXNlIE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pd LCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19C TE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChuMSA9IDAs IG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4 dFtqLW4yXVswXTsKLSsJCWN0ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQlicmVhazsK LSsJICAgIGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwt LW4yKQotKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJY3RleHRb MF1bMF09cHRleHRbai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJ fQotKyAgICAKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSsgICMgQ29uZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZTIE1NVCB0 ZXN0IGRhdGEgZm9yIEVDQgotKyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKLSsgICMg S2V5IExlbmd0aCA6IDI1NgotKyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwg Y2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsg ICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XTsK LSsgICAgY2hhciB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwotKyAg ICBjaGFyIGFsZ29bOF0gPSAiIjsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFy IGF0ZXN0WzhdID0gIiI7Ci0rICAgIGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25lZCBjaGFy IGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0g MDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNo YXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RY IGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZp bGUgfHwgISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0 dXJuIC0xOwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZw ID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4g ZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0 dXJuIC0xOwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7 Ci0rCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJ aWYgKCFycCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2Vy dChycCk7Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIp OwotKwltZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAg aWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50Zigi Q2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJy bm8pKTsKLSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQot KyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBO VUxMKQotKwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVm KTsKLSsJLyogICAgICBwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KLSsJ c3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0r CSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJ CWlmICgoKmFsZ28gPT0gJ1wwJykgfHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8Ci0rCQkg ICAgKGFrZXlzeiA9PSAwKSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29y aXRobSwgTW9kZSBvciBLZXlTaXplICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxhbW9kZSxh a2V5c3opOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJ CSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQot KwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQg cHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVs c2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYr MjsKLSsJCWludCBuOwotKwkJaWYgKGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50 IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZw cmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21wKHBwLCAi QUVTVlMgIiwgNikgPT0gMCkKLSsJCQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKLSsJCQkv KiBnZXQgdGVzdCB0eXBlICovCi0rCQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAn KTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0 W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAn KTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHko YW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9 ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2Rl ID0gJXNcbiIsIGF0ZXN0LCBhbW9kZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNl Y21wKHBwLCAiS2V5IExlbmd0aCA6ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5c3ogPSBh dG9pKHBwKzEzKTsKLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVk XG4iLCBha2V5c3opOwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJ Y2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9 PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0 cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0r CQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAg ICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5 d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7 Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJ cHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwot KwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4 eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQot KwkJYnJlYWs7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJ YnJlYWs7Ci0rCi0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDAp Ci0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0r CSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwot KwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIp OwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVl KCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCi0r CQkgICAgewotKwkJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJICAgIHN0 ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJ ViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2Vj bXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxu Iik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJp bigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAg ICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsK LSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRp cik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQg PSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21w KGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2lu ZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJ CWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkK LSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0r CQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIp OwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49 IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVy Zmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVk IGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAw KSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19tY3QoYW1v ZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciop cGxhaW50ZXh0LCBsZW4sIAotKwkJCSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2Rl LCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0g ZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBP dXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21w KGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJl YWs7Ci0rCi0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGli dWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAx MykgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsK LSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJ CSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsK LSsJCWVsc2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlp ZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRc biIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0rCQlQcmlu dFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRl c3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAg ICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0 ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQg PSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwg IC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVy dGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hh ciAqKXBsYWludGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJ ICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJ ICAgIGlmIChpYnVmWzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJN aXNzaW5nIHRlcm1pbmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0 LCAiTUNUIikgIT0gMCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwg Ki8KLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJy ZWFrOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBp ZiAoYWZwKQotKwlmY2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFBy b2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3Nl IG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZp ZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNw ZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBp czogLWQgcmVxLnR4dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsg ICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUg KmZwID0gTlVMTDsKLSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAg IGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAg IGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElU KDEpOwotKwl9Ci0rI2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2Fz ZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkg ICAgfQotKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7 Ci0rCSAgICBmX29wdCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJ ICAgIHsKLSsJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsK LSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAg ICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAg fQotKwlpZiAoZF9vcHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7 Ci0rCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0r CSAgICB9Ci0rCX0KLSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVj dG9yeSkgKi8KLSsJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkg ICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAt MTsKLSsJICAgIH0KLSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7 Ci0rCSAgICBzdHJ0b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAg ICBpZiAoVkVSQk9TRSkKLSsJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAg ICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9j ZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0r CSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwot Kwl7Ci0rCWlmIChWRVJCT1NFKQotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4p OwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50Zigi Pj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0K LSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCi0tLS0gb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rlc21vdnMuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAot QEAgLTAsMCArMSw3MDIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw NCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBERVMgTW9kZXMg b2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCi0rICBUZXN0IFByb2dyYW0KLSsKLSsgIEJh c2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgotKyAgRG9uYXRlZCB0 byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1cnkgQmx2 ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0rICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5 cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERF UyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjZGVmaW5l IERFU19CTE9DS19TSVpFIDgKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotK2ludCBERVNUZXN0 KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5z aWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGlu dCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNo YXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCi0rICAgIHsKLSsgICAgY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKGFrZXlzeiAhPSAxOTIpCi0r CXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJRVhJVCgx KTsKLSsJfQotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCWNp cGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9k ZSwgIkVDQiIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKLSsgICAgZWxz ZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rl c19lZGUzX2NmYjY0KCk7Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwg MykgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwotKyAgICBlbHNlIGlmKCFz dHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7 Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX2NmYjEoKTsKLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2Rl OiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChFVlBfQ2lwaGVy SW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQotKwlyZXR1 cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQSEVS X0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsgICAgRVZQ X0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVu KQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rICAgIG9s ZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIs IHRhZywgb2xlbiwgb2J1Zik7Ci0rICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hh ciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCi0rICAgIHsKLSsgICAgaW50IG47 Ci0rCi0rICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCi0rICAgIG1lbW1vdmUoZHN0LGRzdCtu Yml0cy84LDMqOC1uYml0cy84KTsKLSsgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCi0rICAgIG1l bWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKLSsgICAgLyogbGVmdCBzaGlm dCB0aGUgYml0cyAqLwotKyAgICBpZihuYml0cyU4KQotKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsr bikKLSsJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5i aXRzJTgpKTsKLSsgICAgfQkKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhF UlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJD RkI4IiwiQ0ZCNjQifTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENG QjY0fTsKLStpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0rdm9pZCBkb19tY3Qo Y2hhciAqYW1vZGUsIAotKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNo YXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKLSsJICAgIGludCBkaXIsIHVuc2lnbmVkIGNo YXIgKnRleHQsIGludCBsZW4sCi0rCSAgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IGks aW1vZGU7Ci0rICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLwot KyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOwotKwotKyAgICBmb3IgKGltb2RlPTAgOyBpbW9k ZSA8IDYgOyArK2ltb2RlKQotKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQotKwkg ICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2du aXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGZvcihp PTAgOyBpIDwgNDAwIDsgKytpKQotKwl7Ci0rCWludCBqOwotKwlpbnQgbjsKLSsJaW50IGtwPWFr ZXlzei82NDsKLSsJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJZnByaW50ZihyZnAsIlxuQ09V TlQgPSAlZFxuIixpKTsKLSsJaWYoa3AgPT0gMSkKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFr ZXksOCxyZnAsMCk7Ci0rCWVsc2UKLSsJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCi0rCQl7 Ci0rCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1ZSgiIixha2V5K24q OCw4LHJmcCwwKTsKLSsJCX0KLSsKLSsJaWYoaW1vZGUgIT0gRUNCKQotKwkgICAgT3V0cHV0VmFs dWUoIklWIixpdmVjLDgscmZwLDApOwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxs ZW4scmZwLGltb2RlID09IENGQjEpOwotKyNpZiAwCi0rCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlh bm5lc3MgKi8KLSsJaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08PD03OwotKyNlbmRp ZgotKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsr aikKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07Ci0rCi0rCSAgICBt ZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJCXsKLSsJCW1lbWNw eShvbGRfaXYsaXZlYyw4KTsKLSsJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVj LGRpcix0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCW1lbWNweShv bGRfaXYsY3R4Lml2LDgpOwotKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOwotKwkJ fQotKwkgICAgaWYoaiA9PSA5OTk5KQotKwkJewotKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0 ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsg Ki8KLSsJCX0KLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLwotKwkg ICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCi0rCSAgICBzaGlm dGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIs bmssMjQpOyovCi0rCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENG QjggfHwgaW1vZGUgPT0gQ0ZCNjQKLSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBP RkIpCi0rCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7Ci0rCi0rCSAgICBpZighZGlyICYmIChpbW9k ZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQotKwkJewotKwkJ LyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3Bl cmF0aW9uCi0rCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAq LwotKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25d OwotKwkJfQotKwkgICAgfQotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5W25d Xj1ua1sxNituXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVs4K25dXj1u a1s4K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5WzE2K25dXj1ua1tu XTsKLSsJaWYobnVta2V5cyA8IDMpCi0rCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOwot KwlpZihudW1rZXlzIDwgMikKLSsJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOwotKwlERVNf c2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKLSsJREVTX3NldF9vZGRfcGFyaXR5 KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxv Y2sgKikoYWtleSsxNikpOwotKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0rCi0rCS8qIHBvaW50 bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQotKwkg ICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hv Ci0rCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KLSsJaWYoaW1vZGUgPT0gT0ZCKQotKwkg ICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07 Ci0rCX0KLSsgICAgfQotKyAgICAKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAq cnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklM RSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1Zlsy MDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbW9kZVs4XSA9 ICIiOwotKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKLSsgICAgaW50IGFrZXlzej0wOwotKyAg ICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBl cnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0r ICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAg IEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgaW50IG51bWtleXM9MTsKLSsgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJ ewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0 cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9 PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJ ICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlm ICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJl cS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0 cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShycCwi cnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIucnNw IiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3Bm aWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7 Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAo ZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGlu ZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyoJcHJpbnRmKCJzdGVw PSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1v ZGUsIkVDQiIpKQotKwkgICAgewotKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7 Ci0rCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJICAg IH0KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxl ICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUg Ki8KLSsJCWlmICgqYW1vZGUgPT0gJ1wwJykKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNz aW5nIE1vZGVcbiIpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQot KwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIklu dmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9 IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYoKmFtb2RlKQotKwkJICAgIHsgLyogaW5zZXJ0IGN1 cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7Ci0rCQkg ICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAgICB9Ci0rCQllbHNl Ci0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgaWYoIXN0cm5jbXAo cHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKLSsJCSAgICAgICB8fCAh c3RybmNtcChwcCwiVERFUyAiLDUpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFU SU9OICIsMTIpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQot KwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJCXsKLSsJCQkvKiBn ZXQgdGVzdCB0eXBlICovCi0rCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQotKwkJCSAgICBw cCs9NDsKLSsJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCi0rCQkJICAgIHBwKz01 OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlzdHJuY3B5 KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBtb2RlICov Ci0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQluID0gc3Ry bGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1vZGVbbl0g PSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9TRSkKLSsJ CQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKLSsJCQl9Ci0rCQkg ICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtE RUNSWVBUXSAqLwotKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBp ZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVw OwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAg IGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkg PT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYo IkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAg fQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQll cnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsK LSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6 IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0rCQl7Ci0rCSAgICAg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAg ICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJewotKwkgICAgICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNh c2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQotKwkJewotKwkJbnVta2V5cz1hdG9pKGlidWYr MTApOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkg ICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCi0rCQl7Ci0rCQlha2V5c3o9NjQ7 Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDAp Ci0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0x OwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxl bik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJL RVlzID0gIiw3KSkKLSsJCXsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhleDJiaW4oaWJ1Zis3 LGFLZXkpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxp ZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCW1l bWNweShhS2V5KzgsYUtleSw4KTsKLSsJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7Ci0rCQlpYnVm WzRdPSdcMCc7Ci0rCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7Ci0rCQkrK3N0ZXA7Ci0r CQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQotKwkJewotKwkJ aW50IG49aWJ1ZlszXS0nMSc7Ci0rCi0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmluKGli dWYrNyxhS2V5K24qOCk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAg fQotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKLSsJCWlm KG4gPT0gMikKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlwcmlu dGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsK LSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAg ICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50 ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewot KwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7 Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0 OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJ CXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAg IGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAo YW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4 dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJ CWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhU OiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9 Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5U RVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRl c3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJ ICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxs ZW4scmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChkaXIg PT0gMSk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBp VmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJ ICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhF UlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsK LSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDU6 IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0rCQl7Ci0r CQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNl Ci0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmlu KGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0rCQkgICAg bGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAgICBlcnIg PTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJCi0rCQlQcmludFZhbHVlKCJDSVBIRVJU RVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09 IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChhbW9k ZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhlcnRleHQs IGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChk aXIgPT0gMCk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJ CQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIlBM QUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJy ZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJewotKwkJ ZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJICAg IGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBhbHJlYWR5 IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJfQotKwkg ICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAocmZwKQot KwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJldHVy biBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCi0r ICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KLSsgIEEg c2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCi0r ICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4eHh4 Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZp bGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9ICIi LCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19w cmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAoYXJnYyA+ IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJICAgIHsK LSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFd LCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9vcHQgPSAw OwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1l dGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGFy Z2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Ci0r CSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0ID0gYXJn dlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJICAg IHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkKLSsJeyAv KiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4ocnFsaXN0 LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmls ZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwgc2l6 ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwotKwkgICAg c3RyY3B5KHJmbiwgZm4pOwotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsK LSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJCXByaW50ZigiPj4+ IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJRVhJVCgxKTsKLSsJ CX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxl ICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBm bik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewotKwkgICAgcHJpbnRm KCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKLSsJICAgIH0KLSsJ fQotKyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwotLS0tIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMJMjAxMi0wMS0wNSAxMzoy MjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfZHNzdnMuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAs MCArMSw1MzcgQEAKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5k ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAi Zmlwc191dGwuaCIKLSsKLStzdGF0aWMgdm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwgQklHTlVN ICpibikKLSsJewotKwlpbnQgbGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0rCWxlbiA9 IEJOX251bV9ieXRlcyhibik7Ci0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICgh dG1wKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxu Iik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJcHJpbnRmKCIl cyA9ICIsIG5hbWUpOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlwcmludGYoIiUw MlgiLCB0bXBbaV0pOwotKwlmcHV0cygiXG4iLCBzdGRvdXQpOwotKwlPUEVOU1NMX2ZyZWUodG1w KTsKLSsJcmV0dXJuOwotKwl9Ci0rCi0rdm9pZCBwcmltZXMoKQotKyAgICB7Ci0rICAgIGNoYXIg YnVmWzEwMjQwXTsKLSsgICAgY2hhciBsYnVmWzEwMjQwXTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3Jk LCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3Jk LCJQcmltZSIpKQotKwkgICAgewotKwkgICAgQklHTlVNICpwcDsKLSsKLSsJICAgIHBwPUJOX25l dygpOwotKwkgICAgZG9faGV4MmJuKCZwcCx2YWx1ZSk7Ci0rCSAgICBwcmludGYoInJlc3VsdD0g JWNcbiIsCi0rCQkgICBCTl9pc19wcmltZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1AnIDogJ0Yn KTsKLSsJICAgIH0JICAgIAotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZygpCi0rICAgIHsKLSsg ICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYs c2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJ Y29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1v ZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsK LSsJICAgIGludCBuPWF0b2kodmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5c biIsbm1vZCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQl1bnNpZ25lZCBjaGFyIHNl ZWRbMjBdOwotKwkJRFNBICpkc2E7Ci0rCQlpbnQgY291bnRlcjsKLSsJCXVuc2lnbmVkIGxvbmcg aDsKLSsJCWRzYSA9IEZJUFNfZHNhX25ldygpOwotKwotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfcGFy YW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwwLCZjb3VudGVyLCZoLE5VTEwpKQotKwkJCXsKLSsJ CQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCXBibigiUCIsZHNh LT5wKTsKLSsJCXBibigiUSIsZHNhLT5xKTsKLSsJCXBibigiRyIsZHNhLT5nKTsKLSsJCXB2KCJT ZWVkIixzZWVkLDIwKTsKLSsJCXByaW50ZigiYyA9ICVkXG4iLGNvdW50ZXIpOwotKwkJcHJpbnRm KCJIID0gJWx4XG4iLGgpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0r CWVsc2UKLSsJICAgIGZwdXRzKGJ1ZixzdGRvdXQpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBx Z3ZlcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAq cSA9IE5VTEwsICpnID0gTlVMTDsKLSsgICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOwotKyAgICB1 bnNpZ25lZCBsb25nIGgsIGgyOwotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBpbnQgbm1vZD0w OwotKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRbMTAyNF07Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5 d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0r CQljb250aW51ZTsKLSsJCX0KLSsJZnB1dHMoYnVmLCBzdGRvdXQpOwotKwlpZighc3RyY21wKGtl eXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJTZWVkIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgc2xlbiA9IGhleDJiaW4odmFs dWUsIHNlZWQpOwotKwkgICAgaWYgKHNsZW4gIT0gMjApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkg ICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiYyIpKQotKwkgICAgY291bnRlciA9YXRv aShidWYrNCk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJIIikpCi0rCSAgICB7Ci0rCSAg ICBoID0gYXRvaSh2YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkg ICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIwICwmY291bnRlcjIsJmgyLE5VTEwpKQotKwkJCXsKLSsJ CQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsgICAgICAgICAgICBp ZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwgQk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21wKGRzYS0+ ZywgZykKLSsJCXx8IChjb3VudGVyICE9IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCi0rCSAgICAJ cHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgIGVsc2UKLSsJICAgIAlwcmludGYoIlJlc3Vs dCA9IFBcbiIpOwotKwkgICAgQk5fZnJlZShwKTsKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCSAgICBC Tl9mcmVlKGcpOwotKwkgICAgcCA9IE5VTEw7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAgIGcgPSBO VUxMOwotKwkgICAgRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gTlVMTDsKLSsJICAg IH0KLSsJfQotKyAgICB9Ci0rCi0rLyogS2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGluZS4gTkI6 IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgRklQUzE0MC0yCi0rICogYWxnb3JpdGht IHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlvbmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkgY2hlY2tz IG9uIHRoZQotKyAqIG91dHB1dCBvZiB0aGUgS2V5UGFpciB0ZXN0LgotKyAqLwotKwotK3N0YXRp YyBpbnQgZHNzX3BhcmFtY2hlY2soaW50IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpxLCBCSUdO VU0gKmcsCi0rCQkJCQkJCUJOX0NUWCAqY3R4KQotKyAgICB7Ci0rICAgIEJJR05VTSAqcmVtID0g TlVMTDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHApICE9IG5tb2QpCi0rCXJldHVybiAwOwotKyAg ICBpZiAoQk5fbnVtX2JpdHMocSkgIT0gMTYwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lz X3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4g MDsKLSsgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxM KSAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmVtID0gQk5fbmV3KCk7Ci0rICAgIGlmICghQk5f bW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkKLSsgICAgCXx8IChCTl9jbXAo ZywgQk5fdmFsdWVfb25lKCkpIDw9IDApCi0rCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywgcSwgcCwg Y3R4KSB8fCAhQk5faXNfb25lKHJlbSkpCi0rCXsKLSsJQk5fZnJlZShyZW0pOwotKwlyZXR1cm4g MDsKLSsJfQotKyAgICAvKiBUb2RvOiBjaGVjayBnICovCi0rICAgIEJOX2ZyZWUocmVtKTsKLSsg ICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIGtleXZlcigpCi0rICAgIHsKLSsgICAgY2hh ciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKlgg PSBOVUxMLCAqWSA9IE5VTEw7Ci0rICAgIEJJR05VTSAqWTI7Ci0rICAgIEJOX0NUWCAqY3R4ID0g TlVMTDsKLSsgICAgaW50IG5tb2Q9MCwgcGFyYW1jaGVjayA9IDA7Ci0rCi0rICAgIGN0eCA9IEJO X0NUWF9uZXcoKTsKLSsgICAgWTIgPSBCTl9uZXcoKTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVm LHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3 b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJ CWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsK LSsJICAgIGlmIChwKQotKwkJQk5fZnJlZShwKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgaWYg KHEpCi0rCQlCTl9mcmVlKHEpOwotKwkgICAgcSA9IE5VTEw7Ci0rCSAgICBpZiAoZykKLSsJCUJO X2ZyZWUoZyk7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIHBhcmFtY2hlY2sgPSAwOwotKwkgICAg bm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAi KSkKLSsJICAgIHA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEi KSkKLSsJICAgIHE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkci KSkKLSsJICAgIGc9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlgi KSkKLSsJICAgIFg9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlki KSkKLSsJICAgIHsKLSsJICAgIFk9aGV4MmJuKHZhbHVlKTsKLSsJICAgIGlmICghcCB8fCAhcSB8 fCAhZyB8fCAhWCB8fCAhWSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3Jc biIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLHApOwotKwkgICAgcGJuKCJR IixxKTsKLSsJICAgIHBibigiRyIsZyk7Ci0rCSAgICBwYm4oIlgiLFgpOwotKwkgICAgcGJuKCJZ IixZKTsKLSsJICAgIGlmICghcGFyYW1jaGVjaykKLSsJCXsKLSsJCWlmIChkc3NfcGFyYW1jaGVj ayhubW9kLCBwLCBxLCBnLCBjdHgpKQotKwkJCXBhcmFtY2hlY2sgPSAxOwotKwkJZWxzZQotKwkJ CXBhcmFtY2hlY2sgPSAtMTsKLSsJCX0KLSsJICAgIGlmIChwYXJhbWNoZWNrICE9IDEpCi0rCSAg IAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgZWxzZQotKwkJewotKwkJaWYgKCFCTl9t b2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgpIHx8IEJOX2NtcChZMiwgWSkpCi0rCSAgICAJCXByaW50 ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAgICAgICAgZWxzZQotKwkgICAgCQlwcmludGYoIlJlc3Vs dCA9IFBcbiIpOwotKwkJfQotKwkgICAgQk5fZnJlZShYKTsKLSsJICAgIEJOX2ZyZWUoWSk7Ci0r CSAgICBYID0gTlVMTDsKLSsJICAgIFkgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rCWlmIChwKQot KwkgICAgQk5fZnJlZShwKTsKLSsJaWYgKHEpCi0rCSAgICBCTl9mcmVlKHEpOwotKwlpZiAoZykK LSsJICAgIEJOX2ZyZWUoZyk7Ci0rCWlmIChZMikKLSsJICAgIEJOX2ZyZWUoWTIpOwotKyAgICB9 Ci0rCi0rdm9pZCBrZXlwYWlyKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAg Y2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBu bW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxM KQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQot KwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0 cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiTiIpKQotKwkgICAgewotKwkgICAgRFNBICpkc2E7Ci0rCSAgICBp bnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2Qp OwotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJ ZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2Et PnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkg ICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQlpZiAo IURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CQkJZXhpdCgxKTsKLSsJCQl9Ci0rCi0rCQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOwotKwkJcGJu KCJZIixkc2EtPnB1Yl9rZXkpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9 Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgc2lnZ2VuKCkKLSsgICAgewotKyAgICBjaGFyIGJ1Zlsx MDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7 Ci0rICAgIGludCBubW9kPTA7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rCi0rICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0r CSAgICB7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRd XG5cbiIsbm1vZCk7Ci0rCSAgICBpZiAoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkg ICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJp bnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwot KwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0 YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ci KSkKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOwotKwkgICAgdW5zaWdu ZWQgY2hhciBzYnVmWzYwXTsKLSsJICAgIHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAgaW50IG47 Ci0rCSAgICBFVlBfUEtFWSBwazsKLSsJICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAgIERTQV9T SUcgKnNpZzsKLSsJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCSAgICBuPWhleDJi aW4odmFsdWUsbXNnKTsKLSsJICAgIHB2KCJNc2ciLG1zZyxuKTsKLSsKLSsJICAgIGlmICghRFNB X2dlbmVyYXRlX2tleShkc2EpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0 KDEpOwotKwkJfQotKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBrLnBrZXku ZHNhID0gZHNhOwotKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwotKwkgICAgRVZQX1Np Z25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9TaWduVXBkYXRl KCZtY3R4LCBtc2csIG4pOwotKwkgICAgRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1ZiwgJnNsZW4s ICZwayk7Ci0rCi0rCSAgICBzaWcgPSBEU0FfU0lHX25ldygpOwotKwkgICAgRklQU19kc2Ffc2ln X2RlY29kZShzaWcsIHNidWYsIHNsZW4pOwotKwotKwkgICAgcGJuKCJSIixzaWctPnIpOwotKwkg ICAgcGJuKCJTIixzaWctPnMpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICBEU0Ff U0lHX2ZyZWUoc2lnKTsKLSsJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCSAgICB9 Ci0rCX0KLSsJaWYgKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsgICAgfQotKwotK3Zv aWQgc2lndmVyKCkKLSsgICAgewotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBjaGFyIGJ1Zlsx MDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0 XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wLCBuPTA7Ci0r ICAgIERTQV9TSUcgc2csICpzaWcgPSAmc2c7Ci0rCi0rICAgIHNpZy0+ciA9IE5VTEw7Ci0rICAg IHNpZy0+cyA9IE5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGlu KSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0K LSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2ko dmFsdWUpOwotKwkgICAgaWYoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNh PUZJUFNfZHNhX25ldygpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIp KQotKwkgICAgZHNhLT5wPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJRIikpCi0rCSAgICBkc2EtPnE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIkciKSkKLSsJICAgIHsKLSsJICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOwotKwotKwkg ICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7 Ci0rCSAgICBwYm4oIlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBw dXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1z ZyIpKQotKwkgICAgewotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNn Iixtc2csbik7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAg ICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlIiKSkKLSsJICAgIHNpZy0+cj1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiUyIpKQotKwkgICAgewotKwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRVZQX1BL RVkgcGs7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIHNpZ2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBp bnQgc2xlbjsKLSsJICAgIGludCByOwotKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsJ ICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJ ICAgIHNpZy0+cz1oZXgyYm4odmFsdWUpOwotKwkKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5 KTsKLSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsKLSsJ ICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdfZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKLSsJICAgIEVWUF9W ZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9WZXJpZnlV cGRhdGUoJm1jdHgsIG1zZywgbik7Ci0rCSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBz aWdidWYsIHNsZW4sICZwayk7Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwkK LSsJICAgIHByaW50ZigiUmVzdWx0ID0gJWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7Ci0rCSAg ICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0r CWZwcmludGYoc3RkZXJyLCIlcyBbcHJpbWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dlbnxzaWd2 ZXJdXG4iLGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0 KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlm KCFzdHJjbXAoYXJndlsxXSwicHJpbWUiKSkKLSsJcHJpbWVzKCk7Ci0rICAgIGVsc2UgaWYoIXN0 cmNtcChhcmd2WzFdLCJwcWciKSkKLSsJcHFnKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCJwcWd2ZXIiKSkKLSsJcHFndmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFd LCJrZXlwYWlyIikpCi0rCWtleXBhaXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0s ImtleXZlciIpKQotKwlrZXl2ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNp Z2dlbiIpKQotKwlzaWdnZW4oKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ3Zl ciIpKQotKwlzaWd2ZXIoKTsKLSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCJEb24n dCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAg cmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JuZ3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcm5ndnMuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJMjAxMi0wMS0w NSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMjMwIEBACi0rLyoKLSsgKiBD cnVkZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3Rv ciBmaWxlcwotKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0LgotKyAqCi0r ICogTm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVj aWZpYyBmb3JtYXQKLSsgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBS YW5kb20gTnVtYmVyIEdlbmVyYXRvcgotKyAqIFZhbGlkYXRpb24gU3lzdGVtIChSTkdWUykiLCBN YXkgMjUsIDIwMDQuCi0rICoKLSsgKi8KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5o PgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJO RyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3g1MDl2My5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUu aD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt2b2lkIHZzdCgpCi0rICAgIHsKLSsg ICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqdiA9IE5V TEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciBy ZXRbMTZdOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAg ICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxvbmcgaSwga2V5bGVuOwotKwotKyAgICBr ZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVT IDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVm LCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5j bXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMzI7Ci0rCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZh bHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0 dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJ ICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0 dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQotKwkg ICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwotKwkJcmV0dXJu OwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBG SVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2 KTsKLSsJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOwotKwkgICAgaWYgKEZJUFNfcmFuZF9ieXRl cyhyZXQsMTYpIDw9IDApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcg UFJORyB2YWx1ZVxuIik7Ci0rCSAgICAgICAgcmV0dXJuOwotKwkgICAgICAgIH0KLSsKLSsJICAg IHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Ci0rCSAgICBrZXkgPSBO VUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJICAgIE9Q RU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsK LSt2b2lkIG1jdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsg ICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVM TDsKLSsgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsg ICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxv bmcgaSwga2V5bGVuOwotKyAgICBpbnQgajsKLSsKLSsgICAga2V5bGVuID0gMDsKLSsKLSsgICAg d2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMo YnVmLHN0ZG91dCk7Ci0rCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKLSsJ CWtleWxlbiA9IDE2OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEz KSkKLSsJCWtleWxlbiA9IDI0OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5 XSIsIDEzKSkKLSsJCWtleWxlbiA9IDMyOwotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2 YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21wKGtleXdvcmQsIktl eSIpKQotKwkgICAgewotKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAo aSAhPSBrZXlsZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0 aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJICAgIH0K LSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCi0rCSAgICB7Ci0rCSAgICBkdD1oZXgy YmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0 ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJICAgIH0K LSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKLSsJICAgIHsKLSsJICAgIHY9aGV4MmJp bl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIGlm ICgha2V5IHx8ICFkdCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3Ig RFRcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgRklQU19yYW5kX3NldF9rZXkoa2V5 LCBrZXlsZW4pOwotKwkgICAgRklQU19yYW5kX3NlZWQodiwxNik7Ci0rCSAgICBmb3IgKGkgPSAw OyBpIDwgMTAwMDA7IGkrKykKLSsJCXsKLSsJCSAgICBGSVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJ CSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJCQl7Ci0rCQkJZnByaW50 ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOwotKwkJICAgICAgICByZXR1 cm47Ci0rCQkgICAgICAgIH0KLSsJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KLSsJCSAgICBmb3Ig KGogPSAxNTsgaiA+PSAwOyBqLS0pCi0rCQkJewotKwkJCWR0W2pdKys7Ci0rCQkJaWYgKGR0W2pd KQotKwkJCQlicmVhazsKLSsJCQl9Ci0rCQl9Ci0rCi0rCSAgICBwdigiUiIscmV0LDE2KTsKLSsJ ICAgIE9QRU5TU0xfZnJlZShrZXkpOwotKwkgICAga2V5ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xf ZnJlZShkdCk7Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUodik7Ci0rCSAg ICB2ID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFyZ2Ms Y2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0rCWZwcmludGYo c3RkZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAg aWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQo MSk7Ci0rCX0KLSsgICAgRklQU19yYW5kX3Jlc2V0KCk7Ci0rICAgIGlmICghRklQU19yYW5kX3Rl c3RfbW9kZSgpKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBQUk5HIHRl c3QgbW9kZVxuIik7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAg IGlmKCFzdHJjbXAoYXJndlsxXSwibWN0IikpCi0rCW1jdCgpOwotKyAgICBlbHNlIGlmKCFzdHJj bXAoYXJndlsxXSwidnN0IikpCi0rCXZzdCgpOwotKyAgICBlbHNlCi0rCXsKLSsJZnByaW50Zihz dGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKLSsJZXhpdCgxKTsKLSsJ fQotKwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cnNhZ3Rlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCAr MSwzOTAgQEAKLSsvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9q ZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUs MjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgot KyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4g YnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlw ZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZu ZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0r ewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7 Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0raW50IHJzYV90 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxF ICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhw LAotKwkJQklHTlVNICplKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBS U0EgKnJzYSwKLSsJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSk7Ci0rCi0r aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwg Km91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwotKwlpZighRklQU19tb2RlX3NldCgx KSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0r CWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFy Z3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxz ZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwot KwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7 Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAocmV0 KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQot KwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uo b3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNBX1RFU1RfTUFY TElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKQotKwl7 Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAq dmFsdWU7Ci0rCVJTQSAqcnNhID0gTlVMTDsKLSsJQklHTlVNICpYcDEgPSBOVUxMLCAqWHAyID0g TlVMTCwgKlhwID0gTlVMTDsKLSsJQklHTlVNICpYcTEgPSBOVUxMLCAqWHEyID0gTlVMTCwgKlhx ID0gTlVMTDsKLSsJQklHTlVNICplID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVt ID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVO KTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwot KwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUg KGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVt Kys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7 Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNp Z24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Ig c3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYg KCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0 KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9 IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0r CQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1 ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwg aXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0 cmNtcChrZXl3b3JkLCAieHAxIikpCi0rCQkJewotKwkJCWlmIChYcDEgfHwgIWRvX2hleDJibigm WHAxLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJ4cDIiKSkKLSsJCQl7Ci0rCQkJaWYgKFhwMiB8fCAhZG9faGV4MmJu KCZYcDIsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIlhwIikpCi0rCQkJewotKwkJCWlmIChYcCB8fCAhZG9faGV4MmJu KCZYcCx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAieHExIikpCi0rCQkJewotKwkJCWlmIChYcTEgfHwgIWRvX2hleDJi bigmWHExLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJ4cTIiKSkKLSsJCQl7Ci0rCQkJaWYgKFhxMiB8fCAhZG9faGV4 MmJuKCZYcTIsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIlhxIikpCi0rCQkJewotKwkJCWlmIChYcSB8fCAhZG9faGV4 MmJuKCZYcSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAoZSB8fCAhZG9faGV4MmJu KCZlLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJwMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAicDIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgInAiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg InExIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMiIp KQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicSIpKQotKwkJ CWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJCWNvbnRp bnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQotKwkJCWNvbnRpbnVlOwot KwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0 KTsKLSsKLSsJCWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCi0rCQkJewotKwkJCXJzYSA9IEZJ UFNfcnNhX25ldygpOwotKwkJCWlmICghcnNhKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICgh cnNhX3ByaW50a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkKLSsJCQkJZ290byBlcnJv cjsKLSsJCQlCTl9mcmVlKFhwMSk7Ci0rCQkJWHAxID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhwMik7 Ci0rCQkJWHAyID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhwKTsKLSsJCQlYcCA9IE5VTEw7Ci0rCQkJ Qk5fZnJlZShlKTsKLSsJCQllID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQlpZiAocnNhICYmIFhxMSAm JiBYcTIgJiYgWHEpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50a2V5MihvdXQsIHJzYSwgWHEx LCBYcTIsIFhxKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKFhxMSk7Ci0rCQkJWHEx ID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhxMik7Ci0rCQkJWHEyID0gTlVMTDsKLSsJCQlCTl9mcmVl KFhxKTsKLSsJCQlYcSA9IE5VTEw7Ci0rCQkJRklQU19yc2FfZnJlZShyc2EpOwotKwkJCXJzYSA9 IE5VTEw7Ci0rCQkJfQotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJaWYg KG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0r CQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCi0rCWlmIChYcDEpCi0rCQlCTl9mcmVlKFhwMSk7 Ci0rCWlmIChYcDIpCi0rCQlCTl9mcmVlKFhwMik7Ci0rCWlmIChYcCkKLSsJCUJOX2ZyZWUoWHAp OwotKwlpZiAoWHExKQotKwkJQk5fZnJlZShYcTEpOwotKwlpZiAoWHExKQotKwkJQk5fZnJlZShY cTEpOwotKwlpZiAoWHEyKQotKwkJQk5fZnJlZShYcTIpOwotKwlpZiAoWHEpCi0rCQlCTl9mcmVl KFhxKTsKLSsJaWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2Ff ZnJlZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxu dW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRr ZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJ R05VTSAqWHAsCi0rCQlCSUdOVU0gKmUpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCUJJR05VTSAq cDEgPSBOVUxMLCAqcDIgPSBOVUxMOwotKwlwMSA9IEJOX25ldygpOwotKwlwMiA9IEJOX25ldygp OwotKwlpZiAoIXAxIHx8ICFwMikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghUlNBX1g5MzFf ZGVyaXZlX2V4KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhwMiwgWHAsCi0rCQkJCQkJ TlVMTCwgTlVMTCwgTlVMTCwgZSwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlkb19ibl9w cmludF9uYW1lKG91dCwgInAxIiwgcDEpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAyIiwg cDIpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnApOwotKwotKwlyZXQgPSAx OwotKwotKwllcnJvcjoKLSsJaWYgKHAxKQotKwkJQk5fZnJlZShwMSk7Ci0rCWlmIChwMikKLSsJ CUJOX2ZyZWUocDIpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rc3RhdGljIGludCByc2Ff cHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpY cTIsIEJJR05VTSAqWHEpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCUJJR05VTSAqcTEgPSBOVUxM LCAqcTIgPSBOVUxMOwotKwlxMSA9IEJOX25ldygpOwotKwlxMiA9IEJOX25ldygpOwotKwlpZiAo IXExIHx8ICFxMikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4 KHJzYSwgTlVMTCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxMLAotKwkJCQkJCVhxMSwg WHEyLCBYcSwgTlVMTCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlkb19ibl9wcmludF9u YW1lKG91dCwgInExIiwgcTEpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEyIiwgcTIpOwot Kwlkb19ibl9wcmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOwotKwlkb19ibl9wcmludF9uYW1l KG91dCwgIm4iLCByc2EtPm4pOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgImQiLCByc2EtPmQp OwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHExKQotKwkJQk5fZnJlZShxMSk7 Ci0rCWlmIChxMikKLSsJCUJOX2ZyZWUocTIpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh c3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMu ZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAu MDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDM3MCBAQAotKy8qIGZpcHNfcnNhc3Rlc3QuYyAq LwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9w ZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNv bSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBI dWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRp by5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50 IFNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2Es IGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4s IGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsK LSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDEsIFNhbHRs ZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9l cnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3Ry Y21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2koYXJndlsy XSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRkFU QUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFy Z2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAh c3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwotKwkJYXJn Yy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRp bjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8 IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3 Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0 IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAo IW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0 aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV9zdGVzdChv dXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RF U1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNl Ci0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJv cnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlp ZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4g cmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0r aW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwlj aGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVl OwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCXVu c2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0gLTE7Ci0rCWludCBrZXls ZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVt ID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVO KTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwot KwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUg KGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVt Kys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7 Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNp Z24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0ganVz dCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0 KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9 IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0r CQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1 ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwg aXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQkvKiBMb29r IGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLwotKwotKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwgIlttb2QiKSkKLSsJCQl7Ci0rCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7 Ci0rCQkJaWYgKCpwICE9ICddJykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkqcCA9IDA7 Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxlbiA8IDApCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hB QWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0 ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0r CQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNI QTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAo dmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0r CQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1 cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1z ZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJfQotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQkv KiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYwot KwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KLSsJCSAqLwotKwot KwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKLSsJCQl7Ci0rCQkJQklHTlVNICpibl9l OwotKwkJCWlmIChyc2EpCi0rCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBGSVBT X3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlibl9lID0g Qk5fbmV3KCk7Ci0rCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQot KwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwg a2V5bGVuLCBibl9lLCBOVUxMKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKGJuX2Up OwotKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7 Ci0rCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUp OwotKwkJCWZwdXRzKCJcbiIsIG91dCk7Ci0rCQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47Ci0r CQkJfQotKwotKwkJaWYgKE1zZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHNp ZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlTYWx0bGVuKSkKLSsJCQkJ Z290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJ CX0KLSsKLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1 ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKGxpbmVidWYpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJlZShyc2EpOwotKwot KwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJG QVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3Rv IGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBS U0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25n IE1zZ2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNo YXIgKnNpZ2J1ZiA9IE5VTEw7Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8qIEVWUF9QS0VZIHN0cnVj dHVyZSAqLwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXBrLnR5cGUgPSBF VlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhOwotKwotKwlzaWdsZW4gPSBSU0Ffc2l6 ZShyc2EpOwotKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOwotKwlpZiAoIXNpZ2J1 ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYg KFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJ CQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVs c2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRn c3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBN c2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwg c2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJZnB1dHMoIlMgPSAiLCBvdXQpOwot KwotKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMlgi LCBzaWdidWZbaV0pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwot KwllcnJvcjoKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoz MC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcnNhdnRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAs MCArMSwzNzcgQEAKLSsvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBw cm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsg KiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUu aD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rCi0rI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sK LSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwot K30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCByc2FfdGVz dChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Ci0rc3RhdGljIGludCByc2FfcHJp bnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCi0rCQljb25zdCBFVlBf TUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAotKwkJdW5zaWdu ZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0r Ci0rCWludCByZXQgPSAxOwotKwlpbnQgU2FsdGxlbiA9IC0xOwotKwotKwlpZighRklQU19tb2Rl X3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCi0r CQl7Ci0rCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKLSsJCWlmIChTYWx0bGVuIDwgMCkKLSsJ CQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7 Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYXJnYyAtPSAyOwotKwkJYXJndiArPSAyOwotKwkJ fQotKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCi0r CQl7Ci0rCQlTYWx0bGVuID0gLTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2Kys7Ci0rCQl9Ci0rCi0r CWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFy Z3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxz ZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwot KwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7 Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7 Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwot KwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0g c3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0r CQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNB X1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUg KmluLCBpbnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAq cTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxM OwotKwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9 IE5VTEwsICpTID0gTlVMTDsKLSsJbG9uZyBNc2dsZW4sIFNsZW47Ci0rCWludCByZXQgPSAwOwot KwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1Rf TUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5F TEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJ ewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQg PSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9v ayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJ ZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkg Ki8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xp bmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0K LSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJ KnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkp Ci0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVl ICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9 PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwot KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4o Jm4sdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmUsdmFsdWUp KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkK LSsJCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNI QTIyNCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAo dmFsdWUsICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKLSsJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7Ci0r CQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJCQlkZ3N0ID0gRVZQX3No YTUxMigpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwKLSsJCQkJCSJG QVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJCQkJCQkJCXZhbHVlKTsK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcw JzsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwotKwkJCWlmICghTXNnKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlMiKSkKLSsJCQl7Ci0rCQkJaWYgKFMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ aWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCVMgPSBo ZXgyYmluX20odmFsdWUsICZTbGVuKTsKLSsJCQlpZiAoIVMpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0IikpCi0rCQkJ Y29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9s aW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBkZ3N0KQotKwkJ CXsKLSsJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCi0rCQkJCQlNc2csIE1z Z2xlbiwgUywgU2xlbiwgU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9m cmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlPUEVOU1NMX2ZyZWUoUyk7Ci0rCQkJUyA9 IE5VTEw7Ci0rCQkJfQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoK LSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxp bmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChuKQotKwkJQk5fZnJlZShu KTsKLSsJaWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJz ZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNz aW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3Rh dGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdOVU0gKmUs Ci0rCQljb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNn bGVuLAotKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbikKLSsJewot KwlpbnQgcmV0ID0gMCwgcjsKLSsJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBzdHJ1Y3R1cmVz ICovCi0rCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7Ci0rCUVWUF9QS0VZIHBrOwotKwlFVlBfTURf Q1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKLSsJcnNhX3B1YmtleSA9IEZJ UFNfcnNhX25ldygpOwotKwlpZiAoIXJzYV9wdWJrZXkpCi0rCQlnb3RvIGVycm9yOwotKwlyc2Ff cHVia2V5LT5uID0gQk5fZHVwKG4pOwotKwlyc2FfcHVia2V5LT5lID0gQk5fZHVwKGUpOwotKwlp ZiAoIXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCi0rCQlnb3RvIGVycm9yOwotKwlw ay50eXBlID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9IHJzYV9wdWJrZXk7Ci0rCi0r CUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJ CU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BT UyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0r CQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7 Ci0rCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCi0rCQlnb3RvIGVy cm9yOwotKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQotKwkJZ290 byBlcnJvcjsKLSsKLSsJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVuLCAmcGspOwot KwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChyIDwgMCkKLSsJCWdv dG8gZXJyb3I7Ci0rCUVSUl9jbGVhcl9lcnJvcigpOwotKwotKwlpZiAociA9PSAwKQotKwkJZnB1 dHMoIlJlc3VsdCA9IEZcbiIsIG91dCk7Ci0rCWVsc2UKLSsJCWZwdXRzKCJSZXN1bHQgPSBQXG4i LCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHJzYV9wdWJrZXkpCi0r CQlGSVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOwotKwlpZiAoYnVmKQotKwkJT1BFTlNTTF9mcmVl KGJ1Zik7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3No YXRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwz ODggQEAKLSsvKiBmaXBzX3NoYXRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3Qg MjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi Ci0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K LSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZ b3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsg KgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYgT1BF TlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAg IHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9 Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGRn c3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29u c3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNn bGVuKTsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91 dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKLSsKLStpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVM TDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewot KwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGFyZ2Mg PT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIi KTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQg PSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVu ZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsK LSsJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3By aW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShp bik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0r CXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRTCTEwMjQw MAotKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklUUyA+PiAz KSAqIDIpICsgMTAwKQotKwotK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJ ewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVm LCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJdW5zaWduZWQgY2hhciAqTXNn ID0gTlVMTCwgKlNlZWQgPSBOVUxMOwotKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAtMSwgU2Vl ZExlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1 ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAh b2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYs IFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShs aW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVh ZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQp KQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0 cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChm b3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlmcHV0 cyhvbGluZWJ1Ziwgb3V0KTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7 Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVl ID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0r Ci0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVl ICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtleXdv cmQsIltMIikgJiYgKnA9PSddJykKLSsJCQl7Ci0rCQkJc3dpdGNoIChhdG9pKHZhbHVlKSkKLSsJ CQkJewotKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOwotKwkJCQljYXNlIDI4 OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOwotKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hhMjU2KCk7 IGJyZWFrOwotKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOwotKwkJCQljYXNl IDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOwotKwkJCQlkZWZhdWx0OiBnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTGVuIikp Ci0rCQkJewotKwkJCWlmIChMZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ TGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKExlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLwotKwkJCWlmIChM ZW4gJiAweDcpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKExlbiA+IFNIQV9URVNU X01BWF9CSVRTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZ0xlbiA9IExlbiA+PiAz OwotKwkJCX0KLSsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsK LSsJCQlsb25nIHRtcGxlbjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12 YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlN c2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNlZWQi KSkKLSsJCQl7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0g JzAnOwotKwkJCWlmIChTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVNlZWQgPSBo ZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKLSsJCQlpZiAoIVNlZWQpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQiKSkKLSsJ CQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMo b2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0gMCkpCi0r CQkJewotKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCi0rCQkJCWdv dG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlN c2dMZW4gPSAtMTsKLSsJCQlMZW4gPSAtMTsKLSsJCQl9Ci0rCQllbHNlIGlmIChtZCAmJiBTZWVk ICYmIChTZWVkTGVuID4gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfbW9udGUobWQsIG91dCwg U2VlZCwgU2VlZExlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKFNlZWQp OwotKwkJCVNlZWQgPSBOVUxMOwotKwkJCVNlZWRMZW4gPSAtMTsKLSsJCQl9Ci0rCQotKwotKwkJ fQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQot KwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2Zy ZWUobGluZWJ1Zik7Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYgKFNl ZWQpCi0rCQlPUEVOU1NMX2ZyZWUoU2VlZCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNl X2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3Np bmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0 aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKLSsJCXVuc2ln bmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKLSsJewotKwlpbnQgaSwgbWRsZW47Ci0rCXVuc2ln bmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKLSsJaWYgKCFFVlBfRGlnZXN0KE1zZywgTXNn bGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKLSsJCXsKLSsJCWZw dXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCWZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsr KQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOwotKwlmcHV0cygiXG4iLCBvdXQpOwot KwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01E ICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pCi0r CXsKLSsJdW5zaWduZWQgaW50IGksIGosIGs7Ci0rCWludCByZXQgPSAwOwotKwlFVlBfTURfQ1RY IGN0eDsKLSsJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKLSsJdW5zaWduZWQgaW50 IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsK LSsKLSsJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCi0rCQltbGVuID0gU2VlZExlbjsK LSsJZWxzZQotKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKLSsKLSsJbTEgPSBPUEVOU1NMX21h bGxvYyhtbGVuKTsKLSsJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTMgPSBPUEVOU1NM X21hbGxvYyhtbGVuKTsKLSsKLSsJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQotKwkJZ290byBtY19l cnJvcjsKLSsKLSsJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKLSsJbWVtY3B5KG0x LCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5 KG0zLCBTZWVkLCBTZWVkTGVuKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJZm9yIChq ID0gMDsgaiA8IDEwMDsgaisrKQotKwkJewotKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykK LSsJCQl7Ci0rCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotKwkJCUVWUF9E aWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgs IG0yLCBtMmxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4pOwotKwkJ CXAgPSBtMTsKLSsJCQltMSA9IG0yOwotKwkJCW0xbGVuID0gbTJsZW47Ci0rCQkJbTIgPSBtMzsK LSsJCQltMmxlbiA9IG0zbGVuOwotKwkJCW0zID0gcDsKLSsJCQlFVlBfRGlnZXN0RmluYWxfZXgo JmN0eCwgbTMsICZtM2xlbik7Ci0rCQkJfQotKwkJZnByaW50ZihvdXQsICJDT1VOVCA9ICVkXG4i LCBqKTsKLSsJCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCQlmb3IgKGsgPSAwOyBrIDwgbTNsZW47 IGsrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7Ci0rCQlmcHV0cygiXG5cbiIs IG91dCk7Ci0rCQltZW1jcHkobTEsIG0zLCBtM2xlbik7Ci0rCQltZW1jcHkobTIsIG0zLCBtM2xl bik7Ci0rCQltMWxlbiA9IG0ybGVuID0gbTNsZW47Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0r CW1jX2Vycm9yOgotKwlpZiAobTEpCi0rCQlPUEVOU1NMX2ZyZWUobTEpOwotKwlpZiAobTIpCi0r CQlPUEVOU1NMX2ZyZWUobTIpOwotKwlpZiAobTMpCi0rCQlPUEVOU1NMX2ZyZWUobTMpOwotKwot KwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwu aC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAotLS0tIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBzCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3V0bC5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAt MCwwICsxLDM0MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotK3ZvaWQgZG9fcHJp bnRfZXJyb3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7Ci0rCWludCBs aW5lLCBmbGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwotKwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vy cm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIKLSsJCQkJ IjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwgRVJSX0dFVF9MSUIobCksIEVSUl9HRVRf RlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJf VFhUX1NUUklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgaGV4MmJpbihjb25z dCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuMSwgbjI7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAobjE9MCxuMj0wIDsgaW5bbjFd ICYmIGluW24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZpcnN0IGJ5dGUgKi8KLSsJaWYgKChpbltu MV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJzAn OwotKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQotKwkgICAg Y2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYg KGluW24xXSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwotKwllbHNl Ci0rCSAgICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0pCi0rCSAgICB7Ci0rCSAgICBvdXRbbjIr K109Y2g7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJb3V0W24yXSA9IGNoIDw8IDQ7Ci0rCS8q IHNlY29uZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScp KQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnQScp ICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKLSsJ ZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAgIGNoID0g aW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlvdXRbbjIr K10gfD0gY2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0rCi0rdW5zaWduZWQgY2hh ciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQotKwl7Ci0rCXVuc2lnbmVk IGNoYXIgKnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEpLzIpOwotKwkq cGxlbiA9IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4gcDsKLSsJfQotKwotK2ludCBkb19oZXgy Ym4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7 Ci0rCWxvbmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlwID0gaGV4MmJpbl9tKGluLCAmcGxlbik7 Ci0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAoISpwcikKLSsJCSpwciA9IEJOX25ldygp OwotKwlpZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlpZiAoQk5fYmluMmJuKHAsIHBsZW4sICpw cikpCi0rCQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHApOwotKwlyZXR1cm4gcjsKLSsJfQotKwot K2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwg aTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwlp ZiAobGVuID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAiLCBvdXQpOwotKwkJcmV0dXJuIDE7Ci0r CQl9Ci0rCi0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1 cm4gMDsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVu OyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOwotKwlPUEVOU1NMX2ZyZWUo dG1wKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnRfbmFtZShGSUxFICpv dXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IHI7Ci0rCWZwcmlu dGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRvX2JuX3ByaW50KG91dCwgYm4pOwotKwlp ZiAoIXIpCi0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJuIDE7Ci0r CX0KLSsKLStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hhciAqbGlu ZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwg KnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwot KwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8K LSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScgZXhpdCAqLwot KwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQot KwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVt b3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0r CXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAt LSA9IDA7Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkqcHZhbCA9IHZhbHVlOwotKwlyZXR1cm4g MTsKLSsJfQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQotKyAgICB7Ci0rICAg IEJJR05VTSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQotKwlyZXR1 cm4gTlVMTDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsKLStpbnQgYmluMmhleChjb25z dCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQg bjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7 IG4xIDwgbGVuIDsgKytuMSkKLSsJewotKwljaD1pbltuMV0gPj4gNDsKLSsJaWYgKGNoIDw9IDB4 MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBvdXRbbjIrK109Y2gt MTArJ2EnOwotKwljaD1pbltuMV0gJiAweDBmOwotKwlpZihjaCA8PSAweDA5KQotKwkgICAgb3V0 W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKLSsJfQot KyAgICBvdXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwotK3ZvaWQgcHYo Y29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQotKyAgICB7 Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAgYmluMmhleCh2YWwsbGVuLG9idWYpOwot KyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOwotKyAgICB9Ci0rCi0rLyogVG8gYXZv aWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2UganVzdCBj b252ZXJ0Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0uIEtleXdv cmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAia2V5d29yZCA9IHZhbHVlXG4iIG5vIG1h dHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcwotKyAqIGp1c3Qg aGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgotKyAqLwotKwotK2ludCB0 aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5 d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtl eXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwkvKiBMb29r IGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBu byAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCi0rCWlmICghcCkKLSsJCXsK LSsJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKLSsJCXdoaWxlICgqcCA9PSAn XG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwkJc3Ry Y3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7Ci0rCQly ZXR1cm4gMTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9 IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRp bmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq dmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgq cCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7Ci0r Ci0rCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIp OwotKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsK LSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51bWJlciBv ZiBfYml0c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwgaW50IGxlbiwg dW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBtZW1zZXQo b3V0LDAsbGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0rCWlmKGluW25dID09 ICcxJykKLSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7Ci0rICAgIHJldHVybiBsZW47 Ci0rICAgIH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxl bixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwg bGVuIDsgKytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcw JzsKLSsgICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2b2lkIFByaW50VmFsdWUoY2hhciAqdGFn LCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rewotKyNpZiBWRVJCT1NFCi0rICBjaGFy IG9idWZbMjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBv YnVmKTsKLSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNlbmRp ZgotK30KLSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFs LCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCi0rICAgIHsKLSsgICAgY2hhciBvYnVm WzIwNDhdOwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAgaWYoYml0bW9kZSkKLSsJb2xlbj1iaW4y YmludCh2YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0rCW9sZW49YmluMmhleCh2YWwsbGVuLG9i dWYpOwotKwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVm KTsKLSsjaWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBv YnVmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2ZpcHNfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwc19lcnIuYwotLS0tIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzX2Vyci5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwc19lcnIuYwkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw3IEBACi0rI2luY2x1 ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBp bmNsdWRlICJmaXBzX2Vyci5oIgotKyNlbHNlCi0rc3RhdGljIHZvaWQgKmR1bW15PSZkdW1teTsK LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzX2Vyci5oLmZpcHMg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHNfZXJyLmgKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZmlwc19lcnIuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHNfZXJyLmgJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMTM3IEBACi0rLyogY3J5cHRvL2ZpcHNfZXJyLmgg Ki8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlv dW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAq Ci0rICovCi0rCi0rLyogTk9URTogdGhpcyBmaWxlIHdhcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUg bWtlcnIucGwgc2NyaXB0OiBhbnkgY2hhbmdlcwotKyAqIG1hZGUgdG8gaXQgd2lsbCBiZSBvdmVy d3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgbmV4dCB1cGRhdGVzIHRoaXMgZmlsZSwKLSsgKiBvbmx5 IHJlYXNvbiBzdHJpbmdzIHdpbGwgYmUgcHJlc2VydmVkLgotKyAqLwotKwotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotKyNpZm5kZWYgT1BFTlNTTF9OT19F UlIKLSsKLSsjZGVmaW5lIEVSUl9GVU5DKGZ1bmMpIEVSUl9QQUNLKEVSUl9MSUJfRklQUyxmdW5j LDApCi0rI2RlZmluZSBFUlJfUkVBU09OKHJlYXNvbikgRVJSX1BBQ0soRVJSX0xJQl9GSVBTLDAs cmVhc29uKQotKwotK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19zdHJfZnVuY3RzW109Ci0r CXsKLSt7RVJSX0ZVTkMoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5f R0VOUEFSQU1TIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiksCSJE U0FfQlVJTFRJTl9QQVJBTUdFTiJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1NJR04pLAki RFNBX2RvX3NpZ24ifSwKLSt7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19WRVJJRlkpLAkiRFNBX2Rv X3ZlcmlmeSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgpLAkiRVZQX0Np cGhlckluaXRfZXgifSwKLSt7RVJSX0ZVTkMoRklQU19GX0VWUF9ESUdFU1RJTklUX0VYKSwJIkVW UF9EaWdlc3RJbml0X2V4In0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSksCSJG SVBTX0NIRUNLX0RTQSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklO R0VSUFJJTlQpLAkiRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQifSwKLSt7RVJSX0ZVTkMo RklQU19GX0ZJUFNfQ0hFQ0tfUlNBKSwJIkZJUFNfQ0hFQ0tfUlNBIn0sCi0re0VSUl9GVU5DKEZJ UFNfRl9GSVBTX0RTQV9DSEVDSyksCSJGSVBTX0RTQV9DSEVDSyJ9LAotK3tFUlJfRlVOQyhGSVBT X0ZfRklQU19NT0RFX1NFVCksCSJGSVBTX21vZGVfc2V0In0sCi0re0VSUl9GVU5DKEZJUFNfRl9G SVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QpLAkiZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0In0sCi0r e0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyksCSJGSVBTX3NlbGZ0ZXN0X2FlcyJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMpLAkiRklQU19zZWxmdGVzdF9k ZXMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBKSwJIkZJUFNfc2VsZnRl c3RfZHNhIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMpLAkiRklQU19z ZWxmdGVzdF9obWFjIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyksCSJG SVBTX3NlbGZ0ZXN0X3JuZyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEEx KSwJIkZJUFNfc2VsZnRlc3Rfc2hhMSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfSEFTSF9GSU5BTCks CSJIQVNIX0ZJTkFMIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4pLAki UlNBX0JVSUxUSU5fS0VZR0VOIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVf REVDUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfREVDUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBTX0Zf UlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQifSwKLSt7 RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQpLAkiUlNBX0VBWV9QVUJMSUNf REVDUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCksCSJS U0FfRUFZX1BVQkxJQ19FTkNSWVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfWDkzMV9HRU5F UkFURV9LRVlfRVgpLAkiUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4In0sCi0re0VSUl9GVU5DKEZJ UFNfRl9TU0xFQVlfUkFORF9CWVRFUyksCSJTU0xFQVlfUkFORF9CWVRFUyJ9LAotK3swLE5VTEx9 Ci0rCX07Ci0rCi0rc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9yZWFzb25zW109Ci0r CXsKLSt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFKSAgICAgICwiY2Fubm90IHJl YWQgZXhlIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QpLCJj YW5ub3QgcmVhZCBleGUgZGlnZXN0In0sCi0re0VSUl9SRUFTT04oRklQU19SX0NPTlRSQURJQ1RJ TkdfRVZJREVOQ0UpLCJjb250cmFkaWN0aW5nIGV2aWRlbmNlIn0sCi0re0VSUl9SRUFTT04oRklQ U19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gpLCJleGUgZGlnZXN0IGRvZXMgbm90IG1hdGNo In0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKSwiZmlu Z2VycHJpbnQgZG9lcyBub3QgbWF0Y2gifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJ TlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCksImZpbmdlcnByaW50IGRvZXMgbm90 IG1hdGNoIG5vbnBpYyByZWxvY2F0ZWQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJ TlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyksImZpbmdlcnByaW50IGRvZXMgbm90 IG1hdGNoIHNlZ21lbnQgYWxpYXNpbmcifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfRklQU19NT0RF X0FMUkVBRFlfU0VUKSwiZmlwcyBtb2RlIGFscmVhZHkgc2V0In0sCi0re0VSUl9SRUFTT04oRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKSAsImZpcHMgc2VsZnRlc3QgZmFpbGVkIn0sCi0re0VS Ul9SRUFTT04oRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCkgICAsImludmFsaWQga2V5IGxlbmd0 aCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9LRVlfVE9PX1NIT1JUKSAgICAgICAgLCJrZXkgdG9v IHNob3J0In0sCi0re0VSUl9SRUFTT04oRklQU19SX05PTl9GSVBTX01FVEhPRCkgICAgICAsIm5v biBmaXBzIG1ldGhvZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxF RCkgLCJwYWlyd2lzZSB0ZXN0IGZhaWxlZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9SU0FfREVD UllQVF9FUlJPUikgICAgLCJyc2EgZGVjcnlwdCBlcnJvciJ9LAotK3tFUlJfUkVBU09OKEZJUFNf Ul9SU0FfRU5DUllQVF9FUlJPUikgICAgLCJyc2EgZW5jcnlwdCBlcnJvciJ9LAotK3tFUlJfUkVB U09OKEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpICAgICAgLCJzZWxmdGVzdCBmYWlsZWQifSwKLSt7 RVJSX1JFQVNPTihGSVBTX1JfVEVTVF9GQUlMVVJFKSAgICAgICAgICwidGVzdCBmYWlsdXJlIn0s Ci0re0VSUl9SRUFTT04oRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKSAsInVuc3VwcG9ydGVk IHBsYXRmb3JtIn0sCi0rezAsTlVMTH0KLSsJfTsKLSsKLSsjZW5kaWYKLSsKLSt2b2lkIEVSUl9s b2FkX0ZJUFNfc3RyaW5ncyh2b2lkKQotKwl7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VSUgotKwot KwlpZiAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKEZJUFNfc3RyX2Z1bmN0c1swXS5lcnJvcikgPT0g TlVMTCkKLSsJCXsKLSsJCUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBTX3N0cl9mdW5jdHMpOwotKwkJ RVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX3JlYXNvbnMpOwotKwkJfQotKyNlbmRpZgotKwl9 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0t IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0wLDAgKzEsMTAzIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0r I2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYyBzdHJ1 Y3QKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIHVuc2lnbmVkIGNo YXIgcGxhaW50ZXh0WzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzE2XTsKLSsg ICAgfSB0ZXN0c1tdPQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgw NSwweDA2LDB4MDcsCi0rCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBG IH0sCi0rCXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LAotKwkgIDB4 ODgsMHg5OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAotKwl7IDB4NjksMHhDNCww eEUwLDB4RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKLSsJICAweEQ4LDB4Q0QsMHhCNywweDgwLDB4 NzAsMHhCNCwweEM1LDB4NUEgfSwKLSsJfSwKLSsJfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9h ZXMoKQotKyAgICB7Ci0rICAgIHRlc3RzWzBdLmtleVswXSsrOwotKyAgICB9Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfYWVzKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAgaW50IHJldCA9IDA7 Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4 KTsKLSsKLSsgICAgZm9yKG49MCA7IG4gPCAxIDsgKytuKQotKwl7Ci0rCWlmIChmaXBzX2NpcGhl cl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAotKwkJCQl0ZXN0c1tuXS5rZXksIE5VTEws Ci0rCQkJCXRlc3RzW25dLnBsYWludGV4dCwKLSsJCQkJdGVzdHNbbl0uY2lwaGVydGV4dCwKLSsJ CQkJMTYpIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAgICBlcnI6 Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkK LSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v Zmlwcy9maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9maXBzL2ZpcHMuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAg LTAsMCArMSw0MTkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsKLSsjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5o IgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rCi0rI2lmbmRlZiBQQVRIX01BWAotKyNkZWZpbmUgUEFUSF9NQVggMTAyNAotKyNlbmRpZgot KwotK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsOwotK3N0YXRpYyBpbnQgZmlwc19tb2Rl OwotK3N0YXRpYyBjb25zdCB2b2lkICpmaXBzX3JhbmRfY2hlY2s7Ci0rCi0rc3RhdGljIHZvaWQg Zmlwc19zZXRfbW9kZShpbnQgb25vZmYpCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBz X2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewot KwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19tb2RlID0gb25v ZmY7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKLSsJCX0KLSsJfQot KwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X3JhbmRfY2hlY2soY29uc3Qgdm9pZCAqcmFuZF9jaGVj aykKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwot KwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQp IGZpcHNfd19sb2NrKCk7Ci0rCQlmaXBzX3JhbmRfY2hlY2sgPSByYW5kX2NoZWNrOwotKwkJaWYg KCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgRklQ U19tb2RlKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhyZWFkID0g Zmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJ CXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJCXJldCA9IGZpcHNf bW9kZTsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJfQotKwly ZXR1cm4gcmV0OwotKwl9Ci0rCi0rY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpCi0r CXsKLSsJY29uc3Qgdm9pZCAqcmV0ID0gMDsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lz X293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOwotKwkJcmV0ID0gZmlwc19yYW5kX2No ZWNrOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCQl9Ci0rCXJl dHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKLSsgICAg ewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwl7Ci0r CWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWls OwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJfQotKyAgICByZXR1 cm4gcmV0OwotKyAgICB9Ci0rCi0rLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRp bmUuIFRoaXMgd2lsbCBiZSBjYWxsZWQKLSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBv cGVyYXRpb24uIEl0IGhhcyB0aGUgbWluaW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2 b2lkIHRvbyBiaWcgYSBwZXJmb3JtYW5jZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBTX3NlbGZ0 ZXN0X2NoZWNrKHZvaWQpCi0rICAgIHsKLSsgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKLSsJ ewotKwlPcGVuU1NMRGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBG QUlMVVJFIik7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2 b2lkKQotKyAgICB7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgIH0KLSsKLStp bnQgRklQU19zZWxmdGVzdCgpCi0rICAgIHsKLSsKLSsgICAgcmV0dXJuIEZJUFNfc2VsZnRlc3Rf c2hhMSgpCi0rCSYmIEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rCSYmIEZJUFNfc2VsZnRlc3RfYWVz KCkKLSsJJiYgRklQU19zZWxmdGVzdF9kZXMoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X3JzYSgpCi0r CSYmIEZJUFNfc2VsZnRlc3RfZHNhKCk7Ci0rICAgIH0KLSsKLStpbnQgRklQU19tb2RlX3NldChp bnQgb25vZmYpCi0rICAgIHsKLSsgICAgaW50IGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsg ICAgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBpbnQgcmV0ID0gMDsKLSsK LSsgICAgZmlwc193X2xvY2soKTsKLSsgICAgZmlwc19zZXRfc3RhcnRlZCgpOwotKyAgICBmaXBz X3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmKG9ub2ZmKQotKwl7Ci0rCXVuc2lnbmVk IGNoYXIgYnVmWzQ4XTsKLSsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsJLyogRG9u J3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYwot KwkgICBzZWVkaW5nICovCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkgICAgewotKwkgICAgRklQU2Vy cihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKLSsJ ICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBl bmQ7Ci0rCSAgICB9Ci0rCi0rI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCi0rCWlmICgoT1BFTlNT TF9pYTMyY2FwICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9SVEVEX1BMQVRG T1JNKTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkg ICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0rCS8qIFBlcmZvcm0gUk5HIEtBVCBi ZWZvcmUgc2VlZGluZyAqLwotKwlpZiAoIUZJUFNfc2VsZnRlc3Rfcm5nKCkpCi0rCSAgICB7Ci0r CSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8g ZW5kOwotKwkgICAgfQotKwotKwkvKiBhdXRvbWFnaWNhbGx5IHNlZWQgUFJORyBpZiBub3QgYWxy ZWFkeSBzZWVkZWQgKi8KLSsJaWYoIUZJUFNfcmFuZF9zdGF0dXMoKSkKLSsJICAgIHsKLSsJICAg IGlmKFJBTkRfYnl0ZXMoYnVmLHNpemVvZiBidWYpIDw9IDApCi0rCQl7Ci0rCQlmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAxOwotKwkJcmV0ID0gMDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwkgICAgRklQ U19yYW5kX3NldF9rZXkoYnVmLDMyKTsKLSsJICAgIEZJUFNfcmFuZF9zZWVkKGJ1ZiszMiwxNik7 Ci0rCSAgICB9Ci0rCi0rCS8qIG5vdyBzd2l0Y2ggaW50byBGSVBTIG1vZGUgKi8KLSsJZmlwc19z ZXRfcmFuZF9jaGVjayhGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlSQU5EX3NldF9yYW5kX21ldGhv ZChGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCi0rCSAgICBmaXBz X3NldF9tb2RlKDEpOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlyZXQgPSAx OwotKwlnb3RvIGVuZDsKLSsJfQotKyAgICBmaXBzX3NldF9tb2RlKDApOwotKyAgICBmaXBzX3Nl bGZ0ZXN0X2ZhaWwgPSAwOwotKyAgICByZXQgPSAxOwotK2VuZDoKLSsgICAgZmlwc19jbGVhcl9v d25pbmdfdGhyZWFkKCk7Ci0rICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgcmV0dXJuIHJldDsK LSsgICAgfQotKwotK3ZvaWQgZmlwc193X2xvY2sodm9pZCkJCXsgQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKQl7IENSWVBUT193X3Vu bG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX2xvY2sodm9pZCkJCXsgQ1JZ UFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX3VubG9jayh2b2lk KQl7IENSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotKwotK3N0YXRpYyBpbnQg Zmlwc19zdGFydGVkID0gMDsKLStzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXBzX3RocmVhZCA9IDA7 Ci0rCi0rdm9pZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpCi0rCXsKLSsJZmlwc19zdGFydGVkID0g MTsKLSsJfQotKwotK2ludCBmaXBzX2lzX3N0YXJ0ZWQodm9pZCkKLSsJewotKwlyZXR1cm4gZmlw c19zdGFydGVkOwotKwl9Ci0rCi0raW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7 Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlD UllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVhZCAhPSAw ICYmIGZpcHNfdGhyZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQlyZXQgPSAxOwotKwkJ Q1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsK LSsJfQotKwotK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJl dCA9IDA7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkID09IDApCi0rCQkJewot KwkJCWZpcHNfdGhyZWFkID0gQ1JZUFRPX3RocmVhZF9pZCgpOwotKwkJCXJldCA9IDE7Ci0rCQkJ fQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJu IHJldDsKLSsJfQotKwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKLSsJewot KwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJQ1JZ UFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJlYWQgPT0gQ1JZ UFRPX3RocmVhZF9pZCgpKQotKwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IDA7Ci0rCQkJcmV0ID0g MTsKLSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJfQot KwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJv dXRpbmUuIFNpZ25zIGFuZCB2ZXJpZmllcyB0aGUgZGF0YQotKyAqIHN1cHBsaWVkIGluIHRicyB1 c2luZyBtZXNhZ2UgZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKLSsgKiBmbGFn cyBtZF9mbGFncy4gSWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCi0r ICogYWRkaXRpb25hbGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBh bnN3ZXIgdGVzdAotKyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlm aWNhdGlvbiBwdXJwb3NlcyBpbiBjYXNlCi0rICogb2YgZmFpbHVyZS4KLSsgKi8KLSsKLStpbnQg Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQs IHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVuc2lnbmVk IGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cikKLSsJewkKLSsJaW50IHJl dCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7Ci0rCXVu c2lnbmVkIGludCBzaWdsZW47Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJRVZQX01EX0NUWF9pbml0 KCZtY3R4KTsKLSsKLSsJaWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLSsJCSYmIChS U0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpCi0rCQl7Ci0rCQlzaWcg PSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOwotKwkJaWYgKCFzaWcp Ci0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJf Ul9NQUxMT0NfRkFJTFVSRSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwotKwlpZiAo dGJzbGVuID09IC0xKQotKwkJdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKLSsKLSsJaWYg KG1kX2ZsYWdzKQotKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKLSsK LSsJaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVy cm9yOwotKwlpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3Rv IGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkp Ci0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwg bWVtY21wKGthdCwgc2lnLCBrYXRsZW4pKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghRVZQ X1ZlcmlmeUluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlp ZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCXJldCA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOwotKwot KwllcnJvcjoKLSsJaWYgKHNpZyAhPSBzaWd0bXApCi0rCQlPUEVOU1NMX2ZyZWUoc2lnKTsKLSsJ RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJaWYgKHJldCAhPSAxKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUp OwotKwkJaWYgKGZhaWxfc3RyKQotKwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBm YWlsX3N0cik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBH ZW5lcmFsaXplZCBzeW1tZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2 ZXJpZnkgcmVzdWx0Ci0rICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBh cmUgd2l0aCBvcmlnaW5hbCBwbGFpbnRleHQuCi0rICovCi0rCi0raW50IGZpcHNfY2lwaGVyX3Rl c3QoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAotKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqY2lwaGVydGV4dCwKLSsJCQlpbnQgbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBb RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19N QVhfQ0lQSEVSX1RFU1RfU0laRV07Ci0rCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9D SVBIRVJfVEVTVF9TSVpFKTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBO VUxMLCBrZXksIGl2LCAxKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCUVWUF9DaXBoZXIoY3R4LCBj aXRtcCwgcGxhaW50ZXh0LCBsZW4pOwotKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBs ZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwg TlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlFVlBfQ2lwaGVyKGN0eCwg cGx0bXAsIGNpdG1wLCBsZW4pOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikp Ci0rCQlyZXR1cm4gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsjaWYgMAotKy8qIFRoZSBwdXJw b3NlIG9mIHRoaXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1 bmN0aW9uCi0rICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVp ZXQKLSsgKi8KLSt2b2lkIGhhc2hfZmluYWwodm9pZCkKLSsJewotKwlGSVBTZXJyKEZJUFNfRl9I QVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwl9Ci0rI2VuZGlmCi0rCi0rCi0r I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxm dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3Qu YwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlw cwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAw MDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMTM5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYu aD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHN0cnVjdAotKyAgICB7Ci0r ICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRb OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKLSsgICAgfSB0ZXN0czJbXT0K LSsJewotKwl7Ci0rCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4MDQsMHgxNiwweGVjLAot KwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9LAotKwl7IDB4MDYs MHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAotKwl7IDB4NGMsMHgxMSwweDE3 LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9Ci0rCX0sCi0rCXsKLSsJeyAweDVkLDB4OWUsMHgw MSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCi0rCSAgMHgwMSwweDE2LDB4N2MsMHg4NSwweDIz LDB4ZGYsMHhlMCwweDY4IH0sCi0rCXsgMHg5YywweDUwLDB4MDksMHgwZiwweDVlLDB4N2QsMHg2 OSwweDdlIH0sCi0rCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQsMHg5ZSwweGZmIH0s Ci0rCX0KLSsJfTsKLSsKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hh ciBrZXlbMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3RzM1tdPQotKwl7Ci0rCXsKLSsJeyAw eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCSAgMHhGRSwweERDLDB4 QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAotKwkgIDB4MTIsMHgzNCwweDU2LDB4NzgsMHg5 YSwweGJjLDB4ZGUsMHhmMCB9LAotKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1ZCwweDQ4LDB4 YjQsMHgxYyB9LAotKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEyLDB4ZWEsMHgxYiB9 LAotKwl9LAotKwl7Ci0rCXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwweEZF LAotKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKLSsJICAweEVE LDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKLSsJeyAweDAxLDB4MjMsMHg0 NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKLSsJeyAweDExLDB4MjUsMHhiMCwweDM1LDB4 YmUsMHhhMCwweDgyLDB4ODYgfSwKLSsJfSwKLSsJfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9k ZXMoKQotKyAgICB7Ci0rICAgIHRlc3RzMlswXS5wbGFpbnRleHRbMF0rKzsKLSsgICAgfQotKwot K2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0rICAgIHsKLSsgICAgaW50IG4sIHJldCA9IDA7Ci0r ICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsK LSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQgY29tcGFyZSB0byBr bm93biBhbnN3ZXJzICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKLSsJewotKwlpZiAo IWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCi0rCQkJCXRlc3RzMltu XS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzMltuXS5wbGFpbnRleHQsIHRlc3RzMltuXS5jaXBoZXJ0 ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rCi0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3 aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAgICBmb3Iobj0wIDsg biA8IDIgOyArK24pCi0rCXsKLSsJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNf ZWRlM19lY2IoKSwKLSsJCQkJdGVzdHMzW25dLmtleSwgTlVMTCwKLSsJCQkJdGVzdHMzW25dLnBs YWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290byBlcnI7Ci0rCX0KLSsg ICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgp OwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNU X0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAg fQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19kc2Ff c2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0 ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5j LmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAu MDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDE4NiBAQAotKy8qIGNyeXB0by9kc2EvZHNhdGVz dC5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2Fn ZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28g YXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5 IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFz Ci0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0 cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2Rl OyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNs dWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJp Z2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydz LCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUg bm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9k dWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBh dXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUg aW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0r ICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhl IHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dy YXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0r ICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICog NC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0 aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlv biBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJ QyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0r ICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1Ymxp Y2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBj YW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBj b3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2lu Y2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsKLSsvKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9nIGFyZSB0YWtlbiB0aGUgTklTVCB0ZXN0 IHZlY3RvcnMgKi8KLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBzZWVkWzIwXSA9IHsKLSsJMHg3 NywgMHg4ZiwgMHg0MCwgMHg3NCwgMHg2ZiwgMHg2NiwgMHhiZSwgMHgzMywgMHhjZSwgMHhiZSwg MHg5OSwgMHgzNCwKLSsJMHg0YywgMHhmYywgMHhmMywgMHgyOCwgMHhhYSwgMHg3MCwgMHgyZCwg MHgzYQotKyAgCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3BbXSA9IHsKLSsJMHhm NywgMHg3YywgMHgxYiwgMHg4MywgMHhkOCwgMHhlOCwgMHg1YywgMHg3ZiwgMHg4NSwgMHgzMCwg MHgxNywgMHg1NywKLSsJMHgyMSwgMHg5NSwgMHhmZSwgMHgyNiwgMHgwNCwgMHhlYiwgMHg0Nywg MHg0YywgMHgzYSwgMHg0YSwgMHg4MSwgMHg0YiwKLSsJMHg3MSwgMHgyZSwgMHhlZCwgMHg2ZSwg MHg0ZiwgMHgzZCwgMHgxMSwgMHgwZiwgMHg3YywgMHhmZSwgMHgzNiwgMHg0MywKLSsJMHg1MSwg MHhkOSwgMHg4MSwgMHgzOSwgMHgxNywgMHhkZiwgMHg2MiwgMHhmNiwgMHg5YywgMHgwMSwgMHhh OCwgMHg2OSwKLSsJMHg3MSwgMHhkZCwgMHgyOSwgMHg3ZiwgMHg0NywgMHhlNiwgMHg2NSwgMHhh NiwgMHgyMiwgMHhlOCwgMHg2YSwgMHgxMiwKLSsJMHgyYiwgMHhjMiwgMHg4MSwgMHhmZiwgMHgz MiwgMHg3MCwgMHgyZiwgMHg5ZSwgMHhjYSwgMHg1MywgMHgyNiwgMHg0NywKLSsJMHgwZiwgMHg1 OSwgMHhkNywgMHg5ZSwgMHgyYywgMHhhNSwgMHgwNywgMHhjNCwgMHg0OSwgMHg1MiwgMHhhMywg MHhlNCwKLSsJMHg2YiwgMHgwNCwgMHgwMCwgMHgyNSwgMHg0OSwgMHhlMiwgMHhlNiwgMHg3Ziwg MHgyOCwgMHg3OCwgMHg5NywgMHhiOCwKLSsJMHgzYSwgMHgzMiwgMHgxNCwgMHgzOCwgMHhhMiwg MHg1MSwgMHgzMywgMHgyMiwgMHg0NCwgMHg3ZSwgMHhkNywgMHhlZiwKLSsJMHg0NSwgMHhkYiwg MHgwNiwgMHg0YSwgMHhkMiwgMHg4MiwgMHg0YSwgMHg4MiwgMHgyYywgMHhiMSwgMHhkNywgMHhk OCwKLSsJMHhiNiwgMHg3MywgMHgwMCwgMHg0ZCwgMHg5NCwgMHg3NywgMHg5NCwgMHhlZgotKwl9 OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9xW10gPSB7Ci0rCTB4ZDQsIDB4MGEsIDB4 YWMsIDB4OWYsIDB4YmQsIDB4OGMsIDB4ODAsIDB4YzIsIDB4MzgsIDB4N2UsIDB4MmUsIDB4MGMs Ci0rCTB4NTIsIDB4NWMsIDB4ZWEsIDB4MzQsIDB4YTEsIDB4ODMsIDB4MzIsIDB4ZjMKLSsJfTsK LSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdID0gewotKwkweDM0LCAweDczLCAweDhi LCAweDU3LCAweDg0LCAweDhlLCAweDU1LCAweGJmLCAweDU3LCAweGNjLCAweDQxLCAweGJiLAot KwkweDVlLCAweDJiLCAweGQ1LCAweDQyLCAweGRkLCAweDI0LCAweDIyLCAweDJhLCAweDA5LCAw eGVhLCAweDI2LCAweDFlLAotKwkweDE3LCAweDY1LCAweGNiLCAweDFhLCAweGIzLCAweDEyLCAw eDQ0LCAweGEzLCAweDllLCAweDk5LCAweGU5LCAweDYzLAotKwkweGViLCAweDMwLCAweGIxLCAw eDc4LCAweDdiLCAweDA5LCAweDQwLCAweDMwLCAweGZhLCAweDgzLCAweGMyLCAweDM1LAotKwkw eGUxLCAweGM0LCAweDJkLCAweDc0LCAweDFhLCAweGIxLCAweDgzLCAweDU0LCAweGQ4LCAweDI5 LCAweGY0LCAweGNmLAotKwkweDdmLCAweDZmLCAweDY3LCAweDFjLCAweDM2LCAweDQ5LCAweGVl LCAweDZjLCAweGEyLCAweDNjLCAweDJkLCAweDZhLAotKwkweGU5LCAweGQzLCAweDlhLCAweGY2 LCAweDU3LCAweDc4LCAweDZmLCAweGZkLCAweDMzLCAweGNkLCAweDNjLCAweGVkLAotKwkweGZk LCAweGQ0LCAweDQxLCAweGU2LCAweDVjLCAweDhiLCAweGUwLCAweDY4LCAweDMxLCAweDQ3LCAw eDQ3LCAweGFmLAotKwkweDEyLCAweGE3LCAweGY5LCAweDMyLCAweDBkLCAweDk0LCAweDE1LCAw eDQ4LCAweGQwLCAweDU0LCAweDg1LCAweGIyLAotKwkweDA0LCAweGI1LCAweDRkLCAweGQ0LCAw eDlkLCAweDA1LCAweDIyLCAweDI1LCAweGQ5LCAweGZkLCAweDZjLCAweDM2LAotKwkweGVmLCAw eGJlLCAweDY5LCAweDZjLCAweDU1LCAweGY0LCAweGVlLCAweGVjCi0rCX07Ci0rCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Ci0rCi0r dm9pZCBGSVBTX2NvcnJ1cHRfZHNhKCkKLSsgICAgewotKyAgICArK3NlZWRbMF07Ci0rICAgIH0K LSsKLStpbnQgRklQU19zZWxmdGVzdF9kc2EoKQotKyAgICB7Ci0rICAgIERTQSAqZHNhOwotKyAg ICBpbnQgY291bnRlcixpLGosIHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAg ICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOwotKyAgICB1bnNpZ25lZCBsb25nIGg7Ci0rICAgIEVW UF9NRF9DVFggbWN0eDsKLSsgICAgRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsgICAgRVZQX01E X0NUWF9pbml0KCZtY3R4KTsKLSsKLSsgICAgZHNhID0gRFNBX25ldygpOwotKwotKyAgICBpZihk c2EgPT0gTlVMTCkKLSsJZ290byBlcnI7Ci0rICAgIGlmKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChkc2EsIDEwMjQsc2VlZCwyMCwmY291bnRlciwmaCxOVUxMKSkKLSsJZ290byBlcnI7Ci0r ICAgIGlmIChjb3VudGVyICE9IDM3OCkgCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoaCAhPSAyKQot Kwlnb3RvIGVycjsKLSsgICAgaT1CTl9ibjJiaW4oZHNhLT5xLGJ1Zik7Ci0rICAgIGo9c2l6ZW9m KG91dF9xKTsKLSsgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9xLGkpICE9IDApCi0r CWdvdG8gZXJyOwotKwotKyAgICBpPUJOX2JuMmJpbihkc2EtPnAsYnVmKTsKLSsgICAgaj1zaXpl b2Yob3V0X3ApOwotKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X3AsaSkgIT0gMCkK LSsJZ290byBlcnI7Ci0rCi0rICAgIGk9Qk5fYm4yYmluKGRzYS0+ZyxidWYpOwotKyAgICBqPXNp emVvZihvdXRfZyk7Ci0rICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfZyxpKSAhPSAw KQotKwlnb3RvIGVycjsKLSsgICAgRFNBX2dlbmVyYXRlX2tleShkc2EpOwotKwotKyAgICBpZiAo KHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwlnb3RvIGVycjsKLSsgICAgRVZQX1BLRVlf YXNzaWduX0RTQShwaywgZHNhKTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgs IEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0 ZSgmbWN0eCwgc3RyMSwgMjApKQotKwlnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFs KCZtY3R4LCBidWYsICZzbGVuLCBwaykpCi0rCWdvdG8gZXJyOwotKwotKyAgICBpZiAoIUVWUF9W ZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlcnI7Ci0rICAg IGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgc3RyMSwgMjApKQotKwlnb3RvIGVycjsKLSsg ICAgaWYgKEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCBwaykgIT0gMSkKLSsJZ290 byBlcnI7Ci0rCi0rICAgIHJldCA9IDE7Ci0rCi0rICAgIGVycjoKLSsgICAgRVZQX01EX0NUWF9j bGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKHBrKQotKwlFVlBfUEtFWV9mcmVlKHBrKTsKLSsgICAg ZWxzZSBpZiAoZHNhKQotKwlEU0FfZnJlZShkc2EpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVE KTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMv Zmlwcy5oCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJMjAxMi0w MS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v Zmlwcy9maXBzLmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAg KzEsMTYzIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNlcnJvciBGSVBT IGlzIGRpc2FibGVkLgotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaWZk ZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0rc3RydWN0IGRzYV9z dDsKLStzdHJ1Y3QgZXZwX3BrZXlfc3Q7Ci0rc3RydWN0IGVudl9tZF9zdDsKLStzdHJ1Y3QgZXZw X2NpcGhlcl9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7Ci0rCi0raW50IEZJUFNfbW9k ZV9zZXQoaW50IG9ub2ZmKTsKLStpbnQgRklQU19tb2RlKHZvaWQpOwotK2NvbnN0IHZvaWQgKkZJ UFNfcmFuZF9jaGVjayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Ci0r dm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3NoYTEo dm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVw dF9hZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotK3ZvaWQgRklQU19j b3JydXB0X2Rlcyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0rdm9pZCBG SVBTX2NvcnJ1cHRfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9p ZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Rz YSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBT X3NlbGZ0ZXN0X2RzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0rdm9p ZCBGSVBTX3JuZ19zdGljayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsKLSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHN0cnVjdCBldnBfcGtleV9zdCAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICp0YnMsIGludCB0YnNsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25l ZCBpbnQga2F0bGVuLAotKwkJCWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5zaWdu ZWQgaW50IG1kX2ZsYWdzLAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLStpbnQgZmlw c19jaXBoZXJfdGVzdChzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKLSsJCQljb25zdCBz dHJ1Y3QgZXZwX2NpcGhlcl9zdCAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJCQlp bnQgbGVuKTsKLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotKy8qIFRoZSBmb2xsb3dpbmcg bGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFu Z2VzCi0rICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRo ZSBzY3JpcHQgaXMgbmV4dCBydW4uCi0rICovCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Mo dm9pZCk7Ci0rCi0rLyogRXJyb3IgY29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4gKi8KLSsK LSsvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dFTlBB UkFNUwkJCSAxMDAKLSsjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMDEK LSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTgkJCQkgMTAyCi0rI2RlZmluZSBGSVBTX0ZfRFNB X0RPX1ZFUklGWQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkg MTI0Ci0rI2RlZmluZSBGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19DSEVDS19EU0EJCQkJIDEwNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tf SU5DT1JFX0ZJTkdFUlBSSU5UCQkgMTA1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJ CQkJIDEwNgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX0NIRUNLCQkJCSAxMDcKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX01PREVfU0VUCQkJCSAxMDgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlf U0lHTkFUVVJFX1RFU1QJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMJ CQkgMTEwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCi0rI2RlZmlu ZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EJCQkgMTEyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19T RUxGVEVTVF9ITUFDCQkJIDExMwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HCQkJ IDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUKLSsjZGVmaW5l IEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMKLSsjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9L RVlHRU4JCQkgMTE2Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQJCQkg MTE3Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4Ci0rI2Rl ZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJCSAxMTkKLSsjZGVmaW5lIEZJUFNf Rl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAotKyNkZWZpbmUgRklQU19GX1JTQV9YOTMx X0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKLSsjZGVmaW5lIEZJUFNfRl9TU0xFQVlfUkFORF9CWVRF UwkJCSAxMjIKLSsKLSsvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9U X1JFQURfRVhFCQkJCSAxMDMKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNU CQkJIDEwNAotKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkgMTE0Ci0r I2RlZmluZSBGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSAkJIDEwNQotKyNkZWZpbmUg RklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkgMTEwCi0rI2RlZmluZSBGSVBTX1Jf RklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSsjZGVmaW5l IEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDExMgot KyNkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKLSsjZGVmaW5lIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfUl9JTlZBTElE X0tFWV9MRU5HVEgJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJCQkgMTA4 Ci0rI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKLSsjZGVmaW5lIEZJUFNf Ul9QQUlSV0lTRV9URVNUX0ZBSUxFRAkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfUl9SU0FfREVDUllQ VF9FUlJPUgkJCSAxMTUKLSsjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkJCSAxMTYK LSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQotKyNkZWZpbmUgRklQU19S X1RFU1RfRkFJTFVSRQkJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZP Uk0JCQkgMTEzCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKLS0t LSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIw MTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAw MDAgKzAxMDAKLUBAIC0wLDAgKzEsMTM3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0eXBlZGVm IHN0cnVjdCB7Ci0rCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOwotKwljb25zdCBjaGFyICpr ZXksICppdjsKLSsJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwotK30gSE1B Q19LQVQ7Ci0rCi0rc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7CUVW UF9zaGExLAotKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBz L2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwki U2FtcGxlICMyIiwKLSsJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4MTks Ci0rCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAotKwkgIDB4YzYs MHhjNywweDVkLDB4MjQgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyMjQsCi0rCS8qIGp1c3Qg a2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIs Ci0rCSJTYW1wbGUgIzIiLAotKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4NTAs MHhmYiwKLSsJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCi0rCSAg MHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAotKwkgIDB4OGMsMHg4ZCww eDEyLDB4YzcgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyNTYsCi0rCSIwMTIzNDU2Nzg5Ojs8 PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0MSww eGVhLDB4NDMsMHgwOSwKLSsJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4LDB4 MzQsCi0rCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAotKwkgIDB4 MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9Ci0rICAgIH0sCi0rICAgIHsJ RVZQX3NoYTM4NCwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0r CXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAotKwkgIDB4OWEsMHgx ZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKLSsJICAweGI3LDB4MTgsMHgwNiwweGE1 LDB4NzcsMHhjZCwweDQ5LDB4MDQsCi0rCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4NTEs MHg1MSwweDlmLAotKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1MCwK LSsJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQotKyAgICB9LAot KyAgICB7CUVWUF9zaGE1MTIsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUg IzIiLAotKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKLSsJICAw eDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCi0rCSAgMHg0NCwweGQ1LDB4 YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAotKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIsMHhj MCwweDkwLDB4NzcsMHg2OCwKLSsJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSwweDJj LDB4MmYsCi0rCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAotKwkg IDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKLSsJICAweGJkLDB4NGYs MHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQotKyAgICB9LAotK307Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfaG1hYygpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIHVuc2lnbmVkIGlu dCAgICBvdXRsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpFXTsK LSsgICAgY29uc3QgRVZQX01EICAgKm1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsKLSsg ICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBdKTsg bisrLHQrKykKLSsJewotKwltZCA9ICgqdC0+YWxnKSgpOwotKwlITUFDKG1kLHQtPmtleSxzdHJs ZW4odC0+a2V5KSwKLSsJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQtPml2 KSwKLSsJCW91dCwmb3V0bGVuKTsKLSsKLSsJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRsZW4p KQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAg cmV0dXJuIDE7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19y YW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIw MTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAK LUBAIC0wLDAgKzEsNDEyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rLyoKLSsg KiBUaGlzIGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEu Mi40LgotKyAqLwotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rLyogSWYgd2UgZG9uJ3QgZGVm aW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0aW1ldmFsIHdvbid0Ci0rICAgYmUg ZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3QgYmUgZGVjbGFyZWQgd2l0aCBzdHJpY3Qg Y29tcGlsZXJzCi0rICAgbGlrZSBERUMgQyBpbiBBTlNJIEMgbW9kZS4gICovCi0rI2lmbmRlZiBf WE9QRU5fU09VUkNFX0VYVEVOREVECi0rI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEK LSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+Ci0rI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyNpbmNsdWRlIDxzeXMv dGltZS5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaWZuZGVmIE9QRU5TU0xf U1lTX1dJTjMyCi0rIyBpZmRlZiBPUEVOU1NMX1VOSVNURAotKyMgIGluY2x1ZGUgT1BFTlNTTF9V TklTVEQKLSsjIGVsc2UKLSsjICBpbmNsdWRlIDx1bmlzdGQuaD4KLSsjIGVuZGlmCi0rI2VuZGlm Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKLSsKLSsj ZGVmaW5lIEFFU19CTE9DS19MRU5HVEgJMTYKLSsKLSsKLSsvKiBBRVMgRklQUyBQUk5HIGltcGxl bWVudGF0aW9uICovCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IHNlZWRlZDsKLSsJ aW50IGtleWVkOwotKwlpbnQgdGVzdF9tb2RlOwotKwlpbnQgc2Vjb25kOwotKwlpbnQgZXJyb3I7 Ci0rCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKLSsJQUVTX0tFWSBrczsKLSsJaW50IHZwb3M7Ci0r CS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICov Ci0rCXVuc2lnbmVkIGNoYXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQg Y2hhciBWW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19M RU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCX0gRklQ U19QUk5HX0NUWDsKLSsKLStzdGF0aWMgRklQU19QUk5HX0NUWCBzY3R4OwotKwotK3N0YXRpYyBp bnQgZmlwc19wcm5nX2ZhaWwgPSAwOwotKwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKLSsJ ewotKwlmaXBzX3BybmdfZmFpbCA9IDE7Ci0rCX0KLSsKLSt2b2lkIGZpcHNfcmFuZF9wcm5nX3Jl c2V0KEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwljdHgtPnNlZWRlZCA9IDA7Ci0rCWN0eC0+ a2V5ZWQgPSAwOwotKwljdHgtPnRlc3RfbW9kZSA9IDA7Ci0rCWN0eC0+Y291bnRlciA9IDA7Ci0r CWN0eC0+c2Vjb25kID0gMDsKLSsJY3R4LT5lcnJvciA9IDA7Ci0rCWN0eC0+dnBvcyA9IDA7Ci0r CU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOwotKwlPUEVOU1NMX2Ns ZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7Ci0rCX0KLSsJCi0rCi0rc3RhdGljIGlu dCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKLSsJewotKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7Ci0rCWlmIChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxl biAhPSAzMikKLSsJCXsKLSsJCS8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCi0rCQlyZXR1 cm4gMDsKLSsJCX0KLSsJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4 LT5rcyk7Ci0rCWlmIChrZXlsZW4gPT0gMTYpCi0rCQl7Ci0rCQltZW1jcHkoY3R4LT50bXBfa2V5 LCBrZXksIDE2KTsKLSsJCWN0eC0+a2V5ZWQgPSAyOwotKwkJfQotKwllbHNlCi0rCQljdHgtPmtl eWVkID0gMTsKLSsJY3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NU WCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qg c2VlZGxlbikKLSsJewotKwlpbnQgaTsKLSsJaWYgKCFjdHgtPmtleWVkKQotKwkJcmV0dXJuIDA7 Ci0rCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlzIGp1c3Qgc3VwcGxpZWQgZGF0YSAqLwotKwlpZiAo Y3R4LT50ZXN0X21vZGUpCi0rCQl7Ci0rCQlpZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tfTEVOR1RI KQotKwkJCXJldHVybiAwOwotKwkJbWVtY3B5KGN0eC0+Viwgc2VlZCwgQUVTX0JMT0NLX0xFTkdU SCk7Ci0rCQljdHgtPnNlZWRlZCA9IDE7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsJLyogT3V0c2lk ZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVkICovCi0rCWZv ciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspCi0rCQl7Ci0rCQljdHgtPlZbY3R4LT52cG9zKytd IF49IHNlZWRbaV07Ci0rCQlpZiAoY3R4LT52cG9zID09IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJ ewotKwkJCWN0eC0+dnBvcyA9IDA7Ci0rCQkJLyogU3BlY2lhbCBjYXNlIGlmIGZpcnN0IHNlZWQg YW5kIGtleSBsZW5ndGggZXF1YWxzCi0rIAkJCSAqIGJsb2NrIHNpemUgY2hlY2sga2V5IGFuZCBz ZWVkIGRvIG5vdCBtYXRjaC4KLSsgCQkJICovIAotKwkJCWlmIChjdHgtPmtleWVkID09IDIpCi0r CQkJCXsKLSsJCQkJaWYgKCFtZW1jbXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkKLSsJCQkJ CXsKLSsJCQkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCwKLSsJCQkJCQlSQU5E X1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSk7Ci0rCQkJCQlyZXR1cm4gMDsKLSsJCQkJ CX0KLSsJCQkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dG1wX2tleSwgMTYpOwotKwkJCQljdHgtPmtl eWVkID0gMTsKLSsJCQkJfQotKwkJCWN0eC0+c2VlZGVkID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCXJl dHVybiAxOwotKwl9Ci0rCi0raW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpj dHgpCi0rCXsKLSsJaWYgKGN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1NFVF9URVNUX01PREUsUkFORF9SX1BSTkdfS0VZRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CWN0eC0+dGVzdF9tb2RlID0gMTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5k X3Rlc3RfbW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgp OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCi0rCXsK LSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFO RF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAxOwotKwl9 Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19nZXRfZHQoRklQU19QUk5HX0NUWCAqY3R4KQotKyAgICB7 Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUZJTEVUSU1FIGZ0OwotKyNlbHNlCi0rCXN0 cnVjdCB0aW1ldmFsIHR2OwotKyNlbmRpZgotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBjdHgtPkRU OwotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXVuc2lnbmVkIGxvbmcgcGlk OwotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlHZXRTeXN0ZW1UaW1l QXNGaWxlVGltZSgmZnQpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3SGlnaERh dGVUaW1lICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERh dGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3 SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikg KChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVk IGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBj aGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzZdID0gKHVuc2ln bmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzddID0g KHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsjZWxz ZQotKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikg KHR2LnR2X3NlYyAmIDB4ZmYpOwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9z ZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2Vj ID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMg Pj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfdXNlYyAm IDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDgpICYg MHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMTYpICYg MHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMjQpICYg MHhmZik7Ci0rI2VuZGlmCi0rCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoY3R4LT5jb3VudGVy ICYgMHhmZik7Ci0rCWJ1Zls5XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiA4 KSAmIDB4ZmYpOwotKwlidWZbMTBdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+ IDE2KSAmIDB4ZmYpOwotKwlidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVy ID4+IDI0KSAmIDB4ZmYpOwotKwotKwljdHgtPmNvdW50ZXIrKzsKLSsKLSsKLSsjaWZuZGVmIEdF VFBJRF9JU19NRUFOSU5HTEVTUwotKwlwaWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7Ci0rCWJ1 ZlsxMl0gPSAodW5zaWduZWQgY2hhcikgKHBpZCAmIDB4ZmYpOwotKwlidWZbMTNdID0gKHVuc2ln bmVkIGNoYXIpICgocGlkID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hh cikgKChwaWQgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChw aWQgPj4gMjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rICAgIH0KLSsKLStzdGF0aWMgaW50IGZpcHNf cmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJdW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JB TkRfU0laRV9UIG91dGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JMT0NLX0xFTkdU SF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1wW0FFU19CTE9DS19M RU5HVEhdOwotKwlpbnQgaTsKLSsJaWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0rCQlSQU5EZXJyKFJB TkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfRVJST1IpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CWlmICghY3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5E X1JfTk9fS0VZX1NFVCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPnNlZWRlZCkK LSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19OT1RfU0VFREVE KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFjdHgtPnRl c3RfbW9kZSkKLSsJCQlmaXBzX2dldF9kdChjdHgpOwotKwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwg SSwgJmN0eC0+a3MpOwotKwkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykK LSsJCQl0bXBbaV0gPSBJW2ldIF4gY3R4LT5WW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBSLCAm Y3R4LT5rcyk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJ CXRtcFtpXSA9IFJbaV0gXiBJW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgt PmtzKTsKLSsJCS8qIENvbnRpbnVvdXMgUFJORyB0ZXN0ICovCi0rCQlpZiAoY3R4LT5zZWNvbmQp Ci0rCQkJewotKwkJCWlmIChmaXBzX3BybmdfZmFpbCkKLSsJCQkJbWVtY3B5KGN0eC0+bGFzdCwg UiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQkJaWYgKCFtZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNf QkxPQ0tfTEVOR1RIKSkKLSsJCQkJewotKwkgICAgCQkJUkFORGVycihSQU5EX0ZfRklQU19SQU5E LFJBTkRfUl9QUk5HX1NUVUNLKTsKLSsJCQkJY3R4LT5lcnJvciA9IDE7Ci0rCQkJCWZpcHNfc2V0 X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rCQltZW1j cHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCWlmICghY3R4LT5zZWNvbmQp Ci0rCQkJewotKwkJCWN0eC0+c2Vjb25kID0gMTsKLSsJCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQot KwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlpZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5H VEgpCi0rCQkJewotKwkJCW1lbWNweShvdXQsIFIsIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJ fQotKwotKwkJbWVtY3B5KG91dCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlvdXQgKz0gQUVT X0JMT0NLX0xFTkdUSDsKLSsJCW91dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOwotKwkJfQotKwly ZXR1cm4gMTsKLSsJfQotKwotKwotK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25l ZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCWludCByZXQ7Ci0r CUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdf a2V5KCZzY3R4LCBrZXksIGtleWxlbik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19S QU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2 b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJ Q1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19zZXRfcHJuZ19z ZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rCi0raW50IEZJUFNfcmFuZF9ieXRlcyh1 bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1QgY291bnQpCi0rCXsKLSsJaW50IHJl dDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19yYW5k KCZzY3R4LCBvdXQsIGNvdW50KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKLSsJ ewotKwlpbnQgcmV0OwotKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQg PSBzY3R4LnNlZWRlZDsKLSsJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwly ZXR1cm4gcmV0OwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSsJewotKwlD UllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgm c2N0eCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJfQotKwotK3N0 YXRpYyB2b2lkIGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9T SVpFX1Qgc2VlZGxlbikKLSsJewotKwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJ fQotKwotK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgRklQ U19SQU5EX1NJWkVfVCBzZWVkbGVuLAotKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQotKwl7Ci0r CUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwl9Ci0rCi0rc3RhdGljIGNvbnN0IFJB TkRfTUVUSE9EIHJhbmRfZmlwc19tZXRoPQotKyAgICB7Ci0rICAgIGZpcHNfZG9fcmFuZF9zZWVk LAotKyAgICBGSVBTX3JhbmRfYnl0ZXMsCi0rICAgIEZJUFNfcmFuZF9yZXNldCwKLSsgICAgZmlw c19kb19yYW5kX2FkZCwKLSsgICAgRklQU19yYW5kX2J5dGVzLAotKyAgICBGSVBTX3JhbmRfc3Rh dHVzCi0rICAgIH07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9p ZCkKLSt7Ci0rICByZXR1cm4gJnJhbmRfZmlwc19tZXRoOwotK30KLSsKLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v Zmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNzcgQEAKLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAotKyNkZWZpbmUgSEVB REVSX0ZJUFNfUkFORF9ICi0rCi0rI2luY2x1ZGUgImRlcy5oIgotKwotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0r Ci0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19S QU5EX1NJWkVfVCBrZXlsZW4pOwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYs IEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNo YXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwotKwotK2ludCBGSVBTX3JhbmRfdGVz dF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOwotK2ludCBGSVBTX3Jh bmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLSsKLStpbnQgRklQU19yYW5kX3N0YXR1cyh2 b2lkKTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKTsKLSsK LSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotKyNlbmRpZgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMJMjAxMi0w MS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAotQEAgLTAsMCArMSwzNzMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5z aWduZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNo YXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZl Y3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsKLStzdGF0 aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSwweDY2LDB4 NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhk NCwweDYyLDB4MDJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2W10gPSB7Ci0r CXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZh LDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKLSsJ CQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK LSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBS ICovCi0rCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAotKwkJIDB4 ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfSwKLSsJewotKwkJCQkv KiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJ CSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmF9LAotKwkJCQkvKiBWICov Ci0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsw eDdjLDB4MjIsMHgyYywweGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMsCi0rCQkgMHgxYywweDljLDB4 YjYsMHg0MSwweGE5LDB4ZjMsMHgyMiwweDBkfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0r CQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgx ZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmYn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4OGEsMHhhYSww eDAwLDB4MzksMHg2NiwweDY3LDB4NWIsMHhlNSwKLSsJCSAweDI5LDB4MTQsMHgyOCwweDgxLDB4 YTksMHg0ZCwweDRlLDB4Yzd9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4 YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhm YiwweGIwLDB4ZTksMHgyMiwweGZjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg4OCwweGRkLDB4YTQsMHg1Niww eDMwLDB4MjQsMHgyMywweGU1LAotKwkJIDB4ZjYsMHg5ZCwweGE1LDB4N2UsMHg3YiwweDk1LDB4 YzcsMHgzYX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4 NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhl OSwweDIyLDB4ZmR9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDA1LDB4MjUsMHg5MiwweDQ2LDB4NjEsMHg3OSww eGQyLDB4Y2IsCi0rCQkgMHg3OCwweGM0LDB4MGIsMHgxNCwweDBhLDB4NWEsMHg5YSwweGM4fQot Kwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4 MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjMsMHg3 N30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJ CQkJLyogUiAqLwotKwkJezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3YSwweDU5LDB4MjYsMHhiYywK LSsJCSAweDQ4LDB4ZDksMHgzOCwweGJmLDB4ZjAsMHg4NSwweDhmLDB4ZWF9Ci0rCX0sCi0rCXsK LSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4 NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMywweDc4fSwKLSsJCQkJ LyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJ CSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICov Ci0rCQl7MHhhZSwweDUzLDB4ODcsMHhlZSwweDhjLDB4ZDksMHgxMiwweGY1LAotKwkJIDB4NzMs MHg1MywweGFlLDB4MDMsMHhmOSwweGQ1LDB4MTMsMHgzM30KLSsJfSwKLSt9OwotKwotK3N0YXRp YyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9Ci0rCQl7MHgxNSwweGQ4LDB4NzgsMHgw ZCwweDYyLDB4ZDMsMHgyNSwweDZlLAotKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJi LDB4YTksMHhiYywKLSsJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9 OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2W10gPSB7Ci0rCXsKLSsJCQkJLyog RFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkg MHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwKLSsJCQkJLyogViAqLwot KwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgx NywweDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAotKwkJIDB4YTUsMHgwYywweGJm LDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJ ezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTks MHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGN9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDkyLDB4OGQsMHhi ZSwweDA3LDB4ZGQsMHhjNywweDU4LDB4YzAsCi0rCQkgMHg2ZiwweDM1LDB4NDEsMHg5YiwweDE3 LDB4YzksMHhiZCwweDlifQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4 LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQs MHgyNCwweDc4LDB4ZjMsMHg0ZH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4ZDUsMHhkZSwweGY0LDB4NTAsMHhm MywweGI3LDB4MTAsMHg0ZSwKLSsJCSAweGI4LDB4YzYsMHhmOCwweGNmLDB4ZTIsMHhiMSwweGNh LDB4YTJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4 LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4Nzgs MHhmMywweDRlfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHhjZSwweDI5LDB4MDgsMHg0MywweGZjLDB4MzQsMHg0 MSwweGU3LAotKwkJIDB4NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiwweDQ2LDB4YjEsMHhiYn0KLSsJ fSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5 LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGZ9 LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJ CS8qIFIgKi8KLSsJCXsweGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYsMHhjYSwweGE4LDB4YmYsCi0r CQkgMHg4OSwweGI4LDB4NWUsMHgyZiwweDIyLDB4NTYsMHg5MiwweDJmfQotKwl9LAotKwl7Ci0r CQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMx LAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHhjOX0sCi0rCQkJCS8q IFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkg MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwot KwkJezB4MDUsMHhlYiwweDE4LDB4NTIsMHgzNCwweDQzLDB4MDAsMHg0MywKLSsJCSAweDZlLDB4 NWEsMHhhNSwweGZlLDB4N2IsMHgzMiwweGM0LDB4MmR9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQg Ki8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhi ZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweGNhfSwKLSsJCQkJLyogViAqLwotKwkJ ezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNSww eDNjLDB4ZTgsMHhkMSwweDA0LDB4YzcsMHhhZCwweDUwLAotKwkJIDB4MGIsMHhmMCwweDA3LDB4 MTYsMHhlNywweDU2LDB4N2EsMHhlYX0KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBj aGFyIGFlc18yNTZfa2V5WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4MDYsMHg2YywweGI2LDB4ZDgs MHgyMSwweDJkLAotKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSwweDAzLDB4YjcsMHg5ZiwK LSsJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4YjUsCi0rCQkgMHgyMSww eDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKLSsKLStzdGF0aWMgQUVTX1BSTkdf VFYgYWVzXzI1Nl90dltdID0gewotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4 NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3 NCwweDhlLDB4OWUsMHg4OH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCww eDRkLDB4MjksMHhiYywKLSsJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4 NzJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4 MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5 ZSwweDg5fSwKLSsJCQkJLyogViAqLwotKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAotKwkJCQkvKiBSICovCi0rCQl7MHg2YywweGY0LDB4NDIsMHg1ZCwweGM3LDB4MDQsMHgxYSww eDQxLAotKwkJIDB4MjgsMHgyYSwweDc4LDB4YTksMHhiMCwweDEyLDB4YzQsMHg5NX0KLSsJfSwK LSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4 YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGF9LAot KwkJCQkvKiBWICovCi0rCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8q IFIgKi8KLSsJCXsweDE2LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3ZSwweGI5LDB4MzAsCi0rCQkg MHhkYiwweDY3LDB4NGIsMHhhYywweDJkLDB4ZTEsMHhkMSwweDc1fQotKwl9LAotKwl7Ci0rCQkJ CS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAot KwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4Yn0sCi0rCQkJCS8qIFYg Ki8KLSsJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJ ezB4MTQsMHg2ZiwweGY1LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgzMCwKLSsJCSAweGJjLDB4NTcs MHhlMiwweDRhLDB4ZjcsMHg0NSwweDYyLDB4MDV9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8K LSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiww eGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhjfSwKLSsJCQkJLyogViAqLwotKwkJezB4 ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg5NiwweGUy LDB4YjQsMHgxZSwweDY2LDB4NWUsMHgwZiwweGE0LAotKwkJIDB4YzUsMHhjZCwweGEyLDB4MDcs MHhjYywweGI3LDB4OTQsMHg0MH0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEs MHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSww eDM0LDB4NzQsMHg4ZSwweDlmLDB4MDZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZX0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDYxLDB4Y2UsMHgxZCwweDZh LDB4NDgsMHg3NSwweDk3LDB4MjgsCi0rCQkgMHg0YiwweDQxLDB4ZGUsMHgxOCwweDQ0LDB4NGYs MHg1NiwweGVjfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEs MHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCww eDhlLDB4OWYsMHgwN30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmfSwKLSsJCQkJLyogUiAqLwotKwkJezB4NTIsMHg4OSwweDU5LDB4NzksMHgyZCwweGFh LDB4MjgsMHhiMywKLSsJCSAweGIwLDB4OGEsMHgzZSwweDcwLDB4ZmEsMHg3MSwweDU5LDB4ODR9 Ci0rCX0sCi0rfTsKLSsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQotKyAgICB7Ci0rICAg IGFlc18xOTJfdHZbMF0uVlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmluZSBmaXBzX3JhbmRfdGVz dChrZXksIHR2KSBcCi0rCWRvX3JhbmRfdGVzdChrZXksIHNpemVvZiBrZXksIHR2LCBzaXplb2Yo dHYpL3NpemVvZihBRVNfUFJOR19UVikpCi0rCi0rc3RhdGljIGludCBkb19yYW5kX3Rlc3QodW5z aWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5HX1RWICp0diwgaW50IG50 dikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwlpbnQgaTsKLSsJaWYgKCFGSVBTX3Jh bmRfc2V0X2tleShrZXksIGtleWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJZm9yIChpID0gMDsgaSA8 IG50djsgaSsrKQotKwkJewotKwkJRklQU19yYW5kX3NlZWQodHZbaV0uViwgMTYpOwotKwkJRklQ U19yYW5kX3NldF9kdCh0dltpXS5EVCk7Ci0rCQlGSVBTX3JhbmRfYnl0ZXMoUiwgMTYpOwotKwkJ aWYgKG1lbWNtcChSLCB0dltpXS5SLCAxNikpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVy biAxOwotKwl9Ci0rCQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZygpCi0rCXsKLSsJRklQU19y YW5kX3Jlc2V0KCk7Ci0rCWlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgpKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0r CQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFmaXBzX3JhbmRfdGVzdChhZXNfMTI4X2tleSxhZXNf MTI4X3R2KQotKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KQot KwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsJCXsKLSsJ CUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQp OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfcmFuZF9yZXNldCgpOwotKwlyZXR1cm4gMTsK LSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlw c19yYW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMJ MjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0wLDAgKzEsMjQ4IEBACi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJp YyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAq IGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRp b24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICog Ci0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJj aWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVh cmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUg Zm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFz aCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3Vt ZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQg YnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBp cyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJl bWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4K LSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdl IGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1 dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQu Ci0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJv Z3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwp IHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0 d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3Jp dHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAg VGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBm cm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMg cmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMg Y29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGly ZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdl bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkg VGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0r ICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0 ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0 aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5v dCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlv biBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8K LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5j bHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3Jh bmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJB TkQgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5j bHVkZSAiZmlwc191dGwuaCIKLSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2lnbmVkIGNo YXIgRFRbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFJbMTZd OwotKwl9IEFFU19QUk5HX01DVDsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X21j dF9rZXlbMTZdID0KLSsJezB4OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQsMHhiNSwK LSsJIDB4ZDgsMHgyYiwweGU4LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07Ci0rCi0rc3RhdGlj IEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg2Myww eDc2LDB4YmIsMHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAotKwkgMHg2NywweGM5LDB4MjUsMHhm YSwweDcwLDB4MWYsMHgxMSwweGFjfSwKLSsJCQkvKiBWICovCi0rCXsweDU3LDB4MmMsMHg4ZSww eDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcsCi0rCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4YzQsMHg5 NSwweDAxLDB4ZDF9LAotKwkJCS8qIFIgKi8KLSsJezB4NDgsMHhlOSwweGJkLDB4MGQsMHgwNiww eGVlLDB4MTgsMHhmYiwKLSsJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4OWIsMHg3 M30KLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0gPQot Kwl7MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAotKwkgMHg0ZCwweDVh LDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAotKwkgMHhiYywweDM1LDB4NTEsMHgxNiww eDZiLDB4YWUsMHg5MywweDhhfTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18xOTJfbWN0 X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4OTEsMHg1YSww eGEzLDB4YzksCi0rCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2MywweDE1LDB4NTJ9LAot KwkJCS8qIFYgKi8KLSsJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSwweDllLDB4OTAsMHg2NCwK LSsJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0rCQkJLyogUiAq LwotKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiwweDIxLAotKwkgMHhkZCww eDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQotK307Ci0rCi0rc3RhdGljIHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9Ci0rCXsweDliLDB4MDUsMHhjOCwweDY4LDB4 ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAweGE2LDB4M2EsMHhhOCwweGNiLDB4NGUsMHg3MSwweGIy LDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhiNCwweGY2LDB4NmQsCi0rCSAw eDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9OwotKwotK3N0YXRpYyBBRVNf UFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4MzEsMHg2ZSww eDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKLSsJIDB4NjIsMHg2ZCwweDA0LDB4NDYsMHhl MCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJLyogViAqLwotKwl7MHg0ZiwweGNkLDB4YzEsMHg4Nyww eDgyLDB4MWYsMHg0ZCwweGExLAotKwkgMHgzZSwweDBlLDB4NTYsMHg0NCwweDU5LDB4ZTgsMHg4 MywweGNhfSwKLSsJCQkvKiBSICovCi0rCXsweGM4LDB4ODcsMHhjMiwweDYxLDB4NWIsMHhkMCww eGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4NWIsMHhkNSwweGYxLDB4OGR9Ci0r fTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsaW50IG4pCi0r ICAgIHsKLSsgICAgd2hpbGUobi0tID4gMCkKLSsJewotKwlwcmludGYoIiAlMDJ4IiwqYisrKTsK LSsJfQotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFy ICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsCi0rCQkgICAgaW50IG4pCi0r ICAgIHsKLSsgICAgaW50IGk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgbiA7ICsraSkKLSsJaWYo cmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQotKwkgICAgewotKwkgICAgcHV0cygiUmFuZG9tIHRl c3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAgICBkdW1wKHJlc3VsdCxuKTsKLSsJICAgIHB1dHMoIlxu ICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Ci0rCSAgICBkdW1wKGV4cGVjdGVkLG4pOwotKwkg ICAgcHV0Y2hhcignXG4nKTsKLSsJICAgIEVYSVQoMSk7Ci0rCSAgICB9Ci0rICAgIH0KLSsKLSsK LStzdGF0aWMgdm9pZCBydW5fdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIEFF U19QUk5HX01DVCAqdHYpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsx Nl07Ci0rICAgIGludCBpLCBqOwotKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsgICAgRklQU19y YW5kX3Rlc3RfbW9kZSgpOwotKyAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0r ICAgIEZJUFNfcmFuZF9zZWVkKHR2LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYtPkRULCAx Nik7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwl7Ci0rICAgIAlGSVBTX3Jh bmRfc2V0X2R0KGR0KTsKLSsJRklQU19yYW5kX2J5dGVzKGJ1ZiwgMTYpOwotKwkvKiBJbmNyZW1l bnQgRFQgKi8KLSsJZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQotKwkJewotKwkJZHRbal0rKzsK LSsJCWlmIChkdFtqXSkKLSsJCQlicmVhazsKLSsJCX0KLSsJfQotKwotKyAgICBjb21wYXJlKGJ1 Zix0di0+UiwgMTYpOwotKyAgICB9Ci0rCi0raW50IG1haW4oKQotKwl7Ci0rCXJ1bl90ZXN0KGFl c18xMjhfbWN0X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5H IHRlc3QgMSBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18x OTJfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwotKwlydW5f dGVzdChhZXNfMjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlwcmludGYoIkZJ UFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAx LTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9m aXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAx MDAKLUBAIC0wLDAgKzEsNDQxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsK LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5j bHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5bXSA9Ci0rIlx4 MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhB OFx4NzEiCi0rIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhC Nlx4RjBceDc0XHg1NFx4RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhB Qlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2 MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4N0ZceEFGXHhC OFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0r Ilx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1 XHg5OFx4MzkiCi0rIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdB XHg5QVx4NDFceEY2XHhDMVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhG XHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwotKwotK3N0YXRp YyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5XHhDNFx4Qjlc eDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2OFx4QjRc eDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKLSsiXHhCMlx4OTRceDEwXHhCM1x4Qzdc eDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLSsiXHhENlx4ODdc eDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNFXHhEQSIK LSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4 QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4 OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4 M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsiXHhBRlx4OTRceDI4XHhDMlx4 QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKLSsiXHhDMSI7 Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Ci0rIlx4MDBceEVFXHhD Rlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhCNVx4NjAiCi0r Ilx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4OUVceDNE XHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4N0VceDI4 XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0NVx4OURceDFG XHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCi0rIlx4OTkiOwotKwotKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJceDAwXHhDOVx4N0ZceEIxXHhGMFx4Mjdc eEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgotKyJceDM1XHgzRlx4NkNc eDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlEIgotKyJc eDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4 MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4 RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgwM1x4MzdceEU0 XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsiXHhFQlx4MDdceEREXHhEQ1x4MDFceDgz XHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKLSsiXHhEOVx4NDlceDA5 XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlBXHgyRSIKLSsi XHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDNDXHgxRlx4Njdc eEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcTFbXSA9Ci0r Ilx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2 XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2 XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4QVx4RTNceDQy XHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCi0rIlx4MUJceDk5XHhBNFx4OTVceDg0 XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOwotKyAgICAKLSsg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsiXHgwMFx4QjBceDZDXHg0 Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgyMyIKLSsiXHhC M1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhDRFx4MzlceEUy XHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2N1x4QTlceDY3 XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2 XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsiXHhGNyI7Ci0rCi0rICAgIGtleS0+biA9 IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKLSsgICAga2V5LT5lID0gQk5fYmlu MmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9iaW4yYm4oZCwg c2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihwLCBzaXplb2Yo cCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihxKS0xLCBr ZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRtcDEpLTEs IGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBzaXplb2YoZG1x MSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlxbXAsIHNpemVv ZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQg RklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgblswXSsrOwotKyAgICB9Ci0rCi0rLyog S25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2YXRlIGtl eSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNBIEtBVCI7 Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMVtdID0gewot KyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwgMHhCOSwg MHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIsIDB4NTUs IDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAweEY0LCAweEJGLCAweDRB LCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4LCAweEQzLAot KyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhCNSwgMHhDNywg MHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4MjksIDB4OUIs IDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAweDBELCAweEE5LCAweDI4 LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlCLCAweEY1LAot KyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4MSwgMHg0Nywg MHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4RDcsIDB4MTgs IDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAweEQ2LCAweDU1LCAweEU0 LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAweEJBLCAweEU4LAot KyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwgMHgyNiwgMHgxRSwg MHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4OUIsIDB4M0Qs IDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff UFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhCQywgMHhFOSwg MHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4RkUsIDB4ODEsIDB4QzQs IDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4OTUsIDB4RkEsCi0r ICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAweDU5LCAweDg3LCAw eDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgwNiwgMHhFQiwg MHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4ODMsIDB4NzUsIDB4NTks IDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4MDUsIDB4RUUsCi0r ICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAweDBDLCAweDY0LCAw eDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwgMHhGQiwg MHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4MzcsIDB4MUUsIDB4RTAs IDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4MjQsIDB4NDksCi0r ICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAweDhFLCAweEY1LCAw eDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwgMHgzNSwg MHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4NTQsIDB4NzYsIDB4M0Qs IDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2RCwgMHgzRCwgMHhCRSwg MHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywgMHg4OSwKLSsg IDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4MjUsIDB4 OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAweDc0LCAweDUxLCAw eDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAotKyAgMHhDMSwgMHg3NywgMHhDNiwg MHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3MywgMHg0RSwKLSsg IDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYsIDB4OUQsIDB4 NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAweDgxLCAweDQ3LCAw eDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAotKyAgMHgyRiwgMHg3QSwgMHg1NCwg MHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhEQSwgMHhCNiwKLSsg IDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4RDksIDB4NkYsIDB4 NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAweEI3LCAweDdFLCAweEFELCAweDdDLCAweDJGLCAw eDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1RiwgMHhCNywgMHgwMSwg MHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhCOSwgMHhGNiwKLSsg IDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4MUMKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtdID0gewotKyAg MHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwgMHhCNCwgMHgz MSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4MjIsIDB4 NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2LCAweDAwLCAweEY3LCAw eDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAweENELAotKyAg MHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhEOSwgMHgyRiwgMHg3 OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYsIDB4QTYsIDB4 MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIyLCAweDQ0LCAweEU1LCAw eDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRGLCAweEZCLAotKyAg MHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhBNCwgMHhFRiwgMHhE OSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTksIDB4MDEsIDB4 QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4LCAweDhCLCAweDM5LCAw eDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAweDZGLAotKyAg MHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4OCwgMHgwRSwgMHg2 MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAsIDB4MTgsIDB4 NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNT X1NIQTUxMltdID0gewotKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwgMHhFOCwgMHhF NiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYsIDB4ODMsIDB4QjcsIDB4 QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMsIDB4OUEsCi0rICAw eDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRELCAweDUxLCAweEVE LCAweDlFLCAweERELAotKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2QiwgMHhGNiwgMHg3 QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEsIDB4MUMsIDB4NTEsIDB4 Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUsIDB4RDcsCi0rICAw eDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYwLCAweDNELCAweDc4 LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwgMHg5RCwgMHgw QywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUsIDB4NDcsIDB4MzQsIDB4 MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4MzksIDB4NjMsCi0rICAw eDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAweEJGLCAweEY0 LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3QywgMHhD QSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMsIDB4OTcsIDB4NzAsIDB4 QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwgMHgxQSwgMHhDMCwgMHhG RSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywKLSsgIDB4NEEsIDB4 RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4MzMsIDB4OEQs IDB4OUIsCi0rICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1LCAweEEzLCAweDUx LCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwgMHgzNywgMHg4RSwgMHhE MCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwKLSsgIDB4ODAsIDB4 RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgsIDB4OEIsIDB4OEIs IDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUwLCAweDIzLCAweDI0 LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwgMHhFOCwgMHhCMSwgMHg4 QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwKLSsgIDB4QkMsIDB4 MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQsIDB4NDQsIDB4RTUs IDB4NUYsCi0rICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5LCAweDM3LCAweDIx LCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwgMHhERSwgMHhFNiwgMHhF OCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwKLSsgIDB4REYsIDB4 RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0rICAweDYyLCAweEFBLCAw eDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAweDE1LCAweEY5 LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5RSwgMHhB MCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4MUUsIDB4 MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0rICAweDA4LCAweEUyLCAw eDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAweDlFLCAweENE LAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhENSwgMHhD NiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4 MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0rICAweERCLCAweDU5LCAw eDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAweEM2LCAweDNC LAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1QSwgMHg5 MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4 RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0rICAweEQ5LCAweDc5LCAw eDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgyLCAweEU2LCAweERD LAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4RAotK307 Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9IHsKLSsg IDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4MDUsIDB4 MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAweDNCLCAweDFELCAweEFGLCAweEZCLCAweDhDLCAw eEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5MiwgMHg4NywgMHg4Qywg MHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2RiwgMHgzNSwKLSsg IDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4MTcsIDB4 NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAweEYxLCAweEZCLCAw eDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAotKyAgMHgwRSwgMHhDMCwgMHg5MCwg MHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5MSwgMHgzMCwKLSsg IDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQsIDB4QkYsIDB4 RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAweEQxLCAweEU5LCAw eEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhCOCwgMHg0MiwgMHhCQiwg MHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhEMSwgMHhEQSwKLSsg IDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4ODAsIDB4RDEsIDB4 OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAweENELCAweDU3LCAw eEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NI QTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywgMHg0QywgMHhDMCwg MHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4OTEsIDB4NjgsIDB4NTks IDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4QzcsCi0rICAweDZG LCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAweENBLCAweEZBLCAw eDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwgMHg0NCwgMHg3RSwg MHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4M0UsIDB4RDksIDB4MkQs IDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4Q0YsCi0rICAweDgy LCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAweDE5LCAweDJCLCAw eDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0NiwgMHhBQywgMHg0Qiwg MHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4OTUsIDB4RTksIDB4NkEs IDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4Q0QsCi0rICAweEVB LCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAweEQwLCAweDhGLCAw eDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwgMHgzOSwgMHgyRCwg MHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4MzEsIDB4QTIsIDB4MkYs IDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAweDFCLCAweDUxLCAweDVF LCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAotKyAgMHg0OSwgMHgy NSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhGOCwgMHhCMiwg MHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYs IDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAweDVBLCAweDFBLCAweEVE LCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAotKyAgMHg4RCwgMHhD QywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1MywgMHg2Miwg MHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0Ys IDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAweDdDLCAweDUyLCAweEYw LCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAotKyAgMHg1OSwgMHg1 NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2MywgMHg4NCwg MHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIs IDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAweENFLCAweEI1LCAweDNG LCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAotKyAgMHhERiwgMHg3 MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKLSsgIDB4ODYsIDB4QjQs IDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4NEQsIDB4 REYsCi0rICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAweDJGLCAweEM5LCAw eENELCAweEM0LCAweEIyLCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhGMSwgMHg0QSwgMHhFNywg MHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKLSsgIDB4MzUsIDB4RTIs IDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUsIDB4QTksIDB4 OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAweDYyLCAweDIzLCAw eDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhGNywgMHhERiwgMHg4Nywg MHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKLSsgIDB4RUUsIDB4NTEs IDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4MEMsIDB4NTksIDB4 RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAweDAzLCAweDYxLCAw eDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4MiwgMHhGRSwgMHgzMiwg MHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKLSsgIDB4OEUsIDB4NkUs IDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4MUMsIDB4QjMsIDB4 NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAweDdELCAweDQ5Ci0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMjU2W10g PSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAweDhBLCAweEM3LCAw eDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgxNSwgMHg4RSwgMHg1Miwg MHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKLSsgIDB4RUEsIDB4QTIs IDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4OTUsIDB4NzMsIDB4 Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAweDgwLCAweEI4LCAw eEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4OCwgMHgyNiwgMHgyMCwg MHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKLSsgIDB4MDAsIDB4ODUs IDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4MzgsIDB4MEUsIDB4 OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAweEE1LCAweDE5LCAw eDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2OSwgMHgyRSwg MHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKLSsgIDB4MzMsIDB4MUQs IDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4QTEsIDB4NDIsIDB4 QkQsCi0rICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAweDMwLCAweEZGLCAw eDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhFOCwgMHgwQSwgMHgwQSwg MHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5NiwgMHgzNSwgMHhFQywg MHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKLSsgIDB4RjIsIDB4ODIs IDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4MzcsIDB4 Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAw eEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4MywgMHgxOCwgMHg0NCwg MHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKLSsgIDB4NTcsIDB4QzIs IDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4RUUsIDB4 MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQxLCAw eDFFLCAweDZELCAweDhELCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgzNSwgMHg5NSwgMHg1OCwg MHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKLSsgIDB4MjQsIDB4MjIs IDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUsIDB4N0MsIDB4 RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5LCAweERFLCAw eEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1RSwgMHgzOSwg MHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKLSsgIDB4RTIsIDB4Q0Qs IDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKLSsgIDB4QTYsIDB4NjUs IDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4M0EsIDB4QzEsIDB4 NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAweERELCAweDRCLCAw eEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgwOSwgMHhCMiwgMHgxMSwg MHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKLSsgIDB4M0EsIDB4QkQs IDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4RjksIDB4MTQsIDB4 MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAweEYyLCAweEUzLCAw eEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3OSwgMHg5NiwgMHgwRCwg MHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKLSsgIDB4MTcsIDB4MEUs IDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RTAsIDB4RjYsIDB4 RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAweEJGLCAweDU4LCAw eDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhDQSwgMHg4NCwgMHgxNSwg MHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKLSsgIDB4MzYsIDB4MzUs IDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4MzAsIDB4NzEsIDB4 MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAweDU5LCAweEMzCi0r fTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0rCWludCByZXQgPSAwOwot KwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJaWYgKChrZXk9UlNBX25l dygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShrZXkpOwotKwlpZiAoKHBr PUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX2Fz c2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTEsIHNpemVv ZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BL Q1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0r CQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAotKwkJCQlFVlBfc2hh MjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMjI0IFBLQ1Mj MSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTI1Niwgc2l6ZW9m KGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4NCksCi0rCQkJCUVW UF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEzODQg UEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBNTEyLCBz aXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxB R19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hB MSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNB IFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NI QTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEyMjQoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBTUyIpKQotKwkJZ290byBl cnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVvZihrYXRfUlNBX1BT U19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAot KwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0 X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwKLSsJCQkJRVZQX3No YTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEzODQgUFNTIikp Ci0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90 YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTUxMiwgc2l6ZW9m KGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCi0rCi0r CWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ri cykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTEp LAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNI QTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQgbm90IHN1cHBvcnRlZCBp biBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywg c2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMjU2LCBzaXplb2Yoa2F0 X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMzg0KSwKLSsJ CQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTM4 NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMxX1NIQTUx Miwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9zaGE1MTIoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkKLSsJCWdvdG8gZXJy OwotKwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2Zy ZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkpOwotKwlyZXR1cm4gcmV0 OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwyODEgQEAKLSsv KiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsg KiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0 aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAq IAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVy Y2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhl YXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2Rl IGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhh c2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1 bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVk IGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIg aXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCBy ZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGlu Ci0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2Fn ZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmli dXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2Vk LgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHBy b2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFs KSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29m dHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAg IFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMg ZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGlj IHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmlj IGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRp cmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRn ZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot KyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24g dGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZh dGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5u b3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRp b24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICov Ci0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDx0aW1lLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2V4dGVybiBpbnQgZmlwc19jaGVja19yc2Eo UlNBICpyc2EpOwotKyNlbmRpZgotKwotKy8qIFg5LjMxIFJTQSBrZXkgZGVyaXZhdGlvbiBhbmQg Z2VuZXJhdGlvbiAqLwotKwotK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05V TSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCi0rCQkJY29uc3QgQklH TlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0 IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKLSsJCQlj b25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLSsJewotKwlCSUdOVU0gKnIwPU5VTEwsKnIx PU5VTEwsKnIyPU5VTEwsKnIzPU5VTEw7Ci0rCUJOX0NUWCAqY3R4PU5VTEwsKmN0eDI9TlVMTDsK LSsKLSsJaWYgKCFyc2EpIAotKwkJZ290byBlcnI7Ci0rCi0rCWN0eCA9IEJOX0NUWF9uZXcoKTsK LSsJaWYgKCFjdHgpIAotKwkJZ290byBlcnI7Ci0rCUJOX0NUWF9zdGFydChjdHgpOwotKwotKwly MCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIyID0gQk5f Q1RYX2dldChjdHgpOwotKwlyMyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKHIzID09IE5V TEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFyc2EtPmUpCi0rCQl7Ci0rCQlyc2EtPmUgPSBCTl9k dXAoZSk7Ci0rCQlpZiAoIXJzYS0+ZSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsJZWxzZQotKwkJ ZSA9IHJzYS0+ZTsKLSsKLSsJLyogSWYgbm90IGFsbCBwYXJhbWV0ZXJzIHByZXNlbnQgb25seSBj YWxjdWxhdGUgd2hhdCB3ZSBjYW4uCi0rCSAqIFRoaXMgYWxsb3dzIHRlc3QgcHJvZ3JhbXMgdG8g b3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgotKwkgKi8KLSsKLSsJaWYgKFhwICYmICFyc2Et PnApCi0rCQl7Ci0rCQlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJCWlmICghcnNhLT5wKQotKwkJCWdv dG8gZXJyOwotKwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnAsIHAxLCBw MiwKLSsJCQkJCVhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7Ci0rCQl9 Ci0rCi0rCWlmIChYcSAmJiAhcnNhLT5xKQotKwkJewotKwkJcnNhLT5xID0gQk5fbmV3KCk7Ci0r CQlpZiAoIXJzYS0+cSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJp bWVfZXgocnNhLT5xLCBxMSwgcTIsCi0rCQkJCQlYcSwgWHExLCBYcTIsIGUsIGN0eCwgY2IpKQot KwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotKwkJewot KwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCXJldHVybiAyOwot KwkJfQotKwotKwkvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cgY2FsY3Vs YXRlIGFsbCByZW1haW5pbmcgCi0rCSAqIGNvbXBvbmVudHMuCi0rCSAqLwotKwotKwkvKiBjYWxj dWxhdGUgbiAqLwotKwlyc2EtPm49Qk5fbmV3KCk7Ci0rCWlmIChyc2EtPm4gPT0gTlVMTCkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJzYS0+cSxjdHgpKQotKwkJ Z290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkICovCi0rCWlmICghQk5fc3ViKHIxLHJzYS0+ cCxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyogcC0xICovCi0rCWlmICghQk5fc3Vi KHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyogcS0xICovCi0rCWlm ICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsJLyogKHAtMSkocS0xKSAqLwot KwotKwlpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlm ICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCi0rCQlnb3RvIGVycjsJLyogTENNKChw LTEpKHEtMSkpICovCi0rCi0rCWN0eDIgPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4MikKLSsJ CWdvdG8gZXJyOwotKwotKwlyc2EtPmQ9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPmUscjAsY3R4 Mik7CS8qIGQgKi8KLSsJaWYgKHJzYS0+ZCA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCS8q IGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLwotKwlyc2EtPmRtcDE9Qk5fbmV3KCk7Ci0rCWlmIChy c2EtPmRtcDEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21vZChyc2EtPmRtcDEs cnNhLT5kLHIxLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgbW9kIChx LTEpICovCi0rCXJzYS0+ZG1xMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1xMSA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxyc2EtPmQscjIsY3R4KSkKLSsJ CWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCi0rCXJz YS0+aXFtcD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+cSxyc2EtPnAsY3R4Mik7Ci0rCi0rCWVy cjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVl KGN0eCk7Ci0rCQl9Ci0rCWlmIChjdHgyKQotKwkJQk5fQ1RYX2ZyZWUoY3R4Mik7Ci0rCS8qIElm IHRoaXMgaXMgc2V0IGFsbCBjYWxscyBzdWNjZXNzZnVsICovCi0rCWlmIChyc2EgJiYgcnNhLT5p cW1wICE9IE5VTEwpCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLSsKLStp bnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklH TlVNICplLCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rID0gMDsKLSsJQklHTlVNICpYcCA9 IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJOX0NUWCAqY3R4ID0gTlVMTDsKLSsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRT KQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VY LEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlp ZiAoYml0cyAmIDB4ZmYpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9H RU5FUkFURV9LRVlfRVgsRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCk7Ci0rCSAgICByZXR1cm4g MDsKLSsJICAgIH0KLSsKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0r CWN0eCA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgpCi0rCQlnb3RvIGVycm9yOwotKwotKwlC Tl9DVFhfc3RhcnQoY3R4KTsKLSsJWHAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCVhxID0gQk5fQ1RY X2dldChjdHgpOwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0cywgY3R4 KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXJzYS0+cCA9IEJOX25ldygpOwotKwlyc2EtPnEgPSBC Tl9uZXcoKTsKLSsJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0r CS8qIEdlbmVyYXRlIHR3byBwcmltZXMgZnJvbSBYcCwgWHEgKi8KLSsKLSsJaWYgKCFCTl9YOTMx X2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCi0r CQkJCQllLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghQk5fWDkzMV9nZW5l cmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhxLAotKwkJCQkJ ZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwkvKiBTaW5jZSByc2EtPnAgYW5kIHJz YS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJpdmUKLSsJICogcmVtYWluaW5n IFJTQSBjb21wb25lbnRzLgotKwkgKi8KLSsKLSsJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNh LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBlLCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCi0rCSAgICBnb3RvIGVycm9yOwotKyNlbmRp ZgotKwotKwlvayA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAoY3R4KQotKwkJewotKwkJQk5fQ1RY X2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsKLSsJaWYgKG9rKQotKwkJ cmV0dXJuIDE7Ci0rCi0rCXJldHVybiAwOwotKwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxm dGVzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDk5 IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRp YyBjaGFyIHRlc3RbXVs2MF09Ci0rICAgIHsKLSsgICAgIiIsCi0rICAgICJhYmMiLAotKyAgICAi YWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEi Ci0rICAgIH07Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hBX0RJR0VT VF9MRU5HVEhdPQotKyAgICB7Ci0rICAgIHsgMHhkYSwweDM5LDB4YTMsMHhlZSwweDVlLDB4NmIs MHg0YiwweDBkLDB4MzIsMHg1NSwKLSsgICAgICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5 MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCi0rICAgIHsgMHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3 LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwKLSsgICAgICAweDI1LDB4NzEsMHg3OCwweDUwLDB4 YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlkIH0sCi0rICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0 NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEsMHhhZSwKLSsgICAgICAweDRhLDB4YTEsMHhmOSww eDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3MCwweGYxIH0sCi0rICAgIH07Ci0rCi0rdm9pZCBG SVBTX2NvcnJ1cHRfc2hhMSgpCi0rICAgIHsKLSsgICAgdGVzdFsyXVswXSsrOwotKyAgICB9Ci0r Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAg IGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyArK24pCi0rCXsKLSsJ dW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rCUVWUF9EaWdlc3QodGVz dFtuXSxzdHJsZW4odGVzdFtuXSksbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOwotKwlpZiht ZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1 cm4gMDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEu Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMK LS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jLmZp cHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMTItMDEtMDUgMTM6MjI6MzAu MDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDE3MyBAQAotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgot KyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lm bmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsgcmV0dXJu IDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3ZvaWQgT1BFTlNTTF9jbGVh bnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1kX2N0eCxTSEFfQ1RYICpv X2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAgewotKyAgICBzaXplX3QgbGVu PXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFD X01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxP Q0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJewotKwlTSEExX0luaXQobWRf Y3R4KTsKLSsJU0hBMV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlTSEExX0ZpbmFsKGtleW1k LG1kX2N0eCk7Ci0rCWxlbj0yMDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXltZCxrZXks bGVuKTsKLSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxl bik7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlw YWRbaV09MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG1kX2N0eCk7Ci0rICAgIFNIQTFf VXBkYXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1B Q19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKLSsgICAgU0hB MV9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgscGFkLFNIQV9DQkxPQ0spOwot KyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEFf Q1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBi dWZbMjBdOwotKwotKyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOwotKyAgICBTSEExX1VwZGF0 ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTFfRmluYWwobWQsb19jdHgpOwotKyAg ICB9Ci0rCi0rI2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAg IHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtleVtdPSJldGFvbnJp c2hkbGN1cGZtIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2MgPCAyKQot Kwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0rCWV4aXQo MSk7Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5 IikpCi0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQu Li4gKi8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlGSUxFICpm PWZvcGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQV9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNpZ25l ZCBjaGFyIG1kWzIwXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkgICAgewotKwkgICAgcGVy cm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsKLSsJaG1hY19pbml0KCZt ZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsKLSsJICAgIGNoYXIgYnVm WzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1ZixmKTsKLSsKLSsJ ICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJCSAgICB7Ci0rCQkgICAg cGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0eCxidWYsbCk7Ci0rCSAg ICB9Ci0rCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwotKwlpZiAoYmluYXJ5KQot KwkgICAgewotKwkgICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKLSsJICAgIGJyZWFrOwkvKiAu Li4gZm9yIHNpbmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rCXByaW50ZigiSE1BQy1TSEEx KCVzKT0gIixhcmd2W25dKTsKLSsJZm9yKGk9MCA7IGkgPCAyMCA7ICsraSkKLSsJICAgIHByaW50 ZigiJTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsjZW5kaWYKLSsgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBz L2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc190 ZXN0X3N1aXRlLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3Vp dGUuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMJMjAxMi0wMS0wNSAxMzoyMjoz MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNTg4IEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKgotKyAqIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3Qg ZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGluZwotKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMt MTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUKLSsgKiBPcGVu U1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGlj Ci0rICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5 IGRlbGliZXJhdGVseQotKyAqIHBvaW50aW5nIHRvIGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNo Ci0rICoKLSsgKiBDb250cmlidXRlZCBieSBTdGV2ZSBNYXJxdWVzcy4KLSsgKgotKyAqLwotKyNp bmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUu aD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKwotKwotKyNpZm5kZWYgT1BFTlNT TF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSsgICAgewotKyAgICBw cmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSsgICAgfQotKyNl bHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5o IgotKwotKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlm eSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKLSsqLwotK3N0YXRpYyBpbnQgRklQ U19hZXNfdGVzdCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHBs dG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIga2V5 WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTZ9OwotKwl1bnNp Z25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7Ci0rCUVWUF9DSVBIRVJf Q1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJaWYgKEVWUF9DaXBoZXJJ bml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkK LSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDE2KTsK LSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtl eSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1w LCBjaXRtcCwgMTYpOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKLSsJCWdv dG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0 eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStzdGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZv aWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbOF07Ci0rCXVu c2lnbmVkIGNoYXIgY2l0bXBbOF07Ci0rICAgIAl1bnNpZ25lZCBjaGFyIGtleVtdID0geyAxLDIs Myw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwKLSsJCSAgICAgICAgICAg ICAgMTksMjAsMjEsMjIsMjMsMjR9OwotKyAgICAJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9 IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKLSsJRVZQX0NJUEhF Ul9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhl ckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0g MCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgp OwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEws IGtleSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIHBs dG1wLCBjaXRtcCwgOCk7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgOCkpCi0rCQln b3RvIGVycjsKLSsJcmV0ID0gMTsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyoKLSsgKiBEU0E6IGdlbmVyYXRlIGtleXMg YW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGljIGludCBGSVBT X2RzYV90ZXN0KGludCBiYWQpCi0rICAgIHsKLSsgICAgRFNBICpkc2EgPSBOVUxMOwotKyAgICBF VlBfUEtFWSBwazsKLSsgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsK LSsgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsg ICAgaW50IHIgPSAwOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCi0rICAgIEVSUl9jbGVhcl9l cnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKyAgICBkc2EgPSBEU0FfbmV3 KCk7Ci0rICAgIGlmICghZHNhKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJZ290byBl bmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwlnb3RvIGVuZDsKLSsgICAg aWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7Ci0rCi0rICAgIHBr LnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwotKyAgICBp ZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZW5k OwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAx KSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xl biwgJnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1j dHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5 VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAg IHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKLSsgICAgZW5kOgot KyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBpZiAoZHNhKQotKyAgCSAgRFNB X2ZyZWUoZHNhKTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rLyoKLSsgKiBSU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlm eSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGljIGludCBGSVBTX3JzYV90ZXN0KGludCBi YWQpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRl eHRbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOwotKyAg ICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgQklHTlVNICpibjsKLSsgICAgRVZQX01EX0NUWCBt Y3R4OwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAgaW50IHIgPSAwOwotKwotKyAgICBFUlJfY2xl YXJfZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAga2V5ID0gUlNB X25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAgICBpZiAoIWtleSB8fCAhYm4pCi0rCXJl dHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOwotKyAgICBpZiAoIVJTQV9nZW5l cmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQotKwlyZXR1cm4gMDsKLSsgICAgQk5fZnJl ZShibik7Ci0rICAgIGlmIChiYWQpCi0rCSAgICBCTl9hZGRfd29yZChrZXktPm4sIDEpOwotKwot KyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOwotKyAgICBway5wa2V5LnJzYSA9IGtleTsKLSsK LSsgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQotKwln b3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNp emVvZihpbnB1dF9wdGV4dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25G aW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAgIGlmICgh RVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQotKwlnb3RvIGVuZDsK LSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlu cHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgm bWN0eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51 cCgmbWN0eCk7Ci0rICAgIGlmIChrZXkpCi0rICAJICAgIFJTQV9mcmVlKGtleSk7Ci0rICAgIGlm IChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNI QTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtu b3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNf c2hhMV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNU X0xFTkdUSF0gPQotKyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFh LCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAweDM4LCAweDBjLCAweDhiLCAweDFlLCAw eDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10g PSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5H VEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0 cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpKSByZXR1cm4gMDsK LSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2gg b2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0 ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQotKyAg ICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9Ci0r CXsweGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4 OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCi0rCSAweDYsIDB4ZWMsIDB4 OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYs IDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0 YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RI XTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIs c2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpKSByZXR1cm4gMDsK LSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2gg b2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0 ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3QoKQotKyAg ICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9Ci0r CXsweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0LCAweDc4LCAweDg4LCAweGRmLCAw eDg4LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAotKwkgMHgxNiwgMHgxZiwg MHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhiMiwgMHhk MCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKLSsJIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4 MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDks IDB4NDAsIDB4MjIsCi0rCSAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAweDIyLCAweDlkLCAweDI3 LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAweDJkLCAweDQyLCAweDFkLCAweGEzfTsK LSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWdu ZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwg RVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAobWQsZGlnZXN0 LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9 Ci0rCi0rLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBh bmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0r c3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBj aGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2Ft cGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQot Kwl7MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwg MHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKLSsJIDB4YjIsIDB4ZmIs IDB4ZWMsIDB4YzZ9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVd OwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK LSsgICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2 KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91 dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsv KiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRp YyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFy IGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxl IHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7 MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhm ZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKLSsJIDB4ZTUsIDB4NjIsIDB4 NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9 OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNp Z25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFI TUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZv dXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hB MjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBr bm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBT X2htYWNfc2hhMjU2X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAi ZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweGU5LCAweDE3 LCAweGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LCAw eDAyLCAweGY1LCAweDcyLCAweDMzLCAweDg3LAotKwkgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3Yiwg MHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhk YSwgMHgyNCwgMHhmNH07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVv ZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZh bCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStz dGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K LSsJezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYs IDB4NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCi0rCSAweGUyLCAweGRm LCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAweDFiLCAw eGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAotKwkgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwg MHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5 YiwgMHg4OCwgMHgxY307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVv ZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZh bCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStz dGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K LSsJezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMs IDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCi0rCSAweGY3LCAweGQx LCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLCAw eGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAotKwkgMHhkNywgMHg3OSwgMHgwYSwgMHhhNSwg MHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3 ZiwgMHhlYiwgMHg5YywKLSsJIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4 ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9 OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNp Z25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFI TUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZv dXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKwotKy8qIERIOiBn ZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycwotKyovCi0rc3RhdGljIGludCBkaF90ZXN0KCkKLSsg ICAgewotKyAgICBESCAqZGg7Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBkaCA9IEZJ UFNfZGhfbmV3KCk7Ci0rICAgIGlmICghZGgpCi0rCXJldHVybiAwOwotKyAgICBpZiAoIURIX2dl bmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5VTEwpKQotKwlyZXR1cm4gMDsKLSsg ICAgRklQU19kaF9mcmVlKGRoKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBaZXJv aXplCi0rKi8KLStzdGF0aWMgaW50IFplcm9pemUoKQotKyAgICB7Ci0rICAgIFJTQSAqa2V5Owot KyAgICBCSUdOVU0gKmJuOwotKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0gCi0rCXsg MHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0 NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OwotKyAgICBpbnQgaSwgbjsK LSsKLSsgICAga2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAg IGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUz Nyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCi0r CXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgCi0rICAgIG4gPSBCTl9udW1fYnl0 ZXMoa2V5LT5kKTsKLSsgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUg a2V5XG4iLCBuKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4i KTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKyAgICBCTl9yYW5kKGtleS0+ ZCxuKjgsLTEsMCk7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4i KTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKwotKyAgICBwcmludGYoIlx0 Y2hhciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihp ID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ld KTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsgICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXpl b2YgdXNlcmtleSk7Ci0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3Zlcndy aXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkr KykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0rICAgICAgICBwcmludGYoIlxuIik7Ci0r Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rc3RhdGljIGludCBFcnJvcjsKLStjb25zdCBj aGFyICogRmFpbChjb25zdCBjaGFyICptc2cpCi0rICAgIHsKLSsgICAgZG9fcHJpbnRfZXJyb3Jz KCk7Ci0rICAgIEVycm9yKys7Ci0rICAgIHJldHVybiBtc2c7IAotKyAgICB9Ci0rCi0raW50IG1h aW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsKLSsgICAgaW50IGRvX2NvcnJ1cHRf cnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7Ci0rICAgIGludCBiYWRf cnNhID0gMCwgYmFkX2RzYSA9IDA7Ci0rICAgIGludCBkb19ybmdfc3RpY2sgPSAwOwotKyAgICBp bnQgbm9fZXhpdCA9IDA7Ci0rCi0rICAgIHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNh dGlvblxuXG4iKTsKLSsKLSsgICAgLyogTG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwg aWYgYW55ICovCi0rICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAyNCk7Ci0rCi0rICAgIGlm IChhcmd2WzFdKSB7Ci0rICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCi0rICAgICAg ICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1 cHRfYWVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9u IHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgImRlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RlcygpOwotKyAg ICAgICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29y cnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwg ImRzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgpOwotKyAgICAgICAgICAg IHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJyc2EiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2EoKTsKLSsgICAgICAg ICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24g d2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChh cmd2WzFdLCAicnNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsK LSsJICAgIGJhZF9yc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7Ci0rCSAgICBkb19jb3JydXB0X3Jz YV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJpbnRmKCJS U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVk IGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRz YWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Ci0rCSAgICBiYWRf ZHNhID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgewotKwkgICAgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0g MTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5c biIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikpIHsKLSsg ICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOwotKyAgICAgICAgICAgIHByaW50ZigiU0hB LTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKwl9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgInJuZyIpKSB7Ci0rCSAgICBGSVBTX2NvcnJ1cHRfcm5nKCk7Ci0rCX0gZWxzZSBp ZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgewotKwkgICAgZG9fcm5nX3N0aWNrID0g MTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKwkgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNr IGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAg IHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7Ci0rICAgICAgICAgICAg ZXhpdCgxKTsKLSsgICAgICAgIH0KLSsJaWYgKCFub19leGl0KSB7Ci0rICAgICAgICAJaWYgKCFG SVBTX21vZGVfc2V0KDEpKSB7Ci0rIAkJICAgIGRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAg CSAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIpOwotKwkJICAgIGV4aXQo MSk7Ci0rCQl9Ci0rICAgICAgICAJcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1 bFxuIik7Ci0rICAgICAgICAJZXhpdCgwKTsKLSsJfQotKyAgICB9Ci0rCi0rICAgIC8qIE5vbi1B cHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjEu IE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAg cHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYo IGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0r ICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAotKyAgICAqLwotKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKLSsgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7Ci0r ICAgIGlmICghRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsg ICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAg cHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsKLSsgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikK LSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOwotKyAgICBpZiAoZG9fY29y cnVwdF9yc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7 Ci0rICAgIGlmIChkb19ybmdfc3RpY2spCi0rICAgICAgICAgICAgRklQU19ybmdfc3RpY2soKTsK LSsKLSsgICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAgICBwcmlu dGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBT X2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwot KyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAg ICAqLwotKyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIERFUy1DQkMg ZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNS4gREVTLUVDQiBl bmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2RlczNfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogRFNB IGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbgotKyAgICAqLwotKyAgICBw cmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4i KTsKLSsgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTEgaGFzaAotKyAgICAqLwot KyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19zaGEx X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAg IC8qIFNIQS0yNTYgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdiLiBTSEEtMjU2IGhhc2gu Li4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6 ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtNTEyIGhhc2gKLSsgICAgKi8K LSsgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19z aGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsK LSsgICAgLyogSE1BQy1TSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2QuIEhNQUMt U0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGExX3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hB LTIyNCBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4u Iik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTIyNF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAot KyAgICAqLwotKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBw cmludGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMzg0IGhhc2gKLSsgICAgKi8KLSsg ICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBT X2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCi0rICAgICovCi0rICAgIHByaW50Zigi N2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTUx Ml90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAg ICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KLSsgICAgKi8KLSsgICAg cHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxu Iik7Ci0rICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsg ICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgotKwkgICAg OiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOwotKwotKyAgICAvKiBaZXJvaXphdGlv bgotKyAgICAqLwotKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4uLlxuIik7Ci0rICAgIHBy aW50ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgotKwkgICAgOiBG YWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0rCi0rICAgIHByaW50ZigiXG5BbGwg dGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7Ci0rICAgIHJldHVybiBF cnJvciA/IDEgOiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwc19sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwc19sb2Ns LmgKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwc19sb2NsLmguZmlwcwkyMDEyLTAxLTA1 IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBz X2xvY2wuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw3 MiBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0rdm9p ZCBmaXBzX3dfbG9jayh2b2lkKTsKLSt2b2lkIGZpcHNfd191bmxvY2sodm9pZCk7Ci0rdm9pZCBm aXBzX3JfbG9jayh2b2lkKTsKLSt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCk7Ci0raW50IGZpcHNf aXNfc3RhcnRlZCh2b2lkKTsKLSt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCk7Ci0raW50IGZp cHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKLStpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2 b2lkKTsKLSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7Ci0raW50IGZpcHNfY2xl YXJfb3duaW5nX3RocmVhZCh2b2lkKTsKLSsKLSsjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNU X1NJWkUJMTYKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vZmlwcy9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9m aXBzL01ha2VmaWxlLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw4MSBAQAotKyMKLSsjIE9wZW5TU0wvY3J5cHRv L2ZpcHMvTWFrZWZpbGUKLSsjCi0rCi0rRElSPQlmaXBzCi0rVE9QPQkuLi8uLgotK0NDPQljYwot K0lOQ0xVREVTPQotK0NGTEFHPS1nCi0rTUFLRUZJTEU9CU1ha2VmaWxlCi0rQVI9CQlhciByCi0r Ci0rQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotKwotK0dFTkVSQUw9TWFrZWZpbGUKLStU RVNUPWZpcHNfdGVzdF9zdWl0ZS5jIGZpcHNfcmFuZHRlc3QuYwotK0FQUFM9Ci0rCi0rTElCPSQo VE9QKS9saWJjcnlwdG8uYQotK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3Nl bGZ0ZXN0LmMgZmlwc19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAotKyAg ICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhMV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2Rz YV9zZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMKLSsKLStM SUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNfaG1hY19z ZWxmdGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3Qu byBmaXBzX3NoYTFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19y YW5kLm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19z dGFuZGFsb25lX3NoYTEuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFE RVI9CSQoRVhIRUFERVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikK LSsKLSt0b3A6Ci0rCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikg c3ViX2FsbCkKLSsKLSthbGw6CWxpYgotKwotK2xpYjoJJChMSUJPQkopCi0rCSQoQVIpICQoTElC KSAkKExJQk9CSikKLSsJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0rCUB0 b3VjaCBsaWIKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtl ZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwv bWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotKwlAJChQRVJMKSAk KFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0rCUAkKFBFUkwpICQoVE9Q KS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStpbnN0YWxsOgotKwlAWyAt biAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0r CUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLSsJ ZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9v cGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1Ap L2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3RhZ3M6Ci0rCWN0YWdzICQo U1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQo U1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91 bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURFUEVORCkgLS0gJChDRkxB RykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLSsKLStkY2xl YW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3By aW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLSsJbXYgLWYgTWFrZWZp bGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICoubyAqLm9iaiBsaWIgdGFn cyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0rIyBETyBOT1QgREVMRVRF IFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotKwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2htYWMvaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJ MjAxMC0wNi0xNSAxOToyNTowOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vaG1hYy9obWFjLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBA IC03Nyw2ICs3NywxMyBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZv Ci0gCi0gCWlmIChrZXkgIT0gTlVMTCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlp ZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQotKwkJJiYg KCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0r CQkgfHwgIShjdHgtPmlfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9X KQotKwkJIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19B TExPVykpKQotKwkJCWdvdG8gZXJyOwotKyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJCWo9RVZQX01E X2Jsb2NrX3NpemUobWQpOwotIAkJT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgt PmtleSkpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL01ha2VmaWxlLmZpcHMgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL01h a2VmaWxlLmZpcHMJMjAxMC0wNy0yNyAwMDowOTo1OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vTWFrZWZpbGUJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0zNCwxNCArMzQsMTQgQEAgR0VORVJBTD1NYWtlZmlsZSBSRUFETUUgY3J5cHRv LWxpYi5jb20gaQotIAotIExJQj0gJChUT1ApL2xpYmNyeXB0by5hCi0gU0hBUkVEX0xJQj0gbGli Y3J5cHRvJChTSExJQl9FWFQpCi0tTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBt ZW1fZGJnLmMgY3ZlcnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9f dGltZS5jIG9fc3RyLmMgb19kaXIuYwotLUxJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1fZGJn Lm8gY3ZlcnNpb24ubyBleF9kYXRhLm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGltZS5v IG9fc3RyLm8gb19kaXIubyAkKENQVUlEX09CSikKLStMSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMg bWVtX2Nsci5jIG1lbV9kYmcuYyBjdmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGlj LmMgdWlkLmMgb190aW1lLmMgb19zdHIuYyBvX2Rpci5jIG9faW5pdC5jIGZpcHNfZXJyLmMKLStM SUJPQko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0YS5vIGNw dF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gb19pbml0Lm8g Zmlwc19lcnIubyAkKENQVUlEX09CSikKLSAKLSBTUkM9ICQoTElCU1JDKQotIAotIEVYSEVBREVS PSBjcnlwdG8uaCBvcGVuc3Nsdi5oIG9wZW5zc2xjb25mLmggZWJjZGljLmggc3ltaGFja3MuaCBc Ci0gCW9zc2xfdHlwLmgKLS1IRUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBtZDMyX2NvbW1v bi5oIG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAkKEVYSEVBREVSKQotK0hFQURFUj0JY3J5cHRs aWIuaCBidWlsZGluZi5oIGZpcHNfbG9jbC5oIG1kMzJfY29tbW9uLmggb190aW1lLmggb19zdHIu aCBvX2Rpci5oICQoRVhIRUFERVIpCi0gCi0gQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhF QURFUikKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCi0tLS0gb3BlbnNzbC0x LjAuMGYvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMDQtMDctMjUgMjE6MTA6NDEuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTYxLDYgKzYxLDExIEBACi0g I2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotICNpbmNsdWRl IDxvcGVuc3NsL21kYzIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotICN1 bmRlZiBjMmwKLSAjZGVmaW5lIGMybChjLGwpCShsID0oKERFU19MT05HKSgqKChjKSsrKSkpICAg ICwgXAotQEAgLTc1LDcgKzgwLDcgQEAKLSAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChs KT4+MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1pbnQgTURDMl9Jbml0KE1EQzJf Q1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNREMyKQotIAl7Ci0gCWMtPm51bT0wOwot IAljLT5wYWRfdHlwZT0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kYzIvbWRj Mi5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kYzIvbWRjMi5oCi0tLS0gb3BlbnNzbC0x LjAuMGYvY3J5cHRvL21kYzIvbWRjMi5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWRjMi9tZGMyLmgJMjAxMi0wMS0w NSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC04MCw3ICs4MCw5IEBAIHR5cGVkZWYgc3Ry dWN0IG1kYzJfY3R4X3N0Ci0gCWludCBwYWRfdHlwZTsgLyogZWl0aGVyIDEgb3IgMiwgZGVmYXVs dCAxICovCi0gCX0gTURDMl9DVFg7Ci0gCi0tCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBw cml2YXRlX01EQzJfSW5pdChNREMyX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1EQzJfSW5pdChN REMyX0NUWCAqYyk7Ci0gaW50IE1EQzJfVXBkYXRlKE1EQzJfQ1RYICpjLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTURDMl9GaW5hbCh1bnNpZ25lZCBjaGFy ICptZCwgTURDMl9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kMi9t ZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAwNy0wOC0zMSAxMjox MjozNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQyL21kMl9k Z3N0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Miw2ICs2Miwx MSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSAKLSBjb25zdCBjaGFyIE1EMl92ZXJzaW9uW109Ik1EMiIgT1BFTlNTTF9W RVJTSU9OX1BURVhUOwotIAotQEAgLTExNiw3ICsxMjEsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0 aW9ucyh2b2lkKQotIAkJcmV0dXJuKCJtZDIoaW50KSIpOwotIAl9Ci0gCi0taW50IE1EMl9Jbml0 KE1EMl9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KE1EMikKLSAJewotIAljLT5udW09 MDsKLSAJbWVtc2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9tZDIvbWQyLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQy L21kMi5oCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kMi9tZDIuaC5maXBzCTIwMTItMDEt MDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21k Mi9tZDIuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTgxLDYgKzgx LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKLSAJfSBNRDJfQ1RYOwotIAotIGNvbnN0 IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJp dmF0ZV9NRDJfSW5pdChNRDJfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgTUQyX0luaXQoTUQyX0NU WCAqYyk7Ci0gaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAq ZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1EMl9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQy X0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgIm1kNF9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0 IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAt NzAsNyArNzUsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9WCi0g I2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNkZWZpbmUg SU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1pbnQgTUQ0X0luaXQo TUQ0X0NUWCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoTUQ0KQotIAl7Ci0gCW1lbXNldCAo YywwLHNpemVvZigqYykpOwotIAljLT5BPUlOSVRfREFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL21kNC9tZDQuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDQvbWQ0 LmgKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ0L21kNC5oLmZpcHMJMjAxMi0wMS0wNSAx MzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ0L21k NC5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTA1LDYgKzEwNSw5 IEBAIHR5cGVkZWYgc3RydWN0IE1ENHN0YXRlX3N0Ci0gCXVuc2lnbmVkIGludCBudW07Ci0gCX0g TUQ0X0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTUQ0X0luaXQo TUQ0X0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpOwotIGludCBN RDRfVXBkYXRlKE1ENF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGlu dCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENF9DVFggKmMpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL21kNS9tZDVfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kNS9tZDVfZGdz dC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAw MDAgKzAxMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNs dWRlICJtZDVfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1E NSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTcwLDcgKzc1LDcgQEAgY29uc3QgY2hh ciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVu c2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBs b25nKTB4MTAzMjU0NzZMCi0gCi0taW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCi0rRklQU19OT05f RklQU19NRF9Jbml0KE1ENSkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+ QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDUvbWQ1Lmgu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ1L21kNS5oCi0tLS0gb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL21kNS9tZDUuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kNS9tZDUuaAkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAotQEAgLTEwNSw2ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDVz dGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgbnVtOwotIAl9IE1ENV9DVFg7Ci0gCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotK2ludCBwcml2YXRlX01ENV9Jbml0KE1ENV9DVFggKmMpOwotKyNlbmRpZgot IGludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsKLSBpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RYICpjLCBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNo YXIgKm1kLCBNRDVfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZW0u Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZW0uYwotLS0tIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9tZW0uYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTc6NDcuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL21lbS5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCi1AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkICgqZnJlZV9sb2NrZWRfZnVu Yykodm9pZCAqKSAKLSAKLSAvKiBtYXkgYmUgY2hhbmdlZCBhcyBsb25nIGFzICdhbGxvd19jdXN0 b21pemVfZGVidWcnIGlzIHNldCAqLwotIC8qIFhYWCB1c2UgY29ycmVjdCBmdW5jdGlvbiBwb2lu dGVyIHR5cGVzICovCi0tI2lmZGVmIENSWVBUT19NREVCVUcKLSsjaWYgZGVmaW5lZChDUllQVE9f TURFQlVHKSAmJiAhZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0gLyogdXNlIGRlZmF1bHQgZnVuY3Rp b25zIGZyb20gbWVtX2RiZy5jICovCi0gc3RhdGljIHZvaWQgKCptYWxsb2NfZGVidWdfZnVuYyko dm9pZCAqLGludCxjb25zdCBjaGFyICosaW50LGludCkKLSAJPSBDUllQVE9fZGJnX21hbGxvYzsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9vX2luaXQuYy5m aXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL29faW5pdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1A QCAtMCwwICsxLDgwIEBACi0rLyogb19pbml0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9q ZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAq ICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhp cyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmlj IFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgot KyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPGVfb3MuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsKLSsvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBv cGVyYXRpb25zLgotKyAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKLSsgKi8K LSsKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0rCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0rCWlmICghZG9uZSkKLSsJCXsKLSsjaWZk ZWYgQ1JZUFRPX01ERUJVRwotKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KCk7Ci0rI2VuZGlm Ci0rCQlkb25lID0gMTsKLSsJCX0KLSsjZW5kaWYKLSsJfQotKwkJCi0rCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9vcGVuc3NsY29uZi5oLmluCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL29wZW5zc2xj b25mLmguaW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMTItMDEtMDUgMTM6MjI6MzAu MDAwMDAwMDAwICswMTAwCi1AQCAtMSw1ICsxLDIwIEBACi0gLyogY3J5cHRvL29wZW5zc2xjb25m LmguaW4gKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECi0rCi0rLyogSW5j bHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBl bmFibGUgYSBmZWF0dXJlCi0rICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5k LgotKyAqCi0rICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0 aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCi0rICogaW5zdGVhZDsgd2Ugd2FudCB0 byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxn b3JpdGhtcy5dCi0rICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZGVmaW5lIE9QRU5T U0xfRklQUwotKyNlbmRpZgotKwotKyNlbmRpZgotKwotIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ ICovCi0gI3VuZGVmIEkzODZfT05MWQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L3BrY3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcGtjczEyL3AxMl9j cnQuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAw OS0wMy0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vcGtjczEyL3AxMl9jcnQuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAot QEAgLTU5LDYgKzU5LDEwIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgImNyeXB0 bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSAKLSBzdGF0aWMg aW50IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NT MTJfU0FGRUJBRyAqYmFnKTsKLUBAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVh dGUoY2hhciAqcGFzcywgY2hhciAqCi0gCi0gCS8qIFNldCBkZWZhdWx0cyAqLwotIAlpZiAoIW5p ZF9jZXJ0KQotKwkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSkK LSsJCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOwot KwkJZWxzZQotKyNlbmRpZgotIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRS QzJfQ0JDOwotKwkJfQotIAlpZiAoIW5pZF9rZXkpCi0gCQluaWRfa2V5ID0gTklEX3BiZV9XaXRo U0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Ci0gCWlmICghaXRlcikKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9yYW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYW5kL21kX3JhbmQu Yy5maXBzCTIwMTAtMDYtMTYgMTU6MTc6MjIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCi1AQCAtMTI2LDYgKzEyNiwxMCBAQAotIAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gI2lmZGVmIEJOX0RFQlVH Ci0gIyBkZWZpbmUgUFJFRElDVAotQEAgLTM0Miw2ICszNDYsMTQgQEAgc3RhdGljIGludCBzc2xl YXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaAotICNlbmRpZgotIAlpbnQgZG9fc3Rpcl9wb29sID0g MDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkgICAgewot KwkgICAgRklQU2VycihGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMsRklQU19SX05PTl9GSVBTX01F VEhPRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSAjaWZkZWYgUFJF RElDVAotIAlpZiAocmFuZF9wcmVkaWN0YWJsZSkKLSAJCXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmFu ZC9yYW5kX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5m aXBzCTIwMDYtMTEtMjEgMjI6Mjk6NDEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAotQEAgLTcwLDYgKzcwLDEzIEBACi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5E X3N0cl9mdW5jdHNbXT0KLSAJewotK3tFUlJfRlVOQyhSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRf TUVUSE9EKSwJIkVOR19SQU5EX0dFVF9SQU5EX01FVEhPRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0Zf RklQU19SQU5EKSwJIkZJUFNfUkFORCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EX0JZ VEVTKSwJIkZJUFNfUkFORF9CWVRFUyJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EX1NF VF9EVCksCSJGSVBTX1JBTkRfU0VUX0RUIn0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9E VCksCSJGSVBTX1NFVF9EVCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVE KSwJIkZJUFNfU0VUX1BSTkdfU0VFRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfVEVT VF9NT0RFKSwJIkZJUFNfU0VUX1RFU1RfTU9ERSJ9LAotIHtFUlJfRlVOQyhSQU5EX0ZfUkFORF9H RVRfUkFORF9NRVRIT0QpLAkiUkFORF9nZXRfcmFuZF9tZXRob2QifSwKLSB7RVJSX0ZVTkMoUkFO RF9GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCi0gezAsTlVMTH0K LUBAIC03Nyw3ICs4NCwxNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0 c1tdCi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9yZWFzb25zW109Ci0gCXsK LSt7RVJSX1JFQVNPTihSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZpcHMgbWV0 aG9kIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX05PVF9JTl9URVNUX01PREUpICAgICAsIm5vdCBp biB0ZXN0IG1vZGUifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9fS0VZX1NFVCkgICAgICAgICAg ICwibm8ga2V5IHNldCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9P X01VQ0gpLCJwcm5nIGFza2luZyBmb3IgdG9vIG11Y2gifSwKLSt7RVJSX1JFQVNPTihSQU5EX1Jf UFJOR19FUlJPUikgICAgICAgICAgICwicHJuZyBlcnJvciJ9LAotK3tFUlJfUkVBU09OKFJBTkRf Ul9QUk5HX0tFWUVEKSAgICAgICAgICAgLCJwcm5nIGtleWVkIn0sCi0re0VSUl9SRUFTT04oUkFO RF9SX1BSTkdfTk9UX1JFS0VZRUQpICAgICAsInBybmcgbm90IHJla2V5ZWQifSwKLSt7RVJSX1JF QVNPTihSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQpICAgICwicHJuZyBub3QgcmVzZWVkZWQifSwK LSB7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfU0VFREVEKSAgICAgICwiUFJORyBub3Qgc2Vl ZGVkIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkp LCJwcm5nIHNlZWQgbXVzdCBub3QgbWF0Y2gga2V5In0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BS TkdfU1RVQ0spICAgICAgICAgICAsInBybmcgc3R1Y2sifSwKLSB7MCxOVUxMfQotIAl9OwotIAot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL3JhbmQvcmFuZC5oCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JhbmQv cmFuZC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAw MDAgKzAxMDAKLUBAIC0xMjgsMTEgKzEyOCwyOCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5n cyh2b2lkKTsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLwotIAot IC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5E X01FVEhPRAkJCSAxMDgKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMwotKyNkZWZp bmUgUkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCi0rI2RlZmluZSBSQU5EX0ZfRklQU19S QU5EX1NFVF9EVAkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAot KyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKLSsjZGVmaW5lIFJBTkRf Rl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1Ci0gI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFO RF9NRVRIT0QJCQkgMTAxCi0gI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAw Ci0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhP RAkJCQkgMTA1Ci0rI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2Ci0rI2Rl ZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJ TkdfRk9SX1RPT19NVUNICQkJIDEwMQotKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEw OAotKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQotKyNkZWZpbmUgUkFORF9SX1BS TkdfTk9UX1JFS0VZRUQJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVE CQkJIDEwMwotICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCi0rI2RlZmlu ZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAotKyNkZWZpbmUgUkFO RF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9y YW5kL3JhbmRfbGliLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjA0LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYW5kL3JhbmRfbGliLmMJMjAxMi0wMS0wNSAxMzoy MjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02MCw2ICs2MCwxMiBAQAotICNpbmNsdWRlIDx0aW1l Lmg+Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgot KyNpbmNsdWRlICJyYW5kX2xjbC5oIgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2VuZGlm Ci0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2lu ZS5oPgotICNlbmRpZgotQEAgLTEwMiw4ICsxMDgsMTkgQEAgY29uc3QgUkFORF9NRVRIT0QgKlJB TkRfZ2V0X3JhbmRfbWV0aG9kKAotIAkJCWZ1bmN0X3JlZiA9IGU7Ci0gCQllbHNlCi0gI2VuZGlm Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCWRlZmF1bHRfUkFORF9tZXRoID0gRklQU19tb2Rl KCkgPyBGSVBTX3JhbmRfbWV0aG9kKCkgOiBSQU5EX1NTTGVheSgpOwotKwkJfQotKwlpZiAoRklQ U19tb2RlKCkKLSsJCSYmIGRlZmF1bHRfUkFORF9tZXRoICE9IEZJUFNfcmFuZF9jaGVjaygpKQot KwkgICAgewotKwkgICAgUkFORGVycihSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QsUkFORF9S X05PTl9GSVBTX01FVEhPRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZWxzZQotIAkJ CWRlZmF1bHRfUkFORF9tZXRoID0gUkFORF9TU0xlYXkoKTsKLSAJCX0KLSsjZW5kaWYKLSAJcmV0 dXJuIGRlZmF1bHRfUkFORF9tZXRoOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vcmMyL3JjMi5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjMi9yYzIuaAotLS0t IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzIvcmMyLmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzIvcmMyLmgJMjAx Mi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC03OSw3ICs3OSw5IEBAIHR5cGVk ZWYgc3RydWN0IHJjMl9rZXlfc3QKLSAJUkMyX0lOVCBkYXRhWzY0XTsKLSAJfSBSQzJfS0VZOwot IAotLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShS QzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMp OwotKyNlbmRpZgotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKLSB2b2lkIFJDMl9lY2JfZW5jcnlwdChj b25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsUkMyX0tFWSAqa2V5LAot IAkJICAgICBpbnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzIvcmMy X3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzIvcmMyX3NrZXkuYwotLS0tIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBzCTIwMDctMDktMTggMjM6MTA6 MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjMi9yYzJfc2tl eS5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtNTcsNiArNTcsMTEg QEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yYzIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlICJyYzJfbG9jbC5oIgotIAotIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTZdPXsKLUBAIC05NCw4ICs5OSwyMCBAQCBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2Ci0gICogQlNBRkUgdXNlcyB0aGUg J3JldGFyZGVkJyB2ZXJzaW9uLiAgV2hhdCBJIHByZXZpb3VzbHkgc2hpcHBlZCBpcwotICAqIHRo ZSBzYW1lIGFzIHNwZWNpZnlpbmcgMTAyNCBmb3IgdGhlICdiaXRzJyBwYXJhbWV0ZXIuICBCc2Fm ZSB1c2VzCi0gICogYSB2ZXJzaW9uIHdoZXJlIHRoZSBiaXRzIHBhcmFtZXRlciBpcyB0aGUgc2Ft ZSBhcyBsZW4qOCAqLwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSB2b2lkIFJDMl9zZXRfa2V5 KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGJp dHMpCi0gCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19CQURfQUJPUlQoUkMyKQotKwlw cml2YXRlX1JDMl9zZXRfa2V5KGtleSwgbGVuLCBkYXRhLCBiaXRzKTsKLSsJfQotK3ZvaWQgcHJp dmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmRhdGEsCi0rCQkJCQkJCQlpbnQgYml0cykKLSsjZWxzZQotK3ZvaWQgUkMyX3NldF9rZXko UkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYml0 cykKLSsjZW5kaWYKLSsJewotIAlpbnQgaSxqOwotIAl1bnNpZ25lZCBjaGFyICprOwotIAlSQzJf SU5UICpraTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkw eC5wbC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbAotLS0t IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbC5maXBzCTIwMDktMDIt MTIgMTU6NDg6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3Jj NC9hc20vcmM0LXMzOTB4LnBsCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1A QCAtMjAyLDQgKzIwMiw2IEBAIFJDNF9vcHRpb25zOgotIC5zdHJpbmcJInJjNCg4eCxjaGFyKSIK LSBfX18KLSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3ByaXZhdGVfUkM0X3NldF9rZXkvZyBp ZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNvZGU7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsLmZpcHMgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9y YzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcwkyMDA5LTA0LTI3IDIxOjMxOjA0LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwJMjAx Mi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC00OTksNiArNDk5LDggQEAgX19f Ci0gCi0gJGNvZGUgPX4gcy8jKFtid2RdKS8kMS9nbTsKLSAKLSskY29kZSA9fiBzL1JDNF9zZXRf a2V5L3ByaXZhdGVfUkM0X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJp bnQgJGNvZGU7Ci0gCi0gY2xvc2UgU1RET1VUOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL3JjNC9hc20vcmM0LTU4Ni5wbC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNt L3JjNC01ODYucGwKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBs LmZpcHMJMjAwNy0xMi0wMiAyMjozMjowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAw MDAwICswMTAwCi1AQCAtMTY2LDggKzE2NiwxMiBAQCAkaWR4PSJlZHgiOwotIAotICZleHRlcm5h bF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKLSAKLSskc2V0a2V5ZnVuYyA9ICJSQzRfc2V0 X2tleSI7Ci0rJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9SQzRfc2V0X2tleSIgaWYgKCRFTlZ7RklQ U30gbmUgIiIpOwotKwotKwotICMgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksaW50IGxl bixjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLS0mZnVuY3Rpb25fYmVnaW4oIlJDNF9zZXRf a2V5Iik7Ci0rJmZ1bmN0aW9uX2JlZ2luKCRzZXRrZXlmdW5jKTsKLSAJJm1vdgkoJG91dCwmd3Bh cmFtKDApKTsJCSMgbG9hZCBrZXkKLSAJJm1vdgkoJGlkaSwmd3BhcmFtKDEpKTsJCSMgbG9hZCBs ZW4KLSAJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBkYXRhCi1AQCAtMjQ1LDcgKzI0 OSw3IEBAICRpZHg9ImVkeCI7Ci0gCSZ4b3IJKCJlYXgiLCJlYXgiKTsKLSAJJm1vdgkoJkRXUCgt OCwkb3V0KSwiZWF4Iik7CQkjIGtleS0+eD0wOwotIAkmbW92CSgmRFdQKC00LCRvdXQpLCJlYXgi KTsJCSMga2V5LT55PTA7Ci0tJmZ1bmN0aW9uX2VuZCgiUkM0X3NldF9rZXkiKTsKLSsmZnVuY3Rp b25fZW5kKCRzZXRrZXlmdW5jKTsKLSAKLSAjIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQp OwotICZmdW5jdGlvbl9iZWdpbl9CKCJSQzRfb3B0aW9ucyIpOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL3JjNC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQv TWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMJMjAw OS0wMi0xMSAxMTowMTozNi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vcmM0L01ha2VmaWxlCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAt MjEsOCArMjEsOCBAQCBURVNUPXJjNHRlc3QuYwotIEFQUFM9Ci0gCi0gTElCPSQoVE9QKS9saWJj cnlwdG8uYQotLUxJQlNSQz1yYzRfc2tleS5jIHJjNF9lbmMuYwotLUxJQk9CSj0kKFJDNF9FTkMp Ci0rTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jIHJjNF9mYmxrLmMKLStMSUJPQko9JChSQzRf RU5DKSByYzRfZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9yYzQvcmM0X2ZibGsuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9y YzQvcmM0X2ZibGsuYwotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvcmM0X2ZibGsuYy5m aXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL3JjNC9yYzRfZmJsay5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICsw MTAwCi1AQCAtMCwwICsxLDc1IEBACi0rLyogY3J5cHRvL3JjNC9yYzRfZmJsay5jICovCi0rLyog V3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRo ZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKi8KLSsKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4KLSsjaW5jbHVkZSAicmM0 X2xvY2wuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2VuZGlmCi0rCi0rLyogRklQUyBtb2RlIGJsb2NraW5nIGZvciBSQzQgaGFzIHRv IGJlIGRvbmUgc2VwYXJhdGVseSBzaW5jZSBSQzRfc2V0X2tleQotKyAqIG1heSBiZSBpbXBsZW1l bnRlZCBpbiBhbiBhc3NlbWJseSBsYW5ndWFnZSBmaWxlLgotKyAqLwotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSt2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3Qg dW5zaWduZWQgY2hhciAqZGF0YSkKLSsJewotKwlpZiAoRklQU19tb2RlKCkpCi0rCQlGSVBTX0JB RF9BQk9SVChSQzQpCi0rCXByaXZhdGVfUkM0X3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOwotKwl9 Ci0rI2VuZGlmCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmM0L3JjNC5oLmZp cHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9yYzQuaAotLS0tIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9yYzQvcmM0LmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvcmM0LmgJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKLUBAIC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IHJjNF9rZXlf c3QKLSAKLSAgCi0gY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9SQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNlbmRpZgotIHZvaWQgUkM0X3NldF9rZXko UkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSB2b2lk IFJDNChSQzRfS0VZICprZXksIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0 YSwKLSAJCXVuc2lnbmVkIGNoYXIgKm91dGRhdGEpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9yYzRf c2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMJMjAw Ny0wMS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vcmM0L3JjNF9za2V5LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBA IC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgotICNpbmNsdWRlICJy YzRfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIFJDNF92ZXJzaW9uW109IlJDNCIg T1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTg1LDcgKzkwLDExIEBAIGNvbnN0IGNoYXIg KlJDNF9vcHRpb25zKHZvaWQpCi0gICogRGF0ZTogV2VkLCAxNCBTZXAgMTk5NCAwNjozNTozMSBH TVQKLSAgKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBwcml2YXRlX1JDNF9zZXRf a2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsj ZWxzZQotIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhKQotKyNlbmRpZgotIAl7Ci0gICAgICAgICByZWdpc3RlciBSQzRfSU5U IHRtcDsKLSAgICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOwotQEAgLTEyNiw3ICsxMzUsMTIg QEAgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIAotIAkJICogbW9kdWxl Li4uCi0gCQkgKgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+Ci0gCQkgKi8KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCQl1bnNpZ25lZCBsb25nICppYTMyY2FwX3B0ciA9IE9QRU5TU0xfaWEzMmNh cF9sb2MoKTsKLSsJCWlmIChpYTMyY2FwX3B0ciAmJiAoKmlhMzJjYXBfcHRyICYgKDE8PDI4KSkp IHsKLSsjZWxzZQotIAkJaWYgKE9QRU5TU0xfaWEzMmNhcF9QICYgKDE8PDI4KSkgewotKyNlbmRp ZgotIAkJCXVuc2lnbmVkIGNoYXIgKmNwPSh1bnNpZ25lZCBjaGFyICopZDsKLSAKLSAJCQlmb3Ig KGk9MDtpPDI1NjtpKyspIGNwW2ldPWk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v cmlwZW1kL3JpcGVtZC5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JpcGVtZC9yaXBlbWQu aAotLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcwkyMDEyLTAx LTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9y aXBlbWQvcmlwZW1kLmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC05 MSw2ICs5MSw5IEBAIHR5cGVkZWYgc3RydWN0IFJJUEVNRDE2MHN0YXRlX3N0Ci0gCXVuc2lnbmVk IGludCAgIG51bTsKLSAJfSBSSVBFTUQxNjBfQ1RYOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LStpbnQgcHJpdmF0ZV9SSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKLSsjZW5kaWYK LSBpbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7Ci0gaW50IFJJUEVNRDE2MF9V cGRhdGUoUklQRU1EMTYwX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0g aW50IFJJUEVNRDE2MF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgUklQRU1EMTYwX0NUWCAqYyk7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjEzLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTU5LDYgKzU5LDExIEBACi0g I2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgInJtZF9sb2NsLmgiCi0gI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNv bnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIgT1BFTlNTTF9WRVJTSU9OX1BU RVhUOwotIAotQEAgLTY5LDcgKzc0LDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJS SVBFLU1EMTYwIgotICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywg dW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKLSAjICBlbmRpZgotIAotLWludCBSSVBFTUQx NjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChSSVBFTUQx NjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9UklQRU1EMTYwX0E7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2VheS5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRv L3JzYS9yc2FfZWF5LmMuZmlwcwkyMDExLTEwLTE5IDE2OjU4OjM0LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTItMDEtMDUgMTM6Mjc6 MDAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTE0LDYgKzExNCwxMCBAQAotICNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gI2lmbmRlZiBSU0FfTlVM TAotIAotQEAgLTEzOCw3ICsxNDIsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5 X21ldGg9ewotIAlCTl9tb2RfZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90 IHVzZSBNb250Z29tZXJ5IGlmICBlID09IDMgKi8KLSAJUlNBX2VheV9pbml0LAotIAlSU0FfZWF5 X2ZpbmlzaCwKLS0JMCwgLyogZmxhZ3MgKi8KLSsJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZs YWdzICovCi0gCU5VTEwsCi0gCTAsIC8qIHJzYV9zaWduICovCi0gCTAsIC8qIHJzYV92ZXJpZnkg Ki8KLUBAIC0xNTAsNiArMTU0LDE2IEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9QS0NTMV9TU0xl YXkodm9pZCkKLSAJcmV0dXJuKCZyc2FfcGtjczFfZWF5X21ldGgpOwotIAl9Ci0gCi0rLyogVXNh Z2UgZXhhbXBsZTsKLSsgKiAgICBNT05UX0hFTFBFUihyc2EsIGJuX2N0eCwgcCwgcnNhLT5mbGFn cyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsgKi8KLSsjZGVmaW5lIE1P TlRfSEVMUEVSKHJzYSwgY3R4LCBtLCBwcmVfY29uZCwgZXJyX2luc3RyKSBcCi0rCWlmKChwcmVf Y29uZCkgJiYgKChyc2EpLT5fbWV0aG9kX21vZF8jI20gPT0gTlVMTCkgJiYgXAotKwkJCSFCTl9N T05UX0NUWF9zZXRfbG9ja2VkKCYoKHJzYSktPl9tZXRob2RfbW9kXyMjbSksIFwKLSsJCQkJQ1JZ UFRPX0xPQ0tfUlNBLCBcCi0rCQkJCShyc2EpLT5tLCAoY3R4KSkpIFwKLSsJCWVycl9pbnN0cgot KwotIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZnJvbSwKLSAJICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGlu dCBwYWRkaW5nKQotIAl7Ci1AQCAtMTU4LDYgKzE3MiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlf cHVibGljX2VuY3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9D VFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkp Ci0rCQl7Ci0rCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2Vy cihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4p IDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIo UlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsK LSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2Jp dHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0Fl cnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0Up OwotQEAgLTIyMyw5ICsyNTQsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQo aW50IGZsCi0gCQlnb3RvIGVycjsKLSAJCX0KLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19DQUNIRV9QVUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21l dGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7 Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVf UFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxm LHJzYS0+ZSxyc2EtPm4sY3R4LAotIAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7Ci1A QCAtMzYxLDYgKzM5MCwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGlu dCBmCi0gCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gCUJOX0JMSU5ESU5HICpibGluZGluZyA9 IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7 Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNf Rl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwot KwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9Q RU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9G X1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJ CXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9u ZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlmICAgPSBC Tl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNDQ0LDkgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9w cml2YXRlX2VuY3J5cHQoaW50IGYKLSAJCWVsc2UKLSAJCQlkPSByc2EtPmQ7Ci0gCi0tCQlpZiAo cnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKLS0JCQlpZighQk5fTU9OVF9DVFhf c2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwg Y3R4KSkKLS0JCQkJZ290byBlcnI7Ci0rCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5m bGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAkJaWYgKCFyc2Et Pm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAotIAkJCQlyc2EtPl9tZXRob2Rf bW9kX24pKSBnb3RvIGVycjsKLUBAIC01MDQsNiArNTQ4LDIzIEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKLSAJQk5f QkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJ ewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsKLSsJCWlmIChCTl9u dW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJ CXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsK LSAJaWYoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9z dGFydChjdHgpOwotIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNTc3LDkgKzYzOCw3IEBA IHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAJCWVsc2UKLSAJCQlk ID0gcnNhLT5kOwotIAotLQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMp Ci0tCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENS WVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJCQlnb3RvIGVycjsKLSsJCU1PTlRfSEVM UEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3Rv IGVycik7Ci0gCQlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgs Ci0gCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpCi0gCQkgIGdvdG8gZXJyOwotQEAgLTYzOSw2ICs2 OTgsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAotIAl1bnNp Z25lZCBjaGFyICpidWY9TlVMTDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZ UFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0r Ci0rCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVM VVNfQklUUykKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQs IFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0K LSsjZW5kaWYKLSsKLSAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhf TU9EVUxVU19CSVRTKQotIAkJewotIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZ UFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLUBAIC02ODksOSArNzY1LDcgQEAgc3RhdGlj IGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAotIAkJZ290byBlcnI7Ci0gCQl9Ci0g Ci0tCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJaWYgKCFCTl9N T05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwg cnNhLT5uLCBjdHgpKQotLQkJCWdvdG8gZXJyOwotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwg cnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAlpZiAo IXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixyc2EtPmUscnNhLT5uLGN0eCwKLSAJCXJzYS0+ X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOwotQEAgLTczOSw2ICs4MTMsNyBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCi0gCUJJR05VTSAqcjEsKm0xLCp2cmZ5Owot IAlCSUdOVU0gbG9jYWxfZG1wMSxsb2NhbF9kbXExLGxvY2FsX2MsbG9jYWxfcjE7Ci0gCUJJR05V TSAqZG1wMSwqZG1xMSwqYywqcHIxOwotKwlpbnQgYm5fZmxhZ3M7Ci0gCWludCByZXQ9MDsKLSAK LSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci1AQCAtNzQ2LDQxICs4MjEsMzEgQEAgc3RhdGljIGludCBS U0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYwotIAltMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSAJ dnJmeSA9IEJOX0NUWF9nZXQoY3R4KTsKLSAKLS0JewotLQkJQklHTlVNIGxvY2FsX3AsIGxvY2Fs X3E7Ci0tCQlCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEw7Ci0tCi0tCQkvKiBNYWtlIHN1cmUg Qk5fbW9kX2ludmVyc2UgaW4gTW9udGdvbWVyeSBpbnRpYWxpemF0aW9uIHVzZXMgdGhlCi0tCQkg KiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcgKHVubGVzcyBSU0FfRkxBR19OT19DT05TVFRJTUUgaXMg c2V0KQotLQkJICovCi0tCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1F KSkKLS0JCQl7Ci0tCQkJQk5faW5pdCgmbG9jYWxfcCk7Ci0tCQkJcCA9ICZsb2NhbF9wOwotLQkJ CUJOX3dpdGhfZmxhZ3MocCwgcnNhLT5wLCBCTl9GTEdfQ09OU1RUSU1FKTsKLS0KLS0JCQlCTl9p bml0KCZsb2NhbF9xKTsKLS0JCQlxID0gJmxvY2FsX3E7Ci0tCQkJQk5fd2l0aF9mbGFncyhxLCBy c2EtPnEsIEJOX0ZMR19DT05TVFRJTUUpOwotLQkJCX0KLS0JCWVsc2UKLS0JCQl7Ci0tCQkJcCA9 IHJzYS0+cDsKLS0JCQlxID0gcnNhLT5xOwotLQkJCX0KLSsJLyogTWFrZSBzdXJlIG1vZF9pbnZl cnNlIGluIG1vbnRnb21lcmV5IGludGlhbGl6YXRpb24gdXNlIGNvcnJlY3QgCi0rCSAqIEJOX0ZM R19DT05TVFRJTUUgZmxhZy4KLSsJICovCi0rCWJuX2ZsYWdzID0gcnNhLT5wLT5mbGFnczsKLSsJ aWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0rCQl7Ci0rCQlyc2Et PnAtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7Ci0rCQl9Ci0rCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBwLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOwot KwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sgKi8KLSsJcnNhLT5wLT5mbGFncyA9IGJuX2Zs YWdzOwotIAotLQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFKQotLQkJ CXsKLS0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfcCwg Q1JZUFRPX0xPQ0tfUlNBLCBwLCBjdHgpKQotLQkJCQlnb3RvIGVycjsKLS0JCQlpZiAoIUJOX01P TlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfcSwgQ1JZUFRPX0xPQ0tfUlNBLCBx LCBjdHgpKQotLQkJCQlnb3RvIGVycjsKLS0JCQl9Ci0tCX0KLSsgICAgICAgIC8qIE1ha2Ugc3Vy ZSBtb2RfaW52ZXJzZSBpbiBtb250Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0Ci0r ICAgICAgICAgKiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcuCi0rICAgICAgICAgKi8KLSsJYm5fZmxh Z3MgPSByc2EtPnEtPmZsYWdzOwotKwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09O U1RUSU1FKSkKLSsJCXsKLSsJCXJzYS0+cS0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKLSsJ CX0KLSsJTU9OVF9IRUxQRVIocnNhLCBjdHgsIHEsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNI RV9QUklWQVRFLCBnb3RvIGVycik7Ci0rCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLwot Kwlyc2EtPnEtPmZsYWdzID0gYm5fZmxhZ3M7CQotIAotLQlpZiAocnNhLT5mbGFncyAmIFJTQV9G TEFHX0NBQ0hFX1BVQkxJQykKLS0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5f bWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKLS0JCQlnb3RvIGVy cjsKLSsJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNI RV9QVUJMSUMsIGdvdG8gZXJyKTsKLSAKLSAJLyogY29tcHV0ZSBJIG1vZCBxICovCi0gCWlmICgh KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQotQEAgLTg5Nyw2ICs5NjIsOSBA QCBlcnI6Ci0gCi0gc3RhdGljIGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCi0gCXsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcnNh LT5mbGFnc3w9UlNBX0ZMQUdfQ0FDSEVfUFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7Ci0g CXJldHVybigxKTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2Ff ZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYV9lcnIuYwotLS0tIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAwOC0xMi0yOSAxNzoxMTo1Ni4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYV9lcnIuYwky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTExMSw4ICsxMTEsMTIgQEAg c3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfUFJJTlRfRlApLAkiUlNBX3ByaW50X2ZwIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9Q UklWX0RFQ09ERSksCSJSU0FfUFJJVl9ERUNPREUifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BS SVZfRU5DT0RFKSwJIlJTQV9QUklWX0VOQ09ERSJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJ VkFURV9FTkNSWVBUKSwJIlJTQV9wcml2YXRlX2VuY3J5cHQifSwKLSB7RVJSX0ZVTkMoUlNBX0Zf UlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNB X1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9wdWJsaWNfZGVjcnlwdCJ9LAotIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi0re0VSUl9GVU5D KFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9 LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAot IHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAotIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklO RyJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKLUBAIC0x NTUsMTAgKzE1OSwxMiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfcmVhc29uc1td Ci0ge0VSUl9SRUFTT04oUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRv byBzbWFsbCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRCkgICAgLCJs YXN0IG9jdGV0IGludmFsaWQifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVTX1RPT19MQVJH RSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKLSt7RVJSX1JFQVNPTihSU0FfUl9OT05fRklQ U19NRVRIT0QpICAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi0ge0VSUl9SRUFTT04oUlNBX1Jf Tk9fUFVCTElDX0VYUE9ORU5UKSAgICAsIm5vIHB1YmxpYyBleHBvbmVudCJ9LAotIHtFUlJfUkVB U09OKFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcpLCJudWxsIGJlZm9yZSBibG9jayBt aXNzaW5nIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4g ZG9lcyBub3QgZXF1YWwgcCBxIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfT0FFUF9ERUNPRElOR19F UlJPUikgICAsIm9hZXAgZGVjb2RpbmcgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihSU0FfUl9PUEVS QVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKSwib3BlcmF0aW9uIG5vdCBhbGxvd2VkIGlu IGZpcHMgbW9kZSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVE X0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0 eXBlIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQpICAsInBhZGRp bmcgY2hlY2sgZmFpbGVkIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfUF9OT1RfUFJJTUUpICAgICAg ICAgICAsInAgbm90IHByaW1lIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNh L3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2dlbi5jCi0tLS0g b3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1 OjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2dl bi5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjcsNiArNjcsODIg QEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotK3N0YXRpYyBpbnQgZmlw c19yc2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdl bih2b2lkKQotKwl7Ci0rCWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0raW50 IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQotKwl7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgdGJz W10gPSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKwl1bnNpZ25lZCBjaGFyICpjdGJ1ZiA9 IE5VTEwsICpwdGJ1ZiA9IE5VTEw7Ci0rCWludCBsZW4sIHJldCA9IDA7Ci0rCUVWUF9QS0VZICpw azsKLSsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwot KwotKwlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKLSsKLSsJLyogUGVyZm9ybSBwYWlyd2lz ZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BLQ1MxLCBOVUxMKQotKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1g5MzEsIE5VTEwpCi0rCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0x LAotKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBOVUxM KSkKLSsJCWdvdG8gZXJyOwotKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBl bmNyeXB0L2RlY3J5cHQgdGVzdCAqLwotKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXpl KHJzYSkpOwotKwlpZiAoIWN0YnVmKQotKwkJZ290byBlcnI7Ci0rCi0rCWxlbiA9IFJTQV9wdWJs aWNfZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNBX1BLQ1MxX1BB RERJTkcpOwotKwlpZiAobGVuIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJLyogQ2hlY2sgY2lwaGVy dGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLwotKwlpZiAoKGxlbiA9PSAoc2l6ZW9mKHRi cykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQotKwkJZ290byBlcnI7Ci0rCXB0 YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCi0rCWlmICghcHRidWYpCi0r CQlnb3RvIGVycjsKLSsJbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0YnVmLCBwdGJ1 ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gIT0gKHNpemVvZih0YnMpIC0g MSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQotKwkJZ290 byBlcnI7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWlmICghcHRidWYpCi0rCQlnb3RvIGVycjsKLSsJ Ci0rCWVycjoKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFp bCgpOwotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BBSVJXSVNFX1RF U1RfRkFJTEVEKTsKLSsJCX0KLSsKLSsJaWYgKGN0YnVmKQotKwkJT1BFTlNTTF9mcmVlKGN0YnVm KTsKLSsJaWYgKHB0YnVmKQotKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKLSsJaWYgKHBrKQotKwkJ RVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLSAKLSBz dGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAq ZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKTsKLSAKLUBAIC05MCw2ICsxNjYsMjMgQEAgc3RhdGljIGlu dCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIAotIAlpbnQgYml0c3AsYml0c3Esb2s9IC0x LG49MDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAg ICAJewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgCXJldHVybiAwOwotKwkgICAgCX0KLSsKLSsJCWlm IChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJICAgIHsKLSsJ CSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hP UlQpOwotKwkJICAgIHJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4PUJO X0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0 KGN0eCk7Ci1AQCAtMjAxLDYgKzI5NCwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdl bihSU0EgKnJzYSwgCi0gCQlwID0gcnNhLT5wOwotIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+ aXFtcCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQot KwkJCUJOX2FkZF93b3JkKHJzYS0+biwgMSk7Ci0rCi0rCQlpZighZmlwc19jaGVja19yc2EocnNh KSkKLSsJCSAgICBnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJb2s9MTsKLSBlcnI6Ci0g CWlmIChvayA9PSAtMSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhLmgu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2EuaAkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAotQEAgLTc0LDYgKzc0LDIxIEBACi0gI2Vycm9yIFJTQSBpcyBkaXNh YmxlZC4KLSAjZW5kaWYKLSAKLSsvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBSU0EgbWV0aG9k IGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUgdXNlZAotKyAqIGluIEZJUFMgbW9kZS4gVGhp cyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgotKyAqIGFwcGxp Y2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3Np YmlsaXR5Ci0rICogdG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgotKyAqLwotKwot KyNkZWZpbmUgUlNBX0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKLSsKLSsvKiBJZiB0aGlzIGZs YWcgaXMgc2V0IHRoZSBvcGVyYXRpb25zIG5vcm1hbGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBh cmUKLSsgKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmls aXR5IHRvIGVuc3VyZSB0aGF0IHRoZQotKyAqIHVzYWdlIGlzIGNvbXBsaWFudC4KLSsgKi8KLSsK LSsjZGVmaW5lIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XCQkJMHgwNDAwCi0rCi0gI2lmZGVmICBf X2NwbHVzcGx1cwotIGV4dGVybiAiQyIgewotICNlbmRpZgotQEAgLTE2NCw2ICsxNzksOCBAQCBz dHJ1Y3QgcnNhX3N0Ci0gIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4 NAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRT IDEwMjQKLSsKLSAjaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwotICMgZGVm aW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcyCi0gI2VuZGlmCi1AQCAtMjY3 LDYgKzI4NCwxMSBAQCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCi0g Ci0gLyogTmV3IHZlcnNpb24gKi8KLSBpbnQJUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwg aW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZGVyaXZl X2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0g KnEyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklH TlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0 IEJJR05VTSAqWHEsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBS U0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0g KmUsIEJOX0dFTkNCICpjYik7Ci0gCi0gaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOwot IAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9yICovCi1AQCAtNDM4LDggKzQ2MCwxMiBAQCB2 b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5U X0ZQCQkJCSAxMTYKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3Ci0gI2Rl ZmluZSBSU0FfRl9SU0FfUFJJVl9FTkNPREUJCQkJIDEzOAotKyNkZWZpbmUgUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVAkJCSAxNDgKLSAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAx MzkKLSsjZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNDkKLSAjZGVmaW5lIFJT QV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYKLSsjZGVmaW5lIFJTQV9GX1JTQV9TRVRfREVG QVVMVF9NRVRIT0QJCQkgMTUwCi0rI2RlZmluZSBSU0FfRl9SU0FfU0VUX01FVEhPRAkJCQkgMTUx Ci0gI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNwotICNkZWZpbmUgUlNBX0ZfUlNBX1NJ R05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKLSAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkJCQkJ IDExOQotQEAgLTQ3OSwxMCArNTA1LDEyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9p ZCk7Ci0gI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTIwCi0gI2RlZmluZSBS U0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0Ci0gI2RlZmluZSBSU0FfUl9NT0RVTFVTX1RP T19MQVJHRQkJCQkgMTA1Ci0rI2RlZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDE0OQot ICNkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0MAotICNkZWZpbmUgUlNBX1Jf TlVMTF9CRUZPUkVfQkxPQ0tfTUlTU0lORwkJCSAxMTMKLSAjZGVmaW5lIFJTQV9SX05fRE9FU19O T1RfRVFVQUxfUF9RCQkJIDEyNwotICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJ CSAxMjEKLSsjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJ IDE1MAotICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZ VFlQRQkgMTQ4Ci0gI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKLSAj ZGVmaW5lIFJTQV9SX1BfTk9UX1BSSU1FCQkJCSAxMjgKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2Ff bGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIwMDkt MTItMDkgMTQ6Mzg6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L3JzYS9yc2FfbGliLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC04 MCw2ICs4MCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJTQV9zZXRfZGVmYXVs dF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01F VEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNB X1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybjsKLSsJCX0KLSsjZW5kaWYKLSAJZGVmYXVs dF9SU0FfbWV0aCA9IG1ldGg7Ci0gCX0KLSAKLUBAIC0xMTEsNiArMTE4LDEzIEBAIGludCBSU0Ff c2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KLSAJLyogTkI6IFRoZSBjYWxsZXIgaXMg c3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCi0gCSAq IHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8KLSAJY29uc3QgUlNB X01FVEhPRCAqbXRtcDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAm JiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJy KFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCW10bXAgPSByc2EtPm1ldGg7Ci0gCWlmIChtdG1wLT5maW5p c2gpIG10bXAtPmZpbmlzaChyc2EpOwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLUBAIC0x NjMsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCi0gCQkJ fQotIAkJfQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgp ICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJ CVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0rCQlpZiAocmV0LT5lbmdpbmUpCi0rCQkJRU5HSU5F X2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0rI2VuZGlmCi0rCQlPUEVOU1NMX2ZyZWUocmV0KTsKLSsJ CXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotIAotIAlyZXQtPnBhZD0wOwotIAlyZXQtPnZl cnNpb249MDsKLUBAIC0yOTQsNiArMzIwLDEzIEBAIGludCBSU0FfcHVibGljX2VuY3J5cHQoaW50 IGZsZW4sIGNvbnN0IHUKLSBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQgZmxlbiwgY29uc3Qg dW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCi0gCSAgICAgUlNBICpyc2Es IGludCBwYWRkaW5nKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX21vZGUo KSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0rCQl7Ci0rCQlS U0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExP V0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAJcmV0dXJu KHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsK LSAJfQotIAotQEAgLTMwNiw2ICszMzksMTMgQEAgaW50IFJTQV9wcml2YXRlX2RlY3J5cHQoaW50 IGZsZW4sIGNvbnN0IAotIGludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAotIAkgICAgIFJTQSAqcnNhLCBp bnQgcGFkZGluZykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkg JiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwkJewotKwkJUlNB ZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VE X0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAJcmV0dXJuKHJz YS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOwotIAl9 Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYV9zaWduLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDA3LTA0LTI0IDAzOjA1OjQyLjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDEyLTAxLTA1 IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTEzMCw3ICsxMzAsOCBAQCBpbnQgUlNBX3Np Z24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCi0gCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7 Ci0gCQlzPXRtcHM7Ci0gCX0KLS0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNh LFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGly ZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5yc2FfcHJp dl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFf UEFERElORykgOiAwOwotIAlpZiAoaSA8PSAwKQotIAkJcmV0PTA7Ci0gCWVsc2UKLUBAIC0xNjEs OCArMTYyLDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAot IAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBybSkKLSAJCXsKLS0JCWkgPSBSU0FfcHVi bGljX2RlY3J5cHQoKGludClzaWdsZW4sCi0tCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9Q QURESU5HKTsKLSsJCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2Ff cHViX2RlYygoaW50KXNpZ2xlbiwKLSsJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpIDogMDsKLSAJCWlmIChpIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gCQkqcHJtX2xlbiA9IGk7 Ci1AQCAtMTc5LDcgKzE4MCw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0 IHVuc2kKLSAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNT QUdFX0xFTkdUSCk7Ci0gCQkJZ290byBlcnI7Ci0gCX0KLS0JaT1SU0FfcHVibGljX2RlY3J5cHQo KGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNh bGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwot KwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGlu dClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCi0gCWlmIChp IDw9IDApIGdvdG8gZXJyOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NlZWQv c2VlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NlZWQvc2VlZC5jCi0tLS0gb3BlbnNz bC0xLjAuMGYvY3J5cHRvL3NlZWQvc2VlZC5jLmZpcHMJMjAwOC0xMi0xNiAwODo0MToyMS4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2VlZC9zZWVkLmMJMjAxMi0w MS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zNCw2ICszNCw5IEBACi0gCi0gI2lu Y2x1ZGUgPG9wZW5zc2wvc2VlZC5oPgotICNpbmNsdWRlICJzZWVkX2xvY2wuaCIKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0 YXRpYyBjb25zdCBzZWVkX3dvcmQgU1NbNF1bMjU2XSA9IHsJewotIAkweDI5ODlhMWE4LCAweDA1 ODU4MTg0LCAweDE2YzZkMmQ0LCAweDEzYzNkM2QwLCAweDE0NDQ1MDU0LCAweDFkMGQxMTFjLCAw eDJjOGNhMGFjLCAweDI1MDUyMTI0LAotQEAgLTE5Myw3ICsxOTYsMTggQEAgc3RhdGljIGNvbnN0 IHNlZWRfd29yZCBLQ1tdID0gewotIAlLQzgsCUtDOSwJS0MxMCwJS0MxMSwJS0MxMiwJS0MxMywJ S0MxNCwJS0MxNQl9OwotICNlbmRpZgotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSB2b2lkIFNF RURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5HVEhdLCBT RUVEX0tFWV9TQ0hFRFVMRSAqa3MpCi0rICAgICAgICB7Ci0rICAgICAgICBpZiAoRklQU19tb2Rl KCkpCi0rICAgICAgICAgICAgICAgIEZJUFNfQkFEX0FCT1JUKFNFRUQpCi0rICAgICAgICBwcml2 YXRlX1NFRURfc2V0X2tleShyYXdrZXksIGtzKTsKLSsgICAgICAgIH0KLSsKLSt2b2lkIHByaXZh dGVfU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdU SF0sIFNFRURfS0VZX1NDSEVEVUxFICprcykKLSsjZWxzZQotK3ZvaWQgU0VFRF9zZXRfa2V5KGNv bnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVE VUxFICprcykKLSsjZW5kaWYKLSB7Ci0gCXNlZWRfd29yZCB4MSwgeDIsIHgzLCB4NDsKLSAJc2Vl ZF93b3JkIHQwLCB0MTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zZWVkL3NlZWQu aC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zZWVkL3NlZWQuaAotLS0tIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9zZWVkL3NlZWQuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6MjguMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NlZWQvc2VlZC5oCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTE3LDYgKzExNyw5IEBAIHR5cGVkZWYgc3Ry dWN0IHNlZWRfa2V5X3N0IHsKLSB9IFNFRURfS0VZX1NDSEVEVUxFOwotIAotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSt2b2lkIHByaXZhdGVfU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcyk7Ci0rI2Vu ZGlmCi0gdm9pZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9L RVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKTsKLSAKLSB2b2lkIFNFRURfZW5jcnlw dChjb25zdCB1bnNpZ25lZCBjaGFyIHNbU0VFRF9CTE9DS19TSVpFXSwgdW5zaWduZWQgY2hhciBk W1NFRURfQkxPQ0tfU0laRV0sIGNvbnN0IFNFRURfS0VZX1NDSEVEVUxFICprcyk7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3No YV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhX2Rnc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAw MDAwMDAwMCArMDEwMAotQEAgLTU3LDYgKzU3LDEyIEBACi0gICovCi0gCi0gI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTAp ICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKQotIAotICN1bmRlZiAgU0hBXzEKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vc2hhL3NoYS5oCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIw MTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL3NoYS9zaGEuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTEw Niw2ICsxMDYsOSBAQCB0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAotIAl9IFNIQV9DVFg7Ci0g Ci0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHBy aXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IFNIQV9Jbml0KFNIQV9D VFggKmMpOwotIGludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNp emVfdCBsZW4pOwotIGludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMjIsOCArMTIyLDE1IEBAIHZvaWQgc2hhMV9i bG9ja19kYXRhX29yZGVyIChTSEFfQ1RYICpjLCAKLSAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEw MzI1NDc2VUwKLSAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKLSAKLSsjaWYgZGVm aW5lZChTSEFfMCkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rRklQU19OT05fRklQU19NRF9J bml0KFNIQSkKLSsjZWxzZQotIGludCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCi0rI2VuZGlmCi0g CXsKLSsjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0g CWMtPmgwPUlOSVRfREFUQV9oMDsKLSAJYy0+aDE9SU5JVF9EQVRBX2gxOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL3NoYS9zaGExZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGExZGdz dC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAw MDAgKzAxMDAKLUBAIC02Myw2ICs2MywxMCBAQAotICNkZWZpbmUgU0hBXzEKLSAKLSAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gY29uc3QgY2hhciBTSEExX3ZlcnNpb25b XT0iU0hBMSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zaGEvc2hh MjU2LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMJMjAwNy0w MS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v c2hhL3NoYTI1Ni5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTIs MTIgKzEyLDE5IEBACi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotIAot IGNvbnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BU RVhUOwotIAotIGludCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKLSAJewotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdj ZDUwN1VMOwotIAljLT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7Ci1A QCAtMjksNiArMzYsOSBAQCBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCi0gaW50 IFNIQTI1Nl9Jbml0IChTSEEyNTZfQ1RYICpjKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigq YykpOwotIAljLT5oWzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1VUw7Ci0gCWMt PmhbMl09MHgzYzZlZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v c2hhL3NoYTUxMi5jCi0tLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBz CTIwMDktMTItMzAgMTI6NTM6MzMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3NoYS9zaGE1MTIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAot QEAgLTUsNiArNSwxMCBAQAotICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICovCi0gI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYg IWRlZmluZWQoT1BFTlNTTF9OT19TSEE1MTIpCi0gLyoKLSAgKiBJTVBMRU1FTlRBVElPTiBOT1RF Uy4KLUBAIC02MSw2ICs2NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUx MiIgT1AKLSAKLSBpbnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCi0gCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAjaWYgZGVm aW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkK LSAJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAq LwotIAl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKLUBAIC05MCw2ICs5 Nyw5IEBAIGludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKLSAKLSBpbnQgU0hBNTEyX0lu aXQgKFNIQTUxMl9DVFggKmMpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVm aW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKLSAJLyogbWFpbnRhaW4gZHdvcmQgb3Jk ZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLwotIAl1bnNpZ25lZCBpbnQgKmggPSAo dW5zaWduZWQgaW50ICopYy0+aDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by93aHJs cG9vbC93aHJscG9vbC5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3docmxwb29sL3docmxw b29sLmgKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vd2hybHBvb2wvd2hybHBvb2wuaC5maXBz CTIwMTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3docmxwb29sL3docmxwb29sLmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0yNCw2ICsyNCw5IEBAIHR5cGVkZWYgc3RydWN0CXsKLSAJfSBXSElSTFBPT0xf Q1RYOwotIAotICNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0raW50IHByaXZhdGVfV0hJUkxQT09MX0luaXQoV0hJUkxQT09MX0NUWCAqYyk7Ci0rI2Vu ZGlmCi0gaW50IFdISVJMUE9PTF9Jbml0CShXSElSTFBPT0xfQ1RYICpjKTsKLSBpbnQgV0hJUkxQ T09MX1VwZGF0ZQkoV0hJUkxQT09MX0NUWCAqYyxjb25zdCB2b2lkICppbnAsc2l6ZV90IGJ5dGVz KTsKLSB2b2lkIFdISVJMUE9PTF9CaXRVcGRhdGUoV0hJUkxQT09MX0NUWCAqYyxjb25zdCB2b2lk ICppbnAsc2l6ZV90IGJpdHMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3docmxw b29sL3dwX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by93aHJscG9vbC93cF9kZ3N0 LmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAw OC0xMi0yOSAxMzozNTo0OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vd2hybHBvb2wvd3BfZGdzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAw Ci1AQCAtNTMsOCArNTMsMTIgQEAKLSAKLSAjaW5jbHVkZSAid3BfbG9jbC5oIgotICNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotLWludCBXSElSTFBP T0xfSW5pdAkoV0hJUkxQT09MX0NUWCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoV0hJUkxQ T09MKQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAlyZXR1cm4oMSk7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wZi9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4wZi9NYWtl ZmlsZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4wZi9NYWtlZmlsZS5vcmcuZmlwcwkyMDEyLTAxLTA1 IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBmL01ha2VmaWxlLm9y ZwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTExMCw2ICsxMTAsOSBA QCBMSUJLUkI1PQotIFpMSUJfSU5DTFVERT0KLSBMSUJaTElCPQotIAotKyMgTm9uLWVtcHR5IGlm IEZJUFMgZW5hYmxlZAotK0ZJUFM9Ci0rCi0gRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBw cyB0ZXN0IHRvb2xzCi0gRU5HRElSUz0gY2Nnb3N0Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3NsCi1A QCAtMTIyLDcgKzEyNSw3IEBAIFNESVJTPSAgXAotIAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVj ZGggZHNvIGVuZ2luZSBcCi0gCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAotIAll dnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2Nz cCB1aSBrcmI1IFwKLS0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9yZQotKwljbXMgcHF1ZXVlIHRz IGpwYWtlIHN0b3JlIGZpcHMKLSAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlz IGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCi0gIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50 cy4uLgotIAotQEAgLTIwNiw2ICsyMDksNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZP Uk0pJyBQUk9DRVNTCi0gCQlSTUQxNjBfQVNNX09CSj0nJChSTUQxNjBfQVNNX09CSiknCQlcCi0g CQlXUF9BU01fT0JKPSckKFdQX0FTTV9PQkopJwkJCVwKLSAJCVBFUkxBU01fU0NIRU1FPSckKFBF UkxBU01fU0NIRU1FKScJCVwKLSsJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCi0gCQlUSElT PSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQotICMgTUFLRU9W RVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFr ZSBmbGF2b3JzLAotICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZh cmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvc3NsL3Nz bF9jaXBoLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9zc2wvc3NsX2NpcGguYwotLS0tIG9wZW5zc2wt MS4wLjBmL3NzbC9zc2xfY2lwaC5jLmZpcHMJMjAxMS0xMi0wMiAxMzo1MTowNS4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9zc2wvc3NsX2NpcGguYwkyMDEyLTAxLTA1IDEzOjIy OjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTcyOCw2ICs3MjgsOSBAQCBzdGF0aWMgdm9pZCBzc2xf Y2lwaGVyX2NvbGxlY3RfY2lwaGVycyhjCi0gCQkgICAgIShjLT5hbGdvcml0aG1fYXV0aCAmIGRp c2FibGVkX2F1dGgpICYmCi0gCQkgICAgIShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJsZWRfZW5j KSAmJgotIAkJICAgICEoYy0+YWxnb3JpdGhtX21hYyAmIGRpc2FibGVkX21hYykgJiYKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCQkJKCFGSVBTX21vZGUoKSB8fCAoYy0+YWxnb19zdHJlbmd0aCAm IFNTTF9GSVBTKSkgJiYKLSsjZW5kaWYKLSAJCSAgICAhKGMtPmFsZ29yaXRobV9zc2wgJiBkaXNh YmxlZF9zc2wpKQotIAkJCXsKLSAJCQljb19saXN0W2NvX2xpc3RfbnVtXS5jaXBoZXIgPSBjOwot QEAgLTE0MjMsNyArMTQyNiwxMSBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9j aXBoZXJfCi0gCSAqLwotIAlmb3IgKGN1cnIgPSBoZWFkOyBjdXJyICE9IE5VTEw7IGN1cnIgPSBj dXJyLT5uZXh0KQotIAkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChjdXJyLT5hY3Rp dmUgJiYgKCFGSVBTX21vZGUoKSB8fCBjdXJyLT5jaXBoZXItPmFsZ29fc3RyZW5ndGggJiBTU0xf RklQUykpCi0rI2Vsc2UKLSAJCWlmIChjdXJyLT5hY3RpdmUpCi0rI2VuZGlmCi0gCQkJewotIAkJ CXNrX1NTTF9DSVBIRVJfcHVzaChjaXBoZXJzdGFjaywgY3Vyci0+Y2lwaGVyKTsKLSAjaWZkZWYg Q0lQSEVSX0RFQlVHCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9zc2wvc3NsX2xpYi5jLmZpcHMg b3BlbnNzbC0xLjAuMGYvc3NsL3NzbF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjBmL3NzbC9zc2xf bGliLmMuZmlwcwkyMDExLTA5LTI2IDE5OjA0OjQ5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjBmL3NzbC9zc2xfbGliLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAx MDAKLUBAIC0xNTI0LDYgKzE1MjQsMTQgQEAgU1NMX0NUWCAqU1NMX0NUWF9uZXcoY29uc3QgU1NM X01FVEhPRCAqbQotIAkJcmV0dXJuKE5VTEwpOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChtZXRoLT52ZXJzaW9uIDwgVExTMV9WRVJTSU9OKSkJ Ci0rCQl7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNTTF9SX09OTFlfVExTX0FMTE9X RURfSU5fRklQU19NT0RFKTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotKwotIAlp ZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpIDwgMCkKLSAJCXsKLSAJCVNT TGVycihTU0xfRl9TU0xfQ1RYX05FVyxTU0xfUl9YNTA5X1ZFUklGSUNBVElPTl9TRVRVUF9QUk9C TEVNUyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9zc2wvc3NsdGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMGYvc3NsL3NzbHRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjBmL3NzbC9zc2x0ZXN0LmMu ZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjBmL3NzbC9zc2x0ZXN0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBA IC0yNjgsNiArMjY4LDkgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKLSAJewotIAlmcHJp bnRmKHN0ZGVyciwidXNhZ2U6IHNzbHRlc3QgW2FyZ3MgLi4uXVxuIik7Ci0gCWZwcmludGYoc3Rk ZXJyLCJcbiIpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJZnByaW50ZihzdGRlcnIsIi1GICAg ICAgICAgICAgIC0gcnVuIHRlc3QgaW4gRklQUyBtb2RlXG4iKTsKLSsjZW5kaWYKLSAJZnByaW50 ZihzdGRlcnIsIiAtc2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVyIGNlcnRpZmljYXRlXG4iKTsK LSAJZnByaW50ZihzdGRlcnIsIiAtY2xpZW50X2F1dGggIC0gZG8gY2xpZW50IGF1dGhlbnRpY2F0 aW9uXG4iKTsKLSAJZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAgICAgIC0gYWxsb3cgcHJveHkg Y2VydGlmaWNhdGVzXG4iKTsKLUBAIC00ODcsNiArNDkwLDkgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKLSAjZW5kaWYKLSAJU1RBQ0tfT0YoU1NMX0NPTVApICpzc2xfY29tcF9t ZXRob2RzID0gTlVMTDsKLSAJaW50IHRlc3RfY2lwaGVybGlzdCA9IDA7Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwlpbnQgZmlwc19tb2RlPTA7Ci0rI2VuZGlmCi0gCi0gCXZlcmJvc2UgPSAwOwot IAlkZWJ1ZyA9IDA7Ci1AQCAtNTE4LDcgKzUyNCwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQotIAotIAl3aGlsZSAoYXJnYyA+PSAxKQotIAkJewotLQkJaWYJKHN0cmNtcCgq YXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKLSsJCWlmKCFzdHJjbXAoKmFyZ3YsIi1GIikpCi0r CQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlmaXBzX21vZGU9MTsKLSsjZWxzZQotKwkJ CWZwcmludGYoc3RkZXJyLCJub3QgY29tcGlsZWQgd2l0aCBGSVBTIHN1cHBvcnQsIHNvIGV4aXR0 aW5nIHdpdGhvdXQgcnVubmluZy5cbiIpOwotKwkJCUVYSVQoMCk7Ci0rI2VuZGlmCi0rCQkJfQot KwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQotIAkJCXNlcnZl cl9hdXRoPTE7Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jbGllbnRfYXV0aCIpID09IDAp Ci0gCQkJY2xpZW50X2F1dGg9MTsKLUBAIC03MTQsNiArNzI5LDIwIEBAIGJhZDoKLSAJCUVYSVQo MSk7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihmaXBzX21vZGUpCi0rCQl7 Ci0rCQlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCQl7Ci0rCQkJRVJSX2xvYWRfY3J5cHRvX3N0 cmluZ3MoKTsKLSsJCQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdfZnAoc3RkZXJyLEJJT19OT0NM T1NFKSk7Ci0rCQkJRVhJVCgxKTsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJZnByaW50ZihzdGRlcnIs IioqKiBJTiBGSVBTIE1PREUgKioqXG4iKTsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKHByaW50 X3RpbWUpCi0gCQl7Ci0gCQlpZiAoIWJpb19wYWlyKQotQEAgLTIxNTMsMTIgKzIxODIsMTIgQEAg c3RhdGljIGludCBNU19DQUxMQkFDSyBhcHBfdmVyaWZ5X2NhbGxiYQotIAkJfQotIAotICNpZm5k ZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQotLSMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpZiAw Ci0gCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQotIAkJRklQU19hbGxvd19tZDUoMSk7 Ci0gIyBlbmRpZgotIAlvayA9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4KTsKLS0jIGlmZGVmIE9QRU5T U0xfRklQUwotKyMgaWYgMAotIAlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKLSAJCUZJ UFNfYWxsb3dfbWQ1KDApOwotICMgZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL3NzbC9z MjNfY2xudC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvc3NsL3MyM19jbG50LmMKLS0tLSBvcGVuc3Ns LTEuMC4wZi9zc2wvczIzX2NsbnQuYy5maXBzCTIwMTAtMDItMTYgMTU6MjA6NDAuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvc3NsL3MyM19jbG50LmMJMjAxMi0wMS0wNSAxMzoy MjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zMzQsNiArMzM0LDE0IEBAIHN0YXRpYyBpbnQgc3Ns MjNfY2xpZW50X2hlbGxvKFNTTCAqcykKLSAJCQl2ZXJzaW9uX21ham9yID0gVExTMV9WRVJTSU9O X01BSk9SOwotIAkJCXZlcnNpb25fbWlub3IgPSBUTFMxX1ZFUlNJT05fTUlOT1I7Ci0gCQkJfQot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWVsc2UgaWYoRklQU19tb2RlKCkpCi0rCQkJewotKwkJ CVNTTGVycihTU0xfRl9TU0wyM19DTElFTlRfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19B TExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsjZW5kaWYKLSAJ CWVsc2UgaWYgKHZlcnNpb24gPT0gU1NMM19WRVJTSU9OKQotIAkJCXsKLSAJCQl2ZXJzaW9uX21h am9yID0gU1NMM19WRVJTSU9OX01BSk9SOwotQEAgLTYxNyw2ICs2MjUsMTQgQEAgc3RhdGljIGlu dCBzc2wyM19nZXRfc2VydmVyX2hlbGxvKFNTTCAqcwotIAkJaWYgKChwWzJdID09IFNTTDNfVkVS U0lPTl9NSU5PUikgJiYKLSAJCQkhKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU1NMdjMpKQotIAkJ CXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJaWYoRklQU19tb2RlKCkpCi0rCQkJCXsKLSsJ CQkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9TRVJWRVJfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZ X1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQkJCWdvdG8gZXJyOwotKwkJCQl9Ci0rI2Vu ZGlmCi0gCQkJcy0+dmVyc2lvbj1TU0wzX1ZFUlNJT047Ci0gCQkJcy0+bWV0aG9kPVNTTHYzX2Ns aWVudF9tZXRob2QoKTsKLSAJCQl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9zc2wvczIzX3Ny dnIuYy5maXBzIG9wZW5zc2wtMS4wLjBmL3NzbC9zMjNfc3J2ci5jCi0tLS0gb3BlbnNzbC0xLjAu MGYvc3NsL3MyM19zcnZyLmMuZmlwcwkyMDEwLTAyLTE2IDE1OjIwOjQwLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjBmL3NzbC9zMjNfc3J2ci5jCTIwMTItMDEtMDUgMTM6MjI6MzAu MDAwMDAwMDAwICswMTAwCi1AQCAtMzkzLDYgKzM5MywxNSBAQCBpbnQgc3NsMjNfZ2V0X2NsaWVu dF9oZWxsbyhTU0wgKnMpCi0gCQkJfQotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYgKEZJUFNfbW9kZSgpICYmIChzLT52ZXJzaW9uIDwgVExTMV9WRVJTSU9OKSkKLSsJCXsKLSsJ CVNTTGVycihTU0xfRl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLAotKwkJCQkJU1NMX1JfT05MWV9U TFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0r Ci0gCWlmIChzLT5zdGF0ZSA9PSBTU0wyM19TVF9TUl9DTE5UX0hFTExPX0IpCi0gCQl7Ci0gCQkv KiB3ZSBoYXZlIFNTTHYzL1RMU3YxIGluIGFuIFNTTHYyIGhlYWRlcgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGYvc3NsL3MzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjBmL3NzbC9zM19jbG50LmMK LS0tLSBvcGVuc3NsLTEuMC4wZi9zc2wvczNfY2xudC5jLmZpcHMJMjAxMS0xMi0yNiAyMDozODox OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9zc2wvczNfY2xudC5jCTIwMTIt MDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTU2LDYgKzE1NiwxMCBAQAotICNp bmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19ESAotICNp bmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0gI2VuZGlmCi1AQCAtMTU1MCw2ICsxNTU0LDggQEAgaW50 IHNzbDNfZ2V0X2tleV9leGNoYW5nZShTU0wgKnMpCi0gCQkJcT1tZF9idWY7Ci0gCQkJZm9yIChu dW09MjsgbnVtID4gMDsgbnVtLS0pCi0gCQkJCXsKLSsJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3Mo Jm1kX2N0eCwKLSsJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQkJCUVW UF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQotIAkJCQkJP3MtPmN0eC0+bWQ1OnMt PmN0eC0+c2hhMSwgTlVMTCk7Ci0gCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMz LT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjBmL3NzbC9zM19lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjBmL3NzbC9zM19lbmMuYwotLS0t IG9wZW5zc2wtMS4wLjBmL3NzbC9zM19lbmMuYy5maXBzCTIwMTItMDEtMDQgMTY6Mzg6NTQuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGYvc3NsL3MzX2VuYy5jCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTcwLDYgKzE3MCw3IEBAIHN0YXRpYyBpbnQg c3NsM19nZW5lcmF0ZV9rZXlfYmxvY2soU1NMICoKLSAjZW5kaWYKLSAJaz0wOwotIAlFVlBfTURf Q1RYX2luaXQoJm01KTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm01LCBFVlBfTURfQ1RYX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpOwotIAlFVlBfTURfQ1RYX2luaXQoJnMxKTsKLSAJZm9yIChpPTA7 IChpbnQpaTxudW07IGkrPU1ENV9ESUdFU1RfTEVOR1RIKQotIAkJewotQEAgLTYxNiw2ICs2MTcs OCBAQCBpbnQgc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMoU1NMICpzKQotIAkJaWYgKChtYXNr ICYgcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yKSAmJiBtZCkgCi0gCQkJewotIAkJ CXMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXT1FVlBfTURfQ1RYX2NyZWF0ZSgpOwotKwkJCUVWUF9N RF9DVFhfc2V0X2ZsYWdzKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSwKLSsJCQkJRVZQX01EX0NU WF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJCQlFVlBfRGlnZXN0SW5pdF9leChzLT5zMy0+aGFu ZHNoYWtlX2Rnc3RbaV0sbWQsTlVMTCk7Ci0gCQkJRVZQX0RpZ2VzdFVwZGF0ZShzLT5zMy0+aGFu ZHNoYWtlX2Rnc3RbaV0saGRhdGEsaGRhdGFsZW4pOwotIAkJCX0gCi1AQCAtNjcyLDYgKzY3NSw3 IEBAIHN0YXRpYyBpbnQgc3NsM19oYW5kc2hha2VfbWFjKFNTTCAqcywgaW4KLSAJCXJldHVybiAw OwotIAl9CQotIAlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdz KCZjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCUVWUF9NRF9DVFhfY29w eV9leCgmY3R4LGQpOwotIAluPUVWUF9NRF9DVFhfc2l6ZSgmY3R4KTsKLSAJaWYgKG4gPCAwKQot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvc3NsL3MzX3NydnIuYy5maXBzIG9wZW5zc2wtMS4wLjBm L3NzbC9zM19zcnZyLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9zc2wvczNfc3J2ci5jLmZpcHMJMjAx Mi0wMS0wNCAxNjoyNzo1NC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wZi9zc2wv czNfc3J2ci5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTc3MCw2 ICsxNzcwLDggQEAgaW50IHNzbDNfc2VuZF9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKFNTTCAqcwotIAkJ CQlqPTA7Ci0gCQkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQotIAkJCQkJewotKwkJCQkJ RVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKLSsJCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpOwotIAkJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIp Ci0gCQkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7Ci0gCQkJCQlFVlBfRGln ZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01f U0laRSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9zc2wvdDFfZW5jLmMuZmlwcyBvcGVuc3Ns LTEuMC4wZi9zc2wvdDFfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4wZi9zc2wvdDFfZW5jLmMuZmlw cwkyMDEwLTA2LTE1IDE5OjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBm L3NzbC90MV9lbmMuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTE3 MCw2ICsxNzAsOCBAQCBzdGF0aWMgaW50IHRsczFfUF9oYXNoKGNvbnN0IEVWUF9NRCAqbWQsCi0g Ci0gCUhNQUNfQ1RYX2luaXQoJmN0eCk7Ci0gCUhNQUNfQ1RYX2luaXQoJmN0eF90bXApOwotKwlI TUFDX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsK LSsJSE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpOwotIAlpZiAoIUhNQUNfSW5pdF9leCgmY3R4LHNlYyxzZWNfbGVuLG1kLCBOVUxMKSkK LSAJCWdvdG8gZXJyOwotIAlpZiAoIUhNQUNfSW5pdF9leCgmY3R4X3RtcCxzZWMsc2VjX2xlbixt ZCwgTlVMTCkpCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMGctdmVyc2lvbi5wYXRjaCBiL29w ZW5zc2wtMS4wLjBnLXZlcnNpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDU1YWEwYzAuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMGctdmVyc2lvbi5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBnL2NyeXB0 by9vcGVuc3Nsdi5oLnZlcnNpb24gb3BlbnNzbC0xLjAuMGcvY3J5cHRvL29wZW5zc2x2LmgKLS0t LSBvcGVuc3NsLTEuMC4wZy9jcnlwdG8vb3BlbnNzbHYuaC52ZXJzaW9uCTIwMTItMDEtMTkgMTQ6 NTA6NTAuMDk0MDI4MDQ3ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGcvY3J5cHRvL29wZW5zc2x2 LmgJMjAxMi0wMS0xOSAxNDo1MTo0OC42NTU1Mjk2NzEgKzAxMDAKLUBAIC0yNSw3ICsyNSw4IEBA Ci0gICogKFByaW9yIHRvIDAuOS41YSBiZXRhMSwgYSBkaWZmZXJlbnQgc2NoZW1lIHdhcyB1c2Vk OiBNTU5ORkZSQkIgZm9yCi0gICogIG1ham9yIG1pbm9yIGZpeCBmaW5hbCBwYXRjaC9iZXRhKQot ICAqLwotLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDdmTAotKy8qIHdl IGhhdmUgdG8ga2VlcCB0aGUgdmVyc2lvbiBudW1iZXIgdG8gbm90IGJyZWFrIHRoZSBhYmkgKi8K LSsjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDAwMwotICNpZmRlZiBPUEVO U1NMX0ZJUFMKLSAjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4wZy1m aXBzIDE4IEphbiAyMDEyIgotICNlbHNlCi1AQCAtODMsNyArODQsNyBAQAotICAqIHNob3VsZCBv bmx5IGtlZXAgdGhlIHZlcnNpb25zIHRoYXQgYXJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggdGhl IGN1cnJlbnQuCi0gICovCi0gI2RlZmluZSBTSExJQl9WRVJTSU9OX0hJU1RPUlkgIiIKLS0jZGVm aW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKLSsjZGVmaW5lIFNITElCX1ZFUlNJT05f TlVNQkVSICIxLjAuMGciCi0gCi0gCi0gI2VuZGlmIC8qIEhFQURFUl9PUEVOU1NMVl9IICovCgpk aWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMS1iZXRhMi1kdGxzMS1hYmkucGF0Y2ggYi9vcGVuc3Ns LTEuMC4xLWJldGEyLWR0bHMxLWFiaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42YTU1NmJlCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMS1iZXRhMi1k dGxzMS1hYmkucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMi9zc2wvZHRsczEuaC5kdGxzMS1hYmkgb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvZHRsczEu aAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvc3NsL2R0bHMxLmguZHRsczEtYWJpCTIwMTItMDIt MDYgMTc6MDc6MzQuNjMwMzM2MTE4ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wv ZHRsczEuaAkyMDEyLTAyLTA2IDE3OjEwOjA4Ljk1NjYyMzcwNyArMDEwMAorQEAgLTIyMiw5ICsy MjIsNiBAQCB0eXBlZGVmIHN0cnVjdCBkdGxzMV9zdGF0ZV9zdAorIAkgKi8KKyAJcmVjb3JkX3Bx dWV1ZSBidWZmZXJlZF9hcHBfZGF0YTsKKyAKKy0JLyogSXMgc2V0IHdoZW4gbGlzdGVuaW5nIGZv ciBuZXcgY29ubmVjdGlvbnMgd2l0aCBkdGxzMV9saXN0ZW4oKSAqLworLQl1bnNpZ25lZCBpbnQg bGlzdGVuOworLQorIAl1bnNpZ25lZCBpbnQgbXR1OyAvKiBtYXggRFRMUyBwYWNrZXQgc2l6ZSAq LworIAorIAlzdHJ1Y3QgaG1faGVhZGVyX3N0IHdfbXNnX2hkcjsKK0BAIC0yNDgsNiArMjQ1LDkg QEAgdHlwZWRlZiBzdHJ1Y3QgZHRsczFfc3RhdGVfc3QKKyAJdW5zaWduZWQgaW50IHJldHJhbnNt aXR0aW5nOworIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2NpcGhlcl9zcGVjX29rOworIAorKwkvKiBJ cyBzZXQgd2hlbiBsaXN0ZW5pbmcgZm9yIG5ldyBjb25uZWN0aW9ucyB3aXRoIGR0bHMxX2xpc3Rl bigpICovCisrCXVuc2lnbmVkIGludCBsaXN0ZW47CisrCisgI2lmbmRlZiBPUEVOU1NMX05PX1ND VFAKKyAJLyogdXNlZCB3aGVuIFNTTF9TVF9YWF9GTFVTSCBpcyBlbnRlcmVkICovCisgCWludCBu ZXh0X3N0YXRlOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjEtYmV0YTItZmlwcy1tZDUtYWxs b3cucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEyLWZpcHMtbWQ1LWFsbG93LnBhdGNoCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTQ3MzAKLS0tIC9kZXYvbnVsbAorKysg Yi9vcGVuc3NsLTEuMC4xLWJldGEyLWZpcHMtbWQ1LWFsbG93LnBhdGNoCkBAIC0wLDAgKzEsMjEg QEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL21kNS9tZDVfZGdzdC5jLm1k NS1hbGxvdyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYworLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL21kNS9tZDVfZGdzdC5jLm1kNS1hbGxvdwkyMDEyLTAy LTA2IDIwOjA5OjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL21kNS9tZDVfZGdzdC5jCTIwMTItMDItMDYgMjA6MTQ6MDIuMzMyMTE3NjAzICswMTAwCitA QCAtNzEsNyArNzEsMTYgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xf VgorICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyAjZGVm aW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisgCistbm9uZmlwc19t ZF9pbml0KE1ENSkKKytpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCXsKKysJaWYgKEZJUFNfbW9kZSgpICYmIGdldGVudigiT1BFTlNTTF9GSVBTX05PTl9B UFBST1ZFRF9NRDVfQUxMT1ciKSA9PSBOVUxMKQorKwkJT3BlblNTTERpZShfX0ZJTEVfXywgX19M SU5FX18sIFwKKysgICAgICAgICAgICAgICAgIkRpZ2VzdCBNRDUgZm9yYmlkZGVuIGluIEZJUFMg bW9kZSEiKTsKKysJcmV0dXJuIHByaXZhdGVfTUQ1X0luaXQoYyk7CisrCX0KKytpbnQgcHJpdmF0 ZV9NRDVfSW5pdChNRDVfQ1RYICpjKQorKyNlbmRpZgorIAl7CisgCW1lbXNldCAoYywwLHNpemVv ZigqYykpOworIAljLT5BPUlOSVRfREFUQV9BOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjEt YmV0YTItZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjEtYmV0YTItZmlwcy5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTMxZmJlCi0tLSAvZGV2L251bGwKKysrIGIv b3BlbnNzbC0xLjAuMS1iZXRhMi1maXBzLnBhdGNoCkBAIC0wLDAgKzEsMjExNDMgQEAKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wa2NzMTIuYy5maXBzIG9wZW5zc2wtMS4wLjEt YmV0YTIvYXBwcy9wa2NzMTIuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wa2NzMTIu Yy5maXBzCTIwMTEtMDMtMTMgMTk6MjA6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMi9hcHBzL3BrY3MxMi5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTI0MzkzNTY2ICsw MTAwCitAQCAtNjcsNiArNjcsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3BlbS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisg I2RlZmluZSBQUk9HIHBrY3MxMl9tYWluCisgCitAQCAtMTMwLDYgKzEzMywxMSBAQCBpbnQgTUFJ TihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgICAgIGFwcHNfc3RhcnR1cCgpOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpKQorKwljZXJ0X3BiZSA9IGtl eV9wYmU7IC8qIGNhbm5vdCB1c2UgUkMyIGluIHRoZSBGSVBTIG1vZGUgKi8KKysjZW5kaWYKKysK KyAgICAgZW5jID0gRVZQX2Rlc19lZGUzX2NiYygpOworICAgICBpZiAoYmlvX2VyciA9PSBOVUxM ICkgYmlvX2VyciA9IEJJT19uZXdfZnAgKHN0ZGVyciwgQklPX05PQ0xPU0UpOworIAorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3NwZWVkLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEyL2FwcHMvc3BlZWQuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zcGVlZC5jLmZp cHMJMjAxMi0wMS0xMSAyMjo0OToxNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x LWJldGEyL2FwcHMvc3BlZWQuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUyNTM5MzU3NCArMDEwMAor QEAgLTE5NSw3ICsxOTUsNiBAQAorICNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKyAj dW5kZWYgQUVTX3NldF9lbmNyeXB0X2tleQorICN1bmRlZiBBRVNfc2V0X2RlY3J5cHRfa2V5Cist I3VuZGVmIERFU19zZXRfa2V5X3VuY2hlY2tlZAorICNlbmRpZgorICNkZWZpbmUgQkZfc2V0X2tl eQlwcml2YXRlX0JGX3NldF9rZXkKKyAjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rf c2V0X2tleQorQEAgLTIwMyw3ICsyMDIsNiBAQAorICNkZWZpbmUgU0VFRF9zZXRfa2V5CXByaXZh dGVfU0VFRF9zZXRfa2V5CisgI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5 CisgI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5CistI2RlZmluZSBERVNf c2V0X2tleV91bmNoZWNrZWQJcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQKKyAjZGVmaW5l IEFFU19zZXRfZW5jcnlwdF9rZXkJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisgI2RlZmlu ZSBBRVNfc2V0X2RlY3J5cHRfa2V5CXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleQorICNkZWZp bmUgQ2FtZWxsaWFfc2V0X2tleQlwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkKK0BAIC05NDEsNyAr OTM5LDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCisgCQkJaWYgKHN0cmNtcCgqYXJndiwicnNhIikgPT0gMCkKKyAJCQl7CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKwkJCQlpZiAoIUZJUFNfbW9kZSgpKQorKyNlbmRpZgorKwkJCQl7 CisgCQkJcnNhX2RvaXRbUl9SU0FfNTEyXT0xOworKwkJCQl9CisgCQkJcnNhX2RvaXRbUl9SU0Ff MTAyNF09MTsKKyAJCQlyc2FfZG9pdFtSX1JTQV8yMDQ4XT0xOworIAkJCXJzYV9kb2l0W1JfUlNB XzQwOTZdPTE7CitAQCAtOTUxLDcgKzk1NCwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCisgI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorIAkJCWlmIChzdHJjbXAoKmFyZ3YsImRz YSIpID09IDApCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkJaWYgKCFGSVBTX21v ZGUoKSkKKysjZW5kaWYKKysJCQkJeworIAkJCWRzYV9kb2l0W1JfRFNBXzUxMl09MTsKKysJCQkJ fQorIAkJCWRzYV9kb2l0W1JfRFNBXzEwMjRdPTE7CisgCQkJZHNhX2RvaXRbUl9EU0FfMjA0OF09 MTsKKyAJCQl9CitAQCAtMTIyNiwzMCArMTIzNCw1NCBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCisgCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5MzIsMjU2LCZhZXNfa3MzKTsKKyAj ZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKKysJaWYgKGRvaXRbRF9DQkNfMTI4 X0NNTF0gfHwgZG9pdFtEX0NCQ18xOTJfQ01MXSB8fCBkb2l0W0RfQ0JDXzI1Nl9DTUxdKQorKwkg ICAgeworIAlDYW1lbGxpYV9zZXRfa2V5KGtleTE2LDEyOCwmY2FtZWxsaWFfa3MxKTsKKyAJQ2Ft ZWxsaWFfc2V0X2tleShja2V5MjQsMTkyLCZjYW1lbGxpYV9rczIpOworIAlDYW1lbGxpYV9zZXRf a2V5KGNrZXkzMiwyNTYsJmNhbWVsbGlhX2tzMyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRl ZiBPUEVOU1NMX05PX0lERUEKKysJaWYgKGRvaXRbRF9DQkNfSURFQV0pCisrCSAgICB7CisgCWlk ZWFfc2V0X2VuY3J5cHRfa2V5KGtleTE2LCZpZGVhX2tzKTsKKysJICAgIH0KKyAjZW5kaWYKKyAj aWZuZGVmIE9QRU5TU0xfTk9fU0VFRAorKwlpZiAoZG9pdFtEX0NCQ19TRUVEXSkKKysJICAgIHsK KyAJU0VFRF9zZXRfa2V5KGtleTE2LCZzZWVkX2tzKTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fUkM0CisrCWlmIChkb2l0W0RfUkM0XSkKKysJICAgIHsKKyAJUkM0X3Nl dF9rZXkoJnJjNF9rcywxNixrZXkxNik7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVO U1NMX05PX1JDMgorKwlpZiAoZG9pdFtEX0NCQ19SQzJdKQorKwkgICAgeworIAlSQzJfc2V0X2tl eSgmcmMyX2tzLDE2LGtleTE2LDEyOCk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVO U1NMX05PX1JDNQorKwlpZiAoZG9pdFtEX0NCQ19SQzVdKQorKwkgICAgeworIAlSQzVfMzJfc2V0 X2tleSgmcmM1X2tzLDE2LGtleTE2LDEyKTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fQkYKKysJaWYgKGRvaXRbRF9DQkNfQkZdKQorKwkgICAgeworIAlCRl9zZXRfa2V5 KCZiZl9rcywxNixrZXkxNik7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05P X0NBU1QKKysJaWYgKGRvaXRbRF9DQkNfQ0FTVF0pCisrCSAgICB7CisgCUNBU1Rfc2V0X2tleSgm Y2FzdF9rcywxNixrZXkxNik7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05P X1JTQQorIAltZW1zZXQocnNhX2MsMCxzaXplb2YocnNhX2MpKTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTIvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9Db25maWd1cmUK Ky0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL0NvbmZpZ3VyZS5maXBzCTIwMTItMDItMDcgMTE6MDc6 MDIuNDc2MzkzMTY1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9Db25maWd1cmUJMjAx Mi0wMi0wNyAxMTowNzowMi41MjYzOTM1ODIgKzAxMDAKK0BAIC05OTMsMTEgKzk5Myw2IEBAIGlm IChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQKKyAJJGRpc2FibGVkeyJzc2wy In0gPSAiZm9yY2VkIjsKKyAJfQorIAorLWlmICgkZmlwcyAmJiAkZmlwc2xpYmRpciBlcSAiIikK Ky0JeworLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsKKy0JfQorLQorICMgUlNB WCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2QuCisgaWYgKCRmaXBzKQor IAl7CitAQCAtMTQ3OCw3ICsxNDczLDYgQEAgJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX0dG Mm0iIGlmICgkYgorIGlmICgkZmlwcykKKyAJeworIAkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0i I2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CistCSRjZmxhZ3MgLj0gIiAtSVwkKEZJUFNESVIpL2lu Y2x1ZGUiOworIAl9CisgCisgJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9v YmogPX4gL1wubyQvKTsKK0BAIC0xNjY1LDkgKzE2NTksMTIgQEAgd2hpbGUgKDxJTj4pCisgCisg CXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87CisgCXMvXkZJUFNMSUJESVI9LiovRklQ U0xJQkRJUj0kZmlwc2xpYmRpci87CistCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJj cnlwdG8vIGlmICRmaXBzOworIAlzL15CQVNFQUREUj0uKi9CQVNFQUREUj0kYmFzZWFkZHIvOwor IAorKwlpZiAoJGZpcHMpCisrCQl7CisrCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKKysJCX0KKyAJ cy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87CisgCXMvXlNI TElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOworIAlzL15TSEFSRURfTElCUz0u Ki9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9f c2hhcmVkKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Flcy9hZXNfbWlz Yy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vYWVzL2Flc19taXNjLmMKKy0tLSBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTEtMDYtMDUg MTk6MzY6MzMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v YWVzL2Flc19taXNjLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MjYzOTM1ODIgKzAxMDAKK0BAIC02 OSwxNyArNjksMTEgQEAgY29uc3QgY2hhciAqQUVTX29wdGlvbnModm9pZCkgeworIGludCBBRVNf c2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBi aXRzLAorIAkJCUFFU19LRVkgKmtleSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZmlw c19jaXBoZXJfYWJvcnQoQUVTKTsKKy0jZW5kaWYKKyAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9l bmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworIAl9CisgCisgaW50IEFFU19zZXRfZGVj cnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisg CQkJQUVTX0tFWSAqa2V5KQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlmaXBzX2NpcGhl cl9hYm9ydChBRVMpOworLSNlbmRpZgorIAlyZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRf a2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2NtYWMvY21hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vY21h Yy9jbWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9jbWFjL2NtYWMuYy5maXBz CTIwMTEtMDYtMTIgMTc6MDc6MjUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vY21hYy9jbWFjLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MjczOTM1OTAgKzAx MDAKK0BAIC0xMDcsMTMgKzEwNyw2IEBAIENNQUNfQ1RYICpDTUFDX0NUWF9uZXcodm9pZCkKKyAK KyB2b2lkIENNQUNfQ1RYX2NsZWFudXAoQ01BQ19DVFggKmN0eCkKKyAJeworLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQorLQkJewor LQkJRklQU19jbWFjX2N0eF9jbGVhbnVwKGN0eCk7CistCQlyZXR1cm47CistCQl9CistI2VuZGlm CisgCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eC0+Y2N0eCk7CisgCU9QRU5TU0xfY2xlYW5z ZShjdHgtPnRibCwgRVZQX01BWF9CTE9DS19MRU5HVEgpOworIAlPUEVOU1NMX2NsZWFuc2UoY3R4 LT5rMSwgRVZQX01BWF9CTE9DS19MRU5HVEgpOworQEAgLTE2NCwxMSArMTU3LDYgQEAgaW50IENN QUNfSW5pdChDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCisgCQkJRVZQZXJyKEVWUF9GX0NNQUNf SU5JVCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworIAkJCXJldHVybiAwOworIAkJCX0KKy0J CS8qIE90aGVyIGFsZ29yaXRobSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2lu aXQsCistCQkgKiB2aWEgRklQU19jaXBoZXJpbml0KCkuCistCQkgKi8KKy0JCWlmICghaW1wbCAm JiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0JCQlyZXR1cm4gRklQU19jbWFjX2luaXQoY3R4LCBrZXks IGtleWxlbiwgY2lwaGVyLCBOVUxMKTsKKyAJCX0KKyAjZW5kaWYKKyAJLyogQWxsIHplcm9zIG1l YW5zIHJlc3RhcnQgKi8KK0BAIC0yMTQsMTAgKzIwMiw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFD X0NUWCAqY3R4LCBjb25zdCB2b2kKKyAJeworIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0g aW47CisgCXNpemVfdCBibDsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUo KSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0JCXJldHVybiBGSVBTX2NtYWNfdXBkYXRlKGN0eCwg aW4sIGRsZW4pOworLSNlbmRpZgorIAlpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKKyAJCXJl dHVybiAwOworIAlpZiAoZGxlbiA9PSAwKQorQEAgLTI1OSwxMCArMjQzLDYgQEAgaW50IENNQUNf VXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQorIGludCBDTUFDX0ZpbmFsKENNQUNfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpwb3V0bGVuKQorIAl7CisgCWludCBp LCBibCwgbGI7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0 eC0+Y2N0eC5lbmdpbmUpCistCQlyZXR1cm4gRklQU19jbWFjX2ZpbmFsKGN0eCwgb3V0LCBwb3V0 bGVuKTsKKy0jZW5kaWYKKyAJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisgCQlyZXR1cm4g MDsKKyAJYmwgPSBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKCZjdHgtPmNjdHgpOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9jcnlwdG8uaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Ny eXB0by5oLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi4yNTgzOTEzNTAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9jcnlwdG8uaAkyMDEyLTAyLTA3IDExOjA3OjAyLjUyNzM5 MzU5MCArMDEwMAorQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBGSVBTX21vZGVfc2V0KGludCBy KTsKKyB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKKyAKKyAjZGVmaW5lIGZpcHNfbWRfaW5pdChh bGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisrI2RlZmluZSBub25maXBzX21kX2luaXQo YWxnKSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQorKyNkZWZpbmUgZmlwc19tZF9pbml0 X2N0eChhbGcsIGN4KSBcCisrCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQorIAorICNpZmRl ZiBPUEVOU1NMX0ZJUFMKKy0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorKyNk ZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisgCWludCBhbGcjI19Jbml0KGN4 IyNfQ1RYICpjKSBcCisgCXsgXAorIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxF X18sIF9fTElORV9fLCBcCistCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcg IiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCisrCQkiRGlnZXN0ICIgI2FsZyAiIGZvcmJp ZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKyAJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMp OyBcCisgCX0gXAorIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19DVFggKmMpCisgCisg I2RlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKKyAJaWYgKEZJUFNfbW9kZSgpKSBPcGVu U1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorLQkJIkxvdyBsZXZlbCBBUEkgY2FsbCB0byBj aXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQorKwkJIkNpcGhlciAiICNh bGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCisrCisrLyogZGllIGlmIEZJUFMgc2VsZnRl c3QgZmFpbGVkICovCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOworIAorICNlbHNl CistI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKy0JaW50IGFsZyMjX0luaXQo Y3gjI19DVFggKmMpCisrI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gpIGZpcHNf bWRfaW5pdF9jdHgoYWxnLCBjeCkKKyAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgd2hp bGUoMCkKKyAjZW5kaWYKKyAKK0BAIC01ODAsNiArNTg1LDkgQEAgdm9pZCBPUEVOU1NMX2luaXQo dm9pZCk7CisgICovCisgdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKKyAKKysj ZGVmaW5lIE9QRU5TU0xfSEFWRV9JTklUCTEKKyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZv aWQpOworKworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KKyAK KyAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2Rlcy9kZXMuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Rlcy9kZXMuaAor LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Rlcy9kZXMuaC5maXBzCTIwMTItMDItMDcg MTE6MDc6MDIuMzI3MzkxOTI1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v ZGVzL2Rlcy5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTI4MzkzNTk4ICswMTAwCitAQCAtMjI0LDkg KzIyNCw2IEBAIGludCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Jsb2NrICprZXksREUKKyBpbnQg REVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2No ZWR1bGUpOworIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxE RVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Cisgdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQo Y29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKy0jaWZk ZWYgT1BFTlNTTF9GSVBTCistdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25z dF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworLSNlbmRpZgor IHZvaWQgREVTX3N0cmluZ190b19rZXkoY29uc3QgY2hhciAqc3RyLERFU19jYmxvY2sgKmtleSk7 Cisgdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICpr ZXkxLERFU19jYmxvY2sgKmtleTIpOworIHZvaWQgREVTX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5z aWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcgbGVuZ3RoLAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2Rlcy9zZXRfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9kZXMvc2V0X2tleS5jLmZpcHMJMjAxMS0wNi0wMSAxODo1NDowNC4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kZXMvc2V0X2tleS5jCTIwMTItMDIt MDcgMTE6MDc6MDIuNTI4MzkzNTk4ICswMTAwCitAQCAtMzM3LDEzICszMzcsNiBAQCBpbnQgREVT X3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrCisgCX0KKyAKKyB2b2lkIERFU19zZXRf a2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNj aGVkdWxlKQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JeworLQlmaXBzX2NpcGhlcl9hYm9ydChE RVMpOworLQlwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKKy0J fQorLXZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAq a2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKKy0jZW5kaWYKKyAJeworIAlzdGF0aWMg Y29uc3QgaW50IHNoaWZ0czJbMTZdPXswLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwfTsK KyAJcmVnaXN0ZXIgREVTX0xPTkcgYyxkLHQscyx0MjsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v ZGgvZGhfZ2VuLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kaC9kaF9nZW4uYy5m aXBzCTIwMTEtMDYtMDkgMTc6MjE6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MjgzOTM1OTgg KzAxMDAKK0BAIC04NCwxMSArODQsNiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChE SCAqcmV0LCBpCisgI2VuZGlmCisgCWlmKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQorIAkJ cmV0dXJuIHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0 b3IsIGNiKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJl dHVybiBGSVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sCistCQkJ CQkJCWdlbmVyYXRvciwgY2IpOworLSNlbmRpZgorIAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJh bXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOworIAl9CisgCitAQCAtMTIzLDYgKzEx OCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCisgCWludCBn LG9rPSAtMTsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9ESF9C VUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJu IDA7CisrCQl9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9E SF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9ESF9CVUlMVElO X0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9 CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290 byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RoL2RoLmgK Ky0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMi0wMi0wNyAx MTowNzowMi4xOTYzOTA4MzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9k aC9kaC5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTI5MzkzNjA2ICswMTAwCitAQCAtNzcsNiArNzcs OCBAQAorICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklUUwkxMDAwMAorICNlbmRp ZgorIAorKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKwor ICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKKyAjZGVmaW5lIERIX0ZMQUdf Tk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERI CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlv biBub3cgdXNlcyBjb25zdGFudCB0aW1lCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RoL2RoX2tl eS5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwkyMDEx LTExLTE0IDE1OjE2OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2RoL2RoX2tleS5jCTIwMTItMDItMDcgMTM6MzI6NDIuMTQ0NDQxNDIxICswMTAwCitA QCAtNjEsNiArNjEsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50 IGdlbmVyYXRlX2tleShESCAqZGgpOworIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQg Y2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7CitAQCAtMTA0LDcgKzEw Nyw3IEBAIGNvbXB1dGVfa2V5LAorIGRoX2JuX21vZF9leHAsCisgZGhfaW5pdCwKKyBkaF9maW5p c2gsCistMCwKKytESF9GTEFHX0ZJUFNfTUVUSE9ELAorIE5VTEwsCisgTlVMTAorIH07CitAQCAt MTIzLDYgKzEyNiwxNCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCisgCUJOX01P TlRfQ1RYICptb250PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxM OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1f Yml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7Cisr CQlESGVycihESF9GX0dFTkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJ cmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisrCisgCWN0eCA9IEJOX0NUWF9uZXcoKTsKKyAJaWYg KGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAKK0BAIC0yMTMsNiArMjI0LDEzIEBAIHN0YXRpYyBp bnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKKyAJCURIZXJyKERIX0ZfQ09NUFVURV9L RVksREhfUl9NT0RVTFVTX1RPT19MQVJHRSk7CisgCQlnb3RvIGVycjsKKyAJCX0KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwg T1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9D T01QVVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9 CisrI2VuZGlmCisgCisgCWN0eCA9IEJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBn b3RvIGVycjsKK0BAIC0yODAsNiArMjk4LDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNv bnN0IERIICpkaCwgQgorIAorIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCisgCXsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJZGgt PmZsYWdzIHw9IERIX0ZMQUdfQ0FDSEVfTU9OVF9QOworIAlyZXR1cm4oMSk7CisgCX0KK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZGgvZGhfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9kaC9kaF9saWIuYy5maXBzCTIwMTEtMDYtMjAgMjE6NDE6MTEuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGgvZGhfbGliLmMJMjAxMi0wMi0wNyAx MTowNzowMi41MjkzOTM2MDYgKzAxMDAKK0BAIC04MSwxNCArODEsNyBAQCBjb25zdCBESF9NRVRI T0QgKkRIX2dldF9kZWZhdWx0X21ldGhvZCh2CisgCXsKKyAJaWYoIWRlZmF1bHRfREhfbWV0aG9k KQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQly ZXR1cm4gRklQU19kaF9vcGVuc3NsKCk7CistCQllbHNlCistCQkJcmV0dXJuIERIX09wZW5TU0wo KTsKKy0jZWxzZQorIAkJZGVmYXVsdF9ESF9tZXRob2QgPSBESF9PcGVuU1NMKCk7CistI2VuZGlm CisgCQl9CisgCXJldHVybiBkZWZhdWx0X0RIX21ldGhvZDsKKyAJfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2RzYS9kc2FfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9k c2EvZHNhX2Vyci5jLmZpcHMJMjAxMS0xMC0xMCAwMToxMzo0OS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2Vyci5jCTIwMTItMDItMDcgMTE6 MDc6MDIuNTMwMzkzNjE0ICswMTAwCitAQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMgRVJSX1NUUklO R19EQVRBIERTQV9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKERTQV9GX0RPX0RTQV9QUklOVCks CSJET19EU0FfUFJJTlQifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFSQU1TX1BSSU5UKSwJIkRT QXBhcmFtc19wcmludCJ9LAorIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlApLAki RFNBcGFyYW1zX3ByaW50X2ZwIn0sCisre0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX0tFWUdF TiksCSJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKKyt7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5f UEFSQU1HRU4pLAkiZHNhX2J1aWx0aW5fcGFyYW1nZW4ifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNB X0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0RPX1ZFUklG WSksCSJEU0FfZG9fdmVyaWZ5In0sCisge0VSUl9GVU5DKERTQV9GX0RTQV9HRU5FUkFURV9LRVkp LAkiRFNBX2dlbmVyYXRlX2tleSJ9LAorQEAgLTEwNiw2ICsxMDgsOCBAQCBzdGF0aWMgRVJSX1NU UklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCisge0VSUl9SRUFTT04oRFNBX1JfREFUQV9UT09f TEFSR0VfRk9SX0tFWV9TSVpFKSwiZGF0YSB0b28gbGFyZ2UgZm9yIGtleSBzaXplIn0sCisge0VS Ul9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAor IHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUpICAgLCJpbnZhbGlkIGRpZ2Vz dCB0eXBlIn0sCisre0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCkgICAgICAsImtl eSBzaXplIGludmFsaWQifSwKKyt7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9UT09fU01BTEwp ICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFTT04oRFNBX1JfTUlTU0lOR19Q QVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAorIHtFUlJfUkVBU09OKERTQV9S X01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAorIHtFUlJfUkVB U09OKERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUykgLCJuZWVkIG5ldyBzZXR1cCB2YWx1ZXMi fSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTc6MjE6NDYu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9n ZW4uYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzMDM5MzYxNCArMDEwMAorQEAgLTg1LDYgKzg1LDE0 IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorICNlbmRpZgorIAorKyNpZm5kZWYgT1BF TlNTTF9GSVBTCisrc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwg c2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2ln bmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKKysJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0g KipxX3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKKytzdGF0aWMgaW50IEZJ UFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAorKwkJ QklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOworKyNl bmRpZgorKworIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJp dHMsCisgCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCisgCQlp bnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQorQEAg LTEwMCwxNCArMTA4LDYgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0 LAorIAlpZihyZXQtPm1ldGgtPmRzYV9wYXJhbWdlbikKKyAJCXJldHVybiByZXQtPm1ldGgtPmRz YV9wYXJhbWdlbihyZXQsIGJpdHMsIHNlZWRfaW4sIHNlZWRfbGVuLAorIAkJCQljb3VudGVyX3Jl dCwgaF9yZXQsIGNiKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWVsc2UgaWYgKEZJUFNfbW9k ZSgpKQorLQkJeworLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0 LCBiaXRzLCAKKy0JCQkJCQkJc2VlZF9pbiwgc2VlZF9sZW4sCistCQkJCQkJCWNvdW50ZXJfcmV0 LCBoX3JldCwgY2IpOworLQkJfQorLSNlbmRpZgorIAllbHNlCisgCQl7CisgCQljb25zdCBFVlBf TUQgKmV2cG1kOworQEAgLTEyNSwyNyArMTI1LDExOSBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFt ZXRlcnNfZXgoRFNBICpyZXQsCisgCQkJfQorIAorIAkJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFt Z2VuKHJldCwgYml0cywgcWJpdHMsIGV2cG1kLAorLQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBOVUxM LCBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKysJCQkJc2VlZF9pbiwgc2VlZF9sZW4sIGNvdW50 ZXJfcmV0LCBoX3JldCwgY2IpOworIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor K2ludCBGSVBTX2RzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6 ZV90IHFiaXRzLAorKwljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpz ZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCisrCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxv bmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFt Z2VuKHJldCwgYml0cywgcWJpdHMsCisrCQlldnBtZCwgc2VlZF9pbiwgc2VlZF9sZW4sCisrCQlj b3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKysJfQorKyNlbmRpZgorKworIGludCBkc2FfYnVpbHRp bl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKyAJY29uc3Qg RVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRf bGVuLAorLQl1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKKyAJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKKyAJeworIAlpbnQgb2s9MDsKKyAJdW5z aWduZWQgY2hhciBzZWVkW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysJQklHTlVNICpnPU5VTEws KnE9TlVMTCwqcD1OVUxMOworKwlzaXplX3QgcXNpemUgPSBxYml0cyA+PiAzOworKwlCTl9DVFgg KmN0eD1OVUxMOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFN R0VOLAorKwkJICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICBnb3RvIGVy cjsKKysJICAgIH0KKysKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJgorKwkgICAgKGJpdHMg IT0gMTAyNCB8fCBxYml0cyAhPSAxNjApICYmCisrCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRz ICE9IDIyNCkgJiYKKysJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjU2KSAmJgorKwkg ICAgKGJpdHMgIT0gMzA3MiB8fCBxYml0cyAhPSAyNTYpKQorKwkJeworKwkJRFNBZXJyKERTQV9G X0RTQV9CVUlMVElOX1BBUkFNR0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKKysJCWdvdG8g ZXJyOworKwkJfQorKyNlbmRpZgorKwlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVf dClxc2l6ZSkpCisrCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAt LSBpZ25vcmUgKi8KKysJaWYgKHNlZWRfbGVuID4gc2l6ZW9mKHNlZWQpKSAKKysJCXNlZWRfbGVu ID0gc2l6ZW9mKHNlZWQpOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdl ciBTRUVELAorKwkJCQkJCSAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3Rl ZCB0byAyNTYgYml0cyovCisrCWlmIChzZWVkX2luICE9IE5VTEwpCisrCQltZW1jcHkoc2VlZCwg c2VlZF9pbiwgc2VlZF9sZW4pOworKwllbHNlCisrCQlzZWVkX2xlbiA9IDA7CisrCisrCWlmICgo Y3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlCTl9DVFhfc3Rh cnQoY3R4KTsKKysKKysJaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9wcShjdHgsIGJpdHMsIHFiaXRz LCBldnBtZCwKKysJCXNlZWQsIHNlZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJfcmV0LCBjYikpCisr CQlnb3RvIGVycjsKKysKKysJaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0eCwgcCwgcSwgJmcs IGhfcmV0LCBjYikpCisrCQlnb3RvIGVycjsKKysKKysJb2s9MTsKKytlcnI6CisrCWlmIChvaykK KysJCXsKKysJCWlmKHJldC0+cCkKKysJCQl7CisrCQkJQk5fZnJlZShyZXQtPnApOworKwkJCXJl dC0+cCA9IE5VTEw7CisrCQkJfQorKwkJaWYocmV0LT5xKQorKwkJCXsKKysJCQlCTl9mcmVlKHJl dC0+cSk7CisrCQkJcmV0LT5xID0gTlVMTDsKKysJCQl9CisrCQlpZihyZXQtPmcpCisrCQkJewor KwkJCUJOX2ZyZWUocmV0LT5nKTsKKysJCQlyZXQtPmcgPSBOVUxMOworKwkJCX0KKysJCXJldC0+ cD1CTl9kdXAocCk7CisrCQlyZXQtPnE9Qk5fZHVwKHEpOworKwkJcmV0LT5nPUJOX2R1cChnKTsK KysJCWlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVM TCkKKysJCQlvaz0wOworKwkJfQorKwlpZihjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7 CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKwlyZXR1cm4gb2s7CisrCX0KKysKKysjaWZu ZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYworKyNlbmRpZgorK2ludCBGSVBTX2RzYV9nZW5lcmF0 ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysJCWNvbnN0IEVW UF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKKysJCUJJR05V TSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNi KQorKwl7CisrCWludCBvaz0wOworIAl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVO R1RIXTsKKy0JdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLGJ1ZjJbU0hB MjU2X0RJR0VTVF9MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xF TkdUSF07CisgCUJJR05VTSAqcjAsKlcsKlgsKmMsKnRlc3Q7CistCUJJR05VTSAqZz1OVUxMLCpx PU5VTEwsKnA9TlVMTDsKKy0JQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKKy0JaW50IGksIGssIG49 MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7CisrCUJJR05VTSAqcT1OVUxMLCpwPU5VTEw7Cisr CWludCBpLCBrLCBiLCBuPTAsIG09MCwgcXNpemUgPSBxYml0cyA+PiAzOworIAlpbnQgY291bnRl cj0wOworIAlpbnQgcj0wOworLQlCTl9DVFggKmN0eD1OVUxMOworLQl1bnNpZ25lZCBpbnQgaD0y OworIAorIAlpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0 X0RJR0VTVF9MRU5HVEggJiYKKyAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQor QEAgLTE1Myw1MSArMjQ1LDQzIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwg c2l6ZV8KKyAJCXJldHVybiAwOworIAorIAlpZiAoZXZwbWQgPT0gTlVMTCkKKy0JCS8qIHVzZSBT SEExIGFzIGRlZmF1bHQgKi8KKy0JCWV2cG1kID0gRVZQX3NoYTEoKTsKKysJICAgIHsKKysJCWlm IChxYml0cyA8PSAxNjApCisrCQkJZXZwbWQgPSBFVlBfc2hhMSgpOworKwkJZWxzZSBpZiAocWJp dHMgPD0gMjI0KQorKwkJCWV2cG1kID0gRVZQX3NoYTIyNCgpOworKwkJZWxzZQorKwkJCWV2cG1k ID0gRVZQX3NoYTI1NigpOworKwkgICAgfQorIAorIAlpZiAoYml0cyA8IDUxMikKKyAJCWJpdHMg PSA1MTI7CisgCisgCWJpdHMgPSAoYml0cys2MykvNjQqNjQ7CisgCistCS8qIE5COiBzZWVkX2xl biA9PSAwIGlzIHNwZWNpYWwgY2FzZTogY29weSBnZW5lcmF0ZWQgc2VlZCB0bworLSAJICogc2Vl ZF9pbiBpZiBpdCBpcyBub3QgTlVMTC4KKy0gCSAqLworLQlpZiAoc2VlZF9sZW4gJiYgKHNlZWRf bGVuIDwgKHNpemVfdClxc2l6ZSkpCistCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVy IHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KKy0JaWYgKHNlZWRfbGVuID4gKHNpemVfdClxc2l6ZSkg CistCQlzZWVkX2xlbiA9IHFzaXplOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dz IGxhcmdlciBTRUVELAorLQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0 cmljdGVkIHRvIDE2MCBiaXRzKi8KKy0JaWYgKHNlZWRfaW4gIT0gTlVMTCkKKy0JCW1lbWNweShz ZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7CistCistCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0g TlVMTCkKKy0JCWdvdG8gZXJyOworLQorLQlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09 IE5VTEwpCistCQlnb3RvIGVycjsKKy0KKy0JQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCXIwID0gQk5f Q1RYX2dldChjdHgpOworLQlnID0gQk5fQ1RYX2dldChjdHgpOworIAlXID0gQk5fQ1RYX2dldChj dHgpOworLQlxID0gQk5fQ1RYX2dldChjdHgpOworKwkqcV9yZXQgPSBxID0gQk5fQ1RYX2dldChj dHgpOworIAlYID0gQk5fQ1RYX2dldChjdHgpOworIAljID0gQk5fQ1RYX2dldChjdHgpOworLQlw ID0gQk5fQ1RYX2dldChjdHgpOworKwkqcF9yZXQgPSBwID0gQk5fQ1RYX2dldChjdHgpOworIAl0 ZXN0ID0gQk5fQ1RYX2dldChjdHgpOworIAorIAlpZiAoIUJOX2xzaGlmdCh0ZXN0LEJOX3ZhbHVl X29uZSgpLGJpdHMtMSkpCisgCQlnb3RvIGVycjsKKyAKKysJLyogc3RlcCAzIG4gPSBcbGNlaWwg Yml0cyAvIHFiaXRzIFxyY2VpbCAtIDEgKi8KKysJbiA9IChiaXRzK3FiaXRzLTEpL3FiaXRzIC0g MTsKKysJLyogc3RlcCA0IGIgPSBiaXRzIC0gMSAtIG4gKiBxYml0cyAqLworKwliID0gYml0cyAt IDEgLSBuKnFiaXRzOworKworIAlmb3IgKDs7KQorIAkJeworIAkJZm9yICg7OykgLyogZmluZCBx ICovCisgCQkJeworIAkJCWludCBzZWVkX2lzX3JhbmRvbTsKKyAKKy0JCQkvKiBzdGVwIDEgKi8K KysJCQkvKiBzdGVwIDUgZ2VuZXJhdGUgc2VlZCAqLworIAkJCWlmKCFCTl9HRU5DQl9jYWxsKGNi LCAwLCBtKyspKQorIAkJCQlnb3RvIGVycjsKKyAKK0BAIC0yMTIsMzAgKzI5NiwxOCBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQkJCXNlZWRfbGVuPTA7IC8q IHVzZSByYW5kb20gc2VlZCBpZiAnc2VlZF9pbicgdHVybnMgb3V0IHRvIGJlIGJhZCovCisgCQkJ CX0KKyAJCQltZW1jcHkoYnVmICwgc2VlZCwgcXNpemUpOworLQkJCW1lbWNweShidWYyLCBzZWVk LCBxc2l6ZSk7CistCQkJLyogcHJlY29tcHV0ZSAiU0VFRCArIDEiIGZvciBzdGVwIDc6ICovCist CQkJZm9yIChpID0gcXNpemUtMTsgaSA+PSAwOyBpLS0pCistCQkJCXsKKy0JCQkJYnVmW2ldKys7 CistCQkJCWlmIChidWZbaV0gIT0gMCkKKy0JCQkJCWJyZWFrOworLQkJCQl9CisgCistCQkJLyog c3RlcCAyICovCisrCQkJLyogc3RlcCA2IFUgPSBoYXNoKHNlZWQpICovCisgCQkJaWYgKCFFVlBf RGlnZXN0KHNlZWQsIHFzaXplLCBtZCwgICBOVUxMLCBldnBtZCwgTlVMTCkpCisgCQkJCWdvdG8g ZXJyOworLQkJCWlmICghRVZQX0RpZ2VzdChidWYsICBxc2l6ZSwgYnVmMiwgTlVMTCwgZXZwbWQs IE5VTEwpKQorLQkJCQlnb3RvIGVycjsKKy0JCQlmb3IgKGkgPSAwOyBpIDwgcXNpemU7IGkrKykK Ky0JCQkJbWRbaV1ePWJ1ZjJbaV07CisgCistCQkJLyogc3RlcCAzICovCisrCQkJLyogc3RlcCA3 IHEgPSAyXihxYml0cy0xKSArIFUgKyAxIC0gKFUgbW9kIDIpICovCisgCQkJbWRbMF0gfD0gMHg4 MDsKKyAJCQltZFtxc2l6ZS0xXSB8PSAweDAxOworIAkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6 ZSwgcSkpCisgCQkJCWdvdG8gZXJyOworIAorLQkJCS8qIHN0ZXAgNCAqLworKwkJCS8qIHN0ZXAg OCB0ZXN0IGZvciBwcmltZSAoNjQgcm91bmQgb2YgUmFiaW4tTWlsbGVyKSAqLworIAkJCXIgPSBC Tl9pc19wcmltZV9mYXN0dGVzdF9leChxLCBEU1NfcHJpbWVfY2hlY2tzLCBjdHgsCisgCQkJCQlz ZWVkX2lzX3JhbmRvbSwgY2IpOworIAkJCWlmIChyID4gMCkKK0BAIC0yNDMsMjcgKzMxNSwyMiBA QCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQkJaWYgKHIgIT0g MCkKKyAJCQkJZ290byBlcnI7CisgCistCQkJLyogZG8gYSBjYWxsYmFjayBjYWxsICovCistCQkJ Lyogc3RlcCA1ICovCisgCQkJfQorIAorIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDApKSBn b3RvIGVycjsKKyAJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkgZ290byBlcnI7CisgCist CQkvKiBzdGVwIDYgKi8KKysJCS8qIHN0ZXAgMTEgKi8KKyAJCWNvdW50ZXI9MDsKKy0JCS8qICJv ZmZzZXQgPSAyIiAqLworLQorLQkJbj0oYml0cy0xKS8xNjA7CisrCQkvKiAib2Zmc2V0ID0gMSIg Ki8KKyAKKyAJCWZvciAoOzspCisgCQkJeworIAkJCWlmICgoY291bnRlciAhPSAwKSAmJiAhQk5f R0VOQ0JfY2FsbChjYiwgMCwgY291bnRlcikpCisgCQkJCWdvdG8gZXJyOworIAorLQkJCS8qIHN0 ZXAgNyAqLworKwkJCS8qIHN0ZXAgMTEuMSwgMTEuMiBvYnRhaW4gVyAqLworIAkJCUJOX3plcm8o Vyk7CistCQkJLyogbm93ICdidWYnIGNvbnRhaW5zICJTRUVEICsgb2Zmc2V0IC0gMSIgKi8KKyAJ CQlmb3IgKGs9MDsgazw9bjsgaysrKQorIAkJCQl7CisgCQkJCS8qIG9idGFpbiAiU0VFRCArIG9m ZnNldCArIGsiIGJ5IGluY3JlbWVudGluZzogKi8KK0BAIC0yNzgsMjggKzM0NSwzMCBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQkJCQkJCQkJTlVMTCkpCisg CQkJCQlnb3RvIGVycjsKKyAKKy0JCQkJLyogc3RlcCA4ICovCisgCQkJCWlmICghQk5fYmluMmJu KG1kLCBxc2l6ZSwgcjApKQorIAkJCQkJZ290byBlcnI7CistCQkJCWlmICghQk5fbHNoaWZ0KHIw LHIwLChxc2l6ZSA8PCAzKSprKSkgZ290byBlcnI7CisrCQkJCWlmIChrID09IG4pCisrCQkJCQlC Tl9tYXNrX2JpdHMocjAsYik7CisrCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLHFiaXRzKmspKSBn b3RvIGVycjsKKyAJCQkJaWYgKCFCTl9hZGQoVyxXLHIwKSkgZ290byBlcnI7CisgCQkJCX0KKyAK Ky0JCQkvKiBtb3JlIG9mIHN0ZXAgOCAqLworLQkJCWlmICghQk5fbWFza19iaXRzKFcsYml0cy0x KSkgZ290byBlcnI7CisrCQkJLyogc3RlcCAxMS4zIFggPSBXICsgMl4oTC0xKSAqLworIAkJCWlm ICghQk5fY29weShYLFcpKSBnb3RvIGVycjsKKyAJCQlpZiAoIUJOX2FkZChYLFgsdGVzdCkpIGdv dG8gZXJyOworIAorLQkJCS8qIHN0ZXAgOSAqLworKwkJCS8qIHN0ZXAgMTEuNCBjID0gWCBtb2Qg MipxICovCisgCQkJaWYgKCFCTl9sc2hpZnQxKHIwLHEpKSBnb3RvIGVycjsKKyAJCQlpZiAoIUJO X21vZChjLFgscjAsY3R4KSkgZ290byBlcnI7CisrCisrCQkJLyogc3RlcCAxMS41IHAgPSBYIC0g KGMgLSAxKSAqLworIAkJCWlmICghQk5fc3ViKHIwLGMsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVy cjsKKyAJCQlpZiAoIUJOX3N1YihwLFgscjApKSBnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDEw ICovCisrCQkJLyogc3RlcCAxMS42ICovCisgCQkJaWYgKEJOX2NtcChwLHRlc3QpID49IDApCisg CQkJCXsKKy0JCQkJLyogc3RlcCAxMSAqLworKwkJCQkvKiBzdGVwIDExLjcgKi8KKyAJCQkJciA9 IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIERTU19wcmltZV9jaGVja3MsCisgCQkJCQkJY3R4 LCAxLCBjYik7CisgCQkJCWlmIChyID4gMCkKK0BAIC0zMDgsMTkgKzM3Nyw0NSBAQCBpbnQgZHNh X2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQkJCQlnb3RvIGVycjsKKyAJCQkJ fQorIAorLQkJCS8qIHN0ZXAgMTMgKi8KKysJCQkvKiBzdGVwIDExLjkgKi8KKyAJCQljb3VudGVy Kys7CisgCQkJLyogIm9mZnNldCA9IG9mZnNldCArIG4gKyAxIiAqLworIAorLQkJCS8qIHN0ZXAg MTQgKi8KKy0JCQlpZiAoY291bnRlciA+PSA0MDk2KSBicmVhazsKKysJCQkvKiBzdGVwIDEyICov CisrCQkJaWYgKGNvdW50ZXIgPj0gNCpiaXRzKSBicmVhazsKKyAJCQl9CisgCQl9CisgZW5kOgor IAlpZighQk5fR0VOQ0JfY2FsbChjYiwgMiwgMSkpCisgCQlnb3RvIGVycjsKKyAKKy0JLyogV2Ug bm93IG5lZWQgdG8gZ2VuZXJhdGUgZyAqLworKwlvaz0xOworK2VycjoKKysJaWYgKG9rKQorKwkJ eworKwkJaWYgKGNvdW50ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOworKwkJ fQorKwlyZXR1cm4gb2s7CisrCX0KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYwor KyNlbmRpZgorK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAs IEJJR05VTSAqcSwKKysJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5f R0VOQ0IgKmNiKQorKwl7CisrCWludCBvaz0wOworKwlCSUdOVU0gKnIwLCAqdGVzdCwgKmcgPSBO VUxMOworKwlCTl9NT05UX0NUWCAqbW9udDsKKysJdW5zaWduZWQgaW50IGg9MjsKKysKKysJaWYg KChtb250PUJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCXIw ID0gQk5fQ1RYX2dldChjdHgpOworKwkqZ19yZXQgPSBnID0gQk5fQ1RYX2dldChjdHgpOworKwl0 ZXN0ID0gQk5fQ1RYX2dldChjdHgpOworKworIAkvKiBTZXQgcjA9KHAtMSkvcSAqLworIAlpZiAo IUJOX3N1Yih0ZXN0LHAsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKKyAJaWYgKCFCTl9kaXYo cjAsTlVMTCx0ZXN0LHEsY3R4KSkgZ290byBlcnI7CitAQCAtMzQ0LDI2ICs0MzksNyBAQCBlbmQ6 CisgZXJyOgorIAlpZiAob2spCisgCQl7CistCQlpZihyZXQtPnApIEJOX2ZyZWUocmV0LT5wKTsK Ky0JCWlmKHJldC0+cSkgQk5fZnJlZShyZXQtPnEpOworLQkJaWYocmV0LT5nKSBCTl9mcmVlKHJl dC0+Zyk7CistCQlyZXQtPnA9Qk5fZHVwKHApOworLQkJcmV0LT5xPUJOX2R1cChxKTsKKy0JCXJl dC0+Zz1CTl9kdXAoZyk7CistCQlpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwg fHwgcmV0LT5nID09IE5VTEwpCistCQkJeworLQkJCW9rPTA7CistCQkJZ290byBlcnI7CistCQkJ fQorLQkJaWYgKGNvdW50ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOworIAkJ aWYgKGhfcmV0ICE9IE5VTEwpICpoX3JldD1oOworLQkJaWYgKHNlZWRfb3V0KQorLQkJCW1lbWNw eShzZWVkX291dCwgc2VlZCwgcXNpemUpOworLQkJfQorLQlpZihjdHgpCistCQl7CistCQlCTl9D VFhfZW5kKGN0eCk7CistCQlCTl9DVFhfZnJlZShjdHgpOworIAkJfQorIAlpZiAobW9udCAhPSBO VUxMKSBCTl9NT05UX0NUWF9mcmVlKG1vbnQpOworIAlyZXR1cm4gb2s7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9kc2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNh LmguZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjAyMTM4OTM3OSArMDEwMAorKysrIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2EuaAkyMDEyLTAyLTA3IDExOjA3OjAyLjUzMTM5MzYy MyArMDEwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9E VUxVU19CSVRTCTEwMDAwCisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4 MDEKKyAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcg d2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0 aW1lCitAQCAtMjY0LDYgKzI2NiwxNyBAQCBpbnQJRFNBX3ByaW50X2ZwKEZJTEUgKmJwLCBjb25z dCBEU0EgKngsCisgREggKkRTQV9kdXBfREgoY29uc3QgRFNBICpyKTsKKyAjZW5kaWYKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisraW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpy ZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKysJaW50ICpjb3Vu dGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisraW50IEZJUFNf ZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAor KwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVu LAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBC Tl9HRU5DQiAqY2IpOworK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdO VU0gKnAsIEJJR05VTSAqcSwKKysJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3Jl dCwgQk5fR0VOQ0IgKmNiKTsKKysjZW5kaWYKKysKKyAjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRf ZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cykgXAorIAlFVlBfUEtFWV9DVFhfY3RybChjdHgs IEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKKyAJCQkJRVZQX1BLRVlfQ1RS TF9EU0FfUEFSQU1HRU5fQklUUywgbmJpdHMsIE5VTEwpCitAQCAtMjg1LDEwICsyOTgsMTMgQEAg dm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERTQV9GX0RPX0RTQV9Q UklOVAkJCQkgMTA0CisgI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJCQkJIDEwMAorICNk ZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQorKyNkZWZpbmUgRFNBX0ZfRFNB X0JVSUxUSU5fS0VZR0VOCQkJIDEyNAorKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1H RU4JCQkgMTIzCisgI2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCisgI2RlZmluZSBE U0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMKKy0jZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9L RVkJCQkJIDEyNAorLSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAx MjMKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNgorKyNkZWZpbmUgRFNB X0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjcKKysjZGVmaW5lIERTQV9GX0RTQV9H RU5FUkFURV9QQVJBTUVURVJTCS8qIHVudXNlZCAqLwkgMTI1CisgI2RlZmluZSBEU0FfRl9EU0Ff TkVXX01FVEhPRAkJCQkgMTAzCisgI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAx MTkKKyAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1CitAQCAtMzE0LDExICszMzAs MTUgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERTQV9SX0RB VEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRQkJIDEwMAorICNkZWZpbmUgRFNBX1JfREVDT0RFX0VS Uk9SCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2Cisr I2RlZmluZSBEU0FfUl9LRVlfU0laRV9JTlZBTElECQkJCSAxMTMKKysjZGVmaW5lIERTQV9SX0tF WV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKKyAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVS UwkJCSAxMDEKKyAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKKy0jZGVm aW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTAKKysjZGVmaW5lIERTQV9SX05F RURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTIKKyAjZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9N RVRIT0QJCQkgMTExCisrI2RlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDExMQorICNk ZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNworKyNkZWZpbmUgRFNBX1JfT1BF UkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8gMTEyCisgI2RlZmlu ZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1CisgCisgI2lmZGVmICBfX2Nw bHVzcGx1cworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9rZXku Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKKy0tLSBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMJMjAxMS0wNi0wOSAxNzoy MTo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2Ev ZHNhX2tleS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTMxMzkzNjIzICswMTAwCitAQCAtNjYsNiAr NjYsMjQgQEAKKyAKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisgI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworK3N0YXRpYyBpbnQgZmlwc19jaGVj a19kc2EoRFNBICpkc2EpCisrCXsKKysJRVZQX1BLRVkgcGs7CisrCXVuc2lnbmVkIGNoYXIgdGJz W10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKyAgICAJcGsudHlwZSA9IEVWUF9QS0VZ X0RTQTsKKysgICAgCXBrLnBrZXkuZHNhID0gZHNhOworKworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdCgmcGssIHRicywgMCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkpCisrCQl7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlM RUQpOworKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJcmV0dXJuIDA7CisrCQl9Cisr CXJldHVybiAxOworKwl9CisrCisgI2VuZGlmCisgCisgc3RhdGljIGludCBkc2FfYnVpbHRpbl9r ZXlnZW4oRFNBICpkc2EpOworQEAgLTgyLDEwICsxMDAsNiBAQCBpbnQgRFNBX2dlbmVyYXRlX2tl eShEU0EgKmRzYSkKKyAjZW5kaWYKKyAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKQorIAkJcmV0 dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0J aWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX2tleShkc2EpOwor LSNlbmRpZgorIAlyZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2VuKGRzYSk7CisgCX0KKyAKK0BAIC05 NSw2ICsxMDksMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisg CUJOX0NUWCAqY3R4PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxM OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5m bGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+ cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJy KERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJ CWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09 IE5VTEwpIGdvdG8gZXJyOworIAorIAlpZiAoZHNhLT5wcml2X2tleSA9PSBOVUxMKQorQEAgLTEz Myw2ICsxNTYsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisg CisgCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7CisgCWRzYS0+cHViX2tleT1wdWJfa2V5OworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkgJiYgIWZpcHNfY2hlY2tfZHNhKGRz YSkpCisrCQl7CisrCQlkc2EtPnB1Yl9rZXkgPSBOVUxMOworKwkJZHNhLT5wcml2X2tleSA9IE5V TEw7CisrCSAgICAJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisgCW9rPTE7CisgCisgZXJyOgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2xpYi5j CTIwMTItMDItMDcgMTE6MDc6MDIuNTMxMzkzNjIzICswMTAwCitAQCAtODcsMTQgKzg3LDcgQEAg Y29uc3QgRFNBX01FVEhPRCAqRFNBX2dldF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlmKCFkZWZh dWx0X0RTQV9tZXRob2QpCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNf bW9kZSgpKQorLQkJCXJldHVybiBGSVBTX2RzYV9vcGVuc3NsKCk7CistCQllbHNlCistCQkJcmV0 dXJuIERTQV9PcGVuU1NMKCk7CistI2Vsc2UKKyAJCWRlZmF1bHRfRFNBX21ldGhvZCA9IERTQV9P cGVuU1NMKCk7CistI2VuZGlmCisgCQl9CisgCXJldHVybiBkZWZhdWx0X0RTQV9tZXRob2Q7Cisg CX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzCTIwMTItMDItMDcgMTE6MDc6 MDIuMDI1Mzg5NDEyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2Rz YV9sb2NsLmgJMjAxMi0wMi0wNyAxMTowNzowMi41MzIzOTM2MzIgKzAxMDAKK0BAIC01Niw1ICs1 Niw0IEBACisgCisgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0 cywgc2l6ZV90IHFiaXRzLAorIAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBj aGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCistCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0 LAorIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNi KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzCTIwMTEtMDItMDEgMTM6NTM6 NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2Rz YV9vc3NsLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MzIzOTM2MzIgKzAxMDAKK0BAIC02NSw2ICs2 NSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBEU0FfU0lHICpk c2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2Ep OworIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBC SUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOworQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwgLyog ZHNhX21vZF9leHAsICovCisgTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCisgZHNhX2luaXQs CisgZHNhX2ZpbmlzaCwKKy0wLAorK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAorIE5VTEwsCisgTlVM TCwKKyBOVUxMCitAQCAtMTM4LDYgKzE0MSwyMSBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3Np Z24oY29uc3QgdW5zaWduCisgCURTQV9TSUcgKnJldD1OVUxMOworIAlpbnQgbm9yZWRvID0gMDsK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIE5VTEw7CisrCSAgICB9CisrCisrCWlmIChGSVBT X21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykgCisrCQkm JiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpFX1RP T19TTUFMTCk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysjZW5kaWYKKysKKyAJQk5faW5pdCgm bSk7CisgCUJOX2luaXQoJnhyKTsKKyAKK0BAIC0zMjUsNiArMzQzLDIxIEBAIHN0YXRpYyBpbnQg ZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAorIAkJcmV0dXJuIC0xOworIAkJfQorIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIHsK KysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysKKysJaWYgKEZJUFNfbW9kZSgp ICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKKysJCSYmIChCTl9u dW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJ CXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOworKwkJcmV0dXJuIC0xOworKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMo ZHNhLT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlEU0FlcnIo RFNBX0ZfRFNBX0RPX1ZFUklGWSxEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMzk5LDYg KzQzMiw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAorIAorIHN0 YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ RklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlkc2EtPmZsYWdzfD1EU0FfRkxBR19D QUNIRV9NT05UX1A7CisgCXJldHVybigxKTsKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0 by9kc2EvZHNhX3BtZXRoLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNh X3BtZXRoLmMuZmlwcwkyMDExLTA2LTIwIDIyOjA1OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDEyLTAyLTA3IDExOjA3 OjAyLjUzMzM5MzY0MSArMDEwMAorQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgaW50IHBrZXlf ZHNhX3BhcmFtZ2VuKEVWUF9QS0VZX0NUCisgCWlmICghZHNhKQorIAkJcmV0dXJuIDA7CisgCXJl dCA9IGRzYV9idWlsdGluX3BhcmFtZ2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRzLCBk Y3R4LT5wbWQsCistCSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5V TEwsIE5VTEwsIHBjYik7CisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5V TEwsIE5VTEwsIHBjYik7CisgCWlmIChyZXQpCisgCQlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXks IGRzYSk7CisgCWVsc2UKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9k c2F0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhdGVzdC5jCist LS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzCTIwMDgtMDgt MDYgMTc6NTQ6MTEuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZHNhL2RzYXRlc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzMzM5MzY0MSArMDEwMAorQEAg LTk2LDM2ICs5Niw0MSBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGRzYV9jYihpbnQgcCwgaW50 CisgLyogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gZnJvbSB0aGUgdXBkYXRl ZCBBcHBlbmRpeCA1IHRvCisgICogRklQUyBQVUIgMTg2IGFuZCBhbHNvIGFwcGVhciBpbiBBcHBl bmRpeCA1IHRvIEZJUFMgUElCIDE4Ni0xICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsy MF09eworLQkweGQ1LDB4MDEsMHg0ZSwweDRiLDB4NjAsMHhlZiwweDJiLDB4YTgsMHhiNiwweDIx LDB4MWIsMHg0MCwKKy0JMHg2MiwweGJhLDB4MzIsMHgyNCwweGUwLDB4NDIsMHg3ZCwweGQzLAor KwkweDAyLDB4NDcsMHgxMSwweDkyLDB4MTEsMHg4OCwweEM4LDB4RkIsMHhBRiwweDQ4LDB4NEMs MHg2MiwKKysJMHhERiwweEE1LDB4QkUsMHhBMCwweEE0LDB4M0MsMHg1NiwweEUzLAorIAl9Owor IAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW109eworLQkweDhkLDB4ZjIsMHhhNCwweDk0 LDB4NDksMHgyMiwweDc2LDB4YWEsCistCTB4M2QsMHgyNSwweDc1LDB4OWIsMHhiMCwweDY4LDB4 NjksMHhjYiwKKy0JMHhlYSwweGMwLDB4ZDgsMHgzYSwweGZiLDB4OGQsMHgwYywweGY3LAorLQkw eGNiLDB4YjgsMHgzMiwweDRmLDB4MGQsMHg3OCwweDgyLDB4ZTUsCistCTB4ZDAsMHg3NiwweDJm LDB4YzUsMHhiNywweDIxLDB4MGUsMHhhZiwKKy0JMHhjMiwweGU5LDB4YWQsMHhhYywweDMyLDB4 YWIsMHg3YSwweGFjLAorLQkweDQ5LDB4NjksMHgzZCwweGZiLDB4ZjgsMHgzNywweDI0LDB4YzIs CistCTB4ZWMsMHgwNywweDM2LDB4ZWUsMHgzMSwweGM4LDB4MDIsMHg5MSwKKysJMHhBQywweENC LDB4MUUsMHg2MywweDYwLDB4NjksMHgwQywweEZCLDB4MDYsMHgxOSwweDY4LDB4M0UsCisrCTB4 QTUsMHgwMSwweDVBLDB4QTIsMHgxNSwweDVDLDB4RTIsMHg5OSwweDJELDB4RDUsMHgzMCwweDk5 LAorKwkweDdFLDB4NUYsMHg4RCwweEUyLDB4RjcsMHhDNiwweDJFLDB4OEQsMHhBMywweDlGLDB4 NTgsMHhBRCwKKysJMHhENiwweEE5LDB4N0QsMHgwRSwweDBELDB4OTUsMHg1MywweEE2LDB4NzEs MHgzQSwweERFLDB4QUIsCisrCTB4QUMsMHhFOSwweEY0LDB4MzYsMHg1NSwweDlFLDB4QjksMHhE NiwweDkzLDB4QkYsMHhGMywweDE4LAorKwkweDFDLDB4MTQsMHg3QiwweEE1LDB4NDIsMHgyRSww eENELDB4MDAsMHhFQiwweDM1LDB4M0IsMHgxQiwKKysJMHhBOCwweDUxLDB4QkIsMHhFMSwweDU4 LDB4NDIsMHg4NSwweDg0LDB4MjIsMHhBNywweDk3LDB4NUUsCisrCTB4OTksMHg2RiwweDM4LDB4 MjAsMHhCRCwweDlELDB4QjYsMHhEOSwweDMzLDB4MzcsMHgyQSwweEZELAorKwkweEJCLDB4RDQs MHhCQywweDBDLDB4MkEsMHg2NywweENCLDB4OUYsMHhCQiwweERGLDB4RjksMHg5MywKKysJMHhB QSwweEQ2LDB4RjAsMHhENiwweDk1LDB4MEIsMHg1RCwweDY1LDB4MTQsMHhEMCwweDE4LDB4OUQs CisrCTB4QzYsMHhBRiwweEYwLDB4QzYsMHgzNywweDdDLDB4RjMsMHg1RiwKKyAJfTsKKyAKKyBz dGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdPXsKKy0JMHhjNywweDczLDB4MjEsMHg4YywweDcz LDB4N2UsMHhjOCwweGVlLAorLQkweDk5LDB4M2IsMHg0ZiwweDJkLDB4ZWQsMHgzMCwweGY0LDB4 OGUsCistCTB4ZGEsMHhjZSwweDkxLDB4NWYsCisrCTB4RTMsMHg4RSwweDVFLDB4NkQsMHhCRiww eDJCLDB4NzksMHhGOCwweEM1LDB4NEIsMHg4OSwweDhCLAorKwkweEJBLDB4MkQsMHg5MSwweEMz LDB4NkMsMHg4MCwweEFDLDB4ODcsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0 X2dbXT17CistCTB4NjIsMHg2ZCwweDAyLDB4NzgsMHgzOSwweGVhLDB4MGEsMHgxMywKKy0JMHg0 MSwweDMxLDB4NjMsMHhhNSwweDViLDB4NGMsMHhiNSwweDAwLAorLQkweDI5LDB4OWQsMHg1NSww eDIyLDB4OTUsMHg2YywweGVmLDB4Y2IsCistCTB4M2IsMHhmZiwweDEwLDB4ZjMsMHg5OSwweGNl LDB4MmMsMHgyZSwKKy0JMHg3MSwweGNiLDB4OWQsMHhlNSwweGZhLDB4MjQsMHhiYSwweGJmLAor LQkweDU4LDB4ZTUsMHhiNywweDk1LDB4MjEsMHg5MiwweDVjLDB4OWMsCistCTB4YzQsMHgyZSww eDlmLDB4NmYsMHg0NiwweDRiLDB4MDgsMHg4YywKKy0JMHhjNSwweDcyLDB4YWYsMHg1MywweGU2 LDB4ZDcsMHg4OCwweDAyLAorKwkweDQyLDB4NEEsMHgwNCwweDRFLDB4NzksMHhCNCwweDk5LDB4 N0YsMHhGRCwweDU4LDB4MzYsMHgyQywKKysJMHgxQiwweDVGLDB4MTgsMHg3RSwweDBELDB4Q0Ms MHhBQiwweDgxLDB4QzksMHg1RCwweDEwLDB4Q0UsCisrCTB4NEUsMHg4MCwweDdFLDB4NTgsMHhC NCwweDM0LDB4M0YsMHhBNywweDQ1LDB4QzcsMHhBQSwweDM2LAorKwkweDI0LDB4NDIsMHhBOSww eDNCLDB4RTgsMHgwRSwweDA0LDB4MDIsMHgyRCwweEZCLDB4QTYsMHgxMywKKysJMHhCOSwweEI1 LDB4MTUsMHhBNSwweDU2LDB4MDcsMHgzNSwweEU0LDB4MDMsMHhCNiwweDc5LDB4N0MsCisrCTB4 NjIsMHhERCwweERGLDB4M0YsMHg3MSwweDNBLDB4OUQsMHg4QiwweEM0LDB4RjYsMHhFNywweDFE LAorKwkweDUyLDB4QTgsMHhBOSwweDQzLDB4MUQsMHgzMywweDUxLDB4ODgsMHgzOSwweEJELDB4 NzMsMHhFOSwKKysJMHg1RiwweEJFLDB4ODIsMHg0OSwweDI3LDB4RTYsMHhCNSwweDUzLDB4QzEs MHgzOCwweEFDLDB4MkYsCisrCTB4NkQsMHg5NywweDZDLDB4RUIsMHg2NywweEMxLDB4NUYsMHg2 NywweEY4LDB4MzUsMHgwNSwweDVFLAorKwkweEQ1LDB4NjgsMHg4MCwweEFBLDB4OTYsMHhDQSww eDBCLDB4OEEsMHhFNiwweEYxLDB4QjEsMHg0MSwKKysJMHhDNiwweDc1LDB4OTQsMHgwQSwweDBB LDB4MkEsMHhGQSwweDI5LAorIAl9OworIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0 cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOworQEAgLTE1Nyw3ICsxNjIsNyBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCUJJT19wcmludGYoYmlvX2VyciwidGVzdCBnZW5l cmF0aW9uIG9mIERTQSBwYXJhbWV0ZXJzXG4iKTsKKyAKKyAJQk5fR0VOQ0Jfc2V0KCZjYiwgZHNh X2NiLCBiaW9fZXJyKTsKKy0JaWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDUxMiwKKysJaWYoKChkc2EgPSBEU0FfbmV3KCkp ID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCisgCQkJ CXNlZWQsIDIwLCAmY291bnRlciwgJmgsICZjYikpCisgCQlnb3RvIGVuZDsKKyAKK0BAIC0xNzAs OSArMTc1LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlCSU9fcHJpbnRm KGJpb19lcnIsIlxuY291bnRlcj0lZCBoPSVsZFxuIixjb3VudGVyLGgpOworIAkJCisgCURTQV9w cmludChiaW9fZXJyLGRzYSwwKTsKKy0JaWYgKGNvdW50ZXIgIT0gMTA1KSAKKysJaWYgKGNvdW50 ZXIgIT0gMjM5KSAKKyAJCXsKKy0JCUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQg YmUgMTA1XG4iKTsKKysJCUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMjM5 XG4iKTsKKyAJCWdvdG8gZW5kOworIAkJfQorIAlpZiAoaCAhPSAyKQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMJMjAxMS0wOC0xMCAyMDo1MzoxMy4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCTIw MTItMDItMDcgMTE6MDc6MDIuNTMzMzkzNjQxICswMTAwCitAQCAtNTgsMTEgKzU4LDI1IEBACisg CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgImVuZ19pbnQuaCIKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHZv aWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCisgCXsKKyAJLyogU29tZSBFTkdJ TkVzIG5lZWQgdGhpcyAqLworIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAoRklQU19tb2RlKCkpIHsK KysJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQor KwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgorKwkJICAgVXNlciBpcyBkaXNh bGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCisrCQkgICBieSBzZWN1cml0eSBw b2xpY3kuICovCisrCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7CisrCQlyZXR1cm47CisrCX0KKysj ZW5kaWYKKyAjaWYgMAorIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9w ZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCisgCSAqIGl0IGlzIHRoZSAqb25seSogd2F5 IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2Vyci9lcnJfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJMjAxMS0wNi0yMSAxODo1ODoxMC4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTItMDIt MDcgMTE6MDc6MDIuNTM0MzkzNjQ5ICswMTAwCitAQCAtOTYsNiArOTYsOSBAQAorICNpbmNsdWRl IDxvcGVuc3NsL29jc3AuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC90cy5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NNUworICNpbmNsdWRlIDxvcGVu c3NsL2Ntcy5oPgorICNlbmRpZgorQEAgLTE1Myw2ICsxNTYsOSBAQCB2b2lkIEVSUl9sb2FkX2Ny eXB0b19zdHJpbmdzKHZvaWQpCisgI2VuZGlmCisgCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOwor IAlFUlJfbG9hZF9VSV9zdHJpbmdzKCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlFUlJfbG9h ZF9GSVBTX3N0cmluZ3MoKTsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisgCUVS Ul9sb2FkX0NNU19zdHJpbmdzKCk7CisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9l dnAvY19hbGxjLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvY19hbGxjLmMu ZmlwcwkyMDExLTExLTE0IDIyOjEzOjM1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzNDM5MzY0 OSArMDEwMAorQEAgLTY1LDYgKzY1LDExIEBACisgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVy cyh2b2lkKQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGli cmFyeSgpOworKwlpZighRklQU19tb2RlKCkpIAorKwkJeworKyNlbmRpZgorICNpZm5kZWYgT1BF TlNTTF9OT19ERVMKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7CisgCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKK0BAIC0yMjcsNCArMjMyLDYwIEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxs aWFfMjU2X2NiYywiQ0FNRUxMSUEyNTYiKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2Ft ZWxsaWFfMjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGUzX2NmYigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOworKworKwlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZV9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7 CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOworKwlFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRlczMiKTsKKysKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19lZGUoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsK KysjZW5kaWYKKysKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2VjYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2NmYjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfY3RyKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsKKysJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzEyOF9jYmMsIkFFUzEyOCIpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhT Tl9hZXNfMTI4X2NiYywiYWVzMTI4Iik7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Vj YigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Nm YjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y3RyKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7CisrCUVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJBRVMxOTIiKTsKKysJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzE5Ml9jYmMsImFlczE5MiIpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmI4KCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMjU2X2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVz XzI1Nl9jYmMsImFlczI1NiIpOworKyNlbmRpZgorKwkJfQorKyNlbmRpZgorIAl9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9ldnAvY19hbGxkLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9ldnAvY19hbGxkLmMuZmlwcwkyMDA5LTA3LTA4IDEwOjUwOjUzLjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9jX2FsbGQuYwkyMDEyLTAyLTA3 IDExOjA3OjAyLjUzNDM5MzY0OSArMDEwMAorQEAgLTY0LDYgKzY0LDExIEBACisgCisgdm9pZCBP cGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAoIUZJUFNfbW9kZSgpKQorKwkJeworKyNl bmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19NRDQKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX21kNCgp KTsKKyAjZW5kaWYKK0BAIC0xMTEsNCArMTE2LDMyIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2Rp Z2VzdHModm9pZCkKKyAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCisgCUVWUF9hZGRfZGln ZXN0KEVWUF93aGlybHBvb2woKSk7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJ fQorKwllbHNlCisrCQl7CisrI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5l ZChPUEVOU1NMX05PX1NIQTEpCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOworKwlFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKKysJRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKKysjaWZuZGVm IE9QRU5TU0xfTk9fRFNBCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOworKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKKysJRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKKysJRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xf Tk9fRUNEU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOworKyNlbmRpZgorKyNlbmRp ZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIy NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKysjZW5kaWYKKysjaWZuZGVm IE9QRU5TU0xfTk9fU0hBNTEyCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7CisrCUVW UF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7CisrI2VuZGlmCisrCQl9CisrI2VuZGlmCisgCX0K K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9kaWdlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTEtMDUtMjkgMTc6NTU6MTMuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIw MTItMDItMDcgMTE6MDc6MDIuNTM1MzkzNjU3ICswMTAwCitAQCAtMTQyLDkgKzE0Miw1MCBAQCBp bnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCisgCXJldHVybiBFVlBfRGln ZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOworIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBh dHRlbXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBp Z25vcmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9D VFggKmN0eCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAw O30KKysKKytzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQg KmRhdGEsc2l6ZV90IGNvdW50KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0 ZSIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4 LHVuc2lnbmVkIGNoYXIgKm1kKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFs Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9CisrCXsKKysJ MCwKKysJMCwKKysJMCwKKysJMCwKKysJYmFkX2luaXQsCisrCWJhZF91cGRhdGUsCisrCWJhZF9m aW5hbCwKKysJTlVMTCwKKysJTlVMTCwKKysJTlVMTCwKKysJMCwKKysJezAsMCwwLDB9LAorKwl9 OworKworKyNlbmRpZgorKworIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgs IGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQorIAl7CisgCUVWUF9NRF9DVFhfY2xl YXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNf Rl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJY3R4 LT5kaWdlc3QgPSAmYmFkX21kOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgI2lmbmRl ZiBPUEVOU1NMX05PX0VOR0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0 cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRoaXMgY29udGV4 dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworQEAg LTIwMSw2ICsyNDIsMTggQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwg YworICNlbmRpZgorIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKKyAJCXsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkpCisrCQkJeworKwkJCWlmICghKHR5cGUtPmZs YWdzICYgRVZQX01EX0ZMQUdfRklQUykgCisrCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19OT05fRklQU19BTExPVykpCisrCQkJCXsKKysJCQkJRVZQZXJyKEVWUF9GX0VWUF9E SUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrCQkJCWN0eC0+ZGlnZXN0 ID0gJmJhZF9tZDsKKysJCQkJcmV0dXJuIDA7CisrCQkJCX0KKysJCQl9CisrI2VuZGlmCisgCQlp ZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQorIAkJCU9QRU5TU0xfZnJl ZShjdHgtPm1kX2RhdGEpOworIAkJY3R4LT5kaWdlc3Q9dHlwZTsKK0BAIC0yMjksMjYgKzI4Miwx NSBAQCBza2lwX3RvX2luaXQ6CisgCQl9CisgCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX05PX0lOSVQpCisgCQlyZXR1cm4gMTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChG SVBTX21vZGUoKSkKKy0JCXsKKy0JCWlmIChGSVBTX2RpZ2VzdGluaXQoY3R4LCB0eXBlKSkKKy0J CQlyZXR1cm4gMTsKKy0JCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworLQkJY3R4LT5tZF9k YXRhID0gTlVMTDsKKy0JCXJldHVybiAwOworLQkJfQorLSNlbmRpZgorIAlyZXR1cm4gY3R4LT5k aWdlc3QtPmluaXQoY3R4KTsKKyAJfQorIAorIGludCBFVlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9D VFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQorIAl7CisgI2lmZGVmIE9Q RU5TU0xfRklQUworLQlyZXR1cm4gRklQU19kaWdlc3R1cGRhdGUoY3R4LCBkYXRhLCBjb3VudCk7 CistI2Vsc2UKKy0JcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworICNlbmRpZgorKwlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEs Y291bnQpOworIAl9CisgCisgLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1v dmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCitAQCAtMjYzLDEwICszMDUs MTEgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVucworIC8qIFRoZSBj YWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0 aGUgY29udGV4dCAqLworIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQorIAl7CistI2lmZGVmIE9QRU5T U0xfRklQUworLQlyZXR1cm4gRklQU19kaWdlc3RmaW5hbChjdHgsIG1kLCBzaXplKTsKKy0jZWxz ZQorIAlpbnQgcmV0OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVj aygpOworKyNlbmRpZgorKworIAlPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8 PSBFVlBfTUFYX01EX1NJWkUpOworIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7Cisg CWlmIChzaXplICE9IE5VTEwpCitAQCAtMjc4LDcgKzMyMSw2IEBAIGludCBFVlBfRGlnZXN0Rmlu YWxfZXgoRVZQX01EX0NUWCAqY3R4LAorIAkJfQorIAltZW1zZXQoY3R4LT5tZF9kYXRhLDAsY3R4 LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAJcmV0dXJuIHJldDsKKy0jZW5kaWYKKyAJfQorIAorIGlu dCBFVlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqb3V0LCBjb25zdCBFVlBfTURfQ1RYICppbikK K0BAIC0zNzIsNyArNDE0LDYgQEAgdm9pZCBFVlBfTURfQ1RYX2Rlc3Ryb3koRVZQX01EX0NUWCAq Y3R4KQorIC8qIFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBj b250ZXh0ICovCisgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCisgCXsK Ky0jaWZuZGVmIE9QRU5TU0xfRklQUworIAkvKiBEb24ndCBhc3N1bWUgY3R4LT5tZF9kYXRhIHdh cyBjbGVhbmVkIGluIEVWUF9EaWdlc3RfRmluYWwsCisgCSAqIGJlY2F1c2Ugc29tZXRpbWVzIG9u bHkgY29waWVzIG9mIHRoZSBjb250ZXh0IGFyZSBldmVyIGZpbmFsaXNlZC4KKyAJICovCitAQCAt Mzg1LDcgKzQyNiw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQor IAkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+bWRfZGF0YSxjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpOwor IAkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CisgCQl9CistI2VuZGlmCisgCWlmIChjdHgt PnBjdHgpCisgCQlFVlBfUEtFWV9DVFhfZnJlZShjdHgtPnBjdHgpOworICNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKK0BAIC0zOTQsOSArNDM0LDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChF VlBfTURfQ1RYICpjdHgpCisgCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0 aGlzIHJlYXNvbi4gKi8KKyAJCUVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUpOworICNlbmRpZgor LSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQU19tZF9jdHhfY2xlYW51cChjdHgpOworLSNlbmRp ZgorIAltZW1zZXQoY3R4LCdcMCcsc2l6ZW9mICpjdHgpOworIAorIAlyZXR1cm4gMTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZXZwL2VfYWVzLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMTEtMTEtMTUgMTM6MTk6NTYuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMi0wMi0wNyAx MTowNzowMi41MzUzOTM2NTcgKzAxMDAKK0BAIC01Niw3ICs1Niw2IEBACisgI2luY2x1ZGUgPGFz c2VydC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorICNpbmNsdWRlICJldnBfbG9jbC5o IgorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgI2luY2x1ZGUgIm1vZGVzX2xjbC5oIgorICNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAKK0BAIC03MTYsNyArNzE1LDcgQEAgc3RhdGljIGludCBh ZXNfZ2NtX2N0cmwoRVZQX0NJUEhFUl9DVFggKgorIAkJaWYgKGFyZyA8PSAwKQorIAkJCXJldHVy biAwOworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYg IShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQlpZiAoRklQU19t b2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisgCQkJ CQkJICYmIGFyZyA8IDEyKQorIAkJCXJldHVybiAwOworICNlbmRpZgorQEAgLTExMjgsNyArMTEy Nyw3IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIoRVZQX0NJUEhFUl9DVFgKKyAJCXJldHVy biAwOworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKyAJLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhF ICovCistCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhf RkxBR19OT05fRklQU19BTExPVykgJiYKKysJaWYgKEZJUFNfbW9kZSgpICYmICEoY3R4LT5mbGFn cyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCisgCQkJKGxlbiA+ICgxVUw8PDIw KSoxNikpCisgCQl7CisgCQlFVlBlcnIoRVZQX0ZfQUVTX1hUU19DSVBIRVIsIEVWUF9SX1RPT19M QVJHRSk7CitAQCAtMTMxMCw0ICsxMzA5LDMgQEAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVz LDE5MiwxLDEyLGNjbQorIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20s Q0NNLEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCisgCisgI2VuZGlmCistI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZV9kZXMzLmMKKy0tLSBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcwkyMDExLTA1LTI5IDAxOjAxOjI2LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9lX2RlczMuYwky MDEyLTAyLTA3IDExOjA3OjAyLjUzNTM5MzY1NyArMDEwMAorQEAgLTY1LDggKzY1LDYgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgCist I2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQ X0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorIAkJCSAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKKyAKK0BAIC0yMDgsOSArMjA2LDkgQEAgc3Rh dGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAorICAgICB9CisgCisgQkxPQ0tf Q0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwg NjQsCistCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAorLQkJ CUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJ CUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFV TFRfQVNOMSwKKysJCQlkZXNfZWRlX2luaXRfa2V5LAorKwkJCU5VTEwsIE5VTEwsIE5VTEwsCisg CQkJZGVzM19jdHJsKQorIAorICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVf Y2ZiNjRfY2lwaGVyCitAQCAtMjE5LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVz X2VkZSwgREVTX0VERV9LRVksCisgI2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVf ZWNiX2NpcGhlcgorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwg TklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCistCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGUzX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJCUVW UF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFH X0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZTNfaW5pdF9rZXks CisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVS X2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKKy0JCSAg ICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVW UF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisr CQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxM LCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVz X2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsOCwKKy0JCSAgICAgRVZQX0NJUEhf UkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0 X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9S QU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisr CQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJ ICAgICBkZXMzX2N0cmwpCisgCisgc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBI RVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKK0BAIC0zMTMsNCArMzExLDMg QEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzKHZvaWQpCisgCXJldHVybiAmZGVzX2Vk ZTNfZWNiOworIH0KKyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2 cC9lX251bGwuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9lX251bGwuYy5m aXBzCTIwMTEtMDYtMjAgMjI6MDA6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM1MzkzNjU3 ICswMTAwCitAQCAtNjEsOCArNjEsNiBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNp bmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworLQor IHN0YXRpYyBpbnQgbnVsbF9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICprZXksCisgCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LGludCBlbmMpOworIHN0 YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LAorQEAgLTcxLDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9 CisgCXsKKyAJTklEX3VuZGVmLAorIAkxLDAsMCwKKy0JMCwKKysJRVZQX0NJUEhfRkxBR19GSVBT LAorIAludWxsX2luaXRfa2V5LAorIAludWxsX2NpcGhlciwKKyAJTlVMTCwKK0BAIC0xMDEsNCAr OTksMyBAQCBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjCisgCQltZW1j cHkoKGNoYXIgKilvdXQsKGNvbnN0IGNoYXIgKilpbixpbmwpOworIAlyZXR1cm4gMTsKKyAJfQor LSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2V2cF9lbmMu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9ldnBfZW5jLmMKKy0tLSBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAxMS0xMC0xMyAxNTo0 MjoyOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAv ZXZwX2VuYy5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM2MzkzNjY1ICswMTAwCitAQCAtNjksMTcg KzY5LDU4IEBACisgI2VuZGlmCisgI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCistI2lmZGVmIE9Q RU5TU0xfRklQUworLSNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIEZJUFNf Y2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQorLSNlbHNlCisgI2RlZmluZSBNX2RvX2NpcGhlcihj dHgsIG91dCwgaW4sIGlubCkgY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlu bCkKKy0jZW5kaWYKKyAKKyAKKyBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNT TF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVy cG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9u IEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMu CisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25z dCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGlu dCBlbmMpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9 CisrCisrc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwKKysJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGlu dCBpbmwpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAw O30KKysKKysvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFp bGVkIGluaXQgKi8KKysKKytzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAq Y3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRf YXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9D VFggKmN0eCwgQVNOMV9UWVBFICp0eXApCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIg Z2V0X2FzbjEiKTsgcmV0dXJuIDA7fQorK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9D VFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKKysJeyBGSVBTX0VSUk9SX0lH Tk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBiYWRfY2lwaGVyID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwli YWRfaW5pdCwKKysJYmFkX2RvX2NpcGhlciwKKysJTlVMTCwKKysJMCwKKysJYmFkX3NldF9hc24x LAorKwliYWRfZ2V0X2FzbjEsCisrCWJhZF9jdHJsLAorKwlOVUxMCisrCX07CisrCisrI2VuZGlm CisrCisgdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCisgCXsK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYK KyAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAkvKiBjdHgtPmNpcGhl cj1OVUxMOyAqLworIAl9CitAQCAtMTExLDYgKzE1MiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRf ZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgCQkJZW5jID0gMTsKKyAJCWN0eC0+ZW5jcnlwdCA9IGVu YzsKKyAJCX0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOworKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCXJl dHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyog V2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCIn ZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJ TkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0xNjUsOSArMjE0LDYgQEAgaW50IEVWUF9D aXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorIAkJCWN0eC0+ZW5naW5lID0gTlVMTDsK KyAjZW5kaWYKKyAKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlyZXR1cm4gRklQU19jaXBoZXJp bml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOworLSNlbHNlCisgCQljdHgtPmNpcGhlcj1j aXBoZXI7CisgCQlpZiAoY3R4LT5jaXBoZXItPmN0eF9zaXplKQorIAkJCXsKK0BAIC0xOTIsNyAr MjM4LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorIAkJCQly ZXR1cm4gMDsKKyAJCQkJfQorIAkJCX0KKy0jZW5kaWYKKyAJCX0KKyAJZWxzZSBpZighY3R4LT5j aXBoZXIpCisgCQl7CitAQCAtMjAyLDkgKzI0Nyw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChF VlBfQ0lQSEVSX0NUWCAqY3QKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgc2tpcF90b19p bml0OgorICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JcmV0dXJuIEZJUFNfY2lwaGVy aW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKKy0jZWxzZQorIAkvKiB3ZSBhc3N1bWUg YmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBkYXRlICovCisgCU9QRU5TU0xf YXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDEKKyAJICAgIHx8IGN0eC0+Y2lwaGVy LT5ibG9ja19zaXplID09IDgKK0BAIC0yNDQsNiArMjg2LDIyIEBAIHNraXBfdG9faW5pdDoKKyAJ CX0KKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJLyogQWZ0ZXIgJ2tleScgaXMgc2V0 IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KKysJICogU28g b25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KKysJICovCisr CWlmIChrZXkgJiYgRklQU19tb2RlKCkpCisrCQl7CisrCQlpZiAoIShjdHgtPmNpcGhlci0+Zmxh Z3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9G TEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQl7CisrCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJ TklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrCQkJY3R4LT5jaXBoZXIgPSAmYmFk X2NpcGhlcjsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKGtl eSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsK KyAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOworIAl9 CitAQCAtMjUxLDcgKzMwOSw2IEBAIHNraXBfdG9faW5pdDoKKyAJY3R4LT5maW5hbF91c2VkPTA7 CisgCWN0eC0+YmxvY2tfbWFzaz1jdHgtPmNpcGhlci0+YmxvY2tfc2l6ZS0xOworIAlyZXR1cm4g MTsKKy0jZW5kaWYKKyAJfQorIAorIGludCBFVlBfQ2lwaGVyVXBkYXRlKEVWUF9DSVBIRVJfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsLAorQEAgLTU2NCw3ICs2MjEsNiBA QCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQX0NJUEhFUl9DVFgKKyAKKyBpbnQgRVZQX0NJ UEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKKyAJeworLSNpZm5kZWYgT1BFTlNT TF9GSVBTCisgCWlmIChjLT5jaXBoZXIgIT0gTlVMTCkKKyAJCXsKKyAJCWlmKGMtPmNpcGhlci0+ Y2xlYW51cCAmJiAhYy0+Y2lwaGVyLT5jbGVhbnVwKGMpKQorQEAgLTU3NSwxNiArNjMxLDEyIEBA IGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1QKKyAJCX0KKyAJaWYgKGMt PmNpcGhlcl9kYXRhKQorIAkJT1BFTlNTTF9mcmVlKGMtPmNpcGhlcl9kYXRhKTsKKy0jZW5kaWYK KyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgCWlmIChjLT5lbmdpbmUpCisgCQkvKiBUaGUg RVZQX0NJUEhFUiB3ZSB1c2VkIGJlbG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxlYXNlIHRoZQorIAkJ ICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCisgCQlF TkdJTkVfZmluaXNoKGMtPmVuZ2luZSk7CisgI2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUwor LQlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cChjKTsKKy0jZW5kaWYKKyAJbWVtc2V0KGMsMCxzaXpl b2YoRVZQX0NJUEhFUl9DVFgpKTsKKyAJcmV0dXJuIDE7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9ldnAuaC5m aXBzCTIwMTItMDItMDcgMTE6MDc6MDIuMjg4MzkxNjAyICswMTAwCisrKysgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZXZwL2V2cC5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTM2MzkzNjY1ICsw MTAwCitAQCAtNzUsNiArNzUsMTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyAjZW5k aWYKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorKworIC8qCisgI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgorICNkZWZpbmUg RVZQX1JDNF9LRVlfU0laRQkJMTYKK0BAIC0yNzIsMTAgKzI3Niw2IEBAIHN0cnVjdCBlbnZfbWRf Y3R4X3N0CisgCQkJCQkJKiBjbGVhbmVkICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVV U0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQorIAkJCQkJCSogaW4gRVZQ X01EX0NUWF9jbGVhbnVwICovCistLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQg aW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCistICogc28gd2UgZG9uJ3QgYWNjaWRlbnRh bGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgorLSAqLworLQorICNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Yg bm9uIEZJUFMgZGlnZXN0CisgCQkJCQkJICogaW4gRklQUyBtb2RlICovCisgCitAQCAtMjg3LDYg KzI4NywxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorICNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9D VFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9D VFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCisrI2RlZmluZSBNX0VWUF9NRF9D VFhfRkxBR19QU1NfU0FMVChjdHgpIFwKKysJCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8q IHNlZWQgbGVuZ3RoICovCisrI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZG RgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLworIAorICNk ZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0aWFsaXpl IG1kX2RhdGEgKi8KKyAKK0BAIC0zMzgsMTUgKzM0MiwxNSBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9z dAorIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUg CUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAorIC8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlv bmFsIGNvcHlpbmcgbG9naWMgKi8KKy0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0 MDAKKysjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCisgLyogQWxsb3cgdXNl IGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEJMHgxMDAwCisgLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZC MSBtb2RlIG9ubHkgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAw MAorIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KKy0jZGVmaW5l CQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwMAorKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQ UwkJMHg0MDAKKyAvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCistI2Rl ZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMDAKKysjZGVmaW5lCQlFVlBf Q0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCisgLyogQ2lwaGVyIGhhbmRsZXMgYW55IGFu ZCBhbGwgcGFkZGluZyBsb2dpYyBhcyB3ZWxsCisgICogYXMgZmluYWxpc2F0aW9uLgorICAqLwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9ldnBfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxMS0wNS0yOSAwNDozMjowNS4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZXZwX2xpYi5j CTIwMTItMDItMDcgMTE6MDc6MDIuNTM3MzkzNjczICswMTAwCitAQCAtMTkwLDYgKzE5MCw5IEBA IGludCBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF8KKyAKKyBpbnQgRVZQX0Np cGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJldHVybiBjdHgtPmNpcGhl ci0+ZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKTsKKyAJfQorIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2 cC9ldnBfbG9jbC5oLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi4yNzkzOTE1MjcgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZXZwX2xvY2wuaAkyMDEyLTAyLTA3IDEx OjA3OjAyLjUzNzM5MzY3MyArMDEwMAorQEAgLTI1OCwxMCArMjU4LDkgQEAgY29uc3QgRVZQX0NJ UEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAorIAlCTE9DS19DSVBIRVJfZnVuY19jZmIoY2lw aGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKKyAJQkxPQ0tf Q0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwKKyAJCQkgICAgIE5J RF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCistCQkJ ICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9z ZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLQkJCSAg ICAgTlVMTCkKKysJCQkgICAgIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCisrCQkJICAg ICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKysKKyAKKyBzdHJ1 Y3QgZXZwX3BrZXlfY3R4X3N0CisgCXsKK0BAIC0zNjcsMTEgKzM2Niw2IEBAIGludCBQS0NTNV92 Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KKyAjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVf TUQyX0luaXQKKyAjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAorICNkZWZpbmUg U0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAorLSNkZWZpbmUgU0hBMV9Jbml0CXByaXZhdGVfU0hB MV9Jbml0CistI2RlZmluZSBTSEEyMjRfSW5pdAlwcml2YXRlX1NIQTIyNF9Jbml0CistI2RlZmlu ZSBTSEEyNTZfSW5pdAlwcml2YXRlX1NIQTI1Nl9Jbml0CistI2RlZmluZSBTSEEzODRfSW5pdAlw cml2YXRlX1NIQTM4NF9Jbml0CistI2RlZmluZSBTSEE1MTJfSW5pdAlwcml2YXRlX1NIQTUxMl9J bml0CisgCisgI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQorICNkZWZpbmUg Q0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5CitAQCAtMzc5LDcgKzM3Myw2IEBAIGlu dCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KKyAjZGVmaW5lIFNFRURfc2V0 X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9S QzJfc2V0X2tleQorICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQorLSNk ZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2Vk CisgI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQorIAor ICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL01ha2VmaWxl LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL01ha2VmaWxlCistLS0gb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMJMjAxMS0xMi0yNyAxNTozODoy Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvTWFr ZWZpbGUJMjAxMi0wMi0wNyAxMTowNzowMi41MzgzOTM2ODEgKzAxMDAKK0BAIC0yOCw3ICsyOCw3 IEBAIExJQlNSQz0gZW5jb2RlLmMgZGlnZXN0LmMgZXZwX2VuYy5jIGV2cF8KKyAJYmlvX21kLmMg YmlvX2I2NC5jIGJpb19lbmMuYyBldnBfZXJyLmMgZV9udWxsLmMgXAorIAljX2FsbC5jIGNfYWxs Yy5jIGNfYWxsZC5jIGV2cF9saWIuYyBiaW9fb2suYyBcCisgCWV2cF9wa2V5LmMgZXZwX3BiZS5j IHA1X2NycHQuYyBwNV9jcnB0Mi5jIFwKKy0JZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5j IHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBldnBfZmlwcy5jCVwKKysJZV9vbGQuYyBwbWV0aF9saWIu YyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBcCisgCWVfYWVzX2NiY19obWFjX3No YTEuYyBlX3JjNF9obWFjX21kNS5jCisgCisgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBf ZW5jLm8gZXZwX2tleS5vIGV2cF9hY25mLm8gXAorQEAgLTQxLDcgKzQxLDcgQEAgTElCT0JKPQll bmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZwXworIAliaW9fbWQubyBiaW9fYjY0Lm8gYmlv X2VuYy5vIGV2cF9lcnIubyBlX251bGwubyBcCisgCWNfYWxsLm8gY19hbGxjLm8gY19hbGxkLm8g ZXZwX2xpYi5vIGJpb19vay5vIFwKKyAJZXZwX3BrZXkubyBldnBfcGJlLm8gcDVfY3JwdC5vIHA1 X2NycHQyLm8gXAorLQllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBt X3NpZ3Zlci5vIGV2cF9maXBzLm8gXAorKwllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8g cG1ldGhfZ24ubyBtX3NpZ3Zlci5vIFwKKyAJZV9hZXNfY2JjX2htYWNfc2hhMS5vIGVfcmM0X2ht YWNfbWQ1Lm8KKyAKKyBTUkM9ICQoTElCU1JDKQorQEAgLTEwMyw0NCArMTAzLDQ2IEBAIGJpb19i NjQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3AKKyBiaW9fYjY0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBiaW9f YjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaAorIGJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorLWJpb19iNjQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAorLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWJpb19i NjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiaW9f YjY0LmMKKytiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKKytiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Jpb19iNjQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKytiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Jpb19iNjQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytiaW9f YjY0Lm86IC4uL2NyeXB0bGliLmggYmlvX2I2NC5jCisgYmlvX2VuYy5vOiAuLi8uLi9lX29zLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIGJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIGJpb19lbmMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oCisgYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oCistYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCistYmlvX2VuYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CistYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAorLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistYmlvX2VuYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJpb19lbmMuYwor K2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrYmlvX2VuYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAorK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2Jpb19lbmMubzog Li4vY3J5cHRsaWIuaCBiaW9fZW5jLmMKKyBiaW9fbWQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgYmlvX21k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKKyBiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCistYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLWJpb19tZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1i aW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKKy1iaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCistYmlvX21kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCistYmlvX21kLm86IC4uL2NyeXB0bGliLmggYmlvX21kLmMKKytiaW9fbWQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytiaW9f bWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAorK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrYmlvX21kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisr YmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCAuLi9jcnlwdGxpYi5oIGJpb19tZC5jCisgYmlvX29rLm86IC4uLy4uL2Vfb3MuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGJp b19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2NyeXB0by5oCisgYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKy1iaW9fb2subzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o CistYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKy1iaW9fb2subzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCistYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0 bGliLmggYmlvX29rLmMKKytiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2Jpb19vay5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisrYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrYmlvX29rLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrYmlvX29r Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oCisrYmlvX29rLm86IC4uL2NyeXB0bGliLmggYmlvX29rLmMKKyBjX2FsbC5vOiAu Li8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmgKKyBjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1jX2FsbC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistY19h bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAorLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAorK2NfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAorK2NfYWxsLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytjX2FsbC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o CisgY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oCisgY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKyBjX2FsbC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcu aAorQEAgLTE1MCw5ICsxNTIsOCBAQCBjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUw OS5oIC4uCisgY19hbGwubzogLi4vY3J5cHRsaWIuaCBjX2FsbC5jCisgY19hbGxjLm86IC4uLy4u L2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAorIGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistY19hbGxjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1jX2Fs bGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaAorK2NfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmgKKytjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIGNfYWxsYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCisgY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtMTYzLDkgKzE2NCw4IEBAIGNf YWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4KKyBjX2FsbGMubzogLi4vY3J5 cHRsaWIuaCBjX2FsbGMuYworIGNfYWxsZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBjX2FsbGQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWMuaAorLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytjX2FsbGQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrY19h bGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCisgY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBjX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIGNfYWxsZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAorQEAgLTE3NiwxMCArMTc2LDkgQEAgY19hbGxkLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC94NTA5LmggLgorIGNfYWxsZC5vOiAuLi9jcnlwdGxpYi5oIGNfYWxsZC5jCisgZGln ZXN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAorIGRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVm ZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistZGlnZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistZGlnZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZHNhLmgKKy1kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAorLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytkaWdlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCisrZGlnZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmgKKytkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAorIGRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBkaWdlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKyBkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3BrY3M3LmgKK0BAIC0xOTAsMTggKzE4OSwxOSBAQCBkaWdlc3QubzogLi4v Y3J5cHRsaWIuaCBkaWdlc3QuYworIGVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisgZV9hZXMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfYWVzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAor LWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAorLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tb2Rlcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKy1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistZV9hZXMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKKy1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistZV9hZXMubzog Li4vbW9kZXMvbW9kZXNfbGNsLmggZV9hZXMuYyBldnBfbG9jbC5oCisrZV9hZXMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX2Fl cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bW9kZXMuaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZV9hZXMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JhbmQuaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oIC4uL21vZGVzL21vZGVzX2xjbC5oIGVfYWVzLmMKKytlX2Flcy5vOiBldnBf bG9jbC5oCisgZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIGVfYWVzX2NiY19obWFjX3NoYTEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmgKKytlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisgZV9hZXNfY2Jj X2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgZV9hZXNfY2Jj X2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgZV9hZXNfY2Jj X2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorQEAgLTIx MSwyMCArMjExLDIzIEBAIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGUK KyBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorIGVf YWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBlX2Fl c19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVfYWVz X2NiY19obWFjX3NoYTEuYworK2VfYWVzX2NiY19obWFjX3NoYTEubzogZXZwX2xvY2wuaAorIGVf YmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oCisgZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmxvd2Zp c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBlX2JmLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorIGVfYmYu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aAorLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAorLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorLWVfYmYubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK Ky1lX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggLi4vY3J5cHRsaWIuaCBlX2JmLmMgZXZwX2xvY2wuaAorK2VfYmYubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2VfYmYubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCisrZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZV9iZi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaAorK2VfYmYubzogLi4vY3J5cHRsaWIuaCBlX2JmLmMgZXZwX2xvY2wuaAorIGVfY2Ft ZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKKyBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYW1lbGxpYS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfY2FtZWxsaWEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZV9jYW1l bGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKKy1lX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2VfY2FtZWxsaWEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX2NhbWVs bGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKKytlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKKyBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisg ZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAorIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitAQCAtMjMzLDc0 ICsyMzYsODAgQEAgZV9jYXN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZQorIGVf Y2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Nhc3QuaAorIGVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKyBlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWVfY2FzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCist ZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKy1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1lX2Nhc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCistZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0 bGliLmggZV9jYXN0LmMgZXZwX2xvY2wuaAorK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZV9jYXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAorK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytlX2Nhc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmgKKytlX2Nhc3QubzogLi4vY3J5cHRsaWIuaCBlX2Nhc3QuYyBldnBfbG9jbC5oCisg ZV9kZXMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1 ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfZGVzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCisgZV9k ZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCistZV9kZXMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKy1lX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcmFuZC5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZV9kZXMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKKy1lX2Rl cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmggLi4vY3J5cHRsaWIuaCBlX2Rl cy5jIGV2cF9sb2NsLmgKKytlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2VfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytlX2Rlcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCisrZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2VfZGVzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCisrZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3VpX2NvbXBhdC5oCisrZV9kZXMubzogLi4vY3J5cHRsaWIuaCBlX2Rlcy5jIGV2cF9s b2NsLmgKKyBlX2RlczMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlX2RlczMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNf b2xkLmgKKyBlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCistZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1lX2Rl czMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKKy1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorLWVfZGVzMy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKy1l X2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3VpLmgKKy1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5o IC4uL2NyeXB0bGliLmggZV9kZXMzLmMgZXZwX2xvY2wuaAorK2VfZGVzMy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2VfZGVzMy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oCisrZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytlX2Rl czMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCisrZV9kZXMzLm86 IC4uL2NyeXB0bGliLmggZV9kZXMzLmMgZXZwX2xvY2wuaAorIGVfaWRlYS5vOiAuLi8uLi9lX29z LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmgKKyBlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1lX2lkZWEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9pZGVhLmgKKy1lX2lkZWEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaAorLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZV9pZGVh Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaAorLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAu Li9jcnlwdGxpYi5oIGVfaWRlYS5jIGV2cF9sb2NsLmgKKytlX2lkZWEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX2lkZWEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2lkZWEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAorK2VfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytlX2lkZWEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCisrZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZV9pZGVhLm86IC4uL2NyeXB0bGliLmggZV9p ZGVhLmMgZXZwX2xvY2wuaAorIGVfbnVsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBlX251bGwubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorIGVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKy1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCistZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorLWVfbnVsbC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAorLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKy1lX251bGwubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKy1l X251bGwubzogLi4vY3J5cHRsaWIuaCBlX251bGwuYworK2VfbnVsbC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2VfbnVsbC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCisrZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytlX251bGwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCisrZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4u L2NyeXB0bGliLmggZV9udWxsLmMKKyBlX29sZC5vOiBlX29sZC5jCisgZV9yYzIubzogLi4vLi4v ZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCisgZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWVfcmMyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLWVfcmMyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistZV9yYzIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjMi5oCistZV9yYzIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCistZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5 cHRsaWIuaCBlX3JjMi5jIGV2cF9sb2NsLmgKKytlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2VfcmMyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytl X3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCisrZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytlX3JjMi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcmMyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisr ZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmgKKytlX3JjMi5vOiAuLi9jcnlwdGxpYi5oIGVfcmMyLmMgZXZwX2xvY2wu aAorIGVfcmM0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlX3JjNC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1l X3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKKy1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorLWVfcmM0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYzQuaAorLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9yYzQuYyBldnBfbG9jbC5oCisrZV9yYzQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgK KytlX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisrZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2VfcmM0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o CisrZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjNC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaAorK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZV9yYzQubzogLi4vY3J5cHRsaWIu aCBlX3JjNC5jIGV2cF9sb2NsLmgKKyBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGVfcmM0X2htYWNfbWQ1 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaAorLWVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmgKKy1lX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCisrZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX3JjNF9obWFjX21k NS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaAorIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKKyBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAorIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCitA QCAtMzA4LDI5ICszMTcsMjQgQEAgZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsLworIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAorIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisgZV9y YzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZV9yYzRfaG1h Y19tZDUuYworLWVfcmM1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmgKKy1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCistZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZV9yYzUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKy1lX3Jj NS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9yYzUuYworK2VfcmM1Lm86IGVfcmM1 LmMKKyBlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKKyBlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisgZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKy1lX3NlZWQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAorLWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZV9zZWVkLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2VlZC5oCistZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistZV9zZWVkLm86IGVfc2VlZC5jIGV2cF9sb2NsLmgK KytlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2Vfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytlX3NlZWQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK KytlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z ZWVkLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytlX3NlZWQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZV9zZWVkLmMgZXZwX2xvY2wuaAorIGVfeGNiY19kLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisgZV94Y2JjX2Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aAorIGVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZGVzLmgKKyBlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVz X29sZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisgZV94Y2JjX2QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWVfeGNi Y19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKKy1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZV94Y2JjX2QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2Vf eGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAorK2VfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisgZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKyBlX3hjYmNfZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBl X3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvdWkuaAorQEAgLTMzOSwyOCArMzQzLDI3IEBAIGVfeGNiY19kLm86IGV2cF9sb2Ns LmgKKyBlbmNvZGUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlbmNvZGUubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CistZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorLWVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1lbmNvZGUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK Ky1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCistZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistZW5jb2RlLm86IC4uL2Ny eXB0bGliLmggZW5jb2RlLmMKKytlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2VuY29kZS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCisrZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZW5jb2RlLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2Vu Y29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVu Y29kZS5jCisgZXZwX2FjbmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmgKKyBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBldnBfYWNuZi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1l dnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKKy1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1ldnBfYWNuZi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2V2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZXZwX2FjbmYubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAorK2V2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorIGV2cF9h Y25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAorIGV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIC4uL2NyeXB0bGliLmggZXZwX2FjbmYuYworIGV2cF9lbmMubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBldnBfZW5jLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aAorLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjZGguaAorLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCistZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZXZwX2VuYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CisrZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaAorIGV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIGV2cF9lbmMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAor IGV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC0zNzIsMjQgKzM3NSwxNyBAQCBldnBfZW5jLm86IC4u L2NyeXB0bGliLmggZXZwX2VuYy5jIGV2cF9sCisgZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGV2cF9lcnIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o CisgZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oCistZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCistZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCist ZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZXZwX2Vyci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBldnBfZXJyLmMKKy1ldnBfZmlwcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorLWV2 cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaAorLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCistZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAor LWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZXZwX2ZpcHMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZXZwX2ZpcHMuYworK2V2cF9lcnIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAorK2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2V2cF9lcnIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCisrZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2V2cF9lcnIubzogZXZwX2Vyci5jCisg ZXZwX2tleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIGV2 cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9idWZmZXIuaAorIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCistZXZwX2tleS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1l dnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAorK2V2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2V2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorIGV2cF9rZXkubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o CisgZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKK0BAIC00MDEsMTcg KzM5NywxNyBAQCBldnBfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wCisgZXZw X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2J1ZmZlci5oCisgZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKyBldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKy1ldnBfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK Ky1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKy1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZXZwX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKy1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4u L2NyeXB0bGliLmggZXZwX2xpYi5jCisrZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZXZwX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK KytldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytldnBfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oCisrZXZwX2xpYi5vOiAuLi9jcnlwdGxpYi5oIGV2cF9saWIuYworIGV2cF9wYmUu bzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBldnBfcGJlLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVy LmgKKyBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaAorLWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLWV2cF9wYmUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZXZwX3BiZS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKKytldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmgKKytldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIGV2cF9w YmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKKyBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaAorQEAgLTQyMiw5ICs0MTgsOCBA QCBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmCisgZXZwX3BrZXkubzog Li4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBldnBfcGtleS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5o CisgZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oCistZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWV2cF9wa2V5 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorK2V2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKKytldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisgZXZwX3BrZXkubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisg ZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBldnBfcGtl eS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorQEAgLTQzNiw5ICs0MzEsOCBAQCBldnBfcGtleS5vOiAuLi9hc24xL2Fz bjFfbG9jbC5oIC4uL2NyeXB0CisgbV9kc3MubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV9kc3MubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaAorLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKKy1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1tX2Rzcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyttX2Rzcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o CisrbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisg bV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3BrY3M3LmgKK0BAIC00NDksOSArNDQzLDggQEAgbV9kc3MubzogLi4vY3J5cHRsaWIu aCBtX2Rzcy5jCisgbV9kc3MxLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIG1fZHNzMS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisgbV9k c3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaAorLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkaC5oCistbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2Rz YS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyttX2RzczEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAor K21fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCisgbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor IG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcGtjczcuaAorQEAgLTQ1OSwzMSArNDUyLDIzIEBAIG1fZHNzMS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWMKKyBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKyBtX2RzczEubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92Znku aAorIG1fZHNzMS5vOiAuLi9jcnlwdGxpYi5oIG1fZHNzMS5jCistbV9lY2RzYS5vOiAuLi8uLi9l X29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorLW1fZWNkc2EubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorLW1fZWNk c2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZWNkaC5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1tX2VjZHNhLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLW1fZWNk c2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorLW1fZWNkc2EubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgK Ky1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2hhLmgKKy1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistbV9lY2RzYS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCist bV9lY2RzYS5vOiAuLi9jcnlwdGxpYi5oIG1fZWNkc2EuYworLW1fbWQyLm86IC4uLy4uL2Vfb3Mu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyttX2VjZHNhLm86IG1fZWNkc2EuYworK21f bWQyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAorIG1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZm ZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBtX21kMi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1tX21kMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAorLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistbV9tZDIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistbV9tZDIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBtX21kMi5j CisrbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbWQyLmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyttX21kMi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAorK21fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCisrbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK21fbWQyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK21f bWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC94NTA5LmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAu Li9jcnlwdGxpYi5oIGV2cF9sb2NsLmggbV9tZDIuYworIG1fbWQ0Lm86IC4uLy4uL2Vfb3MuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAor IG1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKKy1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAorLW1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1tX21kNC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV9tZDQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oCisrbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmgKKyBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbWQ0LmgKKyBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBtX21kNC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAorQEAgLTQ5NCw5ICs0NzksOCBAQCBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3ltaGFja3MuCisgbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5 LmggLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fbWQ0LmMKKyBtX21kNS5vOiAuLi8uLi9lX29z LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmgKKyBtX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCistbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1tX21kNS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistbV9tZDUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21f bWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAorK21fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCisgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oCisgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgbV9tZDUu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKK0BAIC01MDUsMjYgKzQ4OSwxNyBAQCBtX21kNS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcnNhLmggLi4vCisgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3No YS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisgbV9tZDUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorIG1fbWQ1 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX2xv Y2wuaCBtX21kNS5jCistbV9tZGMyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK21fbWRjMi5vOiAuLi8uLi9l X29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV9tZGMyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1tX21k YzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9k ZXNfb2xkLmgKKy1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLW1fbWRjMi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCistbV9tZGMyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tZGMy LmgKKy1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistbV9tZGMyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9w a2NzNy5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKy1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistbV9tZGMyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCistbV9t ZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wveDUwOS5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5o IC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21kYzIuYworK21fbWRjMi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKyttX21kYzIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKyttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKyttX21kYzIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrbV9t ZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggbV9t ZGMyLmMKKyBtX251bGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1tX251bGwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj LmgKKy1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWNkc2EuaAorLW1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK21fbnVsbC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIG1f bnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBtX251bGwubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK K0BAIC01MzUsOSArNTEwLDggQEAgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5 X3ZmeQorIG1fcmlwZW1kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oCisgbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9idWZmZXIuaAorIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorLW1fcmlwZW1kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKKy1tX3Jp cGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKKy1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyttX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV9yaXBlbWQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorIG1f cmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAorIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisgbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC01NDksOSArNTIzLDggQEAgbV9y aXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdgorIG1fcmlwZW1kLm86IG1fcmlw ZW1kLmMKKyBtX3NoYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistbV9zaGEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgK Ky1tX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lY2RzYS5oCistbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK21fc2hhLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisgbV9zaGEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaAorIG1fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTU2Miw5 ICs1MzUsOCBAQCBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uCisgbV9z aGEubzogLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fc2hhLmMKKyBtX3NoYTEubzogLi4vLi4v ZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCisgbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1tX3NoYTEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLW1fc2hh MS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCisrbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAorK21fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIG1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgbV9zaGExLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKyBtX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC01NzYsOSArNTQ4LDggQEAgbV9z aGExLm86IC4uL2NyeXB0bGliLmggbV9zaGExLmMKKyBtX3NpZ3Zlci5vOiAuLi8uLi9lX29zLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBtX3NpZ3Zlci5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmgKKy1tX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkaC5oCistbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistbV9zaWd2ZXIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrbV9zaWd2 ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaAorK21fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKKyBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBtX3NpZ3Zlci5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIG1fc2lndmVyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o CitAQCAtNTg5LDkgKzU2MCw4IEBAIG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94 NTA5X3YKKyBtX3NpZ3Zlci5vOiBtX3NpZ3Zlci5jCisgbV93cC5vOiAuLi8uLi9lX29zLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBt X3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmgKKy1tX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lYy5oCistbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNk aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistbV93cC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV93cC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytt X3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCisgbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCisgbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgbV93cC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorQEAgLTYwMiw5ICs1NzIsOCBAQCBtX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94 NTA5LmggLi4vCisgbV93cC5vOiAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmggbV93cC5jCisgbmFt ZXMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oCisgbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZl ci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorLW5hbWVzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistbmFtZXMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2Eu aAorLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmgKKytuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIG5hbWVzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBuYW1l cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisgbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC02MTUsOSArNTg0LDggQEAg bmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LgorIHA1X2NycHQubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBwNV9jcnB0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBw NV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaAorLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistcDVfY3JwdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytw NV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmgKKytwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIHA1X2NycHQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKKyBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCitAQCAtNjI4LDkgKzU5Niw4IEBAIHA1X2Ny cHQubzogLi4vY3J5cHRsaWIuaCBwNV9jcnB0LmMKKyBwNV9jcnB0Mi5vOiAuLi8uLi9lX29zLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIHA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBwNV9jcnB0Mi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmgKKy1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkaC5oCistcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistcDVfY3JwdDIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytwNV9jcnB0 Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCisrcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvaG1hYy5oCisgcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIHA1X2NycHQyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKyBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTY0MSw5ICs2MDgsOCBAQCBwNV9jcnB0 Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92CisgcDVfY3JwdDIubzogcDVfY3JwdDIu YworIHBfZGVjLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1wX2RlYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAorLXBf ZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjZHNhLmgKKy1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrcF9kZWMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBwX2RlYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o CisgcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtNjU0LDkgKzYy MCw4IEBAIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy4KKyBwX2RlYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfZGVjLmMK KyBwX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistcF9lbmMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1wX2Vu Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Y2RzYS5oCistcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAorK3BfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3BfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisgcF9lbmMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAor IHBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKyBwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTY3MCw5ICs2MzUs OCBAQCBwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuCisgcF9saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5o CisgcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9kaC5oCisgcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLXBfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAorLXBfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmgKKytwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCisrcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgcF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAorIHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtNjgzLDkgKzY0Nyw4IEBAIHBfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4KKyBwX2xpYi5vOiAuLi9hc24xL2FzbjFf bG9jbC5oIC4uL2NyeXB0bGliLmggcF9saWIuYworIHBfb3Blbi5vOiAuLi8uLi9lX29zLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBw X29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAorLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAorLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistcF9vcGVuLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytwX29w ZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oCisrcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCisgcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBwX29wZW4ubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAorIHBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTY5Niw5ICs2NTksOCBAQCBwX29wZW4ubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuCisgcF9vcGVuLm86IC4uL2NyeXB0bGliLmggcF9v cGVuLmMKKyBwX3NlYWwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1wX3NlYWwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj LmgKKy1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWNkc2EuaAorLXBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3Bfc2VhbC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIHBf c2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisgcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBwX3NlYWwubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK K0BAIC03MDksMzUgKzY3MSwzNiBAQCBwX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzCisgcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2Ny eXB0bGliLmggcF9zZWFsLmMKKyBwX3NpZ24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgcF9zaWduLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKKy1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjLmgKKy1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrcF9zaWduLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3Bf c2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAorIHBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBwX3NpZ24u bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKKy1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCistcF9zaWduLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLXBfc2lnbi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUw OS5oCistcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0 bGliLmggcF9zaWduLmMKKytwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKKytwX3NpZ24ubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmgKKytwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wveDUwOV92ZnkuaAorK3Bfc2lnbi5vOiAuLi9jcnlwdGxpYi5oIHBfc2lnbi5j CisgcF92ZXJpZnkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgK KyBwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2J1ZmZlci5oCisgcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0 by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistcF92ZXJpZnkubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLXBfdmVyaWZ5 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaAorLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAorK3BfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytwX3ZlcmlmeS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisgcF92ZXJp ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisgcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKyBwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorLXBfdmVy aWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAorLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKKy1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfdmVyaWZ5LmMKKytwX3ZlcmlmeS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgK KytwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NoYS5oCisrcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytwX3ZlcmlmeS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5o CisrcF92ZXJpZnkubzogLi4vY3J5cHRsaWIuaCBwX3ZlcmlmeS5jCisgcG1ldGhfZm4ubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBwbWV0aF9mbi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisg cG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oCisgcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLXBtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKy1wbWV0aF9m bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK3BtZXRoX2ZuLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK3Bt ZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgcG1ldGhfZm4u bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKKyBwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBwbWV0aF9mbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmgKK0BAIC03NDYs OSArNzA5LDkgQEAgcG1ldGhfZ24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvbworIHBt ZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYm4uaAorIHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1wbWV0aF9nbi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK Ky1wbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1wbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAorK3BtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK3BtZXRoX2du Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKKyBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorIHBtZXRoX2duLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAorIHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0 bGliLmggZXZwX2xvY2wuaAorQEAgLTc1Niw5ICs3MTksOCBAQCBwbWV0aF9nbi5vOiBwbWV0aF9n bi5jCisgcG1ldGhfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oCisgcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYnVmZmVyLmgKKyBwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistcG1ldGhfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKKy1w bWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VuZ2luZS5oCistcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytwbWV0aF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3BtZXRoX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAorIHBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKKyBwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9tX2RzczEu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9tX2RzczEuYworLS0tIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzCTIwMTEtMDYtMDEgMTc6MTE6 MDAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21f ZHNzMS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM4MzkzNjgxICswMTAwCitAQCAtNjgsOCArNjgs NiBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorICNlbmRpZgorIAorLSNpZm5kZWYgT1BF TlNTTF9GSVBTIAorLQorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0 dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9CisgCitAQCAtODQsNyArODIsNyBAQCBzdGF0 aWMgY29uc3QgRVZQX01EIGRzczFfbWQ9CisgCU5JRF9kc2EsCisgCU5JRF9kc2FXaXRoU0hBMSwK KyAJU0hBX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlFVlBf TURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUs CisgCWZpbmFsLAorQEAgLTEwMCw0ICs5OCwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX2RzczEodm9p ZCkKKyAJcmV0dXJuKCZkc3MxX21kKTsKKyAJfQorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9ldnAvbV9kc3MuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2V2cC9tX2Rzcy5jLmZpcHMJMjAxMS0wNi0wMSAxNzoxMTowMC4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvbV9kc3MuYwkyMDEyLTAyLTA3IDExOjA3 OjAyLjUzODM5MzY4MSArMDEwMAorQEAgLTY2LDcgKzY2LDYgQEAKKyAjZW5kaWYKKyAKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fU0hBCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAKKyBzdGF0aWMgaW50 IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRh KTsgfQorQEAgLTgyLDcgKzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQ9CisgCU5J RF9kc2FXaXRoU0hBLAorIAlOSURfZHNhV2l0aFNIQSwKKyAJU0hBX0RJR0VTVF9MRU5HVEgsCist CUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBf TURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorQEAgLTk4LDQgKzk3 LDMgQEAgY29uc3QgRVZQX01EICpFVlBfZHNzKHZvaWQpCisgCXJldHVybigmZHNhX21kKTsKKyAJ fQorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v ZXZwL21fbWQyLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvbV9tZDIuYwor LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJMjAwNS0wNy0x NiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0 by9ldnAvbV9tZDIuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzODM5MzY4MSArMDEwMAorQEAgLTY4 LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBp bml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsg fQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21fc2hhMS5jCistLS0gb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxMS0wNS0yOSAwMTowMToyNi4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvbV9zaGExLmMJ MjAxMi0wMi0wNyAxMTowNzowMi41MzgzOTM2ODEgKzAxMDAKK0BAIC01OSw4ICs1OSw2IEBACisg I2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgCistI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKy0KKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisgCisgI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+CitAQCAtODUsNyArODMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFf bWQ9CisgCU5JRF9zaGExLAorIAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEFfRElH RVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9G TEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF fEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWlu aXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAtMTIyLDcgKzEyMSw4IEBAIHN0YXRpYyBjb25z dCBFVlBfTUQgc2hhMjI0X21kPQorIAlOSURfc2hhMjI0LAorIAlOSURfc2hhMjI0V2l0aFJTQUVu Y3J5cHRpb24sCisgCVNIQTIyNF9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01F VEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxB R19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJ RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDIyNCwKKyAJdXBkYXRlMjU2LAorIAlmaW5hbDI1NiwK K0BAIC0xNDEsNyArMTQxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyNTZfbWQ9CisgCU5J RF9zaGEyNTYsCisgCU5JRF9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMjU2X0RJR0VT VF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxF VlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0 MjU2LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTE3Miw3ICsxNzMsOCBAQCBzdGF0 aWMgY29uc3QgRVZQX01EIHNoYTM4NF9tZD0KKyAJTklEX3NoYTM4NCwKKyAJTklEX3NoYTM4NFdp dGhSU0FFbmNyeXB0aW9uLAorIAlTSEEzODRfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQzODQsCisgCXVwZGF0ZTUxMiwKKyAJZmlu YWw1MTIsCitAQCAtMTkxLDcgKzE5Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21k PQorIAlOSURfc2hhNTEyLAorIAlOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTUx Ml9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdO QVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywK KyAJaW5pdDUxMiwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0yMDYsNCArMjA5LDMg QEAgY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZvaWQpCisgCXsgcmV0dXJuKCZzaGE1MTJfbWQp OyB9CisgI2VuZGlmCS8qIGlmbmRlZiBPUEVOU1NMX05PX1NIQTUxMiAqLworIAorLSNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL3Bfc2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxMS0wNi0wOSAxODowMjozOS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvcF9zaWduLmMJMjAx Mi0wMi0wNyAxMTowNzowMi41MzgzOTM2ODEgKzAxMDAKK0BAIC02MSw2ICs2MSw3IEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNp bmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyAj aWZkZWYgdW5kZWYKKyB2b2lkIEVWUF9TaWduSW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAq dHlwZSkKK0BAIC0xMDMsNiArMTA0LDIyIEBAIGludCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFgg KmN0eCwgdW5zaWcKKyAJCQlnb3RvIGVycjsKKyAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25h dHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgCQkJZ290byBlcnI7CisrCQlpZiAo Y3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKKysJCQlpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKKysJCQkJ Z290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQor KwkJCXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFk ZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsK KysJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKKysJCQlpZiAo c2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQorKwkJCQlzYWx0bGVuID0gLTE7 CisrCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCisrCQkJ CXNhbHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4o cGtjdHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCX0KKyAJCWlmIChFVlBf UEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9IDApCisgCQkJZ290 byBlcnI7CisgCQkqc2lnbGVuID0gc2x0bXA7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2 cC9wX3ZlcmlmeS5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL3BfdmVyaWZ5 LmMuZmlwcwkyMDExLTA2LTA5IDE4OjAyOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM5 MzkzNjg5ICswMTAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5 Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgaW50IEVWUF9WZXJpZnlGaW5hbChF VlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKKyAJICAgICB1bnNp Z25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKK0BAIC04OCw2ICs4OSwyMiBAQCBpbnQg RVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCisgCQkJZ290byBlcnI7CisgCQlp ZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAw KQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFE X1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9Y OTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYg KEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElO RykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFH X1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19N RExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01E X0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZ X0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3Rv IGVycjsKKysJCQl9CisgCQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xl biwgbSwgbV9sZW4pOworIAkJZXJyOgorIAkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgpOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwor LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZp cHMJMjAxMi0wMi0wNyAxMTowNzowMi41MzkzOTM2ODkgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwkyMDEyLTAyLTA3IDExOjA3OjAy LjUzOTM5MzY4OSArMDEwMAorQEAgLTAsMCArMSw5MzkgQEAKKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoK KysgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor KyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24gU3VpdGUKKysgIFRlc3QgUHJvZ3JhbQor KworKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9yYXRpb24KKysgIDIw MjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50b3duLCBNRCAyMDg3NAorKyAg VS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4K KysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NM X0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJp bnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysj ZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwu aCIKKysKKysjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2CisrCisrI2RlZmluZSBWRVJCT1NFIDAK KysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K KysKKytpbnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAorKwkgICAgY2hhciAqYW1vZGUs IGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAorKwkgICAgdW5zaWduZWQgY2hhciAq aVZlYywgCisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisr CSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQs IGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsK KysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQorKwl7CisrCXN3aXRj aCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9j YmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5 Ml9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVz XzI1Nl9jYmMoKTsKKysJCWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cmNh c2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJewor KwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9lY2IoKTsKKysJCWJyZWFrOwor KworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9lY2IoKTsKKysJCWJyZWFr OworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9lY2IoKTsKKysJCWJy ZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgi KSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQlj aXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6 CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysJCWJyZWFrOworKworKwkJY2Fz ZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKKysJCWJyZWFrOworKwkJ fQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0g MCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVy ID0gRVZQX2Flc18xMjhfb2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lw aGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJ Y2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBl bHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCXsKKysJc3dpdGNoIChha2V5c3op CisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEoKTsKKysJ CWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7 CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2Zi MSgpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9k ZSwiQ0ZCOCIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6Cisr CQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTky OgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgpOworKwkJYnJlYWs7CisrCisrCQljYXNl IDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjgoKTsKKysJCWJyZWFrOworKwkJfQor Kwl9CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2Rl KTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgaWYgKCFjaXBoZXIpCisrCXsKKysJcHJpbnRmKCJJ bnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKKysJcmV0dXJuIDA7IAorKwl9CisrICAg IGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGly KSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkK KysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9C SVRTKTsKKysgICAgaWYgKGRpcikKKysJCUVWUF9DaXBoZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFp bnRleHQsIGxlbik7CisrCWVsc2UKKysJCUVWUF9DaXBoZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhl cnRleHQsIGxlbik7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrY2hhciAqdF90YWdbMl0gPSB7 IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07CisrY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJF Q0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0Is IE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKKytlbnVtIFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNS WVBUfTsKKysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKysvKiAgTW9udGUg Q2FybG8gVGVzdHMgICAgICAgICAgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KKysKKysvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKChiKSU4KSkmMSkqLwor Ky8qI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICgoYikl OCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8KKysKKysjZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIp LzhdID4+ICg3LShiKSU4KSkmMSkKKysjZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEp WyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYpIDw8ICg3LShiKSU4KSkpCisrCisraW50 IGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFL ZXksdW5zaWduZWQgY2hhciAqaVZlYywKKysJICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4 dCwgaW50IGxlbiwKKysJICAgRklMRSAqcmZwKQorKyAgICB7CisrICAgIGludCByZXQgPSAwOwor KyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBpdlsx MDFdW0FFU19CTE9DS19TSVpFXTsKKysgICAgdW5zaWduZWQgY2hhciBwdGV4dFsxMDAxXVszMl07 CisrICAgIHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFy IGNpcGhlcnRleHRbNjQrNF07CisrICAgIGludCBpLCBqLCBuLCBuMSwgbjI7CisrICAgIGludCBp bW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84OworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Cisr ICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmIChsZW4gPiAzMikKKysJ eworKwlwcmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVkcyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4i LCAKKysJICAgICAgIGFtb2RlLCBha2V5c3opOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgZm9y IChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkKKysJaWYgKHN0cmNtcChhbW9kZSwgdF9t b2RlW2ltb2RlXSkgPT0gMCkKKysJICAgIGJyZWFrOworKyAgICBpZiAoaW1vZGUgPT0gNikKKysJ eyAKKysJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJcmV0dXJu IC0xOworKwl9CisrCisrICAgIG1lbWNweShrZXlbMF0sIGFLZXksIG5rZXlzeik7CisrICAgIGlm IChpVmVjKQorKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFFU19CTE9DS19TSVpFKTsKKysgICAgaWYg KGRpciA9PSBYRU5DUllQVCkKKysJbWVtY3B5KHB0ZXh0WzBdLCB0ZXh0LCBsZW4pOworKyAgICBl bHNlCisrCW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZm9yIChpID0gMDsgaSA8 IDEwMDsgKytpKQorKwl7CisrCS8qIHByaW50ZigiSXRlcmF0aW9uICVkXG4iLCBpKTsgKi8KKysJ aWYgKGkgPiAwKQorKwkgICAgeworKwkgICAgZnByaW50ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7 CisrCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0sbmtleXN6LHJmcCwwKTsKKysJICAgIGlm IChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8KKysJCU91dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVT X0JMT0NLX1NJWkUscmZwLDApOworKwkgICAgLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRl eHQgKi8KKysJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0 ZXh0WzBdLGxlbixyZnAsCisrCQkJaW1vZGUgPT0gQ0ZCMSk7CisrCSAgICB9CisrCWZvciAoaiA9 IDA7IGogPCAxMDAwOyArK2opCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJewor KwkgICAgY2FzZSBFQ0I6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsgLyogc2V0IHVwIGVuY3J5 cHRpb24gKi8KKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtp XSwgTlVMTCwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisr CQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZ UFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGVsc2UK KysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJZWxz ZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsKKysJCQlFVlBf Q2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkocHRleHRb aisxXSwgY3RleHRbal0sIGxlbik7CisrCQkJfQorKwkJICAgIGVsc2UKKysJCQl7CisrCQkJRVZQ X0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkJbWVtY3B5KGN0ZXh0 W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAgICB9CisrCQlicmVhazsKKysKKysJ ICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6ICAKKysJICAgIGNhc2UgQ0ZCMTI4OgorKwkJ aWYgKGogPT0gMCkKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwg YWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9 IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgaWYg KGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRleHRbaisxXSwgaXZbaV0sIGxlbik7Cisr CQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKKysJCSAgICB9 CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJewor KwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNw eShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJCSAgICBlbHNlCisrCQkJ eworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCW1l bWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJCSAgICB9CisrCQli cmVhazsKKysKKysJICAgIGNhc2UgQ0ZCODoKKysJCWlmIChqID09IDApCisrCQkgICAgeworKwkJ ICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisr CQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRb al0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAg aWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4 dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwg Y3RleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCSAg ICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1jcHkocHRleHRbaisxXSwgJml2W2ldW2pd LCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xNl0s IGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoaiA8IDE2KQor KwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJ CW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwgbGVuKTsKKysJCSAgICB9CisrCQlicmVh azsKKysKKysJICAgIGNhc2UgQ0ZCMToKKysJCWlmKGogPT0gMCkKKysJCSAgICB7CisrI2lmIDAK KysJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBlbmRpYW5uZXNzIG9mIGlucHV0IGZpbGUg Ki8KKysJCSAgICBpZihpID09IDApCisrCQkJcHRleHRbMF1bMF08PD03OworKyNlbmRpZgorKwkJ ICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osa2V5W2ldLGl2W2ldLGRpciwKKysJ CQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7 CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0 W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQX0NpcGhlcigmY3R4LCBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCisrCQkgICAgfQorKwkJaWYoZGlyID09IFhFTkNS WVBUKQorKwkJICAgIHsKKysJCSAgICBpZihqIDwgMTI4KQorKwkJCXNiKHB0ZXh0W2orMV0sMCxn YihpdltpXSxqKSk7CisrCQkgICAgZWxzZQorKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihjdGV4dFtq LTEyOF0sMCkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYoaiA8IDEy OCkKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVsc2UKKysJCQlz YihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDApKTsKKysJCSAgICB9CisrCQlicmVhazsK KysJCX0KKysJICAgIH0KKysJLS1qOyAvKiByZXNldCB0byBsYXN0IG9mIHJhbmdlICovCisrCS8q IE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCisrCU91dHB1dFZhbHVlKHRfdGFnW2Rp cl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4scmZwLAorKwkJICAgIGltb2RlID09IENG QjEpOworKwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBhZGQgc2VwYXJhdG9yICovCisrCisrCS8q IENvbXB1dGUgbmV4dCBLRVkgKi8KKysJaWYgKGRpciA9PSBYRU5DUllQVCkKKysJICAgIHsKKysJ ICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRd IHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwg bmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0gY3RleHRbai1uMl1b MF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7CisrCQlmb3IobjE9 MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGNpcGhl cnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxzZQorKwkJc3dpdGNo IChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRl eHQsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoKKysJCSAgICBt ZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1jcHkoY2lwaGVy dGV4dCs4LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAyNTY6CisrCQkg ICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBtZW1jcHkoY2lw aGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCSAg ICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBj dCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9 IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhl cnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09 IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytu MSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IocHRleHRbai1uMl0sMCkpOworKwkJ fQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6 CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7 CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSs4LCA4 KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBwdGV4dFtqXSwgMTYpOworKwkJICAgIGJy ZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0s IDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgcHRleHRbal0sIDE2KTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCS8qIENvbXB1dGUgbmV4dCBrZXk6IEtleVtp KzFdID0gS2V5W2ldIHhvciBjdCAqLworKwlmb3IgKG4gPSAwOyBuIDwgbmtleXN6OyArK24pCisr CSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNpcGhlcnRleHRbbl07CisrCQorKwkvKiBD b21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8KKysJaWYgKGRpciA9PSBYRU5DUllQVCkKKysJICAg IHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7CisrCSAgICBjYXNlIEVDQjoKKysJCW1lbWNw eShwdGV4dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJyZWFrOworKwkgICAg Y2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAgIGNhc2UgQ0ZCMTI4OgorKwkJbWVtY3B5 KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQltZW1jcHkocHRleHRbMF0s IGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkI4 OgorKwkJLyogSVZbaSsxXSA9IGN0ICovCisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAx NjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24xXSA9IGN0ZXh0W2otbjJdWzBdOworKwkJ cHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkIx OgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkgICAgc2Io aXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7CisrCQlwdGV4dFswXVswXT1jdGV4dFtqLTEy OF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwllbHNlCisrCSAgICB7Cisr CSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQltZW1jcHkoY3Rl eHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2Ug Q0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJCW1lbWNweShpdltp KzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4 dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCODoKKysJ CWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQorKwkJICAgIGl2W2kr MV1bbjFdID0gcHRleHRbai1uMl1bMF07CisrCQljdGV4dFswXVswXSA9IHB0ZXh0W2otMTZdWzBd OworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjE6CisrCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8 IDEyOCA7ICsrbjEsLS1uMikKKysJCSAgICBzYihpdltpKzFdLG4xLGdiKHB0ZXh0W2otbjJdLDAp KTsKKysJCWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVswXSYweDgwOworKwkJYnJlYWs7CisrCQl9 CisrCSAgICB9CisrCX0KKysgICAgCisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisrLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICAjIENvbmZpZyBpbmZvIGZvciB2LW9uZQorKyAg IyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKKysgICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBE ZWNyeXB0CisrICAjIEtleSBMZW5ndGggOiAyNTYKKysgICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQ TQorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50IHByb2NfZmlsZShj aGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCisrICAgIHsKKysgICAgY2hhciBhZm5bMjU2XSwg cmZuWzI1Nl07CisrICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOworKyAgICBjaGFy IGlidWZbMjA0OF07CisrICAgIGNoYXIgdGJ1ZlsyMDQ4XTsKKysgICAgaW50IGlsZW4sIGxlbiwg cmV0ID0gMDsKKysgICAgY2hhciBhbGdvWzhdID0gIiI7CisrICAgIGNoYXIgYW1vZGVbOF0gPSAi IjsKKysgICAgY2hhciBhdGVzdFs4XSA9ICIiOworKyAgICBpbnQgYWtleXN6ID0gMDsKKysgICAg dW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07CisrICAgIGludCBkaXIgPSAtMSwgZXJy ID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOworKyAg ICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07CisrICAgIGNoYXIgKnJwOworKyAgICBF VlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisr ICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCisrCXsKKysJcHJpbnRmKCJObyByZXEgZmls ZVxuIik7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOworKwor KyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYo IkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICBhZm4sIHN0cmVycm9yKGVy cm5vKSk7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBpZiAoIXJzcGZpbGUpCisrCXsKKysJc3Ry Y3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIocmZuLCJyZXEvIik7CisrI2lmZGVmIE9QRU5TU0xf U1lTX1dJTjMyCisrCWlmICghcnApCisrCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOworKyNl bmRpZgorKwlhc3NlcnQocnApOworKwltZW1jcHkocnAsInJzcCIsMyk7CisrCXJwID0gc3Ryc3Ry KHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOworKwlyc3BmaWxlID0gcmZu OworKwl9CisrICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKKysJ eworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICByZm4s IHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9zZShhZnApOworKwlhZnAgPSBOVUxMOworKwlyZXR1 cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVm KSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7CisrCWlsZW4g PSBzdHJsZW4oaWJ1Zik7CisrCS8qICAgICAgcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAs aWJ1Zik7ICovCisrCXN3aXRjaCAoc3RlcCkKKysJICAgIHsKKysJY2FzZSAwOiAgLyogcmVhZCBw cmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKKysJCXsgLyogZW5kIG9mIHBy ZWFtYmxlICovCisrCQlpZiAoKCphbGdvID09ICdcMCcpIHx8CisrCQkgICAgKCphbW9kZSA9PSAn XDAnKSB8fAorKwkJICAgIChha2V5c3ogPT0gMCkpCisrCQkgICAgeworKwkJICAgIHByaW50Zigi TWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6ZSAoJXMvJXMvJWQpXG4iLAorKwkJCSAg IGFsZ28sYW1vZGUsYWtleXN6KTsKKysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICArKyBzdGVwOworKwkJ ICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQorKwkJeworKwkJcHJp bnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKKysJCWVyciA9IDE7Cisr CQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KKysJCWNoYXIgKnhw LCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlmIChha2V5c3opCisrCQkgICAgeyAvKiBp bnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgw KTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0K KysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZiAo c3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09IDApCisrCQkJeworKwkJCXN0cmNweShhbGdvLCAi QUVTIik7CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLworKwkJCXBwICs9IDY7CisrCQkJeHAgPSBz dHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBu KTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0 cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBzdHJsZW4oeHArMSktMTsK KysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJ LyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIlRl c3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1vZGUpOworKwkJCX0KKysJCSAgICBlbHNl IGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGggOiAiLCAxMykgPT0gMCkKKysJCQl7Cisr CQkJYWtleXN6ID0gYXRvaShwcCsxMyk7CisrCQkJaWYgKFZFUkJPU0UpCisrCQkJCXByaW50Zigi S2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAg YnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLworKwkgICAg aWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSsrc3Rl cDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKKysJCSAg ICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkp ID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcHJpbnRm KCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKKysJCSAgICBlcnIgPSAxOworKwkJICAg IH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQorKwkJeworKwkJ ZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7 CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisrCQlzdGVwID0gMjsKKysKKysJY2FzZSAy OiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYoKmli dWYgPT0gJ1xuJykKKysJCWJyZWFrOworKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5U ID0gIiw4KSkKKysJCWJyZWFrOworKworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJLRVkg PSAiLCA2KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIg PSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1 Zis2LCBhS2V5KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIklu dmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQor KwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCWlmIChzdHJjbXAoYW1vZGUsICJF Q0IiKSA9PSAwKQorKwkJICAgIHsKKysJCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMp KTsKKysJCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KKysJ CSAgICB9CisrCQllbHNlCisrCQkgICAgKytzdGVwOworKwkJfQorKwkgICAgYnJlYWs7CisrCisr CWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCisrCQl7CisrCQlwcmludGYo Ik1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJ CWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7CisrCQlpZiAobGVuIDwgMCkKKysJ CSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOwor KwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNDog LyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlm IChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCisrCQl7CisrCQlw cmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBl bHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7CisrCQlpZighc3RyY21wKGFt b2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQp OworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7CisrCQlp ZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDog JXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQor KwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKKysJCSAgICB7CisrCQkgICAgcHJpbnRm KCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIlBMQUlOVEVY VCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0 LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAg aWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCSAgICAgIGRpciwgKHVu c2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuLCAKKysJCQkgICAgICByZnApIDwgMCkKKysJCQlF WElUKDEpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVz dCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxl bik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwK KysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJ CX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCisr CSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBI RVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsK KysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpZighc3RyY21wKGFtb2Rl LCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEs Y2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhl cnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxp ZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAg fQorKworKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7CisrCQlp ZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJ CSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCSAg IGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7 CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAK KysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwbGFp bnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIs KHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwi Q0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKwor KwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJeworKwkJZXJyID0gMTsK KysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJICAgIGVsc2UgaWYg KHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRl cm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQorKwkgICAgc3RlcCA9 IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZwKQorKwlmY2xvc2Uo cmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJldHVybiBlcnI7Cisr ICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCisrICBhIHNldCBv ZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysgIEEgc2luZ2xlIGZp bGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCisrICBBIHNldCBv ZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAorKyAg VGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxM OworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2 XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJv cnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJnYyA+IDEpCisrCXsK KysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAgIHsKKysJICAgIGRf b3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9 PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQgPSAwOworKwkgICAg fQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xu IiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGFyZ2MgPCAzKQor KwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7CisrCSAgICByZXR1 cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKKysJ ZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJICAgIHJzcGZpbGUg PSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJeyAvKiBsaXN0IG9m IGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkK KysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7Cisr CSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwg ZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkgICAgc3RyY3B5KHJm biwgZm4pOworKwkgICAgaWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4i LCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJp bnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElU KDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVsc2UgLyogc2lu Z2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJICAgIHByaW50ZigiUHJvY2Vzc2lu ZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisrCSAgICB7Cisr CSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOwor KwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAgICB9CisrCisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlw c19jbWFjdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfY21hY3Rlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2NtYWN0ZXN0LmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzOTM5MzY4OSArMDEwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMJ MjAxMi0wMi0wNyAxMTowNzowMi41MzkzOTM2ODkgKzAxMDAKK0BAIC0wLDAgKzEsNTE3IEBACisr LyogZmlwc19jbWFjdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1Lgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisr ICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICov CisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysj aW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Y21hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIENNQUMgc3VwcG9ydFxuIik7Cisr ICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBjbWFjX3Rlc3QoY29u c3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUgKmluLAorKwlpbnQgbW9kZSwg aW50IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4pOworK3N0YXRpYyBpbnQgcHJp bnRfY21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNp Z25lZCBjaGFyICpLZXksIGludCBLbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNn bGVuLAorKwkJaW50IFRsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRfY21hY192ZXIoY29uc3QgRVZQ X0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBL bGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hh ciAqTWFjLCBpbnQgTWFjbGVuLAorKwkJaW50IFRsZW4pOworKworKyNpZmRlZiBGSVBTX0FMR1ZT CisraW50IGZpcHNfY21hY3Rlc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrI2Vsc2UK KytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrI2VuZGlmCisrCXsKKysJRklMRSAq aW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysJaW50IG1vZGUgPSAwOwkJLyogMCA9PiBHZW5lcmF0 ZSwgMSA9PiBWZXJpZnkgKi8KKysJaW50IEtsZW5fY291bnRzX2tleXMgPSAwOyAvKiAwID0+IEts ZW4gaXMgc2l6ZSBvZiBvbmUga2V5CisrCQkJCSAgICAgMSA9PiBLbGVuIGlzIGFtb3VudCBvZiBr ZXlzCisrCQkJCSAgKi8KKysJaW50IGtub3duX2tleWxlbiA9IDA7CS8qIE9ubHkgc2V0IHdoZW4g S2xlbl9jb3VudHNfa2V5cyA9IDEgKi8KKysJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gMDsK KysJaW50IHJldCA9IDE7CisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCisrCXdoaWxlIChhcmdj ID4gMSAmJiBhcmd2WzFdWzBdID09ICctJykKKysJCXsKKysJCXN3aXRjaCAoYXJndlsxXVsxXSkK KysJCQl7CisrCQljYXNlICdhJzoKKysJCQl7CisrCQkJY2hhciAqcCA9ICZhcmd2WzFdWzJdOwor KwkJCWlmICgqcCA9PSAnXDAnKQorKwkJCQl7CisrCQkJCWlmIChhcmdjIDw9IDIpCisrCQkJCQl7 CisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbiAlcyBuZWVkcyBhIHZhbHVlXG4iLCBhcmd2 WzFdKTsKKysJCQkJCWdvdG8gZW5kOworKwkJCQkJfQorKwkJCQlhcmd2Kys7CisrCQkJCWFyZ2Mt LTsKKysJCQkJcCA9ICZhcmd2WzFdWzBdOworKwkJCQl9CisrCQkJaWYgKCFzdHJjbXAocCwgImFl czEyOCIpKQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHAsICJhZXMxOTIiKSkKKysJCQkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7Cisr CQkJZWxzZSBpZiAoIXN0cmNtcChwLCAiYWVzMjU2IikpCisrCQkJCWNpcGhlciA9IEVWUF9hZXNf MjU2X2NiYygpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgInRkZWEzIikgfHwgIXN0cmNtcChw LCAidGRlczMiKSkKKysJCQkJeworKwkJCQljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7Cisr CQkJCUtsZW5fY291bnRzX2tleXMgPSAxOworKwkJCQlrbm93bl9rZXlsZW4gPSA4OworKwkJCQl9 CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBhbGdvcml0 aG0gJXNcbiIsIHApOworKwkJCQlnb3RvIGVuZDsKKysJCQkJfQorKwkJCX0KKysJCQlicmVhazsK KysJCWNhc2UgJ2cnOgorKwkJCW1vZGUgPSAwOworKwkJCWJyZWFrOworKwkJY2FzZSAndic6Cisr CQkJbW9kZSA9IDE7CisrCQkJYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJCWZwcmludGYoc3RkZXJy LCAiVW5rbm93biBvcHRpb24gJXNcbiIsIGFyZ3ZbMV0pOworKwkJCWdvdG8gZW5kOworKwkJCX0K KysJCWFyZ3YrKzsKKysJCWFyZ2MtLTsKKysJCX0KKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0g c3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFy Z2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJd LCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBp bnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJ aWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFjbWFjX3Rl c3QoY2lwaGVyLCBvdXQsIGluLCBtb2RlLAorKwkJCUtsZW5fY291bnRzX2tleXMsIGtub3duX2tl eWxlbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGNtYWMgZmlsZSBwcm9jZXNz aW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOwor KworKwllbmQ6CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsK KysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0 dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgQ01BQ19URVNUX01BWExJTkVMRU4JMTUwMDAw CisrCisraW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwg RklMRSAqaW4sCisrCWludCBtb2RlLCBpbnQgS2xlbl9jb3VudHNfa2V5cywgaW50IGtub3duX2tl eWxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAq a2V5d29yZCwgKnZhbHVlOworKwl1bnNpZ25lZCBjaGFyICoqS2V5cyA9IE5VTEwsICpNc2cgPSBO VUxMLCAqTWFjID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqS2V5ID0gTlVMTDsKKysJaW50IENv dW50LCBLbGVuLCBNbGVuLCBUbGVuOworKwlsb25nIEtleWxlbiwgTXNnbGVuLCBNYWNsZW47Cisr CWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2Mo Q01BQ19URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQor KwkJZ290byBlcnJvcjsKKysKKysJQ291bnQgPSAtMTsKKysJS2xlbiA9IC0xOworKwlNbGVuID0g LTE7CisrCVRsZW4gPSAtMTsKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBDTUFDX1RFU1Rf TUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9s aW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNl ICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5 d29yZCsrOworKworKwkJLyogU2tpcCBjb21tZW50cyAqLworKwkJaWYgKGtleXdvcmRbMF0gPT0g JyMnKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3Rv IGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAq LworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFy dHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJ CXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOwor KwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0 cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQor KwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8q IFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0g MTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNvdW50IikpCisr CQkJeworKwkJCWlmIChDb3VudCAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlD b3VudCA9IGF0b2kodmFsdWUpOworKwkJCWlmIChDb3VudCA8IDApCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2xlbiIpKQorKwkJ CXsKKysJCQlpZiAoS2xlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlLbGVu ID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKEtsZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQorKwkJCQl7CisrCQkJCUtleXMgPSBPUEVOU1NM X21hbGxvYyhzaXplb2YoKktleXMpICogS2xlbik7CisrCQkJCW1lbXNldChLZXlzLCAnXDAnLCBz aXplb2YoKktleXMpICogS2xlbik7CisrCQkJCX0KKysJCQllbHNlCisrCQkJCXsKKysJCQkJS2V5 cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqS2V5cykpOworKwkJCQltZW1zZXQoS2V5cywgJ1ww Jywgc2l6ZW9mKCpLZXlzKSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJNbGVuIikpCisrCQkJeworKwkJCWlmIChNbGVuICE9IC0xKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCU1sZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoTWxlbiA8IDApCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiVGxlbiIpKQorKwkJCXsKKysJCQlpZiAoVGxlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQlUbGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKFRsZW4gPCAwKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIktl eSIpICYmICFLbGVuX2NvdW50c19rZXlzKQorKwkJCXsKKysJCQlpZiAoS2V5c1swXSkKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQlLZXlzWzBdID0gaGV4MmJpbl9tKHZhbHVlLCAmS2V5bGVu KTsKKysJCQlpZiAoIUtleXNbMF0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cm5jbXAoa2V5d29yZCwgIktleSIsIDMpICYmIEtsZW5fY291bnRzX2tleXMp CisrCQkJeworKwkJCWludCBrZXludW0gPSBhdG9pKGtleXdvcmQgKyAzKTsKKysJCQlpZiAoIWtl eW51bSB8fCBrZXludW0gPiBLbGVuIHx8IEtleXNba2V5bnVtLTFdKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCUtleXNba2V5bnVtLTFdID0gaGV4MmJpbl9tKHZhbHVlLCAmS2V5bGVuKTsK KysJCQlpZiAoIUtleXNba2V5bnVtLTFdKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0K KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNn KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1z Z2xlbik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTWFjIikpCisrCQkJeworKwkJCWlmIChtb2RlID09 IDApCisrCQkJCWNvbnRpbnVlOworKwkJCWlmIChNYWMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJTWFjID0gaGV4MmJpbl9tKHZhbHVlLCAmTWFjbGVuKTsKKysJCQlpZiAoIU1hYykKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJSZXN1bHQiKSkKKysJCQl7CisrCQkJaWYgKG1vZGUgPT0gMSkKKysJCQkJY29udGludWU7Cisr CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJv cjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKEtleXMgJiYgTXNnICYm ICghbW9kZSB8fCBNYWMpICYmIChUbGVuID4gMCkgJiYgKEtsZW4gPiAwKSkKKysJCQl7CisrCQkJ aWYgKEtsZW5fY291bnRzX2tleXMpCisrCQkJCXsKKysJCQkJaW50IHg7CisrCQkJCUtleSA9IE9Q RU5TU0xfbWFsbG9jKEtsZW4gKiBrbm93bl9rZXlsZW4pOworKwkJCQlmb3IgKHggPSAwOyB4IDwg S2xlbjsgeCsrKQorKwkJCQkJeworKwkJCQkJbWVtY3B5KEtleSArIHggKiBrbm93bl9rZXlsZW4s CisrCQkJCQkJS2V5c1t4XSwga25vd25fa2V5bGVuKTsKKysJCQkJCU9QRU5TU0xfZnJlZShLZXlz W3hdKTsKKysJCQkJCX0KKysJCQkJS2xlbiAqPSBrbm93bl9rZXlsZW47CisrCQkJCX0KKysJCQll bHNlCisrCQkJCXsKKysJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2MoS2xlbik7CisrCQkJCW1lbWNw eShLZXksIEtleXNbMF0sIEtsZW4pOworKwkJCQlPUEVOU1NMX2ZyZWUoS2V5c1swXSk7CisrCQkJ CX0KKysJCQlPUEVOU1NMX2ZyZWUoS2V5cyk7CisrCisrCQkJc3dpdGNoKG1vZGUpCisrCQkJCXsK KysJCQljYXNlIDA6CisrCQkJCWlmICghcHJpbnRfY21hY19nZW4oY2lwaGVyLCBvdXQsCisrCQkJ CQkJS2V5LCBLbGVuLAorKwkJCQkJCU1zZywgTWxlbiwKKysJCQkJCQlUbGVuKSkKKysJCQkJCWdv dG8gZXJyb3I7CisrCQkJCWJyZWFrOworKwkJCWNhc2UgMToKKysJCQkJaWYgKCFwcmludF9jbWFj X3ZlcihjaXBoZXIsIG91dCwKKysJCQkJCQlLZXksIEtsZW4sCisrCQkJCQkJTXNnLCBNbGVuLAor KwkJCQkJCU1hYywgTWFjbGVuLAorKwkJCQkJCVRsZW4pKQorKwkJCQkJZ290byBlcnJvcjsKKysJ CQkJYnJlYWs7CisrCQkJCX0KKysKKysJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJCQlLZXkgPSBO VUxMOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJT1BFTlNT TF9mcmVlKE1hYyk7CisrCQkJTWFjID0gTlVMTDsKKysJCQlLbGVuID0gLTE7CisrCQkJTWxlbiA9 IC0xOworKwkJCVRsZW4gPSAtMTsKKysJCQlDb3VudCA9IC0xOworKwkJCX0KKysJCX0KKysKKysK KysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5T U0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVi dWYpOworKwlpZiAoS2V5KQorKwkJT1BFTlNTTF9mcmVlKEtleSk7CisrCWlmIChNc2cpCisrCQlP UEVOU1NMX2ZyZWUoTXNnKTsKKysJaWYgKE1hYykKKysJCU9QRU5TU0xfZnJlZShNYWMpOworKwor KwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJG QVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3Rv IGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCBwcmludF9jbWFjX2dlbihjb25zdCBFVlBf Q0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEts ZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNbGVuLAorKwkJaW50IFRsZW4pCisrCXsK KysJaW50IHJjLCBpOworKwlzaXplX3QgcmVzbGVuOworKwl1bnNpZ25lZCBjaGFyIHJlc1sxMjhd OworKwlDTUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKKysKKysJQ01BQ19Jbml0 KGNtYWNfY3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7CisrCUNNQUNfVXBkYXRlKGNtYWNfY3R4 LCBNc2csIE1sZW4pOworKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJlc2xlbikp CisrCQl7CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJyKTsKKysJ CXJjID0gMDsKKysJCX0KKysJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQorKwkJeworKwkJ ZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRlcnIpOwor KwkJcmMgPSAwOworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHV0cygiTWFjID0gIiwgb3V0KTsK KysJCWZvciAoaSA9IDA7IGkgPCBUbGVuOyBpKyspCisrCQkJZnByaW50ZihvdXQsICIlMDJ4Iiwg cmVzW2ldKTsKKysJCWZwdXRzKFJFU1BfRU9MLCBvdXQpOworKwkJcmMgPSAxOworKwkJfQorKwlD TUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKKysJcmV0dXJuIHJjOworKwl9CisrCisrc3RhdGljIGlu dCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJ CXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGlu dCBNbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAorKwkJaW50IFRsZW4p CisrCXsKKysJaW50IHJjID0gMTsKKysJc2l6ZV90IHJlc2xlbjsKKysJdW5zaWduZWQgY2hhciBy ZXNbMTI4XTsKKysJQ01BQ19DVFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCisrCUNN QUNfSW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDApOworKwlDTUFDX1VwZGF0ZShj bWFjX2N0eCwgTXNnLCBNbGVuKTsKKysJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCByZXMsICZy ZXNsZW4pKQorKwkJeworKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIsIHN0ZGVy cik7CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xlbikKKysJ CXsKKysJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxuIiwgc3Rk ZXJyKTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZSBpZiAoVGxlbiAhPSBNYWNsZW4pCisrCQl7 CisrCQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuICE9IHJlc3VsdGluZyBNYWMgbGVuZ3Ro XG4iLCBzdGRlcnIpOworKwkJcmMgPSAwOworKwkJfQorKwllbHNlCisrCQl7CisrCQlpZiAoIW1l bWNtcChNYWMsIHJlcywgTWFjbGVuKSkKKysJCQlmcHV0cygiUmVzdWx0ID0gUCIgUkVTUF9FT0ws IG91dCk7CisrCQllbHNlCisrCQkJZnB1dHMoIlJlc3VsdCA9IEYiIFJFU1BfRU9MLCBvdXQpOwor KwkJfQorKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKKysJcmV0dXJuIHJjOworKwl9CisrCisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlw c19kZXNtb3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlw c19kZXNtb3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlw c19kZXNtb3ZzLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MDM5MzY5OCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwkyMDEy LTAyLTA3IDExOjA3OjAyLjU0MDM5MzY5OCArMDEwMAorQEAgLTAsMCArMSw3MDIgQEAKKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorKyAgTklTVCBERVMgTW9kZXMgb2YgT3BlcmF0aW9uIFZhbGlkYXRpb24g U3lzdGVtCisrICBUZXN0IFByb2dyYW0KKysKKysgIEJhc2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlv biBTdWl0ZSwgd2hpY2ggd2FzOgorKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUg Q29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50 b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8 c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNp bmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29zLmgiCisr CisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERFUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0 dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5lIERFU19CTE9DS19TSVpFIDgKKysKKysj ZGVmaW5lIFZFUkJPU0UgMAorKworK2ludCBERVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCisr CSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCisrCSAg ICB1bnNpZ25lZCBjaGFyICppVmVjLCAKKysJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwg MSA9IGVuY3J5cHQgKi8KKysJICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAq aW4sIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVM TDsKKysKKysgICAgaWYgKGFrZXlzeiAhPSAxOTIpCisrCXsKKysJcHJpbnRmKCJJbnZhbGlkIGtl eSBzaXplOiAlZFxuIiwgYWtleXN6KTsKKysJRVhJVCgxKTsKKysJfQorKworKyAgICBpZiAoc3Ry Y2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMo KTsKKysgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCisrCWNpcGhl ciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKKysgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwg IkNGQjY0IikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjY0KCk7CisrICAgIGVs c2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKKysJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX29mYigpOworKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4Iikp CisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7CisrICAgIGVsc2UgaWYoIXN0cmNhc2Vj bXAoYW1vZGUsIkNGQjEiKSkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjEoKTsKKysgICAg ZWxzZQorKwl7CisrCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOworKwlFWElU KDEpOworKwl9CisrCisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVM TCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0cmNhc2Vj bXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBf Q0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgRVZQX0NpcGhlcihjdHgsIG91dCwgaW4sIGxl bik7CisrCisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIg KnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNoYXIgb2J1 ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrICAgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBv YnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrICAg IH0KKysKKyt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hhciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNy YyxpbnQgbmJpdHMpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIC8qIG1vdmUgdGhlIGJ5 dGVzLi4uICovCisrICAgIG1lbW1vdmUoZHN0LGRzdCtuYml0cy84LDMqOC1uYml0cy84KTsKKysg ICAgLyogYXBwZW5kIG5ldyBkYXRhICovCisrICAgIG1lbWNweShkc3QrMyo4LW5iaXRzLzgsc3Jj LChuYml0cys3KS84KTsKKysgICAgLyogbGVmdCBzaGlmdCB0aGUgYml0cyAqLworKyAgICBpZihu Yml0cyU4KQorKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsrbikKKysJICAgIGRzdFtuXT0oZHN0W25d IDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5iaXRzJTgpKTsKKysgICAgfQkKKysKKysv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytjaGFy ICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKKytjaGFyICp0X21vZGVb Nl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCNjQifTsKKytlbnVtIE1v ZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjY0fTsKKytpbnQgU2l6ZXNbNl09ezY0 LDY0LDY0LDEsOCw2NH07CisrCisrdm9pZCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkgICAgaW50 IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNoYXIgKmFrZXksdW5zaWduZWQgY2hhciAq aXZlYywKKysJICAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCisrCSAg ICBGSUxFICpyZnApCisrICAgIHsKKysgICAgaW50IGksaW1vZGU7CisrICAgIHVuc2lnbmVkIGNo YXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLworKyAgICB1bnNpZ25lZCBjaGFyIHRleHQw WzhdOworKworKyAgICBmb3IgKGltb2RlPTAgOyBpbW9kZSA8IDYgOyArK2ltb2RlKQorKwlpZigh c3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQorKwkgICAgYnJlYWs7CisrICAgIGlmIChpbW9k ZSA9PSA2KQorKwl7IAorKwlwcmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUp OworKwlFWElUKDEpOworKwl9CisrCisrICAgIGZvcihpPTAgOyBpIDwgNDAwIDsgKytpKQorKwl7 CisrCWludCBqOworKwlpbnQgbjsKKysJaW50IGtwPWFrZXlzei82NDsKKysJdW5zaWduZWQgY2hh ciBvbGRfaXZbOF07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5p dCgmY3R4KTsKKysKKysJZnByaW50ZihyZnAsIlxuQ09VTlQgPSAlZFxuIixpKTsKKysJaWYoa3Ag PT0gMSkKKysJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFrZXksOCxyZnAsMCk7CisrCWVsc2UKKysJ ICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCisrCQl7CisrCQlmcHJpbnRmKHJmcCwiS0VZJWQi LG4rMSk7CisrCQlPdXRwdXRWYWx1ZSgiIixha2V5K24qOCw4LHJmcCwwKTsKKysJCX0KKysKKysJ aWYoaW1vZGUgIT0gRUNCKQorKwkgICAgT3V0cHV0VmFsdWUoIklWIixpdmVjLDgscmZwLDApOwor KwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOwor KyNpZiAwCisrCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlhbm5lc3MgKi8KKysJaWYoaW1vZGUgPT0g Q0ZCMSkKKysJICAgIHRleHRbMF08PD03OworKyNlbmRpZgorKwltZW1jcHkodGV4dDAsdGV4dCw4 KTsKKysKKysJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsraikKKysJICAgIHsKKysJICAgIHVuc2ln bmVkIGNoYXIgb2xkX3RleHRbOF07CisrCisrCSAgICBtZW1jcHkob2xkX3RleHQsdGV4dCw4KTsK KysJICAgIGlmKGogPT0gMCkKKysJCXsKKysJCW1lbWNweShvbGRfaXYsaXZlYyw4KTsKKysJCURF U1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVjLGRpcix0ZXh0LHRleHQsbGVuKTsKKysJ CX0KKysJICAgIGVsc2UKKysJCXsKKysJCW1lbWNweShvbGRfaXYsY3R4Lml2LDgpOworKwkJRVZQ X0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOworKwkJfQorKwkgICAgaWYoaiA9PSA5OTk5KQor KwkJeworKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZC MSk7CisrCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsgKi8KKysJCX0KKysJICAgIC8qCSAgICBE ZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLworKwkgICAgLyogYWNjdW11bGF0ZSBtYXRlcmlh bCBmb3IgdGhlIG5leHQga2V5ICovCisrCSAgICBzaGlmdGluKG5rLHRleHQsU2l6ZXNbaW1vZGVd KTsKKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIsbmssMjQpOyovCisrCSAgICBpZigoZGly ICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQKKysJ CQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBPRkIpCisrCQltZW1jcHkodGV4dCxvbGRf aXYsOCk7CisrCisrCSAgICBpZighZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENG QjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQorKwkJeworKwkJLyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVz aW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3BlcmF0aW9uCisrCQkgICB3aGljaCB3ZSBk b24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAqLworKwkJZm9yKG49MCA7IG4gPCA4IDsg KytuKQorKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25dOworKwkJfQorKwkgICAgfQorKwlmb3Io bj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5W25dXj1ua1sxNituXTsKKysJZm9yKG49MCA7 IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVs4K25dXj1ua1s4K25dOworKwlmb3Iobj0wIDsgbiA8 IDggOyArK24pCisrCSAgICBha2V5WzE2K25dXj1ua1tuXTsKKysJaWYobnVta2V5cyA8IDMpCisr CSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOworKwlpZihudW1rZXlzIDwgMikKKysJICAg IG1lbWNweSgmYWtleVs4XSxha2V5LDgpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxv Y2sgKilha2V5KTsKKysJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrOCkp OworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSsxNikpOworKwltZW1j cHkoaXZlYyxjdHguaXYsOCk7CisrCisrCS8qIHBvaW50bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5h bCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQorKwkgICBpbml0aWFsIHRleHQgaW4gT0ZCIG1v ZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hvCisrCSAgIGRlc2lnbmVkIHRoZXNlIHRl c3RzPykgKi8KKysJaWYoaW1vZGUgPT0gT0ZCKQorKwkgICAgZm9yKG49MCA7IG4gPCA4IDsgKytu KQorKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07CisrCX0KKysgICAgfQorKyAgICAKKytp bnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKKysgICAgeworKyAgICBj aGFyIGFmblsyNTZdLCByZm5bMjU2XTsKKysgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5V TEw7CisrICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1ZlsyMDQ4XTsKKysgICAgaW50IGlsZW4sIGxl biwgcmV0ID0gMDsKKysgICAgY2hhciBhbW9kZVs4XSA9ICIiOworKyAgICBjaGFyIGF0ZXN0WzEw MF0gPSAiIjsKKysgICAgaW50IGFrZXlzej0wOworKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBd LCBhS2V5WzQwXTsKKysgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKKysgICAg dW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVy dGV4dFsyMDQ4XTsKKysgICAgY2hhciAqcnA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysg ICAgaW50IG51bWtleXM9MTsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysg ICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKKysJeworKwlwcmludGYoIk5vIHJlcSBmaWxl XG4iKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHN0cmNweShhZm4sIHJxZmlsZSk7CisrCisr ICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50Zigi Q2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKKysJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJy bm8pKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGlmICghcnNwZmlsZSkKKysJeworKwlzdHJj cHkocmZuLGFmbik7CisrCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKKysjaWZkZWYgT1BFTlNTTF9T WVNfV0lOMzIKKysJaWYgKCFycCkKKysJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7CisrI2Vu ZGlmCisrCWFzc2VydChycCk7CisrCW1lbWNweShycCwicnNwIiwzKTsKKysJcnAgPSBzdHJzdHIo cmZuLCAiLnJlcSIpOworKwltZW1jcHkocnAsICIucnNwIiwgNCk7CisrCXJzcGZpbGUgPSByZm47 CisrCX0KKysgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQorKwl7 CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKKysJICAgICAgIHJmbiwg c3RyZXJyb3IoZXJybm8pKTsKKysJZmNsb3NlKGFmcCk7CisrCWFmcCA9IE5VTEw7CisrCXJldHVy biAtMTsKKysJfQorKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYp LCBhZnApKSAhPSBOVUxMKQorKwl7CisrCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKKysJaWxlbiA9 IHN0cmxlbihpYnVmKTsKKysJLyoJcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7 Ki8KKysJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1vZGUsIkVDQiIpKQorKwkgICAgeworKwkg ICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7CisrCSAgICBzdGVwID0gKGRpcik/IDQ6 IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KKysJICAgIH0KKysJc3dpdGNoIChzdGVwKQorKwkg ICAgeworKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCisrCSAgICBpZiAoaWJ1ZlswXSA9 PSAnXG4nKQorKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KKysJCWlmICgqYW1vZGUgPT0gJ1ww JykKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJNaXNzaW5nIE1vZGVcbiIpOworKwkJICAgIGVy ciA9IDE7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0cyhpYnVmLCBy ZnApOworKwkJICAgICsrIHN0ZXA7CisrCQkgICAgfQorKwkJfQorKwkgICAgZWxzZSBpZiAoaWJ1 ZlswXSAhPSAnIycpCisrCQl7CisrCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNc biIsIGlidWYpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsgLyogcHJvY2Vz cyBwcmVhbWJsZSAqLworKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKKysJCWludCBuOworKwkJ aWYoKmFtb2RlKQorKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJ CSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwg Y3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRz KGlidWYsIHJmcCk7CisrCQkgICAgaWYoIXN0cm5jbXAocHAsIklOVkVSU0UgIiw4KSB8fCAhc3Ry bmNtcChwcCwiREVTICIsNCkKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVERFUyAiLDUpCisr CQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFUSU9OICIsMTIpCisrCQkgICAgICAgfHwg IXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBw LCJWQVJJQUJMRSAiLDkpKQorKwkJCXsKKysJCQkvKiBnZXQgdGVzdCB0eXBlICovCisrCQkJaWYo IXN0cm5jbXAocHAsIkRFUyAiLDQpKQorKwkJCSAgICBwcCs9NDsKKysJCQllbHNlIGlmKCFzdHJu Y21wKHBwLCJUREVTICIsNSkpCisrCQkJICAgIHBwKz01OworKwkJCXhwID0gc3RyY2hyKHBwLCAn ICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRl c3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICovCisrCQkJeHAgPSBzdHJyY2hyKHBwLCAn ICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3RybGVuKHhwKzEpLTE7CisrCQkJc3RybmNw eShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0gPSAnXDAnOworKwkJCS8qIGFtb2RlWzNd ID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJUZXN0PSVzLCBNb2Rl PSVzXG4iLGF0ZXN0LGFtb2RlKTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAgYnJlYWs7 CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLworKwkgICAgaWYoaWJ1 ZlswXSA9PSAnXG4nKQorKwkJYnJlYWs7CisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCisrCQl7 CisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJKytzdGVwOworKwkJaWYgKHN0cm5jYXNlY21wKGli dWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDE7CisrCQllbHNlIGlmIChz dHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAwOwor KwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIs IGlidWYpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAg ICBlbHNlIGlmIChkaXIgPT0gLTEpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNz aW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKKysJCWJyZWFrOworKwkJfQorKwkgICAg ZWxzZSAKKysJCXN0ZXAgPSAyOworKworKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KKysJICAg IGlmKCppYnVmID09ICdcbicpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ CWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1Ziwi Q09VTlQgPSAiLDgpKQorKwkJeworKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQlicmVh azsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5U PSIsNikpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAg ICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIs MTApKQorKwkJeworKwkJbnVta2V5cz1hdG9pKGlidWYrMTApOworKwkJYnJlYWs7CisrCQl9Cisr CSAgCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYs IktFWSA9ICIsNikpCisrCQl7CisrCQlha2V5c3o9NjQ7CisrCQlsZW4gPSBoZXgyYmluKChjaGFy KilpYnVmKzYsIGFLZXkpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOworKwkJICAg IH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7CisrCQkrK3N0ZXA7CisrCQl9Cisr CSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVlzID0gIiw3KSkKKysJCXsKKysJCWFr ZXlzej02NCozOworKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkpOworKwkJaWYobGVuICE9IDgp CisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0x OworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCW1lbWNweShhS2V5KzgsYUtleSw4KTsKKysJ CW1lbWNweShhS2V5KzE2LGFLZXksOCk7CisrCQlpYnVmWzRdPSdcMCc7CisrCQlQcmludFZhbHVl KCJLRVlzIixhS2V5LGxlbik7CisrCQkrK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlIGlmKCFzdHJu Y2FzZWNtcChpYnVmLCJLRVkiLDMpKQorKwkJeworKwkJaW50IG49aWJ1ZlszXS0nMSc7CisrCisr CQlha2V5c3o9NjQqMzsKKysJCWxlbj1oZXgyYmluKGlidWYrNyxhS2V5K24qOCk7CisrCQlpZihs ZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkg ICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJaWJ1Zls0XT0nXDAnOworKwkJ UHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKKysJCWlmKG4gPT0gMikKKysJCSAgICArK3N0ZXA7 CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJ CWVyciA9IDE7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAzOiAvKiBJViA9IHh4eHgg Ki8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1Ziwg IklWID0gIiwgNSkgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBJVlxuIik7CisrCQll cnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJpbigoY2hhciop aWJ1Zis1LCBpVmVjKTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYo IkludmFsaWQgSVZcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9 CisrCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7CisrCQlzdGVwID0gKGRpcik/IDQ6IDU7 CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICov CisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQ TEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBQTEFJTlRF WFRcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWludCBubiA9 IHN0cmxlbihpYnVmKzEyKTsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBs ZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVu PWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsK KysJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOworKwkJICAg IGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlpZiAobGVuID49IHNpemVvZihw bGFpbnRleHQpKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7 CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBs YWludGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBN b250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSxha2V5c3os bnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxsZW4scmZwKTsKKysJCSAgICB9CisrCQll bHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChkaXIgPT0gMSk7CisrCQkgICAgcmV0ID0gREVT VGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAw ID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQs IGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJm cCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsK KysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICov CisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJD SVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgS0VZXG4i KTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpZighc3RyY21wKGFt b2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMp LTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNp cGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52 YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkg ICAgfQorKwkJCisrCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsK KysJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0 ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5 LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKKysJCSAgICB9Cisr CQllbHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChkaXIgPT0gMCk7CisrCQkgICAgcmV0ID0g REVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAv KiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRl eHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIg KilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAg ICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDY6CisrCSAg ICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlz c2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwg Ik1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICov CisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQorKwkgICAgc3RlcCA9IDE7CisrCSAgICBicmVh azsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZwKQorKwlmY2xvc2UocmZwKTsKKysgICAgaWYg KGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJldHVybiBlcnI7CisrICAgIH0KKysKKysvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBQcm9j ZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCisrICBhIHNldCBvZiBmaWxlcyB3aG9zZSBu YW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVk IGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCisrICBBIHNldCBvZiBmaWxlcyBpcyBzcGVj aWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6 IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICB7CisrICAg IGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOworKyAgICBGSUxFICpm cCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOworKyAgICBp bnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBp ZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJRVhJVCgx KTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJnYyA+IDEpCisrCXsKKysJaWYgKHN0cmNhc2Vj bXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAgIHsKKysJICAgIGRfb3B0ID0gMTsKKysJICAg IH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQorKwkgICAgewor KwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQgPSAwOworKwkgICAgfQorKwllbHNlCisrCSAg ICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Cisr CSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGFyZ2MgPCAzKQorKwkgICAgeworKwkgICAg cHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0K KysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKKysJZWxzZQorKwkgICAgewor KwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJICAgIHJzcGZpbGUgPSBhcmd2WzNdOworKwkg ICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3Rv cnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKKysJICAgIHsKKysJICAg IHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7CisrCSAgICByZXR1cm4gLTE7 CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQorKwkgICAgewor KwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkgICAgc3RyY3B5KHJmbiwgZm4pOworKwkgICAg cHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2ZpbGUocmZu LCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjog JXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNsb3NlKGZw KTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZFUkJPU0Up CisrCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9jX2ZpbGUoZm4s IHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQg Zm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJfQorKyAgICBFWElUKDApOworKyAgICBy ZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDAzOTM2 OTggKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19k aHZzLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDAzOTM2OTggKzAxMDAKK0BAIC0wLDAgKzEsMjky IEBACisrLyogZmlwcy9kaC9maXBzX2RodnMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2pl Y3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrCisrI2Rl ZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgor KworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERIIHN1 cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3Rh dGljIGNvbnN0IEVWUF9NRCAqcGFyc2VfbWQoY2hhciAqbGluZSkKKysJeworKwljaGFyICpwOwor KwlpZiAobGluZVswXSAhPSAnWycgfHwgbGluZVsxXSAhPSAnRicpCisrCQlyZXR1cm4gTlVMTDsK KysJcCA9IHN0cmNocihsaW5lLCAnLScpOworKwlpZiAoIXApCisrCQlyZXR1cm4gTlVMTDsKKysJ bGluZSA9IHAgKyAxOworKwlwID0gc3RyY2hyKGxpbmUsICddJyk7CisrCWlmICghcCkKKysJCXJl dHVybiBOVUxMOworKwkqcCA9IDA7CisrCXAgPSBsaW5lOworKwl3aGlsZShpc3NwYWNlKCpwKSkK KysJCXArKzsKKysJaWYgKCFzdHJjbXAocCwgIlNIQTEiKSkKKysJCXJldHVybiBFVlBfc2hhMSgp OworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyMjQiKSkKKysJCXJldHVybiBFVlBfc2hhMjI0 KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTI1NiIpKQorKwkJcmV0dXJuIEVWUF9zaGEy NTYoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMzg0IikpCisrCQlyZXR1cm4gRVZQX3No YTM4NCgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEE1MTIiKSkKKysJCXJldHVybiBFVlBf c2hhNTEyKCk7CisrCWVsc2UKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrc3RhdGljIHZvaWQg b3V0cHV0X1poYXNoKEZJTEUgKm91dCwgaW50IGV4b3V0LAorKwkJCQlESCAqZGgsIEJJR05VTSAq cGVlcmtleSwgY29uc3QgRVZQX01EICptZCwKKysJCQkJdW5zaWduZWQgY2hhciAqcmhhc2gsIHNp emVfdCByaGFzaGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpaOworKwl1bnNpZ25lZCBjaGFy IGNoYXNoW0VWUF9NQVhfTURfU0laRV07CisrCWludCBabGVuOworKwlpZiAocmhhc2ggPT0gTlVM TCkKKysJCXsKKysJCXJoYXNobGVuID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCQlpZiAoIURIX2dl bmVyYXRlX2tleShkaCkpCisrCQkJZXhpdCAoMSk7CisrCQlkb19ibl9wcmludF9uYW1lKG91dCwg IlllcGhlbUlVVCIsIGRoLT5wdWJfa2V5KTsKKysJCWlmIChleG91dCkKKysJCQlkb19ibl9wcmlu dF9uYW1lKG91dCwgIlhlcGhlbUlVVCIsIGRoLT5wcml2X2tleSk7CisrCQl9CisrCVogPSBPUEVO U1NMX21hbGxvYyhCTl9udW1fYnl0ZXMoZGgtPnApKTsKKysJaWYgKCFaKQorKwkJZXhpdCgxKTsK KysJWmxlbiA9IERIX2NvbXB1dGVfa2V5X3BhZGRlZChaLCBwZWVya2V5LCBkaCk7CisrCWlmIChl eG91dCkKKysJCU91dHB1dFZhbHVlKCJaIiwgWiwgWmxlbiwgb3V0LCAwKTsKKysJRklQU19kaWdl c3QoWiwgWmxlbiwgY2hhc2gsIE5VTEwsIG1kKTsKKysJT3V0cHV0VmFsdWUocmhhc2ggPyAiSVVU SGFzaFpaIiA6ICJIYXNoWloiLCBjaGFzaCwgcmhhc2hsZW4sIG91dCwgMCk7CisrCWlmIChyaGFz aCkKKysJCXsKKysJCWZwcmludGYob3V0LCAiUmVzdWx0ID0gJXNcbiIsCisrCQkJCW1lbWNtcChj aGFzaCwgcmhhc2gsIHJoYXNobGVuKSA/ICJGIiA6ICJQIik7CisrCQl9CisrCWVsc2UKKysJCXsK KysJCUJOX2NsZWFyX2ZyZWUoZGgtPnByaXZfa2V5KTsKKysJCUJOX2NsZWFyX2ZyZWUoZGgtPnB1 Yl9rZXkpOworKwkJZGgtPnByaXZfa2V5ID0gTlVMTDsKKysJCWRoLT5wdWJfa2V5ID0gTlVMTDsK KysJCX0KKysJT1BFTlNTTF9jbGVhbnNlKFosIFpsZW4pOworKwlPUEVOU1NMX2ZyZWUoWik7Cisr CX0KKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2RodnNfbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCisrI2Vsc2UKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisr I2VuZGlmCisrCXsKKysJY2hhciAqKmFyZ3MgPSBhcmd2ICsgMTsKKysJaW50IGFyZ24gPSBhcmdj IC0gMTsKKysJRklMRSAqaW4sICpvdXQ7CisrCWNoYXIgYnVmWzIwNDhdLCBsYnVmWzIwNDhdOwor Kwl1bnNpZ25lZCBjaGFyICpyaGFzaDsKKysJbG9uZyByaGFzaGxlbjsKKysJREggKmRoID0gTlVM TDsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCUJJR05VTSAqcGVlcmtleSA9IE5VTEw7 CisrCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworKwlpbnQgZG9fdmVyaWZ5 ID0gLTEsIGV4b3V0ID0gMDsKKysKKysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysKKysJaWYgKGFy Z24gJiYgIXN0cmNtcCgqYXJncywgImRodmVyIikpCisrCQl7CisrCQlkb192ZXJpZnkgPSAxOwor KwkJYXJncysrOworKwkJYXJnbi0tOworKwkJfQorKwllbHNlIGlmIChhcmduICYmICFzdHJjbXAo KmFyZ3MsICJkaGdlbiIpKQorKwkJeworKwkJZG9fdmVyaWZ5ID0gMDsKKysJCWFyZ3MrKzsKKysJ CWFyZ24tLTsKKysJCX0KKysKKysJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgIi1leG91dCIp KQorKwkJeworKwkJZXhvdXQgPSAxOworKwkJYXJncysrOworKwkJYXJnbi0tOworKwkJfQorKwor KwlpZiAoZG9fdmVyaWZ5ID09IC0xKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsIiVzIFtkaHZl cnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7CisrCQlleGl0 KDEpOworKwkJfQorKworKwlpZiAoYXJnbiA9PSAyKQorKwkJeworKwkJaW4gPSBmb3BlbigqYXJn cywgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Ig b3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysJCW91dCA9IGZv cGVuKGFyZ3NbMV0sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRl cnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0K KysJCX0KKysJZWxzZSBpZiAoYXJnbiA9PSAwKQorKwkJeworKwkJaW4gPSBzdGRpbjsKKysJCW91 dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsIiVzIFtk aHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7CisrCQll eGl0KDEpOworKwkJfQorKworKwlkaCA9IEZJUFNfZGhfbmV3KCk7CisrCisrCXdoaWxlIChmZ2V0 cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKKysJCXsKKysJCWZwdXRzKGJ1Ziwgb3V0 KTsKKysJCWlmIChzdHJsZW4oYnVmKSA+IDYgJiYgIXN0cm5jbXAoYnVmLCAiW0YiLCAyKSkKKysJ CQl7CisrCQkJbWQgPSBwYXJzZV9tZChidWYpOworKwkJCWlmIChtZCA9PSBOVUxMKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChkaCkKKysJCQkJRklQU19kaF9mcmVlKGRoKTsKKysJ CQlkaCA9IEZJUFNfZGhfbmV3KCk7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKCFwYXJz ZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGludWU7CisrCQlp ZiAoIXN0cmNtcChrZXl3b3JkLCAiUCIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmZGgt PnAsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJRIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cSwg dmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIkciKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5nLCB2YWx1 ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiWGVwaGVtSVVUIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cHJp dl9rZXksIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJZZXBoZW1JVVQiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgy Ym4oJmRoLT5wdWJfa2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtQ0FWUyIpKQorKwkJCXsKKysJCQlp ZiAoIWRvX2hleDJibigmcGVlcmtleSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCWlmIChkb192ZXJpZnkgPT0gMCkKKysJCQkJb3V0cHV0X1poYXNoKG91dCwgZXhvdXQsIGRo LCBwZWVya2V5LCBtZCwKKysJCQkJCQkJTlVMTCwgMCk7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQorKwkJCXsKKysJCQlpZiAoIW1kKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCXJoYXNoID0gaGV4MmJpbl9tKHZhbHVlLCAmcmhhc2hsZW4p OworKwkJCWlmICghcmhhc2ggfHwgcmhhc2hsZW4gIT0gTV9FVlBfTURfc2l6ZShtZCkpCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJb3V0cHV0X1poYXNoKG91dCwgZXhvdXQsIGRoLCBwZWVy a2V5LCBtZCwKKysJCQkJCQkJcmhhc2gsIHJoYXNobGVuKTsKKysJCQl9CisrCQl9CisrCWlmIChp biAmJiBpbiAhPSBzdGRpbikKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgb3V0ICE9IHN0 ZG91dCkKKysJCWZjbG9zZShvdXQpOworKwlyZXR1cm4gMDsKKysJcGFyc2VfZXJyb3I6CisrCWZw cmludGYoc3RkZXJyLCAiRXJyb3IgUGFyc2luZyByZXF1ZXN0IGZpbGVcbiIpOworKwlleGl0KDEp OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kcmJndnMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2RyYmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MDM5MzY5OCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2 cy5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQwMzkzNjk4ICswMTAwCitAQCAtMCwwICsxLDQxNiBA QAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmd2cy5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJv amVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysKKysj ZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+ CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5vIEZJUFMgRFJC RyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQorKworKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIK KysKKytzdGF0aWMgaW50IGRwYXJzZV9tZChjaGFyICpzdHIpCisrCXsKKysJc3dpdGNoKGF0b2ko c3RyICsgNSkpCisrCQl7CisrCQljYXNlIDE6CisrCQlyZXR1cm4gTklEX3NoYTE7CisrCisrCQlj YXNlIDIyNDoKKysJCXJldHVybiBOSURfc2hhMjI0OworKworKwkJY2FzZSAyNTY6CisrCQlyZXR1 cm4gTklEX3NoYTI1NjsKKysKKysJCWNhc2UgMzg0OgorKwkJcmV0dXJuIE5JRF9zaGEzODQ7Cisr CisrCQljYXNlIDUxMjoKKysJCXJldHVybiBOSURfc2hhNTEyOworKworKwkJfQorKworKwlyZXR1 cm4gTklEX3VuZGVmOworKwl9CisrCisrc3RhdGljIGludCBwYXJzZV9lYyhjaGFyICpzdHIpCisr CXsKKysJaW50IGN1cnZlX25pZCwgbWRfbmlkOworKwljaGFyICptZDsKKysJbWQgPSBzdHJjaHIo c3RyLCAnICcpOworKwlpZiAoIW1kKQorKwkJcmV0dXJuIE5JRF91bmRlZjsKKysJaWYgKCFzdHJu Y21wKHN0ciwgIltQLTI1NiIsIDYpKQorKwkJY3VydmVfbmlkID0gTklEX1g5XzYyX3ByaW1lMjU2 djE7CisrCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTM4NCIsIDYpKQorKwkJY3VydmVfbmlk ID0gTklEX3NlY3AzODRyMTsKKysJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiW1AtNTIxIiwgNikp CisrCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDUyMXIxOworKwllbHNlCisrCQlyZXR1cm4gTklEX3Vu ZGVmOworKwltZF9uaWQgPSBkcGFyc2VfbWQobWQpOworKwlpZiAobWRfbmlkID09IE5JRF91bmRl ZikKKysJCXJldHVybiBOSURfdW5kZWY7CisrCXJldHVybiAoY3VydmVfbmlkIDw8IDE2KSB8IG1k X25pZDsKKysJfQorKworK3N0YXRpYyBpbnQgcGFyc2VfYWVzKGNoYXIgKnN0ciwgaW50ICpwZGYp CisrCXsKKysKKysJaWYgKCFzdHJuY21wKHN0ciArIDksICJubyIsIDIpKQorKwkJKnBkZiA9IDA7 CisrCWVsc2UKKysJCSpwZGYgPSBEUkJHX0ZMQUdfQ1RSX1VTRV9ERjsKKysKKysJc3dpdGNoKGF0 b2koc3RyICsgNSkpCisrCQl7CisrCQljYXNlIDEyODoKKysJCXJldHVybiBOSURfYWVzXzEyOF9j dHI7CisrCisrCQljYXNlIDE5MjoKKysJCXJldHVybiBOSURfYWVzXzE5Ml9jdHI7CisrCisrCQlj YXNlIDI1NjoKKysJCXJldHVybiBOSURfYWVzXzI1Nl9jdHI7CisrCisrCQlkZWZhdWx0OgorKwkJ cmV0dXJuIE5JRF91bmRlZjsKKysKKysJCX0KKysJfQorKworK3R5cGVkZWYgc3RydWN0IAorKwl7 CisrCXVuc2lnbmVkIGNoYXIgKmVudDsKKysJc2l6ZV90IGVudGxlbjsKKysJdW5zaWduZWQgY2hh ciAqbm9uY2U7CisrCXNpemVfdCBub25jZWxlbjsKKysJfSBURVNUX0VOVDsKKysKKytzdGF0aWMg c2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1p bl9sZW4sIHNpemVfdCBtYXhfbGVuKQorKwl7CisrCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dl dF9hcHBfZGF0YShkY3R4KTsKKysJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPmVudDsKKysJ cmV0dXJuIHQtPmVudGxlbjsKKysJfQorKworK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJH X0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQor Kwl7CisrCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKKysJKnBv dXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOworKwlyZXR1cm4gdC0+bm9uY2VsZW47Cisr CX0KKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2RyYmd2c19tYWluKGludCBhcmdj LGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisr I2VuZGlmCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysJRFJCR19DVFgg KmRjdHggPSBOVUxMOworKwlURVNUX0VOVCB0OworKwlpbnQgciwgbmlkID0gMDsKKysJaW50IHBy ID0gMDsKKysJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07CisrCXVuc2lnbmVkIGNoYXIgcmFu ZG91dFsyMDQ4XTsKKysJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisrCisr CXVuc2lnbmVkIGNoYXIgKmVudCA9IE5VTEwsICpub25jZSA9IE5VTEwsICpwZXJzID0gTlVMTCwg KmFkaW4gPSBOVUxMOworKwlsb25nIGVudGxlbiwgbm9uY2VsZW4sIHBlcnNsZW4sIGFkaW5sZW47 CisrCWludCBkZiA9IDA7CisrCisrCWVudW0gZHR5cGUgeyBEUkJHX05PTkUsIERSQkdfQ1RSLCBE UkJHX0hBU0gsIERSQkdfSE1BQywgRFJCR19EVUFMX0VDIH0KKysJCWRyYmdfdHlwZSA9IERSQkdf Tk9ORTsKKysKKysJaW50IHJhbmRvdXRsZW4gPSAwOworKworKwlpbnQgZ2VuID0gMDsKKysKKysJ Zmlwc19hbGd0ZXN0X2luaXQoKTsKKysKKysJaWYgKGFyZ2MgPT0gMykKKysJCXsKKysJCWluID0g Zm9wZW4oYXJndlsxXSwgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0K KysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7CisrCQkJ ZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQlleGl0 KDEpOworKwkJCX0KKysJCX0KKysJZWxzZSBpZiAoYXJnYyA9PSAxKQorKwkJeworKwkJaW4gPSBz dGRpbjsKKysJCW91dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsIiVzIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7CisrCQlleGl0KDEpOworKwkJ fQorKworKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCisrCQl7 CisrCQlmcHV0cyhidWYsIG91dCk7CisrCQlpZiAoZHJiZ190eXBlID09IERSQkdfTk9ORSkKKysJ CQl7CisrCQkJaWYgKHN0cnN0cihidWYsICJDVFJfRFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBE UkJHX0NUUjsKKysJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSGFzaF9EUkJHIikpCisrCQkJCWRy YmdfdHlwZSA9IERSQkdfSEFTSDsKKysJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSE1BQ19EUkJH IikpCisrCQkJCWRyYmdfdHlwZSA9IERSQkdfSE1BQzsKKysJCQllbHNlIGlmIChzdHJzdHIoYnVm LCAiRHVhbF9FQ19EUkJHIikpCisrCQkJCWRyYmdfdHlwZSA9IERSQkdfRFVBTF9FQzsKKysJCQll bHNlCisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmIChzdHJsZW4oYnVmKSA+IDQgJiYgIXN0 cm5jbXAoYnVmLCAiW1NIQS0iLCA1KSkKKysJCQl7CisrCQkJbmlkID0gZHBhcnNlX21kKGJ1Zik7 CisrCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCisrCQkJCWV4aXQoMSk7CisrCQkJaWYgKGRyYmdf dHlwZSA9PSBEUkJHX0hNQUMpCisrCQkJCXsKKysJCQkJc3dpdGNoIChuaWQpCisrCQkJCQl7Cisr CQkJCQljYXNlIE5JRF9zaGExOgorKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMTsKKysJCQkJ CWJyZWFrOworKworKwkJCQkJY2FzZSBOSURfc2hhMjI0OgorKwkJCQkJbmlkID0gTklEX2htYWNX aXRoU0hBMjI0OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNlIE5JRF9zaGEyNTY6CisrCQkJ CQluaWQgPSBOSURfaG1hY1dpdGhTSEEyNTY7CisrCQkJCQlicmVhazsKKysKKysJCQkJCWNhc2Ug TklEX3NoYTM4NDoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTM4NDsKKysJCQkJCWJyZWFr OworKworKwkJCQkJY2FzZSBOSURfc2hhNTEyOgorKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hB NTEyOworKwkJCQkJYnJlYWs7CisrCisrCQkJCQlkZWZhdWx0OgorKwkJCQkJZXhpdCgxKTsKKysJ CQkJCX0KKysJCQkJfQorKwkJCX0KKysJCWlmIChzdHJsZW4oYnVmKSA+IDEyICYmICFzdHJuY21w KGJ1ZiwgIltBRVMtIiwgNSkpCisrCQkJeworKwkJCW5pZCA9IHBhcnNlX2FlcyhidWYsICZkZik7 CisrCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCisrCQkJCWV4aXQoMSk7CisrCQkJfQorKwkJaWYg KHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW1AtIiwgMykpCisrCQkJeworKwkJ CW5pZCA9IHBhcnNlX2VjKGJ1Zik7CisrCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCisrCQkJCWV4 aXQoMSk7CisrCQkJfQorKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYs IGJ1ZikpCisrCQkJY29udGludWU7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1ByZWRp Y3Rpb25SZXNpc3RhbmNlIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiVHJ1ZV0i KSkKKysJCQkJcHIgPSAxOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJGYWxzZV0iKSkK KysJCQkJcHIgPSAwOworKwkJCWVsc2UKKysJCQkJZXhpdCgxKTsKKysJCQl9CisrCisrCQlpZiAo IXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0IikpCisrCQkJeworKwkJCWVudCA9IGhleDJi aW5fbSh2YWx1ZSwgJmVudGxlbik7CisrCQkJdC5lbnQgPSBlbnQ7CisrCQkJdC5lbnRsZW4gPSBl bnRsZW47CisrCQkJfQorKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIk5vbmNlIikpCisrCQkJ eworKwkJCW5vbmNlID0gaGV4MmJpbl9tKHZhbHVlLCAmbm9uY2VsZW4pOworKwkJCXQubm9uY2Ug PSBub25jZTsKKysJCQl0Lm5vbmNlbGVuID0gbm9uY2VsZW47CisrCQkJfQorKworKwkJaWYgKCFz dHJjbXAoa2V5d29yZCwgIlBlcnNvbmFsaXphdGlvblN0cmluZyIpKQorKwkJCXsKKysJCQlwZXJz ID0gaGV4MmJpbl9tKHZhbHVlLCAmcGVyc2xlbik7CisrCQkJaWYgKG5pZCA9PSAwKQorKwkJCQl7 CisrCQkJCWZwcmludGYoc3RkZXJyLCAiRFJCRyB0eXBlIG5vdCByZWNvZ25pc2VkIVxuIik7Cisr CQkJCWV4aXQgKDEpOworKwkJCQl9CisrCQkJZGN0eCA9IEZJUFNfZHJiZ19uZXcobmlkLCBkZiB8 IERSQkdfRkxBR19URVNUKTsKKysJCQlpZiAoIWRjdHgpCisrCQkJCWV4aXQgKDEpOworKwkJCUZJ UFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwKKysJCQkJCQkJ dGVzdF9ub25jZSwgMCk7CisrCQkJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Cisr CQkJcmFuZG91dGxlbiA9IChpbnQpRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChkY3R4KTsKKysJ CQlyID0gRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHBlcnMsIHBlcnNsZW4pOworKwkJCWlm ICghcikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluc3RhbnRpYXRpbmcg RFJCR1xuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQlPUEVOU1NMX2ZyZWUocGVycyk7 CisrCQkJT1BFTlNTTF9mcmVlKGVudCk7CisrCQkJT1BFTlNTTF9mcmVlKG5vbmNlKTsKKysJCQll bnQgPSBub25jZSA9IHBlcnMgPSBOVUxMOworKwkJCWdlbiA9IDA7CisrCQkJfQorKworKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dCIpKQorKwkJCXsKKysJCQlhZGluID0g aGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7CisrCQkJaWYgKHByKQorKwkJCQljb250aW51ZTsK KysJCQlyID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHJhbmRvdXRsZW4sIDAs CisrCQkJCQkJCQlhZGluLCBhZGlubGVuKTsKKysJCQlpZiAoIXIpCisrCQkJCXsKKysJCQkJZnBy aW50ZihzdGRlcnIsICJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xuIik7CisrCQkJCWV4aXQo MSk7CisrCQkJCX0KKysJCQlpZiAoIXIpCisrCQkJCWV4aXQoMSk7CisrCQkJT1BFTlNTTF9mcmVl KGFkaW4pOworKwkJCWFkaW4gPSBOVUxMOworKwkJCWdlbisrOworKwkJCX0KKysKKysJCWlmIChw cikKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFBSIikpCisr CQkJCXsKKysJCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKKysJCQkJdC5lbnQg PSBlbnQ7CisrCQkJCXQuZW50bGVuID0gZW50bGVuOworKwkJCQlyID0gRklQU19kcmJnX2dlbmVy YXRlKGRjdHgsCisrCQkJCQkJCXJhbmRvdXQsIHJhbmRvdXRsZW4sCisrCQkJCQkJCTEsIGFkaW4s IGFkaW5sZW4pOworKwkJCQlpZiAoIXIpCisrCQkJCQl7CisrCQkJCQlmcHJpbnRmKHN0ZGVyciwK KysJCQkJCQkiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOworKwkJCQkJZXhpdCgxKTsK KysJCQkJCX0KKysJCQkJT1BFTlNTTF9mcmVlKGFkaW4pOworKwkJCQlPUEVOU1NMX2ZyZWUoZW50 KTsKKysJCQkJYWRpbiA9IGVudCA9IE5VTEw7CisrCQkJCWdlbisrOworKwkJCQl9CisrCQkJfQor KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFJlc2VlZCIpKQorKwkJCXsKKysJ CQllbnQgPSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOworKwkJCXQuZW50ID0gZW50OworKwkJ CXQuZW50bGVuID0gZW50bGVuOworKwkJCX0KKysJCWlmICghc3RyY21wKGtleXdvcmQsICJBZGRp dGlvbmFsSW5wdXRSZXNlZWQiKSkKKysJCQl7CisrCQkJYWRpbiA9IGhleDJiaW5fbSh2YWx1ZSwg JmFkaW5sZW4pOworKwkJCUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbik7Cisr CQkJT1BFTlNTTF9mcmVlKGVudCk7CisrCQkJT1BFTlNTTF9mcmVlKGFkaW4pOworKwkJCWVudCA9 IGFkaW4gPSBOVUxMOworKwkJCX0KKysJCWlmIChnZW4gPT0gMikKKysJCQl7CisrCQkJT3V0cHV0 VmFsdWUoIlJldHVybmVkQml0cyIsIHJhbmRvdXQsIHJhbmRvdXRsZW4sCisrCQkJCQkJCQkJb3V0 LCAwKTsKKysJCQlGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysJCQlkY3R4ID0gTlVMTDsKKysJCQln ZW4gPSAwOworKwkJCX0KKysKKysJCX0KKysJaWYgKGluICYmIGluICE9IHN0ZGluKQorKwkJZmNs b3NlKGluKTsKKysJaWYgKG91dCAmJiBvdXQgIT0gc3Rkb3V0KQorKwkJZmNsb3NlKG91dCk7Cisr CXJldHVybiAwOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MDM5 MzY5OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Rzc3ZzLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDAzOTM2OTggKzAxMDAKK0BAIC0wLDAgKzEs NTM3IEBACisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9Q RU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7Cisr ICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNf dXRsLmgiCisrCisrc3RhdGljIHZvaWQgcGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4p CisrCXsKKysJaW50IGxlbiwgaTsKKysJdW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9u dW1fYnl0ZXMoYm4pOworKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwor KwkJcmV0dXJuOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRtcCk7CisrCXByaW50ZigiJXMgPSAi LCBuYW1lKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJcHJpbnRmKCIlMDJYIiwg dG1wW2ldKTsKKysJZnB1dHMoIlxuIiwgc3Rkb3V0KTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7Cisr CXJldHVybjsKKysJfQorKworK3ZvaWQgcHJpbWVzKCkKKysgICAgeworKyAgICBjaGFyIGJ1Zlsx MDI0MF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisr CXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZh bHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJp bWUiKSkKKysJICAgIHsKKysJICAgIEJJR05VTSAqcHA7CisrCisrCSAgICBwcD1CTl9uZXcoKTsK KysJICAgIGRvX2hleDJibigmcHAsdmFsdWUpOworKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4i LAorKwkJICAgQk5faXNfcHJpbWVfZXgocHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7Cisr CSAgICB9CSAgICAKKysJfQorKyAgICB9CisrCisrdm9pZCBwcWcoKQorKyAgICB7CisrICAgIGNo YXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVv ZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAm dmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRp bnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRv aSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAg ICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5t b2QpOworKworKwkgICAgd2hpbGUobi0tKQorKwkJeworKwkJdW5zaWduZWQgY2hhciBzZWVkWzIw XTsKKysJCURTQSAqZHNhOworKwkJaW50IGNvdW50ZXI7CisrCQl1bnNpZ25lZCBsb25nIGg7Cisr CQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysKKysJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRl cnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291bnRlciwmaCxOVUxMKSkKKysJCQl7CisrCQkJZG9f cHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlwYm4oIlAiLGRzYS0+cCk7 CisrCQlwYm4oIlEiLGRzYS0+cSk7CisrCQlwYm4oIkciLGRzYS0+Zyk7CisrCQlwdigiU2VlZCIs c2VlZCwyMCk7CisrCQlwcmludGYoImMgPSAlZFxuIixjb3VudGVyKTsKKysJCXByaW50ZigiSCA9 ICVseFxuIixoKTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQpOworKwkJfQorKwkgICAgfQorKwllbHNl CisrCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsKKysJfQorKyAgICB9CisrCisrdm9pZCBwcWd2ZXIo KQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07Cisr ICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBO VUxMLCAqZyA9IE5VTEw7CisrICAgIGludCBjb3VudGVyLCBjb3VudGVyMjsKKysgICAgdW5zaWdu ZWQgbG9uZyBoLCBoMjsKKysgICAgRFNBICpkc2E9TlVMTDsKKysgICAgaW50IG5tb2Q9MDsKKysg ICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRdOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6 ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQs ICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29u dGludWU7CisrCQl9CisrCWZwdXRzKGJ1Ziwgc3Rkb3V0KTsKKysJaWYoIXN0cmNtcChrZXl3b3Jk LCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiU2VlZCIpKQorKwkgICAgeworKwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBz ZWVkKTsKKysJICAgIGlmIChzbGVuICE9IDIwKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJT ZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIH0K KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImMiKSkKKysJICAgIGNvdW50ZXIgPWF0b2koYnVm KzQpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSCIpKQorKwkgICAgeworKwkgICAgaCA9 IGF0b2kodmFsdWUpOworKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnKQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIGRz YSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50ZXIyLCZoMixOVUxMKSkKKysJCQl7CisrCQkJZG9f cHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrICAgICAgICAgICAgaWYgKEJO X2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcp CisrCQl8fCAoY291bnRlciAhPSBjb3VudGVyMikgfHwgKGggIT0gaDIpKQorKwkgICAgCXByaW50 ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNlCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQ XG4iKTsKKysJICAgIEJOX2ZyZWUocCk7CisrCSAgICBCTl9mcmVlKHEpOworKwkgICAgQk5fZnJl ZShnKTsKKysJICAgIHAgPSBOVUxMOworKwkgICAgcSA9IE5VTEw7CisrCSAgICBnID0gTlVMTDsK KysJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYSA9IE5VTEw7CisrCSAgICB9Cisr CX0KKysgICAgfQorKworKy8qIEtleXBhaXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlz IGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZJUFMxNDAtMgorKyAqIGFsZ29yaXRobSB0ZXN0 cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0 aGUKKysgKiBvdXRwdXQgb2YgdGhlIEtleVBhaXIgdGVzdC4KKysgKi8KKysKKytzdGF0aWMgaW50 IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpn LAorKwkJCQkJCQlCTl9DVFggKmN0eCkKKysgICAgeworKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7 CisrICAgIGlmIChCTl9udW1fYml0cyhwKSAhPSBubW9kKQorKwlyZXR1cm4gMDsKKysgICAgaWYg KEJOX251bV9iaXRzKHEpICE9IDE2MCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmlt ZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7Cisr ICAgIGlmIChCTl9pc19wcmltZV9leChxLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0g MSkKKysJcmV0dXJuIDA7CisrICAgIHJlbSA9IEJOX25ldygpOworKyAgICBpZiAoIUJOX21vZChy ZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pCisrICAgIAl8fCAoQk5fY21wKGcsIEJO X3ZhbHVlX29uZSgpKSA8PSAwKQorKwl8fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkg fHwgIUJOX2lzX29uZShyZW0pKQorKwl7CisrCUJOX2ZyZWUocmVtKTsKKysJcmV0dXJuIDA7Cisr CX0KKysgICAgLyogVG9kbzogY2hlY2sgZyAqLworKyAgICBCTl9mcmVlKHJlbSk7CisrICAgIHJl dHVybiAxOworKyAgICB9CisrCisrdm9pZCBrZXl2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVm WzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVM TCwgKlkgPSBOVUxMOworKyAgICBCSUdOVU0gKlkyOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7 CisrICAgIGludCBubW9kPTAsIHBhcmFtY2hlY2sgPSAwOworKworKyAgICBjdHggPSBCTl9DVFhf bmV3KCk7CisrICAgIFkyID0gQk5fbmV3KCk7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXpl b2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250 aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAg ICBpZiAocCkKKysJCUJOX2ZyZWUocCk7CisrCSAgICBwID0gTlVMTDsKKysJICAgIGlmIChxKQor KwkJQk5fZnJlZShxKTsKKysJICAgIHEgPSBOVUxMOworKwkgICAgaWYgKGcpCisrCQlCTl9mcmVl KGcpOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBwYXJhbWNoZWNrID0gMDsKKysJICAgIG5tb2Q9 YXRvaSh2YWx1ZSk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisr CSAgICBwPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisr CSAgICBxPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisr CSAgICBnPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCisr CSAgICBYPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCisr CSAgICB7CisrCSAgICBZPWhleDJibih2YWx1ZSk7CisrCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcg fHwgIVggfHwgIVkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsK KysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgcGJuKCJQIixwKTsKKysJICAgIHBibigiUSIscSk7 CisrCSAgICBwYm4oIkciLGcpOworKwkgICAgcGJuKCJYIixYKTsKKysJICAgIHBibigiWSIsWSk7 CisrCSAgICBpZiAoIXBhcmFtY2hlY2spCisrCQl7CisrCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1v ZCwgcCwgcSwgZywgY3R4KSkKKysJCQlwYXJhbWNoZWNrID0gMTsKKysJCWVsc2UKKysJCQlwYXJh bWNoZWNrID0gLTE7CisrCQl9CisrCSAgICBpZiAocGFyYW1jaGVjayAhPSAxKQorKwkgICAJcHJp bnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgIGVsc2UKKysJCXsKKysJCWlmICghQk5fbW9kX2V4 cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9jbXAoWTIsIFkpKQorKwkgICAgCQlwcmludGYoIlJl c3VsdCA9IEZcbiIpOworKwkgICAgICAgIGVsc2UKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQ XG4iKTsKKysJCX0KKysJICAgIEJOX2ZyZWUoWCk7CisrCSAgICBCTl9mcmVlKFkpOworKwkgICAg WCA9IE5VTEw7CisrCSAgICBZID0gTlVMTDsKKysJICAgIH0KKysJfQorKwlpZiAocCkKKysJICAg IEJOX2ZyZWUocCk7CisrCWlmIChxKQorKwkgICAgQk5fZnJlZShxKTsKKysJaWYgKGcpCisrCSAg ICBCTl9mcmVlKGcpOworKwlpZiAoWTIpCisrCSAgICBCTl9mcmVlKFkyKTsKKysgICAgfQorKwor K3ZvaWQga2V5cGFpcigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIg bGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0w OworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJ eworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsK KysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAo a2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIk4iKSkKKysJICAgIHsKKysJICAgIERTQSAqZHNhOworKwkgICAgaW50IG49 YXRvaSh2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJ ICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1l dGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJCXsKKysJCWRvX3By aW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBibigiUCIsZHNhLT5wKTsK KysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1 dGMoJ1xuJyxzdGRvdXQpOworKworKwkgICAgd2hpbGUobi0tKQorKwkJeworKwkJaWYgKCFEU0Ff Z2VuZXJhdGVfa2V5KGRzYSkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4 aXQoMSk7CisrCQkJfQorKworKwkJcGJuKCJYIixkc2EtPnByaXZfa2V5KTsKKysJCXBibigiWSIs ZHNhLT5wdWJfa2V5KTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQpOworKwkJfQorKwkgICAgfQorKwl9 CisrICAgIH0KKysKKyt2b2lkIHNpZ2dlbigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07 CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAg ICBpbnQgbm1vZD0wOworKyAgICBEU0EgKmRzYT1OVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhi dWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtl eXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOwor KwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAg eworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4i LG5tb2QpOworKwkgICAgaWYgKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRz YSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vy cm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAg IHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xu JyxzdGRvdXQpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisr CSAgICB7CisrCSAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKKysJICAgIHVuc2lnbmVkIGNo YXIgc2J1Zls2MF07CisrCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysJICAgIGludCBuOworKwkg ICAgRVZQX1BLRVkgcGs7CisrCSAgICBFVlBfTURfQ1RYIG1jdHg7CisrCSAgICBEU0FfU0lHICpz aWc7CisrCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKwkgICAgbj1oZXgyYmluKHZh bHVlLG1zZyk7CisrCSAgICBwdigiTXNnIixtc2csbik7CisrCisrCSAgICBpZiAoIURTQV9nZW5l cmF0ZV9rZXkoZHNhKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsK KysJCX0KKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrCSAgICBway5wa2V5LmRzYSA9 IGRzYTsKKysJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysKKysJICAgIEVWUF9TaWduSW5p dF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7CisrCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0 eCwgbXNnLCBuKTsKKysJICAgIEVWUF9TaWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGsp OworKworKwkgICAgc2lnID0gRFNBX1NJR19uZXcoKTsKKysJICAgIEZJUFNfZHNhX3NpZ19kZWNv ZGUoc2lnLCBzYnVmLCBzbGVuKTsKKysKKysJICAgIHBibigiUiIsc2lnLT5yKTsKKysJICAgIHBi bigiUyIsc2lnLT5zKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgRFNBX1NJR19m cmVlKHNpZyk7CisrCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwkgICAgfQorKwl9 CisrCWlmIChkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRzYSk7CisrICAgIH0KKysKKyt2b2lkIHNp Z3ZlcigpCisrICAgIHsKKysgICAgRFNBICpkc2E9TlVMTDsKKysgICAgY2hhciBidWZbMTAyNF07 CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Cisr ICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MCwgbj0wOworKyAgICBE U0FfU0lHIHNnLCAqc2lnID0gJnNnOworKworKyAgICBzaWctPnIgPSBOVUxMOworKyAgICBzaWct PnMgPSBOVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlm KCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVl KTsKKysJICAgIGlmKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYT1GSVBT X2RzYV9uZXcoKTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJ ICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIp KQorKwkgICAgZHNhLT5xPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJHIikpCisrCSAgICB7CisrCSAgICBkc2EtPmc9aGV4MmJuKHZhbHVlKTsKKysKKysJICAgIHBy aW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkg ICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAgcGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0Yygn XG4nLHN0ZG91dCk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkK KysJICAgIHsKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIsbXNn LG4pOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgZHNh LT5wdWJfa2V5PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikp CisrCSAgICBzaWctPnI9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlMiKSkKKysJICAgIHsKKysJICAgIEVWUF9NRF9DVFggbWN0eDsKKysJICAgIEVWUF9QS0VZIHBr OworKwkgICAgdW5zaWduZWQgY2hhciBzaWdidWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50IHNs ZW47CisrCSAgICBpbnQgcjsKKysJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrCSAgICBw ay50eXBlID0gRVZQX1BLRVlfRFNBOworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBz aWctPnM9aGV4MmJuKHZhbHVlKTsKKysJCisrCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Cisr CSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCisrCSAgICBz bGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShzaWdidWYsIHNpZyk7CisrCSAgICBFVlBfVmVyaWZ5 SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7CisrCSAgICBFVlBfVmVyaWZ5VXBkYXRl KCZtY3R4LCBtc2csIG4pOworKwkgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVm LCBzbGVuLCAmcGspOworKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysJCisrCSAg ICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCByID09IDEgPyAnUCcgOiAnRicpOworKwkgICAgcHV0 YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKworK2ludCBtYWluKGludCBh cmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlmcHJp bnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxu Iixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkK KysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighc3Ry Y21wKGFyZ3ZbMV0sInByaW1lIikpCisrCXByaW1lcygpOworKyAgICBlbHNlIGlmKCFzdHJjbXAo YXJndlsxXSwicHFnIikpCisrCXBxZygpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwi cHFndmVyIikpCisrCXBxZ3ZlcigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5 cGFpciIpKQorKwlrZXlwYWlyKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2 ZXIiKSkKKysJa2V5dmVyKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4i KSkKKysJc2lnZ2VuKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkK KysJc2lndmVyKCk7CisrICAgIGVsc2UKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25v dyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwlleGl0KDEpOworKwl9CisrCisrICAgIHJldHVy biAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0 MTM5MzcwNyArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2djbXRlc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MTM5MzcwNyArMDEwMAorQEAgLTAs MCArMSw1NzEgQEAKKysvKiBmaXBzL2Flcy9maXBzX2djbXRlc3QuYyAqLworKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICov CisrCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJO byBGSVBTIEdDTSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQorKwor KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5 cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgdm9pZCBnY210ZXN0 KEZJTEUgKmluLCBGSUxFICpvdXQsIGludCBlbmNyeXB0KQorKwl7CisrCWNoYXIgYnVmWzIwNDhd OworKwljaGFyIGxidWZbMjA0OF07CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJaW50IGtl eWxlbiA9IC0xLCBpdmxlbiA9IC0xLCBhYWRsZW4gPSAtMSwgdGFnbGVuID0gLTEsIHB0bGVuID0g LTE7CisrCWludCBydjsKKysJbG9uZyBsOworKwl1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMLCAq aXYgPSBOVUxMLCAqYWFkID0gTlVMTCwgKnRhZyA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKmN0 ID0gTlVMTCwgKnB0ID0gTlVMTDsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwljb25zdCBFVlBf Q0lQSEVSICpnY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKKysKKysJ d2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisrCQl7CisrCQlmcHV0cyhi dWYsb3V0KTsKKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQorKwkJCWNvbnRpbnVlOworKwkJaWYoIXN0cmNtcChrZXl3b3JkLCJbS2V5bGVuIikpCisrCQkJ eworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChrZXlsZW4gPT0gMTI4KQorKwkJ CQlnY20gPSBFVlBfYWVzXzEyOF9nY20oKTsKKysJCQllbHNlIGlmIChrZXlsZW4gPT0gMTkyKQor KwkJCQlnY20gPSBFVlBfYWVzXzE5Ml9nY20oKTsKKysJCQllbHNlIGlmIChrZXlsZW4gPT0gMjU2 KQorKwkJCQlnY20gPSBFVlBfYWVzXzI1Nl9nY20oKTsKKysJCQllbHNlIAorKwkJCQl7CisrCQkJ CWZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQga2V5bGVuICVkXG4iLAorKwkJCQkJCQlrZXls ZW4pOworKwkJCQl9CisrCQkJa2V5bGVuID4+PSAzOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIltJVmxlbiIpKQorKwkJCWl2bGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltBQURsZW4iKSkKKysJCQlhYWRsZW4gPSBhdG9p KHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1RhZ2xlbiIpKQor KwkJCXRhZ2xlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJbUFRsZW4iKSkKKysJCQlwdGxlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWtleSA9IGhleDJiaW5fbSh2YWx1 ZSwgJmwpOworKwkJCWlmIChsICE9IGtleWxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQor KwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJJViIpKQorKwkJCXsKKysJCQlpdiA9 IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGl2bGVuKQorKwkJCQl7CisrCQkJ CWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IElWIGxlbmd0aFxuIik7CisrCQkJCWV4aXQo MSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUFQiKSkKKysJ CQl7CisrCQkJcHQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBwdGxlbikK KysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQVCBsZW5ndGhcbiIp OworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIkNUIikpCisrCQkJeworKwkJCWN0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYg KGwgIT0gcHRsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQg Q1QgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJBQUQiKSkKKysJCQl7CisrCQkJYWFkID0gaGV4MmJpbl9tKHZhbHVl LCAmbCk7CisrCQkJaWYgKGwgIT0gYWFkbGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJy LCAiSW5jb25zaXN0ZW50IEFBRCBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9Cisr CQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlRhZyIpKQorKwkJCXsKKysJCQl0YWcg PSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSB0YWdsZW4pCisrCQkJCXsKKysJ CQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgVGFnIGxlbmd0aFxuIik7CisrCQkJCWV4 aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoZW5jcnlwdCAmJiBwdCAmJiBhYWQgJiYgKGl2 IHx8IGVuY3J5cHQ9PTEpKQorKwkJCXsKKysJCQl0YWcgPSBPUEVOU1NMX21hbGxvYyh0YWdsZW4p OworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDEpOworKwkJCS8q IFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KKysJCQlNX0VWUF9DSVBIRVJf Q1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJCQlG SVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwg MCk7CisrCQkJaWYgKGVuY3J5cHQgPT0gMSkKKysJCQkJeworKwkJCQlzdGF0aWMgdW5zaWduZWQg Y2hhciBpdl9maXhlZFs0XSA9IHsxLDIsMyw0fTsKKysJCQkJaWYgKCFpdikKKysJCQkJCWl2ID0g T1BFTlNTTF9tYWxsb2MoaXZsZW4pOworKwkJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwg a2V5LCBOVUxMLCAxKTsKKysJCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKKysJCQkJCQlF VlBfQ1RSTF9HQ01fU0VUX0lWX0ZJWEVELAorKwkJCQkJCTQsIGl2X2ZpeGVkKTsKKysJCQkJaWYg KCFGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LAorKwkJCQkJRVZQX0NUUkxfR0NNX0lWX0dFTiwg MCwgaXYpKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsICJJViBnZW4gZXJyb3JcbiIp OworKwkJCQkJZXhpdCgxKTsKKysJCQkJCX0KKysJCQkJT3V0cHV0VmFsdWUoIklWIiwgaXYsIGl2 bGVuLCBvdXQsIDApOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQlGSVBTX2NpcGhlcmluaXQoJmN0 eCwgTlVMTCwga2V5LCBpdiwgMSk7CisrCisrCisrCQkJaWYgKGFhZGxlbikKKysJCQkJRklQU19j aXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOworKwkJCWlmIChwdGxlbikKKysJCQkJewor KwkJCQljdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKKysJCQkJcnYgPSBGSVBTX2NpcGhlcigm Y3R4LCBjdCwgcHQsIHB0bGVuKTsKKysJCQkJfQorKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEws IE5VTEwsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9H RVRfVEFHLAorKwkJCQkJCQkJdGFnbGVuLCB0YWcpOwkKKysJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBj dCwgcHRsZW4sIG91dCwgMCk7CisrCQkJT3V0cHV0VmFsdWUoIlRhZyIsIHRhZywgdGFnbGVuLCBv dXQsIDApOworKwkJCWlmIChpdikKKysJCQkJT1BFTlNTTF9mcmVlKGl2KTsKKysJCQlpZiAoYWFk KQorKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKKysJCQlpZiAoY3QpCisrCQkJCU9QRU5TU0xfZnJl ZShjdCk7CisrCQkJaWYgKHB0KQorKwkJCQlPUEVOU1NMX2ZyZWUocHQpOworKwkJCWlmIChrZXkp CisrCQkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJCWlmICh0YWcpCisrCQkJCU9QRU5TU0xfZnJl ZSh0YWcpOworKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9IE5VTEw7CisrCQkJ fQkKKysJCWlmICghZW5jcnlwdCAmJiB0YWcpCisrCQkJeworKwkJCUZJUFNfY2lwaGVyaW5pdCgm Y3R4LCBnY20sIE5VTEwsIE5VTEwsIDApOworKwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWludHMg Zm9yIHRlc3RpbmcgKi8KKysJCQlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBf Q0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwgMCk7CisrCQkJRklQU19jaXBoZXJpbml0 KCZjdHgsIE5VTEwsIGtleSwgaXYsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgs IEVWUF9DVFJMX0dDTV9TRVRfVEFHLCB0YWdsZW4sIHRhZyk7CisrCQkJaWYgKGFhZGxlbikKKysJ CQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOworKwkJCWlmIChwdGxlbikK KysJCQkJeworKwkJCQlwdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKKysJCQkJcnYgPSBGSVBT X2NpcGhlcigmY3R4LCBwdCwgY3QsIHB0bGVuKTsKKysJCQkJfQorKwkJCXJ2ID0gRklQU19jaXBo ZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7CisrCQkJaWYgKHJ2IDwgMCkKKysJCQkJZnByaW50Zihv dXQsICJGQUlMIiBSRVNQX0VPTCk7CisrCQkJZWxzZQorKwkJCQlPdXRwdXRWYWx1ZSgiUFQiLCBw dCwgcHRsZW4sIG91dCwgMCk7CisrCQkJaWYgKGl2KQorKwkJCQlPUEVOU1NMX2ZyZWUoaXYpOwor KwkJCWlmIChhYWQpCisrCQkJCU9QRU5TU0xfZnJlZShhYWQpOworKwkJCWlmIChjdCkKKysJCQkJ T1BFTlNTTF9mcmVlKGN0KTsKKysJCQlpZiAocHQpCisrCQkJCU9QRU5TU0xfZnJlZShwdCk7Cisr CQkJaWYgKGtleSkKKysJCQkJT1BFTlNTTF9mcmVlKGtleSk7CisrCQkJaWYgKHRhZykKKysJCQkJ T1BFTlNTTF9mcmVlKHRhZyk7CisrCQkJaXYgPSBhYWQgPSBjdCA9IHB0ID0ga2V5ID0gdGFnID0g TlVMTDsKKysJCQl9CisrCQl9CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkKKysJ fQorKworK3N0YXRpYyB2b2lkIHh0c3Rlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJeworKwlj aGFyIGJ1ZlsyMDQ4MDBdOworKwljaGFyIGxidWZbMjA0ODAwXTsKKysJY2hhciAqa2V5d29yZCwg KnZhbHVlOworKwlpbnQgaW5sZW4gPSAwOworKwlpbnQgZW5jcnlwdCA9IDA7CisrCWxvbmcgbDsK KysJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0gTlVMTDsKKysJdW5zaWduZWQgY2hh ciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKKysJRVZQX0NJUEhFUl9DVFggY3R4Owor Kwljb25zdCBFVlBfQ0lQSEVSICp4dHMgPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgm Y3R4KTsKKysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisrCQl7 CisrCQlmcHV0cyhidWYsb3V0KTsKKysJCWlmIChidWZbMF0gPT0gJ1snICYmIHN0cmxlbihidWYp ID49IDkpCisrCQkJeworKwkJCWlmKCFzdHJuY21wKGJ1ZiwiW0VOQ1JZUFRdIiwgOSkpCisrCQkJ CWVuY3J5cHQgPSAxOworKwkJCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbREVDUllQVF0iLCA5KSkK KysJCQkJZW5jcnlwdCA9IDA7CisrCQkJfQorKwkJaWYgICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlrZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJ CQlpZiAobCA9PSAzMikKKysJCQkJeHRzID0gRVZQX2Flc18xMjhfeHRzKCk7CisrCQkJZWxzZSBp ZiAobCA9PSA2NCkKKysJCQkJeHRzID0gRVZQX2Flc18yNTZfeHRzKCk7CisrCQkJZWxzZQorKwkJ CQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOwor KwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQs ImkiKSkKKysJCQl7CisrCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAh PSAxNikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBpIGxlbmd0 aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKGVuY3J5cHQg JiYgIXN0cmNtcChrZXl3b3JkLCJQVCIpKQorKwkJCXsKKysJCQlpbmJ1ZiA9IGhleDJiaW5fbSh2 YWx1ZSwgJmwpOworKwkJCWlubGVuID0gbDsKKysJCQl9CisrCQllbHNlIGlmKCFlbmNyeXB0ICYm ICFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKKysJCQl7CisrCQkJaW5idWYgPSBoZXgyYmluX20odmFs dWUsICZsKTsKKysJCQlpbmxlbiA9IGw7CisrCQkJfQorKwkJaWYgKGluYnVmKQorKwkJCXsKKysJ CQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgeHRzLCBrZXksIGl2LCBlbmNyeXB0KTsKKysJCQlvdXRi dWYgPSBPUEVOU1NMX21hbGxvYyhpbmxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgb3V0YnVm LCBpbmJ1ZiwgaW5sZW4pOworKwkJCU91dHB1dFZhbHVlKGVuY3J5cHQgPyAiQ1QiOiJQVCIsIG91 dGJ1ZiwgaW5sZW4sIG91dCwgMCk7CisrCQkJT1BFTlNTTF9mcmVlKGluYnVmKTsKKysJCQlPUEVO U1NMX2ZyZWUob3V0YnVmKTsKKysJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKKysJCQlPUEVOU1NMX2Zy ZWUoaXYpOworKwkJCWl2ID0ga2V5ID0gaW5idWYgPSBvdXRidWYgPSBOVUxMOworKwkJCX0JCisr CQl9CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkKKysJfQorKworK3N0YXRpYyB2 b2lkIGNjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJeworKwljaGFyIGJ1ZlsyMDAwNDhd OworKwljaGFyIGxidWZbMjAwMDQ4XTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlsb25n IGw7CisrCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEwsICpOb25jZSA9IE5VTEw7CisrCXVuc2ln bmVkIGNoYXIgKkFkYXRhID0gTlVMTCwgKlBheWxvYWQgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFy ICpDVCA9IE5VTEw7CisrCWludCBQbGVuID0gLTEsIE5sZW4gPSAtMSwgVGxlbiA9IC0xLCBBbGVu ID0gLTE7CisrCWludCBkZWNyID0gMDsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwljb25zdCBF VlBfQ0lQSEVSICpjY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKKysK KysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisrCQl7CisrCQljaGFy ICpwOworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlyZWRvOgorKwkJaWYgKCFwYXJzZV9saW5lKCZr ZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGludWU7CisrCisrCQkvKiBJZiBz dXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyB6YXAgdGhlbSAqLworKwkJaWYgKGtleXdvcmRb MF0gPT0gJ1snKQorKwkJCXsKKysJCQlrZXl3b3JkKys7CisrCQkJcCA9IHN0cmNocih2YWx1ZSwg J10nKTsKKysJCQlpZiAocCkKKysJCQkJKnAgPSAwOworKwkJCX0KKysJCS8qIFNlZSBpZiB3ZSBo YXZlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycworKwkJICogaWYgc28gY29w eSByZXN0IG9mIGxpbmUgYmFjayB0byBidWZmZXIgYW5kIHJlZG8gbGF0ZXIuCisrCQkgKi8KKysJ CXAgPSBzdHJjaHIodmFsdWUsICcsJyk7CisrCQlpZiAocCkKKysJCQl7CisrCQkJKnAgPSAwOwor KwkJCXN0cmNweShidWYsIHAgKyAxKTsKKysJCQlzdHJjYXQoYnVmLCAiXG4iKTsKKysJCQlkZWNy ID0gMTsKKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJQbGVuIikpCisrCQkJUGxlbiA9 IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJObGVuIikpCisrCQkJ TmxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJUbGVuIikp CisrCQkJVGxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJB bGVuIikpCisrCQkJQWxlbiA9IGF0b2kodmFsdWUpOworKwkJaWYgKHApCisrCQkJZ290byByZWRv OworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWlmIChLZXkpCisr CQkJCU9QRU5TU0xfZnJlZShLZXkpOworKwkJCUtleSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwor KwkJCWlmIChsID09IDE2KQorKwkJCQljY20gPSBFVlBfYWVzXzEyOF9jY20oKTsKKysJCQllbHNl IGlmIChsID09IDI0KQorKwkJCQljY20gPSBFVlBfYWVzXzE5Ml9jY20oKTsKKysJCQllbHNlIGlm IChsID09IDMyKQorKwkJCQljY20gPSBFVlBfYWVzXzI1Nl9jY20oKTsKKysJCQllbHNlCisrCQkJ CXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7Cisr CQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs Ik5vbmNlIikpCisrCQkJeworKwkJCWlmIChOb25jZSkKKysJCQkJT1BFTlNTTF9mcmVlKE5vbmNl KTsKKysJCQlOb25jZSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IE5sZW4p CisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgbm9uY2UgbGVuZ3Ro XG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwiUGF5bG9hZCIpICYmICFkZWNyKQorKwkJCXsKKysJCQlQYXlsb2FkID0gaGV4MmJp bl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKFBsZW4gJiYgbCAhPSBQbGVuKQorKwkJCQl7CisrCQkJ CWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsKKysJCQkJ ZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQWRh dGEiKSkKKysJCQl7CisrCQkJaWYgKEFkYXRhKQorKwkJCQlPUEVOU1NMX2ZyZWUoQWRhdGEpOwor KwkJCUFkYXRhID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKEFsZW4gJiYgbCAhPSBB bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxvYWQg bGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwiQ1QiKSAmJiBkZWNyKQorKwkJCXsKKysJCQlDVCA9IGhleDJiaW5fbSh2 YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IChQbGVuICsgVGxlbikpCisrCQkJCXsKKysJCQkJZnBy aW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsK KysJCQkJfQorKwkJCX0KKysJCWlmIChQYXlsb2FkKQorKwkJCXsKKysJCQlGSVBTX2NpcGhlcmlu aXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAxKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgm Y3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9j dHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgVGxlbiwgMCk7CisrCQkJRklQU19j aXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwgTm9uY2UsIDEpOworKworKwkJCUZJUFNfY2lwaGVy KCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIEFk YXRhLCBBbGVuKTsKKysJCQlDVCA9IE9QRU5TU0xfbWFsbG9jKFBsZW4gKyBUbGVuKTsKKysJCQlG SVBTX2NpcGhlcigmY3R4LCBDVCwgUGF5bG9hZCwgUGxlbik7CisrCQkJRklQU19jaXBoZXJfY3R4 X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIFRsZW4sCisrCQkJCQkJQ1QgKyBQbGVu KTsKKysJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBDVCwgUGxlbiArIFRsZW4sIG91dCwgMCk7CisrCQkJ T1BFTlNTTF9mcmVlKENUKTsKKysJCQlPUEVOU1NMX2ZyZWUoUGF5bG9hZCk7CisrCQkJQ1QgPSBQ YXlsb2FkID0gTlVMTDsKKysJCQl9CisrCQlpZiAoQ1QpCisrCQkJeworKwkJCWludCBydjsKKysJ CQlpbnQgbGVuID0gUGxlbiA9PSAwID8gMTogUGxlbjsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0 eCwgY2NtLCBOVUxMLCBOVUxMLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBF VlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKKysJCQkJCQlUbGVuLCBDVCArIFBsZW4pOwor KwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAwKTsKKysJCQlGSVBT X2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKKysJCQlGSVBTX2NpcGhlcigmY3R4LCBO VUxMLCBBZGF0YSwgQWxlbik7CisrCQkJUGF5bG9hZCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Cisr CQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBQYXlsb2FkLCBDVCwgUGxlbik7CisrCQkJaWYgKHJ2 ID49IDApCisrCQkJCXsKKysJCQkJaWYgKHJ2ID09IDApCisrCQkJCQlQYXlsb2FkWzBdID0gMDsK KysJCQkJZnB1dHMoIlJlc3VsdCA9IFBhc3MiIFJFU1BfRU9MLCBvdXQpOworKwkJCQlPdXRwdXRW YWx1ZSgiUGF5bG9hZCIsIFBheWxvYWQsIGxlbiwgb3V0LCAwKTsKKysJCQkJfQorKwkJCWVsc2UK KysJCQkJZnB1dHMoIlJlc3VsdCA9IEZhaWwiIFJFU1BfRU9MLCBvdXQpOworKwkJCU9QRU5TU0xf ZnJlZShDVCk7CisrCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOworKwkJCUNUID0gUGF5bG9hZCA9 IE5VTEw7CisrCQkJfQorKwkJfQorKwlpZiAoS2V5KQorKwkJT1BFTlNTTF9mcmVlKEtleSk7Cisr CWlmIChOb25jZSkKKysJCU9QRU5TU0xfZnJlZShOb25jZSk7CisrCWlmIChBZGF0YSkKKysJCU9Q RU5TU0xfZnJlZShBZGF0YSk7CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOworKwl9 CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19nY210ZXN0X21haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor KyNlbmRpZgorKwl7CisrCWludCBlbmNyeXB0OworKwlpbnQgeHRzID0gMCwgY2NtID0gMDsKKysJ RklMRSAqaW4sICpvdXQ7CisrCWlmIChhcmdjID09IDQpCisrCQl7CisrCQlpbiA9IGZvcGVuKGFy Z3ZbMl0sICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlvdXQg PSBmb3Blbihhcmd2WzNdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZwcmludGYo c3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJ CQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ2MgPT0gMikKKysJCXsKKysJCWluID0gc3RkaW47Cisr CQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIl cyBbLWVuY3J5cHR8LWRlY3J5cHRdXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysJ Zmlwc19hbGd0ZXN0X2luaXQoKTsKKysJaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlwdCIpKQor KwkJZW5jcnlwdCA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlwdElWZXh0 IikpCisrCQllbmNyeXB0ID0gMjsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1kZWNyeXB0 IikpCisrCQllbmNyeXB0ID0gMDsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1jY20iKSkK KysJCWNjbSA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCIteHRzIikpCisrCQl4dHMg PSAxOworKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8g JXMuXG4iLGFyZ3ZbMV0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJaWYgKGNjbSkKKysJCWNj bXRlc3QoaW4sIG91dCk7CisrCWVsc2UgaWYgKHh0cykKKysJCXh0c3Rlc3QoaW4sIG91dCk7Cisr CWVsc2UKKysJCWdjbXRlc3QoaW4sIG91dCwgZW5jcnlwdCk7CisrCisrCWlmIChhcmdjID09IDQp CisrCQl7CisrCQlmY2xvc2UoaW4pOworKwkJZmNsb3NlKG91dCk7CisrCQl9CisrCisrCXJldHVy biAwOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2NhdnMvZmlwc19ybmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQxMzkzNzA3ICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMu YwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MTM5MzcwNyArMDEwMAorQEAgLTAsMCArMSwyMzAgQEAK KysvKgorKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1D VCB0ZXN0dmVjdG9yIGZpbGVzCisrICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1 Y3QuCisrICoKKysgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEg X3ZlcnlfIHNwZWNpZmljIGZvcm1hdAorKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1 bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCisrICogVmFsaWRhdGlvbiBTeXN0ZW0g KFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KKysgKgorKyAqLworKyNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8u aD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYo Ik5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4gMDsKKyt9CisrI2Vsc2UKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3ZvaWQgdnN0KCkK KysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOworKyAgICB1bnNpZ25lZCBj aGFyICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOworKyAgICB1bnNp Z25lZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZb MTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgbG9uZyBpLCBrZXlsZW47 CisrCisrICAgIGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZighc3RybmNt cChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAxNjsKKysJZWxzZSBpZigh c3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAyNDsKKysJZWxz ZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAzMjsK KysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQljb250 aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJICAgIHsKKysJICAgIGtleT1o ZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5bGVuKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxl bik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJEVCIpKQorKwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlm IChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxu Iik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJWIikpCisrCSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAo aSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7 CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8fCAhZHQpCisrCQl7CisrCQlm cHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKKysJCXJldHVybjsKKysJCX0K KysKKysJICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysJICAgIEZJUFNfeDkz MV9zZWVkKHYsMTYpOworKwkgICAgRklQU194OTMxX3NldF9kdChkdCk7CisrCSAgICBpZiAoRklQ U194OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRXJy b3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJICAgICAgICByZXR1cm47CisrCSAgICAgICAg fQorKworKwkgICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKKysJ ICAgIGtleSA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQpOworKwkgICAgZHQgPSBOVUxM OworKwkgICAgT1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5VTEw7CisrCSAgICB9CisrCX0K KysgICAgfQorKworK3ZvaWQgbWN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkg PSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hh ciAqZHQgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVm WzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKKysgICAgbG9uZyBpLCBrZXlsZW47CisrICAgIGludCBqOworKworKyAgICBrZXlsZW4gPSAw OworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJ eworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXld IiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5 Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJb QUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAo a2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsK KysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxp ZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOworKwkJ fQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsKKysJ ICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJ CWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJ fQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgeworKwkg ICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlm cHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQor KworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNaXNz aW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3g5MzFf c2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3g5MzFfc2VlZCh2LDE2KTsKKysJICAg IGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorKwkJeworKwkJICAgIEZJUFNfeDkzMV9zZXRf ZHQoZHQpOworKwkJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2KSA8PSAwKQorKwkJCXsK KysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7CisrCQkg ICAgICAgIHJldHVybjsKKysJCSAgICAgICAgfQorKwkJICAgIC8qIEluY3JlbWVudCBEVCAqLwor KwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCQl7CisrCQkJZHRbal0rKzsKKysJ CQlpZiAoZHRbal0pCisrCQkJCWJyZWFrOworKwkJCX0KKysJCX0KKysKKysJICAgIHB2KCJSIixy ZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOworKwkg ICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJl ZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKytpbnQgbWFp bihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBpZihhcmdjICE9IDIpCisrCXsK KysJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsK KysJfQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMo KTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKKysgICAgaWYgKCFG SVBTX3g5MzFfdGVzdF9tb2RlKCkpCisrCXsKKysJZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0 aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7 CisrCX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKKysJbWN0KCk7CisrICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKKysJdnN0KCk7CisrICAgIGVsc2UKKysJewor KwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwll eGl0KDEpOworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwor LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMu ZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MTM5MzcwNyArMDEwMAorKysrIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAxMi0wMi0wNyAxMTow NzowMi41NDEzOTM3MDcgKzAxMDAKK0BAIC0wLDAgKzEsMzkwIEBACisrLyogZmlwc19yc2FndGVz dC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxp Y2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg Y3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNy eXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkg VGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5j bHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJT QSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNs dWRlICJmaXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsK KytzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05V TSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAqZSk7Cisrc3RhdGlj IGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhxMSwg QklHTlVNICpYcTIsIEJJR05VTSAqWHEpOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0 ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJv cnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBz dGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJn YyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0s ICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlu cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxp emF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIXJzYV90ZXN0 KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxl IHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJl dCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50X2Vycm9ycygpOwor KworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQg JiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7Cisr CisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNh X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVi dWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlSU0EgKnJzYSA9IE5VTEw7 CisrCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpYcCA9IE5VTEw7CisrCUJJR05V TSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7CisrCUJJR05VTSAqZSA9IE5V TEw7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21h bGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1 ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1Rf TUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9s aW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNl ICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5 d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVi dWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0g YmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJ CXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOwor KwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0 cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQor KwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8q IFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0g MTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQorKwkJ CXsKKysJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCisr CQkJeworKwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZhbHVlKSkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQor KwkJCXsKKysJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFsdWUpKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQor KwkJCXsKKysJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikp CisrCQkJeworKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEyLHZhbHVlKSkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIp KQorKwkJCXsKKysJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEsdmFsdWUpKQorKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkK KysJCQl7CisrCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKKysJ CQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAyIikpCisrCQkJY29u dGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwIikpCisrCQkJY29udGludWU7 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQorKwkJCWNvbnRpbnVlOworKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgImQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vy cm9yOworKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAoZSAmJiBYcDEgJiYg WHAyICYmIFhwKQorKwkJCXsKKysJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKKysJCQlpZiAoIXJz YSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhw MSwgWHAyLCBYcCwgZSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShYcDEpOworKwkJ CVhwMSA9IE5VTEw7CisrCQkJQk5fZnJlZShYcDIpOworKwkJCVhwMiA9IE5VTEw7CisrCQkJQk5f ZnJlZShYcCk7CisrCQkJWHAgPSBOVUxMOworKwkJCUJOX2ZyZWUoZSk7CisrCQkJZSA9IE5VTEw7 CisrCQkJfQorKworKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYmIFhxKQorKwkJCXsKKysJCQlp ZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBYcSkpCisrCQkJCWdvdG8gZXJy b3I7CisrCQkJQk5fZnJlZShYcTEpOworKwkJCVhxMSA9IE5VTEw7CisrCQkJQk5fZnJlZShYcTIp OworKwkJCVhxMiA9IE5VTEw7CisrCQkJQk5fZnJlZShYcSk7CisrCQkJWHEgPSBOVUxMOworKwkJ CUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJCQlyc2EgPSBOVUxMOworKwkJCX0KKysJCX0KKysKKysJ cmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJl ZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwor KworKwlpZiAoWHAxKQorKwkJQk5fZnJlZShYcDEpOworKwlpZiAoWHAyKQorKwkJQk5fZnJlZShY cDIpOworKwlpZiAoWHApCisrCQlCTl9mcmVlKFhwKTsKKysJaWYgKFhxMSkKKysJCUJOX2ZyZWUo WHExKTsKKysJaWYgKFhxMSkKKysJCUJOX2ZyZWUoWHExKTsKKysJaWYgKFhxMikKKysJCUJOX2Zy ZWUoWHEyKTsKKysJaWYgKFhxKQorKwkJQk5fZnJlZShYcSk7CisrCWlmIChlKQorKwkJQk5fZnJl ZShlKTsKKysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJuIHJl dDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2Ug ZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysK KysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAor KwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAorKwkJQklHTlVNICplKQor Kwl7CisrCWludCByZXQgPSAwOworKwlCSUdOVU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKKysJ cDEgPSBCTl9uZXcoKTsKKysJcDIgPSBCTl9uZXcoKTsKKysJaWYgKCFwMSB8fCAhcDIpCisrCQln b3RvIGVycm9yOworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVM TCwgTlVMTCwgWHAxLCBYcDIsIFhwLAorKwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwp KQorKwkJZ290byBlcnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsK KysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKKysJZG9fYm5fcHJpbnRfbmFtZShv dXQsICJwIiwgcnNhLT5wKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChwMSkK KysJCUJOX2ZyZWUocDEpOworKwlpZiAocDIpCisrCQlCTl9mcmVlKHAyKTsKKysKKysJcmV0dXJu IHJldDsKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAq cnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKQorKwl7CisrCWlu dCByZXQgPSAwOworKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0gTlVMTDsKKysJcTEgPSBCTl9u ZXcoKTsKKysJcTIgPSBCTl9uZXcoKTsKKysJaWYgKCFxMSB8fCAhcTIpCisrCQlnb3RvIGVycm9y OworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwg TlVMTCwgTlVMTCwgTlVMTCwKKysJCQkJCQlYcTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQorKwkJ Z290byBlcnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMSIsIHExKTsKKysJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJx IiwgcnNhLT5xKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJuIiwgcnNhLT5uKTsKKysJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJy b3I6CisrCWlmIChxMSkKKysJCUJOX2ZyZWUocTEpOworKwlpZiAocTIpCisrCQlCTl9mcmVlKHEy KTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMJMjAxMi0w Mi0wNyAxMTowNzowMi41NDEzOTM3MDcgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQxMzkz NzA3ICswMTAwCitAQCAtMCwwICsxLDM3MCBAQAorKy8qIGZpcHNfcnNhc3Rlc3QuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgor KyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5 djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwor KyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgi CisrCisrc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRs ZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0 IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBT YWx0bGVuKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklM RSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDEsIFNhbHRsZW4gPSAt MTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMo KTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCIt c2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7Cisr CQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IElu dmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCWFyZ2MgLT0g MjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21w KCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IC0yOworKwkJYXJnYy0tOwor KwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJ ZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisr CQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Cisr CisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRp YWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVy cm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIXJzYV9zdGVzdChvdXQsIGlu LCBTYWx0bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RFU1QgZmls ZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQly ZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsK KysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0 ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0Owor KworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJz YV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKKysJeworKwljaGFyICps aW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlS U0EgKnJzYSA9IE5VTEw7CisrCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7CisrCXVuc2lnbmVk IGNoYXIgKk1zZyA9IE5VTEw7CisrCWxvbmcgTXNnbGVuID0gLTE7CisrCWludCBrZXlsZW4gPSAt MSwgY3VycmVudF9rZXlsZW4gPSAtMTsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsK KysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJ bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAo IWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUgKGZnZXRz KG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7Cisr CQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkv KiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8K KysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0ganVzdCBjb3B5 ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDAp CisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAx OworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1 ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwor KwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOwor KworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1 ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQkvKiBMb29rIGZvciBb bW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwg Ilttb2QiKSkKKysJCQl7CisrCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCQkJ aWYgKCpwICE9ICddJykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkqcCA9IDA7CisrCQkJ a2V5bGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKGtleWxlbiA8IDApCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikp CisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQorKwkJCQlkZ3N0ID0gRVZQ X3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCisrCQkJCWRn c3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIp KQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKKysJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7CisrCQkJZWxz ZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRl ZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJCQkJdmFsdWUpOworKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNn IikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYg KHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCU1zZyA9IGhl eDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJfQorKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQkvKiBJZiBr ZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYworKwkJICog a2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KKysJCSAqLworKworKwkJaWYg KGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKKysJCQl7CisrCQkJQklHTlVNICpibl9lOworKwkJ CWlmIChyc2EpCisrCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJCQlyc2EgPSBGSVBTX3JzYV9u ZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlibl9lID0gQk5fbmV3 KCk7CisrCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQorKwkJCQln b3RvIGVycm9yOworKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwga2V5bGVu LCBibl9lLCBOVUxMKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9mcmVlKGJuX2UpOworKwkJ CWZwdXRzKCJuID0gIiwgb3V0KTsKKysJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7CisrCQkJ ZnB1dHMoIlxuZSA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUpOworKwkJ CWZwdXRzKCJcbiIsIG91dCk7CisrCQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47CisrCQkJfQor KworKwkJaWYgKE1zZyAmJiBkZ3N0KQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludHNpZyhvdXQs IHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCisrCQkJCQkJCQlTYWx0bGVuKSkKKysJCQkJZ290byBl cnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCX0KKysK KysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJ CU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVl KGxpbmVidWYpOworKwlpZiAocnNhKQorKwkJRklQU19yc2FfZnJlZShyc2EpOworKworKwlyZXR1 cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBw YXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9y OworKworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJz YSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xl biwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgKnNp Z2J1ZiA9IE5VTEw7CisrCWludCBpLCBzaWdsZW47CisrCS8qIEVWUF9QS0VZIHN0cnVjdHVyZSAq LworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NUWCBjdHg7CisrCXBrLnR5cGUgPSBFVlBfUEtF WV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhOworKworKwlzaWdsZW4gPSBSU0Ffc2l6ZShyc2Ep OworKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOworKwlpZiAoIXNpZ2J1ZikKKysJ CWdvdG8gZXJyb3I7CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRs ZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBf TURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYg KFNhbHRsZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9D VFhfRkxBR19QQURfWDkzMSk7CisrCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRnc3QsIE5V TEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBNc2csIE1z Z2xlbikpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwgc2lnYnVm LCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCUVW UF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJZnB1dHMoIlMgPSAiLCBvdXQpOworKworKwlm b3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMlgiLCBzaWdi dWZbaV0pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKworKwlyZXQgPSAxOworKworKwllcnJv cjoKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAxMi0wMi0w NyAxMTowNzowMi41NDIzOTM3MTYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQyMzkzNzE2 ICswMTAwCitAQCAtMCwwICsxLDM3NyBAQAorKy8qIGZpcHNfcnNhdnRlc3QuYyAqLworKy8qIFdy aXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUg T3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisr ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3 YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRq aEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNp bmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9o bWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUw OXYzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAg ICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisr CisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKKytzdGF0 aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwK KysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2ds ZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKKysKKytp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAq b3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCWludCBTYWx0bGVuID0gLTE7CisrCisr CWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4i LCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNh bHRsZW4gPCAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNh bHQgbGVuZ3RoXG4iKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlh cmd2ICs9IDI7CisrCQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEi LCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3Yr KzsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJ CWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0g c3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAo IWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlv biBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0bGVu KSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNz aW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOwor KworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYg KGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQg IT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9Cisr CisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJ TEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpv bGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWNvbnN0IEVWUF9N RCAqZGdzdCA9IE5VTEw7CisrCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKKysJdW5zaWdu ZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOworKwlsb25nIE1zZ2xlbiwgU2xlbjsKKysJ aW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21h bGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJT QV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJ Z290byBlcnJvcjsKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5F TEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYp OworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7 CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0n KTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxp bmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJ CWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29u dGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEt LSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3Zl IGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKwor KwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJ KnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCXsKKysJCQlp ZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hl eDJibigmZSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZh bHVlLCAiU0hBMSIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMjI0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxz ZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1Nigp OworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVW UF9zaGEzODQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJ CWRnc3QgPSBFVlBfc2hhNTEyKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3Rk ZXJyLAorKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJ CQkJCQkJdmFsdWUpOworKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkq KC0tdmFsdWUpID0gJzAnOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Cisr CQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiUyIpKQorKwkJCXsKKysJCQlpZiAoUykKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAn MCc7CisrCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOworKwkJCWlmICghUykKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJS ZXN1bHQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOwor KworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAobiAmJiBlICYmIE1zZyAmJiBT ICYmIGRnc3QpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdzdCwK KysJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKKysJCQkJZ290byBlcnJvcjsK KysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xfZnJl ZShTKTsKKysJCQlTID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCisrCXJldCA9IDE7Cisr CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVi dWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKG4p CisrCQlCTl9mcmVlKG4pOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCisrCXJldHVybiBy ZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNl IGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7Cisr CisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0g Km4sIEJJR05VTSAqZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIg Kk1zZywgbG9uZyBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBT YWx0bGVuKQorKwl7CisrCWludCByZXQgPSAwLCByOworKwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9Q S0VZIHN0cnVjdHVyZXMgKi8KKysJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKKysJRVZQX1BLRVkg cGs7CisrCUVWUF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworKwly c2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7CisrCWlmICghcnNhX3B1YmtleSkKKysJCWdvdG8g ZXJyb3I7CisrCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7CisrCXJzYV9wdWJrZXktPmUgPSBC Tl9kdXAoZSk7CisrCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKKysJCWdv dG8gZXJyb3I7CisrCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNh X3B1YmtleTsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoU2FsdGxlbiA+ PSAwKQorKwkJeworKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9NRF9D VFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAoU2Fs dGxlbiA9PSAtMikKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9G TEFHX1BBRF9YOTMxKTsKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxM KSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1z Z2xlbikpCisrCQlnb3RvIGVycm9yOworKworKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMs IFNsZW4sICZwayk7CisrCisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYg KHIgPCAwKQorKwkJZ290byBlcnJvcjsKKysJRVJSX2NsZWFyX2Vycm9yKCk7CisrCisrCWlmIChy ID09IDApCisrCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKKysJZWxzZQorKwkJZnB1dHMo IlJlc3VsdCA9IFBcbiIsIG91dCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAo cnNhX3B1YmtleSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7CisrCWlmIChidWYpCisr CQlPUEVOU1NMX2ZyZWUoYnVmKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5j LmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDIzOTM3MTYgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMJMjAxMi0wMi0wNyAxMTow NzowMi41NDIzOTM3MTYgKzAxMDAKK0BAIC0wLDAgKzEsMzg4IEBACisrLyogZmlwc19zaGF0ZXN0 LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29m dC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisr ICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgU0hBWFhY IHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1 ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxF ICppbik7Cisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91 dCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7Cisrc3RhdGljIGludCBwcmlu dF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpT ZWVkLCBpbnQgU2VlZExlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor Kwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOwor KworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOwor KwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOwor KwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikK KysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsK KysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5p dGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0 KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24g ZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghZGdzdF90ZXN0KG91dCwg aW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBkaWdlc3QgZmlsZSBwcm9jZXNz aW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOwor KworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYg KGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQg IT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9Cisr CisrI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKKysjZGVmaW5lIFNIQV9URVNUX01B WExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAyKSArIDEwMCkKKysKKytpbnQg ZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY29uc3QgRVZQX01EICptZCA9 IE5VTEw7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3 b3JkLCAqdmFsdWU7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTZWVkID0gTlVMTDsK KysJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4gPSAtMTsKKysJaW50IHJldCA9 IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFf VEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01B WExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJv cjsKKysKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFfVEVTVF9NQVhMSU5FTEVOLCBp bikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJ a2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisr CQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysK KysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNv cHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCQkJ Y29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJ KnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVt b3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwor KwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJ KnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJbTCIpICYmICpwPT0nXScpCisr CQkJeworKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCisrCQkJCXsKKysJCQkJY2FzZSAyMDogbWQ9 RVZQX3NoYTEoKTsgICBicmVhazsKKysJCQkJY2FzZSAyODogbWQ9RVZQX3NoYTIyNCgpOyBicmVh azsKKysJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVhazsKKysJCQkJY2FzZSA0ODog bWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKKysJCQkJY2FzZSA2NDogbWQ9RVZQX3NoYTUxMigpOyBi cmVhazsKKysJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQorKwkJCXsKKysJCQlpZiAoTGVuICE9 IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUxlbiA9IGF0b2kodmFsdWUpOworKwkJ CWlmIChMZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCS8qIE9ubHkgaGFuZGxl IG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KKysJCQlpZiAoTGVuICYgMHg3KQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhfQklUUykKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQlNc2dMZW4gPSBMZW4gPj4gMzsKKysJCQl9CisrCisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJbG9uZyB0bXBsZW47CisrCQkJ aWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCWlmIChN c2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAm dG1wbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCisrCQkJeworKwkJCWlmIChzdHJs ZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoU2VlZCkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlTZWVkID0gaGV4MmJpbl9tKHZhbHVlLCAmU2VlZExl bik7CisrCQkJaWYgKCFTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCisrCQkJY29udGludWU7CisrCQllbHNlCisr CQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJ aWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X2Rn c3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xf ZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJTXNnTGVuID0gLTE7CisrCQkJTGVuID0g LTE7CisrCQkJfQorKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAoU2VlZExlbiA+IDApKQorKwkJ CXsKKysJCQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQsIFNlZWRMZW4pKQorKwkJCQln b3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysJCQlTZWVkID0gTlVMTDsKKysJ CQlTZWVkTGVuID0gLTE7CisrCQkJfQorKwkKKysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysK KysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1 Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAoTXNn KQorKwkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCWlmIChTZWVkKQorKwkJT1BFTlNTTF9mcmVlKFNl ZWQpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50Zihz dGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwor KworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0 IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2ds ZW4pCisrCXsKKysJaW50IGksIG1kbGVuOworKwl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURf U0laRV07CisrCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwgbWQsICh1bnNpZ25lZCBpbnQg KikmbWRsZW4sIGVtZCwgTlVMTCkpCisrCQl7CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcg SEFTSFxuIiwgc3RkZXJyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlmcHV0cygiTUQgPSAiLCBv dXQpOworKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAy eCIsIG1kW2ldKTsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytz dGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKKysJCXVu c2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQorKwl7CisrCXVuc2lnbmVkIGludCBpLCBq LCBrOworKwlpbnQgcmV0ID0gMDsKKysJRVZQX01EX0NUWCBjdHg7CisrCXVuc2lnbmVkIGNoYXIg Km0xLCAqbTIsICptMywgKnA7CisrCXVuc2lnbmVkIGludCBtbGVuLCBtMWxlbiwgbTJsZW4sIG0z bGVuOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTZWVkTGVuID4gRVZQ X01BWF9NRF9TSVpFKQorKwkJbWxlbiA9IFNlZWRMZW47CisrCWVsc2UKKysJCW1sZW4gPSBFVlBf TUFYX01EX1NJWkU7CisrCisrCW0xID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCW0yID0gT1BF TlNTTF9tYWxsb2MobWxlbik7CisrCW0zID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCisrCWlm ICghbTEgfHwgIW0yIHx8ICFtMykKKysJCWdvdG8gbWNfZXJyb3I7CisrCisrCW0xbGVuID0gbTJs ZW4gPSBtM2xlbiA9IFNlZWRMZW47CisrCW1lbWNweShtMSwgU2VlZCwgU2VlZExlbik7CisrCW1l bWNweShtMiwgU2VlZCwgU2VlZExlbik7CisrCW1lbWNweShtMywgU2VlZCwgU2VlZExlbik7Cisr CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCWZvciAoaiA9IDA7IGogPCAxMDA7IGorKykKKysJ CXsKKysJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisrCQkJeworKwkJCUVWUF9EaWdlc3RJ bml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0xLCBt MWxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwgbTJsZW4pOworKwkJCUVWUF9E aWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKKysJCQlwID0gbTE7CisrCQkJbTEgPSBtMjsK KysJCQltMWxlbiA9IG0ybGVuOworKwkJCW0yID0gbTM7CisrCQkJbTJsZW4gPSBtM2xlbjsKKysJ CQltMyA9IHA7CisrCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG0zLCAmbTNsZW4pOworKwkJ CX0KKysJCWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7CisrCQlmcHV0cygiTUQgPSAi LCBvdXQpOworKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKyspCisrCQkJZnByaW50ZihvdXQs ICIlMDJ4IiwgbTNba10pOworKwkJZnB1dHMoIlxuXG4iLCBvdXQpOworKwkJbWVtY3B5KG0xLCBt MywgbTNsZW4pOworKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOworKwkJbTFsZW4gPSBtMmxlbiA9 IG0zbGVuOworKwkJfQorKworKwlyZXQgPSAxOworKworKwltY19lcnJvcjoKKysJaWYgKG0xKQor KwkJT1BFTlNTTF9mcmVlKG0xKTsKKysJaWYgKG0yKQorKwkJT1BFTlNTTF9mcmVlKG0yKTsKKysJ aWYgKG0zKQorKwkJT1BFTlNTTF9mcmVlKG0zKTsKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZj dHgpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCistLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAy LjU0MjM5MzcxNiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3V0bC5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTQyMzkzNzE2ICswMTAwCitAQCAtMCww ICsxLDM0MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworK3ZvaWQgZG9fcHJpbnRf ZXJyb3JzKHZvaWQpCisrCXsKKysJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7CisrCWludCBsaW5l LCBmbGFnczsKKysJdW5zaWduZWQgbG9uZyBsOworKwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vycm9y X2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIKKysJCQkJIjpm aWxlPSVzOmxpbmU9JWQ6JXNcbiIsCisrCQkJbCwgRVJSX0dFVF9MSUIobCksIEVSUl9HRVRfRlVO QyhsKSwgRVJSX0dFVF9SRUFTT04obCksCisrCQkJZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJfVFhU X1NUUklORyA/IGRhdGEgOiAiIik7CisrCQl9CisrCX0KKysKKytpbnQgaGV4MmJpbihjb25zdCBj aGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuMSwgbjI7Cisr ICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9MCxuMj0wIDsgaW5bbjFdICYm IGluW24xXSAhPSAnXG4nIDsgKQorKwl7IC8qIGZpcnN0IGJ5dGUgKi8KKysJaWYgKChpbltuMV0g Pj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwor KwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQorKwkgICAgY2gg PSBpbltuMSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGlu W24xXSA8PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOworKwllbHNlCisr CSAgICByZXR1cm4gLTE7CisrCWlmKCFpbltuMV0pCisrCSAgICB7CisrCSAgICBvdXRbbjIrK109 Y2g7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJb3V0W24yXSA9IGNoIDw8IDQ7CisrCS8qIHNl Y29uZCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQor KwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYm IChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKKysJZWxz ZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJICAgIGNoID0gaW5b bjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwlvdXRbbjIrK10g fD0gY2g7CisrCX0KKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisrdW5zaWduZWQgY2hhciAq aGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQorKwl7CisrCXVuc2lnbmVkIGNo YXIgKnA7CisrCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEpLzIpOworKwkqcGxl biA9IGhleDJiaW4oaW4sIHApOworKwlyZXR1cm4gcDsKKysJfQorKworK2ludCBkb19oZXgyYm4o QklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgKnA7Cisr CWxvbmcgcGxlbjsKKysJaW50IHIgPSAwOworKwlwID0gaGV4MmJpbl9tKGluLCAmcGxlbik7Cisr CWlmICghcCkKKysJCXJldHVybiAwOworKwlpZiAoISpwcikKKysJCSpwciA9IEJOX25ldygpOwor KwlpZiAoISpwcikKKysJCXJldHVybiAwOworKwlpZiAoQk5fYmluMmJuKHAsIHBsZW4sICpwcikp CisrCQlyID0gMTsKKysJT1BFTlNTTF9mcmVlKHApOworKwlyZXR1cm4gcjsKKysJfQorKworK2lu dCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsK KysJdW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwlpZiAo bGVuID09IDApCisrCQl7CisrCQlmcHV0cygiMDAiLCBvdXQpOworKwkJcmV0dXJuIDE7CisrCQl9 CisrCisrCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7CisrCWlmICghdG1wKQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisrCQlyZXR1cm4g MDsKKysJCX0KKysJQk5fYm4yYmluKGJuLCB0bXApOworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOworKwlPUEVOU1NMX2ZyZWUodG1w KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZG9fYm5fcHJpbnRfbmFtZShGSUxFICpvdXQs IGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IHI7CisrCWZwcmludGYo b3V0LCAiJXMgPSAiLCBuYW1lKTsKKysJciA9IGRvX2JuX3ByaW50KG91dCwgYm4pOworKwlpZiAo IXIpCisrCQlyZXR1cm4gMDsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0dXJuIDE7CisrCX0K KysKKytpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hhciAqbGluZWJ1 ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7 CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdvcmQgPSBsaW5lYnVmOworKwkv KiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KmtleXdvcmQpKQorKwkJa2V5d29yZCsrOworKworKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJ cCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAnPScgZXhpdCAqLworKwlp ZiAoIXApCisrCQlyZXR1cm4gMDsKKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUgdHJh aWxpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJ KnEtLSA9IDA7CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVtb3Zl IGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCXdo aWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAtLSA9 IDA7CisrCisrCSpwa3cgPSBrZXl3b3JkOworKwkqcHZhbCA9IHZhbHVlOworKwlyZXR1cm4gMTsK KysJfQorKworK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQorKyAgICB7CisrICAgIEJJ R05VTSAqcD1OVUxMOworKworKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQorKwlyZXR1cm4g TlVMTDsKKysKKysgICAgcmV0dXJuIHA7CisrICAgIH0KKysKKytpbnQgYmluMmhleChjb25zdCB1 bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjEs IG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7IG4x IDwgbGVuIDsgKytuMSkKKysJeworKwljaD1pbltuMV0gPj4gNDsKKysJaWYgKGNoIDw9IDB4MDkp CisrCSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRbbjIrK109Y2gtMTAr J2EnOworKwljaD1pbltuMV0gJiAweDBmOworKwlpZihjaCA8PSAweDA5KQorKwkgICAgb3V0W24y KytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKKysJfQorKyAg ICBvdXRbbjJdPSdcMCc7CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3ZvaWQgcHYoY29u c3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQorKyAgICB7Cisr ICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysKKysgICAgYmluMmhleCh2YWwsbGVuLG9idWYpOworKyAg ICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOworKyAgICB9CisrCisrLyogVG8gYXZvaWQg ZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2UganVzdCBjb252 ZXJ0CisrICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0uIEtleXdvcmQg bGluZXMgY29udmVydGVkIHRvIGZvcm0KKysgKiAia2V5d29yZCA9IHZhbHVlXG4iIG5vIG1hdHRl ciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcworKyAqIGp1c3QgaGF2 ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgorKyAqLworKworK2ludCB0aWR5 X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29y ZCwgKnZhbHVlLCAqcCwgKnE7CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdv cmQgPSBsaW5lYnVmOworKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJa2V5d29yZCsrOworKwkvKiBMb29rIGZv ciA9IHNpZ24gKi8KKysJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAn PScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCisrCWlmICghcCkKKysJCXsKKysJ CXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKwkJc3RyY3B5 KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCQlyZXR1 cm4gMTsKKysJCX0KKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJKnEtLSA9IDA7 CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVtb3ZlIGxlYWRpbmcg c3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFs dWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCXdoaWxlICgqcCA9 PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAtLSA9IDA7CisrCisr CXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIpOwor KwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKKysJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKKysK KysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBf Yml0c18gcmVhZCAqLworK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwgaW50IGxlbiwgdW5z aWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICBtZW1zZXQob3V0 LDAsbGVuKTsKKysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCisrCWlmKGluW25dID09ICcx JykKKysJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7CisrICAgIHJldHVybiBsZW47Cisr ICAgIH0KKysKKytpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixj aGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihuPTAgOyBuIDwgbGVu IDsgKytuKQorKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcwJzsK KysgICAgcmV0dXJuIG47CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKyt2b2lkIFByaW50VmFsdWUoY2hhciAqdGFnLCB1 bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCisreworKyNpZiBWRVJCT1NFCisrICBjaGFyIG9i dWZbMjA0OF07CisrICBpbnQgb2xlbjsKKysgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVm KTsKKysgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNlbmRpZgor K30KKysKKyt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBp bnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIw NDhdOworKyAgICBpbnQgb2xlbjsKKysKKysgICAgaWYoYml0bW9kZSkKKysJb2xlbj1iaW4yYmlu dCh2YWwsbGVuLG9idWYpOworKyAgICBlbHNlCisrCW9sZW49YmluMmhleCh2YWwsbGVuLG9idWYp OworKworKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK KysjaWYgVkVSQk9TRQorKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVm KTsKKysjZW5kaWYKKysgICAgfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDIz OTM3MTYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfYWVz X3NlbGZ0ZXN0LmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDIzOTM3MTYgKzAxMDAKK0BAIC0wLDAg KzEsMzU5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYyBjb25zdCBzdHJ1Y3QKKysgICAg eworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgcGxhaW50ZXh0WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0 WzE2XTsKKysgICAgfSB0ZXN0c1tdPQorKwl7CisrCXsKKysJeyAweDAwLDB4MDEsMHgwMiwweDAz LDB4MDQsMHgwNSwweDA2LDB4MDcsCisrCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQs MHgwRSwweDBGIH0sCisrCXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3 LAorKwkgIDB4ODgsMHg5OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAorKwl7IDB4 NjksMHhDNCwweEUwLDB4RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKKysJICAweEQ4LDB4Q0QsMHhC NywweDgwLDB4NzAsMHhCNCwweEM1LDB4NUEgfSwKKysJfSwKKysJfTsKKysKKytzdGF0aWMgaW50 IGNvcnJ1cHRfYWVzOworKworK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCisrICAgIHsKKysgICAg Y29ycnVwdF9hZXMgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzKCkKKysg ICAgeworKyAgICBpbnQgbjsKKysgICAgaW50IHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RY IGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAgZm9yKG49MCA7 IG4gPCAxIDsgKytuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysKKysJbWVtY3B5 KGtleSwgdGVzdHNbbl0ua2V5LCBzaXplb2Yoa2V5KSk7CisrCWlmIChjb3JydXB0X2FlcykKKysJ CWtleVswXSsrOworKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF9lY2Io KSwKKysJCQkJa2V5LCBOVUxMLAorKwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCisrCQkJCXRlc3Rz W25dLmNpcGhlcnRleHQsCisrCQkJCTE2KSA8PSAwKQorKwkJZ290byBlcnI7CisrCX0KKysgICAg cmV0ID0gMTsKKysgICAgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwor KyAgICBpZiAocmV0ID09IDApCisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF UyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKwor Ky8qIEFFUy1DQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0geworKwkweGNlLDB4YjAs MHgwOSwweGFlLDB4YTQsMHg0NSwweDQ0LDB4NTEsMHhmZSwweGFkLDB4ZjAsMHhlNiwKKysJMHhi MywweDZmLDB4NDUsMHg1NSwweDVkLDB4ZDAsMHg0NywweDIzLDB4YmEsMHhhNCwweDQ4LDB4ZTgK Kyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtdID0geworKwkweDc2 LDB4NDAsMHg0MywweGM0LDB4OTQsMHg2MCwweGI3CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBjY21fYWRhdGFbXSA9IHsKKysJMHg2ZSwweDgwLDB4ZGQsMHg3ZiwweDFiLDB4YWQs MHhmMywweGExLDB4YzksMHhhYiwweDI1LDB4YzcsCisrCTB4NWYsMHgxMCwweGJkLDB4ZTcsMHg4 YywweDIzLDB4ZmEsMHgwZSwweGI4LDB4ZjksMHhhYSwweGE1LAorKwkweDNhLDB4ZGUsMHhmYiww eGY0LDB4Y2IsMHhmNywweDhmLDB4ZTQKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGNjbV9wdFtdID0geworKwkweGM4LDB4ZDIsMHg3NSwweGY5LDB4MTksMHhlMSwweDdkLDB4N2Ys MHhlNiwweDljLDB4MmEsMHgxZiwKKysJMHg1OCwweDkzLDB4OWQsMHhmZSwweDRkLDB4NDAsMHgz NywweDkxLDB4YjUsMHhkZiwweDEzLDB4MTAKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGNjbV9jdFtdID0geworKwkweDhhLDB4MGYsMHgzZCwweDgyLDB4MjksMHhlNCwweDhlLDB4 NzQsMHg4NywweGZkLDB4OTUsMHhhMiwKKysJMHg4YSwweGQzLDB4OTIsMHhjOCwweDBiLDB4MzYs MHg4MSwweGQ0LDB4ZmIsMHhjNywweGJiLDB4ZmQKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGNjbV90YWdbXSA9IHsKKysJMHgyZCwweGQ2LDB4ZWYsMHgxYywweDQ1LDB4ZDQsMHhj YywweGI3LDB4MjMsMHhkYywweDA3LDB4NDQsCisrCTB4MTQsMHhkYiwweDUwLDB4NmQKKyt9Owor KworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsK KysJdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4 OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yo b3V0KSk7CisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5V TEwsIE5VTEwsIDEpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgm Y3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5V TEwpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBf Q1RSTF9DQ01fU0VUX1RBRywKKysJCQkJCXNpemVvZihjY21fdGFnKSwgTlVMTCkpCisrCQlnb3Rv IGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21fa2V5LCBjY21fbm9u Y2UsIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEws IHNpemVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlpZiAo RVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDAp CisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fcHQsIHNpemVv ZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUVW UF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQor KwkJZ290byBlcnI7CisrCWlmIChtZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykp CisrCQl8fCBtZW1jbXAob3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKKysJCWdvdG8gZXJy OworKworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrCWlmICghRVZQX0NpcGhl ckluaXQoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIDApKQorKwkJZ290byBl cnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lW TEVOLAorKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKwkJZ290byBlcnI7CisrCWlm ICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRh ZykpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21f a2V5LCBjY21fbm9uY2UsIDApKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgs IE5VTEwsIE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysJCWdvdG8g ZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21f YWRhdGEpKSA8IDApCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBj Y21fY3QsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysJCWdvdG8gZXJyOwor KworKwlpZiAobWVtY21wKG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkpCisrCQlnb3RvIGVy cjsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOworKworKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX0FFU19DQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJ CX0KKysJZWxzZQorKwkJcmV0dXJuIHJldDsKKysKKysJfQorKworKy8qIEFFUy1HQ00gdGVzdCBk YXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgZ2NtX2tleVtdID0geworKwkweGVlLDB4YmMsMHgxZiwweDU3LDB4NDgsMHg3 ZiwweDUxLDB4OTIsMHgxYywweDA0LDB4NjUsMHg2NiwKKysJMHg1ZiwweDhhLDB4ZTYsMHhkMSww eDY1LDB4OGIsMHhiMiwweDZkLDB4ZTYsMHhmOCwweGEwLDB4NjksCisrCTB4YTMsMHg1MiwweDAy LDB4OTMsMHhhNSwweDcyLDB4MDcsMHg4ZgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZ2NtX2l2W10gPSB7CisrCTB4OTksMHhhYSwweDNlLDB4NjgsMHhlZCwweDgxLDB4NzMsMHhh MCwweGVlLDB4ZDAsMHg2NiwweDg0CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBn Y21fcHRbXSA9IHsKKysJMHhmNSwweDZlLDB4ODcsMHgwNSwweDViLDB4YzMsMHgyZCwweDBlLDB4 ZWIsMHgzMSwweGIyLDB4ZWEsCisrCTB4Y2MsMHgyYiwweGYyLDB4YTUKKyt9OworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGdjbV9hYWRbXSA9IHsKKysJMHg0ZCwweDIzLDB4YzMsMHhjZSww eGMzLDB4MzQsMHhiNCwweDliLDB4ZGIsMHgzNywweDBjLDB4NDMsCisrCTB4N2YsMHhlYywweDc4 LDB4ZGUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9jdFtdID0geworKwkw eGY3LDB4MjYsMHg0NCwweDEzLDB4YTgsMHg0YywweDBlLDB4N2MsMHhkNSwweDM2LDB4ODYsMHg3 ZSwKKysJMHhiOSwweGYyLDB4MTcsMHgzNgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZ2NtX3RhZ1tdID0geworKwkweDY3LDB4YmEsMHgwNSwweDEwLDB4MjYsMHgyYSwweGU0LDB4 ODcsMHhkNywweDM3LDB4ZWUsMHg2MiwKKysJMHg5OCwweGY3LDB4N2UsMHgwYworK307CisrCisr aW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1 bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Cisr CUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQp KTsKKysJbWVtc2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOworKwlpZiAoIUVWUF9DaXBoZXJJbml0 KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCAxKSkKKysJCWdvdG8gZXJyOwor KwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwK KysJCQkJCXNpemVvZihnY21faXYpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9D aXBoZXJJbml0KCZjdHgsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMSkpCisrCQlnb3RvIGVycjsK KysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8 IDApCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNp emVvZihnY21fcHQpKSAhPSBzaXplb2YoZ2NtX2N0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCisrCQlnb3RvIGVycjsKKysKKysJaWYg KCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFn KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1l bWNtcChvdXQsIGdjbV9jdCwgMTYpKQorKwkJZ290byBlcnI7CisrCisrCW1lbXNldChvdXQsIDAs IHNpemVvZihvdXQpKTsKKysKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzI1 Nl9nY20oKSwgTlVMTCwgTlVMTCwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVS X0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoZ2Nt X2l2KSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZj dHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKwlpZiAo IUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkpCisrCQlnb3Rv IGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9h YWQpKSA8IDApCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21f Y3QsIHNpemVvZihnY21fY3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlp ZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCisrCQlnb3RvIGVycjsKKysK KysJaWYgKG1lbWNtcChvdXQsIGdjbV9wdCwgMTYpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9 IDE7CisrCisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYg KHJldCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NN LEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWVsc2UKKysJ CXJldHVybiByZXQ7CisrCisrCX0KKysKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBY VFNfMTI4X2tleVtdID0geworKwkweGExLDB4YjksMHgwYywweGJhLDB4M2YsMHgwNiwweGFjLDB4 MzUsMHgzYiwweDJjLDB4MzQsMHgzOCwKKysJMHg3NiwweDA4LDB4MTcsMHg2MiwweDA5LDB4MDks MHgyMywweDAyLDB4NmUsMHg5MSwweDc3LDB4MTgsCisrCTB4MTUsMHhmMiwweDlkLDB4YWIsMHgw MSwweDkzLDB4MmYsMHgyZgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEy OF9pW10gPSB7CisrCTB4NGYsMHhhZSwweGY3LDB4MTEsMHg3YywweGRhLDB4NTksMHhjNiwweDZl LDB4NGIsMHg5MiwweDAxLAorKwkweDNlLDB4NzYsMHg4YSwweGQ1CisrfTsKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X3B0W10gPSB7CisrCTB4ZWIsMHhhYiwweGNlLDB4OTUs MHhiMSwweDRkLDB4M2MsMHg4ZCwweDZmLDB4YjMsMHg1MCwweDM5LAorKwkweDA3LDB4OTAsMHgz MSwweDFjCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2N0W10gPSB7 CisrCTB4NzcsMHg4YSwweGU4LDB4YjQsMHgzYywweGI5LDB4OGQsMHg1YSwweDgyLDB4NTAsMHg4 MSwweGQ1LAorKwkweGJlLDB4NDcsMHgxYywweDYzCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBYVFNfMjU2X2tleVtdID0geworKwkweDFlLDB4YTYsMHg2MSwweGM1LDB4OGQs MHg5NCwweDNhLDB4MGUsMHg0OCwweDAxLDB4ZTQsMHgyZiwKKysJMHg0YiwweDA5LDB4NDcsMHgx NCwweDllLDB4N2YsMHg5ZiwweDhlLDB4M2UsMHg2OCwweGQwLDB4YzcsCisrCTB4NTAsMHg1Miww eDEwLDB4YmQsMHgzMSwweDFhLDB4MGUsMHg3YywweGQ2LDB4ZTEsMHgzZiwweGZkLAorKwkweGYy LDB4NDEsMHg4ZCwweDhkLDB4MTksMHgxMSwweGMwLDB4MDQsMHhjZCwweGE1LDB4OGQsMHhhMywK KysJMHhkNiwweDE5LDB4YjcsMHhlMiwweGI5LDB4MTQsMHgxZSwweDU4LDB4MzEsMHg4ZSwweGVh LDB4MzksCisrCTB4MmMsMHhmNCwweDFiLDB4MDgKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIFhUU18yNTZfaVtdID0geworKwkweGFkLDB4ZjgsMHhkOSwweDI2LDB4MjcsMHg0Niww eDRhLDB4ZDIsMHhmMCwweDQyLDB4OGUsMHg4NCwKKysJMHhhOSwweGY4LDB4NzUsMHg2NAorK307 Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0geworKwkweDJlLDB4 ZWQsMHhlYSwweDUyLDB4Y2QsMHg4MiwweDE1LDB4ZTEsMHhhYywweGM2LDB4NDcsMHhlOCwKKysJ MHgxMCwweGJiLDB4YzMsMHg2NCwweDJlLDB4ODcsMHgyOCwweDdmLDB4OGQsMHgyZSwweDU3LDB4 ZTMsCisrCTB4NmMsMHgwYSwweDI0LDB4ZmIsMHhjMSwweDJhLDB4MjAsMHgyZQorK307Cisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9jdFtdID0geworKwkweGNiLDB4YWEsMHhk MCwweGUyLDB4ZjYsMHhjZSwweGEzLDB4ZjUsMHgwYiwweDM3LDB4ZjksMHgzNCwKKysJMHhkNCww eDZhLDB4OWIsMHgxMywweDBiLDB4OWQsMHg1NCwweGYwLDB4N2UsMHgzNCwweGYzLDB4NmEsCisr CTB4ZjcsMHg5MywweGU4LDB4NmYsMHg3MywweGM2LDB4ZDcsMHhkYgorK307CisrCisraW50IEZJ UFNfc2VsZnRlc3RfYWVzX3h0cygpCisrCXsKKysJaW50IHJldCA9IDE7CisrCUVWUF9DSVBIRVJf Q1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKGZpcHNfY2lw aGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfeHRzKCksCisrCQkJCVhUU18xMjhfa2V5LCBYVFNf MTI4X2ksIFhUU18xMjhfcHQsIFhUU18xMjhfY3QsCisrCQkJCXNpemVvZihYVFNfMTI4X3B0KSkg PD0gMCkKKysJCXJldCA9IDA7CisrCisrCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9h ZXNfMjU2X3h0cygpLAorKwkJCQlYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBY VFNfMjU2X2N0LAorKwkJCQlzaXplb2YoWFRTXzI1Nl9wdCkpIDw9IDApCisrCQlyZXQgPSAwOwor KworKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlpZiAocmV0ID09IDApCisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMsRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZmlwcy9maXBzLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHMu Yy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQzMzkzNzI0ICswMTAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDMzOTM3 MjQgKzAxMDAKK0BAIC0wLDAgKzEsNDg5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisr CisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8ZGxmY24uaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysj aW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrI2lmbmRlZiBQ QVRIX01BWAorKyNkZWZpbmUgUEFUSF9NQVggMTAyNAorKyNlbmRpZgorKworK3N0YXRpYyBpbnQg Zmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKytzdGF0aWMgaW50IGZpcHNfbW9kZSA9IDA7Cisrc3Rh dGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworKworK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdf dGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsK KytzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsKKysKKysjZGVmaW5l IGZpcHNfd19sb2NrKCkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTKQorKyNkZWZpbmUg Zmlwc193X3VubG9jaygpCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTKQorKyNkZWZp bmUgZmlwc19yX2xvY2soKQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpCisrI2RlZmlu ZSBmaXBzX3JfdW5sb2NrKCkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpCisrCisr c3RhdGljIHZvaWQgZmlwc19zZXRfbW9kZShpbnQgb25vZmYpCisrCXsKKysJaW50IG93bmluZ190 aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkK KysJCXsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKKysJCWZpcHNfbW9k ZSA9IG9ub2ZmOworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7CisrCQl9 CisrCX0KKysKKytpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKQorKwl7CisrCWludCByZXQgPSAw OworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlp ZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9j aygpOworKwkJcmV0ID0gZmlwc19tb2RlOworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3Jf dW5sb2NrKCk7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVz dF9mYWlsZWQodm9pZCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgaWYgKGZpcHNf c3RhcnRlZCkKKysJeworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVh ZCgpOworKworKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCXJldCA9IGZp cHNfc2VsZnRlc3RfZmFpbDsKKysJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7 CisrCX0KKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKworKy8qIFNlbGZ0ZXN0IGZhaWx1cmUg ZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCisrICogZHVyaW5nICphbnkq IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0KKysgKiBvdmVyaGVh ZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0LgorKyAqLworKwor K3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQorKyAgICB7CisrICAgIGlmIChmaXBzX3Nl bGZ0ZXN0X2ZhaWwpCisrCXsKKysJT3BlblNTTERpZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFM IEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOworKwl9CisrICAgIH0KKysKKyt2b2lkIGZpcHNfc2V0 X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKKysgICAgeworKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAx OworKyAgICB9CisrCisrLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNrIGRvZXMgb3Vy c2VsdmVzICovCisrCisrc3RhdGljIGludAorK2dldF9saWJyYXJ5X3BhdGgoY29uc3QgY2hhciAq bGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhs ZW4pCisreworKwlEbF9pbmZvIGluZm87CisrCXZvaWQgKmRsLCAqc3ltOworKwlpbnQgcnYgPSAt MTsKKysKKysgICAgICAgIGRsID0gZGxvcGVuKGxpYm5hbWUsIFJUTERfTEFaWSk7CisrICAgICAg ICBpZiAoZGwgPT0gTlVMTCkgeworKwkgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0gICAg ICAgCisrCisrCXN5bSA9IGRsc3ltKGRsLCBzeW1ib2xuYW1lKTsKKysKKysJaWYgKHN5bSAhPSBO VUxMICYmIGRsYWRkcihzeW0sICZpbmZvKSkgeworKwkJc3RybmNweShwYXRoLCBpbmZvLmRsaV9m bmFtZSwgcGF0aGxlbi0xKTsKKysJCXBhdGhbcGF0aGxlbi0xXSA9ICdcMCc7CisrCQlydiA9IDA7 CisrCX0KKysKKysJZGxjbG9zZShkbCk7CQorKwkKKysJcmV0dXJuIHJ2OworK30KKysKKytzdGF0 aWMgY29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisrCisrc3RhdGljIGNo YXIgKgorK2JpbjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQorK3sKKysJY2hhciAqaGV4LCAq cDsKKysJdW5zaWduZWQgY2hhciAqc3JjID0gYnVmOworKwkKKysJaGV4ID0gbWFsbG9jKGxlbiAq IDIgKyAxKTsKKysJaWYgKGhleCA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCXAgPSBo ZXg7CisrCisrCXdoaWxlIChsZW4gPiAwKSB7CisrCQl1bnNpZ25lZCBjOworKworKwkJYyA9ICpz cmM7CisrCQlzcmMrKzsKKysKKysJCSpwID0gY29udltjID4+IDRdOworKwkJKytwOworKwkJKnAg PSBjb252W2MgJiAweDBmXTsKKysJCSsrcDsKKysJCS0tbGVuOworKwl9CisrCSpwID0gJ1wwJzsK KysJcmV0dXJuIGhleDsKKyt9CisrCisrI2RlZmluZSBITUFDX1BSRUZJWCAiLiIgCisrI2RlZmlu ZSBITUFDX1NVRkZJWCAiLmhtYWMiIAorKyNkZWZpbmUgUkVBRF9CVUZGRVJfTEVOR1RIIDE2Mzg0 CisrCisrc3RhdGljIGNoYXIgKgorK21ha2VfaG1hY19wYXRoKGNvbnN0IGNoYXIgKm9yaWdwYXRo KQorK3sKKysJY2hhciAqcGF0aCwgKnA7CisrCWNvbnN0IGNoYXIgKmZuOworKworKwlwYXRoID0g bWFsbG9jKHNpemVvZihITUFDX1BSRUZJWCkgKyBzaXplb2YoSE1BQ19TVUZGSVgpICsgc3RybGVu KG9yaWdwYXRoKSk7CisrCWlmKHBhdGggPT0gTlVMTCkgeworKwkJcmV0dXJuIE5VTEw7CisrCX0K KysKKysJZm4gPSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOworKwlpZiAoZm4gPT0gTlVMTCkgewor KwkJZm4gPSBvcmlncGF0aDsKKysJfSBlbHNlIHsKKysJCSsrZm47CisrCX0KKysKKysJc3RybmNw eShwYXRoLCBvcmlncGF0aCwgZm4tb3JpZ3BhdGgpOworKwlwID0gcGF0aCArIChmbiAtIG9yaWdw YXRoKTsKKysJcCA9IHN0cGNweShwLCBITUFDX1BSRUZJWCk7CisrCXAgPSBzdHBjcHkocCwgZm4p OworKwlwID0gc3RwY3B5KHAsIEhNQUNfU1VGRklYKTsKKysKKysJcmV0dXJuIHBhdGg7CisrfQor KworK3N0YXRpYyBjb25zdCBjaGFyIGhtYWNrZXlbXSA9ICJvcmJvRGVKSVRJVGVqc2lycEFET05p dmlycFVrdmFyUCI7CisrCisrc3RhdGljIGludAorK2NvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNo YXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKKyt7CisrCUZJTEUgKmYgPSBO VUxMOworKwlpbnQgcnYgPSAtMTsKKysJdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xF TkdUSF07CisrCXNpemVfdCBsZW47CisrCXVuc2lnbmVkIGludCBobGVuOworKwlITUFDX0NUWCBj OworKworKwlITUFDX0NUWF9pbml0KCZjKTsKKysKKysJZiA9IGZvcGVuKHBhdGgsICJyIik7Cisr CisrCWlmIChmID09IE5VTEwpIHsKKysJCWdvdG8gZW5kOworKwl9CisrCisrCUhNQUNfSW5pdCgm YywgaG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpLTEsIEVWUF9zaGEyNTYoKSk7CisrCisrCXdoaWxl ICgobGVuPWZyZWFkKHJidWYsIDEsIHNpemVvZihyYnVmKSwgZikpICE9IDApIHsKKysJCUhNQUNf VXBkYXRlKCZjLCByYnVmLCBsZW4pOworKwl9CisrCisrCWxlbiA9IHNpemVvZihyYnVmKTsKKysJ LyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLworKwlITUFDX0ZpbmFsKCZjLCByYnVmLCAmaGxlbik7 CisrCisrCSpidWYgPSBtYWxsb2MoaGxlbik7CisrCWlmICgqYnVmID09IE5VTEwpIHsKKysJCWdv dG8gZW5kOworKwl9CisrCisrCSpobWFjbGVuID0gaGxlbjsKKysKKysJbWVtY3B5KCpidWYsIHJi dWYsIGhsZW4pOworKworKwlydiA9IDA7CisrZW5kOgorKwlITUFDX0NUWF9jbGVhbnVwKCZjKTsK KysKKysJaWYgKGYpCisrCQlmY2xvc2UoZik7CisrCisrCXJldHVybiBydjsKKyt9CisrCisrc3Rh dGljIGludAorK0ZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hh ciAqc3ltYm9sbmFtZSkKKyt7CisrCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsKKysJaW50IHJ2Owor KwlGSUxFICpoZjsKKysJY2hhciAqaG1hY3BhdGgsICpwOworKwljaGFyICpobWFjID0gTlVMTDsK KysJc2l6ZV90IG47CisrCQorKwlydiA9IGdldF9saWJyYXJ5X3BhdGgobGlibmFtZSwgc3ltYm9s bmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKKysKKysJaWYgKHJ2IDwgMCkKKysJCXJldHVybiAw OworKworKwlobWFjcGF0aCA9IG1ha2VfaG1hY19wYXRoKHBhdGgpOworKwlpZiAoaG1hY3BhdGgg PT0gTlVMTCkKKysJCXJldHVybiAwOworKworKwloZiA9IGZvcGVuKGhtYWNwYXRoLCAiciIpOwor KwlpZiAoaGYgPT0gTlVMTCkgeworKwkJZnJlZShobWFjcGF0aCk7CisrCQlyZXR1cm4gMDsKKysJ fQorKworKwlpZiAoZ2V0bGluZSgmaG1hYywgJm4sIGhmKSA+IDApIHsKKysJCXZvaWQgKmJ1ZjsK KysJCXNpemVfdCBobWFjbGVuOworKwkJY2hhciAqaGV4OworKworKwkJaWYgKChwPXN0cmNociho bWFjLCAnXG4nKSkgIT0gTlVMTCkKKysJCQkqcCA9ICdcMCc7CisrCisrCQlpZiAoY29tcHV0ZV9m aWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgeworKwkJCXJ2ID0gLTQ7CisrCQkJ Z290byBlbmQ7CisrCQl9CisrCisrCQlpZiAoKGhleD1iaW4yaGV4KGJ1ZiwgaG1hY2xlbikpID09 IE5VTEwpIHsKKysJCQlmcmVlKGJ1Zik7CisrCQkJcnYgPSAtNTsKKysJCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJCWlmIChzdHJjbXAoaGV4LCBobWFjKSAhPSAwKSB7CisrCQkJcnYgPSAtMTsKKysJ CX0KKysJCWZyZWUoYnVmKTsKKysJCWZyZWUoaGV4KTsKKysJfQorKworK2VuZDoKKysJZnJlZSho bWFjKTsKKysJZnJlZShobWFjcGF0aCk7CisrCWZjbG9zZShoZik7CisrCisrCWlmIChydiA8IDAp CisrCQlyZXR1cm4gMDsKKysKKysJLyogY2hlY2sgc3VjY2Vzc2Z1bCAqLworKwlyZXR1cm4gMTsJ CisrfQorKworK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIg KmF1dGgpCisrICAgIHsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGZpcHNfd19sb2NrKCk7 CisrICAgIGZpcHNfc3RhcnRlZCA9IDE7CisrICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsK KysKKysgICAgaWYob25vZmYpCisrCXsKKysKKysJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysK KysJLyogRG9uJ3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1 dG9tYWdpYworKwkgICBzZWVkaW5nICovCisrCWlmKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJICAg IHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSVBT X01PREVfQUxSRUFEWV9TRVQpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAg IHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysjaWZkZWYgT1BFTlNTTF9J QTMyX1NTRTIKKysJeworKwlleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzJd OworKwlpZiAoKE9QRU5TU0xfaWEzMmNhcF9QWzBdICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1 fDE8PDI2KSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVf U0VULEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKwlPUEVO U1NMX2lhMzJjYXBfUFswXSB8PSAoMTw8MjgpOwkvKiBzZXQgInNoYXJlZCBjYWNoZSIJKi8KKysJ T1BFTlNTTF9pYTMyY2FwX1BbMV0gJj0gfigxPDwoNjAtMzIpKTsJLyogY2xlYXIgQVZYCQkqLwor Kwl9CisrI2VuZGlmCisrCisrCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJjcnlwdG8uc28uIiBT SExJQl9WRVJTSU9OX05VTUJFUiwiRklQU19tb2RlX3NldCIpKQorKwkgICAgeworKwkgICAgRklQ U2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNf Tk9UX01BVENIKTsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAw OworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJs aWJzc2wuc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwiU1NMX0NUWF9uZXciKSkKKysJICAgIHsK KysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSU5HRVJQ UklOVF9ET0VTX05PVF9NQVRDSCk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkg ICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0 ZXN0KCkpCisrCSAgICBmaXBzX3NldF9tb2RlKG9ub2ZmKTsKKysJZWxzZQorKwkgICAgeworKwkg ICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVu ZDsKKysJICAgIH0KKysJcmV0ID0gMTsKKysJZ290byBlbmQ7CisrCX0KKysgICAgZmlwc19zZXRf bW9kZSgwKTsKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysgICAgcmV0ID0gMTsKKytl bmQ6CisrICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOworKyAgICBmaXBzX3dfdW5sb2Nr KCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKytzdGF0aWMgQ1JZUFRPX1RIUkVBRElE IGZpcHNfdGhyZWFkOworK3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKKysKKytzdGF0 aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOwor KworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9D S19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWRfc2V0KQorKwkJCXsKKysJCQlDUllQVE9fVEhS RUFESUQgY3VyOworKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOworKwkJCWlmICgh Q1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQorKwkJCQlyZXQgPSAxOwor KwkJCX0KKysJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJl dHVybiByZXQ7CisrCX0KKysKKytpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7 CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRP X3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoIWZpcHNfdGhyZWFkX3NldCkKKysJ CQl7CisrCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFkKTsKKysJCQlyZXQg PSAxOworKwkJCWZpcHNfdGhyZWFkX3NldCA9IDE7CisrCQkJfQorKwkJQ1JZUFRPX3dfdW5sb2Nr KENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBm aXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJ aWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQ UzIpOworKwkJaWYgKGZpcHNfdGhyZWFkX3NldCkKKysJCQl7CisrCQkJQ1JZUFRPX1RIUkVBRElE IGN1cjsKKysJCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKKysJCQlpZiAoIUNSWVBU T19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKKysJCQkJZmlwc190aHJlYWRfc2V0 ID0gMDsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJ fQorKwlyZXR1cm4gcmV0OworKwl9CisrCisrCisrI2lmIDAKKysvKiBUaGUgcHVycG9zZSBvZiB0 aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgor KyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0CisrICov Cisrdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCisrCXsKKysJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5B TCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJfQorKyNlbmRpZgorKworKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0 ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxm dGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDMzOTM3MjQgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCTIwMTItMDIt MDcgMTE6MTE6MDUuNzAxNDE3NTUwICswMTAwCitAQCAtMCwwICsxLDE2MSBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvY21hYy5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrdHlwZWRlZiBzdHJ1Y3QgeworKwlpbnQgbmlkOworKwljb25zdCB1bnNpZ25lZCBjaGFy IGtleVtFVlBfTUFYX0tFWV9MRU5HVEhdOyBzaXplX3Qga2V5c2l6ZTsKKysJY29uc3QgdW5zaWdu ZWQgY2hhciBtc2dbNjRdOyBzaXplX3QgbXNnc2l6ZTsKKysJY29uc3QgdW5zaWduZWQgY2hhciBt YWNbMzJdOyBzaXplX3QgbWFjc2l6ZTsKKyt9IENNQUNfS0FUOworKworKy8qIGZyb20gaHR0cDov L2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOEIvU1BfODAwLTM4Qi5w ZGYgKi8KKytzdGF0aWMgY29uc3QgQ01BQ19LQVQgdmVjdG9yW10gPSB7CisrICAgIHsJTklEX2Fl c18xMjhfY2JjLAkvKiBDb3VudCA9IDMyIGZyb20gQ01BQ0dlbkFFUzEyOC50eHQgKi8KKysJeyAw eDc3LDB4YTcsMHg3ZiwweGFmLCAweDI5LDB4MGMsMHgxZiwweGEzLAorKwkgIDB4MGMsMHg2OCww eDNkLDB4ZjEsIDB4NmIsMHhhNywweGE3LDB4N2IsIH0sIDEyOCwKKysJeyAweDAyLDB4MDYsMHg4 MywweGUxLCAweGYwLDB4MzksMHgyZiwweDRjLAorKwkgIDB4YWMsMHg1NCwweDMxLDB4OGIsIDB4 NjAsMHgyOSwweDI1LDB4OWUsCisrCSAgMHg5YywweDU1LDB4M2QsMHhiYywgMHg0YiwweDZhLDB4 ZDksMHg5OCwKKysJICAweGU2LDB4NGQsMHg1OCwweGU0LCAweGU3LDB4ZGMsMHgyZSwweDEzLCB9 LCAyNTYsCisrCXsgMHhmYiwweGZlLDB4YTQsMHgxYiwgfSwgMzIKKysgICAgfSwKKysgICAgewlO SURfYWVzXzE5Ml9jYmMsCS8qIENvdW50ID0gMjMgZnJvbSBDTUFDR2VuQUVTMTkyLnR4dCAqLwor Kwl7IDB4N2IsMHgzMiwweDM5LDB4MTMsIDB4NjksMHhhYSwweDRjLDB4YTksCisrCSAgMHg3NSww eDU4LDB4MDksMHg1YiwgMHhlMywweGMzLDB4ZWMsMHg4NiwKKysJICAweDJiLDB4ZDAsMHg1Nyww eGNlLCAweGYxLDB4ZTMsMHgyZCwweDYyLCB9LCAxOTIsCisrCXsgMHgwIH0sIDAsCisrCXsgMHhl NCwweGQ5LDB4MzQsMHgwYiwgMHgwMywweGU2LDB4N2QsMHhlZiwKKysJICAweGQ0LDB4OTYsMHg5 YywweGMxLCAweGVkLDB4MzcsMHgzNSwweGU2LCB9LCAxMjgsCisrICAgIH0sCisrICAgIHsJTklE X2Flc18yNTZfY2JjLAkvKiBDb3VudCA9IDMzIGZyb20gQ01BQ0dlbkFFUzI1Ni50eHQgKi8KKysJ eyAweDBiLDB4MTIsMHgyYSwweGM4LCAweGYzLDB4NGUsMHhkMSwweGZlLAorKwkgIDB4MDgsMHgy YSwweDM2LDB4MjUsIDB4ZDEsMHg1NywweDU2LDB4MTQsCisrCSAgMHg1NCwweDE2LDB4N2EsMHhj MSwgMHg0NSwweGExLDB4MGIsMHhiZiwKKysJICAweDc3LDB4YzYsMHhhNywweDA1LCAweDk2LDB4 ZDUsMHg3NCwweGYxLCB9LCAyNTYsCisrCXsgMHg0OSwweDhiLDB4NTMsMHhmZCwgMHhlYywweDg3 LDB4ZWQsMHhjYiwKKysJICAweGYwLDB4NzAsMHg5NywweGRjLCAweGNkLDB4ZTksMHgzYSwweDA4 LAorKwkgIDB4NGIsMHhhZCwweDc1LDB4MDEsIDB4YTIsMHgyNCwweGUzLDB4ODgsCisrCSAgMHhk ZiwweDM0LDB4OWMsMHhlMSwgMHg4OSwweDU5LDB4ZmUsMHg4NCwKKysJICAweDg1LDB4ZjgsMHhh ZCwweDE1LCAweDM3LDB4ZjAsMHhkOCwweDk2LAorKwkgIDB4ZWEsMHg3MywweGJlLDB4ZGMsIDB4 NzIsMHgxNCwweDcxLDB4M2YsIH0sIDM4NCwKKysJeyAweGY2LDB4MmMsMHg0NiwweDMyLCAweDli LCB9LCA0MCwKKysgICAgfSwKKysgICAgewlOSURfZGVzX2VkZTNfY2JjLAkvKiBDb3VudCA9IDQx IGZyb20gQ01BQ0dlblRERVMzLnJlcSAqLworKwl7IDB4ODksMHhiYywweGQ5LDB4NTIsIDB4YTgs MHhjOCwweGFiLDB4MzcsCisrCSAgMHgxYSwweGY0LDB4OGEsMHhjNywgMHhkMCwweDcwLDB4ODUs MHhkNSwKKysJICAweGVmLDB4ZjcsMHgwMiwweGU2LCAweGQ2LDB4MmMsMHhkYywweDIzLCB9LCAx OTIsCisrCXsgMHhmYSwweDYyLDB4MGMsMHgxYiwgMHhiZSwweDk3LDB4MzEsMHg5ZSwKKysJICAw eDlhLDB4MGMsMHhmMCwweDQ5LCAweDIxLDB4MjEsMHhmNywweGEyLAorKwkgIDB4MGUsMHhiMCww eDhhLDB4NmEsIDB4NzAsMHg5ZCwweGNiLDB4ZDAsCisrCSAgMHgwYSwweGFmLDB4MzgsMHhlNCwg MHhmOSwweDllLDB4NzUsMHg0ZSwgfSwgMjU2LAorKwl7IDB4OGYsMHg0OSwweGExLDB4YjcsIDB4 ZDYsMHhhYSwweDIyLDB4NTgsIH0sIDY0LAorKyAgICB9LAorK307CisrCisraW50IEZJUFNfc2Vs ZnRlc3RfY21hYygpCisrCXsKKysJc2l6ZV90IG4sIG91dGxlbjsKKysJdW5zaWduZWQgY2hhciAg ICBvdXRbMzJdOworKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXI7CisrCUNNQUNfQ1RYICpjdHgg PSBDTUFDX0NUWF9uZXcoKTsKKysJY29uc3QgQ01BQ19LQVQgKnQ7CisrCWludCBydiA9IDE7Cisr CisrCWZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7 IG4rKyx0KyspCisrCQl7CisrCQljaXBoZXIgPSBGSVBTX2dldF9jaXBoZXJieW5pZCh0LT5uaWQp OworKwkJaWYgKCFjaXBoZXIpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7Cisr CQkJfQorKwkJaWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQtPmtleXNpemUvOCwgY2lwaGVy LCAwKSkKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQlpZiAo IUNNQUNfVXBkYXRlKGN0eCwgdC0+bXNnLCB0LT5tc2dzaXplLzgpKQorKwkJCXsKKysJCQlydiA9 IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCQkKKysJCWlmICghQ01BQ19GaW5hbChjdHgs IG91dCwgJm91dGxlbikpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJ fQorKwkJQ01BQ19DVFhfY2xlYW51cChjdHgpOworKworKwkJaWYob3V0bGVuIDwgdC0+bWFjc2l6 ZS84IHx8IG1lbWNtcChvdXQsdC0+bWFjLHQtPm1hY3NpemUvOCkpCisrCQkJeworKwkJICAgIAly diA9IDA7CisrCQkgICAgCX0KKysJCX0KKysKKysJZXJyOgorKwlDTUFDX0NUWF9mcmVlKGN0eCk7 CisrCisrCWlmIChydiA9PSAtMSkKKysJCXsKKysJCXJ2ID0gMDsKKysJCX0KKysJaWYgKCFydikK KysJCSAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQyxGSVBTX1JfU0VMRlRFU1Rf RkFJTEVEKTsKKysKKysJcmV0dXJuIHJ2OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAy LTA3IDExOjA3OjAyLjU0MzM5MzcyNCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MzM5Mzcy NCArMDEwMAorQEAgLTAsMCArMSwxNDcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysK KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsK KysgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyIHBsYWludGV4dFs4XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0Wzhd OworKyAgICB9IHRlc3RzMltdPQorKwl7CisrCXsKKysJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4 YTIsMHgwNCwweDE2LDB4ZWMsCisrCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhh NywweGM0IH0sCisrCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0s CisrCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KKysJfSwKKysJ eworKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKKysJICAweDAx LDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKKysJeyAweDljLDB4NTAsMHgw OSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKKysJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4 ZDksMHgwZCwweDllLDB4ZmYgfSwKKysJfQorKwl9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QK KysgICAgeworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsyNF07CisrICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhl cnRleHRbOF07CisrICAgIH0gdGVzdHMzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYs MHg1NCwweDMyLDB4MTAsCisrCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSww eGYwIH0sCisrCXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCisr CXsgMHg1OSwweDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCisrCX0sCisrCXsK KysJeyAweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCisrCSAgMHgwMSww eDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAorKwkgIDB4RUQsMHgzOSwweEQ5LDB4 NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9LAorKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSww eEFCLDB4Q0QsMHhFRiB9LAorKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIs MHg4NiB9LAorKwl9LAorKwl9OworKworKworK3N0YXRpYyBpbnQgY29ycnVwdF9kZXM7CisrCisr dm9pZCBGSVBTX2NvcnJ1cHRfZGVzKCkKKysgICAgeworKyAgICBjb3JydXB0X2RlcyA9IDE7Cisr ICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9kZXMoKQorKyAgICB7CisrICAgIGludCBuLCBy ZXQgPSAwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2lu aXQoJmN0eCk7CisrICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNv bXBhcmUgdG8ga25vd24gYW5zd2VycyAqLworKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCisr CXsKKysJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisrCisrCW1lbWNweShwbGFpbnRleHQs IHRlc3RzMltuXS5wbGFpbnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsKKysJaWYgKGNvcnJ1cHRf ZGVzKQorKwkJcGxhaW50ZXh0WzBdKys7CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBF VlBfZGVzX2VkZV9lY2IoKSwKKysJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKKysJCQkJcGxhaW50 ZXh0LCB0ZXN0czJbbl0uY2lwaGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKworKyAg ICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dl cnMgKi8KKysgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQorKwl7CisrCWlmICghZmlwc19jaXBo ZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksCisrCQkJCXRlc3RzM1tuXS5rZXksIE5V TEwsCisrCQkJCXRlc3RzM1tuXS5wbGFpbnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkK KysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7CisrICAgIGVycjoKKysgICAgRVZQX0NJ UEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKwkgICAgRklQU2Vy cihGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCisr ICAgIHJldHVybiByZXQ7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQzMzkz NzI0ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RyYmdf Y3RyLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDMzOTM3MjQgKzAxMDAKK0BAIC0wLDAgKzEsNDM2 IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19jdHIuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAq IHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisr I2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKytzdGF0 aWMgdm9pZCBpbmNfMTI4KERSQkdfQ1RSX0NUWCAqY2N0eCkKKysJeworKwlpbnQgaTsKKysJdW5z aWduZWQgY2hhciBjOworKwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1OworKwlmb3Ig KGkgPSAwOyBpIDwgMTY7IGkrKykKKysJCXsKKysJCWMgPSAqcDsKKysJCWMrKzsKKysJCSpwID0g YzsKKysJCWlmIChjKQorKwkJCXJldHVybjsKKysJCXAtLTsKKysJCX0KKysJfQorKworK3N0YXRp YyB2b2lkIGN0cl9YT1IoRFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpp biwgc2l6ZV90IGlubGVuKQorKwl7CisrCXNpemVfdCBpLCBuOworKwkvKiBBbnkgemVybyBwYWRk aW5nIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQorKwkgKiBhcmUgWE9S aW5nLiBTbyBqdXN0IHByb2Nlc3MgaG93ZXZlciBtdWNoIGlucHV0IHdlIGhhdmUuCisrCSAqLwor KworKwlpZiAoIWluIHx8ICFpbmxlbikKKysJCXJldHVybjsKKysKKysJaWYgKGlubGVuIDwgY2N0 eC0+a2V5bGVuKQorKwkJbiA9IGlubGVuOworKwllbHNlCisrCQluID0gY2N0eC0+a2V5bGVuOwor KworKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorKwkJY2N0eC0+S1tpXSBePSBpbltpXTsKKysJ aWYgKGlubGVuIDw9IGNjdHgtPmtleWxlbikKKysJCXJldHVybjsKKysKKysJbiA9IGlubGVuIC0g Y2N0eC0+a2V5bGVuOworKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisrCWlmIChuID4gMTYp CisrCQluID0gMTY7CisrCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKwkJY2N0eC0+VltpXSBe PSBpbltpICsgY2N0eC0+a2V5bGVuXTsKKysJfQorKworKy8qIFByb2Nlc3MgYSBjb21wbGV0ZSBi bG9jayB1c2luZyBCQ0MgYWxnb3JpdGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4zICovCisrCisrc3Rh dGljIHZvaWQgY3RyX0JDQ19ibG9jayhEUkJHX0NUUl9DVFggKmNjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4pCisrCXsKKysJaW50IGk7CisrCWZv ciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKwkJb3V0W2ldIF49IGluW2ldOworKwlBRVNfZW5jcnlw dChvdXQsIG91dCwgJmNjdHgtPmRmX2tzKTsKKysjaWYgMAorK2ZwcmludGYoc3RkZXJyLCAiQkND IGluK291dFxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOworK0JJT19kdW1wX2Zw KHN0ZGVyciwgb3V0LCAxNik7CisrI2VuZGlmCisrCX0KKysKKysvKiBIYW5kbGUgc2V2ZXJhbCBC Q0Mgb3BlcmF0aW9ucyBmb3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9yIEsgYW5kIFggKi8K KytzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKmNjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmluKQorKwl7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGlu KTsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBpbik7CisrCWlmIChjY3R4 LT5rZXlsZW4gIT0gMTYpCisrCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGlu KTsKKysJfQorKy8qIEluaXRpYWxpc2UgQkNDIGJsb2NrczogdGhlc2UgaGF2ZSB0aGUgdmFsdWUg MCwxLDIgaW4gbGVmdG1vc3QgcG9zaXRpb25zOgorKyAqIHNlZSAxMC40LjIgc3RhZ2UgNy4KKysg Ki8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJCR19DVFJfQ1RYICpjY3R4KQorKwl7Cisr CW1lbXNldChjY3R4LT5LWCwgMCwgNDgpOworKwltZW1zZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsK KysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgY2N0eC0+Ymx0bXApOworKwljY3R4LT5i bHRtcFszXSA9IDE7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+ Ymx0bXApOworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJeworKwkJY2N0eC0+Ymx0bXBb M10gPSAyOworKwkJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBjY3R4LT5ibHRt cCk7CisrCQl9CisrCX0KKysKKysvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFs Z29yaXRobSwgc29tZSBwb3NzaWJseSBwYXJ0aWFsICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ191 cGRhdGUoRFJCR19DVFJfQ1RYICpjY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwg c2l6ZV90IGlubGVuKQorKwl7CisrCWlmICghaW4gfHwgIWlubGVuKQorKwkJcmV0dXJuOworKwkv KiBJZiB3ZSBoYXZlIHBhcnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0ICovCisrCWlmIChjY3R4 LT5ibHRtcF9wb3MpCisrCQl7CisrCQlzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9z OworKwkJLyogSWYgd2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNzIGl0ICovCisr CQlpZiAoaW5sZW4gPj0gbGVmdCkKKysJCQl7CisrCQkJbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0 eC0+Ymx0bXBfcG9zLCBpbiwgbGVmdCk7CisrCQkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+ Ymx0bXApOworKwkJCWNjdHgtPmJsdG1wX3BvcyA9IDA7CisrCQkJaW5sZW4gLT0gbGVmdDsKKysJ CQlpbiArPSBsZWZ0OworKwkJCX0KKysJCX0KKysJLyogUHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29t cGxldGUgYmxvY2tzICovCisrCXdoaWxlIChpbmxlbiA+PSAxNikKKysJCXsKKysJCWN0cl9CQ0Nf YmxvY2tzKGNjdHgsIGluKTsKKysJCWluICs9IDE2OworKwkJaW5sZW4gLT0gMTY7CisrCQl9Cisr CS8qIENvcHkgYW55IHJlbWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1wb3JhcnkgYnVm ZmVyICovCisrCWlmIChpbmxlbiA+IDApCisrCQl7CisrCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBj Y3R4LT5ibHRtcF9wb3MsIGluLCBpbmxlbik7CisrCQljY3R4LT5ibHRtcF9wb3MgKz0gaW5sZW47 CisrCQl9CisrCX0KKysKKytzdGF0aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAq Y2N0eCkKKysJeworKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQorKwkJeworKwkJbWVtc2V0KGNjdHgt PmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1wX3Bvcyk7CisrCQlj dHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7CisrCQl9CisrCX0KKysKKytzdGF0aWMg dm9pZCBjdHJfZGYoRFJCR19DVFJfQ1RYICpjY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVf dCBpbjJsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQor Kwl7CisrCXNpemVfdCBpbmxlbjsKKysJdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPmJsdG1wOwor KwlzdGF0aWMgdW5zaWduZWQgY2hhciBjODAgPSAweDgwOworKworKwljdHJfQkNDX2luaXQoY2N0 eCk7CisrCWlmICghaW4xKQorKwkJaW4xbGVuID0gMDsKKysJaWYgKCFpbjIpCisrCQlpbjJsZW4g PSAwOworKwlpZiAoIWluMykKKysJCWluM2xlbiA9IDA7CisrCWlubGVuID0gaW4xbGVuICsgaW4y bGVuICsgaW4zbGVuOworKwkvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICov CisrCSpwKysgPSAoaW5sZW4gPj4gMjQpICYgMHhmZjsKKysJKnArKyA9IChpbmxlbiA+PiAxNikg JiAweGZmOworKwkqcCsrID0gKGlubGVuID4+IDgpICYgMHhmZjsKKysJKnArKyA9IGlubGVuICYg MHhmZjsKKysJLyogTkIga2V5bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KKysJKnArKyA9IDA7 CisrCSpwKysgPSAwOworKwkqcCsrID0gMDsKKysJKnAgPSAodW5zaWduZWQgY2hhcikoKGNjdHgt PmtleWxlbiArIDE2KSAmIDB4ZmYpOworKwljY3R4LT5ibHRtcF9wb3MgPSA4OworKwljdHJfQkND X3VwZGF0ZShjY3R4LCBpbjEsIGluMWxlbik7CisrCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwg aW4ybGVuKTsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOworKwljdHJfQkND X3VwZGF0ZShjY3R4LCAmYzgwLCAxKTsKKysJY3RyX0JDQ19maW5hbChjY3R4KTsKKysJLyogU2V0 IHVwIGtleSBLICovCisrCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNjdHgtPmtleWxl biAqIDgsICZjY3R4LT5kZl9reGtzKTsKKysJLyogWCBmb2xsb3dzIGtleSBLICovCisrCUFFU19l bmNyeXB0KGNjdHgtPktYICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNjdHgtPmRmX2t4a3Mp OworKwlBRVNfZW5jcnlwdChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3Mp OworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAx NiwgY2N0eC0+S1ggKyAzMiwgJmNjdHgtPmRmX2t4a3MpOworKyNpZiAwCisrZnByaW50ZihzdGRl cnIsICJPdXRwdXQgb2YgY3RyX2RmOlxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5L WCwgY2N0eC0+a2V5bGVuICsgMTYpOworKyNlbmRpZgorKwl9CisrCisrLyogTkIgdGhlIG5vLWRm ICBVcGRhdGUgaW4gU1A4MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5wdXQgbGVuZ3RoCisr ICogb2Ygc2VlZGxlbiwgaG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxnb3JpdGhtIHBhZCB0 aGUgaW5wdXQgd2l0aAorKyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhhdmUgdXAgdG8gdHdv IHBhcmFtZXRlcnMgWE9SZWQgdG9nZXRoZXIsCisrICogaGFuZGxlIGJvdGggY2FzZXMgaW4gdGhp cyBmdW5jdGlvbiBpbnN0ZWFkLgorKyAqLworKworK3N0YXRpYyB2b2lkIGN0cl9VcGRhdGUoRFJC R19DVFggKmRjdHgsCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4s CisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrCQljb25zdCB1 bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuKQorKwl7CisrCURSQkdfQ1RSX0NU WCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysJLyoga3MgaXMgYWxyZWFkeSBzZXR1cCBmb3IgY29y cmVjdCBrZXkgKi8KKysJaW5jXzEyOChjY3R4KTsKKysJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0 eC0+SywgJmNjdHgtPmtzKTsKKysJLyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEyOCBiaXRzIG5l ZWQgZXh0cmEgZW5jcnlwdCAqLworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJeworKwkJ aW5jXzEyOChjY3R4KTsKKysJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNj dHgtPmtzKTsKKysJCX0KKysJaW5jXzEyOChjY3R4KTsKKysJQUVTX2VuY3J5cHQoY2N0eC0+Viwg Y2N0eC0+ViwgJmNjdHgtPmtzKTsKKysJLyogSWYgMTkyIGJpdCBrZXkgcGFydCBvZiBWIGlzIG9u IGVuZCBvZiBLICovCisrCWlmIChjY3R4LT5rZXlsZW4gPT0gMjQpCisrCQl7CisrCQltZW1jcHko Y2N0eC0+ViArIDgsIGNjdHgtPlYsIDgpOworKwkJbWVtY3B5KGNjdHgtPlYsIGNjdHgtPksgKyAy NCwgOCk7CisrCQl9CisrCisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9E RikKKysJCXsKKysJCS8qIElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5nIGRlcml2ZWQgdmFsdWUg Ki8KKysJCWlmIChpbjEgfHwgbm9uY2UgfHwgaW4yKQorKwkJCWN0cl9kZihjY3R4LCBpbjEsIGlu MWxlbiwgbm9uY2UsIG5vbmNlbGVuLCBpbjIsIGluMmxlbik7CisrCQkvKiBJZiB0aGlzIGEgcmV1 c2UgaW5wdXQgaW4xbGVuICE9IDAgKi8KKysJCWlmIChpbjFsZW4pCisrCQkJY3RyX1hPUihjY3R4 LCBjY3R4LT5LWCwgZGN0eC0+c2VlZGxlbik7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWN0cl9Y T1IoY2N0eCwgaW4xLCBpbjFsZW4pOworKwkJY3RyX1hPUihjY3R4LCBpbjIsIGluMmxlbik7Cisr CQl9CisrCisrCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZj Y3R4LT5rcyk7CisrI2lmIDAKKytmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciB1cGRhdGUgaXM6 XG4iKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxlbik7CisrQklP X2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5WLCAxNik7CisrI2VuZGlmCisrCX0KKysKKytzdGF0aWMg aW50IGRyYmdfY3RyX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpu b25jZSwgc2l6ZV90IG5vbmNlbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNp emVfdCBwZXJzbGVuKQorKwl7CisrCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsK KysJbWVtc2V0KGNjdHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7CisrCW1lbXNldChjY3R4LT5W LCAwLCBzaXplb2YoY2N0eC0+VikpOworKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRj dHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVu LCBwZXJzLCBwZXJzbGVuLCBub25jZSwgbm9uY2VsZW4pOworKwlyZXR1cm4gMTsKKysJfQorKwor K3N0YXRpYyBpbnQgZHJiZ19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCAKKysJCQljb25zdCB1 bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVu dGxlbiwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3Rh dGljIGludCBkcmJnX2N0cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQl1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4pCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3Ry OworKwlpZiAoYWRpbiAmJiBhZGlubGVuKQorKwkJeworKwkJY3RyX1VwZGF0ZShkY3R4LCBhZGlu LCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKKysJCS8qIFRoaXMgbWVhbnMgd2UgcmV1c2Ug ZGVyaXZlZCB2YWx1ZSAqLworKwkJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNF X0RGKQorKwkJCXsKKysJCQlhZGluID0gTlVMTDsKKysJCQlhZGlubGVuID0gMTsKKysJCQl9Cisr CQl9CisrCWVsc2UKKysJCWFkaW5sZW4gPSAwOworKworKwlmb3IgKDs7KQorKwkJeworKwkJaW5j XzEyOChjY3R4KTsKKysJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAh ZGN0eC0+bGJfdmFsaWQpCisrCQkJeworKwkJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGRjdHgtPmxi LCAmY2N0eC0+a3MpOworKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJCQljb250aW51ZTsKKysJ CQl9CisrCQlpZiAob3V0bGVuIDwgMTYpCisrCQkJeworKwkJCS8qIFVzZSBLIGFzIHRlbXAgc3Bh Y2UgYXMgaXQgd2lsbCBiZSB1cGRhdGVkICovCisrCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0 eC0+SywgJmNjdHgtPmtzKTsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNj dHgtPkspKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1jcHkob3V0LCBjY3R4LT5LLCBvdXRsZW4p OworKwkJCWJyZWFrOworKwkJCX0KKysJCUFFU19lbmNyeXB0KGNjdHgtPlYsIG91dCwgJmNjdHgt PmtzKTsKKysJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKKysJCQlyZXR1 cm4gMDsKKysJCW91dCArPSAxNjsKKysJCW91dGxlbiAtPSAxNjsKKysJCWlmIChvdXRsZW4gPT0g MCkKKysJCQlicmVhazsKKysJCX0KKysKKysJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVu LCBOVUxMLCAwLCBOVUxMLCAwKTsKKysKKysJcmV0dXJuIDE7CisrCisrCX0KKysKKytzdGF0aWMg aW50IGRyYmdfY3RyX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJbWVtc2V0 KCZkY3R4LT5kLmN0ciwgMCwgc2l6ZW9mKERSQkdfQ1RSX0NUWCkpOworKwlyZXR1cm4gMTsKKysJ fQorKworK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpCisrCXsKKysJRFJC R19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKworKwlzaXplX3Qga2V5bGVuOworKwor Kwlzd2l0Y2ggKGRjdHgtPnR5cGUpCisrCQl7CisrCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKKysJ CWtleWxlbiA9IDE2OworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKKysJ CWtleWxlbiA9IDI0OworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2N0cjoKKysJ CWtleWxlbiA9IDMyOworKwkJYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJcmV0dXJuIC0yOwor KwkJfQorKworKwlkY3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRpYXRlOworKwlk Y3R4LT5yZXNlZWQgPSBkcmJnX2N0cl9yZXNlZWQ7CisrCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19j dHJfZ2VuZXJhdGU7CisrCWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRp YXRlOworKworKwljY3R4LT5rZXlsZW4gPSBrZXlsZW47CisrCWRjdHgtPnN0cmVuZ3RoID0ga2V5 bGVuICogODsKKysJZGN0eC0+YmxvY2tsZW5ndGggPSAxNjsKKysJZGN0eC0+c2VlZGxlbiA9IGtl eWxlbiArIDE2OworKworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYp CisrCQl7CisrCQkvKiBkZiBpbml0aWFsaXNhdGlvbiAqLworKwkJc3RhdGljIHVuc2lnbmVkIGNo YXIgZGZfa2V5WzMyXSA9CisrCQkJeworKwkJCTB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1 LDB4MDYsMHgwNywKKysJCQkweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYs CisrCQkJMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAorKwkJCTB4MTgs MHgxOSwweDFhLDB4MWIsMHgxYywweDFkLDB4MWUsMHgxZiAKKysJCQl9OworKwkJLyogU2V0IGtl eSBzY2hlZHVsZSBmb3IgZGZfa2V5ICovCisrCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGRmX2tleSwg ZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5kZl9rcyk7CisrCisrCQlkY3R4LT5taW5fZW50cm9weSA9 IGNjdHgtPmtleWxlbjsKKysJCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwor KwkJZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOworKwkJZGN0eC0+bWF4 X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKwkJZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9M RU5HVEg7CisrCQlkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKKysJCX0KKysJZWxz ZQorKwkJeworKwkJZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKwkJZGN0eC0+ bWF4X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKwkJLyogTm9uY2Ugbm90IHVzZWQgKi8KKysJ CWRjdHgtPm1pbl9ub25jZSA9IDA7CisrCQlkY3R4LT5tYXhfbm9uY2UgPSAwOworKwkJZGN0eC0+ bWF4X3BlcnMgPSBkY3R4LT5zZWVkbGVuOworKwkJZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVk bGVuOworKwkJfQorKworKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OworKwlkY3R4LT5yZXNl ZWRfaW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYworLS0tIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzCTIwMTItMDItMDcgMTE6 MDc6MDIuNTQ0MzkzNzMyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX2RyYmdfaGFzaC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ0MzkzNzMyICswMTAwCitA QCAtMCwwICsxLDM3OCBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaGFzaC5jICovCisrLyog V3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRo ZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRs aWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFu ZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogVGhpcyBpcyBIYXNoX2Rm IGZyb20gU1AgODAwLTkwIDEwLjQuMSAqLworKworK3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NU WCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu MSwgc2l6ZV90IGluMWxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBp bjJsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuLAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluNCwgc2l6ZV90IGluNGxlbikKKysJeworKwlFVlBfTURf Q1RYICptY3R4ID0gJmRjdHgtPmQuaGFzaC5tY3R4OworKwl1bnNpZ25lZCBjaGFyICp2dG1wID0g ZGN0eC0+ZC5oYXNoLnZ0bXA7CisrCXVuc2lnbmVkIGNoYXIgdG1wWzZdOworKwkvKiBTdGFuZGFy ZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdheXMgbGVzcyB0aGFu CisrCSAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sgbGVuZ3RoLgorKwkg Ki8KKysJc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47CisrCXRtcFswXSA9IDE7CisrCXRt cFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsKKysJdG1wWzJdID0gKChvdXRsZW4g KiA4KSA+PiAxNikgJiAweGZmOworKwl0bXBbM10gPSAoKG91dGxlbiAqIDgpID4+IDgpICYgMHhm ZjsKKysJdG1wWzRdID0gKG91dGxlbiAqIDgpICYgMHhmZjsKKysJaWYgKCFpbjEpCisrCQl7Cisr CQl0bXBbNV0gPSAodW5zaWduZWQgY2hhcilpbjFsZW47CisrCQlpbjEgPSB0bXAgKyA1OworKwkJ aW4xbGVuID0gMTsKKysJCX0KKysJZm9yICg7OykKKysJCXsKKysJCWlmICghRklQU19kaWdlc3Rp bml0KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUZJUFNf ZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4xICYm ICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEsIGluMWxlbikpCisrCQkJcmV0dXJuIDA7Cisr CQlpZiAoaW4yICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIsIGluMmxlbikpCisrCQkJ cmV0dXJuIDA7CisrCQlpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMsIGlu M2xlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW40ICYmICFGSVBTX2RpZ2VzdHVwZGF0ZSht Y3R4LCBpbjQsIGluNGxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAob3V0bGVuIDwgZGN0eC0+ YmxvY2tsZW5ndGgpCisrCQkJeworKwkJCWlmICghRklQU19kaWdlc3RmaW5hbChtY3R4LCB2dG1w LCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91dCwgdnRtcCwgb3V0bGVuKTsK KysJCQlPUEVOU1NMX2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwkJCXJldHVy biAxOworKwkJCX0KKysJCWVsc2UgaWYoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgb3V0LCBOVUxM KSkKKysJCQlyZXR1cm4gMDsKKysKKysJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJ CWlmIChvdXRsZW4gPT0gMCkKKysJCQlyZXR1cm4gMTsKKysJCXRtcFswXSsrOworKwkJb3V0ICs9 IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJfQorKwl9CisrCisrCisrLyogQWRkIGFuIHVuc2lnbmVk IGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYnVmLiBGb3IK KysgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVyIGV4Y2VlZHMgdGhl IHNlZWQgbGVuZ3RoLgorKyAqLworKworK3N0YXRpYyB2b2lkIGN0eF9hZGRfYnVmKERSQkdfQ1RY ICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCisrCQkJCXVuc2lnbmVkIGNoYXIgKmluLCBzaXpl X3QgaW5sZW4pCisrCXsKKysJc2l6ZV90IGkgPSBpbmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hh ciAqcTsKKysJdW5zaWduZWQgY2hhciBjLCAqcDsKKysJcCA9IGJ1ZiArIGRjdHgtPnNlZWRsZW47 CisrCXEgPSBpbiArIGlubGVuOworKworKwlPUEVOU1NMX2Fzc2VydChpIDw9IGRjdHgtPnNlZWRs ZW4pOworKworKwkvKiBTcGVjaWFsIGNhc2U6IHplcm8gbGVuZ3RoLCBqdXN0IGluY3JlbWVudCBi dWZmZXIgKi8KKysJaWYgKGkpCisrCQljID0gMDsKKysJZWxzZSAKKysJCWMgPSAxOworKworKwl3 aGlsZSAoaSkKKysJCXsKKysJCWludCByOworKwkJcC0tOworKwkJcS0tOworKwkJciA9ICpwICsg KnEgKyBjOworKwkJLyogQ2FycnkgKi8KKysJCWlmIChyID4gMHhmZikKKysJCQljID0gMTsKKysJ CWVsc2UKKysJCQljID0gMDsKKysJCSpwID0gciAmIDB4ZmY7CisrCQlpLS07CisrCQl9CisrCisr CWkgPSBkY3R4LT5zZWVkbGVuIC0gaW5sZW47CisrCisrCS8qIElmIG5vdCBhZGRpbmcgd2hvbGUg YnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJyaWVzICovCisrCWlmIChjICYmIGkpCisrCQl7CisrCQlk bworKwkJCXsKKysJCQlwLS07CisrCQkJYyA9ICpwOworKwkJCWMrKzsKKysJCQkqcCA9IGM7Cisr CQkJaWYoYykKKysJCQkJcmV0dXJuOworKwkJCX0gd2hpbGUoaS0tKTsKKysJCX0KKysJfQorKwor Ky8qIEZpbmFsaXNlIGFuZCBhZGQgaGFzaCB0byBWICovCisrCQorK3N0YXRpYyBpbnQgY3R4X2Fk ZF9tZChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlpZiAoIUZJUFNfZGlnZXN0ZmluYWwoJmRjdHgt PmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhhc2gudnRtcCwgTlVMTCkpCisrCQkJcmV0dXJuIDA7Cisr CWN0eF9hZGRfYnVmKGRjdHgsIGRjdHgtPmQuaGFzaC5WLCBkY3R4LT5kLmhhc2gudnRtcCwgZGN0 eC0+YmxvY2tsZW5ndGgpOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgaGFzaF9n ZW4oRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbikKKysJ eworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJaWYgKG91dGxlbiA9 PSAwKQorKwkJcmV0dXJuIDE7CisrCW1lbWNweShoY3R4LT52dG1wLCBoY3R4LT5WLCBkY3R4LT5z ZWVkbGVuKTsKKysJZm9yKDs7KQorKwkJeworKwkJRklQU19kaWdlc3Rpbml0KCZoY3R4LT5tY3R4 LCBoY3R4LT5tZCk7CisrCQlGSVBTX2RpZ2VzdHVwZGF0ZSgmaGN0eC0+bWN0eCwgaGN0eC0+dnRt cCwgZGN0eC0+c2VlZGxlbik7CisrCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVT VCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQorKwkJCXsKKysJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4 LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJCX0K KysJCWVsc2UgaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJCQlGSVBT X2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1wLCBOVUxMKTsKKysJCQlpZiAoIWZp cHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhjdHgtPnZ0bXApKQorKwkJCQlyZXR1cm4gMDsKKysJ CQltZW1jcHkob3V0LCBoY3R4LT52dG1wLCBvdXRsZW4pOworKwkJCXJldHVybiAxOworKwkJCX0K KysJCWVsc2UKKysJCQl7CisrCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgb3V0LCBO VUxMKTsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrCQkJCXJl dHVybiAwOworKwkJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCQlpZiAob3V0bGVu ID09IDApCisrCQkJCXJldHVybiAxOworKwkJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJ CQl9CisrCQljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT52dG1wLCBOVUxMLCAwKTsKKysJCX0KKysJ fQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQorKwl7CisrCURSQkdfSEFTSF9DVFgg KmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+ViwgCisr CQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbiwKKysJCQlO VUxMLCAwKSkKKysJCXJldHVybiAwOworKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgCisr CQkJTlVMTCwgMCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKKysJCQlOVUxMLCAwLCBOVUxMLCAw KSkKKysJCXJldHVybiAwOworKworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysJZnByaW50Zihz dGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBo Y3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4 LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKysJCisrc3RhdGljIGlu dCBkcmJnX2hhc2hfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGlu LCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5k Lmhhc2g7CisrCS8qIFYgYWJvdXQgdG8gYmUgdXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRwdXQgaW5z dGVhZCAqLworKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywKKysJCQlOVUxMLCAxLCBoY3R4 LT5WLCBkY3R4LT5zZWVkbGVuLAorKwkJCWVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4pKQor KwkJcmV0dXJuIDA7CisrCW1lbWNweShoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsK KysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIE5VTEwsIDAsCisrCQkJaGN0eC0+ViwgZGN0 eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysjaWZkZWYgSEFT SF9EUkJHX1RSQUNFCisrCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpcbiIpOwor KwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKwloZXhwcmludChz dGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJ fQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJ CQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4 ID0gJmRjdHgtPmQuaGFzaDsKKysJRVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4LT5tY3R4OworKwl1 bnNpZ25lZCBjaGFyIHRtcFs0XTsKKysJaWYgKGFkaW4gJiYgYWRpbl9sZW4pCisrCQl7CisrCQl0 bXBbMF0gPSAyOworKwkJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQorKwkJ CXJldHVybiAwOworKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrCQkJ cmV0dXJuIDA7CisrCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+ c2VlZGxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwg YWRpbiwgYWRpbl9sZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFjdHhfYWRkX21kKGRjdHgp KQorKwkJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWhhc2hfZ2VuKGRjdHgsIG91dCwgb3V0bGVu KSkKKysJCXJldHVybiAwOworKworKwl0bXBbMF0gPSAzOworKwlpZiAoIUZJUFNfZGlnZXN0aW5p dChtY3R4LCBoY3R4LT5tZCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFFVlBfRGlnZXN0VXBkYXRl KG1jdHgsIHRtcCwgMSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1j dHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghY3R4 X2FkZF9tZChkY3R4KSkKKysJCXJldHVybiAwOworKworKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4 LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysKKysJdG1wWzBdID0gKGRjdHgtPnJlc2Vl ZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7CisrCXRtcFsxXSA9IChkY3R4LT5yZXNlZWRfY291bnRl ciA+PiAxNikgJiAweGZmOworKwl0bXBbMl0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gOCkg JiAweGZmOworKwl0bXBbM10gPSBkY3R4LT5yZXNlZWRfY291bnRlciAmIDB4ZmY7CisrCWN0eF9h ZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRtcCwgNCk7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQor KwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBnZW5lcmF0ZTpcbiIpOworKwloZXhwcmludChz dGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKwloZXhwcmludChzdGRlcnIsIGhjdHgt PkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRp YyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJRVZQ X01EX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhhc2gubWN0eCk7CisrCU9QRU5TU0xfY2xlYW5zZSgm ZGN0eC0+ZC5oYXNoLCBzaXplb2YoRFJCR19IQVNIX0NUWCkpOworKwlyZXR1cm4gMTsKKysJfQor KworK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWNvbnN0 IEVWUF9NRCAqbWQ7CisrCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwlt ZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOworKwlpZiAoIW1kKQorKwkJcmV0 dXJuIC0yOworKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCisrCQl7CisrCQljYXNlIE5JRF9zaGExOgor KwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX3NoYTIy NDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOworKwkJYnJlYWs7CisrCisrCQlkZWZhdWx0Ogor KwkJZGN0eC0+c3RyZW5ndGggPSAyNTY7CisrCQlicmVhazsKKysJCX0KKysKKysJZGN0eC0+aW5z dGFudGlhdGUgPSBkcmJnX2hhc2hfaW5zdGFudGlhdGU7CisrCWRjdHgtPnJlc2VlZCA9IGRyYmdf aGFzaF9yZXNlZWQ7CisrCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19oYXNoX2dlbmVyYXRlOworKwlk Y3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX3VuaW5zdGFudGlhdGU7CisrCisrCWRjdHgt PmQuaGFzaC5tZCA9IG1kOworKwlFVlBfTURfQ1RYX2luaXQoJmhjdHgtPm1jdHgpOworKworKwkv KiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4MDAtOTAgMTAuMSB0YWJsZSAyICovCisrCisrCWRj dHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCWlmIChkY3R4LT5ibG9ja2xl bmd0aCA+IDMyKQorKwkJZGN0eC0+c2VlZGxlbiA9IDExMTsKKysJZWxzZQorKwkJZGN0eC0+c2Vl ZGxlbiA9IDU1OworKworKworKwlkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8g ODsKKysJZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrCWRjdHgtPm1p bl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysJZGN0eC0+bWF4X25vbmNlID0gRFJC R19NQVhfTEVOR1RIOworKworKwlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKKysJ ZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7CisrCisrCWRjdHgtPm1heF9yZXF1ZXN0 ID0gMTw8MTY7CisrCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0OworKworKwlyZXR1cm4g MTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RyYmdf aG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1h Yy5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDQzOTM3MzIgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMJMjAxMi0wMi0wNyAxMTow NzowMi41NDQzOTM3MzIgKzAxMDAKK0BAIC0wLDAgKzEsMjgxIEBACisrLyogZmlwcy9yYW5kL2Zp cHNfZHJiZ19obWFjLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKwor K3N0YXRpYyBpbnQgZHJiZ19obWFjX3VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywg c2l6ZV90IGluM2xlbgorKwkJCSkKKysJeworKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjMCA9IDAs IGMxID0gMTsKKysJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCUhNQUNf Q1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7CisrCisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGht YWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsK KysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisr CQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEpKQorKwkJcmV0dXJu IDA7CisrCWlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKKysJ CXJldHVybiAwOworKwlpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxl bikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4z LCBpbjNsZW4pKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFj LT5LLCBOVUxMKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBo bWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7 CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQor KwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkK KysJCXJldHVybiAwOworKworKwlpZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4pCisr CQlyZXR1cm4gMTsKKysKKysJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+ YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNf VXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOwor KwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMSwgMSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKGlu MWxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4pKQorKwkJcmV0dXJuIDA7Cisr CWlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKKysJCXJldHVy biAwOworKwlpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCisr CQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQor KwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgt PmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFD X1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQlyZXR1cm4gMDsK KysKKysJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQorKwkJcmV0dXJuIDA7 CisrCisrCXJldHVybiAxOworKworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6 ZV90IGVudF9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9u Y2VfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4p CisrCXsKKysJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCW1lbXNldCho bWFjLT5LLCAwLCBkY3R4LT5ibG9ja2xlbmd0aCk7CisrCW1lbXNldChobWFjLT5WLCAxLCBkY3R4 LT5ibG9ja2xlbmd0aCk7CisrCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAorKwkJCWVudCwg ZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4pKQorKwkJcmV0dXJuIDA7 CisrCisrI2lmZGVmIEhNQUNfRFJCR19UUkFDRQorKwlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRl ciBpbnN0YW50aWF0ZTpcbiIpOworKwloZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJs b2NrbGVuZ3RoKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0 aCk7CisrI2VuZGlmCisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNf cmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNp emVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bl9sZW4pCisrCXsKKysJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCisrCQkJZW50LCBlbnRf bGVuLCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysjaWZkZWYg SE1BQ19EUkJHX1RSQUNFCisrCXsKKysJCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5o bWFjOworKwkJZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxuIik7CisrCQloZXhw cmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysJCWhleHByaW50KHN0 ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOworKwl9CisrI2VuZGlmCisrCXJldHVy biAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfZ2VuZXJhdGUoRFJCR19DVFggKmRj dHgsCisrCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCURSQkdfSE1BQ19D VFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOworKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4 OworKwljb25zdCB1bnNpZ25lZCBjaGFyICpWdG1wID0gaG1hYy0+VjsKKysJaWYgKGFkaW5fbGVu ICYmICFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLAorKwkJCQkJCU5VTEws IDAsIE5VTEwsIDApKQorKwkJcmV0dXJuIDA7CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIUhN QUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwKKysJCQkJCQkJaG1h Yy0+bWQsIE5VTEwpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBW dG1wLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIShkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQorKwkJCXsKKysJCQlp ZiAoIUhNQUNfRmluYWwoaGN0eCwgZGN0eC0+bGIsIE5VTEwpKQorKwkJCQlyZXR1cm4gMDsKKysJ CQlkY3R4LT5sYl92YWxpZCA9IDE7CisrCQkJVnRtcCA9IGRjdHgtPmxiOworKwkJCWNvbnRpbnVl OworKwkJCX0KKysJCWVsc2UgaWYgKG91dGxlbiA+IGRjdHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsK KysJCQlpZiAoIUhNQUNfRmluYWwoaGN0eCwgb3V0LCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7Cisr CQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQorKwkJCQlyZXR1cm4gMDsK KysJCQlWdG1wID0gb3V0OworKwkJCX0KKysJCWVsc2UKKysJCQl7CisrCQkJaWYgKCFITUFDX0Zp bmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlpZiAoIWZpcHNf ZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhtYWMtPlYpKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1j cHkob3V0LCBobWFjLT5WLCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysJCW91dCArPSBk Y3R4LT5ibG9ja2xlbmd0aDsKKysJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCX0K KysJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBO VUxMLCAwKSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBp bnQgZHJiZ19obWFjX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJSE1BQ19D VFhfY2xlYW51cCgmZGN0eC0+ZC5obWFjLmhjdHgpOworKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgt PmQuaG1hYywgc2l6ZW9mKERSQkdfSE1BQ19DVFgpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytp bnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCkKKysJeworKwljb25zdCBFVlBf TUQgKm1kID0gTlVMTDsKKysJRFJCR19ITUFDX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhtYWM7Cisr CWRjdHgtPnN0cmVuZ3RoID0gMjU2OworKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCisrCQl7CisrCQlj YXNlIE5JRF9obWFjV2l0aFNIQTE6CisrCQltZCA9IEVWUF9zaGExKCk7CisrCQlkY3R4LT5zdHJl bmd0aCA9IDEyODsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyMjQ6Cisr CQltZCA9IEVWUF9zaGEyMjQoKTsKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOworKwkJYnJlYWs7 CisrCisrCQljYXNlIE5JRF9obWFjV2l0aFNIQTI1NjoKKysJCW1kID0gRVZQX3NoYTI1NigpOwor KwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9obWFjV2l0aFNIQTM4NDoKKysJCW1kID0gRVZQX3No YTM4NCgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9obWFjV2l0aFNIQTUxMjoKKysJCW1k ID0gRVZQX3NoYTUxMigpOworKwkJYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJZGN0eC0+c3Ry ZW5ndGggPSAwOworKwkJcmV0dXJuIC0yOworKwkJfQorKyAgICAgICAgZGN0eC0+aW5zdGFudGlh dGUgPSBkcmJnX2htYWNfaW5zdGFudGlhdGU7CisrICAgICAgICBkY3R4LT5yZXNlZWQgPSBkcmJn X2htYWNfcmVzZWVkOworKyAgICAgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2htYWNfZ2VuZXJh dGU7CisrICAgICAgICBkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19obWFjX3VuaW5zdGFudGlh dGU7CisrCUhNQUNfQ1RYX2luaXQoJmhjdHgtPmhjdHgpOworKwloY3R4LT5tZCA9IG1kOworKwlk Y3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3NpemUobWQpOworKwlkY3R4LT5zZWVkbGVuID0g TV9FVlBfTURfc2l6ZShtZCk7CisrCisrICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgt PnN0cmVuZ3RoIC8gODsKKysgICAgICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVO R1RIOworKworKyAgICAgICAgZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAy OworKyAgICAgICAgZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICAg ICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7CisrICAgICAgICBkY3R4LT5tYXhf YWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysgICAgICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0g MTw8MTY7CisrICAgICAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0 dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19s aWIuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ0MzkzNzMyICswMTAwCisrKysgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAxMi0wMi0wNyAxMTow NzowMi41NDQzOTM3MzIgKzAxMDAKK0BAIC0wLDAgKzEsNTc2IEBACisrLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisr ICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAx MSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysK KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Cisr I2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisr LyogU3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICovCisrCisraW50IEZJUFNf ZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQor Kwl7CisrCWludCBydjsKKysJbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOworKwlk Y3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOworKwlkY3R4LT54ZmxhZ3Mg PSBmbGFnczsKKysJZGN0eC0+dHlwZSA9IHR5cGU7CisrCisrCWRjdHgtPmlmbGFncyA9IDA7Cisr CWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSAwOworKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0g MDsKKysJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gRFJCR19IRUFMVEhfSU5URVJWQUw7 CisrCisrCXJ2ID0gZmlwc19kcmJnX2hhc2hfaW5pdChkY3R4KTsKKysKKysJaWYgKHJ2ID09IC0y KQorKwkJcnYgPSBmaXBzX2RyYmdfY3RyX2luaXQoZGN0eCk7CisrCWlmIChydiA9PSAtMikKKysJ CXJ2ID0gZmlwc19kcmJnX2htYWNfaW5pdChkY3R4KTsKKysKKysJaWYgKHJ2IDw9IDApCisrCQl7 CisrCQlpZiAocnYgPT0gLTIpCisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJ UFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpOworKwkJZWxzZQorKwkJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19JTklULCBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcpOworKwkJfQor KworKwkvKiBJZiBub3QgaW4gdGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUg c2FtZSB0eXBlICovCisrCisrCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkK KysJCXsKKysJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKKysJCQl7CisrCQkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsK KysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCisrCXJldHVybiBydjsKKysJfQorKworK0RS QkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisrCXsK KysJRFJCR19DVFggKmRjdHg7CisrCWRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRFJCR19D VFgpKTsKKysJaWYgKCFkY3R4KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX05F VywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrCisrCWlm ICh0eXBlID09IDApCisrCQl7CisrCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7 CisrCQlkY3R4LT50eXBlID0gMDsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5J VElBTElTRUQ7CisrCQlyZXR1cm4gZGN0eDsKKysJCX0KKysKKysJaWYgKEZJUFNfZHJiZ19pbml0 KGRjdHgsIHR5cGUsIGZsYWdzKSA8PSAwKQorKwkJeworKwkJT1BFTlNTTF9mcmVlKGRjdHgpOwor KwkJcmV0dXJuIE5VTEw7CisrCQl9CisrCQkKKysJcmV0dXJuIGRjdHg7CisrCX0KKysKKyt2b2lk IEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWlmIChkY3R4LT51bmluc3Rh bnRpYXRlKQorKwkJZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKKysJLyogRG9uJ3QgZnJlZSB1 cCBkZWZhdWx0IERSQkcgKi8KKysJaWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9kcmJnKCkp CisrCQl7CisrCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrCQlkY3R4LT50 eXBlID0gMDsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Cisr CQl9CisrCWVsc2UKKysJCXsKKysJCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZCwgc2l6ZW9mKGRj dHgtPmQpKTsKKysJCU9QRU5TU0xfZnJlZShkY3R4KTsKKysJCX0KKysJfQorKworK3N0YXRpYyBz aXplX3QgZmlwc19nZXRfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBv dXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisr CXsKKysJdW5zaWduZWQgY2hhciAqdG91dCwgKnA7CisrCXNpemVfdCBibCA9IGRjdHgtPmVudHJv cHlfYmxvY2tsZW4sIHJ2OworKwlpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQorKwkJcmV0dXJuIDA7 CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCisrCQlyZXR1cm4g ZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgcG91dCwgZW50cm9weSwgbWluX2xlbiwgbWF4X2xlbik7 CisrCXJ2ID0gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRvdXQsIGVudHJvcHkgKyBibCwKKysJ CQkJbWluX2xlbiArIGJsLCBtYXhfbGVuICsgYmwpOworKwkqcG91dCA9IHRvdXQgKyBibDsKKysJ aWYgKHJ2IDwgKG1pbl9sZW4gKyBibCkgfHwgKHJ2ICUgYmwpKQorKwkJcmV0dXJuIDA7CisrCS8q IENvbXBhcmUgY29uc2VjdXRpdmUgYmxvY2tzIGZvciBjb250aW51b3VzIFBSTkcgdGVzdCAqLwor Kwlmb3IgKHAgPSB0b3V0OyBwIDwgdG91dCArIHJ2IC0gYmw7IHAgKz0gYmwpCisrCQl7CisrCQlp ZiAoIW1lbWNtcChwLCBwICsgYmwsIGJsKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQ U19HRVRfRU5UUk9QWSwgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLKTsKKysJCQlyZXR1cm4g MDsKKysJCQl9CisrCQl9CisrCXJ2IC09IGJsOworKwlpZiAocnYgPiBtYXhfbGVuKQorKwkJcmV0 dXJuIG1heF9sZW47CisrCXJldHVybiBydjsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfY2xl YW51cF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LAorKwkJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBz aXplX3Qgb2xlbikKKysJeworKwlzaXplX3QgYmw7CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJH X0ZMQUdfVEVTVCkKKysJCWJsID0gMDsKKysJZWxzZQorKwkJYmwgPSBkY3R4LT5lbnRyb3B5X2Js b2NrbGVuOworKwkvKiBDYWxsIGNsZWFudXAgd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgKi8KKysJ ZGN0eC0+Y2xlYW51cF9lbnRyb3B5KGRjdHgsIG91dCAtIGJsLCBvbGVuICsgYmwpOworKwl9Cisr CisrCisraW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCisrCXsKKysJc2l6ZV90IGVu dGxlbiA9IDAsIG5vbmNlbGVuID0gMDsKKysJdW5zaWduZWQgY2hhciAqbm9uY2UgPSBOVUxMLCAq ZW50cm9weSA9IE5VTEw7CisrCisrI2lmIDAKKysJLyogUHV0IGhlcmUgc28gZXJyb3Igc2NyaXB0 IHBpY2tzIHRoZW0gdXAgKi8KKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRF LAorKwkJCQlGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORyk7CisrCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOX0VSUk9SX1NUQVRFKTsK KysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfQUxSRUFEWV9J TlNUQU5USUFURUQpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJ UFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfSU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFKTsKKysJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1Ip OworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9EUkJHX05P VF9JTklUSUFMSVNFRCk7CisrI2VuZGlmCisrCisrCWludCByID0gMDsKKysKKysJaWYgKHBlcnNs ZW4gPiBkY3R4LT5tYXhfcGVycykKKysJCXsKKysJCXIgPSBGSVBTX1JfUEVSU09OQUxJU0FUSU9O X1NUUklOR19UT09fTE9ORzsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWRjdHgtPmlu c3RhbnRpYXRlKQorKwkJeworKwkJciA9IEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRDsKKysJ CWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VO SU5JVElBTElTRUQpCisrCQl7CisrCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VS Uk9SKQorKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7CisrCQllbHNlCisrCQkJciA9IEZJ UFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRDsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlkY3R4 LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysKKysJZW50bGVuID0gZmlwc19nZXRfZW50 cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCisrCQkJCWRjdHgtPm1pbl9lbnRy b3B5LCBkY3R4LT5tYXhfZW50cm9weSk7CisrCisrCWlmIChlbnRsZW4gPCBkY3R4LT5taW5fZW50 cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkKKysJCXsKKysJCXIgPSBGSVBTX1Jf RVJST1JfUkVUUklFVklOR19FTlRST1BZOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChk Y3R4LT5tYXhfbm9uY2UgPiAwICYmIGRjdHgtPmdldF9ub25jZSkKKysJCXsKKysJCW5vbmNlbGVu ID0gZGN0eC0+Z2V0X25vbmNlKGRjdHgsICZub25jZSwKKysJCQkJCWRjdHgtPnN0cmVuZ3RoIC8g MiwKKysJCQkJCWRjdHgtPm1pbl9ub25jZSwgZGN0eC0+bWF4X25vbmNlKTsKKysKKysJCWlmIChu b25jZWxlbiA8IGRjdHgtPm1pbl9ub25jZSB8fCBub25jZWxlbiA+IGRjdHgtPm1heF9ub25jZSkK KysJCQl7CisrCQkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFOworKwkJCWdvdG8g ZW5kOworKwkJCX0KKysKKysJCX0KKysKKysJaWYgKCFkY3R4LT5pbnN0YW50aWF0ZShkY3R4LCAK KysJCQkJZW50cm9weSwgZW50bGVuLAorKwkJCQlub25jZSwgbm9uY2VsZW4sCisrCQkJCXBlcnMs IHBlcnNsZW4pKQorKwkJeworKwkJciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkc7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNf UkVBRFk7CisrCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrCQlk Y3R4LT5yZXNlZWRfY291bnRlciA9IDE7CisrCisrCWVuZDoKKysKKysJaWYgKGVudHJvcHkgJiYg ZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQorKwkJZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50 cm9weSwgZW50bGVuKTsKKysKKysJaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFudXBfbm9uY2UpCisr CQlkY3R4LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7CisrCisrCWlmIChk Y3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCisrCQlyZXR1cm4gMTsKKysKKysJaWYg KHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKwkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCByKTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KKysK KytzdGF0aWMgaW50IGRyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuLCBpbnQgaGNoZWNrKQorKwl7CisrCXVuc2ln bmVkIGNoYXIgKmVudHJvcHkgPSBOVUxMOworKwlzaXplX3QgZW50bGVuID0gMDsKKysJaW50IHIg PSAwOworKworKyNpZiAwCisrCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfTk9U X0lOU1RBTlRJQVRFRCk7CisrCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfQURE SVRJT05BTF9JTlBVVF9UT09fTE9ORyk7CisrI2VuZGlmCisrCWlmIChkY3R4LT5zdGF0dXMgIT0g RFJCR19TVEFUVVNfUkVBRFkKKysJCSYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNF RUQpCisrCQl7CisrCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQorKwkJ CXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7CisrCQllbHNlIGlmKGRjdHgtPnN0YXR1cyA9PSBE UkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJCXIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRF RDsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWFkaW4pCisrCQlhZGlubGVuID0gMDsK KysJZWxzZSBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQorKwkJeworKwkJciA9IEZJUFNf Ul9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWRj dHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKwkvKiBQZWZvcm0gaGVhbHRoIGNoZWNr IG9uIGFsbCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBwcmVkaWN0aW9uCisrCSAqIHJlc2lz dGFuY2UgcmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9kZS4KKysJICovCisrCWlmIChoY2hlY2sg JiYgIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpCisrCQl7CisrCQlpZiAoIUZJUFNf ZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpCisrCQkJeworKwkJCXIgPSBGSVBTX1JfU0VMRlRFU1Rf RkFJTFVSRTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQl9CisrCisrCWVudGxlbiA9IGZpcHNf Z2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAorKwkJCQlkY3R4LT5t aW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOworKworKwlpZiAoZW50bGVuIDwgZGN0eC0+ bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCisrCQl7CisrCQlyID0g RklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKKysJCWdvdG8gZW5kOworKwkJfQorKwor KwlpZiAoIWRjdHgtPnJlc2VlZChkY3R4LCBlbnRyb3B5LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4p KQorKwkJZ290byBlbmQ7CisrCisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOwor KwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJZGN0eC0+cmVz ZWVkX2NvdW50ZXIgPSAxOworKwllbmQ6CisrCisrCWlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFu dXBfZW50cm9weSkKKysJCWZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxl bik7CisrCisrCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCisrCQlyZXR1 cm4gMTsKKysKKysJaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQor KwkJRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIHIpOworKworKwlyZXR1cm4gMDsKKysJfQor KworK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorKwl7CisrCXJldHVybiBkcmJnX3Jlc2Vl ZChkY3R4LCBhZGluLCBhZGlubGVuLCAxKTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJn X2NoZWNrKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfVEVTVCkKKysJCXJldHVybiAxOworKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250Kys7CisrCWlm IChkY3R4LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCkK KysJCXsKKysJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKKysJCQl7CisrCQkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7 CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBG SVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG91dGxlbiwKKysJCQlpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlLAorKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorKwl7CisrCWludCByID0gMDsKKysK KysJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfR0VORVJBVEUsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7 CisrCQl9CisrCisrCWlmICghZmlwc19kcmJnX2NoZWNrKGRjdHgpKQorKwkJcmV0dXJuIDA7Cisr CisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKKysJCSYmIGRjdHgtPnN0 YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpCisrCQl7CisrCQlpZiAoZGN0eC0+c3RhdHVzID09 IERSQkdfU1RBVFVTX0VSUk9SKQorKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7CisrCQll bHNlIGlmKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJCXIg PSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAo b3V0bGVuID4gZGN0eC0+bWF4X3JlcXVlc3QpCisrCQl7CisrCQlyID0gRklQU19SX1JFUVVFU1Rf VE9PX0xBUkdFX0ZPUl9EUkJHOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCWlmIChhZGlubGVu ID4gZGN0eC0+bWF4X2FkaW4pCisrCQl7CisrCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRf VE9PX0xPTkc7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGRjdHgtPmlmbGFncyAmIERS QkdfQ1VTVE9NX1JFU0VFRCkKKysJCWRjdHgtPmdlbmVyYXRlKGRjdHgsIE5VTEwsIG91dGxlbiwg TlVMTCwgMCk7CisrCWVsc2UgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2Vl ZF9pbnRlcnZhbCkKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKKysKKysJ aWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRVNFRUQgfHwgcHJlZGljdGlvbl9yZXNp c3RhbmNlKQorKwkJeworKwkJLyogSWYgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZG9u J3QgZG8gaGVhbHRoIGNoZWNrICovCisrCQlpbnQgaGNoZWNrID0gcHJlZGljdGlvbl9yZXNpc3Rh bmNlID8gMCA6IDE7CisrCQkKKysJCWlmICghZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxl biwgaGNoZWNrKSkKKysJCQl7CisrCQkJciA9IEZJUFNfUl9SRVNFRURfRVJST1I7CisrCQkJZ290 byBlbmQ7CisrCQkJfQorKwkJYWRpbiA9IE5VTEw7CisrCQlhZGlubGVuID0gMDsKKysJCX0KKysK KysJaWYgKCFkY3R4LT5nZW5lcmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRpbiwgYWRpbmxlbikp CisrCQl7CisrCQlyID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOworKwkJZGN0eC0+c3RhdHVzID0g RFJCR19TVEFUVVNfRVJST1I7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJaWYgKCEoZGN0eC0+aWZs YWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKKysJCXsKKysJCWlmIChkY3R4LT5yZXNlZWRfY291 bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCisrCQkJZGN0eC0+c3RhdHVzID0gRFJCR19T VEFUVVNfUkVTRUVEOworKwkJZWxzZQorKwkJCWRjdHgtPnJlc2VlZF9jb3VudGVyKys7CisrCQl9 CisrCisrCWVuZDoKKysJaWYgKHIpCisrCQl7CisrCQlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJH X0ZMQUdfTk9FUlIpKQorKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgcik7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU19k cmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJaW50IHJ2OworKwlpZiAo IWRjdHgtPnVuaW5zdGFudGlhdGUpCisrCQlydiA9IDE7CisrCWVsc2UKKysJCXJ2ID0gZGN0eC0+ dW5pbnN0YW50aWF0ZShkY3R4KTsKKysJLyogQWx0aG91Z2ggd2UnZCBsaWtlIHRvIGNsZWFuc2Ug aGVyZSB3ZSBjYW4ndCBiZWNhdXNlIHdlIGhhdmUgdG8KKysJICogdGVzdCB0aGUgdW5pbnN0YW50 aWF0ZSByZWFsbHkgemVyb2VzIHRoZSBkYXRhLgorKwkgKi8KKysJbWVtc2V0KCZkY3R4LT5kLCAw LCBzaXplb2YoZGN0eC0+ZCkpOworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJ QUxJU0VEOworKwkvKiBJZiBtZXRob2QgaGFzIHByb2JsZW1zIHVuaW5zdGFudGlhdGluZywgcmV0 dXJuIGVycm9yICovCisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBTX2RyYmdfc2V0X2Nh bGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6ZV90ICgqZ2V0X2VudHJvcHkpKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1p bl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKKysJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCisrCXNpemVfdCBlbnRy b3B5X2Jsb2NrbGVuLAorKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVf dCBtYXhfbGVuKSwKKysJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKQorKwl7CisrCWlmIChkY3R4LT5zdGF0dXMgIT0g RFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCXJldHVybiAwOworKwlkY3R4LT5lbnRyb3B5 X2Jsb2NrbGVuID0gZW50cm9weV9ibG9ja2xlbjsKKysJZGN0eC0+Z2V0X2VudHJvcHkgPSBnZXRf ZW50cm9weTsKKysJZGN0eC0+Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9lbnRyb3B5OworKwlk Y3R4LT5nZXRfbm9uY2UgPSBnZXRfbm9uY2U7CisrCWRjdHgtPmNsZWFudXBfbm9uY2UgPSBjbGVh bnVwX25vbmNlOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRf Y2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpLAorKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJH X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJaW50ICgqcmFu ZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pLAorKwlp bnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3Qgdm9pZCAqYnVmLCBp bnQgbnVtLCBkb3VibGUgZW50cm9weSkpCisrCXsKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJH X1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJcmV0dXJuIDA7CisrCWRjdHgtPmdldF9hZGluID0g Z2V0X2FkaW47CisrCWRjdHgtPmNsZWFudXBfYWRpbiA9IGNsZWFudXBfYWRpbjsKKysJZGN0eC0+ cmFuZF9zZWVkX2NiID0gcmFuZF9zZWVkX2NiOworKwlkY3R4LT5yYW5kX2FkZF9jYiA9IHJhbmRf YWRkX2NiOworKwlyZXR1cm4gMTsKKysJfQorKworK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2Rh dGEoRFJCR19DVFggKmRjdHgpCisrCXsKKysJcmV0dXJuIGRjdHgtPmFwcF9kYXRhOworKwl9Cisr Cisrdm9pZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4LCB2b2lkICphcHBf ZGF0YSkKKysJeworKwlkY3R4LT5hcHBfZGF0YSA9IGFwcF9kYXRhOworKwl9CisrCisrc2l6ZV90 IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpCisrCXsKKysJcmV0dXJu IGRjdHgtPmJsb2NrbGVuZ3RoOworKwl9CisrCisraW50IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgo RFJCR19DVFggKmRjdHgpCisrCXsKKysJcmV0dXJuIGRjdHgtPnN0cmVuZ3RoOworKwl9CisrCisr dm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50 ZXJ2YWwpCisrCXsKKysJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gaW50ZXJ2YWw7Cisr CX0KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4 LCBpbnQgaW50ZXJ2YWwpCisrCXsKKysJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gaW50ZXJ2YWw7 CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfc3RpY2sgPSAwOworKworK3ZvaWQgRklQU19kcmJn X3N0aWNrKGludCBvbm9mZikKKysJeworKwlkcmJnX3N0aWNrID0gb25vZmY7CisrCX0KKysKKysv KiBDb250aW51b3VzIERSQkcgdXRpbGl0eSBmdW5jdGlvbiAqLworK2ludCBmaXBzX2RyYmdfY3By bmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KQorKwl7Cisr CS8qIE5vIENQUk5HIGluIHRlc3QgbW9kZSAqLworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19G TEFHX1RFU1QpCisrCQlyZXR1cm4gMTsKKysJLyogQ2hlY2sgYmxvY2sgaXMgdmFsaWQ6IHNob3Vs ZCBuZXZlciBoYXBwZW4gKi8KKysJaWYgKGRjdHgtPmxiX3ZhbGlkID09IDApCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lOVEVSTkFMX0VSUk9S KTsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCXJldHVybiAwOworKwkJfQorKwlp ZiAoZHJiZ19zdGljaykKKysJCW1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0 aCk7CisrCS8qIENoZWNrIGFnYWluc3QgbGFzdCBibG9jazogZmFpbCBpZiBtYXRjaCAqLworKwlp ZiAoIW1lbWNtcChkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0RSQkdfU1RVQ0spOwor KwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCS8qIFNh dmUgbGFzdCBibG9jayBmb3IgbmV4dCBjb21wYXJpc29uICovCisrCW1lbWNweShkY3R4LT5sYiwg b3V0LCBkY3R4LT5ibG9ja2xlbmd0aCk7CisrCXJldHVybiAxOworKwl9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKKy0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcwkyMDEyLTAyLTA3IDEx OjA3OjAyLjU0NDM5MzczMiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX3JhbmQuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NDM5MzczMiArMDEwMAor QEAgLTAsMCArMSwxNzIgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3JhbmQuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19y YW5kX2xjbC5oIgorKworKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAgRFJCR3MgdG8gT3BlblNTTCBS QU5EX01FVEhPRCAqLworKworKy8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgZ2xvYmFsIFBSTkcg dXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2JhbAorKyAqIHZhcmlhYmxlIHRv IHN0b3JlIGNvbnRleHQuCisrICovCisrCisrc3RhdGljIERSQkdfQ1RYIG9zc2xfZGN0eDsKKysK KytEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpCisrCXsKKysJcmV0dXJuICZv c3NsX2RjdHg7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19ieXRlcyh1bnNpZ25lZCBj aGFyICpvdXQsIGludCBjb3VudCkKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7 CisrCWludCBydiA9IDA7CisrCXVuc2lnbmVkIGNoYXIgKmFkaW4gPSBOVUxMOworKwlzaXplX3Qg YWRpbmxlbiA9IDA7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWRvIAor KwkJeworKwkJc2l6ZV90IHJjbnQ7CisrCQlpZiAoY291bnQgPiAoaW50KWRjdHgtPm1heF9yZXF1 ZXN0KQorKwkJCXJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsKKysJCWVsc2UKKysJCQlyY250ID0g Y291bnQ7CisrCQlpZiAoZGN0eC0+Z2V0X2FkaW4pCisrCQkJeworKwkJCWFkaW5sZW4gPSBkY3R4 LT5nZXRfYWRpbihkY3R4LCAmYWRpbik7CisrCQkJaWYgKGFkaW5sZW4gJiYgIWFkaW4pCisrCQkJ CXsKKysJCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0JZVEVTLCBGSVBTX1JfRVJST1JfUkVU UklFVklOR19BRERJVElPTkFMX0lOUFVUKTsKKysJCQkJZ290byBlcnI7CisrCQkJCX0KKysJCQl9 CisrCQlydiA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBvdXQsIHJjbnQsIDAsIGFkaW4sIGFk aW5sZW4pOworKwkJaWYgKGFkaW4pCisrCQkJeworKwkJCWlmIChkY3R4LT5jbGVhbnVwX2FkaW4p CisrCQkJCWRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKKysJCQlhZGlu ID0gTlVMTDsKKysJCQl9CisrCQlpZiAoIXJ2KQorKwkJCWdvdG8gZXJyOworKwkJb3V0ICs9IHJj bnQ7CisrCQljb3VudCAtPSByY250OworKwkJfQorKwl3aGlsZSAoY291bnQpOworKwlydiA9IDE7 CisrCWVycjoKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4g cnY7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hhciAq b3V0LCBpbnQgY291bnQpCisrCXsKKysJaWYgKGZpcHNfZHJiZ19ieXRlcyhvdXQsIGNvdW50KSA8 PSAwKQorKwkJcmV0dXJuIC0xOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlw c19kcmJnX3N0YXR1cyh2b2lkKQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsK KysJaW50IHJ2OworKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlydiA9IGRj dHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEgOiAwOworKwlDUllQVE9fcl91bmxv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiBydjsKKysJfQorKworK3N0YXRpYyB2b2lk IGZpcHNfZHJiZ19jbGVhbnVwKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHggPSAmb3NzbF9k Y3R4OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwor Kwl9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQg c2VlZGxlbikKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWlmIChkY3R4 LT5yYW5kX3NlZWRfY2IpCisrCQlyZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNlZWQs IHNlZWRsZW4pOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Fk ZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbiwKKysJCQkJCWRvdWJsZSBhZGRfZW50cm9w eSkKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWlmIChkY3R4LT5yYW5k X2FkZF9jYikKKysJCXJldHVybiBkY3R4LT5yYW5kX2FkZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVu LCBhZGRfZW50cm9weSk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGNvbnN0IFJBTkRf TUVUSE9EIHJhbmRfZHJiZ19tZXRoID0KKysJeworKwlmaXBzX2RyYmdfc2VlZCwKKysJZmlwc19k cmJnX2J5dGVzLAorKwlmaXBzX2RyYmdfY2xlYW51cCwKKysJZmlwc19kcmJnX2FkZCwKKysJZmlw c19kcmJnX3BzZXVkbywKKysJZmlwc19kcmJnX3N0YXR1cworKwl9OworKworK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuICZyYW5kX2RyYmdf bWV0aDsKKysJfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDUzOTM3NDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxm dGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ1MzkzNzQwICswMTAwCitAQCAtMCwwICsxLDg2 MiBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfc2VsZnRlc3QuYyAqLworKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICov CisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgor KworKyNpbmNsdWRlICJmaXBzX2RyYmdfc2VsZnRlc3QuaCIKKysKKyt0eXBlZGVmIHN0cnVjdCB7 CisrCWludCBwb3N0OworKwlpbnQgbmlkOworKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisrCisrCS8q IEtBVCBkYXRhIGZvciBubyBQUiAqLworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7CisrCXNp emVfdCBlbnRsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOworKwlzaXplX3Qgbm9u Y2VsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnM7CisrCXNpemVfdCBwZXJzbGVuOwor Kwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluOworKwlzaXplX3QgYWRpbmxlbjsKKysJY29uc3Qg dW5zaWduZWQgY2hhciAqZW50cmVzZWVkOworKwlzaXplX3QgZW50cmVzZWVkbGVuOworKwljb25z dCB1bnNpZ25lZCBjaGFyICphZGlucmVzZWVkOworKwlzaXplX3QgYWRpbnJlc2VlZGxlbjsKKysJ Y29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7CisrCXNpemVfdCBhZGluMmxlbjsKKysJY29uc3Qg dW5zaWduZWQgY2hhciAqa2F0OworKwlzaXplX3Qga2F0bGVuOworKwljb25zdCB1bnNpZ25lZCBj aGFyICprYXQyOworKwlzaXplX3Qga2F0MmxlbjsKKysKKysJLyogS0FUIGRhdGEgZm9yIFBSICov CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudF9wcjsKKysJc2l6ZV90IGVudGxlbl9wcjsKKysJ Y29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2VfcHI7CisrCXNpemVfdCBub25jZWxlbl9wcjsKKysJ Y29uc3QgdW5zaWduZWQgY2hhciAqcGVyc19wcjsKKysJc2l6ZV90IHBlcnNsZW5fcHI7CisrCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5fcHI7CisrCXNpemVfdCBhZGlubGVuX3ByOworKwljb25z dCB1bnNpZ25lZCBjaGFyICplbnRwcl9wcjsKKysJc2l6ZV90IGVudHBybGVuX3ByOworKwljb25z dCB1bnNpZ25lZCBjaGFyICphZGluZ19wcjsKKysJc2l6ZV90IGFkaW5nbGVuX3ByOworKwljb25z dCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOworKwlzaXplX3QgZW50Z2xlbl9wcjsKKysJY29uc3Qg dW5zaWduZWQgY2hhciAqa2F0X3ByOworKwlzaXplX3Qga2F0bGVuX3ByOworKwljb25zdCB1bnNp Z25lZCBjaGFyICprYXQyX3ByOworKwlzaXplX3Qga2F0Mmxlbl9wcjsKKysKKysJfSBEUkJHX1NF TEZURVNUX0RBVEE7CisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgZmxhZywg cHIsIHApIHtwLCBuaWQsIGZsYWcgfCBEUkJHX0ZMQUdfVEVTVCwgXAorKwlwciMjX2VudHJvcHlp bnB1dCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0KSwgXAorKwlwciMjX25vbmNlLCBzaXplb2Yo cHIjI19ub25jZSksIFwKKysJcHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMj X3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXQsIHNpemVv ZihwciMjX2FkZGl0aW9uYWxpbnB1dCksIFwKKysJcHIjI19lbnRyb3B5aW5wdXRyZXNlZWQsIHNp emVvZihwciMjX2VudHJvcHlpbnB1dHJlc2VlZCksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXRy ZXNlZWQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dHJlc2VlZCksIFwKKysJcHIjI19hZGRp dGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQyKSwgXAorKwlwciMjX2lu dF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX2ludF9yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNf cmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNfcHJfZW50 cm9weWlucHV0LCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXQpLCBcCisrCXByIyNfcHJfbm9u Y2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAorKwlwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZywgc2l6ZW9mKHByIyNfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAorKwlwciMjX3By X2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0KSwgXAorKwlw ciMjX3ByX2VudHJvcHlpbnB1dHByLCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRwciksIFwK KysJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFsaW5w dXQyKSwgXAorKwlwciMjX3ByX2VudHJvcHlpbnB1dHByMiwgc2l6ZW9mKHByIyNfcHJfZW50cm9w eWlucHV0cHIyKSwgXAorKwlwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3By X2ludF9yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNfcHJfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIj I19wcl9yZXR1cm5lZGJpdHMpLCBcCisrCX0KKysKKysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2Rh dGFfZGYobmlkLCBwciwgcCkgXAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgRFJCR19GTEFH X0NUUl9VU0VfREYsIHByLCBwKQorKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YV9lYyhj dXJ2ZSwgbWQsIHByLCBwKSBcCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoKGN1cnZlIDw8IDE2KSB8 IG1kICwgMCwgcHIsIHApCisrCisrc3RhdGljIERSQkdfU0VMRlRFU1RfREFUQSBkcmJnX3Rlc3Rb XSA9IHsKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzEyOF9jdHIsIGFlc18xMjhf dXNlX2RmLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzE5Ml9jdHIsIGFl c18xOTJfdXNlX2RmLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzI1Nl9j dHIsIGFlc18yNTZfdXNlX2RmLCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzEy OF9jdHIsIDAsIGFlc18xMjhfbm9fZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9h ZXNfMTkyX2N0ciwgMCwgYWVzXzE5Ml9ub19kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX2Flc18yNTZfY3RyLCAwLCBhZXNfMjU2X25vX2RmLCAxKSwKKysJbWFrZV9kcmJnX3Rlc3Rf ZGF0YShOSURfc2hhMSwgMCwgc2hhMSwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3No YTIyNCwgMCwgc2hhMjI0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMjU2LCAw LCBzaGEyNTYsIDEpLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEzODQsIDAsIHNoYTM4 NCwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTUxMiwgMCwgc2hhNTEyLCAwKSwK KysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEExLCAwLCBobWFjX3NoYTEsIDAp LAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTIyNCwgMCwgaG1hY19zaGEy MjQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTI1NiwgMCwgaG1h Y19zaGEyNTYsIDEpLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTM4NCwg MCwgaG1hY19zaGEzODQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNI QTUxMiwgMCwgaG1hY19zaGE1MTIsIDApLAorKwl7MCwwLDB9CisrCX07CisrCisrdHlwZWRlZiBz dHJ1Y3QgCisrCXsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50OworKwlzaXplX3QgZW50bGVu OworKwlpbnQgZW50Y250OworKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZTsKKysJc2l6ZV90 IG5vbmNlbGVuOworKwlpbnQgbm9uY2VjbnQ7CisrCX0gVEVTVF9FTlQ7CisrCisrc3RhdGljIHNp emVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5f bGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRf YXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7CisrCXQt PmVudGNudCsrOworKwlyZXR1cm4gdC0+ZW50bGVuOworKwl9CisrCisrc3RhdGljIHNpemVfdCB0 ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6 ZV90IG1heF9sZW4pCisrCXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRh KGRjdHgpOworKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7CisrCXQtPm5vbmNl Y250Kys7CisrCXJldHVybiB0LT5ub25jZWxlbjsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19k cmJnX3NpbmdsZV9rYXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCisr CQkJCQkJCQlpbnQgcXVpY2spCisrCXsKKysJVEVTVF9FTlQgdDsKKysJaW50IHJ2ID0gMDsKKysJ c2l6ZV90IGFkaW5sZW47CisrCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsKKysKKysJLyog SW5pdGlhbCB0ZXN0IHdpdGhvdXQgUFIgKi8KKysKKysJLyogSW5zdGFudGlhdGUgRFJCRyB3aXRo IHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgorKwkgKiBzdHJpbmcuCisr CSAqLworKworKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykp CisrCQlyZXR1cm4gMDsKKysJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0 X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCUZJUFNf ZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOworKworKwl0LmVudCA9IHRkLT5lbnQ7CisrCXQu ZW50bGVuID0gdGQtPmVudGxlbjsKKysJdC5ub25jZSA9IHRkLT5ub25jZTsKKysJdC5ub25jZWxl biA9IHRkLT5ub25jZWxlbjsKKysJdC5lbnRjbnQgPSAwOworKwl0Lm5vbmNlY250ID0gMDsKKysK KysJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVu KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFk ZGl0aW9uYWwgaW5wdXQgdmFsdWVzCisrCSAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVu Z3RoOiBzbyByZWR1Y2UgYWRpbmxlbgorKwkgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRh dGEgaXMgZmVkIGluLgorKwkgKi8KKysJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1Rf RFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCisrCQlhZGlubGVuID0gdGQtPmFkaW5s ZW4gLyAyOworKwllbHNlCisrCQlhZGlubGVuID0gdGQtPmFkaW5sZW47CisrCisrCS8qIEdlbmVy YXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICov CisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAs CisrCQkJCXRkLT5hZGluLCBhZGlubGVuKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21w KHJhbmRvdXQsIHRkLT5rYXQsIHRkLT5rYXRsZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUpOworKwkJZ290 byBlcnIyOworKwkJfQorKwkvKiBJZiBhYmJyZXZpYXRlZCBQT1NUIGVuZCBvZiB0ZXN0ICovCisr CWlmIChxdWljaykKKysJCXsKKysJCXJ2ID0gMTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBS ZXNlZWQgRFJCRyB3aXRoIHRlc3QgZW50cm9weSBhbmQgYWRkaXRpb25hbCBpbnB1dCAqLworKwl0 LmVudCA9IHRkLT5lbnRyZXNlZWQ7CisrCXQuZW50bGVuID0gdGQtPmVudHJlc2VlZGxlbjsKKysK KysJaWYgKCFGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlucmVzZWVkLCB0ZC0+YWRpbnJl c2VlZGxlbikpCisrCQlnb3RvIGVycjsKKysKKysJLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQg dmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRhdGEgKi8KKysJaWYgKCFGSVBTX2RyYmdf Z2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW4sIDAsCisrCQkJCXRkLT5hZGluMiwg dGQtPmFkaW4ybGVuKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRk LT5rYXQyLCB0ZC0+a2F0MmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf U0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRSk7CisrCQlnb3RvIGVycjI7Cisr CQl9CisrCisrCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOworKworKwkvKiBOb3cgdGVz dCB3aXRoIFBSICovCisrCisrCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHks IG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KKysJICogc3RyaW5nLgorKwkgKi8KKysJaWYgKCFG SVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7Cisr CWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0 ZXN0X25vbmNlLCAwKSkKKysJCXJldHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRh KGRjdHgsICZ0KTsKKysKKysJdC5lbnQgPSB0ZC0+ZW50X3ByOworKwl0LmVudGxlbiA9IHRkLT5l bnRsZW5fcHI7CisrCXQubm9uY2UgPSB0ZC0+bm9uY2VfcHI7CisrCXQubm9uY2VsZW4gPSB0ZC0+ bm9uY2VsZW5fcHI7CisrCXQuZW50Y250ID0gMDsKKysJdC5ub25jZWNudCA9IDA7CisrCisrCWlm ICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzX3ByLCB0ZC0+cGVyc2xlbl9w cikpCisrCQlnb3RvIGVycjsKKysKKysJLyogTm93IGdlbmVyYXRlIHdpdGggUFI6IHdlIG5lZWQg dG8gc3VwcGx5IGVudHJvcHkgYXMgdGhpcyB3aWxsCisrCSAqIHBlcmZvcm0gYSByZXNlZWQgb3Bl cmF0aW9uLiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KKysJICovCisrCisr CXQuZW50ID0gdGQtPmVudHByX3ByOworKwl0LmVudGxlbiA9IHRkLT5lbnRwcmxlbl9wcjsKKysK KysJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVl cworKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5s ZW4KKysJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KKysJICov CisrCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZk Y3R4LT5pZmxhZ3MpKQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByIC8gMjsKKysJZWxzZQor KwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShk Y3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3ByLCAxLAorKwkJCQl0ZC0+YWRpbl9wciwgYWRpbmxl bikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0X3ByLCB0 ZC0+a2F0bGVuX3ByKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVf S0FULCBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSk7CisrCQlnb3RvIGVycjI7CisrCQl9CisrCisr CS8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3aXRoIFBSOiBzdXBwbHkgbmV3IGVudHJvcHkgYWdhaW4u CisrCSAqIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgorKwkgKi8KKysKKysJ dC5lbnQgPSB0ZC0+ZW50Z19wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50Z2xlbl9wcjsKKysKKysJ aWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW5fcHIsIDEs CisrCQkJCXRkLT5hZGluZ19wciwgdGQtPmFkaW5nbGVuX3ByKSkKKysJCWdvdG8gZXJyOworKwor KwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyX3ByLCB0ZC0+a2F0Mmxlbl9wcikpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1Qy X0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQorKwkvKiBBbGwgT0ssIHRlc3QgY29tcGxl dGUgKi8KKysJcnYgPSAxOworKworKwllcnI6CisrCWlmIChydiA9PSAwKQorKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwll cnIyOgorKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysJCisrCXJldHVybiBydjsK KysKKysJfQorKworKy8qIEluaXRpYWxpc2UgYSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEg Ki8KKysKKytzdGF0aWMgaW50IGRvX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxG VEVTVF9EQVRBICp0ZCwgVEVTVF9FTlQgKnQpCisrCXsKKysKKysJaWYgKCFGSVBTX2RyYmdfaW5p dChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghRklQ U19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNl LCAwKSkKKysJCXJldHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsIHQp OworKworKwl0LT5lbnQgPSB0ZC0+ZW50OworKwl0LT5lbnRsZW4gPSB0ZC0+ZW50bGVuOworKwl0 LT5ub25jZSA9IHRkLT5ub25jZTsKKysJdC0+bm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrCXQt PmVudGNudCA9IDA7CisrCXQtPm5vbmNlY250ID0gMDsKKysJcmV0dXJuIDE7CisrCX0KKysKKysv KiBJbml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEg Ki8KKytzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsIERSQkdf U0VMRlRFU1RfREFUQSAqdGQsCisrCQkJCQkJCQlURVNUX0VOVCAqdCkKKysJeworKwlpZiAoIWRv X2RyYmdfaW5pdChkY3R4LCB0ZCwgdCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKKysJCXJldHVybiAwOwor KworKwlyZXR1cm4gMTsKKysJfQorKworKy8qIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgZXh0ZW5z aXZlIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVkIGJ5IFNQODAwLTkwLgorKyAqIEluZHVjZSBz ZXZlcmFsIGZhaWx1cmUgbW9kZXMgYW5kIGNoZWNrIGFuIGVycm9yIGNvbmRpdGlvbiBpcyBzZXQu CisrICogVGhpcyBmdW5jdGlvbiBhbG9uZyB3aXRoIGZpcHNfZHJiZ19zaW5nbGVfa2F0IHBlZm9y bXMgdGhlIGhlYWx0aCBjaGVja2luZworKyAqIG9wZXJhdGlvbi4KKysgKi8KKysKKytzdGF0aWMg aW50IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9E QVRBICp0ZCkKKysJeworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrCVRFU1RfRU5U IHQ7CisrCXNpemVfdCBpOworKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXJfdG1wOworKwl1 bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKilkY3R4OworKworKwkvKiBJbml0aWFs aXNlIERSQkcgKi8KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCWdv dG8gZXJyOworKworKwkvKiBEb24ndCByZXBvcnQgaW5kdWNlZCBlcnJvcnMgKi8KKysJZGN0eC0+ aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJLyogUGVyc29uYWxpc2F0aW9uIHN0cmlu ZyB0ZXN0cyAqLworKworKwkvKiBUZXN0IGRldGVjdGlvbiBvZiB0b28gbGFyZ2UgcGVyc29ubGlz YXRpb24gc3RyaW5nICovCisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQt PnBlcnMsIGRjdHgtPm1heF9wZXJzICsgMSkgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVU RUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIEVudHJvcHkgc291cmNlIHRlc3Rz ICovCisrCisrCS8qIFRlc3QgZW50cm9weSBzb3VyY2UgZmFpbHVyZSBkZXRlY2lvbjogaS5lLiBy ZXR1cm5zIG5vIGRhdGEgKi8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlpZiAoRklQU19kcmJn X2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJP Ul9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUcnkgdG8gZ2VuZXJh dGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQgRFJCRyAqLworKwlpZiAoRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+ YWRpbmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQor KworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7Cisr CQl9CisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsK KysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJLyogVGVzdCBpbnN1 ZmZpY2llbnQgZW50cm9weSAqLworKworKwl0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0g MTsKKysKKysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBl cnNsZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0K KysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJn X3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOwor KwkJfQorKworKwkvKiBUZXN0IHRvbyBtdWNoIGVudHJvcHkgKi8KKysKKysJaWYgKCFkb19kcmJn X2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0g RFJCR19GTEFHX05PRVJSOworKworKwl0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsK KysKKysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNs ZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysK KysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKworKwkvKiBOb25jZSB0ZXN0cyAqLworKworKwkvKiBUZXN0IHRvbyBzbWFsbCBub25jZSAq LworKworKwlpZiAoZGN0eC0+bWluX25vbmNlKQorKwkJeworKworKwkJaWYgKCFkb19kcmJnX2lu aXQoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysKKysJCWRjdHgtPmlmbGFncyB8PSBE UkJHX0ZMQUdfTk9FUlI7CisrCisrCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWluX25vbmNlIC0gMTsK KysKKysJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJz bGVuKSA+IDApCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0K KysKKysJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwkJaWYgKCFGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQkJZ290byBl cnI7CisrCQkJfQorKworKwkJfQorKworKwkvKiBUZXN0IHRvbyBsYXJnZSBub25jZSAqLworKwor KwlpZiAoZGN0eC0+bWF4X25vbmNlKQorKwkJeworKworKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysKKysJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZM QUdfTk9FUlI7CisrCisrCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWF4X25vbmNlICsgMTsKKysKKysJ CWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+ IDApCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJ CWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwkJaWYgKCFGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQkJZ290byBlcnI7Cisr CQkJfQorKworKwkJfQorKworKwkvKiBJbnN0YW50aWF0ZSB3aXRoIHZhbGlkIGRhdGEuICovCisr CWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOwor KworKwkvKiBDaGVjayBnZW5lcmF0aW9uIGlzIG5vdyBPSyAqLworKwlpZiAoIUZJUFNfZHJiZ19n ZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQt PmFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdf Tk9FUlI7CisrCisrCS8qIFJlcXVlc3QgdG9vIG11Y2ggZGF0YSBmb3Igb25lIHJlcXVlc3QgKi8K KysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCBkY3R4LT5tYXhfcmVxdWVz dCArIDEsIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJP Ul9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUcnkgdG9vIGxhcmdl IGFkZGl0aW9uYWwgaW5wdXQgKi8KKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5k b3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSkK KysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FE RElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysK KysJLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9w eSBzb3VyY2UKKysJICogZmFpbHVyZS4KKysJICovCisrCisrCXQuZW50bGVuID0gMDsKKysKKysJ aWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAxLAorKwkJ CQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdv dG8gZXJyOworKwkJfQorKwkJCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwor KwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7 CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysKKysJLyogSW5zdGFudGlhdGUgYWdhaW4gd2l0aCB2 YWxpZCBkYXRhICovCisrCisrCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQp KQorKwkJCWdvdG8gZXJyOworKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCisrCS8q IFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKwlyZXNlZWRfY291bnRlcl90bXAgPSBk Y3R4LT5yZXNlZWRfY291bnRlcjsKKysJLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBp bnRlcnZhbCAqLworKwlkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZh bDsKKysKKysJLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJl cXVlc3RlZCBmb3IgcmVzZWVkICovCisrCXQuZW50Y250ID0gMDsKKysJaWYgKCFGSVBTX2RyYmdf Z2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRk LT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOworKwlpZiAodC5lbnRjbnQgIT0gMSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9U X1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBDaGVjayBy ZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLworKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50 ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysJCWdv dG8gZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJ aWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwor KwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIENoZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSBy ZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrCSAqIGZhaWx1cmUuCisrCSAqLworKwor Kwl0LmVudGxlbiA9IDA7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Cisr CWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysJ CQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQln b3RvIGVycjsKKysJCX0KKysJCQorKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsK KysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJS T1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCisrCWlmICghZG9fZHJiZ19pbnN0YW50aWF0 ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOworKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVy IHdvcmtzICovCisrCS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKwlyZXNlZWRf Y291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKKysJLyogU2V0IHJlc2VlZCBjb3Vu dGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLworKwlkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgt PnJlc2VlZF9pbnRlcnZhbDsKKysKKysJLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRy b3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCisrCXQuZW50Y250ID0gMDsKKysJ aWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJ CQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOworKwlpZiAodC5lbnRjbnQg IT0gMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLworKwlpZiAoZGN0 eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVS X0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdf RkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFO VElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIEV4cGxpY2l0IHJlc2Vl ZCB0ZXN0cyAqLworKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsYXJnZSBh ZGRpdGlvbmFsIGlucHV0ICovCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisr CQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJ aWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkg PiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIGVudHJvcHkgc291cmNlIGZhaWx1 cmUgKi8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4 LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4 KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIFRlc3Qg ZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIG11Y2ggZW50cm9weSAqLworKworKwlpZiAoIWRvX2Ry YmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8 PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCXQuZW50bGVuID0gZGN0eC0+bWF4X2VudHJvcHkgKyAx OworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4p ID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJ aWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwor KwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9v IGxpdHRsZSBlbnRyb3B5ICovCisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkp CisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysK KysJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7CisrCisrCWlmIChGSVBTX2RyYmdf cmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRF VEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIUZJUFNfZHJiZ191bmluc3Rh bnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysK KysJcCA9ICh1bnNpZ25lZCBjaGFyICopJmRjdHgtPmQ7CisrCS8qIFN0YW5kYXJkIHNheXMgd2Ug aGF2ZSB0byBjaGVjayB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMKKysJICogdGhlIGRhdGEu Li4KKysJICovCisrCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGN0eC0+ZCk7IGkrKykKKysJCXsK KysJCWlmICgqcCAhPSAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IpOworKwkJCWdvdG8g ZXJyOworKwkJCX0KKysJCXArKzsKKysJCX0KKysKKysJcmV0dXJuIDE7CisrCisrCWVycjoKKysJ LyogQSByZWFsIGVycm9yIGFzIG9wcG9zZWQgdG8gYW4gaW5kdWNlZCBvbmU6IHVuZGVybHlpbmcg ZnVuY3Rpb24gd2lsbAorKwkgKiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisrCSAqLworKwlpZiAoIShk Y3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRlVOQ1RJT05fRVJST1IpOworKwlGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KTsKKysJcmV0dXJuIDA7CisrCisrCX0KKysKKytpbnQgZmlwc19kcmJn X2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKQorKwl7Cisr CURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7CisrCWZsYWdzIHw9IERSQkdfRkxBR19URVNUOworKwlm b3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCisrCQl7CisrCQlpZiAodGQt Pm5pZCA9PSBuaWQgJiYgdGQtPmZsYWdzID09IGZsYWdzKQorKwkJCXsKKysJCQlpZiAoIWZpcHNf ZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJcmV0dXJu IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCk7CisrCQkJfQorKwkJfQorKwlyZXR1cm4g MDsKKysJfQorKworK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KQor Kwl7CisrCWludCBydjsKKysJRFJCR19DVFggKnRjdHggPSBOVUxMOworKwl0Y3R4ID0gRklQU19k cmJnX25ldygwLCAwKTsKKysJZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIGRjdHgt PnR5cGUsICZkY3R4LT54ZmxhZ3MpOworKwlpZiAoIXRjdHgpCisrCQlyZXR1cm4gMDsKKysJcnYg PSBmaXBzX2RyYmdfa2F0KHRjdHgsIGRjdHgtPnR5cGUsIGRjdHgtPnhmbGFncyk7CisrCWlmICh0 Y3R4KQorKwkJRklQU19kcmJnX2ZyZWUodGN0eCk7CisrCWlmIChydikKKysJCWZpcHNfcG9zdF9z dWNjZXNzKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysJZWxz ZQorKwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgt PnhmbGFncyk7CisrCWlmICghcnYpCisrCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJP UjsKKysJZWxzZQorKwkJZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7CisrCXJldHVybiBydjsK KysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkKKysJeworKwlEUkJHX0NUWCAq ZGN0eDsKKysJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysJaW50IHJ2ID0gMTsKKysJZGN0eCA9 IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrCWlmICghZGN0eCkKKysJCXJldHVybiAwOworKwlmb3Ig KHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCisrCQl7CisrCQlpZiAodGQtPnBv c3QgIT0gMSkKKysJCQljb250aW51ZTsKKysJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19U RVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJldHVybiAxOworKwkJaWYgKCFm aXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMSkpCisrCQkJeworKwkJCWZpcHNfcG9zdF9m YWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0gMDsK KysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVT VF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJRklQ U19kcmJnX2ZyZWUoZGN0eCk7CisrCXJldHVybiBydjsKKysJfQorKworKworK2ludCBGSVBTX3Nl bGZ0ZXN0X2RyYmdfYWxsKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHg7CisrCURSQkdfU0VM RlRFU1RfREFUQSAqdGQ7CisrCWludCBydiA9IDE7CisrCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAs IDApOworKwlpZiAoIWRjdHgpCisrCQlyZXR1cm4gMDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsg dGQtPm5pZCAhPSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBT X1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCisrCQkJcmV0dXJuIDE7CisrCQlpZiAo IWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKKysJCQl7CisrCQkJZmlwc19wb3N0 X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7CisrCQkJcnYgPSAw OworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmICghZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRj dHgsIHRkKSkKKysJCQl7CisrCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQt Pm5pZCwgJnRkLT5mbGFncyk7CisrCQkJcnYgPSAwOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJ CWlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+Zmxh Z3MpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysJcmV0 dXJuIHJ2OworKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX2RyYmdfc2VsZnRlc3QuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NjM5Mzc0 OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3Nl bGZ0ZXN0LmgJMjAxMi0wMi0wNyAxMTowNzowMi41NDYzOTM3NDggKzAxMDAKK0BAIC0wLDAgKzEs MjMzNSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmUub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKiBTZWxmdGVzdCBhbmQgaGVhbHRoIGNo ZWNrIGRhdGEgZm9yIHRoZSBTUDgwMC05MCBEUkJHICovCisrCisrI2RlZmluZSBfX2ZpcHNfY29u c3RzZWcKKysKKysvKiBBRVMtMTI4IHVzZSBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHg2MSwweDUyLDB4N2MsMHhlMywweDIzLDB4N2QsMHgwYSwweDA3LDB4MTAs MHgwYywweDUwLDB4MzMsCisrCTB4YzgsMHhkYiwweGZmLDB4MTIKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9u b25jZVtdID0KKysJeworKwkweDUxLDB4MGQsMHg4NSwweDc3LDB4ZWQsMHgyMiwweDk3LDB4MjgK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg1OSww eDlmLDB4YmIsMHhjZCwweGQ1LDB4MjUsMHg2OSwweGI1LDB4Y2IsMHhiNSwweDAzLDB4ZmUsCisr CTB4ZDcsMHhkNywweDAxLDB4NjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 CisrCXsKKysJMHhlZiwweDg4LDB4NzYsMHgwMSwweGFmLDB4M2MsMHhmZSwweDhiLDB4YWYsMHgy NiwweDA2LDB4OWUsCisrCTB4OWEsMHg0NywweDA4LDB4NzYKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0KKysJeworKwkweGUyLDB4NzYsMHhmOSwweGY2LDB4M2EsMHhiYSwweDEw LDB4OWYsMHhiZiwweDQ3LDB4MGUsMHg1MSwKKysJMHgwOSwweGZiLDB4YTMsMHhiNgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkNCwweDk4LDB4OGEsMHg0 NiwweDgwLDB4NGMsMHhkYiwweGEzLDB4NTksMHgwMiwweDU3LDB4NTIsCisrCTB4NjYsMHgxYyww eGVhLDB4NWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 ODgsMHg4YywweDkxLDB4ZDYsMHhiZSwweDU2LDB4NmUsMHgwOCwweDlhLDB4NjIsMHgyYiwweDEx LAorKwkweDNmLDB4NWUsMHgzMSwweDA2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHIy W10gPQorKwl7CisrCTB4YzAsMHg1YywweDZiLDB4OTgsMHgwMSwweDBkLDB4NTgsMHgxOCwweDUx LDB4MTgsMHg5NiwweGFlLAorKwkweGE3LDB4ZTMsMHhhOCwweDY3CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4Y2YsMHgwMSwweGFjLDB4MjIsMHgzMSwweDA2LDB4 OGUsMHhmYywweGNlLDB4NTYsMHhlYSwweDI0LAorKwkweDBmLDB4MzgsMHg0MywweGM2CisrCX07 CisrCisrCisrLyogQUVTLTEyOCB1c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0W10g PQorKwl7CisrCTB4MWYsMHg4ZSwweDM0LDB4ODIsMHgwYywweGI3LDB4YmUsMHhjNSwweDAxLDB4 M2UsMHhkMCwweGEzLAorKwkweDlkLDB4N2QsMHgxYywweDliCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfbm9uY2Vb XSA9CisrCXsKKysJMHhkNSwweDRkLDB4YmQsMHg0YSwweDkzLDB4N2YsMHhiOCwweDk2CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4YWIsMHhkNiwweDNm LDB4MDQsMHhmZSwweDI3LDB4NmIsMHgyZCwweGQ3LDB4YzMsMHgxYywweGYzLAorKwkweDM4LDB4 NjYsMHhiYSwweDFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4 ZmUsMHhmNCwweDA5LDB4YTgsMHhiNywweDczLDB4MjcsMHg5YywweDVmLDB4YTcsMHhlYSwweDQ2 LAorKwkweGI1LDB4ZTIsMHhiMiwweDQxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfaW50X3JldHVybmVkYml0c1td ID0KKysJeworKwkweDQyLDB4ZTQsMHg0ZSwweDdiLDB4MjcsMHhkZCwweGNiLDB4YmMsMHgwYSww eGNmLDB4YTYsMHg2NywKKysJMHhlNywweDU3LDB4MTEsMHhiNAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJv cHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDE0LDB4MjYsMHg2OSwweGQ5LDB4ZjMsMHg2NSww eDAzLDB4ZDYsMHg2YiwweGI5LDB4NDQsMHgwYiwKKysJMHhjNywweGM0LDB4OWUsMHgzOQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDU1LDB4MmUsMHg2 MCwweDlhLDB4MDUsMHg3MiwweDhhLDB4YTgsMHhlZiwweDIyLDB4ODEsMHg1YSwKKysJMHhjOCww eDkzLDB4ZmEsMHg4NAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJ MHgzYywweDQwLDB4YzgsMHhjNCwweDE2LDB4MGMsMHgyMSwweGE0LDB4MzcsMHgyYywweDhmLDB4 YTUsCisrCTB4MDYsMHgwYywweDE1LDB4MmMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHhlMSwweDNlLDB4OTksMHg5OCwweDg2LDB4NjcsMHgwYiwweDYzLDB4N2IsMHhi ZSwweDNmLDB4ODgsCisrCTB4NDYsMHg4MSwweGM3LDB4MTkKKysJfTsKKysKKysKKysvKiBBRVMt MTkyIHVzZSBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgyYiww eDRlLDB4OGIsMHhlMSwweGYxLDB4MzQsMHg4MCwweDU2LDB4ODEsMHhmOSwweDc0LDB4ZWMsCisr CTB4MTcsMHg0NCwweDJhLDB4ZjEsMHgxNCwweGIwLDB4YmYsMHg5NywweDM5LDB4YjcsMHgwNCww eDdkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhkNiwweDlkLDB4ZWIsMHgx NCwweDRlLDB4NmMsMHgzMCwweDFlLDB4MzksMHg1NSwweDczLDB4ZDAsCisrCTB4ZDEsMHg4MCww eDc4LDB4ZmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHhmYywweDQzLDB4NGEsMHhmOCwweDlhLDB4NTUsMHhiMywweDUzLDB4ODMsMHhlMiwweDE4 LDB4MTYsCisrCTB4MGMsMHhkYywweGNkLDB4NWUsMHg0ZiwweGEwLDB4MDMsMHgwMSwweDJiLDB4 OWYsMHhlNCwweGQ1LAorKwkweDdkLDB4NDksMHhmMCwweDQxLDB4OWUsMHgzZCwweDk5LDB4MDQK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg1ZSwweDlmLDB4 NDksMHg2ZiwweDIxLDB4OGIsMHgxZCwweDMyLDB4ZDUsMHg4NCwweDVjLDB4YWMsCisrCTB4YWYs MHhkZiwweGU0LDB4NzksMHg5ZSwweGFmLDB4YTksMHg4MiwweGQwLDB4ZjgsMHg0ZiwweGNiLAor KwkweDY5LDB4MTAsMHgwYSwweDdlLDB4ODEsMHg1NywweGI1LDB4MzYKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9w cl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweGQ0LDB4ODEsMHgwYywweGQ3LDB4NjYsMHgz OSwweGVjLDB4NDIsMHg1MywweDg3LDB4NDEsMHhhNSwKKysJMHgxZSwweDdkLDB4ODAsMHg5MSww eDhlLDB4YmIsMHhlZCwweGFjLDB4MTQsMHgwMiwweDFhLDB4ZDUKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9p bnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZGYsMHgxZCwweDM5LDB4NDUsMHg3YywweDli LDB4YzYsMHgyYiwweDdkLDB4OGMsMHg5MywweGU5LAorKwkweDE5LDB4MzAsMHg2YiwweDY3Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDAwLDB4NzEsMHgy NywweDRlLDB4ZDMsMHgxNCwweGYxLDB4MjAsMHg3ZiwweDRhLDB4NDEsMHgzMiwKKysJMHgyYSww eDk3LDB4MTEsMHg0MywweDhmLDB4NGEsMHgxNSwweDdiLDB4OWIsMHg1MSwweDc5LDB4ZGEsCisr CTB4NDksMHgzZCwweGRlLDB4ZTgsMHhiYywweDkzLDB4OTEsMHg5OQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3By X2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDkwLDB4ZWUsMHg3NiwweGExLDB4NDUsMHg4 ZCwweGI3LDB4NDAsMHhiMCwweDExLDB4YmYsMHhkMCwKKysJMHg2NSwweGQ3LDB4M2MsMHg3Yyww eDRmLDB4MjAsMHgzZiwweDRlLDB4MTEsMHg5ZCwweGIzLDB4NWUKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyNCwweDNiLDB4MjAsMHhhNCwweDM3LDB4NjYsMHhi YSwweDcyLDB4MzksMHgzZiwweGNmLDB4M2MsCisrCTB4N2UsMHgxYSwweDJiLDB4ODMKKysJfTsK KysKKysKKysvKiBBRVMtMTkyIHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9 CisrCXsKKysJMHg4ZCwweDc0LDB4YTQsMHg1MCwweDFhLDB4MDIsMHg2OCwweDBjLDB4MmEsMHg2 OSwweGM0LDB4ODIsCisrCTB4M2IsMHhiYiwweGRhLDB4MGUsMHg3ZiwweDc3LDB4YTMsMHgxNyww eDc4LDB4NTcsMHhiMiwweDdiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfbm9uY2VbXSA9CisrCXsKKysJMHg3NSww eGQ1LDB4MWYsMHhhYywweGE0LDB4OGQsMHg0MiwweDc4LDB4ZDcsMHg2OSwweDg2LDB4OWQsCisr CTB4NzcsMHhkNywweDQxLDB4MGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9CisrCXsKKysJMHg0ZSwweDMzLDB4NDEsMHgzYywweDljLDB4YzIsMHhkMiwweDUzLDB4YWYs MHg5MCwweGVhLDB4Y2YsCisrCTB4MTksMHg1MCwweDFlLDB4ZTYsMHg2ZiwweDYzLDB4YzgsMHgz MiwweDIyLDB4ZGMsMHgwNywweDY1LAorKwkweDljLDB4ZDMsMHhmOCwweDMwLDB4OWUsMHhlZCww eDM1LDB4NzAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg1ZCww eDhiLDB4OGMsMHhjMSwweGRmLDB4MGUsMHgwMiwweDc4LDB4ZmIsMHgxOSwweGI4LDB4NjksCisr CTB4NzgsMHg0ZSwweDljLDB4NTIsMHhiYywweGM3LDB4MjAsMHhjOSwweGU2LDB4NWUsMHg3Nyww eDIyLAorKwkweDI4LDB4M2QsMHgwYywweDllLDB4NjgsMHhhOCwweDQ1LDB4ZDcKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3Vz ZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZDUsMHhlNywweDA4LDB4YzUsMHgx OSwweDk5LDB4ZDUsMHgzMSwweDAzLDB4MGEsMHg3NCwweGI2LAorKwkweGI3LDB4ZWQsMHhlOSww eGVhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OWMsMHgy NiwweGRhLDB4ZjEsMHhhYywweGQ5LDB4NWEsMHhkNiwweGE4LDB4NjUsMHhmNSwweDAyLAorKwkw eDhmLDB4ZGMsMHhhMiwweDA5LDB4NTQsMHhhNiwweGUyLDB4YTQsMHhkZSwweDMyLDB4ZTAsMHgw MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDliLDB4 OTAsMHhiMCwweDNhLDB4MGUsMHgzYSwweDgwLDB4MDcsMHg0YSwweGY0LDB4ZGEsMHg3NiwKKysJ MHgyOCwweDMwLDB4M2MsMHhlZSwweDU0LDB4MWIsMHg5NCwweDU5LDB4NTEsMHg0MywweDU2LDB4 NzcsCisrCTB4YWYsMHg4OCwweGRkLDB4NjMsMHg4OSwweDQ3LDB4MDYsMHg2NQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgzYywweDExLDB4NjQsMHg3YSwweDk2 LDB4ZjUsMHhkOCwweGI4LDB4YWUsMHhkNiwweDcwLDB4NGUsCisrCTB4MTYsMHg5NiwweGRlLDB4 ZTksMHg2MiwweGJjLDB4ZWUsMHgyOCwweDJmLDB4MjYsMHhhNiwweGYwLAorKwkweDU2LDB4ZWYs MHhhMywweGYxLDB4NmIsMHhhMSwweGIxLDB4NzcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHgwYiwweGUyLDB4NTYsMHgwMywweDFlLDB4ZGIsMHgyYywweDZkLDB4N2Ys MHgxYiwweDE1LDB4NTgsCisrCTB4MWEsMHhmOSwweDEzLDB4MjgKKysJfTsKKysKKysKKysvKiBB RVMtMjU2IHVzZSBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2 MSwweDY4LDB4ZmMsMHgxYSwweGYwLDB4YjUsMHg5NSwweDZiLDB4ODUsMHgwOSwweDliLDB4NzQs CisrCTB4M2YsMHgxMywweDc4LDB4NDksMHgzYiwweDg1LDB4ZWMsMHg5MywweDEzLDB4M2IsMHhh OSwweDRmLAorKwkweDk2LDB4YWIsMHgyYywweGU0LDB4YzgsMHg4ZiwweGRkLDB4NmEKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X3VzZV9kZl9wcl9ub25jZVtdID0KKysJeworKwkweGFkLDB4ZDIsMHhiYiwweGJhLDB4YjcsMHg2 NSwweDg5LDB4YzMsMHgyMSwweDZjLDB4NTUsMHgzMywKKysJMHgyYiwweDM2LDB4ZmYsMHhhNAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDZlLDB4 Y2EsMHhlNywweDIwLDB4NzIsMHhkMywweDg0LDB4NWEsMHgzMiwweGQzLDB4NGIsMHgyNCwKKysJ MHg3MiwweGM0LDB4NjMsMHgyYiwweDlkLDB4MTIsMHgyNCwweDBjLDB4MjMsMHgyNiwweDhlLDB4 ODMsCisrCTB4MTYsMHgzNywweDBiLDB4ZDEsMHgwNiwweDRmLDB4NjgsMHg2ZAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDdlLDB4MDgsMHg0YSwweGJiLDB4 ZTMsMHgyMSwweDdjLDB4YzksMHgyMywweGQyLDB4ZjgsMHhiMCwKKysJMHg3MywweDk4LDB4YmEs MHg4NCwweDc0LDB4MjMsMHhhYiwweDA2LDB4OGEsMHhlMiwweDIyLDB4ZDMsCisrCTB4N2IsMHhj ZSwweDliLDB4ZDIsMHg0YSwweDc2LDB4YjgsMHhkZQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlp bnB1dHByW10gPQorKwl7CisrCTB4MGIsMHgyMywweGFmLDB4ZGYsMHhmMSwweDYyLDB4ZDcsMHhk MywweDQzLDB4OTcsMHhmOCwweDc3LAorKwkweDA0LDB4YTgsMHg0MiwweDIwLDB4YmQsMHhmNiww eDBmLDB4YzEsMHgxNywweDJmLDB4OWYsMHg1NCwKKysJMHhiYiwweDU2LDB4MTcsMHg4NiwweDY4 LDB4MGUsMHhiYSwweGE5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJ eworKwkweDMxLDB4OGUsMHhhZCwweGFmLDB4NDAsMHhlYiwweDZiLDB4NzQsMHgzMSwweDQ2LDB4 ODAsMHhjNywKKysJMHgxNywweGFiLDB4M2MsMHg3YQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9CisrCXsKKysJMHg5NCwweDZiLDB4YzksMHg5ZiwweGFiLDB4OGQsMHhjNSww eGVjLDB4NzEsMHg4OCwweDFkLDB4MDAsCisrCTB4OGMsMHg4OSwweDY4LDB4ZTQsMHhjOCwweDA3 LDB4NzcsMHgzNiwweDE3LDB4NmQsMHg3OSwweDc4LAorKwkweGM3LDB4MDYsMHg0ZSwweDk5LDB4 MDQsMHgyOCwweDI5LDB4YzMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Cisr CXsKKysJMHhiZiwweDZjLDB4NTksMHgyYSwweDBkLDB4NDQsMHgwZiwweGFlLDB4OWEsMHg1ZSww eDAzLDB4NzMsCisrCTB4ZDgsMHhhNiwweGUxLDB4Y2YsMHgyNSwweDYxLDB4MzgsMHgyNCwweDg2 LDB4OWUsMHg1MywweGU4LAorKwkweGE0LDB4ZGYsMHg1NiwweGY0LDB4MDYsMHgwNywweDljLDB4 MGYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyMiwweDRhLDB4 YjQsMHhiOCwweGI2LDB4ZWUsMHg3ZCwweGIxLDB4OWUsMHhjOSwweGY5LDB4YTAsCisrCTB4ZDks MHhlMiwweDk3LDB4MDAKKysJfTsKKysKKysKKysvKiBBRVMtMjU2IHVzZSBkZiBObyBQUiAgKi8K KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhhNSwweDNlLDB4MzcsMHgxMCwweDE3LDB4 NDMsMHg5MSwweDkzLDB4NTksMHgxZSwweDQ3LDB4NTAsCisrCTB4ODcsMHhhYSwweGRkLDB4ZDUs MHhjMSwweGMzLDB4ODYsMHhjZCwweGNhLDB4MGQsMHhkYiwweDY4LAorKwkweGUwLDB4MDIsMHhk OCwweDBmLDB4ZGMsMHg0MCwweDFhLDB4NDcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25jZVtdID0KKysJewor KwkweGE5LDB4NGQsMHhhNSwweDVhLDB4ZmQsMHhjNSwweDBjLDB4ZTUsMHgxYywweDlhLDB4M2Is MHg4YSwKKysJMHg0YywweDQ0LDB4ODQsMHg0MAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KKysJeworKwkweDhiLDB4NTIsMHhhMiwweDRhLDB4OTMsMHhjMywweDRlLDB4 YTcsMHgxZSwweDFjLDB4YTcsMHgwNSwKKysJMHhlYiwweDgyLDB4OWIsMHhhNiwweDVkLDB4ZTQs MHhkNCwweGUwLDB4N2YsMHhhMywweGQ4LDB4NmIsCisrCTB4MzcsMHg4NCwweDVmLDB4ZjEsMHhj NywweGQ1LDB4ZjYsMHhkMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweDIwLDB4ZjQsMHgyMiwweGVkLDB4ZjgsMHg1YywweGExLDB4NmEsMHgwMSwweGNmLDB4YmUs MHg1ZiwKKysJMHg4ZCwweDZjLDB4OTQsMHg3ZiwweGFlLDB4MTIsMHhhOCwweDU3LDB4ZGIsMHgy YSwweGE5LDB4YmYsCisrCTB4YzcsMHhiMywweDY1LDB4ODEsMHg4MCwweDhkLDB4MGQsMHg0Ngor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0ZSwweDQ0LDB4ZmQs MHhmMywweDllLDB4MjksMHhhMiwweGI4LDB4MGYsMHg1ZCwweDZjLDB4ZTEsCisrCTB4MjgsMHgw YywweDNiLDB4YzEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJ MHhkZCwweDQwLDB4ZTUsMHg5OCwweDdiLDB4MjcsMHgxNiwweDczLDB4MTUsMHg2OCwweGQyLDB4 NzYsCisrCTB4YmYsMHgwYywweDY3LDB4MTUsMHg3NSwweDc5LDB4MDMsMHhkMywweGRlLDB4ZGUs MHg5MSwweDQ2LAorKwkweDQyLDB4ZGQsMHhkNCwweDY3LDB4YzgsMHg3OSwweGM4LDB4MWUKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg3ZiwweGQ4LDB4 MWYsMHhiZCwweDJhLDB4YjUsMHgxYywweDExLDB4NWQsMHg4MywweDRlLDB4OTksCisrCTB4ZjYs MHg1YywweGE1LDB4NDAsMHgyMCwweGVkLDB4MzgsMHg4ZSwweGQ1LDB4OWUsMHhlMCwweDc1LAor KwkweDkzLDB4ZmUsMHgxMiwweDVlLDB4NWQsMHg3MywweGZiLDB4NzUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9h ZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4Y2QsMHgyYywweGZmLDB4MTQsMHg2OSwweDNl LDB4NGMsMHg5ZSwweGZkLDB4ZmUsMHgyNiwweDBkLAorKwkweGU5LDB4ODYsMHgwMCwweDQ5LDB4 MzAsMHhiYSwweGIxLDB4YzYsMHg1MCwweDU3LDB4NzcsMHgyYSwKKysJMHg2MiwweDM5LDB4MmMs MHgzYiwweDc0LDB4ZWIsMHhjOSwweDBkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4NGYsMHg3OCwweGJlLDB4YjksMHg0ZCwweDk3LDB4OGMsMHhlOSwweGQwLDB4OTcs MHhmZSwweGFkLAorKwkweGZhLDB4ZmQsMHgzNSwweDVlCisrCX07CisrCisrCisrLyogQUVTLTEy OCBubyBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDlhLDB4MjUs MHg2NSwweDEwLDB4NjcsMHhkNSwweGI2LDB4NmIsMHg3MCwweGExLDB4YjMsMHhhNCwKKysJMHg0 MywweDk1LDB4ODAsMHhjMCwweDg0LDB4MGEsMHg3OSwweGIwLDB4ODgsMHg3NCwweGYyLDB4YmYs CisrCTB4MzEsMHg2YywweDMzLDB4MzgsMHgwYiwweDAwLDB4YjIsMHg1YQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZf cHJfbm9uY2VbXSA9CisrCXsKKysJMHg3OCwweDQ3LDB4NmIsMHhmNywweDkwLDB4OGUsMHg4Nyww eGYxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhm NywweDIyLDB4MWQsMHgzYSwweGJlLDB4MWQsMHhjYSwweDMyLDB4MWIsMHhiZCwweDg3LDB4MGMs CisrCTB4NTEsMHgyNCwweDE5LDB4ZWUsMHhhMywweDIzLDB4MDksMHg2MywweDMzLDB4M2QsMHhh OCwweDBjLAorKwkweDFjLDB4ZmEsMHg0MiwweDg5LDB4Y2MsMHg2ZiwweGEwLDB4YTgKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGM5LDB4ZTAsMHg4MCwweGJm LDB4OGMsMHg0NSwweDU4LDB4MzksMHhmZiwweDAwLDB4YWIsMHgwMiwKKysJMHg0YywweDNlLDB4 M2EsMHg5NSwweDliLDB4ODAsMHhhOCwweDIxLDB4MmEsMHhlZSwweGJhLDB4NzMsCisrCTB4YjEs MHhkOSwweGNmLDB4MjgsMHhmNiwweDhmLDB4OWIsMHgxMgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9w eWlucHV0cHJbXSA9CisrCXsKKysJMHg0YywweGE4LDB4YzUsMHhmMCwweDU5LDB4OWUsMHhhNiww eDhkLDB4MjYsMHg1MywweGQ3LDB4OGEsCisrCTB4YTksMHhkOCwweGY3LDB4ZWQsMHhiMiwweGY5 LDB4MTIsMHg0MiwweGUxLDB4ZTUsMHhiZCwweGU3LAorKwkweGU3LDB4MWQsMHg3NCwweDk5LDB4 MDAsMHg5ZCwweDMxLDB4M2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHhlMiwweGFjLDB4MjAsMHhmMCwweDgwLDB4ZTcsMHhiYywweDdlLDB4OWMsMHg3Yiww eDY1LDB4NzEsCisrCTB4YWYsMHgxOSwweDMyLDB4MTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9CisrCXsKKysJMHgzMiwweDdmLDB4MzgsMHg4YiwweDczLDB4MGEsMHg3OCww eDgzLDB4ZGMsMHgzMCwweGJlLDB4OWYsCisrCTB4MTAsMHgxZiwweGY1LDB4MWYsMHhjYSwweDAw LDB4YjUsMHgwZCwweGQ2LDB4OWQsMHg2MCwweDgzLAorKwkweDUxLDB4NTQsMHg3ZCwweDM4LDB4 MjMsMHgzYSwweDUyLDB4NTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJ eworKwkweDE4LDB4NjEsMHg1MywweDU2LDB4ZWQsMHhlZCwweGQ3LDB4MjAsMHhmYiwweDcxLDB4 MDQsMHg3YSwKKysJMHhiMiwweGFjLDB4YzEsMHgyOCwweGNkLDB4ZjIsMHhjMiwweGZjLDB4YWEs MHhiMSwweDA2LDB4MDcsCisrCTB4ZTksMHg0NiwweDk1LDB4MDIsMHg0OCwweDAxLDB4NzgsMHhm OQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MjksMHhjOCwweDFi LDB4MTUsMHhiMSwweGQxLDB4YzIsMHhmNiwweDcxLDB4ODYsMHg2OCwweDMzLAorKwkweDU3LDB4 ODIsMHgzMywweGFmCisrCX07CisrCisrCisrLyogQUVTLTEyOCBubyBkZiBObyBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGM5LDB4YzUsMHg3OSwweGJjLDB4ZTgsMHhjNSww eDE5LDB4ZDgsMHhiYywweDY2LDB4NzMsMHg2NywKKysJMHhmNiwweGQzLDB4NzIsMHhhYSwweGE2 LDB4MTYsMHhiOCwweDUwLDB4YjcsMHg0NywweDNhLDB4NDIsCisrCTB4YWIsMHhmNCwweDE2LDB4 YjIsMHg5NiwweGQyLDB4YjYsMHg2MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfbm9uY2VbXSA9CisrCXsKKysJMHg1 ZiwweGJmLDB4OTcsMHgwYywweDRiLDB4YTQsMHg4NywweDEzCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhjZSwweGZiLDB4N2IsMHgzZiwweGQ0LDB4NmIs MHgyOSwweDBkLDB4NjksMHgwNiwweGZmLDB4YmIsCisrCTB4ZjIsMHhlNSwweGM2LDB4NmMsMHgw YSwweDEwLDB4YTAsMHhjZiwweDFhLDB4NDgsMHhjNywweDhiLAorKwkweDNjLDB4MTYsMHg4OCww eGVkLDB4NTAsMHgxMywweDgxLDB4Y2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0K KysJeworKwkweDRiLDB4MjIsMHg0NiwweDE4LDB4MDIsMHg3YiwweGQyLDB4MWIsMHgyMiwweDQy LDB4N2MsMHgzNywKKysJMHhkOSwweGY2LDB4ZTgsMHg5YiwweDEyLDB4MzAsMHg1ZiwweGU5LDB4 OTAsMHhlOCwweDA4LDB4MjQsCisrCTB4NGYsMHgwNiwweDY2LDB4ZGIsMHgxOSwweDJiLDB4MTMs MHg5NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDJlLDB4OTYs MHg3MCwweDY0LDB4ZmEsMHhkZiwweGRmLDB4NTcsMHhiNSwweDgyLDB4ZWUsMHhkNiwKKysJMHhl ZCwweDNlLDB4NjUsMHhjMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7 CisrCTB4MjYsMHhjMCwweDcyLDB4MTYsMHgzYSwweDRiLDB4YjcsMHg5OSwweGQ0LDB4MDcsMHhh ZiwweDY2LAorKwkweDYyLDB4MzYsMHg5NiwweGE0LDB4NTEsMHgxNywweGZhLDB4MDcsMHg4Yiww eDE3LDB4NWUsMHhhMSwKKysJMHgyZiwweDNjLDB4MTAsMHhlNywweDkwLDB4ZDAsMHg0NiwweDAw CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg4MywweDM5 LDB4MzcsMHg3YiwweDAyLDB4MDYsMHhkMiwweDEyLDB4MTMsMHg4ZCwweDhiLDB4ZjIsCisrCTB4 ZjAsMHhmNiwweDI2LDB4ZWIsMHhhNCwweDIyLDB4N2IsMHhjMiwweGU3LDB4YmEsMHg3OSwweGU0 LAorKwkweDNiLDB4NzcsMHg1ZCwweDRkLDB4NDcsMHhiMiwweDJkLDB4YjQKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgwYiwweGI5LDB4NjcsMHgzNywweGRiLDB4 ODMsMHhkZiwweGNhLDB4ODEsMHg4YiwweGY5LDB4M2YsCisrCTB4ZjEsMHgxMSwweDFiLDB4MmYs MHhmMCwweDYxLDB4YTYsMHhkZiwweGJhLDB4YTMsMHhiMSwweGFjLAorKwkweGQzLDB4ZTYsMHgw OSwweGI4LDB4MmMsMHg2YSwweDY3LDB4ZDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3JldHVybmVkYml0c1tdID0K KysJeworKwkweDFlLDB4YTcsMHhhNCwweGU0LDB4ZTEsMHhhNiwweDdjLDB4NjksMHg5YSwweDQ0 LDB4NmMsMHgzNiwKKysJMHg4MSwweDM3LDB4MTksMHhkNAorKwl9OworKworKworKy8qIEFFUy0x OTIgbm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg5ZCwweDJj LDB4ZDIsMHg1NSwweDY2LDB4ZWEsMHhlMCwweGJlLDB4MTgsMHhiNywweDc2LDB4ZTcsCisrCTB4 NzMsMHgzNSwweGQ4LDB4MWYsMHhhZCwweDNhLDB4ZTMsMHg4MSwweDBlLDB4OTIsMHhkMCwweDYx LAorKwkweGM5LDB4MTIsMHgyNiwweGY2LDB4MWMsMHhkZiwweGZlLDB4NDcsMHhhYSwweGZlLDB4 N2QsMHg1YSwKKysJMHgxNywweDFmLDB4OGQsMHg5YQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfbm9uY2VbXSA9 CisrCXsKKysJMHg0NCwweDgyLDB4ZWQsMHhlOCwweDRjLDB4MjgsMHg1YSwweDE0LDB4ZmYsMHg4 OCwweDhkLDB4MTksCisrCTB4NjEsMHg1YywweGVlLDB4MGYKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDQ3LDB4ZDcsMHg5YiwweDk5LDB4YWEsMHhj YiwweGU3LDB4ZDIsMHg1NywweDY2LDB4MmMsMHhlMSwKKysJMHg3OCwweGQ2LDB4MmMsMHhlYSww eGEzLDB4MjMsMHg1ZiwweDJhLDB4YzEsMHgzYSwweGYwLDB4YTQsCisrCTB4MjAsMHgzYiwweGZh LDB4MDcsMHhkNSwweDA1LDB4MDIsMHhlNCwweDU3LDB4MDEsMHhiNiwweDEwLAorKwkweDU3LDB4 MmUsMHhlNywweDU1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHg0YiwweDc0LDB4MGIsMHg0MCwweGNlLDB4NmIsMHhjMiwweDZhLDB4MjQsMHhiNCwweGYzLDB4 YWQsCisrCTB4N2EsMHhhNSwweDdhLDB4YTIsMHgxNSwweGUyLDB4YzgsMHg2MSwweDE1LDB4YzYs MHhiNywweDg1LAorKwkweDY5LDB4MTEsMHhhZCwweDdiLDB4MTQsMHhkMiwweGY2LDB4MTIsMHhh MSwweDk1LDB4NWQsMHgzZiwKKysJMHhlMiwweGQwLDB4MGMsMHgyZgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJf ZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHgwYywweDljLDB4YWQsMHgwNSwweGVlLDB4YWUs MHg0OCwweDIzLDB4ODksMHg1OSwweGExLDB4OTQsCisrCTB4ZDcsMHhkOCwweDc1LDB4ZDUsMHg1 NCwweDkzLDB4YzcsMHg0YSwweGQ5LDB4MjYsMHhkZSwweGViLAorKwkweGJhLDB4YjAsMHg3ZSww eDMwLDB4MWQsMHg1ZiwweDY5LDB4NDAsMHg5YywweDNiLDB4MTcsMHg1OCwKKysJMHgxZCwweDMw LDB4YjMsMHg3OAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eGY3LDB4OTMsMHhiMCwweDZkLDB4NzcsMHg4MywweGQ1LDB4MzgsMHgwMSwweGUxLDB4NTIsMHg0 MCwKKysJMHg3ZSwweDNlLDB4MGMsMHgyNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0 MltdID0KKysJeworKwkweGJjLDB4NGIsMHgzNywweDQ0LDB4MWMsMHhjNSwweDQ1LDB4NWYsMHg4 ZiwweDUxLDB4NjIsMHg4YSwKKysJMHg4NSwweDMwLDB4MWQsMHg3YywweGU0LDB4Y2YsMHhmNyww eDQ0LDB4Y2UsMHgzMiwweDNlLDB4NTcsCisrCTB4OTUsMHhhNCwweDJhLDB4ZGYsMHhmZCwweDll LDB4MzgsMHg0MSwweGIzLDB4ZjYsMHhjNSwweGVlLAorKwkweDBjLDB4NGIsMHhlZSwweDZlCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhlYywweGFmLDB4ZjYs MHg0ZiwweGIxLDB4YTAsMHg1NCwweGI1LDB4NWIsMHhlMywweDQ2LDB4YjAsCisrCTB4NzYsMHg1 YSwweDdjLDB4M2YsMHg3YiwweDk0LDB4NjksMHgyMSwweDUxLDB4MDIsMHhlNSwweDlmLAorKwkw eDA0LDB4NTksMHgwMiwweDk4LDB4YzYsMHg0MywweDJjLDB4Y2MsMHgyNiwweDRjLDB4ODcsMHg2 YiwKKysJMHg4ZSwweDBhLDB4ODMsMHhkZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4NzQsMHg0NSwweGZiLDB4NTMsMHg4NCwweDk2LDB4YmUsMHhmZiwweDE1LDB4 Y2MsMHg0MSwweDkxLAorKwkweGI5LDB4YTEsMHgyMSwweDY4CisrCX07CisrCisrCisrLyogQUVT LTE5MiBubyBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDNjLDB4 N2QsMHhiNSwweGUwLDB4NTQsMHhkOSwweDZlLDB4OGMsMHhhOSwweDg2LDB4Y2UsMHg0ZSwKKysJ MHg2YiwweGFmLDB4ZWIsMHgyZiwweGU3LDB4NzUsMHhlMCwweDhiLDB4YTQsMHgzYiwweDA3LDB4 ZmUsCisrCTB4YmUsMHgzMywweDc1LDB4OTMsMHg4MCwweDI3LDB4YjUsMHgyOSwweDQ3LDB4OGIs MHhjNywweDI4LAorKwkweDk0LDB4YzMsMHg1OSwweDYzCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9ub25jZVtdID0K KysJeworKwkweDQzLDB4ZjEsMHg3ZCwweGI4LDB4YzMsMHhmZSwweGQwLDB4MjMsMHg2YiwweGI0 LDB4OTIsMHhkYiwKKysJMHgyOSwweGZkLDB4NDUsMHg3MQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4OWYsMHgyNCwweDI5LDB4OTksMHg5ZSwweDAxLDB4 YWIsMHhlOSwweDE5LDB4ZDgsMHgyMywweDA4LAorKwkweGI3LDB4ZDYsMHg3ZSwweDhjLDB4YzAs MHg5ZSwweDdmLDB4NmUsMHg1YiwweDMzLDB4MjAsMHg5NiwKKysJMHgwYiwweDIzLDB4MmMsMHhh NSwweDZhLDB4ZjgsMHgxYiwweDA0LDB4MjYsMHhkYiwweDJlLDB4MmIsCisrCTB4M2IsMHg4OCww eGNlLDB4MzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDk0LDB4 ZTksMHg3YywweDNkLDB4YTcsMHhkYiwweDYwLDB4ODMsMHgxZiwweDk4LDB4M2YsMHgwYiwKKysJ MHg4OCwweDU5LDB4NTcsMHg1MSwweDg4LDB4OWYsMHg3NiwweDQ5LDB4OWYsMHhhNiwweGRhLDB4 NzEsCisrCTB4MWQsMHgwZCwweDQ3LDB4MTYsMHg2MywweGM1LDB4NjgsMHhlNCwweDVkLDB4Mzks MHg2OSwweGIzLAorKwkweDNlLDB4YmUsMHhkNCwweDhlCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9pbnRfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4ZjksMHhkNywweGFkLDB4NjksMHhhYiwweDhmLDB4MjMsMHg1 NiwweDcwLDB4MTcsMHg0ZiwweDJhLAorKwkweDQ1LDB4ZTcsMHg0YSwweGM1CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhhNiwweDcxLDB4NmEsMHgzZCwweGJh LDB4ZDEsMHhlOCwweDY2LDB4YTYsMHhlZiwweGIyLDB4MGUsCisrCTB4YTgsMHg5YywweGFhLDB4 NGUsMHhhZiwweDE3LDB4ODksMHg1MCwweDAwLDB4ZGEsMHhhMSwweGIxLAorKwkweDBiLDB4YTQs MHhkOSwweDM1LDB4ODksMHhjOCwweGU1LDB4YjAsMHhkOSwweGI3LDB4YzQsMHgzMywKKysJMHg5 YiwweGNiLDB4N2UsMHg3NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQor Kwl7CisrCTB4MjcsMHgyMSwweGZjLDB4YzIsMHhiZCwweGYzLDB4M2MsMHhjZSwweGMzLDB4Y2Es MHhjMSwweDAxLAorKwkweGUwLDB4ZmYsMHg5MywweDEyLDB4N2QsMHg1NCwweDQyLDB4ZTMsMHg5 ZiwweDAzLDB4ZGYsMHgyNywKKysJMHgwNCwweDA3LDB4M2MsMHg1MywweDdmLDB4YTgsMHg2Niww eGM4LDB4OTcsMHg0YiwweDYxLDB4NDAsCisrCTB4NWQsMHg3YSwweDI1LDB4NzkKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgyZCwweDhlLDB4MTYsMHg1ZCwweDBi LDB4OWYsMHhlYiwweGFhLDB4ZDYsMHhlYywweDI4LDB4NzEsCisrCTB4N2MsMHgwYiwweGMxLDB4 MWQsMHhkNCwweDQ0LDB4MTksMHg0NywweGZkLDB4MWQsMHg3YywweGU1LAorKwkweGYzLDB4Mjcs MHhlMSwweGI2LDB4NzIsMHgwYSwweGUwLDB4ZWMsMHgwZSwweGNkLDB4ZWYsMHgxYSwKKysJMHg5 MSwweDZhLDB4ZTMsMHg1ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 ZTUsMHhkYSwweGI4LDB4ZTAsMHg2MywweDU5LDB4NWEsMHhjYywweDNkLDB4ZGMsMHg5ZiwweGU4 LAorKwkweDY2LDB4NjcsMHgyYywweDkyCisrCX07CisrCisrCisrLyogQUVTLTI1NiBubyBkZiBQ UiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDE1LDB4YzcsMHg1ZCwweGNi LDB4NDEsMHg0YiwweDE2LDB4MDEsMHgzYSwweGQxLDB4NDQsMHhlOCwKKysJMHgyMiwweDMyLDB4 YzYsMHg5YywweDNmLDB4ZTcsMHg0MywweGY1LDB4OWEsMHhkMywweGVhLDB4ZjIsCisrCTB4ZDcs MHg0ZSwweDZlLDB4NmEsMHg1NSwweDczLDB4NDAsMHhlZiwweDg5LDB4YWQsMHgwZCwweDAzLAor KwkweDk2LDB4N2UsMHg3OCwweDgxLDB4MmYsMHg5MSwweDFiLDB4NDQsMHhiMCwweDAyLDB4YmEs MHgxYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhkYywweGU0LDB4ZDQsMHgy NywweDdhLDB4OTAsMHhkNywweDk5LDB4NDMsMHhhMSwweDNjLDB4MzAsCisrCTB4Y2MsMHg0Yiww eGVlLDB4MmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJewor KwkweGUzLDB4ZTYsMHhiOSwweDExLDB4ZTQsMHg3YSwweGE0LDB4NDAsMHg2YiwweGY4LDB4NzMs MHhmNywKKysJMHg3ZSwweGVjLDB4YzcsMHhiOSwweDk3LDB4YmYsMHhmOCwweDI1LDB4N2IsMHhi ZSwweDExLDB4OWIsCisrCTB4NWIsMHg2YSwweDBjLDB4MmUsMHgyYiwweDAxLDB4NTEsMHhjZCww eDQxLDB4NGIsMHg2YiwweGFjLAorKwkweDMxLDB4YTgsMHgwYiwweGY3LDB4ZTYsMHg1OSwweDQy LDB4YjgsMHgwMywweDBjLDB4ZjgsMHgwNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0 W10gPQorKwl7CisrCTB4NmEsMHg5ZiwweDAwLDB4OTEsMHhhZSwweGZlLDB4Y2YsMHg4NCwweDk5 LDB4Y2UsMHhiMSwweDQwLAorKwkweDZkLDB4NWQsMHgzMywweDI4LDB4ODQsMHhmNCwweDhjLDB4 NjMsMHg0YywweDdlLDB4YmQsMHgyYywKKysJMHg4MCwweDc2LDB4ZWUsMHg1YSwweGFhLDB4MTUs MHgwNywweDMxLDB4ZDgsMHhiYiwweDhjLDB4NjksCisrCTB4OWQsMHg5ZCwweGJjLDB4N2UsMHg0 OSwweGFlLDB4ZWMsMHgzOSwweDZiLDB4ZDEsMHgxZiwweDdlCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0KKysJeworKwkweGYzLDB4YjksMHg3NSwweDljLDB4YmQsMHg4OCwweGVh LDB4YTIsMHg1MCwweGFkLDB4ZDYsMHgxNiwKKysJMHgxYSwweDEyLDB4M2MsMHg4NiwweDY4LDB4 YWYsMHg2ZiwweGJlLDB4MTksMHhmMiwweGVlLDB4Y2MsCisrCTB4YTUsMHg3MCwweDg0LDB4NTMs MHg1MCwweGNiLDB4OWYsMHgxNCwweGE5LDB4ZTUsMHhlZSwweGI5LAorKwkweDQ4LDB4NDUsMHg0 MCwweGUyLDB4YzcsMHhjOSwweDlhLDB4NzQsMHhmZiwweDhjLDB4OTksMHgxZgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9f ZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDJlLDB4ZjIsMHg0NSwweDRjLDB4 NjIsMHgyZSwweDBhLDB4YjksMHg2YiwweGEyLDB4ZmQsMHg1NiwKKysJMHg3OSwweDYwLDB4OTMs MHhjZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGFmLDB4 NjksMHgyMCwweGU5LDB4M2IsMHgzNywweDlkLDB4M2YsMHhiNCwweDgwLDB4MDIsMHg3YSwKKysJ MHgyNSwweDdkLDB4YjgsMHhkZSwweDcxLDB4YzUsMHgwNiwweDBjLDB4YjQsMHhlMiwweDhmLDB4 MzUsCisrCTB4ZDgsMHgxNCwweDBkLDB4N2YsMHg3NiwweDYzLDB4NGUsMHhiNSwweGVlLDB4ZTks MHg2ZiwweDM0LAorKwkweGM3LDB4NWYsMHg1NiwweDE0LDB4NGEsMHhlOCwweDczLDB4OTUsMHg1 YiwweDFjLDB4YjksMHhjYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7 CisrCTB4ZTUsMHhiMCwweDJlLDB4N2UsMHg1MiwweDMwLDB4ZTMsMHg2MywweDgyLDB4YjYsMHg0 NCwweGQzLAorKwkweDI1LDB4MTksMHgwNSwweDI0LDB4OWEsMHg5ZiwweDVmLDB4MjcsMHg2YSww eDI5LDB4YWIsMHhmYSwKKysJMHgwNywweGEyLDB4NDIsMHgwZiwweGM1LDB4YTgsMHg5NCwweDdj LDB4MTcsMHg3YiwweDg1LDB4ODMsCisrCTB4MGMsMHgyNSwweDBlLDB4NjMsMHgwYiwweGU5LDB4 MTIsMHg2MCwweGNkLDB4ZWYsMHg4MCwweDBmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHg1ZSwweGYyLDB4MjYsMHhlZiwweDlmLDB4NTgsMHg1ZCwweGQ1LDB4NGEs MHgxMCwweGZlLDB4YTcsCisrCTB4MmQsMHg1ZiwweDRhLDB4NDYKKysJfTsKKysKKysKKysvKiBB RVMtMjU2IG5vIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4ZmIs MHhjZiwweDFiLDB4NjEsMHgxNiwweDg5LDB4NzgsMHgyMywweGY1LDB4ZDgsMHg5NiwweGUzLAor KwkweDRlLDB4NjQsMHgwYiwweDI5LDB4OWEsMHgzZiwweGY4LDB4YTUsMHhlZCwweGYyLDB4ZmUs MHhkYiwKKysJMHgxNiwweGNhLDB4N2YsMHgxMCwweGZhLDB4NWUsMHgxOCwweDc2LDB4MmMsMHg2 MywweDVlLDB4OTYsCisrCTB4Y2YsMHhiMywweGQ2LDB4ZmMsMHhhZiwweDk5LDB4MzksMHgyOCww eDljLDB4NjEsMHhlOCwweGIzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9ub25jZVtdID0KKysJeworKwkweDEyLDB4 OTYsMHhmMCwweDUyLDB4ZjMsMHg4ZCwweDgxLDB4Y2YsMHhkZSwweDg2LDB4ZjIsMHg5OSwKKysJ MHg0MywweDk2LDB4YjksMHhmMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4NjMsMHgwZCwweDc4LDB4ZjUsMHg5MCwweDhlLDB4MzIsMHg0NywweGIwLDB4 NGQsMHgzNywweDYwLAorKwkweDA5LDB4OTYsMHhiYywweGJmLDB4OTcsMHg3YSwweDYyLDB4MTQs MHg0NSwweGJkLDB4OGQsMHhjYywKKysJMHg2OSwweGZiLDB4MDMsMHhlMSwweDgwLDB4MWMsMHhj NywweGUyLDB4MmEsMHhmOSwweDM3LDB4M2YsCisrCTB4NjYsMHg0ZCwweDYyLDB4ZDksMHgxMCww eGUwLDB4YWQsMHhjOCwweDlhLDB4ZjAsMHhhOCwweDZkCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFs aW5wdXRbXSA9CisrCXsKKysJMHgzNiwweGM2LDB4MTMsMHg2MCwweGJiLDB4MTQsMHhhZCwweDIy LDB4YjAsMHgzOCwweGFjLDB4YTYsCisrCTB4MTgsMHgxNiwweDkzLDB4MjUsMHg4NiwweGI3LDB4 ZGMsMHhkYywweDM2LDB4OTgsMHgyYiwweGY5LAorKwkweDY4LDB4MzMsMHhkMywweGM2LDB4ZmYs MHhjZSwweDhkLDB4MTUsMHg1OSwweDgyLDB4NzYsMHhlZCwKKysJMHg2ZiwweDhkLDB4NDksMHg3 NCwweDJmLDB4ZGEsMHhkYywweDFmLDB4MTcsMHhkMCwweGRlLDB4MTcKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgxNiwweDJmLDB4OGUsMHgzZiwweDIxLDB4N2Es MHgxYywweDIwLDB4NTYsMHhkMSwweDkyLDB4ZjYsCisrCTB4ZDIsMHgyNSwweDc1LDB4MGUKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDkxLDB4NzksMHg3Niww eGVlLDB4ZTAsMHhjZiwweDllLDB4YzIsMHhkNSwweGQ0LDB4MjMsMHg5YiwKKysJMHgxMiwweDhj LDB4N2UsMHgwYSwweGI3LDB4ZDIsMHg4YiwweGQ2LDB4N2MsMHhhMywweGM2LDB4ZTUsCisrCTB4 MGUsMHhhYSwweGM3LDB4NmIsMHhhZSwweDBkLDB4ZmEsMHg1MywweDA2LDB4NzksMHhhMSwweGVk LAorKwkweDRkLDB4NmEsMHgwZSwweGQ4LDB4OWQsMHhiZSwweDFiLDB4MzEsMHg5MywweDdiLDB4 ZWMsMHhmYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 ZDIsMHg0NiwweDUwLDB4MjIsMHgxMCwweDE0LDB4NjMsMHhmNywweGVhLDB4MGYsMHhiOSwweDdl LAorKwkweDBkLDB4ZTEsMHg5NCwweDA3LDB4YWYsMHgwOSwweDQ0LDB4MzEsMHhlYSwweDY0LDB4 YTQsMHgxOCwKKysJMHg1YiwweGY5LDB4ZDgsMHhjMiwweGZhLDB4MDMsMHg0NywweGM1LDB4Mzks MHg0MywweGQ1LDB4M2IsCisrCTB4NjIsMHg4NiwweDY0LDB4ZWEsMHgyYywweDczLDB4OGMsMHhh ZSwweDlkLDB4OTgsMHg5OCwweDI5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4OGMsMHhhYiwweDE4LDB4ZjgsMHhjMywweGVjLDB4MTgsMHg1YywweGIzLDB4MWUs MHg5ZCwweGJlLAorKwkweDNmLDB4MDMsMHhiNCwweDAwLDB4OTgsMHg5ZCwweGFlLDB4ZWIsMHhm NCwweDk0LDB4ZjgsMHg0MiwKKysJMHg4ZiwweGUzLDB4MzksMHgwNywweGUxLDB4YzksMHhhZCww eDBiLDB4MWYsMHhlZCwweGMwLDB4YmEsCisrCTB4ZjYsMHhkMSwweGVjLDB4MjcsMHg4NiwweDdi LDB4ZDYsMHg1NSwweDliLDB4NjAsMHhhNSwweGM2CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHhlZiwweGQyLDB4ZDgsMHg1YywweGRjLDB4NjIsMHgyNSwweDlmLDB4YWEs MHgxZSwweDJjLDB4NjcsCisrCTB4ZjYsMHgwMiwweDMyLDB4ZTIKKysJfTsKKysKKysKKysvKiBT SEEtMSBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGExX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGQyLDB4MzYsMHhhNSwweDI3LDB4 MzEsMHg3MywweGRkLDB4MTEsMHg0ZiwweDkzLDB4YmQsMHhlMiwKKysJMHgzMSwweGE1LDB4OTEs MHgxMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTFfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhiNSwweGIzLDB4NjAsMHhlZiwweGY3LDB4 NjMsMHgzMSwweGYzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhk NCwweGJiLDB4MDIsMHgxMCwweGIyLDB4NzEsMHhkYiwweDgxLDB4ZDYsMHhmMCwweDQyLDB4NjAs CisrCTB4ZGEsMHhlYSwweDc3LDB4NTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweDRkLDB4ZDIsMHg2YywweDg3LDB4ZmIsMHgyYywweDRmLDB4YTYsMHg4ZCwweDE2LDB4NjMs MHgyMiwKKysJMHg2YSwweDUxLDB4ZTMsMHhmOAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9Cisr CXsKKysJMHhjOSwweDgzLDB4OWUsMHgxNiwweGY2LDB4MWMsMHgwZiwweGIyLDB4ZWMsMHg2MCww eDMxLDB4YTksCisrCTB4Y2IsMHhhOSwweDM2LDB4N2EKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2ludF9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHhhOCwweDEzLDB4NGYsMHhmNCwweDMxLDB4MDIsMHg0NCwweGUzLDB4ZDMs MHgzZCwweDYxLDB4OWUsCisrCTB4ZTUsMHhjNiwweDNlLDB4ODksMHhiNSwweDliLDB4MGYsMHgz NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGY5LDB4ZTgsMHhkMiwweDcy LDB4MTMsMHgzNCwweDk1LDB4NmYsMHgxNSwweDQ5LDB4NDcsMHg5OSwKKysJMHgxNiwweDAzLDB4 MTksMHg0NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4NGUsMHg4YywweDQ5 LDB4OWIsMHg0YSwweDVjLDB4OWIsMHg5YywweDNhLDB4ZWUsMHhmYiwweGQyLAorKwkweGFlLDB4 Y2QsMHg4YywweGM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg1MCwweGI0LDB4 YjQsMHhjZCwweDY4LDB4NTcsMHhmYywweDJlLDB4YzEsMHg1MiwweGNjLDB4ZjYsCisrCTB4Njgs MHhhNCwweDgxLDB4ZWQsMHg3ZSwweGU0LDB4MWQsMHg4NworKwl9OworKworKworKy8qIFNIQS0x IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YTksMHg0NywweDFiLDB4MjksMHgyZCww eDFjLDB4MDUsMHhkZiwweDc2LDB4ZDAsMHg2MiwweGY5LAorKwkweGUyLDB4N2YsMHg0YywweDdi CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9ub25jZVtdID0KKysJeworKwkweDUzLDB4MjMsMHgyNCwweGUzLDB4ZWMsMHgwYywweDU0 LDB4MTQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDdhLDB4ODcsMHhh MSwweGFjLDB4MWMsMHhmZCwweGFiLDB4YWUsMHhmNywweGQ2LDB4ZmIsMHg3NiwKKysJMHgyOCww eGVjLDB4NmQsMHhjYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZmMsMHg5Miww eDM1LDB4ZDYsMHg3ZSwweGI3LDB4MjQsMHg2NSwweGZkLDB4MTIsMHgyNywweDM1LAorKwkweGMw LDB4NzIsMHhjYSwweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NTcsMHg4 OCwweDgyLDB4ZTUsMHgyNSwweGE1LDB4MmMsMHg0YSwweDA2LDB4MjAsMHg2YywweDcyLAorKwkw eDU1LDB4NjEsMHhkZCwweDkwLDB4NzEsMHg5ZiwweDk1LDB4ZWEKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KKysJeworKwkweDY5LDB4YTUsMHg0MCwweDYyLDB4OTgsMHg0NywweDU2LDB4NzMs MHg0YSwweDhmLDB4NjAsMHg5NiwKKysJMHhkNiwweDk5LDB4MjcsMHhlZAorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25h bGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4ZTUsMHg0MCwweDRlLDB4YmQsMHg1MCwweDAwLDB4 ZjUsMHgxNSwweGE2LDB4ZWUsMHg0NSwweGRhLAorKwkweDg0LDB4M2QsMHhkNCwweGMwCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9h ZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MTEsMHg1MSwweDE0LDB4ZjAsMHgwOSwweDFi LDB4NGUsMHg1NiwweDBkLDB4ZTksMHhmNiwweDFlLAorKwkweDUyLDB4NjUsMHhjZCwweDk2Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhhMSwweDljLDB4OTQsMHg2ZSwweDI5LDB4ZTEs MHgzMywweDBkLDB4MzIsMHhkNiwweGFhLDB4Y2UsCisrCTB4NzEsMHgzZiwweDUyLDB4NzIsMHg4 YiwweDQyLDB4YTgsMHhkNworKwl9OworKworKworKy8qIFNIQS0yMjQgUFIgICovCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlp bnB1dFtdID0KKysJeworKwkweDEyLDB4NjksMHgzMiwweDRmLDB4ODMsMHhhNiwweGY1LDB4MTQs MHhlMywweDQ5LDB4M2UsMHg3NSwKKysJMHgzZSwweGRlLDB4YWQsMHhhMSwweDI5LDB4YzMsMHhm MywweDE5LDB4MjAsMHhiNSwweDRjLDB4ZDkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg2 YSwweDc4LDB4ZDAsMHhlYiwweGJiLDB4NWEsMHhmMCwweGVlLDB4ZTgsMHhjMywweGJhLDB4NzEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZDUsMHhiOCwweGI2 LDB4YmMsMHhjMSwweDViLDB4NjAsMHgzMSwweDNjLDB4ZjUsMHhlNSwweGMwLAorKwkweDhlLDB4 NTIsMHg3YSwweGJkLDB4ZWEsMHg0NywweGE5LDB4NWYsMHg4ZiwweGY5LDB4OGIsMHhhZQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgxZiwweDU1LDB4ZWMsMHhhZSwweDE2 LDB4MTIsMHg4NCwweGJhLDB4ODQsMHgxNiwweDE5LDB4ODgsCisrCTB4OGUsMHhiOCwweDMzLDB4 MjUsMHg1NCwweGZmLDB4Y2EsMHg3OSwweGFmLDB4MDcsMHgyNSwweDUwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJv cHlpbnB1dHByW10gPQorKwl7CisrCTB4OTIsMHhhMywweDMyLDB4YTgsMHg5YSwweDBhLDB4NTgs MHg3YywweDFkLDB4NWEsMHg3ZSwweGUxLAorKwkweGIyLDB4NzMsMHhhYiwweDBlLDB4MTYsMHg3 OSwweDIzLDB4ZDMsMHgyOSwweDg5LDB4ODEsMHhlMQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4ZjMsMHgzOCwweDkxLDB4NDAsMHgzNywweDdhLDB4NTEsMHg3MiwweDQy LDB4NzQsMHg3OCwweDBhLAorKwkweDY5LDB4ZmQsMHhhNiwweDQ0LDB4NDMsMHg0NSwweDZjLDB4 MGMsMHg1YSwweDE5LDB4ZmYsMHhmMSwKKysJMHg1NCwweDYwLDB4ZWUsMHg2YQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9h ZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4NzUsMHhmMywweDA0LDB4MjUsMHhkZCwweDM2 LDB4YTgsMHgzNywweDQ2LDB4YWUsMHgwYywweDUyLAorKwkweDA1LDB4NzksMHg0YywweDI2LDB4 ZGIsMHhlOSwweDcxLDB4MTYsMHg0YywweDBhLDB4ZjIsMHg2MAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9CisrCXsKKysJMHhlYSwweGM1LDB4MDMsMHgwYSwweDRmLDB4YjAsMHgzOCwweDhk LDB4MjMsMHhkNCwweGM4LDB4NzcsCisrCTB4ZTIsMHg2ZCwweDljLDB4MGIsMHg0NCwweGY3LDB4 MmQsMHg1YiwweGJmLDB4NWQsMHgyYSwweDExCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KKysJ eworKwkweDYwLDB4NTAsMHgyYiwweGU3LDB4ODYsMHhkOCwweDI2LDB4NzMsMHhlMywweDFkLDB4 OTUsMHgyMCwKKysJMHhiMywweDJjLDB4MzIsMHgxYywweGY1LDB4Y2UsMHg1NywweGE2LDB4Njcs MHgyYiwweGRjLDB4NGUsCisrCTB4ZGQsMHgxMSwweDRjLDB4YzQKKysJfTsKKysKKysKKysvKiBT SEEtMjI0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhiMiwweDFjLDB4NzcsMHg0 ZCwweGY2LDB4ZDMsMHhiNiwweDQwLDB4YjcsMHgzMCwweDNlLDB4MjksCisrCTB4YjAsMHg4NSww eDFjLDB4YmUsMHg0YSwweGVhLDB4NmIsMHg1YSwweGI1LDB4OGEsMHg5NywweGViCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X25v bmNlW10gPQorKwl7CisrCTB4NDIsMHgwMiwweDBhLDB4MWMsMHg5OCwweDlhLDB4NzcsMHg5ZSww eDlmLDB4ODAsMHhiYSwweGUwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJewor KwkweDk4LDB4YjgsMHgwNCwweDQxLDB4ZmMsMHhjMSwweDVkLDB4YzUsMHhlOSwweGI5LDB4MDgs MHhkYSwKKysJMHhmOSwweGZhLDB4MGQsMHg5MCwweGNlLDB4ZGYsMHgxZCwweDEwLDB4YTksMHg4 ZCwweDUwLDB4MGMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4OWEsMHg4ZCww eDM5LDB4NDksMHg0MiwweGQ1LDB4MGIsMHhhZSwweGUxLDB4YWYsMHhiNywweDAwLAorKwkweDAy LDB4ZmEsMHg5NiwweGIxLDB4YTUsMHgxZCwweDJkLDB4MjUsMHg3OCwweGVlLDB4ODMsMHgzZgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTQsMHhmNSwweDUzLDB4NzksMHg1 YSwweDk3LDB4NTgsMHgwNiwweDA4LDB4YmEsMHg3YiwweGZhLAorKwkweGYwLDB4ODMsMHgwNSww eDhjLDB4MjIsMHhjMCwweGM5LDB4ZGIsMHgxNSwweGU3LDB4ZGUsMHgyMCwKKysJMHg1NSwweDIy LDB4OWEsMHhhZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg2NywweDA5 LDB4NDgsMHhhYSwweDA3LDB4MTYsMHg5OSwweDg5LDB4N2YsMHg2ZCwweGEwLDB4ZTUsCisrCTB4 OGYsMHhkZiwweGJjLDB4ZGIsMHhmZSwweGU1LDB4NmMsMHg3YSwweDk1LDB4NGEsMHg2NiwweDE3 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDBmLDB4NGIsMHgxYyww eDZmLDB4YjcsMHhlMywweDQ3LDB4ZTUsMHg1ZCwweDdkLDB4MzgsMHhkNiwKKysJMHgyOCwweDli LDB4ZWIsMHg1NSwweDYzLDB4MDksMHgzZSwweDdjLDB4NTYsMHhlYSwweGY4LDB4MTkKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf YWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDJkLDB4MjYsMHg3YywweDM3LDB4ZTQsMHg3 YSwweDI4LDB4NWUsMHg1YSwweDNjLDB4YWYsMHgzZCwKKysJMHg1YSwweDhlLDB4NTUsMHhhMiww eDFhLDB4NmUsMHhjMCwweGU1LDB4ZjYsMHgyMSwweGQzLDB4ZjYKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4NGQsMHg4MywweDM1LDB4ZGYsMHg2NywweGE5LDB4ZmMsMHgxNywweGRh LDB4NzAsMHhjYywweDhiLAorKwkweDdmLDB4NzcsMHhhZSwweGEyLDB4NWYsMHhiOSwweDdlLDB4 NzQsMHg0YywweDI2LDB4YzEsMHg3YSwKKysJMHgzYiwweGE3LDB4NWMsMHg5MworKwl9OworKwor KworKy8qIFNIQS0yNTYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGNlLDB4NDks MHgwMCwweDdhLDB4NTYsMHhlMywweDY3LDB4OGYsMHhlMSwweGI2LDB4YTcsMHhkNCwKKysJMHg0 ZiwweDA4LDB4N2EsMHgxYiwweDAxLDB4ZjQsMHhmYSwweDZiLDB4ZWYsMHhiNywweGU1LDB4ZWIs CisrCTB4MDcsMHgzZCwweDExLDB4MGQsMHhjOCwweGVhLDB4MmIsMHhmZQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9ub25j ZVtdID0KKysJeworKwkweDczLDB4NDEsMHhjOCwweDkyLDB4OTQsMHhlMiwweGM1LDB4NWYsMHg5 MywweGZkLDB4MzksMHg1ZCwKKysJMHgyYiwweDkxLDB4NGQsMHgzOAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg1MCwweDZkLDB4MDEsMHgwMSwweDA3LDB4NWEs MHg4MCwweDM1LDB4N2EsMHg1NiwweDFhLDB4NTYsCisrCTB4MmYsMHg5YSwweDBiLDB4MzUsMHhi MiwweGIxLDB4YzksMHhlNSwweGNhLDB4NjksMHg2MSwweDQ4LAorKwkweGZmLDB4ZmIsMHgwZiww eGQ5LDB4NGIsMHg3OSwweDFkLDB4YmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7 CisrCTB4MjAsMHhiOCwweGRmLDB4NDQsMHg3NywweDVhLDB4YjgsMHhkMywweGJmLDB4ZjYsMHhj ZiwweGFjLAorKwkweDVlLDB4YTYsMHg5NiwweDYyLDB4NzMsMHg0NCwweDQwLDB4NGEsMHgzMCww eGZiLDB4MzgsMHhhNSwKKysJMHg3YiwweDBkLDB4ZTQsMHgwZCwweGM2LDB4ZTQsMHg5YSwweDFm CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4MDQsMHhjNCwweDY1LDB4ZjQs MHhkMywweGJmLDB4ODMsMHg0YiwweGFiLDB4YzgsMHg0MSwweGE4LAorKwkweGMyLDB4ZTAsMHg0 NCwweDYzLDB4NzcsMHg0YywweDZmLDB4NmMsMHg0OSwweDQ2LDB4ZmYsMHg5NCwKKysJMHgxNyww eGVhLDB4ZTYsMHgxYSwweDlkLDB4NWUsMHg2NiwweDc4CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHgwNywweDRkLDB4YWMsMHg5YiwweDg2LDB4Y2EsMHg0YSwweGFhLDB4 NmUsMHg3YSwweDAzLDB4YTIsCisrCTB4NWQsMHgxMCwweGVhLDB4MGIsMHhmOSwweDgzLDB4Y2Ms MHhkMSwweGZjLDB4ZTIsMHgwNywweGM3LAorKwkweDA2LDB4MzQsMHg2MCwweDZmLDB4ODMsMHg5 NCwweDk5LDB4NzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDg5LDB4 NGUsMHg0NSwweDhjLDB4MTEsMHhmOSwweGJjLDB4NWIsMHhhYywweDc0LDB4OGIsMHg0YiwKKysJ MHg1ZiwweGY3LDB4MTksMHhmMywweGY1LDB4MjQsMHg1NCwweDE0LDB4ZDEsMHgxNSwweGIxLDB4 NDMsCisrCTB4MTIsMHhhNCwweDVmLDB4ZDQsMHhlYywweGZjLDB4Y2QsMHgwOQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgwZSwweGViLDB4MWYsMHhkNywweGZjLDB4ZDEs MHg5ZCwweGQ0LDB4MDUsMHgzNiwweDhiLDB4YjIsCisrCTB4ZmIsMHhlNCwweGY0LDB4NTEsMHgw YywweDg3LDB4OWIsMHgwMiwweDQ0LDB4ZDUsMHg5MiwweDRkLAorKwkweDQ0LDB4ZmUsMHgxYSww eDAzLDB4NDMsMHg1NiwweGJkLDB4ODYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4MDIsMHhhYSwweGI2LDB4MWQsMHg3ZSwweDJhLDB4NDAsMHgwMywweDY5LDB4MmQsMHg0OSww eGEzLAorKwkweDQxLDB4ZTcsMHg0NCwweDBiLDB4YWYsMHg3YiwweDg1LDB4ZTQsMHg1ZiwweDUz LDB4M2IsMHg2NCwKKysJMHhiYywweDg5LDB4YzgsMHg4MiwweGQ0LDB4NzgsMHgzNywweGEyCisr CX07CisrCisrCisrLyogU0hBLTI1NiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4 NWIsMHgxYiwweGVjLDB4NGQsMHhhOSwweDM4LDB4NzQsMHg1YSwweDM0LDB4MGIsMHg3YiwweGM1 LAorKwkweGU1LDB4ZDcsMHg2NiwweDdjLDB4YmMsMHg4MiwweGI5LDB4MGUsMHgyZCwweDFmLDB4 OTIsMHhkNywKKysJMHhjMSwweGJjLDB4NjcsMHg2OSwweGVjLDB4NmIsMHgwMywweDNjCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2 X25vbmNlW10gPQorKwl7CisrCTB4YTQsMHgwYywweGQ4LDB4OWMsMHg2MSwweGQ4LDB4YzMsMHg1 NCwweGZlLDB4NTMsMHhjOSwweGU1LAorKwkweDVkLDB4NmYsMHg2ZCwweDM1CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDIyLDB4NWUsMHg2MiwweDkzLDB4NDIsMHg4 MywweDc4LDB4MjQsMHhkOCwweDQwLDB4OGMsMHhkZSwKKysJMHg2ZiwweGY5LDB4YTQsMHg3YSww eGM1LDB4YTcsMHgzYiwweDg4LDB4YTMsMHhlZSwweDQyLDB4MjAsCisrCTB4ZmQsMHg2MSwweDU2 LDB4YzYsMHg0YywweDEzLDB4NDEsMHg5YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHhiZiwweDc0LDB4NWIsMHhmNiwweGM1LDB4NjQsMHg1ZSwweDk5LDB4MzQsMHg4ZiwweGJj LDB4YTQsCisrCTB4ZTIsMHhiZCwweGQ4LDB4ODUsMHgyNiwweDM3LDB4ZWEsMHhiYSwweDRmLDB4 ZjIsMHg5YSwweDlhLAorKwkweDY2LDB4ZmMsMHhkZiwweDYzLDB4MjYsMHgyNiwweDE5LDB4ODcK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGIzLDB4YzYsMHgwNywweDA3LDB4 ZDYsMHg3NSwweGY2LDB4MmIsMHhkNiwweDIxLDB4OTYsMHhmMSwKKysJMHhhZSwweGRiLDB4MmIs MHhhYywweDI1LDB4MmEsMHhhZSwweGFlLDB4NDEsMHg3MiwweDAzLDB4NWUsCisrCTB4YmYsMHhk MywweDY0LDB4YmMsMHg1OSwweGY5LDB4YzAsMHg3NgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9CisrCXsKKysJMHhiZiwweDIwLDB4MzMsMHg1NiwweDI5LDB4YTgsMHgzNywweDA0LDB4MWYs MHg3OCwweDM0LDB4M2QsCisrCTB4ODEsMHgyYSwweGM5LDB4ODYsMHhjNiwweDdhLDB4MmYsMHg4 OCwweDVlLDB4ZDUsMHhiZSwweDM0LAorKwkweDQ2LDB4MjAsMHhhNCwweDM1LDB4ZWIsMHhjNyww eGUyLDB4OWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OWIsMHhh ZSwweDJkLDB4MmQsMHg2MSwweGE0LDB4ODksMHhlYiwweDQzLDB4NDYsMHhhNywweGRhLAorKwkw eGVmLDB4NDAsMHhjYSwweDRhLDB4OTksMHgxMSwweDQxLDB4ZGMsMHg1YywweDk0LDB4ZTksMHhh YywKKysJMHhkNCwweGQwLDB4ZTYsMHhiZCwweGZiLDB4MDMsMHg5YywweGE4CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgyMywweGFhLDB4MGMsMHhiZCwweDI4LDB4MzMsMHhl MiwweDUxLDB4ZmMsMHg3MSwweGQyLDB4MTUsCisrCTB4MWYsMHg3NiwweGZkLDB4MGQsMHhlMCww eGI3LDB4YjUsMHg4NCwweDc1LDB4NWIsMHhiZSwweGYzLAorKwkweDVjLDB4Y2EsMHhjNSwweDMw LDB4ZjIsMHg3NSwweDFmLDB4ZGEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OTAs MHgzYywweGMxLDB4MTAsMHg4YywweDEyLDB4MDEsMHhjNiwweGE2LDB4M2EsMHgwZiwweDRkLAor KwkweGI2LDB4M2EsMHg0ZiwweDQxLDB4OWMsMHg2MSwweDc1LDB4ODQsMHhlOSwweDc0LDB4NzUs MHhmZCwKKysJMHhmZSwweGYyLDB4MWYsMHg0MywweGQ4LDB4NWUsMHgyNCwweGEzCisrCX07Cisr CisrCisrLyogU0hBLTM4NCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NzEsMHg5 ZCwweGIyLDB4NWEsMHg3MSwweDZkLDB4MDQsMHhlOSwweDFlLDB4YzcsMHg5MiwweDI0LAorKwkw eDZlLDB4MTIsMHgzMywweGE5LDB4NTIsMHg2NCwweDMxLDB4ZWYsMHg3MSwweGViLDB4MjIsMHg1 NSwKKysJMHgyOCwweDk3LDB4MDYsMHg2YSwweGMwLDB4MGMsMHhhMCwweDdlCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX25v bmNlW10gPQorKwl7CisrCTB4ZjUsMHgwZCwweGZhLDB4YjAsMHhlYywweDZhLDB4N2MsMHhkNiww eGJkLDB4OWIsMHgwNSwweGZkLAorKwkweDM4LDB4M2UsMHgyZSwweDU2CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDc0LDB4YWMsMHg3ZSwweDZkLDB4YjEsMHhh NCwweGU3LDB4MjEsMHhkMSwweDFlLDB4NmUsMHg5NiwKKysJMHg2ZCwweDRkLDB4NTMsMHg0Niww eDgyLDB4OTYsMHg2ZSwweGNmLDB4YWEsMHg4MSwweDhkLDB4N2QsCisrCTB4OWUsMHhlMSwweDBm LDB4MTUsMHhlYSwweDQxLDB4YmYsMHhlMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Cisr CXsKKysJMHhkYSwweDk1LDB4ZDQsMHhkMCwweGI4LDB4MTEsMHhkMywweDQ5LDB4MjcsMHg1ZCww eGE5LDB4MzksCisrCTB4NjgsMHhmMywweGE4LDB4ZTksMHg1ZCwweDE5LDB4OGEsMHgyYiwweDY2 LDB4ZTgsMHg2OSwweDA2LAorKwkweDdjLDB4OWUsMHgwMywweGExLDB4OGIsMHgyNiwweDJkLDB4 NmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHg0OSwweGRmLDB4NDQsMHgw MCwweGU0LDB4MWMsMHg3NSwweDBiLDB4MjYsMHg1YSwweDU5LDB4NjQsCisrCTB4MWYsMHg0ZSww eGIxLDB4YjIsMHgxMywweGYxLDB4MjIsMHg0ZSwweGI0LDB4NmQsMHg5YSwweGNjLAorKwkweGEw LDB4NDgsMHhlNiwweGNmLDB4MWQsMHhkMSwweDkyLDB4MGQKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfaW50X3JldHVybmVk Yml0c1tdID0KKysJeworKwkweGM4LDB4NTIsMHhhZSwweGJmLDB4MDQsMHgzYywweDI3LDB4Yjcs MHg3OCwweDE4LDB4YWEsMHg4ZiwKKysJMHhmZiwweGNmLDB4YTQsMHhmMSwweGNjLDB4ZTcsMHg2 OCwweGZhLDB4MjIsMHhhMiwweDEzLDB4NDUsCisrCTB4ZTgsMHhkZCwweDg3LDB4ZTYsMHhmMiww eDZlLDB4ZGQsMHhjNywweDUyLDB4OTAsMHg5ZiwweDdiLAorKwkweGZhLDB4NjEsMHgyZCwweDlk LDB4OWUsMHhjZiwweDk4LDB4YWMsMHg1MiwweDQwLDB4Y2UsMHhhZgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlv bmFsaW5wdXQyW10gPQorKwl7CisrCTB4NjEsMHg3YywweDAzLDB4OWEsMHgzZSwweDUwLDB4NTcs MHg2MCwweGM1LDB4ODMsMHhjOSwweGIyLAorKwkweGQxLDB4ODcsMHg4NSwweDY2LDB4OTIsMHg1 ZCwweDg0LDB4MGUsMHg1MywweGZiLDB4NzAsMHgwMywKKysJMHg3MiwweGZkLDB4YmEsMHhhZSww eDljLDB4OGYsMHhmOCwweDE4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkw eGY4LDB4ZWIsMHg4OSwweGIxLDB4OGQsMHg3OCwweGJlLDB4MjEsMHhlMCwweGJiLDB4OWQsMHhi NywKKysJMHg5NSwweDBlLDB4ZDksMHg0NiwweDBjLDB4OGMsMHhlMiwweDYzLDB4YjcsMHg5ZCww eDY3LDB4OTAsCisrCTB4YmQsMHhjNywweDBiLDB4YTUsMHhjZSwweGIyLDB4NjUsMHg4MQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNiwweDlmLDB4ZmUsMHg2OCwweGQ2LDB4 YjUsMHg3OSwweGYxLDB4MDYsMHg1ZiwweGEzLDB4YmIsCisrCTB4MjMsMHg4NSwweGQ4LDB4ZjAs MHgyOSwweDVhLDB4NjgsMHg5ZSwweGY1LDB4ZjQsMHhhNiwweDEyLAorKwkweGUwLDB4OWEsMHhl MiwweGFjLDB4MDAsMHgxZCwweDk4LDB4MjYsMHhmYywweDUzLDB4OTUsMHg1MywKKysJMHhlNCww eDNlLDB4MTcsMHhkNSwweDA4LDB4MGIsMHg3MCwweDNkLDB4NjcsMHg5OSwweGFjLDB4NjYKKysJ fTsKKysKKysKKysvKiBTSEEtMzg0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgw NywweDE1LDB4MjcsMHgyYSwweGFmLDB4NzQsMHgyNCwweDM3LDB4YmMsMHhkNSwweDE0LDB4Njks CisrCTB4Y2UsMHgxMSwweGZmLDB4YTIsMHg2YiwweGI4LDB4MDUsMHg2NywweDM0LDB4ZjgsMHhi ZCwweDZkLAorKwkweDZhLDB4Y2MsMHhjZCwweDYwLDB4YTMsMHg2OCwweGNhLDB4ZjQKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf bm9uY2VbXSA9CisrCXsKKysJMHg3MCwweDE3LDB4YzIsMHg1YiwweDVkLDB4MjIsMHgwYiwweDA2 LDB4MTUsMHg1NCwweDc4LDB4NzcsCisrCTB4NDQsMHhhZiwweDJmLDB4MDkKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ODksMHgzOSwweDI4LDB4YjAsMHg2MCwweGVi LDB4M2QsMHhkYywweDU1LDB4NzUsMHg4NiwweGViLAorKwkweGFlLDB4YTIsMHg4ZiwweGJjLDB4 MWIsMHg3NSwweGQ0LDB4ZTEsMHgwZiwweGFhLDB4MzgsMHhjYSwKKysJMHg2MiwweDhiLDB4Y2Is MHgyYywweDI2LDB4ZjYsMHhiYywweGIxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweDMwLDB4MmIsMHg0MiwweDM1LDB4ZWYsMHhkYSwweDQwLDB4NTUsMHgyOCwweGM2LDB4OTUs MHhmYiwKKysJMHg1NCwweDAxLDB4NjIsMHhkNywweDg3LDB4MTQsMHg0OCwweDZkLDB4OTAsMHg0 YywweGE5LDB4MDIsCisrCTB4NTQsMHg0MCwweDIyLDB4YzgsMHg2NiwweGE1LDB4NDgsMHg0OAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ODIsMHhjNCwweGExLDB4OWMsMHgy MSwweGQyLDB4ZTcsMHhhNSwweGE2LDB4ZjYsMHg1ZiwweDA0LAorKwkweDVjLDB4YzcsMHgzMSww eDlkLDB4OGQsMHg1OSwweDc0LDB4NTAsMHgxOSwweDg5LDB4MmYsMHg2MywKKysJMHhkNSwweGI3 LDB4N2UsMHhlYiwweDE1LDB4ZTMsMHg3MCwweDgzLDB4YTEsMHgyNCwweDU5LDB4ZmEsCisrCTB4 MmMsMHg1NiwweGY2LDB4ODgsMHgzYSwweDkyLDB4OTMsMHhhMSwweGZiLDB4NzksMHhjMSwweDdh CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDM5LDB4YTYsMHhlOCwweDVj LDB4ODIsMHgxNywweDcxLDB4MjYsMHg1NywweDRmLDB4OWYsMHhjMiwKKysJMHg1NSwweGZmLDB4 NWMsMHg5YiwweDUzLDB4MWEsMHhkMSwweDVmLDB4YmMsMHg2MiwweGU0LDB4MjcsCisrCTB4MmQs MHgzMiwweGYwLDB4ZTQsMHg1MiwweDhjLDB4YzUsMHgwYworKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRy ZXNlZWRbXSA9CisrCXsKKysJMHg4ZCwweGNiLDB4OGQsMHhjZSwweDA4LDB4ZWEsMHg4MCwweGU4 LDB4OWIsMHg2MSwweGE4LDB4MGYsCisrCTB4YWYsMHg0OSwweDIwLDB4OWUsMHg3NCwweGNiLDB4 NTcsMHg4MCwweDQyLDB4YjAsMHg4NCwweDVlLAorKwkweDMwLDB4MmEsMHg2NywweDA4LDB4ZjQs MHhlMywweDQwLDB4MjIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDdjLDB4 OGYsMHhjMiwweGFlLDB4MjIsMHg0YSwweGQ2LDB4ZjYsMHgwNSwweGE0LDB4N2EsMHhlYSwKKysJ MHhiYiwweDI1LDB4ZDAsMHhiNywweDVhLDB4ZDYsMHhjZiwweDlkLDB4ZjMsMHg2YywweGUyLDB4 YjIsCisrCTB4NGUsMHhiNCwweGJkLDB4ZjQsMHhlNSwweDQwLDB4ODAsMHg5NAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHg5ZSwweDdlLDB4ZmIsMHg1OSwweGJiLDB4YWEsMHgzYyww eGY3LDB4ZTEsMHhmOCwweDc2LDB4ZGQsCisrCTB4NjMsMHg1ZiwweGFmLDB4MjMsMHhkNiwweDY0 LDB4NjEsMHhjMCwweDlhLDB4MDksMHg0NywweGM5LAorKwkweDMzLDB4ZGYsMHg2ZCwweDU1LDB4 OTEsMHgzNCwweDc5LDB4NzAsMHhjNCwweDk5LDB4NmUsMHg1NCwKKysJMHgwOSwweDY0LDB4MjEs MHgxYSwweGJkLDB4MWUsMHg4MCwweDQwLDB4MzQsMHhhZCwweGZhLDB4ZDcKKysJfTsKKysKKysK KysvKiBTSEEtNTEyIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxMywweGY3LDB4 NjEsMHg3NSwweDY1LDB4MjgsMHhhMiwweDU5LDB4MTMsMHg1YSwweDRhLDB4NGYsCisrCTB4NTYs MHg2MCwweDhjLDB4NTMsMHg3ZCwweGIwLDB4YmQsMHgwNiwweDRmLDB4ZWQsMHhjYywweGQyLAor KwkweGEyLDB4YjUsMHhmZCwweDViLDB4M2EsMHhhYiwweGVjLDB4MjgKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfbm9uY2Vb XSA9CisrCXsKKysJMHhiZSwweGEzLDB4OTEsMHg5MywweDFkLDB4YzMsMHgzMSwweDNhLDB4MjMs MHgzMywweDUwLDB4NjcsCisrCTB4ODgsMHhjNywweGEyLDB4YzQKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MWYsMHg1OSwweDRkLDB4N2IsMHhlNiwweDQ2LDB4 OTEsMHg0OCwweGMxLDB4MjUsMHhmYSwweGZmLAorKwkweDg5LDB4MTIsMHg3NywweDM1LDB4ZGYs MHgzZSwweGY0LDB4ODAsMHg1ZiwweGQ5LDB4YjAsMHgwNywKKysJMHgyMiwweDQxLDB4ZGQsMHg0 OCwweDc4LDB4NmIsMHg3NywweDJiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweDMwLDB4ZmYsMHg2MywweDZmLDB4YWMsMHhkOSwweDg0LDB4MzksMHg2ZiwweGU0LDB4OTks MHhjZSwKKysJMHg5MSwweDdkLDB4N2UsMHhjOCwweDU4LDB4ZjIsMHgxMiwweGMzLDB4YjYsMHhh ZCwweGRhLDB4MjIsCisrCTB4MDQsMHhhMCwweGQyLDB4MjEsMHhmZSwweGYyLDB4OTUsMHgxZAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDY0LDB4NTQsMHgxMywweGVjLDB4 NGYsMHg3NywweGRhLDB4YjIsMHg5MiwweDJlLDB4NTIsMHg4MCwKKysJMHgxMSwweDEwLDB4YzIs MHhmOCwweGU2LDB4YTcsMHhjZCwweDRiLDB4ZmMsMHgzMiwweDJlLDB4OWUsCisrCTB4ZWIsMHhi YiwweGIxLDB4YmYsMHgxNSwweDVjLDB4NzMsMHgwOAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4ZWYsMHgxZSwweGRjLDB4MGEsMHhhNCwweDM2LDB4OTEsMHg5YywweDNk LDB4MjcsMHg5NywweDUwLAorKwkweDhkLDB4MzYsMHgyOSwweDhkLDB4Y2UsMHg2YSwweDBjLDB4 ZjcsMHgyMSwweGMwLDB4OTEsMHhhZSwKKysJMHgwYywweDk2LDB4NzIsMHhiZCwweDUyLDB4ODEs MHg1OCwweGZjLDB4NmQsMHhlNSwweGY3LDB4YTUsCisrCTB4ZmQsMHg1ZCwweGE3LDB4NTgsMHg2 OCwweGM4LDB4OTksMHg1OCwweDhlLDB4YzgsMHhjZSwweDk1LAorKwkweDAxLDB4N2QsMHhmZiww eGE0LDB4YzgsMHhmNywweDYzLDB4ZmUsMHg1ZiwweDY5LDB4ODMsMHg1MywKKysJMHhlMiwweGM2 LDB4OGIsMHhjMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ZTYsMHg5 YiwweGM0LDB4ODgsMHgzNCwweGNhLDB4ZWEsMHgyOSwweDJmLDB4OTgsMHgwNSwweGE0LAorKwkw eGQzLDB4YzAsMHg3YiwweDExLDB4ZTgsMHhiYiwweDc1LDB4ZjIsMHhiZCwweDI5LDB4YjcsMHg0 MCwKKysJMHgyNSwweDdmLDB4YzEsMHhiNywweGIxLDB4ZjEsMHgyNSwweDYxCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2Vu dHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDIzLDB4NmQsMHhmZiwweGRlLDB4ZmIsMHhkMSww eGJhLDB4MzMsMHgxOCwweGU2LDB4YmUsMHhiNSwKKysJMHg0OCwweDc3LDB4NmQsMHg3ZiwweGE3 LDB4ZTEsMHg0ZCwweDQ4LDB4MWUsMHgzYywweGE3LDB4MzQsCisrCTB4MWEsMHhjOCwweDYwLDB4 ZGIsMHg4ZiwweDk5LDB4MTUsMHg5OQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHg3MCwweDI3LDB4MzEsMHhkYiwweDkyLDB4NzAsMHgyMSwweGZlLDB4MTYsMHhiNiwweGM4LDB4 NTEsCisrCTB4MzQsMHg4NywweDY1LDB4ZDAsMHg0ZSwweGZkLDB4ZmUsMHg2OCwweGVjLDB4YWMs MHhkYywweDkzLAorKwkweDQxLDB4MzgsMHg5MiwweDkwLDB4YjQsMHg5NCwweGY5LDB4MGQsMHhh NCwweGY3LDB4NGUsMHg4MCwKKysJMHg5MiwweDY3LDB4NDgsMHg0MCwweGE3LDB4MDgsMHhjNyww eGJjLDB4NjYsMHgwMCwweGZkLDB4ZjcsCisrCTB4NGMsMHg4YiwweDE3LDB4NmUsMHhkMSwweDhm LDB4OWIsMHhmMywweDZmLDB4ZjYsMHgzNCwweGRkLAorKwkweDY3LDB4ZjcsMHg2OCwweGRkCisr CX07CisrCisrCisrLyogU0hBLTUxMiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4 YjYsMHgwYiwweGI3LDB4YmMsMHg4NCwweDU2LDB4ZjYsMHgxMiwweGFmLDB4NDUsMHg2NywweDE3 LAorKwkweDdjLDB4ZDEsMHhiMiwweDc4LDB4MmIsMHhhMCwweGYyLDB4YmUsMHhiNiwweDZkLDB4 OGIsMHg1NiwKKysJMHhjNiwweGJjLDB4NGQsMHhlMSwweGY3LDB4YmUsMHhjZSwweGJkCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X25vbmNlW10gPQorKwl7CisrCTB4OWQsMHhlZCwweGMwLDB4ZTUsMHg1YSwweDk4LDB4NmEsMHhj YiwweDUxLDB4N2QsMHg3NiwweDMxLAorKwkweDVhLDB4NjQsMHhmMCwweGY3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGMyLDB4NmQsMHhhMywweGMzLDB4MDYsMHg3 NCwweGU1LDB4MDEsMHg1YywweDEwLDB4MTcsMHhjNywKKysJMHhhZiwweDgzLDB4OWQsMHg1OSww eDhkLDB4MmQsMHgyOSwweDM4LDB4YzUsMHg1OSwweDcwLDB4OGIsCisrCTB4NDYsMHg0OCwweDJk LDB4Y2YsMHgzNiwweDdkLDB4NTksMHhjMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHhlYywweDhjLDB4ZDQsMHhmNywweDYxLDB4NmUsMHgwZCwweDk1LDB4NzksMHhiNywweDI4 LDB4YWQsCisrCTB4NWYsMHg2OSwweDc0LDB4NWYsMHgyZCwweDM2LDB4MDYsMHg4YSwweDZiLDB4 YWMsMHg1NCwweDk3LAorKwkweGM0LDB4YTEsMHgxMiwweDg1LDB4MGEsMHhkZiwweDRiLDB4MzQK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGE1MTJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDg0LDB4MmYsMHgxZiwweDY4LDB4 NmEsMHhhMywweGFkLDB4MWUsMHhmYiwweGY0LDB4MTUsMHhiZCwKKysJMHhkZSwweDM4LDB4ZDQs MHgzMCwweDgwLDB4NTEsMHhlOSwweGQzLDB4YzcsMHgyMCwweDg4LDB4ZTksCisrCTB4ZjUsMHhj YywweGRmLDB4NTcsMHg1YywweDQ3LDB4MmYsMHg1NywweDNjLDB4NWYsMHgxMywweDU2LAorKwkw eGNjLDB4YzUsMHg0ZiwweDg0LDB4ZjgsMHgxMCwweDQxLDB4ZDUsMHg3ZSwweDU4LDB4NmUsMHgx OSwKKysJMHgxOSwweDllLDB4YWYsMHhjMiwweDIyLDB4NTgsMHg0MSwweDUwLDB4NzksMHhjMiww eGQ4LDB4MDQsCisrCTB4MjgsMHhkNCwweDM5LDB4OWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4ZmEsMHg3ZiwweDQ2LDB4NTEsMHg4MywweDYyLDB4OTgsMHgxNiwweDlh LDB4MTksMHhhMiwweDQ5LAorKwkweGE5LDB4ZTYsMHg0YSwweGQ4LDB4ODUsMHhlNywweGQ0LDB4 M2IsMHgyYywweDgyLDB4YzUsMHg4MiwKKysJMHhiZiwweDExLDB4ZjksMHg5ZSwweGJjLDB4ZDAs MHgwMSwweGVlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGI5LDB4 MTIsMHhlMCwweDRmLDB4ZjcsMHhhNywweGM0LDB4ZDgsMHhkMCwweDhlLDB4OTksMHgyOSwKKysJ MHg3YywweDlhLDB4ZTksMHhjZiwweGM0LDB4NmMsMHhmOCwweGMzLDB4YTcsMHg0MSwweDgzLDB4 ZDYsCisrCTB4MmUsMHhmYSwweGI4LDB4NWUsMHg4ZSwweDZiLDB4NzgsMHgyMAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRp dGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ZDcsMHgwNywweDUyLDB4YjksMHg4MywweDJjLDB4 MDMsMHg3MSwweGVlLDB4YzksMHhjMCwweDg1LAorKwkweGUxLDB4NTcsMHhiMiwweGNkLDB4M2Es MHhmMCwweGM5LDB4MzQsMHgyNCwweDQxLDB4MWMsMHg0MiwKKysJMHg5OSwweGIyLDB4ODQsMHhl OSwweDE3LDB4ZDIsMHg3NiwweDkyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDM2 LDB4MTcsMHg1ZCwweDk4LDB4MmIsMHg2NSwweDI1LDB4OGUsMHhjOCwweDI5LDB4ZGYsMHgyNywK KysJMHgwNSwweDM2LDB4MjYsMHgxMiwweDhhLDB4NjgsMHg3NCwweDI3LDB4MzcsMHhkNCwweDdm LDB4MzIsCisrCTB4YjEsMHgxMiwweGQ2LDB4ODUsMHg4MywweGViLDB4MmUsMHhhMCwweGVkLDB4 NGIsMHhiNSwweDdiLAorKwkweDZmLDB4MzksMHgzYywweDcxLDB4NzcsMHgwMiwweDEyLDB4Y2Ms MHgyYywweDNhLDB4OGUsMHg2MywKKysJMHhkZiwweDRhLDB4YmQsMHg2ZiwweDZlLDB4MmUsMHhl ZCwweDBhLDB4ODUsMHhhNSwweDJmLDB4YTIsCisrCTB4NjgsMHhkZSwweDQyLDB4YjUKKysJfTsK KysKKysKKysvKiBITUFDIFNIQS0xIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJ MHgyNiwweDVmLDB4MzYsMHgxNCwweGZmLDB4M2QsMHg4MywweGZhLDB4NzMsMHg1ZSwweDc1LDB4 ZGMsCisrCTB4MmMsMHgxOCwweDE3LDB4MWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfbm9uY2VbXSA9CisrCXsKKysJ MHhjOCwweGUzLDB4NTcsMHhhNSwweDdiLDB4NzQsMHg4NiwweDZlCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDZlLDB4ZGIsMHgwZCwweGZlLDB4N2QsMHhh YywweDc5LDB4ZDAsMHhhNSwweDNhLDB4NDgsMHg4NSwKKysJMHg4MCwweGUyLDB4N2YsMHgyYQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMSwweGNkLDB4NWUsMHg0 MywweGRjLDB4ZmIsMHg3YSwweDc5LDB4Y2EsMHg4OCwweGRlLDB4MWYsCisrCTB4ZDcsMHhiYiww eDQyLDB4MDkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHg3YywweDIz LDB4OTUsMHgzOCwweDAwLDB4OTUsMHhjMSwweDc4LDB4MWYsMHg4ZiwweGQ3LDB4NjMsCisrCTB4 MjMsMHg4NywweDJhLDB4ZWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweGJiLDB4MzQsMHhlNywweDkzLDB4YTMsMHgwMiwweDJjLDB4NGEsMHhkMCwweDg5LDB4ZGEs MHg3ZiwKKysJMHhlZCwweGY0LDB4NGMsMHhkZSwweDE3LDB4ZWMsMHhlNSwweDZjCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEx X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg0OSwweGJjLDB4MmQsMHgyYywweGI3 LDB4MzIsMHhjYiwweDIwLDB4ZGYsMHhmNSwweDc3LDB4NTgsCisrCTB4YTAsMHg0YiwweDkzLDB4 NmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4M2MsMHhhYSwweGIw LDB4MjEsMHg0MiwweGIwLDB4ZGQsMHgzNCwweGYwLDB4MTYsMHg3ZiwweDBjLAorKwkweDBmLDB4 ZmYsMHgyZSwweGFmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDhlLDB4 Y2IsMHhhMywweDY0LDB4YjIsMHhiOCwweDMzLDB4NmMsMHg2NCwweDNiLDB4NzgsMHgxNiwKKysJ MHg5OSwweDM1LDB4YzgsMHgzMCwweGNiLDB4M2UsMHhhMCwweGQ4CisrCX07CisrCisrCisrLyog SE1BQyBTSEEtMSBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MzIsMHg5YSww eDJhLDB4ODcsMHg3YiwweDg5LDB4N2MsMHhmNiwweGNiLDB4OTUsMHhkNSwweDQwLAorKwkweDE3 LDB4ZmUsMHg0NywweDcwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX25vbmNlW10gPQorKwl7CisrCTB4MTYsMHhkOCwweGUw LDB4YzcsMHg1MiwweGNmLDB4NGEsMHgyNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9CisrCXsKKysJMHgzNSwweDM1LDB4YTksMHhhNSwweDQwLDB4YmUsMHg5YiwweGQxLDB4NTYs MHhkZCwweDQ0LDB4MDAsCisrCTB4NzIsMHhmNywweGQzLDB4NWUKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25h bGlucHV0W10gPQorKwl7CisrCTB4MWIsMHgyYywweDg0LDB4MmQsMHg0YSwweDg5LDB4OGYsMHg2 OSwweDE5LDB4ZjEsMHhmMywweGRiLAorKwkweGJiLDB4ZTMsMHhhYSwweGVhCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhjZiwweGZhLDB4N2QsMHg3MiwweDBmLDB4ZTYs MHhjNywweDk2LDB4YTAsMHg2OSwweDMxLDB4MTEsCisrCTB4OWIsMHgwYiwweDFhLDB4MjAsMHgx ZiwweDNmLDB4YWEsMHhkMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJ MHg5MCwweDc1LDB4MTUsMHgwNCwweDk1LDB4ZjEsMHhiYSwweDgxLDB4MGMsMHgzNywweDk0LDB4 NmYsCisrCTB4ODYsMHg1MiwweDZkLDB4OWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4NWIsMHg0MCwweGJhLDB4NWYsMHgxNywweDcwLDB4ZjAsMHg0YiwweGRm LDB4YzksMHg5NywweDkyLAorKwkweDc5LDB4YzUsMHg4MiwweDI4CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9u YWxpbnB1dDJbXSA9CisrCXsKKysJMHg5NywweGM4LDB4ODAsMHg5MCwweGIzLDB4YWEsMHg2ZSww eDYwLDB4ZWEsMHg4MywweDdhLDB4ZTMsCisrCTB4OGEsMHhjYSwweGE0LDB4N2YKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OTAsMHhiZCwweDA1LDB4NTYsMHg2ZCwweGI1LDB4 MjIsMHhkNSwweGI5LDB4NWEsMHgyOSwweDJkLAorKwkweGU5LDB4MGIsMHhlMSwweGFjLDB4ZGUs MHgyNywweDBiLDB4YjAKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0yMjQgUFIgICovCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJf ZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MTcsMHgzMiwweDJiLDB4MmUsMHg2ZiwweDFiLDB4 OWMsMHg2ZCwweDMxLDB4ZTAsMHgzNCwweDA3LAorKwkweGNmLDB4ZWQsMHhmNiwweGI2LDB4NWEs MHg3NiwweDRjLDB4YmMsMHg2MiwweDg1LDB4MDEsMHg5MAorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX25vbmNlW10g PQorKwl7CisrCTB4MzgsMHhiZiwweDVmLDB4MjAsMHhiMywweDY4LDB4MmYsMHg0MywweDYxLDB4 MDUsMHg4ZiwweDIzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7 CisrCTB4YzAsMHhjOSwweDQ1LDB4YWMsMHg4ZCwweDI3LDB4NzcsMHgwOCwweDBiLDB4MTcsMHg2 ZCwweGVkLAorKwkweGMxLDB4N2QsMHhkNSwweDA3LDB4OWQsMHg2ZSwweGY4LDB4MjMsMHgyYSww eDIyLDB4MTMsMHhiZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkw eGE0LDB4M2MsMHhlNywweDNiLDB4ZWEsMHgxOSwweDQ1LDB4MzIsMHhjMiwweDgzLDB4NmQsMHgy MSwKKysJMHg4YSwweGMwLDB4ZWUsMHg2NywweDQ1LDB4ZGUsMHgxMywweDdkLDB4OWQsMHg2MSww eDAwLDB4M2IKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDE1LDB4 MDUsMHg3NCwweDRhLDB4N2YsMHg4ZCwweDVjLDB4NjAsMHgxNiwweGU1LDB4N2IsMHhhZCwKKysJ MHhmNSwweDQxLDB4OGYsMHg1NSwweDYwLDB4YzQsMHgwOSwweGVlLDB4MWUsMHgxMSwweDgxLDB4 YWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NmYsMHhmNSww eDlhLDB4ZTIsMHg1NCwweDUzLDB4MzAsMHgzZCwweDVhLDB4MjcsMHgyOSwweDM4LAorKwkweDI3 LDB4ZjIsMHgwZCwweDA1LDB4ZTksMHgyNiwweGNiLDB4MTYsMHhjMywweDUxLDB4NWYsMHgxMywK KysJMHg0MSwweGZlLDB4OTksMHhmMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 CisrCXsKKysJMHg3MywweDgxLDB4ODgsMHg4NCwweDhmLDB4ZWQsMHg2ZiwweDEwLDB4OWYsMHg5 MywweGJmLDB4MTcsCisrCTB4MzUsMHg3YywweGVmLDB4ZDUsMHg4ZCwweDI2LDB4YTYsMHg3YSww eGU4LDB4MDksMHgzNiwweDRmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7 CisrCTB4ZTYsMHhjZiwweGNmLDB4N2UsMHgxMiwweGU1LDB4NDMsMHhkMiwweDM4LDB4ZDgsMHgy NCwweDZmLAorKwkweDVhLDB4MzcsMHg2OCwweGJmLDB4NGYsMHhhMCwweGZmLDB4ZDUsMHg2MSww eDhhLDB4OTMsMHhlMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGFm LDB4ZjksMHhkOCwweDE5LDB4OTEsMHgzMCwweDgyLDB4NmYsMHhhOSwweDFlLDB4OWQsMHhkNywK KysJMHhmMywweDUwLDB4ZTAsMHhjNywweGQ1LDB4NjQsMHg5NiwweDdkLDB4NGMsMHg0ZCwweDc4 LDB4MDMsCisrCTB4NmQsMHhkOCwweDllLDB4NzIKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0y MjQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MTEsMHg4MiwweGZkLDB4 ZDksMHg0MiwweGY0LDB4ZmEsMHhjOCwweGYyLDB4NDEsMHhlNiwweDU0LAorKwkweDAxLDB4YWUs MHgyMiwweDZlLDB4YzYsMHhhZiwweGFmLDB4ZDAsMHhhNiwweGIyLDB4ZTIsMHg2ZAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjI0X25vbmNlW10gPQorKwl7CisrCTB4YTksMHg0OCwweGQ3LDB4OTIsMHgzOSwweDdlLDB4MmEs MHhkYywweDMwLDB4MWYsMHgwZSwweDJiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5n W10gPQorKwl7CisrCTB4MTEsMHhkNSwweGY0LDB4YmQsMHg2NywweDhjLDB4MzEsMHhjZiwweGEz LDB4M2YsMHgxZSwweDZiLAorKwkweGE4LDB4MDcsMHgwMiwweDBiLDB4YzgsMHgyZSwweDZjLDB4 NjQsMHg0MSwweDViLDB4YzgsMHgzNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJ eworKwkweDY4LDB4MTgsMHhjMiwweDA2LDB4ZWIsMHgzZSwweDA0LDB4OTUsMHg0NCwweDVlLDB4 ZmIsMHhlNiwKKysJMHg0MSwweGMxLDB4NWMsMHhjYywweDQwLDB4MmYsMHhiNywweGQyLDB4MGYs MHhmMywweDZiLDB4ZTcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 N2YsMHg0NSwweGM3LDB4NWQsMHgzMiwweGU2LDB4MTcsMHg2MCwweGJhLDB4ZGMsMHhiOCwweDQy LAorKwkweDFiLDB4OWMsMHhmMSwweGZhLDB4M2IsMHg0ZCwweDI5LDB4NTQsMHhjNiwweDkwLDB4 ZmYsMHg1YywKKysJMHhjZCwweGQ2LDB4YTksMHhjYworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dHJl c2VlZFtdID0KKysJeworKwkweGM0LDB4OGUsMHgzNywweDk1LDB4NjksMHg1MywweDI4LDB4ZDcs MHgzNywweGJiLDB4NzAsMHg5NSwKKysJMHgxYywweDA3LDB4MWQsMHhkOSwweGI3LDB4ZTYsMHgx YiwweGJiLDB4ZmUsMHg0MSwweGViLDB4YzkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHg1MywweDE3LDB4YTEsMHg2YSwweGZhLDB4NzcsMHg0NywweGIwLDB4 OTUsMHg1NiwweDlhLDB4MjAsCisrCTB4NTcsMHhkZSwweDVjLDB4ODksMHg5ZiwweDdmLDB4ZTIs MHhkZSwweDE3LDB4M2EsMHg1MCwweDIzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0MltdID0K KysJeworKwkweDNhLDB4MzIsMHhmOSwweDg1LDB4MGMsMHhjMSwweGVkLDB4NzYsMHgyZCwweGRm LDB4NDAsMHhjMywKKysJMHgwNiwweDIyLDB4NjYsMHhkNCwweDlhLDB4OWEsMHhmZiwweDVhLDB4 N2UsMHg3YSwweGYzLDB4OTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0 MywweGI0LDB4NTcsMHg1YywweDM4LDB4MjUsMHg5ZCwweGFlLDB4ZWMsMHg5NiwweGQxLDB4ODUs CisrCTB4M2EsMHg4NCwweDhkLDB4ZmUsMHg2OCwweGQ1LDB4MGUsMHg1YywweDhmLDB4NjUsMHhh NSwweDRlLAorKwkweDQ1LDB4ODQsMHhhOCwweDk0CisrCX07CisrCisrCisrLyogSE1BQyBTSEEt MjU2IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDRkLDB4YjAsMHg0Myww eGQ4LDB4MzQsMHg0YiwweDEwLDB4NzAsMHhiMSwweDhiLDB4ZWQsMHhlYSwKKysJMHgwNywweDky LDB4OWYsMHg2YywweDc5LDB4MzEsMHhhZiwweDgxLDB4MjksMHhlYiwweDZlLDB4Y2EsCisrCTB4 MzIsMHg0OCwweDI4LDB4ZTcsMHgwMiwweDVkLDB4YTYsMHhhNgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX25vbmNl W10gPQorKwl7CisrCTB4M2EsMHhhZSwweDE1LDB4YTksMHg5OSwweGRjLDB4ZTQsMHg2NywweDM0 LDB4M2IsMHg3MCwweDE1LAorKwkweGFhLDB4ZDMsMHgzMCwweDlhCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MTMsMHgxZCwweDI0LDB4MDQsMHhiMCww eDE4LDB4ODEsMHgxNSwweDIxLDB4NTEsMHgyYSwweDI0LAorKwkweDUyLDB4NjEsMHhiZSwweDY0 LDB4ODIsMHg2YiwweDU1LDB4MmYsMHhlMiwweGYxLDB4NDAsMHg3ZCwKKysJMHg3MSwweGQ4LDB4 MDEsMHg4NiwweDE1LDB4YjcsMHg4YiwweGI1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0 W10gPQorKwl7CisrCTB4OGYsMHhhNiwweDU0LDB4NWYsMHhiMSwweGQwLDB4ZDgsMHhjMywweGU3 LDB4MGMsMHgxNSwweGE5LAorKwkweDIzLDB4NmUsMHhmZSwweGZiLDB4OTMsMHhmNywweDNhLDB4 YmQsMHg1OSwweDAxLDB4ZmEsMHgxOCwKKysJMHg4ZSwweGU5LDB4MWEsMHhhOSwweDc4LDB4ZmMs MHg3OSwweDBiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhjZiww eDI0LDB4YjksMHhlYiwweGIzLDB4ZDQsMHhjZCwweDE3LDB4MzcsMHgzOCwweDc1LDB4NzksCisr CTB4MTUsMHhjYiwweDJkLDB4NzUsMHg1MSwweGYxLDB4Y2MsMHhhYSwweDMyLDB4YTQsMHhhNyww eDM2LAorKwkweDdjLDB4NWMsMHhlNCwweDQ3LDB4ZjEsMHgzZSwweDFkLDB4ZTUKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NTIsMHg0MiwweGZhLDB4ZWIsMHg4 NSwweGUwLDB4MzAsMHgyMiwweDc5LDB4MDAsMHgxNiwweGIyLAorKwkweDg4LDB4MmYsMHgxNCww eDZhLDB4YjcsMHhmYywweGI3LDB4NTMsMHhkYywweDRhLDB4MTIsMHhlZiwKKysJMHg1NCwweGQ2 LDB4MzMsMHhlOSwweDIwLDB4ZDYsMHhmZCwweDU2CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlu cHV0MltdID0KKysJeworKwkweGY0LDB4ZjYsMHg0OSwweGExLDB4MmQsMHg2NCwweDJiLDB4MzAs MHg1OCwweGY4LDB4YmQsMHhiOCwKKysJMHg3NSwweGViLDB4YmIsMHg1ZSwweDFjLDB4OWIsMHg4 MSwweDZhLDB4ZGEsMHgxNCwweDg2LDB4NmUsCisrCTB4ZDAsMHhkYSwweDE4LDB4YjcsMHg4OCww eGZiLDB4NTksMHhmMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkw eDIxLDB4Y2QsMHg2ZSwweDQ2LDB4YWQsMHg5OSwweDA3LDB4MTcsMHhiNCwweDNkLDB4NzYsMHgw YSwKKysJMHhmZiwweDViLDB4NTIsMHg1MCwweDc4LDB4ZGYsMHgxZiwweDI0LDB4MDYsMHgwZCww eDNmLDB4NzQsCisrCTB4YTksMHhjOSwweDM3LDB4Y2YsMHhkOCwweDI2LDB4MjUsMHg5MQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGE3LDB4YWYsMHgyZiwweDI5LDB4 ZTAsMHgzYSwweDcyLDB4OTUsMHg5NiwweDFjLDB4YTksMHhmMCwKKysJMHg0YSwweDE3LDB4NGQs MHg2NiwweDA2LDB4MTAsMHhiZiwweDM5LDB4ODksMHg4OCwweGI4LDB4OTEsCisrCTB4MzcsMHgx OCwweDk5LDB4Y2YsMHg4YywweDUzLDB4M2IsMHg3ZQorKwl9OworKworKworKy8qIEhNQUMgU0hB LTI1NiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg5NiwweGI3LDB4NTMs MHgyMiwweDFlLDB4NTIsMHgyYSwweDk2LDB4YjEsMHgxNSwweDNjLDB4MzUsCisrCTB4NWEsMHg4 YiwweGQzLDB4NGEsMHhhNiwweDZjLDB4ODMsMHgwYSwweDdkLDB4YTMsMHgyMywweDNkLAorKwkw eDQzLDB4YTEsMHgwNywweDJjLDB4MmQsMHhlMywweDgxLDB4Y2MKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9ub25jZVtd ID0KKysJeworKwkweGYxLDB4YWMsMHg5NywweGNiLDB4NWUsMHgwNiwweDQ4LDB4ZDIsMHg5NCww eGJlLDB4MTUsMHgyZSwKKysJMHhjNywweGZjLDB4YzIsMHgwMQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDk4LDB4YzUsMHgxZSwweDM1LDB4NWUsMHg4OSww eDBkLDB4Y2UsMHg2NCwweDZkLDB4MTgsMHhhNywKKysJMHg1YSwweGM2LDB4ZjMsMHhlNywweGQ2 LDB4OWUsMHhjMCwweGVhLDB4YjcsMHgzYSwweDhkLDB4NjUsCisrCTB4YjgsMHhlYiwweDEwLDB4 ZDcsMHg1NywweDE4LDB4YTAsMHgzMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJ eworKwkweDFiLDB4MTAsMHhhZiwweGFjLDB4ZDAsMHg2NSwweDk1LDB4YWQsMHgwNCwweGFkLDB4 MDMsMHgxYywKKysJMHhlMCwweDQwLDB4ZDYsMHgzZSwweDFjLDB4NDYsMHg1MywweDM5LDB4N2Ms MHhlMiwweGJjLDB4ZGEsCisrCTB4OGMsMHhhMiwweDMzLDB4YTcsMHg5YSwweDI2LDB4ZDMsMHgy NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhiYSwweDYxLDB4MGUs MHg1NSwweGZlLDB4MTEsMHg4YSwweDllLDB4MGYsMHg4MCwweGRmLDB4MWQsCisrCTB4MDMsMHgw YSwweGZlLDB4MTUsMHg5NCwweDI4LDB4NGIsMHhiYSwweGY0LDB4OWYsMHg1MSwweDI1LAorKwkw eDg4LDB4ZTUsMHg0ZSwweGZiLDB4YWYsMHhjZSwweDY5LDB4OTAKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg2MiwweDdmLDB4MWUsMHg2YiwweGU4LDB4OGUsMHhl MSwweDM1LDB4N2QsMHg5YiwweDRmLDB4YzcsCisrCTB4ZWMsMHhjOCwweGFjLDB4ZWYsMHg2Yiww eDEzLDB4OWUsMHgwNSwweDU2LDB4YzEsMHgwOCwweGY5LAorKwkweDJmLDB4MGYsMHgyNywweDlj LDB4ZDQsMHgxNSwweGVkLDB4MmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 CisrCXsKKysJMHhjNywweDc2LDB4NmUsMHhhOSwweGQyLDB4YjIsMHg3NiwweDQwLDB4ODIsMHgy NSwweDJjLDB4YjMsCisrCTB4NmYsMHhhYywweGU5LDB4NzQsMHhlZiwweDhmLDB4M2MsMHg4ZSww eGNkLDB4ZjEsMHhiZiwweGIzLAorKwkweDQ5LDB4NzcsMHgzNCwweDg4LDB4NTIsMHgzNiwweGU2 LDB4MmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OGQsMHhiOCww eDBjLDB4ZDEsMHhiZiwweDcwLDB4ZjYsMHgxOSwweGMzLDB4NDEsMHg4MCwweDlmLAorKwkweGUx LDB4YTUsMHhhNCwweDFmLDB4MmMsMHgyNiwweGIxLDB4ZTUsMHhkOCwweGViLDB4YmUsMHhmOCwK KysJMHhkZiwweDg4LDB4NmEsMHg4OSwweGQ2LDB4MDUsMHhkOCwweDlkCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcmV0 dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NDMsMHgxMiwweDJhLDB4MmMsMHg0MCwweDUzLDB4MmUs MHg3YywweDY2LDB4MzQsMHhhYywweGMzLAorKwkweDQzLDB4ZTMsMHhlMCwweDZhLDB4ZmMsMHhm YSwweGVhLDB4ODcsMHgyMSwweDFmLDB4ZTIsMHgyNiwKKysJMHhjNCwweGY5LDB4MDksMHg5YSww eDBkLDB4NmUsMHg3ZiwweGUwCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMzg0IFBSICAqLwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0 X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDY5LDB4ODEsMHg5OCwweDg4LDB4NDQsMHhm NSwweGQ2LDB4MmUsMHgwMCwweDA4LDB4M2IsMHhjNSwKKysJMHhmYiwweGQ3LDB4OGUsMHg2Ziww eDIzLDB4ZjgsMHg2ZCwweDA5LDB4ZDYsMHg4NSwweDQ5LDB4ZDEsCisrCTB4ZjgsMHg2ZCwweGE0 LDB4NTgsMHg1NCwweGZkLDB4ODgsMHhhOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNlW10gPQorKwl7Cisr CTB4NmUsMHgzOCwweDgxLDB4Y2EsMHhiNywweGU4LDB4NmUsMHg2NiwweDQ5LDB4OGEsMHhiMiww eDU5LAorKwkweGVlLDB4MTYsMHhjOSwweGRlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQorKwl7CisrCTB4ZmUsMHg0YywweGQ5LDB4ZjQsMHg3OCwweDNiLDB4MDgsMHg0 MSwweDhkLDB4OGYsMHg1NSwweGM0LAorKwkweDQzLDB4NTYsMHhiNiwweDEyLDB4MzYsMHg2Yiww eDMwLDB4YjcsMHg1ZSwweGUxLDB4YjksMHg0NywKKysJMHgwNCwweGIxLDB4NGUsMHhhOSwweDAw LDB4YTEsMHg1MiwweGExCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7Cisr CTB4ODksMHhlOSwweGNjLDB4OGYsMHgyNywweDNjLDB4MjYsMHhkMSwweDk1LDB4YzgsMHg3ZCww eDBmLAorKwkweDViLDB4MWEsMHhmMCwweDc4LDB4MzksMHg1NiwweDZmLDB4YTQsMHgyMywweGU3 LDB4ZDEsMHhkYSwKKysJMHg3YywweDY2LDB4MzMsMHhhMCwweDkwLDB4YzksMHg5MiwweDg4Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhiZSwweDNkLDB4N2MsMHgw ZCwweGNhLDB4ZGEsMHg3YywweDQ5LDB4YjgsMHgxMiwweDM2LDB4YzAsCisrCTB4ZGIsMHhhZCww eDM1LDB4YTgsMHhjNywweDBiLDB4MmEsMHgyYywweDY5LDB4NmQsMHgyNSwweDU2LAorKwkweDYz LDB4ODIsMHgxMSwweDNlLDB4YTcsMHgzMywweDcwLDB4NzIKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9pbnRfcmV0 dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ODIsMHgzZCwweGU2LDB4NTQsMHg4MCwweDQyLDB4Zjgs MHhiYSwweDkwLDB4NGYsMHgwNiwweGE2LAorKwkweGQyLDB4N2YsMHhiZiwweDc5LDB4N2MsMHgx MiwweDdkLDB4YTYsMHhhMiwweDY2LDB4ZTgsMHhhNiwKKysJMHhjMCwweGQ2LDB4NGEsMHg1NSww eGJmLDB4ZDgsMHgwYSwweGM1LDB4ZjgsMHgwMywweDg4LDB4ZGQsCisrCTB4OGUsMHg4NywweGQx LDB4NWEsMHg0OCwweDI2LDB4NzIsMHgyYSwweDhlLDB4Y2YsMHhlZSwweGJhCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDhmLDB4ZmYsMHhkOSwweDg0LDB4YmIs MHg4NSwweDNhLDB4NjYsMHhhMSwweDIxLDB4Y2UsMHhiMiwKKysJMHgzYSwweDNhLDB4MTcsMHgy MiwweDE5LDB4YWUsMHhjNywweGI2LDB4NjMsMHg4MSwweGQ1LDB4ZmYsCisrCTB4MGQsMHhjOCww eGUxLDB4YWYsMHg1NywweGQyLDB4Y2IsMHg2MAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHBy MltdID0KKysJeworKwkweGQ3LDB4ZmIsMHhjOSwweGU4LDB4ZTIsMHhmMiwweGFhLDB4NGMsMHhi OCwweDUxLDB4MmYsMHhlMSwKKysJMHgyMiwweGJhLDB4ZjMsMHhkYSwweDBhLDB4MTksMHg3Niww eDcxLDB4NTcsMHhiMiwweDFkLDB4OTQsCisrCTB4MDksMHg2OSwweDZjLDB4ZDMsMHg5NywweDUx LDB4ODEsMHg4NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGU2LDB4 MTksMHgyOCwweGE4LDB4MjEsMHhjZSwweDVlLDB4ZGIsMHgyNCwweDc5LDB4OGMsMHg3NiwKKysJ MHg1ZCwweDczLDB4YjIsMHhkZiwweGFjLDB4ZWYsMHg4NSwweGE3LDB4M2IsMHgxOSwweDA5LDB4 OGIsCisrCTB4N2YsMHg5OCwweDI4LDB4YTksMHg5MywweGQ4LDB4N2EsMHhhZCwweDU1LDB4OGIs MHgyNCwweDlkLAorKwkweGU2LDB4OTgsMHhmZSwweDQ3LDB4ZDUsMHg0OCwweGMxLDB4MjMsMHhk OCwweDFkLDB4NjIsMHg3NQorKwl9OworKworKworKy8qIEhNQUMgU0hBLTM4NCBObyBQUiAgKi8K KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhjMywweDU2LDB4MmIsMHgxZCwweGMyLDB4YmIs MHhhOCwweGYwLDB4YWUsMHgxYiwweDBkLDB4ZDMsCisrCTB4NWEsMHg2YywweGRhLDB4NTcsMHg4 ZSwweGE1LDB4OGEsMHgwZCwweDZjLDB4NGIsMHgxOCwweGIxLAorKwkweDA0LDB4M2UsMHhiNCww eDk5LDB4MzUsMHhjNCwweGMwLDB4NWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9ub25jZVtdID0KKysJeworKwkweGM1 LDB4NDksMHgxZSwweDY2LDB4MjcsMHg5MiwweGJlLDB4ZWMsMHhiNSwweDFlLDB4NGIsMHhiMSwK KysJMHgzOCwweGUzLDB4ZWIsMHg2MgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KKysJeworKwkweGJlLDB4ZTcsMHg2YiwweDU3LDB4ZGUsMHg4OCwweDExLDB4OTYsMHg5Yiww eDZlLDB4ZWEsMHhlNSwKKysJMHg2MywweDgzLDB4NGMsMHhiNiwweDhkLDB4NjYsMHhhYSwweDFm LDB4OGIsMHg1NCwweGU3LDB4NjIsCisrCTB4NmQsMHg1YSwweGZjLDB4YmYsMHg5NywweGJhLDB4 Y2QsMHg3NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGU1LDB4Mjgs MHg1ZiwweDQzLDB4ZjUsMHg4MywweDZlLDB4MGEsMHg4MywweDVjLDB4ZTMsMHg4MSwKKysJMHgw MywweGYyLDB4ZjgsMHg3OCwweDAwLDB4N2MsMHg5NSwweDg3LDB4MTYsMHhkNiwweDZjLDB4NTgs CisrCTB4MzMsMHg2YywweDUzLDB4MzUsMHgwZCwweDY2LDB4ZTMsMHhjZQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlMiwweDFmLDB4ZjMsMHhkYSwweDBkLDB4MTks MHg5OSwweDg3LDB4YzQsMHg5MCwweGEyLDB4MzEsCisrCTB4Y2EsMHgyYSwweDg5LDB4NTgsMHg0 MywweDQ0LDB4YjgsMHhkZSwweGNmLDB4YTQsMHhiZSwweDNiLAorKwkweDUzLDB4MjYsMHgyMiww eDMxLDB4NzYsMHg0MSwweDIyLDB4YjUsMHhhOCwweDcwLDB4MmYsMHg0YiwKKysJMHg2NCwweDk1 LDB4NGQsMHg0OCwweDk2LDB4MzUsMHhlNiwweGJkLDB4M2MsMHgzNCwweGRiLDB4MWIKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg3NywweDYxLDB4YmEsMHhiYyww eGYyLDB4YzEsMHhmMywweDRiLDB4ODYsMHg2NSwweGZkLDB4NDgsCisrCTB4MGUsMHgzYywweDAy LDB4NWUsMHhhMiwweDdhLDB4NmIsMHg3YywweGVkLDB4MjEsMHg1ZSwweGY5LAorKwkweGNkLDB4 Y2QsMHg3NywweDA3LDB4MmIsMHhiZSwweGM1LDB4NWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5w dXRyZXNlZWRbXSA9CisrCXsKKysJMHgxOCwweDI0LDB4NWYsMHhjNiwweDg0LDB4ZDEsMHg2Nyww eGMzLDB4OWEsMHgxMSwweGE1LDB4OGMsCisrCTB4MDcsMHgzOSwweDIxLDB4ODMsMHg0ZCwweDA0 LDB4YzQsMHg2YSwweDI4LDB4MTksMHhjZiwweDkyLAorKwkweDIxLDB4ZDksMHg5ZSwweDQxLDB4 NzIsMHg2YywweDllLDB4NjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7Cisr CTB4OTYsMHg2NywweDQxLDB4MjgsMHg5YiwweGI3LDB4OTIsMHg4ZCwweDY0LDB4M2IsMHhlNCww eGNmLAorKwkweDdlLDB4YWEsMHgxZSwweGIxLDB4NGIsMHgxZCwweDA5LDB4NTYsMHg2NywweDlj LDB4YzYsMHg2ZCwKKysJMHgzYiwweGU4LDB4OTEsMHg5ZCwweGUxLDB4OGEsMHhiNywweDMyCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTMsMHg1OSwweDYxLDB4MzgsMHg5 MiwweGVjLDB4ZTIsMHgzYywweGZmLDB4YjcsMHhkYiwweDE5LAorKwkweDBmLDB4NWIsMHg5Myww eDY4LDB4MGQsMHhhNCwweDk0LDB4NDAsMHg3MiwweDBiLDB4ZTAsMHhlZCwKKysJMHg0ZCwweGNk LDB4NjgsMHhhMCwweDFlLDB4ZmUsMHg2NywweGIyLDB4ZmEsMHgyMSwweDU2LDB4NzQsCisrCTB4 YTQsMHhhZCwweGNmLDB4YjcsMHg2MCwweDY2LDB4MmUsMHg0MCwweGRlLDB4ODIsMHhjYSwweGZi CisrCX07CisrCisrCisrLyogSE1BQyBTSEEtNTEyIFBSICAqLworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtd ID0KKysJeworKwkweGFhLDB4OWUsMHg0NSwweDY3LDB4MGUsMHgwMCwweDJhLDB4NjcsMHg5OCww eGQ2LDB4ZGEsMHgwYiwKKysJMHgwZiwweDE3LDB4N2UsMHhhYywweGZkLDB4MjcsMHhjNCwweGNh LDB4ODQsMHhkZiwweGRlLDB4YmEsCisrCTB4ODUsMHhkOSwweGJlLDB4OGYsMHhmMywweGZmLDB4 OTEsMHg0ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX3ByX25vbmNlW10gPQorKwl7CisrCTB4OGMsMHg0OSwweDJmLDB4 NTgsMHgxZSwweDdhLDB4ZGEsMHg0YiwweDdlLDB4OGEsMHgzMCwweDdiLAorKwkweDg2LDB4ZWEs MHhhZiwweGEyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7Cisr CTB4NzEsMHhlMSwweGJiLDB4YWQsMHhhNywweDRiLDB4MmUsMHgzMSwweDNiLDB4MGIsMHhlYyww eDI0LAorKwkweDk5LDB4MzgsMHhiYywweGFhLDB4MDUsMHg0YywweDQ2LDB4NDQsMHhmYSwweGFk LDB4OGUsMHgwMiwKKysJMHhjMSwweDdlLDB4YWQsMHhlYywweDU0LDB4YTYsMHhkMCwweGFkCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4M2QsMHg2ZSwweGE2LDB4 YTgsMHgyOSwweDJhLDB4YjIsMHhmNSwweDk4LDB4NDIsMHhlNCwweDkyLAorKwkweDc4LDB4MjIs MHg2NywweGZkLDB4MWIsMHgxNSwweDFlLDB4MjksMHhhYSwweDcxLDB4M2MsMHgzYywKKysJMHhl NywweDA1LDB4MjAsMHhhOSwweDI5LDB4YzYsMHg3NSwweDcxCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9w eWlucHV0cHJbXSA9CisrCXsKKysJMHhhYiwweGI5LDB4MTYsMHhkOCwweDU1LDB4MzUsMHg1NCww eGI3LDB4OTcsMHgzZiwweDk0LDB4YmMsCisrCTB4MmYsMHg3YywweDcwLDB4YzcsMHhkMCwweGVk LDB4YjcsMHg0YiwweGY3LDB4ZjYsMHg2YywweDAzLAorKwkweDBjLDB4YjAsMHgwMywweGQ4LDB4 YmIsMHg3MSwweGQ5LDB4MTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4OGUsMHhkMywweGZkLDB4NTIsMHg5ZSwweDgzLDB4MDgsMHg0OSwweDE4LDB4NmUsMHgy MywweDU2LAorKwkweDVjLDB4NDUsMHg5MywweDM0LDB4MDUsMHhlMiwweDk4LDB4OGYsMHgwYyww eGQ0LDB4MzIsMHgwYywKKysJMHhmZCwweGRhLDB4NWYsMHg5MiwweDNhLDB4OGMsMHg4MSwweGJk LDB4ZjYsMHg2YywweDU1LDB4ZmQsCisrCTB4YjgsMHgyMCwweGNlLDB4OGQsMHg5NywweDI3LDB4 ZTgsMHhlOCwweGUwLDB4YjMsMHg4NSwweDUwLAorKwkweGEyLDB4YzIsMHhiMiwweDk1LDB4MWQs MHg0OCwweGQzLDB4N2IsMHg0YiwweDc4LDB4MTMsMHgzNSwKKysJMHgwNSwweDE3LDB4YmUsMHgw ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhjMywweGZjLDB4 OTUsMHhhYSwweDY5LDB4MDYsMHhhZSwweDU5LDB4NDEsMHhjZSwweDI2LDB4MDgsCisrCTB4Mjks MHg2ZCwweDQ1LDB4ZGEsMHhlOCwweGIzLDB4NmMsMHg5NSwweDYwLDB4MGYsMHg3MCwweDJjLAor KwkweDEwLDB4YmEsMHgzOCwweDhjLDB4Y2YsMHgyOSwweDk5LDB4YWEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgzYiwweDlhLDB4MjUsMHhjZSwweGQ3LDB4Zjks MHg1YywweGQxLDB4M2EsMHgzZSwweGFhLDB4NzEsCisrCTB4MTQsMHgzZSwweDE5LDB4ZTgsMHhj ZSwweGU2LDB4ZmUsMHg1MSwweDg0LDB4ZTksMHgxYiwweGZlLAorKwkweDNmLDB4YTcsMHhmMiww eGZkLDB4NzYsMHg1ZiwweDZhLDB4ZTcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHhiNywweDgyLDB4YTksMHg1NywweDgxLDB4NjcsMHg1MywweGI1LDB4YTEsMHhlOSww eDNkLDB4MzUsCisrCTB4ZjksMHhlNCwweDk3LDB4YmUsMHhhNiwweGNhLDB4ZjEsMHgwMSwweDEz LDB4MDksMHhlNywweDIxLAorKwkweGMwLDB4ZWQsMHg5MywweDVkLDB4NGIsMHhmNCwweGViLDB4 OGQsMHg1MywweDI1LDB4OGEsMHhjNCwKKysJMHhiMSwweDZmLDB4NmUsMHgzNywweGNkLDB4MmUs MHhhYywweDM5LDB4YjIsMHhiNiwweDk5LDB4YTMsCisrCTB4ODIsMHgwMCwweGIwLDB4MjEsMHhm MCwweGM3LDB4MmYsMHg0YywweDczLDB4OTIsMHhmZCwweDAwLAorKwkweGI2LDB4YWYsMHhiYyww eGQzCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtNTEyIE5vIFBSICAqLworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1 dFtdID0KKysJeworKwkweDZlLDB4ODUsMHhlNiwweDI1LDB4OTYsMHgyOSwweGE3LDB4NTIsMHg1 YiwweDYwLDB4YmEsMHhhYSwKKysJMHhkZSwweGRiLDB4MzYsMHgwYSwweDUxLDB4OWEsMHgxNSww eGFlLDB4NmUsMHgxOCwweGQzLDB4ZmUsCisrCTB4MzksMHhiOSwweDRhLDB4OTYsMHhmOCwweDc3 LDB4Y2IsMHg5NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhNTEyX25vbmNlW10gPQorKwl7CisrCTB4ZTAsMHhhNiwweDVkLDB4 MDgsMHhjMywweDdjLDB4YWUsMHgyNSwweDJlLDB4ODAsMHhkMSwweDNlLAorKwkweGQ5LDB4YWYs MHg0MywweDNjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4 NTMsMHg5OSwweDUyLDB4NWYsMHgxMSwweGE5LDB4NjQsMHg2NiwweDIwLDB4NWUsMHgxYiwweDVm LAorKwkweDQyLDB4YjMsMHhmNCwweGRhLDB4ZWQsMHhiYiwweDYzLDB4YzEsMHgyMywweGFmLDB4 ZDAsMHgwMSwKKysJMHg5MCwweDNiLDB4ZDAsMHg3OCwweGU0LDB4MGIsMHhhNywweDIwCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGE1MTJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ODUsMHg5MCwweDgwLDB4ZDMsMHg5 OCwweGYxLDB4NTMsMHg2ZCwweDY4LDB4MTUsMHg4ZiwweGU1LAorKwkweDYwLDB4M2YsMHgxNyww eDI5LDB4NTUsMHg4ZCwweDMzLDB4YjEsMHg0NSwweDY0LDB4NjQsMHg4ZCwKKysJMHg1MCwweDIx LDB4ODksMHhhZSwweGY2LDB4ZmQsMHgzMiwweDczCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfaW50X3JldHVybmVkYml0 c1tdID0KKysJeworKwkweDI4LDB4NTYsMHgzMCwweDZmLDB4ZjQsMHhhMSwweDQ4LDB4ZTAsMHhj OSwweGY1LDB4NzUsMHg5MCwKKysJMHhjYywweGZiLDB4ZGYsMHhkZiwweDcxLDB4M2QsMHgwYSww eDlhLDB4MDMsMHg2NSwweDNiLDB4MTgsCisrCTB4NjEsMHhlMywweGQxLDB4ZGEsMHhjYywweDRh LDB4ZmUsMHg1NSwweDM4LDB4ZjgsMHgyMSwweDZiLAorKwkweGZhLDB4MTgsMHgwMSwweDQyLDB4 MzksMHgyZiwweDk5LDB4NTMsMHgzOCwweDE1LDB4ODIsMHgzNCwKKysJMHhjNSwweDkzLDB4OTIs MHhiYywweDRkLDB4NzUsMHgxYSwweDVmLDB4MjEsMHgyNywweGNjLDB4YTEsCisrCTB4YjEsMHg1 NywweDY5LDB4ZTgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg4 YywweDUyLDB4N2UsMHg3NywweDcyLDB4M2YsMHhhMywweDA0LDB4OTcsMHgxMCwweDliLDB4NDEs CisrCTB4YmQsMHhlOCwweGZmLDB4ODksMHhlZCwweDgwLDB4ZTMsMHhiZCwweGFhLDB4MTIsMHgy ZCwweGNhLAorKwkweDc1LDB4ODIsMHgzNiwweDc3LDB4ODgsMHhjZCwweGE2LDB4NzMKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg3ZSwweDMyLDB4ZTMsMHg2 OSwweDY5LDB4MDcsMHgzNCwweGEyLDB4MTYsMHhhMiwweDVkLDB4MWEsCisrCTB4MTAsMHg5MSww eGQzLDB4ZTIsMHgyMSwweGEyLDB4YTMsMHhkZCwweGNkLDB4MGMsMHgwOSwweDg2LAorKwkweDEx LDB4ZTEsMHg1MCwweGZmLDB4NWMsMHhiNywweGViLDB4NWMKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4N2YsMHg3OCwweDY2LDB4ZDgsMHhmYiwweDY3LDB4Y2YsMHg4 ZCwweDhjLDB4MDgsMHgzMCwweGE1LAorKwkweGY4LDB4N2QsMHhjZiwweDQ0LDB4NTksMHhjZSww eGY4LDB4ZGYsMHg1OCwweGQzLDB4NjAsMHhjYiwKKysJMHhhOCwweDYwLDB4YjksMHgwNywweGM0 LDB4YjEsMHg5NSwweDQ4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZGYs MHhhNywweDM2LDB4ZDQsMHhkYywweDVkLDB4NGQsMHgzMSwweGFkLDB4NjksMHg0NiwweDlmLAor KwkweGYxLDB4N2MsMHhkNywweDNiLDB4NGYsMHg1NSwweGYyLDB4ZDcsMHhiOSwweDlkLDB4YWQs MHg3YSwKKysJMHg3OSwweDA4LDB4NTksMHhhNSwweGRjLDB4NzQsMHhmNSwweDliLDB4NzMsMHhk MiwweDEzLDB4MjUsCisrCTB4MGIsMHg4MSwweDA4LDB4MDgsMHgyNSwweGZiLDB4MzksMHhmMiww eGYwLDB4YTMsMHhhNCwweDhkLAorKwkweGVmLDB4MDUsMHg5ZSwweGI4LDB4YzcsMHg1MiwweGU0 LDB4MGUsMHg0MiwweGFhLDB4N2MsMHg3OSwKKysJMHhjMiwweGQ2LDB4ZmQsMHhhNQorKwl9Owor KworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxm dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxm dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxm dGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDYzOTM3NDggKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxMi0wMi0w NyAxMzoyMjoxNy4xNzk1MTkwOTggKzAxMDAKK0BAIC0wLDAgKzEsMTkzIEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wu aCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7CisrCTB4YTgsMHg1MywweDc4LDB4ZDgsMHhmZCwweDNm LDB4OGQsMHg3MiwweGVjLDB4NzQsMHgxOCwweDA4LAorKwkweDBkLDB4YTIsMHgxMywweDE3LDB4 ZTQsMHgzZSwweGM0LDB4YjYsMHgyYiwweGE4LDB4YzgsMHg2MiwKKysJMHgzYiwweDdlLDB4NGQs MHgwNCwweDQ0LDB4MWQsMHhkMSwweGEwLDB4NjUsMHg4NiwweDYyLDB4NTksCisrCTB4NjQsMHg5 MywweGNhLDB4OGUsMHg5ZSwweDhmLDB4YmIsMHg3ZSwweDM0LDB4YWEsMHhkZCwweGI2LAorKwkw eDJlLDB4NWQsMHg2NywweGI2LDB4ZDAsMHg5YSwweDZlLDB4NjEsMHhiNywweDY5LDB4ZTcsMHhj MywKKysJMHg1MiwweGFhLDB4MmIsMHgxMCwweGUyLDB4MGMsMHhhMCwweDYzLDB4NjksMHg2Myww eGI1LDB4NTIsCisrCTB4M2UsMHg4NiwweDQ3LDB4MGQsMHhlYywweGJiLDB4ZWQsMHhhMCwweDI3 LDB4ZTcsMHg5NywweGU3LAorKwkweGI2LDB4NzYsMHgzNSwweGQ0LDB4ZDQsMHg5YywweDMwLDB4 NzAsMHgwZSwweDc0LDB4YWYsMHg4YSwKKysJMHgwZiwweGYxLDB4NTYsMHhhOCwweDAxLDB4YWYs MHg1NywweGEyLDB4NmUsMHg3MCwweDc4LDB4ZjEsCisrCTB4ZDgsMHgyZiwweDc0LDB4OTAsMHg4 ZSwweGNiLDB4NmQsMHgwNywweGU3LDB4MGIsMHgzNSwweDAzLAorKwkweGVlLDB4ZDksMHg0Ziww eGEzLDB4MmMsMHhmMSwweDdhLDB4N2YsMHhjMywweGQ2LDB4Y2YsMHg0MCwKKysJMHhkYywweDdi LDB4MDAsMHg4MywweDBlLDB4NmEsMHgyNSwweDY2LDB4ZGMsMHgwNywweDNlLDB4MzQsCisrCTB4 MzMsMHgxMiwweDUxLDB4N2MsMHg2YSwweGE1LDB4MTUsMHgyYiwweDRiLDB4ZmUsMHhjZCwweDJl LAorKwkweDU1LDB4MWYsMHhlZSwweDM0LDB4NjMsMHgxOCwweGExLDB4NTMsMHg0MiwweDNjLDB4 OTksMHg2YiwKKysJMHgwZCwweDVkLDB4Y2IsMHg5MSwweDAyLDB4YWUsMHhkZCwweDM4LDB4Nzks MHg4NiwweDE2LDB4ZjEsCisrCTB4ZjEsMHhlMCwweGQ2LDB4YzQsMHgwMywweDUyLDB4NWIsMHgx ZiwweDliLDB4M2QsMHg0ZCwweGM3LAorKwkweDY2LDB4ZGUsMHgyZCwweGZjLDB4NGEsMHg1Niww eGQ3LDB4YjgsMHhiYSwweDU5LDB4NjMsMHhkNiwKKysJMHgwZiwweDNlLDB4MTYsMHgzMSwweDg4 LDB4NzAsMHhhZCwweDQzLDB4NjksMHg1MiwweGU1LDB4NTcsCisrCTB4NjUsMHgzNywweDRlLDB4 YWIsMHg4NSwweGU4LDB4ZWMsMHgxNywweGQ2LDB4YjksMHhhNCwweDU0LAorKwkweDdiLDB4OWIs MHg1ZiwweDI3LDB4NTIsMHhmMywweDEwLDB4NWIsMHhlOCwweDA5LDB4YjIsMHgzYSwKKysJMHgy YywweDhkLDB4NzQsMHg2OSwweGRiLDB4MDIsMHhlMiwweDRkLDB4NTksMHgyMywweDk0LDB4YTcs CisrCTB4ZGIsMHhhMCwweDY5LDB4ZTkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGRzYV90ZXN0XzIwNDhfcVtdID0geworKwkweGQyLDB4NzcsMHgwNCwweDRlLDB4NTAsMHhm NSwweGE0LDB4ZTMsMHhmNSwweDEwLDB4YTUsMHgwYSwKKysJMHgwYiwweDg0LDB4ZmQsMHhmZiww eGJjLDB4YTAsMHg0NywweGVkLDB4MjcsMHg2MCwweDIwLDB4NTYsCisrCTB4NzQsMHg0MSwweGEw LDB4YTUKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhf Z1tdID0geworKwkweDEzLDB4ZDcsMHg1NCwweGUyLDB4MWYsMHhkMiwweDQxLDB4NjUsMHg1ZCww eGE4LDB4OTEsMHhjNSwKKysJMHgyMiwweGE2LDB4NWEsMHg3MiwweGE4LDB4OWIsMHhkYywweDY0 LDB4ZWMsMHg5YiwweDU0LDB4YTgsCisrCTB4MjEsMHhlZCwweDRhLDB4ODksMHg4YiwweDQ5LDB4 MGUsMHgwYywweDRmLDB4Y2IsMHg3MiwweDE5LAorKwkweDJhLDB4NGEsMHgyMCwweGY1LDB4NDEs MHhmMywweGYyLDB4OTIsMHg1MywweDk5LDB4ZjAsMHhiYSwKKysJMHhlYywweGY5LDB4MjksMHhh YSwweGZiLDB4ZjcsMHg5ZCwweGZlLDB4NDMsMHgzMiwweDM5LDB4M2IsCisrCTB4MzIsMHhjZCww eDJlLDB4MmYsMHhjZiwweDI3LDB4MmYsMHgzMiwweGE2LDB4MjcsMHg0MywweDRhLAorKwkweDBk LDB4ZjIsMHg0MiwweGI3LDB4NWIsMHg0MSwweDRkLDB4ZjMsMHg3MiwweDEyLDB4MWUsMHg1MywK KysJMHhhNSwweDUzLDB4ZjIsMHgyMiwweGY4LDB4MzYsMHhiMCwweDAwLDB4ZjAsMHgxNiwweDQ4 LDB4NWIsCisrCTB4NmIsMHhkMCwweDg5LDB4ODQsMHg1MSwweDgwLDB4MWQsMHhjZCwweDhkLDB4 ZTYsMHg0YywweGQ1LAorKwkweDM2LDB4NTYsMHg5NiwweGZmLDB4YzUsMHgzMiwweGQ1LDB4Mjgs MHhjNSwweDA2LDB4NjIsMHgwYSwKKysJMHg5NCwweDJhLDB4MDMsMHgwNSwweDA0LDB4NmQsMHg4 ZiwweDE4LDB4NzYsMHgzNCwweDFmLDB4MWUsCisrCTB4NTcsMHgwYiwweGMzLDB4OTcsMHg0Yiww eGE2LDB4YjksMHhhNCwweDM4LDB4ZTksMHg3MCwweDIzLAorKwkweDAyLDB4YTIsMHhlNiwweGU2 LDB4N2IsMHhmZCwweDA2LDB4ZDMsMHgyYiwweGM2LDB4NzksMHg5NiwKKysJMHgyMiwweDcxLDB4 ZDcsMHhiNCwweDBjLDB4ZDcsMHgyZiwweDM4LDB4NmUsMHg2NCwweGUwLDB4ZDcsCisrCTB4ZWYs MHg4NiwweGNhLDB4OGMsMHhhNSwweGQxLDB4NDIsMHgyOCwweGRjLDB4MmEsMHg0ZiwweDE2LAor KwkweGUzLDB4MTgsMHg5OCwweDg2LDB4YjUsMHg5OSwweDA2LDB4NzQsMHhmNCwweDIwLDB4MGYs MHgzYSwKKysJMHg0YywweGY2LDB4NWEsMHgzZiwweDBkLDB4ZGIsMHhhMSwweGZhLDB4NjcsMHgy ZCwweGZmLDB4MmYsCisrCTB4NWUsMHgxNCwweDNkLDB4MTAsMHhlNCwweGU5LDB4N2EsMHhlOCww eDRmLDB4NmQsMHhhMCwweDk1LAorKwkweDM1LDB4ZDUsMHhiOSwweGRmLDB4MjUsMHg5MSwweDgx LDB4YTcsMHg5YiwweDYzLDB4YjAsMHg2OSwKKysJMHhlOSwweDQ5LDB4OTcsMHgyYiwweDAyLDB4 YmEsMHgzNiwweGIzLDB4NTgsMHg2YSwweGFiLDB4N2UsCisrCTB4NDUsMHhmMywweDIyLDB4Zjgs MHgyZSwweDRlLDB4ODUsMHhjYSwweDNhLDB4YjgsMHg1NSwweDkxLAorKwkweGIzLDB4YzIsMHhh OSwweDY2CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4 X3B1Yl9rZXlbXSA9IHsKKysJMHgyNCwweDUyLDB4ZjMsMHhjYywweGJlLDB4OWUsMHhkNSwweGNh LDB4N2QsMHhjNywweDRjLDB4NjAsCisrCTB4MmIsMHg5OSwweDIyLDB4NmUsMHg4ZiwweDJmLDB4 YWIsMHgzOCwweGU3LDB4ZDcsMHhkZCwweGZiLAorKwkweDc1LDB4NTMsMHg5YiwweDE3LDB4MTUs MHg1ZSwweDlmLDB4Y2YsMHhkMSwweGFiLDB4YTUsMHg2NCwKKysJMHhlYiwweDg1LDB4MzUsMHhk OCwweDEyLDB4YzksMHhjMiwweGRjLDB4ZjksMHg3MiwweDg0LDB4NDQsCisrCTB4MWIsMHhjNCww eDgyLDB4MjQsMHgzNiwweDI0LDB4YzcsMHhmNCwweDU3LDB4NTgsMHgwYywweDFjLAorKwkweDM4 LDB4YTUsMHg3YywweDQ2LDB4YzQsMHg1NywweDM5LDB4MjQsMHg3MCwweGVkLDB4YjUsMHgyYywK KysJMHhiNSwweGE2LDB4ZTAsMHgzZiwweGU2LDB4MjgsMHg3YiwweGI2LDB4ZjQsMHg5YSwweDQy LDB4YTIsCisrCTB4MDYsMHg1YSwweDA1LDB4NGYsMHgwMywweDA4LDB4MzksMHhkZiwweDFmLDB4 ZDMsMHgxNCwweDljLAorKwkweDRjLDB4YTAsMHg1MywweDFkLDB4ZDgsMHhjYSwweDhhLDB4YWEs MHg5YywweGM3LDB4MzMsMHg3MSwKKysJMHg5MywweDM4LDB4NzMsMHg0OCwweDMzLDB4NjEsMHgx OCwweDIyLDB4NDUsMHg0NSwweGU4LDB4OGMsCisrCTB4ODAsMHhmZiwweGQ4LDB4NzYsMHg1ZCww eDc0LDB4MzYsMHgwMywweDMzLDB4Y2MsMHhhYiwweDk5LAorKwkweDcyLDB4NzcsMHg5YiwweDY1 LDB4MjUsMHhhNiwweDViLDB4ZGQsMHgwZCwweDEwLDB4YzYsMHg3NSwKKysJMHhjMSwweDA5LDB4 YmIsMHhkMywweGU1LDB4YmUsMHg0ZCwweDcyLDB4ZWYsMHg2ZSwweGJhLDB4NmUsCisrCTB4NDMs MHg4ZCwweDUyLDB4MjYsMHgyMywweDdkLDB4YjgsMHg4OCwweDM3LDB4OWMsMHg1ZiwweGNjLAor KwkweDQ3LDB4YTMsMHg4NCwweDdmLDB4ZjYsMHgzNywweDExLDB4YmEsMHhlZCwweDZkLDB4MDMs MHhhZiwKKysJMHhlOCwweDFlLDB4NjksMHg0YSwweDQxLDB4M2IsMHg2OCwweDBiLDB4ZDMsMHg4 YSwweGI0LDB4OTAsCisrCTB4M2YsMHg4MywweDcwLDB4YTcsMHgwNywweGVmLDB4NTUsMHgxZCww eDQ5LDB4NDEsMHgwMiwweDZkLAorKwkweDk1LDB4NzksMHhkNiwweDkxLDB4ZGUsMHg4ZSwweGRh LDB4YTEsMHg2MSwweDA1LDB4ZWIsMHg5ZCwKKysJMHhiYSwweDNjLDB4MmYsMHg0YywweDFiLDB4 ZWMsMHg1MCwweDgyLDB4NzUsMHhhYSwweDAyLDB4MDcsCisrCTB4ZTIsMHg1MSwweGI1LDB4ZWMs MHhjYiwweDI4LDB4NmEsMHg0YiwweDAxLDB4ZDQsMHg0OSwweGQzLAorKwkweDBhLDB4Y2IsMHg2 NywweDM3LDB4MTcsMHhhMCwweGQyLDB4ZmIsMHgzYiwweDUwLDB4YzgsMHg5MywKKysJMHhmNyww eGRhLDB4YjEsMHg0ZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rl c3RfMjA0OF9wcml2X2tleVtdID0geworKwkweDBjLDB4NGIsMHgzMCwweDg5LDB4ZDEsMHhiOCww eDYyLDB4Y2IsMHgzYywweDQzLDB4NjQsMHg5MSwKKysJMHhmMCwweDkxLDB4NTQsMHg3MCwweGM1 LDB4MjcsMHg5NiwweGUzLDB4YWMsMHhiZSwweGU4LDB4MDAsCisrCTB4ZWMsMHg1NSwweGY2LDB4 Y2MKKyt9OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9kc2E7CisrCisrdm9pZCBGSVBTX2NvcnJ1 cHRfZHNhKCkKKysgICAgeworKyAgICBjb3JydXB0X2RzYSA9IDE7CisrICAgIH0KKysKKytpbnQg RklQU19zZWxmdGVzdF9kc2EoKQorKwl7CisrCURTQSAqZHNhID0gTlVMTDsKKysJRVZQX1BLRVkg KnBrID0gTlVMTDsKKysJaW50IHJldCA9IDA7CisrCisrCWRzYSA9IERTQV9uZXcoKTsKKysKKysJ aWYoZHNhID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJZmlwc19sb2FkX2tleV9jb21wb25l bnQoZHNhLCBwLCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNh LCBxLCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBk c2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBk c2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwg ZHNhX3Rlc3RfMjA0OCk7CisrCisrCWlmIChjb3JydXB0X2RzYSkKKysJCUJOX3NldF9iaXQoZHNh LT5wdWJfa2V5LCAyMDQ3KTsKKysKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkK KysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOworKworKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwgMCwKKysJCQkJCU5VTEwsIDAs IEVWUF9zaGEyNTYoKSwgMCwKKysJCQkJCSJEU0EgU0hBMjU2IikpCisrCQlnb3RvIGVycjsKKysJ cmV0ID0gMTsKKysKKysJZXJyOgorKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJ ZWxzZSBpZiAoZHNhKQorKwkJRFNBX2ZyZWUoZHNhKTsKKysJcmV0dXJuIHJldDsKKysJfQorKyNl bmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2VuYy5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCistLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMJMjAxMi0wMi0wNyAx MToxNDowMS4wMjk4OTM3NTQgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2ZpcHNfZW5jLmMJMjAxMi0wMi0wNyAxMToyMDoyMC43MjMwNTg3NDEgKzAxMDAKK0BAIC0w LDAgKzEsMTkxIEBACisrLyogZmlwZS9ldnAvZmlwc19lbmMuYyAqLworKy8qIENvcHlyaWdodCAo QykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0 aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICog VGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRz Y2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFs IGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFw cGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0 LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2Rl LiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1 dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0 aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAor KyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHly aWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAq IElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQg YmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0 aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVh bCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9u bGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQg aWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5v dCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBX aW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAq ICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVk ZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAor KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFu ZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9u IG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUu IHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5v dGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMg TGljZW5jZS5dCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBFVlBfQ0lQSEVSICpGSVBT X2dldF9jaXBoZXJieW5pZChpbnQgbmlkKQorKwl7CisrCXN3aXRjaCAobmlkKQorKwkJeworKwkJ Y2FzZSBOSURfYWVzXzEyOF9jYmM6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2JjKCk7CisrCisr CQljYXNlIE5JRF9hZXNfMTI4X2NjbToKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jY20oKTsKKysK KysJCWNhc2UgTklEX2Flc18xMjhfY2ZiMToKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jZmIxKCk7 CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9j ZmIxMjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfY2ZiODoKKysJCXJldHVybiBFVlBfYWVz XzEyOF9jZmI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKKysJCXJldHVybiBFVlBf YWVzXzEyOF9jdHIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfZWNiOgorKwkJcmV0dXJuIEVW UF9hZXNfMTI4X2VjYigpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9nY206CisrCQlyZXR1cm4g RVZQX2Flc18xMjhfZ2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X29mYjEyODoKKysJCXJl dHVybiBFVlBfYWVzXzEyOF9vZmIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfeHRzOgorKwkJ cmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jYmM6Cisr CQlyZXR1cm4gRVZQX2Flc18xOTJfY2JjKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NjbToK KysJCXJldHVybiBFVlBfYWVzXzE5Ml9jY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY2Zi MToKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTky X2NmYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysKKysJCWNhc2UgTklE X2Flc18xOTJfY2ZiODoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmI4KCk7CisrCisrCQljYXNl IE5JRF9hZXNfMTkyX2N0cjoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jdHIoKTsKKysKKysJCWNh c2UgTklEX2Flc18xOTJfZWNiOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2VjYigpOworKworKwkJ Y2FzZSBOSURfYWVzXzE5Ml9nY206CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfZ2NtKCk7CisrCisr CQljYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9vZmIoKTsK KysKKysJCWNhc2UgTklEX2Flc18yNTZfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NiYygp OworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jY206CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2Nt KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2NmYjE6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZf Y2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Fl c18yNTZfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2NmYjg6CisrCQlyZXR1cm4g RVZQX2Flc18yNTZfY2ZiOCgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jdHI6CisrCQlyZXR1 cm4gRVZQX2Flc18yNTZfY3RyKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2VjYjoKKysJCXJl dHVybiBFVlBfYWVzXzI1Nl9lY2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfZ2NtOgorKwkJ cmV0dXJuIEVWUF9hZXNfMjU2X2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9vZmIxMjg6 CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X3h0 czoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl94dHMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVf ZWNiOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19l Y2I6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19j YmM6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NiYygpOworKworKwkJY2FzZSBOSURfZGVzX2Vk ZTNfY2ZiMToKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKworKwkJY2FzZSBOSURf ZGVzX2VkZTNfY2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjY0KCk7CisrCisrCQlj YXNlIE5JRF9kZXNfZWRlM19jZmI4OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmI4KCk7Cisr CisrCQljYXNlIE5JRF9kZXNfZWRlM19vZmI2NDoKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfb2Zi KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX2NiYzoKKysJCXJldHVybiBFVlBfZGVzX2VkZV9j YmMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVfY2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19l ZGVfY2ZiNjQoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVfb2ZiNjQ6CisrCQlyZXR1cm4gRVZQ X2Rlc19lZGVfb2ZiKCk7CisrCisrCQlkZWZhdWx0OgorKwkJcmV0dXJuIE5VTEw7CisrCisrCQl9 CisrCX0KKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwcy5o LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzLmgKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIu NTQ2MzkzNzQ4ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBz LmgJMjAxMi0wMi0wNyAxMToxMDozOC4wNzkxODc2NDYgKzAxMDAKK0BAIC0wLDAgKzEsMjc5IEBA CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8c3RkYXJn Lmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjZXJyb3IgRklQUyBpcyBkaXNhYmxlZC4K KysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2lmZGVmICBfX2NwbHVzcGx1 cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK3N0cnVjdCBkc2Ffc3Q7Cisrc3RydWN0IHJz YV9zdDsKKytzdHJ1Y3QgZXZwX3BrZXlfc3Q7Cisrc3RydWN0IGVudl9tZF9zdDsKKytzdHJ1Y3Qg ZW52X21kX2N0eF9zdDsKKytzdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKKytzdHJ1Y3QgZXZwX2NpcGhl cl9jdHhfc3Q7Cisrc3RydWN0IGRoX21ldGhvZDsKKytzdHJ1Y3QgQ01BQ19DVFhfc3Q7Cisrc3Ry dWN0IGhtYWNfY3R4X3N0OworKworK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYs IGNvbnN0IGNoYXIgKmF1dGgpOworK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpOworK2NvbnN0 IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdCh2b2lkKTsK KytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hh MSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0 ZXN0X3NoYTIodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKHZvaWQpOworK2ludCBGSVBT X3NlbGZ0ZXN0X2Flc19jY20odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0 X2Flcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9kZXModm9pZCk7CisraW50IEZJUFNfc2Vs ZnRlc3RfZGVzKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKKyt2b2lkIEZJ UFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lk KTsKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNh X2tleWdlbih2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Cisrdm9pZCBGSVBT X2NvcnJ1cHRfcm5nKHZvaWQpOworK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7Cisrdm9pZCBG SVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKTsKKyt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25v ZmYpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF94 OTMxKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7CisraW50IEZJUFNfc2Vs ZnRlc3RfZHJiZyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKKytp bnQgRklQU19zZWxmdGVzdF9jbWFjKHZvaWQpOworKworK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1 bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOworKworKyNkZWZpbmUgRklQ U19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKysJ CWFsZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7 CisrCisraW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBr ZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBzdHJ1 Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKKysJCQljb25zdCBj aGFyICpmYWlsX3N0cik7CisrCisraW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBo ZXJfY3R4X3N0ICpjdHgsCisrCQkJY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwK KysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAq aXYsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmNpcGhlcnRleHQsCisrCQkJaW50IGxlbik7CisrCisrdm9pZCBmaXBzX3NldF9z ZWxmdGVzdF9mYWlsKHZvaWQpOworKworK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0 X2RpZ2VzdGJ5bmlkKGludCBuaWQpOworKworK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpG SVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKKysKKysKKysvKiBCRUdJTiBFUlJPUiBDT0RF UyAqLworKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBz Y3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCisrICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1h eSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCisrICovCisrdm9p ZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCk7CisrCisrLyogRXJyb3IgY29kZXMgZm9yIHRo ZSBGSVBTIGZ1bmN0aW9ucy4gKi8KKysKKysvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKysjZGVmaW5l IEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKKysjZGVmaW5lIEZJUFNfRl9ESF9J TklUCQkJCQkgMTQ4CisrI2RlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQJCQkJIDE2MgorKyNkZWZp bmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQorKyNkZWZpbmUgRklQU19GX0RT QV9CVUlMVElOX1BBUkFNR0VOMgkJCSAxMDcKKysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTgkJ CQkgMTAyCisrI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCisrI2RlZmluZSBG SVBTX0ZfRUNESF9DT01QVVRFX0tFWQkJCQkgMTYzCisrI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9f U0lHTgkJCQkgMTY0CisrI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fVkVSSUZZCQkJCSAxNjUKKysj ZGVmaW5lIEZJUFNfRl9FQ19LRVlfR0VORVJBVEVfS0VZCQkJIDE2NgorKyNkZWZpbmUgRklQU19G X0VWUF9DSVBIRVJJTklUX0VYCQkJIDEyNAorKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklU X0VYCQkJIDEyNQorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKKysjZGVm aW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQV9QUk5HCQkJIDE1MQorKyNkZWZpbmUgRklQU19GX0ZJ UFNfQ0hFQ0tfRUMJCQkJIDE0MgorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUNfUFJORwkJ CSAxNTIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEw NQorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAxMDYKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0NIRUNLX1JTQV9QUk5HCQkJIDE1MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVS CQkJCSAxNjAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUklOSVQJCQkJIDE0MworKyNkZWZp bmUgRklQU19GX0ZJUFNfQ0lQSEVSX0NUWF9DVFJMCQkJIDE2MQorKyNkZWZpbmUgRklQU19GX0ZJ UFNfRElHRVNURklOQUwJCQkJIDE1OAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUSU5JVAkJ CQkgMTI4CisrI2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RVUERBVEUJCQkgMTU5CisrI2RlZmlu ZSBGSVBTX0ZfRklQU19EUkJHX0JZVEVTCQkJCSAxMzEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RS QkdfQ0hFQ0sJCQkJIDE0NgorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNUCQkJ IDEzMgorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSwkJCSAxMzYKKysjZGVm aW5lIEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUJCQkgMTM0CisrI2RlZmluZSBGSVBTX0ZfRklQ U19EUkJHX0lOSVQJCQkJIDEzNQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFU RQkJCSAxMzgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfTkVXCQkJCSAxMzkKKysjZGVmaW5l IEZJUFNfRl9GSVBTX0RSQkdfUkVTRUVECQkJCSAxNDAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RS QkdfU0lOR0xFX0tBVAkJCSAxNDEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJLyog dW51c2VkICovCSAxMDcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9TSUdOX0RJR0VTVAkJCSAx NTQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9WRVJJRllfRElHRVNUCQkJIDE1NQorKyNkZWZp bmUgRklQU19GX0ZJUFNfR0VUX0VOVFJPUFkJCQkJIDE0NworKyNkZWZpbmUgRklQU19GX0ZJUFNf TU9ERV9TRVQJCS8qIHVudXNlZCAqLwkgMTA4CisrI2RlZmluZSBGSVBTX0ZfRklQU19NT0RVTEVf TU9ERV9TRVQJCQkgMTA4CisrI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNU CQkJIDEwOQorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9BREQJCQkJIDEzNworKyNkZWZpbmUg RklQU19GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTIyCisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5E X1BTRVVET19CWVRFUwkJCSAxNjcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VFRAkJCQkg MTY4CisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QJCQkgMTI2CisrI2RlZmlu ZSBGSVBTX0ZfRklQU19SQU5EX1NUQVRVUwkJCQkgMTI3CisrI2RlZmluZSBGSVBTX0ZfRklQU19S U0FfU0lHTl9ESUdFU1QJCQkgMTU2CisrI2RlZmluZSBGSVBTX0ZfRklQU19SU0FfVkVSSUZZX0RJ R0VTVAkJCSAxNTcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00JCQkgMTQ1CisrI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNCQkJIDEyOQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VM RlRFU1RfQUVTX1hUUwkJCSAxNDQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMJ CQkgMTMwCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCisrI2RlZmlu ZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EJCQkgMTEyCisrI2RlZmluZSBGSVBTX0ZfRklQU19T RUxGVEVTVF9FQ0RTQQkJCSAxMzMKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMJ CQkgMTEzCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJLyogdW51c2VkICovCSAx MTQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1CisrI2RlZmluZSBG SVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxCQkJIDExNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VU X1BSTkdfS0VZCQkJIDE1MworKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJCQkJIDEyMworKyNk ZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKKysjZGVmaW5lIEZJUFNfRl9S U0FfRUFZX0lOSVQJCQkJIDE0OQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNS WVBUCQkJIDExNworKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDEx OAorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5CisrI2RlZmlu ZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKKysjZGVmaW5lIEZJUFNfRl9S U0FfWDkzMV9HRU5FUkFURV9LRVlfRVgJCQkgMTIxCisrI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JB TkRfQllURVMJLyogdW51c2VkICovCSAxMjIKKysKKysvKiBSZWFzb24gY29kZXMuICovCisrI2Rl ZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVECSAxNTAKKysjZGVm aW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HCQkgMTI1CisrI2RlZmluZSBGSVBT X1JfQUxSRUFEWV9JTlNUQU5USUFURUQJCQkgMTM0CisrI2RlZmluZSBGSVBTX1JfQVVUSEVOVElD QVRJT05fRkFJTFVSRQkJCSAxNTEKKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCS8q IHVudXNlZCAqLwkgMTAzCisrI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVAkv KiB1bnVzZWQgKi8JIDEwNAorKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJ CQkgMTE0CisrI2RlZmluZSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQJCQkgMTUyCisrI2Rl ZmluZSBGSVBTX1JfRFJCR19TVFVDSwkJCQkgMTAzCisrI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9F UlJPUl9VTkRFVEVDVEVECQkJIDEwNAorKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVF U1RFRF9GT1JfUkVTRUVECQkgMTA1CisrI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RV Q0sJCQkgMTQyCisrI2RlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTE1 CisrI2RlZmluZSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEyNworKyNkZWZp bmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVAkgMTI0CisrI2RlZmlu ZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZCQkJIDEyMgorKyNkZWZpbmUgRklQU19S X0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UJCQkgMTQwCisrI2RlZmluZSBGSVBTX1JfRVhFX0RJR0VT VF9ET0VTX05PVF9NQVRDSCAgIC8qIHVudXNlZCAqLwkgMTA1CisrI2RlZmluZSBGSVBTX1JfRklO R0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gJCSAxMTAKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklO VF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQorKyNkZWZpbmUgRklQU19SX0ZJ TkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCisrI2RlZmluZSBG SVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgorKyNkZWZpbmUgRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVECQkJIDEwNgorKyNkZWZpbmUgRklQU19SX0ZVTkNUSU9OX0VSUk9SCQkJ CSAxMTYKKysjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUgkJCQkgMTM3CisrI2RlZmluZSBG SVBTX1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRAkJIDExOAorKyNkZWZpbmUgRklQU19SX0lO U1RBTlRJQVRFX0VSUk9SCQkJIDExOQorKyNkZWZpbmUgRklQU19SX0lOU1VGRklDSUVOVF9TRUNV UklUWV9TVFJFTkdUSAkJIDEyMAorKyNkZWZpbmUgRklQU19SX0lOVEVSTkFMX0VSUk9SCQkJCSAx MjEKKysjZGVmaW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5CisrI2RlZmluZSBG SVBTX1JfSU5WQUxJRF9QQVJBTUVURVJTCQkJIDE0NAorKyNkZWZpbmUgRklQU19SX0lOX0VSUk9S X1NUQVRFCQkJCSAxMjMKKysjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKKysj ZGVmaW5lIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVECQkJIDE0OQorKyNkZWZpbmUgRklQ U19SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCisrI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMV9G QUlMVVJFCQkJIDE0NQorKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRQkJCSAxNDYK KysjZGVmaW5lIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVECQkJCSAxMjYKKysjZGVmaW5lIEZJUFNf Ul9QQUlSV0lTRV9URVNUX0ZBSUxFRAkJCSAxMDcKKysjZGVmaW5lIEZJUFNfUl9QRVJTT05BTElT QVRJT05fRVJST1JfVU5ERVRFQ1RFRAkJIDEyOAorKyNkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNB VElPTl9TVFJJTkdfVE9PX0xPTkcJCSAxMjkKKysjZGVmaW5lIEZJUFNfUl9QUk5HX1NUUkVOR1RI X1RPT19MT1cJCQkgMTQzCisrI2RlZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRQkJCQkgMTQ3 CisrI2RlZmluZSBGSVBTX1JfUFJfVEVTVDJfRkFJTFVSRQkJCQkgMTQ4CisrI2RlZmluZSBGSVBT X1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzMAorKyNkZWZpbmUgRklQU19S X1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHCQkgMTMxCisrI2RlZmluZSBGSVBTX1JfUkVTRUVE X0NPVU5URVJfRVJST1IJCQkgMTMyCisrI2RlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9SCQkJCSAx MzMKKysjZGVmaW5lIEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNQor KyNkZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCS8qIHVudXNlZCAqLwkgMTE2CisrI2Rl ZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKKysjZGVmaW5lIEZJUFNfUl9TRUxG VEVTVF9GQUlMVVJFCQkJCSAxMzUKKysjZGVmaW5lIEZJUFNfUl9TVFJFTkdUSF9FUlJPUl9VTkRF VEVDVEVECQkgMTM2CisrI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAxMTcKKysjZGVm aW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SCQkJIDE0MQorKyNkZWZpbmUgRklQU19SX1VO SU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUgkJIDEzOAorKyNkZWZpbmUgRklQU19SX1VOU1VQUE9S VEVEX0RSQkdfVFlQRQkJCSAxMzkKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9S TQkJCSAxMTMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0 ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxm dGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDYzOTM3NDggKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCTIwMTItMDIt MDcgMTE6MDc6MDIuNTQ3MzkzNzU2ICswMTAwCitAQCAtMCwwICsxLDEzNyBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3QgeworKwljb25zdCBFVlBfTUQgKigqYWxnKSh2b2lk KTsKKysJY29uc3QgY2hhciAqa2V5LCAqaXY7CisrCXVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01B WF9NRF9TSVpFXTsKKyt9IEhNQUNfS0FUOworKworK3N0YXRpYyBjb25zdCBITUFDX0tBVCB2ZWN0 b3JbXSA9IHsKKysgICAgewlFVlBfc2hhMSwKKysJLyogZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdv di9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8KKysJIjAxMjM0NTY3 ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHgwOSwweDIyLDB4ZDMsMHg0MCww eDVmLDB4YWEsMHgzZCwweDE5LAorKwkgIDB4NGYsMHg4MiwweGE0LDB4NTgsMHgzMCwweDczLDB4 N2QsMHg1YywKKysJICAweGM2LDB4YzcsMHg1ZCwweDI0IH0KKysgICAgfSwKKysgICAgewlFVlBf c2hhMjI0LAorKwkvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92ZS4uLiAqLworKwkiMDEy MzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweGRkLDB4ZWYsMHgwYSww eDQwLDB4Y2IsMHg3ZCwweDUwLDB4ZmIsCisrCSAgMHg2ZSwweGU2LDB4Y2UsMHhhMSwweDIwLDB4 YmEsMHgyNiwweGFhLAorKwkgIDB4MDgsMHhmMywweDA3LDB4NzUsMHg4NywweGI4LDB4YWQsMHgx YiwKKysJICAweDhjLDB4OGQsMHgxMiwweGM3IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMjU2 LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweGI4LDB4 ZjIsMHgwZCwweGI1LDB4NDEsMHhlYSwweDQzLDB4MDksCisrCSAgMHhjYSwweDRlLDB4YTksMHgz OCwweDBjLDB4ZDAsMHhlOCwweDM0LAorKwkgIDB4ZjcsMHgxZiwweGJlLDB4OTEsMHg3NCwweGEy LDB4NjEsMHgzOCwKKysJICAweDBkLDB4YzEsMHg3ZSwweGFlLDB4NmEsMHgzNCwweDUxLDB4ZDkg fQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEzODQsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIs CisrCSJTYW1wbGUgIzIiLAorKwl7IDB4MDgsMHhiYywweGIwLDB4ZGEsMHg0OSwweDFlLDB4ODcs MHhhZCwKKysJICAweDlhLDB4MWQsMHg2YSwweGNlLDB4MjMsMHhjNSwweDBiLDB4ZjYsCisrCSAg MHhiNywweDE4LDB4MDYsMHhhNSwweDc3LDB4Y2QsMHg0OSwweDA0LAorKwkgIDB4ODksMHhmMSww eGU2LDB4MjMsMHg0NCwweDUxLDB4NTEsMHg5ZiwKKysJICAweDg1LDB4NTYsMHg4MCwweDc5LDB4 MGMsMHhiZCwweDRkLDB4NTAsCisrCSAgMHhhNCwweDVmLDB4MjksMHhlMywweDkzLDB4ZjAsMHhl OCwweDdmIH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhNTEyLAorKwkiMDEyMzQ1Njc4OTo7PD0+ P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDgwLDB4OWQsMHg0NCwweDA1LDB4N2MsMHg1 YiwweDk1LDB4NDEsCisrCSAgMHgwNSwweGJkLDB4MDQsMHgxMywweDE2LDB4ZGIsMHgwZiwweGFj LAorKwkgIDB4NDQsMHhkNSwweGE0LDB4ZDUsMHhkMCwweDg5LDB4MmIsMHhkMCwKKysJICAweDRl LDB4ODYsMHg2NCwweDEyLDB4YzAsMHg5MCwweDc3LDB4NjgsCisrCSAgMHhmMSwweDg3LDB4Yjcs MHg3YywweDRmLDB4YWUsMHgyYywweDJmLAorKwkgIDB4MjEsMHhhNSwweGI1LDB4NjUsMHg5YSww eDRmLDB4NGIsMHhhNywKKysJICAweDQ3LDB4MDIsMHhhMywweGRlLDB4OWIsMHg1MSwweGYxLDB4 NDUsCisrCSAgMHhiZCwweDRmLDB4MjUsMHgyNywweDQyLDB4OTgsMHg5OSwweDA1IH0KKysgICAg fSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQorKyAgICB7CisrICAgIGludCBu OworKyAgICB1bnNpZ25lZCBpbnQgICAgb3V0bGVuOworKyAgICB1bnNpZ25lZCBjaGFyICAgb3V0 W0VWUF9NQVhfTURfU0laRV07CisrICAgIGNvbnN0IEVWUF9NRCAgICptZDsKKysgICAgY29uc3Qg SE1BQ19LQVQgKnQ7CisrCisrICAgIGZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikv c2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCisrCXsKKysJbWQgPSAoKnQtPmFsZykoKTsKKysJ SE1BQyhtZCx0LT5rZXksc3RybGVuKHQtPmtleSksCisrCQkoY29uc3QgdW5zaWduZWQgY2hhciAq KXQtPml2LHN0cmxlbih0LT5pdiksCisrCQlvdXQsJm91dGxlbik7CisrCisrCWlmKG1lbWNtcChv dXQsdC0+a2F2YWwsb3V0bGVuKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf U0VMRlRFU1RfSE1BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOwor KwkgICAgfQorKwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmguZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NzM5 Mzc1NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19sb2Ns LmgJMjAxMi0wMi0wNyAxMTowNzowMi41NDczOTM3NTYgKzAxMDAKK0BAIC0wLDAgKzEsNzEgQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisr I2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKyNkZWZpbmUg RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkzMgorKyNkZWZpbmUgZmlwc19sb2FkX2tleV9jb21w b25lbnQoa2V5LCBjb21wLCBwcmUpIFwKKysJa2V5LT5jb21wID0gQk5fYmluMmJuKHByZSMjXyMj Y29tcCwgc2l6ZW9mKHByZSMjXyMjY29tcCksIGtleS0+Y29tcCk7IFwKKysJaWYgKCFrZXktPmNv bXApIFwKKysJCWdvdG8gZXJyCisrCisrI2RlZmluZSBmaXBzX3Bvc3Rfc3RhcnRlZChpZCwgc3Vi aWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3Rfc3VjY2VzcyhpZCwgc3ViaWQsIGV4KSAxCisr I2RlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNf cG9zdF9jb3JydXB0KGlkLCBzdWJpZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNfcG9zdF9zdGF0dXMo KSAxCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX21kLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTItMDItMDcgMTE6MTQ6MDUuNjE5OTMy MDEyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX21kLmMJ MjAxMi0wMi0wNyAxMToyMDo0MS41MDgyMzE5OTggKzAxMDAKK0BAIC0wLDAgKzEsMTQ1IEBACisr LyogZmlwcy9ldnAvZmlwc19tZC5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJp YyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAq IGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRp b24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICog CisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJj aWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVh cmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUg Zm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFz aCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3Vt ZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQg YnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBp cyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJl bWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4K KysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdl IGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1 dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQu CisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJv Z3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwp IHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0 d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3Jp dHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAg VGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBm cm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMg cmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMg Y29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGly ZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdl bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkg VGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisr ICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0 ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0 aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5v dCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlv biBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8K KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5n CisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisr ICovCisrCisrLyogTWluaW1hbCBzdGFuZGFsb25lIEZJUFMgdmVyc2lvbnMgb2YgRGlnZXN0IG9w ZXJhdGlvbnMgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxz dGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3Rz Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2NvbnN0IEVWUF9NRCAqRklQU19nZXRf ZGlnZXN0YnluaWQoaW50IG5pZCkKKysJeworKwlzd2l0Y2ggKG5pZCkKKysJCXsKKysJCWNhc2Ug TklEX3NoYTE6CisrCQlyZXR1cm4gRVZQX3NoYTEoKTsKKysKKysJCWNhc2UgTklEX3NoYTIyNDoK KysJCXJldHVybiBFVlBfc2hhMjI0KCk7CisrCisrCQljYXNlIE5JRF9zaGEyNTY6CisrCQlyZXR1 cm4gRVZQX3NoYTI1NigpOworKworKwkJY2FzZSBOSURfc2hhMzg0OgorKwkJcmV0dXJuIEVWUF9z aGEzODQoKTsKKysKKysJCWNhc2UgTklEX3NoYTUxMjoKKysJCXJldHVybiBFVlBfc2hhNTEyKCk7 CisrCisrCQlkZWZhdWx0OgorKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrCX0KK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ3Mzkz NzU2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3Bvc3Qu YwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NzM5Mzc1NiArMDEwMAorQEAgLTAsMCArMSwyMDUgQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQor KworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFj Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+ CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCisrLyogUG93ZXIgb24gc2VsZiB0ZXN0IChQT1NUKSBzdXBwb3J0IGZ1 bmN0aW9ucyAqLworKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlw c19sb2NsLmgiCisrCisrLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KKytpbnQgRklQU19zZWxmdGVz dCh2b2lkKQorKwl7CisrCWludCBydiA9IDE7CisrCWlmICghRklQU19zZWxmdGVzdF9kcmJnKCkp CisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF94OTMxKCkpCisrCQlydiA9IDA7Cisr ICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQorKwkJcnYgPSAwOworKyAgICAJaWYgKCFG SVBTX3NlbGZ0ZXN0X3NoYTIoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2ht YWMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2NtYWMoKSkKKysJCXJ2ID0g MDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2FlcygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNf c2VsZnRlc3RfYWVzX2NjbSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVz X2djbSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX3h0cygpKQorKwkJ cnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCisrCQlydiA9IDA7CisrCWlmICgh RklQU19zZWxmdGVzdF9yc2EoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Rz YSgpKQorKwkJcnYgPSAwOworKwlyZXR1cm4gcnY7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBw dWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCisrICog c3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9u IGRpZ2VzdAorKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5v dCBOVUxMIGl0IHdpbGwKKysgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRj aGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0CisrICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlz IHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKKysgKiBvZiBmYWlsdXJl LiBJZiAicGtleSIgaXMgTlVMTCBqdXN0IHBlcmZvcm0gYSBtZXNzYWdlIGRpZ2VzdCBjaGVjay4K KysgKi8KKysKKytpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAor KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJY29uc3QgRVZQX01EICpk aWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKKysJCQljb25zdCBjaGFyICpmYWlsX3N0cikK KysJewkKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcg PSBzaWd0bXA7CisrCXVuc2lnbmVkIGludCBzaWdsZW47CisrCUVWUF9NRF9DVFggbWN0eDsKKysJ RVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysKKysJaWYgKGRpZ2VzdCA9PSBOVUxMKQorKwkJZGln ZXN0ID0gRVZQX3NoYTI1NigpOworKworKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNB KQorKwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKKysJ CXsKKysJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7Cisr CQlpZiAoIXNpZykKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVS RV9URVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9 CisrCisrCWlmICh0YnNsZW4gPT0gLTEpCisrCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMp OworKworKwlpZiAobWRfZmxhZ3MpCisrCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRf ZmxhZ3MpOworKworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkK KysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVu KSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2ln bGVuLCBwa2V5KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmIChrYXQgJiYgKChzaWdsZW4gIT0g a2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQorKwkJZ290byBlcnJvcjsKKysK KysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8g ZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJ Z290byBlcnJvcjsKKysJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwg cGtleSk7CisrCisrCWVycm9yOgorKwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJCU9QRU5TU0xfZnJl ZShzaWcpOworKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwlpZiAocmV0ICE9IDEpCisr CQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RF U1RfRkFJTFVSRSk7CisrCQlpZiAoZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIs ICJUeXBlPSIsIGZhaWxfc3RyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJ fQorKworKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNy eXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKKysgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlw dCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KKysgKi8KKysKKytpbnQgZmlw c19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBo ZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pCisrCXsKKysJdW5zaWduZWQg Y2hhciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBj aXRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysKKysJT1BFTlNTTF9hc3NlcnQobGVu IDw9IEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwltZW1zZXQocGx0bXAsIDAsIEZJUFNf TUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwltZW1zZXQoY2l0bXAsIDAsIEZJUFNfTUFYX0NJUEhF Ul9URVNUX1NJWkUpOworKworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5V TEwsIGtleSwgaXYsIDEpIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXIoY3R4 LCBjaXRtcCwgcGxhaW50ZXh0LCBsZW4pIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKG1lbWNt cChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoRVZQX0NpcGhl ckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDApCisrCQlyZXR1cm4g MDsKKysJaWYgKEVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbikgPD0gMCkKKysJCXJl dHVybiAwOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikpCisrCQlyZXR1cm4g MDsKKysJcmV0dXJuIDE7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9m aXBzX3JhbmQuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ3MzkzNzU2ICswMTAwCisrKysg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwkyMDEyLTAyLTA3IDEx OjA3OjAyLjU0NzM5Mzc1NiArMDEwMAorQEAgLTAsMCArMSw0NTcgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysvKgorKyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5H IGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCisrICovCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hP UEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKKysgICBiZSBkZWZpbmVk IGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxl cnMKKysgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KKysjaWZuZGVmIF9YT1BFTl9T T1VSQ0VfRVhURU5ERUQKKysjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRp ZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3Jh bmQuaD4KKysjaWYgIShkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5T U0xfU1lTX1ZYV09SS1MpKQorKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjZW5kaWYKKysjaWYg ZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbmRp ZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrIyBp ZmRlZiBPUEVOU1NMX1VOSVNURAorKyMgIGluY2x1ZGUgT1BFTlNTTF9VTklTVEQKKysjIGVsc2UK KysjICBpbmNsdWRlIDx1bmlzdGQuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2luY2x1ZGUgPHN0 cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2Ns LmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZv aWQpOworKworKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSAkxNgorKworKworKy8qIEFFUyBGSVBT IFBSTkcgaW1wbGVtZW50YXRpb24gKi8KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwlpbnQg c2VlZGVkOworKwlpbnQga2V5ZWQ7CisrCWludCB0ZXN0X21vZGU7CisrCWludCBzZWNvbmQ7Cisr CWludCBlcnJvcjsKKysJdW5zaWduZWQgbG9uZyBjb3VudGVyOworKwlBRVNfS0VZIGtzOworKwlp bnQgdnBvczsKKysJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2Vl ZCBsZW5ndGggKi8KKysJdW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOwor Kwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgRFRb QUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RI XTsKKysJfSBGSVBTX1BSTkdfQ1RYOworKworK3N0YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7Cisr Cisrc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX3g5MzFfc3Rp Y2soaW50IG9ub2ZmKQorKwl7CisrCWZpcHNfcHJuZ19mYWlsID0gb25vZmY7CisrCX0KKysKKyt2 b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCisrCXsKKysJRklQU194OTMxX3N0aWNrKDEpOworKwl9 CisrCisrc3RhdGljIHZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQU19QUk5HX0NUWCAqY3R4 KQorKwl7CisrCWN0eC0+c2VlZGVkID0gMDsKKysJY3R4LT5rZXllZCA9IDA7CisrCWN0eC0+dGVz dF9tb2RlID0gMDsKKysJY3R4LT5jb3VudGVyID0gMDsKKysJY3R4LT5zZWNvbmQgPSAwOworKwlj dHgtPmVycm9yID0gMDsKKysJY3R4LT52cG9zID0gMDsKKysJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ ViwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6ZW9m KEFFU19LRVkpKTsKKysJfQorKwkKKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJ UFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVk IGludCBrZXlsZW4pCisrCXsKKysJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWSwgRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0g MjQgJiYga2V5bGVuICE9IDMyKQorKwkJeworKwkJLyogZXJyb3I6IGludmFsaWQga2V5IHNpemUg Ki8KKysJCXJldHVybiAwOworKwkJfQorKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVu IDw8IDMsICZjdHgtPmtzKTsKKysJaWYgKGtleWxlbiA9PSAxNikKKysJCXsKKysJCW1lbWNweShj dHgtPnRtcF9rZXksIGtleSwgMTYpOworKwkJY3R4LT5rZXllZCA9IDI7CisrCQl9CisrCWVsc2UK KysJCWN0eC0+a2V5ZWQgPSAxOworKwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+c2Vjb25kID0g MDsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChG SVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgdW5zaWdu ZWQgaW50IHNlZWRsZW4pCisrCXsKKysJdW5zaWduZWQgaW50IGk7CisrCWlmICghY3R4LT5rZXll ZCkKKysJCXJldHVybiAwOworKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0IHN1cHBsaWVk IGRhdGEgKi8KKysJaWYgKGN0eC0+dGVzdF9tb2RlKQorKwkJeworKwkJaWYgKHNlZWRsZW4gIT0g QUVTX0JMT0NLX0xFTkdUSCkKKysJCQlyZXR1cm4gMDsKKysJCW1lbWNweShjdHgtPlYsIHNlZWQs IEFFU19CTE9DS19MRU5HVEgpOworKwkJY3R4LT5zZWVkZWQgPSAxOworKwkJcmV0dXJuIDE7Cisr CQl9CisrCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBkYXRhIHdpdGggZXhpc3Rp bmcgc2VlZCAqLworKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsrKQorKwkJeworKwkJY3R4 LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOworKwkJaWYgKGN0eC0+dnBvcyA9PSBBRVNfQkxP Q0tfTEVOR1RIKQorKwkJCXsKKysJCQljdHgtPnZwb3MgPSAwOworKwkJCS8qIFNwZWNpYWwgY2Fz ZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscworKyAJCQkgKiBibG9jayBzaXpl IGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCisrIAkJCSAqLyAKKysJCQlpZiAoY3R4 LT5rZXllZCA9PSAyKQorKwkJCQl7CisrCQkJCWlmICghbWVtY21wKGN0eC0+dG1wX2tleSwgY3R4 LT5WLCAxNikpCisrCQkJCQl7CisrCQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NF RUQsCisrCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkpOworKwkJCQkJ cmV0dXJuIDA7CisrCQkJCQl9CisrCQkJCU9QRU5TU0xfY2xlYW5zZShjdHgtPnRtcF9rZXksIDE2 KTsKKysJCQkJY3R4LT5rZXllZCA9IDE7CisrCQkJCX0KKysJCQljdHgtPnNlZWRlZCA9IDE7Cisr CQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfdGVz dF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKKysJeworKwlpZiAoY3R4LT5rZXllZCkKKysJCXsK KysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5EX1JfUFJOR19LRVlFRCk7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJY3R4LT50ZXN0X21vZGUgPSAxOworKwlyZXR1cm4gMTsK KysJfQorKworK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpCisrCXsKKysJcmV0dXJuIGZp cHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3Rlc3RfbW9k ZSh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOworKwl9Cisr CisrCisraW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisrCXsKKysJaWYg KCFzY3R4LnRlc3RfbW9kZSkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfWDkzMV9TRVRf RFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCW1lbWNw eShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCXJldHVybiAxOworKwl9CisrCisr aW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisrCXsKKysJaWYgKCFzY3R4 LnRlc3RfbW9kZSkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQsUkFO RF9SX05PVF9JTl9URVNUX01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCW1lbWNweShzY3R4 LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCXJldHVybiAxOworKwl9CisrCisrdm9pZCBG SVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cikK KysJeworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlGSUxFVElNRSBmdDsKKysjZWxpZiBk ZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7 CisrI2Vsc2UKKysJc3RydWN0IHRpbWV2YWwgdHY7CisrI2VuZGlmCisrCisrI2lmbmRlZiBHRVRQ SURfSVNfTUVBTklOR0xFU1MKKysJdW5zaWduZWQgbG9uZyBwaWQ7CisrI2VuZGlmCisrCisrI2lm ZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7Cisr CWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKKysJ YnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZm KTsKKysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYp ICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1l ID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3TG93RGF0 ZVRpbWUgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRl VGltZSA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xv d0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKChm dC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9T WVNfVlhXT1JLUykKKysJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKKysJYnVm WzBdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9zZWMgJiAweGZmKTsKKysJYnVmWzFdID0gKHVu c2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9ICh1bnNp Z25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzNdID0gKHVuc2ln bmVkIGNoYXIpICgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWdu ZWQgY2hhcikgKHRzLnR2X25zZWMgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIp ICgodHMudHZfbnNlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikg KCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikg KCh0cy50dl9uc2VjID4+IDI0KSAmIDB4ZmYpOworKyNlbHNlCisrCWdldHRpbWVvZmRheSgmdHYs TlVMTCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfc2VjICYgMHhmZik7Cisr CWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwli dWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1 ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVm WzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVu c2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVu c2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysJYnVm WzhdID0gKHVuc2lnbmVkIGNoYXIpICgqcGN0ciAmIDB4ZmYpOworKwlidWZbOV0gPSAodW5zaWdu ZWQgY2hhcikgKCgqcGN0ciA+PiA4KSAmIDB4ZmYpOworKwlidWZbMTBdID0gKHVuc2lnbmVkIGNo YXIpICgoKnBjdHIgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikg KCgqcGN0ciA+PiAyNCkgJiAweGZmKTsKKysKKysJKCpwY3RyKSsrOworKworKworKyNpZm5kZWYg R0VUUElEX0lTX01FQU5JTkdMRVNTCisrCXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQoKTsKKysJ YnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7CisrCWJ1ZlsxM10gPSAodW5z aWduZWQgY2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKKysJYnVmWzE0XSA9ICh1bnNpZ25lZCBj aGFyKSAoKHBpZCA+PiAxNikgJiAweGZmKTsKKysJYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAo KHBpZCA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysgICAgfQorKworK3N0YXRpYyBpbnQgZmlw c19yYW5kKEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2ln bmVkIGludCBvdXRsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhd LCBJW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVO R1RIXTsKKysJaW50IGk7CisrCWlmIChjdHgtPmVycm9yKQorKwkJeworKwkJUkFORGVycihSQU5E X0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VSUk9SKTsKKysJCXJldHVybiAwOworKwkJfQorKwlp ZiAoIWN0eC0+a2V5ZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9S X05PX0tFWV9TRVQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghY3R4LT5zZWVkZWQpCisr CQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZm9yICg7OykKKysJCXsKKysJCWlmICghY3R4LT50ZXN0 X21vZGUpCisrCQkJRklQU19nZXRfdGltZXZlYyhjdHgtPkRULCAmY3R4LT5jb3VudGVyKTsKKysJ CUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBB RVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsKKysJ CUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOworKwkJZm9yIChpID0gMDsgaSA8IEFFU19C TE9DS19MRU5HVEg7IGkrKykKKysJCQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysJCUFFU19lbmNy eXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7CisrCQkvKiBDb250aW51b3VzIFBSTkcgdGVzdCAq LworKwkJaWYgKGN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQlpZiAoZmlwc19wcm5nX2ZhaWwpCisr CQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJCWlmICghbWVt Y21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCisrCQkJCXsKKysJICAgIAkJCVJB TkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7CisrCQkJCWN0eC0+ZXJy b3IgPSAxOworKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQkJCXJldHVybiAwOwor KwkJCQl9CisrCQkJfQorKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7 CisrCQlpZiAoIWN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQljdHgtPnNlY29uZCA9IDE7CisrCQkJ aWYgKCFjdHgtPnRlc3RfbW9kZSkKKysJCQkJY29udGludWU7CisrCQkJfQorKworKwkJaWYgKG91 dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQltZW1jcHkob3V0LCBSLCBvdXRs ZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysKKysJCW1lbWNweShvdXQsIFIsIEFFU19CTE9DS19M RU5HVEgpOworKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7CisrCQlvdXRsZW4gLT0gQUVTX0JM T0NLX0xFTkdUSDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysKKytpbnQgRklQU194OTMx X3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQorKwl7CisrCWlu dCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNf c2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7CisrCUNSWVBUT193X3VubG9jayhDUllQ VE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0 X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQor Kwl7CisrCXJldHVybiBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrCX0KKysKKytp bnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJ aW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlw c19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKKysJQ1JZUFRPX3dfdW5sb2Nr KENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrCisraW50IEZJUFNf eDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKKysJeworKwlpbnQgcmV0 OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3JhbmQo JnNjdHgsIG91dCwgY291bnQpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKQorKwl7 CisrCWludCByZXQ7CisrCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9 IHNjdHguc2VlZGVkOworKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJl dHVybiByZXQ7CisrCX0KKysKKyt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKQorKwl7CisrCUNS WVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZz Y3R4KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9CisrCisrc3Rh dGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikK KysJeworKwlGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKKysJcmV0dXJuIDE7CisrCX0K KysKKytzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNl ZWRsZW4sCisrCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCisrCXsKKysJRklQU194OTMxX3NlZWQo c2VlZCwgc2VlZGxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGNvbnN0IFJBTkRf TUVUSE9EIHJhbmRfeDkzMV9tZXRoPQorKyAgICB7CisrICAgIGZpcHNfZG9fcmFuZF9zZWVkLAor KyAgICBGSVBTX3g5MzFfYnl0ZXMsCisrICAgIEZJUFNfeDkzMV9yZXNldCwKKysgICAgZmlwc19k b19yYW5kX2FkZCwKKysgICAgRklQU194OTMxX2J5dGVzLAorKyAgICBGSVBTX3g5MzFfc3RhdHVz CisrICAgIH07CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCkK Kyt7CisrICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ3 MzkzNzU2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3Jh bmQuaAkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NzM5Mzc1NiArMDEwMAorQEAgLTAsMCArMSwxNDUg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZuZGVmIEhFQURFUl9GSVBTX1JB TkRfSAorKyNkZWZpbmUgSEVBREVSX0ZJUFNfUkFORF9ICisrCisrI2luY2x1ZGUgPG9wZW5zc2wv YWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK2lu dCBGSVBTX3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4p OworK2ludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpidWYsIGludCBudW0pOworK2ludCBG SVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb3V0bGVuKTsKKysKKytpbnQg RklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKTsKKyt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKTsK KytpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7CisrCisraW50IEZJUFNf eDkzMV9zdGF0dXModm9pZCk7CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRo b2Qodm9pZCk7CisrCisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHhfc3QgRFJCR19DVFg7CisrLyog RFJCRyBleHRlcm5hbCBmbGFncyAqLworKy8qIEZsYWcgZm9yIENUUiBtb2RlIG9ubHk6IHVzZSBk ZXJpdmF0aW9uIGZ1bmN0aW9uIGN0cl9kZiAqLworKyNkZWZpbmUJRFJCR19GTEFHX0NUUl9VU0Vf REYJCTB4MQorKy8qIFBSTkcgaXMgaW4gdGVzdCBzdGF0ZSAqLworKyNkZWZpbmUJRFJCR19GTEFH X1RFU1QJCQkweDIKKysKKytEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwgdW5zaWdu ZWQgaW50IGZsYWdzKTsKKytpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIGludCB0 eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJC R19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJz bGVuKTsKKytpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOworK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUo RFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysJCQlp bnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4s IHNpemVfdCBhZGlubGVuKTsKKysKKytpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19D VFggKmRjdHgpOworK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpOworKworK2lu dCBGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6ZV90ICgqZ2V0 X2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQg ZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKKysJdm9pZCAoKmNsZWFu dXBfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xl biksCisrCXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuLAorKwlzaXplX3QgKCpnZXRfbm9uY2UpKERS QkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6 ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKKysJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERS QkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKTsKKysKKytpbnQg RklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6ZV90ICgq Z2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKKysJdm9pZCAo KmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qg b2xlbiksCisrCWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAq YnVmLCBpbnQgbnVtKSwKKysJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCisrCQkJ CWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKTsKKysKKyt2b2lkICpG SVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgpOworK3ZvaWQgRklQU19kcmJnX3Nl dF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4LCB2b2lkICphcHBfZGF0YSk7Cisrc2l6ZV90IEZJUFNf ZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpOworK2ludCBGSVBTX2RyYmdfZ2V0 X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKKyt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50 ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7Cisrdm9pZCBGSVBTX2RyYmdfc2V0 X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKKysKKytpbnQg RklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCk7CisrCisrRFJCR19DVFggKkZJ UFNfZ2V0X2RlZmF1bHRfZHJiZyh2b2lkKTsKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJn X21ldGhvZCh2b2lkKTsKKysKKysKKytpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFO RF9NRVRIT0QgKm1ldGgpOworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhv ZCh2b2lkKTsKKysKKyt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpOworKworK2lu dCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCk7CisrCisrLyogMS4wLjAgY29tcGF0IGZ1bmN0aW9u cyAqLworK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJ UFNfUkFORF9TSVpFX1Qga2V5bGVuKTsKKytpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAq YnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSk7CisraW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25l ZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKKytpbnQgRklQU19yYW5kX3Rl c3RfbW9kZSh2b2lkKTsKKyt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKKytpbnQgRklQU19y YW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7CisraW50IEZJUFNfcmFuZF9zdGF0dXModm9p ZCk7CisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCk7CisrCisrI2lm ZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMgb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaC5maXBzCTIwMTItMDItMDcg MTE6MDc6MDIuNTQ3MzkzNzU2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfbGNsLmgJMjAxMi0wMi0wNyAxMToxMDo1Ny40NzgzNDkxMDkgKzAxMDAK K0BAIC0wLDAgKzEsMjE5IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9sY2wuaCAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCBEUkJHX0hBU0hf Q1RYOworK3R5cGVkZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19ITUFDX0NUWDsKKyt0 eXBlZGVmIHN0cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOworKworKy8qIDg4OCBi aXRzIGZyb20gMTAuMSB0YWJsZSAyICovCisrI2RlZmluZSBIQVNIX1BSTkdfTUFYX1NFRURMRU4J MTExCisrCisrc3RydWN0IGRyYmdfaGFzaF9jdHhfc3QKKysJeworKwljb25zdCBFVlBfTUQgKm1k OworKwlFVlBfTURfQ1RYIG1jdHg7CisrCXVuc2lnbmVkIGNoYXIgVltIQVNIX1BSTkdfTUFYX1NF RURMRU5dOworKwl1bnNpZ25lZCBjaGFyIENbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKKysJLyog VGVtcG9yYXJ5IHZhbHVlIHN0b3JhZ2U6IHNob3VsZCBhbHdheXMgZXhjZWVkIG1heCBkaWdlc3Qg bGVuZ3RoICovCisrCXVuc2lnbmVkIGNoYXIgdnRtcFtIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwor Kwl9OworKworK3N0cnVjdCBkcmJnX2htYWNfY3R4X3N0CisrCXsKKysJY29uc3QgRVZQX01EICpt ZDsKKysJSE1BQ19DVFggaGN0eDsKKysJdW5zaWduZWQgY2hhciBLW0VWUF9NQVhfTURfU0laRV07 CisrCXVuc2lnbmVkIGNoYXIgVltFVlBfTUFYX01EX1NJWkVdOworKwl9OworKworK3N0cnVjdCBk cmJnX2N0cl9jdHhfc3QKKysJeworKwlBRVNfS0VZIGtzOworKwlzaXplX3Qga2V5bGVuOworKwl1 bnNpZ25lZCBjaGFyIEtbMzJdOworKwl1bnNpZ25lZCBjaGFyIFZbMTZdOworKwkvKiBUZW1wIHZh cmlhYmxlcyB1c2VkIGJ5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KKysJQUVTX0tFWSBkZl9rczsK KysJQUVTX0tFWSBkZl9reGtzOworKwkvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFnZSB1c2VkIGJ5 IGN0cl9kZiAqLworKwl1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKKysJc2l6ZV90IGJsdG1wX3Bv czsKKysJdW5zaWduZWQgY2hhciBLWFs0OF07CisrCX07CisrCisrLyogRFJCRyBpbnRlcm5hbCBm bGFncyAqLworKworKy8qIEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIgbGlicmFyeSAqLwor KyNkZWZpbmUJRFJCR19GTEFHX05PRVJSCQkJMHgxCisrLyogQ3VzdG9tIHJlc2VlZCBjaGVja2lu ZyAqLworKyNkZWZpbmUJRFJCR19DVVNUT01fUkVTRUVECQkweDIKKysKKysvKiBEUkJHIHN0YXR1 cyB2YWx1ZXMgKi8KKysvKiBub3QgaW5pdGlhbGlzZWQgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVT X1VOSU5JVElBTElTRUQJMAorKy8qIG9rIGFuZCByZWFkeSB0byBnZW5lcmF0ZSByYW5kb20gYml0 cyAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVBRFkJCTEKKysvKiByZXNlZWQgcmVxdWlyZWQg Ki8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1JFU0VFRAkJMgorKy8qIGZhdGFsIGVycm9yIGNvbmRp dGlvbiAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfRVJST1IJCTMKKysKKysvKiBBIGRlZmF1bHQg bWF4aW11bSBsZW5ndGg6IGxhcmdlciB0aGFuIGFueSByZWFzb25hYmxlIHZhbHVlIHVzZWQgaW4g cHJhdGljZSAqLworKworKyNkZWZpbmUgRFJCR19NQVhfTEVOR1RICQkJMHg3ZmZmZmZmMAorKy8q IE1heGltdW0gRFJCRyBibG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBhcmUgYmlnZ2VyIHRoYW4g Y2lwaGVyIGJsb2NrcyBzaXplcworKyAqIHNvIHVzZSBtYXggZGlnZXN0IGxlbmd0aC4KKysgKi8K KysjZGVmaW5lIERSQkdfTUFYX0JMT0NLCQkJRVZQX01BWF9NRF9TSVpFCisrCisrI2RlZmluZSBE UkJHX0hFQUxUSF9JTlRFUlZBTAkJKDEgPDwgMjQpCisrCisrLyogRFJCRyBjb250ZXh0IHN0cnVj dHVyZSAqLworKworK3N0cnVjdCBkcmJnX2N0eF9zdAorKwl7CisrCS8qIEZpcnN0IHR5cGVzIGNv bW1vbiB0byBhbGwgaW1wbGVtZW50YXRpb25zICovCisrCS8qIERSQkcgdHlwZTogYSBOSUQgZm9y IHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobSAqLworKwlpbnQgdHlwZTsKKysJLyogVmFyaW91cyBl eHRlcm5hbCBmbGFncyAqLworKwl1bnNpZ25lZCBpbnQgeGZsYWdzOworKwkvKiBWYXJpb3VzIGlu dGVybmFsIHVzZSBvbmx5IGZsYWdzICovCisrCXVuc2lnbmVkIGludCBpZmxhZ3M7CisrCS8qIFVz ZWQgZm9yIHBlcmlvZGljIGhlYWx0aCBjaGVja3MgKi8KKysJaW50IGhlYWx0aF9jaGVja19jbnQs IGhlYWx0aF9jaGVja19pbnRlcnZhbDsKKysKKysJLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJz IGFyZSBzZXR1cCBieSBtZWNoYW5pc20gZHJiZ19pbml0KCkgY2FsbCAqLworKwlpbnQgc3RyZW5n dGg7CisrCXNpemVfdCBibG9ja2xlbmd0aDsKKysJc2l6ZV90IG1heF9yZXF1ZXN0OworKworKwlz aXplX3QgbWluX2VudHJvcHksIG1heF9lbnRyb3B5OworKwlzaXplX3QgbWluX25vbmNlLCBtYXhf bm9uY2U7CisrCXNpemVfdCBtYXhfcGVycywgbWF4X2FkaW47CisrCXVuc2lnbmVkIGludCByZXNl ZWRfY291bnRlcjsKKysJdW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKKysJc2l6ZV90IHNl ZWRsZW47CisrCWludCBzdGF0dXM7CisrCS8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5cGljYWxseSB1 c2VkIGJ5IHRlc3QgZ2V0X2VudHJvcHkgKi8KKysJdm9pZCAqYXBwX2RhdGE7CisrCS8qIEltcGxl bWVudGF0aW9uIHNwZWNpZmljIHN0cnVjdHVyZXMgKi8KKysJdW5pb24gCisrCQl7CisrCQlEUkJH X0hBU0hfQ1RYIGhhc2g7CisrCQlEUkJHX0hNQUNfQ1RYIGhtYWM7CisrCQlEUkJHX0NUUl9DVFgg IGN0cjsKKysJCX0gZDsKKysJLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0dXAgY2FsbGJhY2tz IGJlbG93ICovCisrCWludCAoKmluaXQpKERSQkdfQ1RYICpjdHgsIGludCBuaWQsIGludCBzZWN1 cml0eSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKysJLyogSW50YW50aWF0ZSBQUk5HICovCisrCWlu dCAoKmluc3RhbnRpYXRlKShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBz aXplX3Qgbm9uY2VsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBw ZXJzbGVuKTsKKysJLyogcmVzZWVkICovCisrCWludCAoKnJlc2VlZCkoRFJCR19DVFggKmN0eCwK KysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCS8qIGdlbmVyYXQgb3V0 cHV0ICovCisrCWludCAoKmdlbmVyYXRlKShEUkJHX0NUWCAqY3R4LAorKwkJCQl1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4s IHNpemVfdCBhZGlubGVuKTsKKysJLyogdW5pbnN0YW50aWF0ZSAqLworKwlpbnQgKCp1bmluc3Rh bnRpYXRlKShEUkJHX0NUWCAqY3R4KTsKKysKKysJLyogRW50cm9weSBzb3VyY2UgYmxvY2sgbGVu Z3RoICovCisrCXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuOworKworKwkvKiBlbnRyb3B5IGdhdGhl cmluZyBmdW5jdGlvbiAqLworKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwg c2l6ZV90IG1heF9sZW4pOworKwkvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIGVu dHJvcHkgYnVmZmVyICovCisrCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOworKworKwkvKiBub25jZSBnYXRoZXJp bmcgZnVuY3Rpb24gKi8KKysJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNp Z25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXpl X3QgbWF4X2xlbik7CisrCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggbm9uY2Ug YnVmZmVyICovCisrCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysKKysJLyogQ29udGludW91cyByYW5kb20gbnVt YmVyIHRlc3QgdGVtcG9yYXJ5IGFyZWEgKi8KKysJLyogTGFzdCBibG9jayAqLwkKKysJdW5zaWdu ZWQgY2hhciBsYltFVlBfTUFYX01EX1NJWkVdOworKwkvKiBzZXQgaWYgbGIgaXMgdmFsaWQgKi8K KysJaW50IGxiX3ZhbGlkOworKworKwkvKiBDYWxsYmFja3MgdXNlZCB3aGVuIGNhbGxlZCB0aHJv dWdoIFJBTkQgaW50ZXJmYWNlICovCisrCS8qIEdldCBhbnkgYWRkaXRpb25hbCBpbnB1dCBmb3Ig Z2VuZXJhdGUgKi8KKysJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKipwb3V0KTsKKysJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5z aWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrCS8qIENhbGxiYWNrIGZvciBSQU5EX3Nl ZWQoKSwgUkFORF9hZGQoKSAqLworKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgs IGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7CisrCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NU WCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KTsK KysJfTsKKysKKysKKytpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KTsKKytp bnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19o bWFjX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpk Y3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworK2ludCBmaXBzX2RyYmdfY3Bybmdf dGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KTsKKysKKytjb25z dCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKKysKKytj b25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7 CisrCisrI2RlZmluZSBGSVBTX2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKKysjZGVmaW5lIEZJ UFNfZGlnZXN0dXBkYXRlIEVWUF9EaWdlc3RVcGRhdGUKKysjZGVmaW5lIEZJUFNfZGlnZXN0Zmlu YWwgRVZQX0RpZ2VzdEZpbmFsCisrI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9zaXplCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCistLS0g b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcwkyMDEy LTAyLTA3IDExOjA3OjAyLjU0ODM5Mzc2NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ4MzkzNzY0 ICswMTAwCitAQCAtMCwwICsxLDE5MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKwor KyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysv KiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNpbWlsYXIgdG8gUkFORCBmdW5jdGlvbmFsaXR5IGJ1 dCB3aXRob3V0CisrICogRU5HSU5FIGFuZCBhZGRpdGlvbmFsIGNoZWNraW5nIGZvciBub24tRklQ UyByYW5kIG1ldGhvZHMuCisrICovCisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EICpmaXBz X3JhbmRfbWV0aCA9IE5VTEw7Cisrc3RhdGljIGludCBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9 IDA7Cisrc3RhdGljIGludCBmaXBzX3JhbmRfYml0cyA9IDA7CisrCisrLyogQWxsb3dzIGFwcGxp Y2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBvZiBiaXRzIGFuZCB1c2VzIG5vbi1GSVBTIG1ldGhv ZHMgKi8KKyt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpCisrCXsKKysJZmlwc19y YW5kX2JpdHMgPSBuYml0czsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0X21ldGhvZChjb25z dCBSQU5EX01FVEhPRCAqbWV0aCkKKysJeworKwlpZiAoIWZpcHNfcmFuZF9iaXRzKQorKwkJewor KwkJaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQorKwkJCWZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoID0gMTsKKysJCWVsc2UgaWYgKG1ldGggPT0gRklQU194OTMxX21ldGhvZCgpKQorKwkJ CWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMjsKKysJCWVsc2UKKysJCQl7CisrCQkJZmlwc19h cHByb3ZlZF9yYW5kX21ldGggPSAwOworKwkJCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQkJ CXsKKysJCQkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QsCisrCQkJCQkJRklQ U19SX05PTl9GSVBTX01FVEhPRCk7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJ fQorKwlmaXBzX3JhbmRfbWV0aCA9IG1ldGg7CisrCXJldHVybiAxOworKwl9CisrCisrY29uc3Qg UkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuIGZp cHNfcmFuZF9tZXRoOworKwl9CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRo b2Qodm9pZCkKKysJeworKwlyZXR1cm4gRklQU19yYW5kX2dldF9tZXRob2QoKTsKKysJfQorKwor K3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpCisrCXsKKysJaWYgKGZpcHNfcmFuZF9tZXRoICYm IGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQorKwkJZmlwc19yYW5kX21ldGgtPmNsZWFudXAoKTsK KysJfQorKworK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9T SVpFX1QgbnVtKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19t b2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFRUQsIEZJ UFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChmaXBzX3Jh bmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c2VlZCkKKysJCWZpcHNfcmFuZF9tZXRoLT5zZWVk KGJ1ZixudW0pOworKwlyZXR1cm4gMTsKKysJfQorKworK3ZvaWQgRklQU19yYW5kX2FkZChjb25z dCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KQorKwl7CisrCWlmICghZmlwc19h cHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19SQU5EX0FERCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1 cm47CisrCQl9CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+YWRkKQor KwkJZmlwc19yYW5kX21ldGgtPmFkZChidWYsbnVtLGVudHJvcHkpOworKwl9CisrCisraW50IEZJ UFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKQor Kwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgp KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0JZVEVTLCBGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYg Zmlwc19yYW5kX21ldGgtPmJ5dGVzKQorKwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5ieXRlcyhi dWYsbnVtKTsKKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3BzZXVkb19ieXRl cyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBudW0pCisrCXsKKysJaWYgKCFmaXBzX2FwcHJvdmVk X3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJl dHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnBz ZXVkb3JhbmQpCisrCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPnBzZXVkb3JhbmQoYnVmLG51bSk7 CisrCXJldHVybiAtMTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpCisrCXsK KysJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCisr CQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTLCBGSVBTX1JfTk9OX0ZJUFNf TUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlw c19yYW5kX21ldGgtPnN0YXR1cykKKysJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKCk7 CisrCXJldHVybiAwOworKwl9CisrCisrLyogUmV0dXJuIGluc3RhbnRpYXRlZCBzdHJlbmd0aCBv ZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlzIGFuIGludGVybmFsCisrICogcGFyYW1ldGVyLiBGb3Ig WDkuMzEgUFJORyBpdCBpcyA4MCBiaXRzIChmcm9tIFNQODAwLTEzMSkuIEFueSBvdGhlcgorKyAq IHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92ZWQgYW5kIHJldHVybnMgMCBpbiBGSVBTIG1vZGUg YW5kIG1heGltdW0KKysgKiAyNTYgb3V0c2lkZSBGSVBTIG1vZGUuCisrICovCisrCisraW50IEZJ UFNfcmFuZF9zdHJlbmd0aCh2b2lkKQorKwl7CisrCWlmIChmaXBzX3JhbmRfYml0cykKKysJCXJl dHVybiBmaXBzX3JhbmRfYml0czsKKysJaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDEp CisrCQlyZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dldF9kZWZhdWx0X2RyYmco KSk7CisrCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDIpCisrCQlyZXR1cm4g ODA7CisrCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDApCisrCQl7CisrCQlp ZiAoRklQU19tb2R1bGVfbW9kZSgpKQorKwkJCXJldHVybiAwOworKwkJZWxzZQorKwkJCXJldHVy biAyNTY7CisrCQl9CisrCXJldHVybiAwOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAyLTA3IDEx OjA3OjAyLjU0ODM5Mzc2NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Zp cHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDgzOTM3NjQgKzAx MDAKK0BAIC0wLDAgKzEsMTgzIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysKKysKKysKKyt0eXBlZGVmIHN0cnVjdAorKwl7CisrCXVuc2lnbmVkIGNo YXIgRFRbMTZdOworKwl1bnNpZ25lZCBjaGFyIFZbMTZdOworKwl1bnNpZ25lZCBjaGFyIFJbMTZd OworKwl9IEFFU19QUk5HX1RWOworKworKy8qIFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFy ZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBSR05WUyBzcGVjICovCisrCisrc3RhdGljIHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZdID0KKysJCXsweGYzLDB4YjEsMHg2NiwweDZkLDB4MTMs MHg2MCwweDcyLDB4NDIsCisrCQkgMHhlZCwweDA2LDB4MWMsMHhhYiwweGI4LDB4ZDQsMHg2Miww eDAyfTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzEyOF90diA9IAorKwl7CisrCQkJCS8q IERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJ IDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmOX0sCisrCQkJCS8qIFYgKi8K KysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4 NTksMHg1MywweDFlLDB4ZDEsMHgzYiwweGIwLDB4YzAsMHg1NSwKKysJCSAweDg0LDB4NzksMHg2 NiwweDg1LDB4YzEsMHgyZiwweDc2LDB4NDF9CisrCX07CisrCisrc3RhdGljIHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml9rZXlbMjRdID0KKysJCXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMyww eDI1LDB4NmUsCisrCQkgMHg0NCwweDY0LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAor KwkJIDB4NGEsMHhmYiwweGNhLDB4ZWIsMHg0YywweDhiLDB4OTksMHgzYn07CisrCisrc3RhdGlj IEFFU19QUk5HX1RWIGFlc18xOTJfdHYgPSAKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2Ys MHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCww eGE0LDB4MjQsMHg3OCwweGYzLDB4NGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDE3LDB4MDcsMHhkNSwweDI4 LDB4MTksMHg3OSwweDFlLDB4ZWYsCisrCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYs MHhiNCwweDkzfQorKwl9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMy XSA9CisrCQl7MHg2ZCwweDE0LDB4MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAorKwkJIDB4 ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSwweDAzLDB4YjcsMHg5ZiwKKysJCSAweDBjLDB4YzcsMHgz ZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4YjUsCisrCQkgMHgyMSwweDA1LDB4OGMsMHg0ZiwweDMx LDB4N2EsMHg4MCwweGJifTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90diA9Cisr CXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIw LDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKKysJ CQkJLyogViAqLworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK KysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBS ICovCisrCQl7MHgzNSwweGM3LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAorKwkJIDB4 ODIsMHg3OSwweDk5LDB4ZmIsMHhkMCwweGIzLDB4M2IsMHg3Mn0KKysJfTsKKysKKyt2b2lkIEZJ UFNfY29ycnVwdF9ybmcoKQorKyAgICB7CisrICAgIGFlc18xOTJfdHYuVlswXSsrOworKyAgICB9 CisrCisrI2RlZmluZSBmaXBzX3g5MzFfdGVzdChrZXksIHR2KSBcCisrCWRvX3g5MzFfdGVzdChr ZXksIHNpemVvZiBrZXksICZ0dikKKysKKytzdGF0aWMgaW50IGRvX3g5MzFfdGVzdCh1bnNpZ25l ZCBjaGFyICprZXksIGludCBrZXlsZW4sCisrCQkJQUVTX1BSTkdfVFYgKnR2KQorKwl7CisrCXVu c2lnbmVkIGNoYXIgUlsxNl0sIFZbMTZdOworKwlpbnQgcnYgPSAxOworKwltZW1jcHkoViwgdHYt PlYsIHNpemVvZihWKSk7CisrCWlmICghRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pKQor KwkJcmV0dXJuIDA7CisrCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX1g5MzEsIGtl eWxlbiwgTlVMTCkpCisrCQlyZXR1cm4gMTsKKysJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBT X1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKKysJCVZbMF0rKzsKKysJRklQU194OTMxX3NlZWQo ViwgMTYpOworKwlGSVBTX3g5MzFfc2V0X2R0KHR2LT5EVCk7CisrCUZJUFNfeDkzMV9ieXRlcyhS LCAxNik7CisrCWlmIChtZW1jbXAoUiwgdHYtPlIsIDE2KSkKKysJCXsKKysJCWZpcHNfcG9zdF9m YWlsZWQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCk7CisrCQlydiA9IDA7CisrCQl9Cisr CWVsc2UgaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxM KSkKKysJCXJldHVybiAwOworKwlyZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVz dF94OTMxKCkKKysJeworKwlpbnQgcnYgPSAxOworKwlGSVBTX3g5MzFfcmVzZXQoKTsKKysJaWYg KCFGSVBTX3g5MzFfdGVzdF9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX1g5MzEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0K KysJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KSkKKysJCXJ2ID0g MDsKKysJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTkyX2tleSwgYWVzXzE5Ml90dikpCisrCQly diA9IDA7CisrCWlmICghZmlwc194OTMxX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18yNTZfdHYpKQor KwkJcnYgPSAwOworKwlGSVBTX3g5MzFfcmVzZXQoKTsKKysJaWYgKCFydikKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJcmV0 dXJuIHJ2OworKwl9CisrCisraW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpCisrCXsKKysJcmV0 dXJuIEZJUFNfc2VsZnRlc3RfeDkzMSgpOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCistLS0gb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3 OjAyLjU0ODM5Mzc2NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kdGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ4MzkzNzY0ICswMTAwCitAQCAt MCwwICsxLDI1MCBAQAorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlz IHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlv dW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0 dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMg bGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMg bG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRo aXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRj LiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisr ICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1l IGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNv biAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMg WW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNv ZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGlu IGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBh cyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMg Y2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1 cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3 aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAg ICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysg KiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdj cnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGli cmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0p LgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEg ZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBw bGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFN QUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFu eSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlz IGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJl CisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQor KyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxp Yi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5j bHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRc biIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNf dXRsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK3R5cGVkZWYgc3RydWN0Cisr CXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07CisrCXVu c2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdfTUNUOworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQorKwl7MHg5ZiwweDViLDB4NTEsMHgy MCwweDBiLDB4ZjMsMHgzNCwweGI1LAorKwkgMHhkOCwweDJiLDB4ZTgsMHhjMywweDcyLDB4NTUs MHhjOCwweDQ4fTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2 ID0geworKwkJCS8qIERUICovCisrCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4MjksMHgwMiwweGJh LDB4M2IsCisrCSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4YWN9LAorKwkJ CS8qIFYgKi8KKysJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcsMHg5NywKKysJ IDB4N2UsMHg3NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCisrCQkJLyogUiAqLwor Kwl7MHg0OCwweGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAorKwkgMHhlNCwweDU3 LDB4OTAsMHhkNSwweGMzLDB4ZmMsMHg5YiwweDczfQorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9CisrCXsweGI3LDB4NmMsMHgzNCwweGQx LDB4MDksMHg2NywweGFiLDB4NzMsCisrCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgsMHgxNiww eDBiLDB4OTEsCisrCSAweGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4OGF9Owor KworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7CisrCQkJLyog RFQgKi8KKysJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwKKysJIDB4 ODQsMHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCisrCQkJLyogViAqLworKwl7 MHhiNiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAorKwkgMHhkZCwweGM3LDB4 N2EsMHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKKysJCQkvKiBSICovCisrCXsweGZjLDB4ODUs MHg2MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCisrCSAweGRkLDB4ODYsMHgyMCwweDMyLDB4 OGEsMHgyOSwweDZmLDB4NDd9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X21jdF9rZXlbMzJdID0KKysJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4 ZjgsMHgzYSwKKysJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKKysJ IDB4YjgsMHg3ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKKysJIDB4ODYsMHgzMiww eGZjLDB4MWYsMHg1ZSwweDFkLDB4MWUsMHg1MH07CisrCisrc3RhdGljIGNvbnN0IEFFU19QUk5H X01DVCBhZXNfMjU2X21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHgzMSwweDZlLDB4MzUs MHg5YSwweGIxLDB4NDQsMHhmMCwweGVlLAorKwkgMHg2MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4 YTMsMHg5MiwweDRjfSwKKysJCQkvKiBWICovCisrCXsweDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIs MHgxZiwweDRkLDB4YTEsCisrCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4 Y2F9LAorKwkJCS8qIFIgKi8KKysJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQwLDB4Yjks MHhlMSwKKysJIDB4ZTcsMHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0KKyt9Owor KworK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikKKysgICAg eworKyAgICB3aGlsZShuLS0gPiAwKQorKwl7CisrCXByaW50ZigiICUwMngiLCpiKyspOworKwl9 CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJl c3VsdCxjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwKKysJCSAgICBpbnQgbikKKysgICAg eworKyAgICBpbnQgaTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQorKwlpZihyZXN1 bHRbaV0gIT0gZXhwZWN0ZWRbaV0pCisrCSAgICB7CisrCSAgICBwdXRzKCJSYW5kb20gdGVzdCBm YWlsZWQsIGdvdDoiKTsKKysJICAgIGR1bXAocmVzdWx0LG4pOworKwkgICAgcHV0cygiXG4gICAg ICAgICAgICAgICBleHBlY3RlZDoiKTsKKysJICAgIGR1bXAoZXhwZWN0ZWQsbik7CisrCSAgICBw dXRjaGFyKCdcbicpOworKwkgICAgRVhJVCgxKTsKKysJICAgIH0KKysgICAgfQorKworKworK3N0 YXRpYyB2b2lkIHJ1bl90ZXN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwK KysJCQkJCQkJY29uc3QgQUVTX1BSTkdfTUNUICp0dikKKysgICAgeworKyAgICB1bnNpZ25lZCBj aGFyIGJ1ZlsxNl0sIGR0WzE2XTsKKysgICAgaW50IGksIGo7CisrICAgIEZJUFNfeDkzMV9yZXNl dCgpOworKyAgICBGSVBTX3g5MzFfdGVzdF9tb2RlKCk7CisrICAgIEZJUFNfeDkzMV9zZXRfa2V5 KGtleSwga2V5bGVuKTsKKysgICAgRklQU194OTMxX3NlZWQodHYtPlYsIDE2KTsKKysgICAgbWVt Y3B5KGR0LCB0di0+RFQsIDE2KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCisr CXsKKysgICAgCUZJUFNfeDkzMV9zZXRfZHQoZHQpOworKwlGSVBTX3g5MzFfYnl0ZXMoYnVmLCAx Nik7CisrCS8qIEluY3JlbWVudCBEVCAqLworKwlmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCisr CQl7CisrCQlkdFtqXSsrOworKwkJaWYgKGR0W2pdKQorKwkJCWJyZWFrOworKwkJfQorKwl9Cisr CisrICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAxNik7CisrICAgIH0KKysKKytpbnQgbWFpbigpCisr CXsKKysJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKKysJ cHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNfMTkyX21j dF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIg ZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90 dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKKysJcmV0dXJuIDA7Cisr CX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMv Zmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMv Zmlwc19yc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMv Zmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ4MzkzNzY0ICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVz dC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ4MzkzNzY0ICswMTAwCitAQCAtMCwwICsxLDQ0NCBA QAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuW10gPQorKyJceDAwXHhCQlx4RjhceDJG XHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThceDcxIgorKyJceEY3 XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRc eEY1IgorKyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4NDhc eENFXHhFQlx4NkZceENEIgorKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4NDZc eDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgorKyJceDdGXHhBRlx4QjhceEUwXHhBM1x4REZc eEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgorKyJceDg0XHhFRVx4NkFc eDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5IgorKyJc eDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4OUFceDQxXHhGNlx4 QzFceDY4IgorKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhGOFx4 RTVceEZEXHgwOVx4MURceEJEIgorKyJceENCIjsKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRfcnNh OworKworK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQorKyAgICB7CisrICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKKysKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZFtdID0KKysiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJc eDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKKysiXHhGOFx4M0ZceDMxXHgyNVx4MUVc eDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKKysiXHhCMlx4OTRc eDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIK KysiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4 QzlceDNFXHhEQSIKKysiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4 MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKKysiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4 MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKKysiXHg5M1x4OTlceDI2XHhFRFx4 NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKKysiXHhBRlx4 OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhC MyIKKysiXHhDMSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Cisr Ilx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEEx XHhCNVx4NjAiCisrIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4 XHgxQVx4OUVceDNEXHg4NFx4RjYiCisrIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFF XHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCisrIlx4MkRceDVCXHgyNVx4MjFceDc2 XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCisrIlx4OTkiOwor KworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQorKyJceDAwXHhDOVx4N0Zc eEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgorKyJc eDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4 OEJceDlEIgorKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4 QTNceEI0XHgzMlx4MDRceEI1IgorKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4 QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgorKyJceDAzIjsKKysKKysgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KKysiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJB XHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKKysiXHhFQlx4MDdceERE XHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKKysi XHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVc eDlBXHgyRSIKKysiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4Qzlc eDNDXHgxRlx4NjdceEM5XHg4MSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGRtcTFbXSA9CisrIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3 XHhGOFx4NzhceDg2XHg0Q1x4QTkiCisrIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFD XHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCisrIlx4RjlceDgwXHgzRlx4OEZceDZG XHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCisrIlx4MUJceDk5 XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0Qi OworKyAgICAKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KKysiXHgw MFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0 XHgyMyIKKysiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdG XHhDRFx4MzlceEUyXHgxMSIKKysiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIx XHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKKysiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2 XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKKysiXHhGNyI7CisrCisr ICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKKysgICAgaWYg KGNvcnJ1cHRfcnNhKQorKwlCTl9zZXRfYml0KGtleS0+biwgMTAyNCk7CisrICAgIGtleS0+ZSA9 IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5LT5lKTsKKysgICAga2V5LT5kID0gQk5fYmlu MmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOworKyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwg c2l6ZW9mKHApLTEsIGtleS0+cCk7CisrICAgIGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2Yo cSktMSwga2V5LT5xKTsKKysgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihk bXAxKS0xLCBrZXktPmRtcDEpOworKyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6 ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7CisrICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1w LCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysK Kyt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfcnNhID0gMTsK KysgICAgfQorKworKy8qIEtub3duIEFuc3dlciBUZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBhYm92 ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZworKyAqIGthdF90YnMuCisrICovCisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9wZW5TU0wgRklQUyAxNDAtMiBQdWJs aWMgS2V5IFJTQSBLQVQiOworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff UFNTX1NIQTFbXSA9IHsKKysgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIsIDB4 OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCisrICAweDAxLCAweDFFLCAweDM3LCAw eDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAorKyAg MHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhFOCwgMHgwQywgMHhC NywgMHhGOCwgMHhEMywKKysgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUsIDB4 QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCisrICAweDdGLCAweDQ5LCAweEZCLCAw eDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3LAorKyAg MHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhFMywgMHg1RSwgMHgz RiwgMHg5QiwgMHhGNSwKKysgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4NzQsIDB4QzksIDB4 ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCisrICAweDBBLCAweEU5LCAweDhFLCAw eDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3LCAweDMxLAorKyAg MHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhFNiwgMHhEQiwgMHg5 RiwgMHhCQSwgMHhFOCwKKysgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4MDgsIDB4RUEsIDB4 RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCisrICAweDI2LCAweEM2LCAweDc5LCAw eEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKKysgIDB4MzksIDB4NEEsIDB4NkEsIDB4 MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgsIDB4QTcsCisrICAw eEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgyLCAweDk4LCAweDA4 LCAweDk1LCAweEZBLAorKyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2MSwgMHg4NywgMHgy MSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKKysgIDB4MzAsIDB4OUQsIDB4MEQsIDB4 NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMsIDB4ODksCisrICAw eDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2LCAweENDLCAweDg2 LCAweDA1LCAweEVFLAorKyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgw RCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKKysgIDB4MTUsIDB4NzgsIDB4NkIsIDB4 NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIsIDB4RDEsIDB4QjUsCisrICAw eDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQyLCAweEJELCAweEFBLCAweDM4 LCAweDI0LCAweDQ5LAorKyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5 MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKKysgIDB4QzgsIDB4NTIsIDB4RkEsIDB4 Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUsIDB4QzAsIDB4MDAsCisrICAw eDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMwCisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKKysgIDB4 NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEs IDB4RTMsIDB4ODksCisrICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1 LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAorKyAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0 QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKKysgIDB4 QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYs IDB4NzMsIDB4NEUsCisrICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhF LCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAorKyAgMHhBQiwgMHhGNSwgMHgwMSwgMHhE NiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKKysgIDB4 MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMs IDB4REEsIDB4QjYsCisrICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4 LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAorKyAgMHgyMSwgMHhCNywgMHg3RSwgMHhB RCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKKysgIDB4 NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDks IDB4QjksIDB4RjYsCisrICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJE LCAweDFDCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19T SEEzODRbXSA9IHsKKysgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4NDAs IDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCisrICAweEVDLCAweDFDLCAweEM0LCAweEM4 LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVFLAorKyAgMHg4 NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0NCwg MHg5QSwgMHhDRCwKKysgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4NzUs IDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCisrICAweDZGLCAweDAyLCAweEVGLCAweEMx LCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAweDZDLAorKyAgMHhC MiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwgMHhGMywgMHhBQywg MHg0RiwgMHhGQiwKKysgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQs IDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCisrICAweDNBLCAweEJFLCAweDg5LCAweDM4 LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAweDg5LAorKyAgMHg5 OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywgMHg4NywgMHgxRiwg MHhDQSwgMHg2RiwKKysgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4QUUs IDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCisrICAweDQ4LCAweDQ0LCAweEVFLCAweDFG LCAweDkwLCAweDE4LCAweDRCLCAweEYxCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKKysgIDB4MDcsIDB4MUUsIDB4RDgsIDB4RDUs IDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMsIDB4OEMsCisrICAweEM2 LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAweDhGLCAweDEyLCAw eDUzLCAweDlBLAorKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywg MHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKKysgIDB4NEIsIDB4RjMsIDB4NDYsIDB4OUIs IDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4MjMsIDB4MzksCisrICAweDAx LCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAweDY3LCAweDVGLCAw eEZFLCAweEQ3LAorKyAgMHg3QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwg MHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKKysgIDB4NTcsIDB4RTMsIDB4MEYsIDB4RTMs IDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4ODUsIDB4MTMsCisrICAweEM1 LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAweDlBLCAweDZBLCAw eDM5LCAweDYzLAorKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwg MHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKKysgIDB4NzYsIDB4RjIsIDB4MzIsIDB4MUIs IDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4QzIsIDB4ODgsCisrICAweDVD LCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKKysgIDB4NzEsIDB4RUUs IDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4 NEMsCisrICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAw eDYxLCAweDMzLCAweDhELCAweDlCLAorKyAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4Mywg MHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKKysgIDB4REMsIDB4MjIs IDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4 RjgsCisrICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAw eDg4LCAweDhCLCAweDhCLCAweEExLAorKyAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1Qiwg MHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKKysgIDB4QTksIDB4OUUs IDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4 NEUsCisrICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAw eDA0LCAweDQ0LCAweEU1LCAweDVGLAorKyAgMHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwg MHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKKysgIDB4NzIsIDB4MDUs IDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4 OTUsCisrICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTIyNFtdID0gewor KyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1RiwgMHg4QywgMHhCQiwg MHhCNywgMHgxNSwgMHhGOSwKKysgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4MzQs IDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCisrICAweDVCLCAweDU1LCAweDlB LCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAweEM1LCAweDg5LAor KyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgzMCwg MHgyQywgMHg5RSwgMHhDRCwKKysgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEsIDB4NkQsIDB4NDQs IDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCisrICAweEVFLCAweDFGLCAweDhE LCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAweEE5LCAweENDLAor KyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4NCwg MHgwMiwgMHhDNiwgMHgzQiwKKysgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQs IDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCisrICAweDU4LCAweDJFLCAweDA2 LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAweDY2LCAweEU2LCAweDM1LAor KyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3Nywg MHg4MiwgMHhFNiwgMHhEQywKKysgIDB4NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0Us IDB4MUUsIDB4OEQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff U0hBMjU2W10gPSB7CisrICAweDBELCAweDU1LCAweEUyLCAweEFBLCAweDgxLCAweERCLCAweDhF LCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAorKyAgMHhFNywgMHgzQiwgMHgxRCwgMHhB RiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwgMHgyMywKKysgIDB4 OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQs IDB4NkYsIDB4MzUsCisrICAweDk4LCAweDJELCAweDY5LCAweDg0LCAweEJGLCAweEQ5LCAweDhB LCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAorKyAgMHgyQywgMHg0NCwgMHg5QiwgMHg5 MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwgMHgxOCwKKysgIDB4 MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0Es IDB4OTEsIDB4MzAsCisrICAweEJFLCAweDIyLCAweEM3LCAweEQzLCAweEVDLCAweEMzLCAweDA5 LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAorKyAgMHg3QywgMHg4NSwgMHhCNCwgMHhC QywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKKysgIDB4 QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUs IDB4RDEsIDB4REEsCisrICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFCLCAweEI5LCAweEY3 LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAorKyAgMHhCRCwgMHg0NCwgMHg5NywgMHg2 MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKKysgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4 MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCisrICAweEQyLCAw eDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3 LCAweEM3LAorKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhB OSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKKysgIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4 QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCisrICAweDY1LCAw eDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2 LCAweENGLAorKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhF MiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKKysgIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4 NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMsCisrICAweEZGLCAw eDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhGLCAweDhCLCAweDlD LCAweENELAorKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhF QiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKKysgIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4 MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQsCisrICAweEJELCAw eDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCisrfTsKKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0geworKyAgMHg2OSwgMHg1Miwg MHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwgMHhD RiwKKysgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4 NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAweDE1LCAweEVBLCAweDVDLCAweEU1LCAweEU2LCAw eDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAorKyAgMHgwNCwgMHhDMSwg MHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1NCwgMHg5RiwgMHhE OCwKKysgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4 QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAweDgwLCAweEUyLCAweEJDLCAweERELCAweDY3LCAw eDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAweDZCLAorKyAgMHhBRiwgMHg2Miwg MHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgxRCwgMHg0NywgMHhF NiwKKysgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4 MTYsIDB4NjMsIDB4ODQsIDB4MDUsCisrICAweDZGLCAweDBFLCAweDJCLCAweDMxLCAweDlELCAw eEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAweDJELAorKyAgMHgzRSwgMHg2Miwg MHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5 MSwKKysgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKKyt9 OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7 CisrICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAweDgwLCAweEI2LCAweDdDLCAweDQy LCAweDQ1LCAweDRELCAweERGLAorKyAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhC NSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKKysgIDB4ODAsIDB4QTQsIDB4 RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMs CisrICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4LCAweDRELCAweDA0 LCAweEVFLCAweEE5LCAweDk3LAorKyAgMHg3MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywgMHhF MywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKKysgIDB4NTMsIDB4MTUsIDB4 RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTks CisrICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYzLCAweDI5LCAweDYz LCAweDBDLCAweDU5LCAweEQ3LAorKyAgMHg2RiwgMHg0QywgMHgzQywgMHgzNywgMHg1QiwgMHgz NywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKKysgIDB4NDgsIDB4QUYsIDB4 ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4NzYs CisrICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJBLCAweDMwLCAweDg0 LCAweDFDLCAweEIzLCAweDY3LAorKyAgMHhBMywgMHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwgMHg2 OCwgMHg3RCwgMHg0OQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JT QV9YOTMxX1NIQTI1NltdID0geworKyAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1 NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKKysgIDB4RTUsIDB4NTIsIDB4 MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQs CisrICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1 LCAweDk1LCAweDczLCAweENGLAorKyAgMHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1 RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKKysgIDB4QzYsIDB4NTMsIDB4 ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4NEIs CisrICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0 LCAweDM4LCAweDBFLCAweDk4LAorKyAgMHhBRCwgMHg0RSwgMHg0OSwgMHgyQywgMHhENywgMHg2 NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKKysgIDB4N0UsIDB4NzUsIDB4 ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4OEMs CisrICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1 LCAweEExLCAweDQyLCAweEJELAorKyAgMHgyMSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhE QiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKKysgIDB4RTMsIDB4RTIsIDB4 RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKKyt9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsKKysgIDB4NUMsIDB4N0QsIDB4 OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4N0Is CisrICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3 LCAweDM5LCAweDM3LCAweENCLAorKyAgMHhFNiwgMHg0RiwgMHg1RSwgMHgwQSwgMHgxMywgMHhF NCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhFMywKKysgIDB4RUYsIDB4NzgsIDB4 ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4RjYs CisrICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENGLCAweENBLCAweDk5 LCAweDY2LCAweEVFLCAweDMxLAorKyAgMHhEOCwgMHg2OSwgMHhFOSwgMHhBQiwgMHgxMywgMHgy NywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwKKysgIDB4M0UsIDB4OUMsIDB4 MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4Nzks CisrICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0 LCAweEQ1LCAweDdDLCAweEZGLAorKyAgMHgwRSwgMHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwgMHgz NywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwKKysgIDB4RUYsIDB4MDEsIDB4 RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQs CisrICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1LCAweDI4CisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7 CisrICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2LCAweENCLCAweDY0 LCAweDNBLCAweEMxLCAweDYzLAorKyAgMHhGQywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5QiwgMHg3 OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKKysgIDB4RTcsIDB4NDcsIDB4 MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcs CisrICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2LCAweDBGLCAweDVF LCAweEY5LCAweDE0LCAweDI4LAorKyAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwgMHg0 RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKKysgIDB4NkUsIDB4MkIsIDB4 NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4QUYs CisrICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0LCAweDcyLCAweDEw LCAweEUwLCAweEY2LCAweEQwLAorKyAgMHhDRSwgMHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwgMHg4 OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKKysgIDB4OUYsIDB4MDksIDB4 Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4N0Ms CisrICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDkyLCAweDQyLCAweDEx LCAweDMwLCAweDcxLCAweDFCLAorKyAgMHg2MCwgMHg4MywgMHgxOCwgMHg4OCwgMHhBMywgMHhG NSwgMHg1OSwgMHhDMworK307CisrCisrCisraW50IEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJewor KwlpbnQgcmV0ID0gMDsKKysJUlNBICprZXk7CisrCUVWUF9QS0VZICpwayA9IE5VTEw7CisrCisr CWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlzZXRyc2FrZXko a2V5KTsKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOwor KworKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOworKworKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0 X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEExIFBLQ1MjMSIpKQorKwkJZ290byBl cnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hBMjI0 KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQki UlNBIFNIQTIyNCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JT QV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyNTYgUEtDUyMxIikpCisrCQln b3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9T SEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisr CQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlr YXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTUxMiBQS0NTIzEiKSkK KysJCWdvdG8gZXJyOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMSwgc2l6ZW9m KGthdF9SU0FfUFNTX1NIQTEpLAorKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BTUywKKysJCQkJIlJTQSBTSEExIFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJ CQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyMjQpLAorKwkJCQlF VlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTIyNCBQ U1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjU2LCBz aXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKKysJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyNTYgUFNTIikpCisrCQlnb3RvIGVycjsKKysJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTM4 NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJS U0EgU0hBMzg0IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BT U19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLAorKwkJCQlFVlBfc2hhNTEyKCks IEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTUxMiBQU1MiKSkKKysJCWdv dG8gZXJyOworKworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMSwgc2l6ZW9mKGth dF9SU0FfWDkzMV9TSEExKSwKKysJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEsCisrCQkJIlJTQSBTSEExIFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwkvKiBOQjogU0hBMjI0 IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NI QTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAorKwkJCUVWUF9zaGEyNTYoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMjU2IFg5MzEiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9Y OTMxX1NIQTM4NCksCisrCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEs CisrCQkJIlJTQSBTSEEzODQgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWth dF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEyKSwKKysJCQlFVlBf c2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTUxMiBYOTMx IikpCisrCQlnb3RvIGVycjsKKysKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlpZiAocGsp CisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJZWxzZSBpZiAoa2V5KQorKwkJUlNBX2ZyZWUoa2V5 KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICov CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFn LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMK Ky0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlw cwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0OTM5Mzc3MyArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0 OTM5Mzc3MyArMDEwMAorQEAgLTAsMCArMSwyODIgQEAKKysvKiBjcnlwdG8vcnNhL3JzYV9nZW4u YyAqLworKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNv ZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2Ug aXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFz IHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBp cyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwor KyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJp YnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsg bm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVk ZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdo dCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywg YW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5v dCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVj dCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0 aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGlu IHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAq IGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBw YWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl CisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJp YyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFw aGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAq ICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQu IElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2 ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24g Y29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMg WU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAq IAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNh bGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fu bm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29w aWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNs dWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlv Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKworK2V4dGVybiBpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpOworKyNlbmRpZgor KworKy8qIFg5LjMxIFJTQSBrZXkgZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLworKworK2lu dCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJ R05VTSAqcTEsIEJJR05VTSAqcTIsCisrCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05V TSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBC SUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dF TkNCICpjYikKKysJeworKwlCSUdOVU0gKnIwPU5VTEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5V TEw7CisrCUJOX0NUWCAqY3R4PU5VTEwsKmN0eDI9TlVMTDsKKysKKysJaWYgKCFyc2EpIAorKwkJ Z290byBlcnI7CisrCisrCWN0eCA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgpIAorKwkJZ290 byBlcnI7CisrCUJOX0NUWF9zdGFydChjdHgpOworKworKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsK KysJcjEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIyID0gQk5fQ1RYX2dldChjdHgpOworKwlyMyA9 IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJaWYgKHIzID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJ aWYgKCFyc2EtPmUpCisrCQl7CisrCQlyc2EtPmUgPSBCTl9kdXAoZSk7CisrCQlpZiAoIXJzYS0+ ZSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysJZWxzZQorKwkJZSA9IHJzYS0+ZTsKKysKKysJLyog SWYgbm90IGFsbCBwYXJhbWV0ZXJzIHByZXNlbnQgb25seSBjYWxjdWxhdGUgd2hhdCB3ZSBjYW4u CisrCSAqIFRoaXMgYWxsb3dzIHRlc3QgcHJvZ3JhbXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJh bWV0ZXJzLgorKwkgKi8KKysKKysJaWYgKFhwICYmICFyc2EtPnApCisrCQl7CisrCQlyc2EtPnAg PSBCTl9uZXcoKTsKKysJCWlmICghcnNhLT5wKQorKwkJCWdvdG8gZXJyOworKworKwkJaWYgKCFC Tl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnAsIHAxLCBwMiwKKysJCQkJCVhwLCBYcDEsIFhw MiwgZSwgY3R4LCBjYikpCisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmIChYcSAmJiAhcnNh LT5xKQorKwkJeworKwkJcnNhLT5xID0gQk5fbmV3KCk7CisrCQlpZiAoIXJzYS0+cSkKKysJCQln b3RvIGVycjsKKysJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIs CisrCQkJCQlYcSwgWHExLCBYcTIsIGUsIGN0eCwgY2IpKQorKwkJCWdvdG8gZXJyOworKwkJfQor KworKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOwor KwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCXJldHVybiAyOworKwkJfQorKworKwkvKiBTaW5jZSBi b3RoIHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cgY2FsY3VsYXRlIGFsbCByZW1haW5pbmcgCisr CSAqIGNvbXBvbmVudHMuCisrCSAqLworKworKwkvKiBjYWxjdWxhdGUgbiAqLworKwlyc2EtPm49 Qk5fbmV3KCk7CisrCWlmIChyc2EtPm4gPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIUJO X211bChyc2EtPm4scnNhLT5wLHJzYS0+cSxjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNh bGN1bGF0ZSBkICovCisrCWlmICghQk5fc3ViKHIxLHJzYS0+cCxCTl92YWx1ZV9vbmUoKSkpCisr CQlnb3RvIGVycjsJLyogcC0xICovCisrCWlmICghQk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9v bmUoKSkpCisrCQlnb3RvIGVycjsJLyogcS0xICovCisrCWlmICghQk5fbXVsKHIwLHIxLHIyLGN0 eCkpCisrCQlnb3RvIGVycjsJLyogKHAtMSkocS0xKSAqLworKworKwlpZiAoIUJOX2djZChyMywg cjEsIHIyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fZGl2KHIwLCBOVUxMLCBy MCwgcjMsIGN0eCkpCisrCQlnb3RvIGVycjsJLyogTENNKChwLTEpKHEtMSkpICovCisrCisrCWN0 eDIgPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4MikKKysJCWdvdG8gZXJyOworKworKwlyc2Et PmQ9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPmUscjAsY3R4Mik7CS8qIGQgKi8KKysJaWYgKHJz YS0+ZCA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0x KSAqLworKwlyc2EtPmRtcDE9Qk5fbmV3KCk7CisrCWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKKysJ CWdvdG8gZXJyOworKwlpZiAoIUJOX21vZChyc2EtPmRtcDEscnNhLT5kLHIxLGN0eCkpCisrCQln b3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCisrCXJzYS0+ZG1xMT1C Tl9uZXcoKTsKKysJaWYgKHJzYS0+ZG1xMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICgh Qk5fbW9kKHJzYS0+ZG1xMSxyc2EtPmQscjIsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBj YWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCisrCXJzYS0+aXFtcD1CTl9tb2RfaW52ZXJz ZShOVUxMLHJzYS0+cSxyc2EtPnAsY3R4Mik7CisrCisrCWVycjoKKysJaWYgKGN0eCkKKysJCXsK KysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCWlmIChj dHgyKQorKwkJQk5fQ1RYX2ZyZWUoY3R4Mik7CisrCS8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxs cyBzdWNjZXNzZnVsICovCisrCWlmIChyc2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCisrCQlyZXR1 cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KKysKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVf a2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2Ip CisrCXsKKysJaW50IG9rID0gMDsKKysJQklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7Cisr CUJOX0NUWCAqY3R4ID0gTlVMTDsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBT X21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykgJiYgCisr CQkoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCSAgICB7Cisr CSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9U T09fU0hPUlQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCisrCWlmIChiaXRzICYgMHhm ZikKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9F WCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQor KworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihG SVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxF RCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysjZW5kaWYKKysKKysJY3R4ID0gQk5fQ1RY X25ldygpOworKwlpZiAoIWN0eCkKKysJCWdvdG8gZXJyb3I7CisrCisrCUJOX0NUWF9zdGFydChj dHgpOworKwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7Cisr CWlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQorKwkJZ290byBl cnJvcjsKKysKKysJcnNhLT5wID0gQk5fbmV3KCk7CisrCXJzYS0+cSA9IEJOX25ldygpOworKwlp ZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQorKwkJZ290byBlcnJvcjsKKysKKysJLyogR2VuZXJhdGUg dHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLworKworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJp bWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKKysJCQkJCWUsIGN0eCwg Y2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4 KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCisrCQkJCQllLCBjdHgsIGNiKSkK KysJCWdvdG8gZXJyb3I7CisrCisrCS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxp ZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQorKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVu dHMuCisrCSAqLworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsCisrCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUs IGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZighZmlw c19jaGVja19yc2EocnNhKSkKKysJICAgIGdvdG8gZXJyb3I7CisrI2VuZGlmCisrCisrCW9rID0g MTsKKysKKysJZXJyb3I6CisrCWlmIChjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7Cisr CQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKworKwlpZiAob2spCisrCQlyZXR1cm4gMTsKKysK KysJcmV0dXJuIDA7CisrCisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ5Mzkz NzczICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3NoYV9z ZWxmdGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ5MzkzNzczICswMTAwCitAQCAtMCwwICsx LDE0MCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytz dGF0aWMgY29uc3QgY2hhciB0ZXN0W11bNjBdPQorKyAgICB7CisrICAgICIiLAorKyAgICAiYWJj IiwKKysgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1u b21ub3Bub3BxIgorKyAgICB9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtd W1NIQV9ESUdFU1RfTEVOR1RIXT0KKysgICAgeworKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4ZWUs MHg1ZSwweDZiLDB4NGIsMHgwZCwweDMyLDB4NTUsCisrICAgICAgMHhiZiwweGVmLDB4OTUsMHg2 MCwweDE4LDB4OTAsMHhhZiwweGQ4LDB4MDcsMHgwOSB9LAorKyAgICB7IDB4YTksMHg5OSwweDNl LDB4MzYsMHg0NywweDA2LDB4ODEsMHg2YSwweGJhLDB4M2UsCisrICAgICAgMHgyNSwweDcxLDB4 NzgsMHg1MCwweGMyLDB4NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9LAorKyAgICB7IDB4ODQsMHg5 OCwweDNlLDB4NDQsMHgxYywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCisrICAgICAgMHg0YSww eGExLDB4ZjksMHg1MSwweDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAorKyAgICB9Owor KworK3N0YXRpYyBpbnQgY29ycnVwdF9zaGE7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgp CisrICAgIHsKKysgICAgY29ycnVwdF9zaGEgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2Vs ZnRlc3Rfc2hhMSgpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihuPTAgOyBuPHNp emVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyArK24pCisrCXsKKysJdW5zaWduZWQgY2hhciBt ZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrCUVWUF9EaWdlc3QodGVzdFtuXSxzdHJsZW4odGVz dFtuXSkrY29ycnVwdF9zaGEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOworKwlpZihtZW1j bXAobWQscmV0W25dLHNpemVvZiBtZCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4g MDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIG1zZ19zaGEyNTZbXSA9IHsgMHhmYSwgMHg0OCwgMHg1OSwgMHgyYSwg MHhlMSwgMHhhZSwgMHgxZiwgMHgzMCwKKysJCQkJCSAgICAweGZjIH07Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTI1NltdID0geyAweGY3LCAweDI2LCAweGQ4LCAweDk4LCAw eDQ3LCAweDkxLCAweDY4LCAweDViLAorKwkJCQkJICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4NTgs IDB4YmIsIDB4NzUsIDB4YmYsIDB4MDEsCisrCQkJCQkgICAgMHgxNywgMHgwYywgMHg4NCwgMHgw MCwgMHgwMSwgMHg3YSwgMHg5NCwgMHg4MywKKysJCQkJCSAgICAweGYzLCAweDBiLCAweDE1LCAw eDg0LCAweDRiLCAweDY5LCAweDg4LCAweDhhIH07CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgbXNnX3NoYTUxMltdID0geyAweDM3LCAweGQxLCAweDM1LCAweDlkLCAweDE4LCAweDQx LCAweGU5LCAweGI3LAorKwkJCQkJICAgIDB4NmQsIDB4OWEsIDB4MTMsIDB4ZGEsIDB4NWYsIDB4 ZjMsIDB4YmQgfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhNTEyW10gPSB7 IDB4MTEsIDB4MTMsIDB4YzQsIDB4MTksIDB4ZWQsIDB4MmIsIDB4MWQsIDB4MTYsCisrCQkJCQkg ICAgMHgxMSwgMHhlYiwgMHg5YiwgMHhiZSwgMHhmMCwgMHg3ZiwgMHhjZiwgMHg0NCwKKysJCQkJ CSAgICAweDhiLCAweGQ3LCAweDU3LCAweGJkLCAweDhkLCAweGE5LCAweDI1LCAweGIwLAorKwkJ CQkJICAgIDB4NDcsIDB4MjUsIDB4ZDYsIDB4NmMsIDB4OWEsIDB4NTQsIDB4N2YsIDB4OGYsCisr CQkJCQkgICAgMHgwYiwgMHg1MywgMHgxYSwgMHgxMCwgMHg2OCwgMHgzMiwgMHgwMywgMHgzOCwK KysJCQkJCSAgICAweDgyLCAweGM0LCAweDg3LCAweGM0LCAweGVhLCAweDBlLCAweGQxLCAweDA0 LAorKwkJCQkJICAgIDB4YTksIDB4OTgsIDB4YzEsIDB4MDUsIDB4YTMsIDB4ZjMsIDB4ZjgsIDB4 YjEsCisrCQkJCQkgICAgMHhhZiwgMHhiYywgMHhkOSwgMHg3OCwgMHg3ZSwgMHhlZSwgMHgzZCwg MHg0MyB9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCkKKysJeworKwl1bnNpZ25l ZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysJRVZQX0RpZ2VzdChtc2dfc2hh MjU2LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpOwor KwlpZihtZW1jbXAoZGlnX3NoYTI1NiwgbWQsIHNpemVvZihkaWdfc2hhMjU2KSkpCisrCQl7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK KysJCXJldHVybiAwOworKwkJfQorKworKwlFVlBfRGlnZXN0KG1zZ19zaGE1MTIsIHNpemVvZiht c2dfc2hhNTEyKSwgbWQsIE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChk aWdfc2hhNTEyLCBtZCwgc2l6ZW9mKGRpZ19zaGE1MTIpKSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7 CisrCQl9CisrCisrCXJldHVybiAxOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMKKy0tLSBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlw cwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0OTM5Mzc3MyArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwkyMDEyLTAyLTA3IDExOjA3 OjAyLjU0OTM5Mzc3MyArMDEwMAorQEAgLTAsMCArMSwxODAgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKwor KyNpZm5kZWYgRklQU0NBTklTVEVSX08KKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQoKSB7IHJl dHVybiAwOyB9Cisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KKyt2b2lkIE9QRU5TU0xf Y2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9CisrI2VuZGlmCisrCisrI2lmCWRlZmluZWQo X19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBc CisrCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisrCWRlZmluZWQoX194ODZfNjQpIHx8IGRlZmlu ZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpCisr CisrdW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKKysjZW5kaWYKKysKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1Nl9DVFggKm1k X2N0eCxTSEEyNTZfQ1RYICpvX2N0eCwKKysJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKKysgICAg eworKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOworKyAgICBpbnQgaTsKKysgICAgdW5zaWdu ZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOworKyAgICB1bnNpZ25lZCBjaGFyIHBh ZFtITUFDX01BWF9NRF9DQkxPQ0tdOworKworKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKKysJ eworKwlTSEEyNTZfSW5pdChtZF9jdHgpOworKwlTSEEyNTZfVXBkYXRlKG1kX2N0eCxrZXksbGVu KTsKKysJU0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7CisrCWxlbj1TSEEyNTZfRElHRVNUX0xF TkdUSDsKKysJfQorKyAgICBlbHNlCisrCW1lbWNweShrZXltZCxrZXksbGVuKTsKKysgICAgbWVt c2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7CisrCisrICAgIGZv cihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQorKwlwYWRbaV09MHgzNl5rZXlt ZFtpXTsKKysgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShtZF9j dHgscGFkLFNIQTI1Nl9DQkxPQ0spOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01E X0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4NWNea2V5bWRbaV07CisrICAgIFNIQTI1Nl9Jbml0 KG9fY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7Cisr ICAgIH0KKysKKytzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNIQTI1 Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKKysgICAgeworKyAgICB1bnNpZ25lZCBj aGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCisrICAgIFNIQTI1Nl9GaW5hbChidWYs bWRfY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7CisrICAg IFNIQTI1Nl9GaW5hbChtZCxvX2N0eCk7CisrICAgIH0KKysKKysjZW5kaWYKKysKKytpbnQgbWFp bihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysg ICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsK KysgICAgaW50IG4sYmluYXJ5PTA7CisrCisrICAgIGlmKGFyZ2MgPCAyKQorKwl7CisrCWZwcmlu dGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysK KysgICAgbj0xOworKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5IikpCisrCXsKKysJ bisrOworKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KKysJfQor KworKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKKysJeworKwlGSUxFICpmPWZvcGVuKGFyZ3Zb bl0sInJiIik7CisrCVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OworKwl1bnNpZ25lZCBjaGFyIG1k W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysJaW50IGk7CisrCisrCWlmKCFmKQorKwkgICAgewor KwkgICAgcGVycm9yKGFyZ3Zbbl0pOworKwkgICAgZXhpdCgyKTsKKysJICAgIH0KKysKKysJaG1h Y19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7CisrCWZvciggOyA7ICkKKysJICAgIHsKKysJICAg IGNoYXIgYnVmWzEwMjRdOworKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1Zixm KTsKKysKKysJICAgIGlmKGwgPT0gMCkKKysJCXsKKysJCWlmKGZlcnJvcihmKSkKKysJCSAgICB7 CisrCQkgICAgcGVycm9yKGFyZ3Zbbl0pOworKwkJICAgIGV4aXQoMyk7CisrCQkgICAgfQorKwkJ ZWxzZQorKwkJICAgIGJyZWFrOworKwkJfQorKwkgICAgU0hBMjU2X1VwZGF0ZSgmbWRfY3R4LGJ1 ZixsKTsKKysJICAgIH0KKysJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7CisrCisrCWlm IChiaW5hcnkpCisrCSAgICB7CisrCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJR0VTVF9MRU5HVEgs MSxzdGRvdXQpOworKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KKysJ ICAgIH0KKysKKysvKglwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7ICovCisrCWZv cihpPTAgOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEggOyArK2kpCisrCSAgICBwcmludGYoIiUw MngiLG1kW2ldKTsKKysJcHJpbnRmKCJcbiIpOworKwl9CisrI2VuZGlmCisrICAgIHJldHVybiAw OworKyAgICB9CisrCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBz L2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9m aXBzX3Rlc3Rfc3VpdGUuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlw c190ZXN0X3N1aXRlLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0OTM5Mzc3MyArMDEwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMJMjAx Mi0wMi0wNyAxMTowNzowMi41NDkzOTM3NzMgKzAxMDAKK0BAIC0wLDAgKzEsNTg4IEBACisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKgorKyAqIFRoaXMgY29tbWFuZCBpcyBpbnRl bmRlZCBhcyBhIHRlc3QgZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGluZworKyAqIGxhYiBw ZXJmb3JtaW5nIEZJUFMtMTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBv ZiB0aGUKKysgKiBPcGVuU1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9mIGNvbW1v biBjcnlwdG9ncmFwaGljCisrICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxmIHRlc3QgaXMg ZGVtb25zdHJhdGVkIGJ5IGRlbGliZXJhdGVseQorKyAqIHBvaW50aW5nIHRvIGFuIGludmFsaWQg ZXhlY3V0YWJsZSBoYXNoCisrICoKKysgKiBDb250cmlidXRlZCBieSBTdGV2ZSBNYXJxdWVzcy4K KysgKgorKyAqLworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysj aW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxp Yi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK KysgICAgeworKyAgICBwcmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigw KTsKKysgICAgfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNs dWRlICJmaXBzX3V0bC5oIgorKworKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBw bGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKKysqLwor K3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1 bnNpZ25lZCBjaGFyIHBsdG1wWzE2XTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFsxNl07CisrCXVu c2lnbmVkIGNoYXIga2V5WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQs MTUsMTZ9OworKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7 CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJ aWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwg TlVMTCwgMSkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBw bGFpbnRleHQsIDE2KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4 X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lw aGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYpOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRl eHQsIDE2KSkKKysJCWdvdG8gZXJyOworKwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJf Q1RYX2NsZWFudXAoJmN0eCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IEZJ UFNfZGVzM190ZXN0KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIg cGx0bXBbOF07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbOF07CisrICAgIAl1bnNpZ25lZCBjaGFy IGtleVtdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwK KysJCSAgICAgICAgICAgICAgMTksMjAsMjEsMjIsMjMsMjR9OworKyAgICAJdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycg fTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwor KwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtl eSwgTlVMTCwgMSkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1w LCBwbGFpbnRleHQsIDgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19l ZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBf Q2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgOCk7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWlu dGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJcmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVS X0NUWF9jbGVhbnVwKCZjdHgpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrLyoKKysgKiBEU0E6 IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCisrICovCisr c3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGludCBiYWQpCisrICAgIHsKKysgICAgRFNBICpkc2Eg PSBOVUxMOworKyAgICBFVlBfUEtFWSBwazsKKysgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAi ZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOworKyAgICB1bnNpZ25l ZCBpbnQgc2xlbjsKKysgICAgaW50IHIgPSAwOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrCisr ICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAg ICBkc2EgPSBEU0FfbmV3KCk7CisrICAgIGlmICghZHNhKQorKwlnb3RvIGVuZDsKKysgICAgaWYg KCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5VTEwsTlVMTCxO VUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwln b3RvIGVuZDsKKysgICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwg MSk7CisrCisrICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrICAgIHBrLnBrZXkuZHNhID0g ZHNhOworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVM TCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBz aXplb2YoZGdzdCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgm bWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJZ290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1Zl cmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAg aWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJ Z290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBr KTsKKysgICAgZW5kOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAo ZHNhKQorKyAgCSAgRFNBX2ZyZWUoZHNhKTsKKysgICAgaWYgKHIgIT0gMSkKKysJcmV0dXJuIDA7 CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyoKKysgKiBSU0E6IGdlbmVyYXRlIGtleXMg YW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBT X3JzYV90ZXN0KGludCBiYWQpCisrICAgIHsKKysgICAgUlNBICprZXk7CisrICAgIHVuc2lnbmVk IGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFy IGJ1ZlsyNTZdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgQklHTlVNICpibjsKKysg ICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSBwazsKKysgICAgaW50IHIgPSAwOwor KworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsK KysgICAga2V5ID0gUlNBX25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAgICBpZiAoIWtl eSB8fCAhYm4pCisrCXJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAg ICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1cm4g MDsKKysgICAgQk5fZnJlZShibik7CisrICAgIGlmIChiYWQpCisrCSAgICBCTl9hZGRfd29yZChr ZXktPm4sIDEpOworKworKyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOworKyAgICBway5wa2V5 LnJzYSA9IGtleTsKKysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGEx KCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwg aW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAg IGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJZ290byBlbmQ7 CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwp KQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9w dGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVW UF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6CisrICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChrZXkpCisrICAJICAgIFJTQV9mcmVl KGtleSk7CisrICAgIGlmIChyICE9IDEpCisrCXJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysg ICAgfQorKworKy8qIFNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytz dGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGRp Z2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQorKyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAw eDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAweDM4LCAweDBj LCAweDhiLCAweDFlLCAweDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07CisrICAgIHVuc2ln bmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRb U0hBX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYg KCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5V TEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisr ICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEEyNTY6 IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3du CisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hh MjU2X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1Nl9ESUdF U1RfTEVOR1RIXSA9CisrCXsweGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUs IDB4MTcsIDB4OWIsIDB4OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCisr CSAweDYsIDB4ZWMsIDB4OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4 NjQsIDB4MjIsIDB4ZTYsIDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9OworKyAgICB1bnNpZ25lZCBj aGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1 Nl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICgh RVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5V TEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisr ICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEE1MTI6 IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3du CisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hh NTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdF U1RfTEVOR1RIXSA9CisrCXsweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0LCAweDc4 LCAweDg4LCAweGRmLCAweDg4LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAor KwkgMHgxNiwgMHgxZiwgMHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywg MHg5OSwgMHhiMiwgMHhkMCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKKysJIDB4NDUsIDB4ZDIs IDB4NmMsIDB4NGYsIDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsIDB4 MjQsIDB4YjEsIDB4ZDksIDB4NDAsIDB4MjIsCisrCSAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAw eDIyLCAweDlkLCAweDI3LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAweDJkLCAweDQy LCAweDFkLCAweGEzfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsK KysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07CisrCisrICAg IEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIp IC0gMSxtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmICht ZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJl dHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3du IGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJl Y3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKKysgICAgewor KyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBj aGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9N QVhfTURfU0laRV0gPQorKwl7MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhl ZCwgMHhkZCwgMHgwYSwgMHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwK KysJIDB4YjIsIDB4ZmIsIDB4ZWMsIDB4YzZ9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtF VlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJf Y2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNpemVvZihrZXkp LTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1j bXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7 CisrICAgIH0KKysKKysvKiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdl c3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhh c2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkKKysgICAgeworKyAg ICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFy IGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhf TURfU0laRV0gPQorKwl7MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4Nywg MHgwZiwgMHg3NSwgMHhmZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKKysJ IDB4ZTUsIDB4NjIsIDB4NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4 MzMsIDB4M2EsIDB4MTl9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJ WkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXpl b2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2 YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQor KworKy8qIEhNQUMtU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBh bmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisr c3RhdGljIGludCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVk IGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJT YW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9 CisrCXsweGU5LCAweDE3LCAweGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQy LCAweDMwLCAweDM2LCAweDAyLCAweGY1LCAweDcyLCAweDMzLCAweDg3LAorKwkgMHg5ZiwgMHhj NiwgMHg2ZSwgMHg3YiwgMHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwg MHg1MSwgMHhmZiwgMHhkYSwgMHgyNCwgMHhmNH07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0 W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVS Ul9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtleSxzaXplb2Yo a2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAo bWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVy biAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24g ZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVj dCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCisrICAgIHsK KysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQg Y2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBf TUFYX01EX1NJWkVdID0KKysJezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4 ZTMsIDB4MzEsIDB4YjYsIDB4NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAs CisrCSAweGUyLCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgx LCAweDJhLCAweDFiLCAweGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAorKwkgMHhmMywgMHg5 MSwgMHgzNSwgMHgxMSwgMHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwgMHhjMywg MHhmMywgMHhiOCwgMHg5YiwgMHg4OCwgMHgxY307CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0 W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVS Ul9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtleSxzaXplb2Yo a2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAo bWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVy biAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24g ZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVj dCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpCisrICAgIHsK KysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQg Y2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBf TUFYX01EX1NJWkVdID0KKysJezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4 N2YsIDB4OWEsIDB4MjMsIDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYs CisrCSAweGY3LCAweGQxLCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2 LCAweDNiLCAweGMxLCAweGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAorKwkgMHhkNywgMHg3 OSwgMHgwYSwgMHhhNSwgMHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1Miwg MHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5YywKKysJIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQs IDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4YTYsIDB4 ZDksIDB4MmEsIDB4NTN9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJ WkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXpl b2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2 YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQor KworKworKy8qIERIOiBnZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycworKyovCisrc3RhdGljIGlu dCBkaF90ZXN0KCkKKysgICAgeworKyAgICBESCAqZGg7CisrICAgIEVSUl9jbGVhcl9lcnJvcigp OworKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7CisrICAgIGlmICghZGgpCisrCXJldHVybiAwOwor KyAgICBpZiAoIURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5VTEwpKQor KwlyZXR1cm4gMDsKKysgICAgRklQU19kaF9mcmVlKGRoKTsKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKysvKiBaZXJvaXplCisrKi8KKytzdGF0aWMgaW50IFplcm9pemUoKQorKyAgICB7Cisr ICAgIFJTQSAqa2V5OworKyAgICBCSUdOVU0gKmJuOworKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJr ZXlbMTZdID0gCisrCXsgMHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywg MHhhZiwgMHg2ZSwgMHg0NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9Owor KyAgICBpbnQgaSwgbjsKKysKKysgICAga2V5ID0gRklQU19yc2FfbmV3KCk7CisrICAgIGJuID0g Qk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysJcmV0dXJuIDA7CisrICAgIEJOX3Nl dF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEw MjQsYm4sTlVMTCkpCisrCXJldHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsKKysgICAgCisrICAg IG4gPSBCTl9udW1fYnl0ZXMoa2V5LT5kKTsKKysgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5 dGUgUlNBIHByaXZhdGUga2V5XG4iLCBuKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUg b3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKyAg ICBCTl9yYW5kKGtleS0+ZCxuKjgsLTEsMCk7CisrICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIg b3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKwor KyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0 Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUw MngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysgICAgUkFORF9ieXRl cyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7CisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBr ZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IoaSA9IDA7IGkgPCBzaXpl b2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7CisrICAgICAgICBw cmludGYoIlxuIik7CisrCisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrc3RhdGljIGludCBF cnJvcjsKKytjb25zdCBjaGFyICogRmFpbChjb25zdCBjaGFyICptc2cpCisrICAgIHsKKysgICAg ZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgIEVycm9yKys7CisrICAgIHJldHVybiBtc2c7IAorKyAg ICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysKKysgICAg aW50IGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7 CisrICAgIGludCBiYWRfcnNhID0gMCwgYmFkX2RzYSA9IDA7CisrICAgIGludCBkb19ybmdfc3Rp Y2sgPSAwOworKyAgICBpbnQgbm9fZXhpdCA9IDA7CisrCisrICAgIHByaW50ZigiXHRGSVBTLW1v ZGUgdGVzdCBhcHBsaWNhdGlvblxuXG4iKTsKKysKKysgICAgLyogTG9hZCBlbnRyb3B5IGZyb20g ZXh0ZXJuYWwgZmlsZSwgaWYgYW55ICovCisrICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAy NCk7CisrCisrICAgIGlmIChhcmd2WzFdKSB7CisrICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRl c3RzICovCisrICAgICAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKKysgICAgICAg ICAgICBGSVBTX2NvcnJ1cHRfYWVzKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlw dGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRlcyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3Jy dXB0X2RlcygpOworKyAgICAgICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNy eXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFz dHJjbXAoYXJndlsxXSwgImRzYSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgp OworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUg dmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9y c2EoKTsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0 dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5IikpIHsKKysgICAgICAgICAgICBwcmludGYo IlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0 ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9yc2EgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7Cisr ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7CisrCSAg ICBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAg ICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9u IHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoYXJndlsxXSwgImRzYWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdl bmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxu Iik7CisrCSAgICBiYWRfZHNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBl bHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVw dF9kc2Ffa2V5Z2VuID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50 ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1 cHRlZCBrZXlnZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0s ICJzaGExIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOworKyAgICAgICAg ICAgIHByaW50ZigiU0hBLTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKwl9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZyIpKSB7CisrCSAgICBGSVBTX2NvcnJ1cHRfcm5n KCk7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgeworKwkgICAg ZG9fcm5nX3N0aWNrID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKwkgICAgcHJpbnRmKCJSTkcg dGVzdCB3aXRoIHN0dWNrIGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7CisrICAgICAgICB9IGVsc2Ug eworKyAgICAgICAgICAgIHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7 CisrICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgIH0KKysJaWYgKCFub19leGl0KSB7Cisr ICAgICAgICAJaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7CisrIAkJICAgIGRvX3ByaW50X2Vycm9y cygpOworKyAgICAgICAgCSAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIp OworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrICAgICAgICAJcHJpbnRmKCJQb3dlci11cCBzZWxm IHRlc3Qgc3VjY2Vzc2Z1bFxuIik7CisrICAgICAgICAJZXhpdCgwKTsKKysJfQorKyAgICB9Cisr CisrICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLwor KyAgICBwcmludGYoIjEuIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0 Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIp OworKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxF RCFcbiIpICk7CisrCisrICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAorKyAgICAqLworKyAgICBF UlJfY2xlYXJfZXJyb3IoKTsKKysgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2Vs ZiB0ZXN0Li4uIik7CisrICAgIGlmICghRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmlu dF9lcnJvcnMoKTsKKysgICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7CisrCWV4aXQo MSk7CisrCX0KKysgICAgcHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsKKysgICAgaWYgKGRvX2NvcnJ1 cHRfZHNhX2tleWdlbikKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOwor KyAgICBpZiAoZG9fY29ycnVwdF9yc2Ffa2V5Z2VuKQorKyAgICAgICAgICAgIEZJUFNfY29ycnVw dF9yc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19ybmdfc3RpY2spCisrICAgICAgICAgICAgRklQ U19ybmdfc3RpY2soKTsKKysKKysgICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAg ICAqLworKyAgICBwcmludGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysg ICAgcHJpbnRmKCBGSVBTX2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlM RUQhXG4iKSApOworKworKyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24v ZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBh bmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19yc2FfdGVz dChiYWRfcnNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisr ICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50 ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBG SVBTX2RlczNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsK KysKKysgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbgor KyAgICAqLworKyAgICBwcmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJl IHZhbGlkYXRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9kc2EpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTEg aGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7CisrICAgIHBy aW50ZiggRklQU19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFc biIpICk7CisrCisrICAgIC8qIFNIQS0yNTYgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdi LiBTSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0KCkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtNTEy IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7CisrICAg IHByaW50ZiggRklQU19zaGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMSBoYXNoCisrICAgICovCisrICAgIHBy aW50ZigiN2QuIEhNQUMtU0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19z aGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisr ICAgIC8qIEhNQUMtU0hBLTIyNCBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2UuIEhNQUMt U0hBLTIyNCBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTIyNF90ZXN0KCkg PyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFD LVNIQS0yNTYgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFz aC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMzg0IGhh c2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKKysg ICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCisrICAgICov CisrICAgIHByaW50ZigiN2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7CisrICAgIHByaW50Zigg RklQU19obWFjX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQh XG4iKSApOworKworKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24K KysgICAgKi8KKysgICAgcHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVy YXRpb24gdGVzdC4uLlxuIik7CisrICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0g KEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBhcyBleHBl Y3RlZFxuIgorKwkgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAg ICAvKiBaZXJvaXphdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4u LlxuIik7CisrICAgIHByaW50ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3Rl ZFxuIgorKwkgICAgOiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAg IHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7 CisrICAgIHJldHVybiBFcnJvciA/IDEgOiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1MDM5Mzc4MiAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxMi0w Mi0wNyAxMToxNjo0NS4zODAyNjM3MTcgKzAxMDAKK0BAIC0wLDAgKzEsMzQwIEBACisrIworKyMg T3BlblNTTC9jcnlwdG8vZmlwcy9NYWtlZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4u Ly4uCisrQ0M9CWNjCisrSU5DTFVERVM9CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUK KytBUj0JCWFyIHIKKysKKytDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJB TD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQ Uz0KKysKKytQUk9HUkFNPSBmaXBzX3N0YW5kYWxvbmVfaG1hYworK0VYRT0gJChQUk9HUkFNKSQo RVhFX0VYVCkKKysKKytMSUI9JChUT1ApL2xpYmNyeXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3Nl bGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3Jh bmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGFfc2VsZnRl c3QuYyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAorKyAgICBmaXBz X3JzYV94OTMxZy5jIGZpcHNfcG9zdC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBzX2RyYmdfaGFzaC5j IGZpcHNfZHJiZ19obWFjLmMgXAorKyAgICBmaXBzX2RyYmdfbGliLmMgZmlwc19kcmJnX3JhbmQu YyBmaXBzX2RyYmdfc2VsZnRlc3QuYyBmaXBzX3JhbmRfbGliLmMgXAorKyAgICBmaXBzX2NtYWNf c2VsZnRlc3QuYyBmaXBzX2VuYy5jIGZpcHNfbWQuYworKworK0xJQk9CSj1maXBzX2Flc19zZWxm dGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5k X3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhX3NlbGZ0ZXN0 Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKKysgICAgZmlwc19y c2FfeDkzMWcubyBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3RyLm8gZmlwc19kcmJnX2hhc2gubyBm aXBzX2RyYmdfaG1hYy5vIFwKKysgICAgZmlwc19kcmJnX2xpYi5vIGZpcHNfZHJiZ19yYW5kLm8g Zmlwc19kcmJnX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5vIFwKKysgICAgZmlwc19jbWFjX3Nl bGZ0ZXN0Lm8gZmlwc19lbmMubyBmaXBzX21kLm8KKysKKytMSUJDUllQVE89LUwuLiAtbGNyeXB0 bworKworK1NSQz0gJChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9obWFjLmMKKysKKytFWEhFQURF Uj0gZmlwcy5oIGZpcHNfcmFuZC5oCisrSEVBREVSPQkkKEVYSEVBREVSKQorKworK0FMTD0gICAg JChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCisrCisrdG9wOgorKwkoY2QgLi4vLi47ICQoTUFL RSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCisrCisrYWxsOglsaWIgZXhlCisr CisrbGliOgkkKExJQk9CSikKKysJJChBUikgJChMSUIpICQoTElCT0JKKQorKwkkKFJBTkxJQikg JChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKysJQHRvdWNoIGxpYgorKworK2V4ZToJJChFWEUp CisrCisrZmlsZXM6CisrCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4g JChUT1ApL01JTkZPCisrCisrbGlua3M6CisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5w bCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKKysJQCQoUEVSTCkgJChUT1ApL3V0 aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9t a2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCisrCisraW5zdGFsbDoKKysJQFsgLW4gIiQoSU5T VEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgorKwlAaGVhZGVy bGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCisrCWRvICBcCisr CShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8k JGk7IFwKKysJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRl L29wZW5zc2wvJCRpICk7IFwKKysJZG9uZTsKKysKKyt0YWdzOgorKwljdGFncyAkKFNSQykKKysK Kyt0ZXN0czoKKysKKytsaW50OgorKwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1 ZmYKKysKKytkZXBlbmQ6CisrCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNl dCBieSB1cHBlciBNYWtlZmlsZS4uLgorKwkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5D TFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCisrCisrZGNsZWFuOgorKwkk KFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhp dCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3CisrCW12IC1mIE1ha2VmaWxlLm5ldyAk KE1BS0VGSUxFKQorKworK2NsZWFuOgorKwlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAu cHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgorKworKyQoRVhFKTogJChQUk9HUkFNKS5vCisr CUZJUFNfU0hBX0FTTT0iIjsgZm9yIGkgaW4gJChTSEExX0FTTV9PQkopIHNoYTI1Ni5vOyBkbyBG SVBTX1NIQV9BU009IiQkRklQU19TSEFfQVNNIC4uL3NoYS8kJGkiIDsgZG9uZTsgXAorKwkkKEND KSAtbyAkQCAkKENGTEFHUykgJChQUk9HUkFNKS5vICQkRklQU19TSEFfQVNNCisrCisrIyBETyBO T1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorKworK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisr Zmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cnNhLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwcy5jIGZpcHNfbG9jbC5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBz X2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2Fl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19hZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfYWVzX3NlbGZ0ZXN0LmMKKytmaXBzX2Rlc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisr Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBz X2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2Rl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kZXNfc2VsZnRl c3QuYworK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdf Y3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAor K2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNf ZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2Ry YmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2N0 ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcmFuZC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWNrLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19kcmJnX2N0ci5vOiBmaXBzX2Ry YmdfY3RyLmMgZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdf aGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19o YXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfaGFzaC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19oYXNoLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2hhc2gubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19k cmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2hh c2guYworK2ZpcHNfZHJiZ19oYXNoLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19obWFj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJi Z19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfaG1hYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisr Zmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytm aXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNf ZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIGZpcHNfZHJiZ19obWFjLmMKKytmaXBzX2RyYmdfaG1hYy5vOiBmaXBzX3JhbmRfbGNsLmgK KytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfZHJi Z19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o CisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19kcmJn X2xpYi5vOiBmaXBzX2RyYmdfbGliLmMgZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5oCisrZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJi Z19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3JhbmQuYworK2Zp cHNfZHJiZ19yYW5kLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAor K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfZHJiZ19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3NlbGZ0ZXN0LmMKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogZmlwc19kcmJnX3NlbGZ0ZXN0LmggZmlwc19sb2NsLmggZmlwc19y YW5kX2xjbC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK KytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5jCisrZmlwc19kc2Ffc2VsZnRlc3QubzogZmlwc19sb2Ns LmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvaG1hYy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19obWFjX3NlbGZ0ZXN0LmMKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX3Bvc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAor K2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcG9zdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAor K2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9yc2EuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3Bvc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmggZmlwc19wb3N0LmMKKytmaXBz X3JhbmQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorK2ZpcHNf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3Jh bmQuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfcmFu ZC5vOiBmaXBzX2xvY2wuaCBmaXBzX3JhbmQuYworK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vZV9v cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBz X3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5k LmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNf cmFuZF9saWIubzogZmlwc19yYW5kX2xpYi5jCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiBmaXBzX3JhbmRfc2VsZnRlc3QuYworK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19y c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor K2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwc19y c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19y c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3JzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV9zZWxm dGVzdC5jCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yc2FfeDkzMWcubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNf cnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19yc2FfeDkz MWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2FfeDkzMWcuYwor K2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19zaGFfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19zaGFfc2VsZnRlc3QuYworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9obWFjL2htYWMuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ht YWMvaG1hYy5jLmZpcHMJMjAxMS0wNi0xMiAxNzowNzoyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9obWFjL2htYWMuYwkyMDEyLTAyLTA3IDExOjA3OjAy LjU1MDM5Mzc4MiArMDEwMAorQEAgLTgxLDExICs4MSw2IEBAIGludCBITUFDX0luaXRfZXgoSE1B Q19DVFggKmN0eCwgY29uc3Qgdm8KKyAJCQlFVlBlcnIoRVZQX0ZfSE1BQ19JTklUX0VYLCBFVlBf Ul9ESVNBQkxFRF9GT1JfRklQUyk7CisgCQkJcmV0dXJuIDA7CisgCQkJfQorLQkJLyogT3RoZXIg YWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwKKy0JCSAq IHZpYSBGSVBTX2htYWNfaW5pdF9leCgpLgorLQkJICovCistCQlpZiAoIWltcGwgJiYgIWN0eC0+ aV9jdHguZW5naW5lKQorLQkJCXJldHVybiBGSVBTX2htYWNfaW5pdF9leChjdHgsIGtleSwgbGVu LCBtZCwgTlVMTCk7CisgCQl9CisgI2VuZGlmCisgCitAQCAtOTksNiArOTQsMTMgQEAgaW50IEhN QUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bworIAorIAlpZiAoa2V5ICE9IE5VTEwp CisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9kZSgpICYmICEobWQt PmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKKysJCSYmICghKGN0eC0+bWRfY3R4LmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJIHx8ICEoY3R4LT5pX2N0eC5mbGFn cyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+b19jdHgu ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSkKKysJCQlnb3RvIGVycjsK KysjZW5kaWYKKyAJCXJlc2V0PTE7CisgCQlqPUVWUF9NRF9ibG9ja19zaXplKG1kKTsKKyAJCU9Q RU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKK0BAIC0xNTUsMTAgKzE1 Nyw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAorIAorIGludCBI TUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXpl X3QgbGVuKQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYg IWN0eC0+aV9jdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNfaG1hY191cGRhdGUoY3R4LCBkYXRh LCBsZW4pOworLSNlbmRpZgorIAlyZXR1cm4gRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5tZF9jdHgs ZGF0YSxsZW4pOworIAl9CisgCitAQCAtMTY2LDEwICsxNjQsNiBAQCBpbnQgSE1BQ19GaW5hbChI TUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjCisgCXsKKyAJdW5zaWduZWQgaW50IGk7CisgCXVuc2ln bmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlp ZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNfaG1h Y19maW5hbChjdHgsIG1kLCBsZW4pOworLSNlbmRpZgorIAorIAlpZiAoIUVWUF9EaWdlc3RGaW5h bF9leCgmY3R4LT5tZF9jdHgsYnVmLCZpKSkKKyAJCWdvdG8gZXJyOworQEAgLTIwOSwxMyArMjAz LDYgQEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQworIAorIHZvaWQg SE1BQ19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQ UworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJeworLQkJRklQ U19obWFjX2N0eF9jbGVhbnVwKGN0eCk7CistCQlyZXR1cm47CistCQl9CistI2VuZGlmCisgCUVW UF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7CisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4 LT5vX2N0eCk7CisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5tZF9jdHgpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9tZDIvbWQyX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0My4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDEy LTAyLTA3IDExOjA3OjAyLjU1MDM5Mzc4MiArMDEwMAorQEAgLTYyLDYgKzYyLDExIEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvbWQyLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorIAorIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRF WFQ7CisgCitAQCAtMTE2LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQp CisgCQlyZXR1cm4oIm1kMihpbnQpIik7CisgCX0KKyAKKy1maXBzX21kX2luaXQoTUQyKQorK25v bmZpcHNfbWRfaW5pdChNRDIpCisgCXsKKyAJYy0+bnVtPTA7CisgCW1lbXNldChjLT5zdGF0ZSww LHNpemVvZiBjLT5zdGF0ZSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9t ZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL21kNC9tZDRfZGdz dC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwky MDExLTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUwMzkzNzgyICsw MTAwCitAQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BF TlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAor ICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBz X21kX2luaXQoTUQ0KQorK25vbmZpcHNfbWRfaW5pdChNRDQpCisgCXsKKyAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL21kNS9tZDVfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vbWQ1L21k NV9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTItMDItMDcgMTE6MDc6 MDIuNTUwMzkzNzgyICswMTAwCitAQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJz aW9uW109Ik1ENSIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9u ZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMy NTQ3NkwKKyAKKy1maXBzX21kX2luaXQoTUQ1KQorK25vbmZpcHNfbWRfaW5pdChNRDUpCisgCXsK KyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL21kYzIvbWRjMmRnc3Qu YwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1MDM5Mzc4MiArMDEwMAorQEAgLTc2LDcgKzc2LDcgQEAK KyAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKKyAKKyBzdGF0 aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgbGVuKTsKKy1maXBzX21kX2luaXQoTURDMikKKytub25maXBzX21kX2luaXQoTURDMikK KyAJeworIAljLT5udW09MDsKKyAJYy0+cGFkX3R5cGU9MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v b19pbml0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9vX2luaXQuYy5maXBzCTIw MTEtMDUtMjYgMTY6MTk6MTkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vb19pbml0LmMJMjAxMi0wMi0wNyAxMTowNzowMi41NTEzOTM3OTEgKzAxMDAKK0BA IC01NSwyOCArNTUsNjMgQEAKKyAjaW5jbHVkZSA8ZV9vcy5oPgorICNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisr I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHVu aXN0ZC5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKworKyNk ZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxl ZCIKKysKKytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQorKwl7CisrCWNoYXIgYnVm WzJdID0gIjAiOworKwlpbnQgZmQ7CisrCQorKwlpZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJ UFNfTU9ERSIpICE9IE5VTEwpCisrCQl7CisrCQlidWZbMF0gPSAnMSc7CisrCQl9CisrCWVsc2Ug aWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05MWSkpID49IDApCisr CQl7CisrCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09 IEVJTlRSKTsKKysJCWNsb3NlKGZkKTsKKysJCX0KKysJLyogRmFpbHVyZSByZWFkaW5nIHRoZSBm aXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKKysJICogc3dpdGNoaW5nIGludG8g RklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKKysJICogb3RoZXJ3aXNl LiAKKysJICovCisrCQorKwlpZiAoYnVmWzBdID09ICcxJykKKysJCXsKKysJCUZJUFNfbW9kZV9z ZXQoMSk7CisrCQl9CisrCX0KKyAjZW5kaWYKKyAKKyAvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwg T3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgorICAqIEN1cnJlbnRseSBvbmx5IHNl dHMgRklQUyBjYWxsYmFja3MKKyAgKi8KKyAKKy12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQorK3Zv aWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKyAJeworIAlzdGF0aWMgaW50IGRvbmUgPSAw OworIAlpZiAoZG9uZSkKKyAJCXJldHVybjsKKyAJZG9uZSA9IDE7CisgI2lmZGVmIE9QRU5TU0xf RklQUworLQlGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQVE9fbG9jaywgQ1JZUFRPX2Fk ZF9sb2NrKTsKKy0JRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJyb3IsIEVSUl9h ZGRfZXJyb3JfdmRhdGEpOworLQlGSVBTX3NldF9tYWxsb2NfY2FsbGJhY2tzKENSWVBUT19tYWxs b2MsIENSWVBUT19mcmVlKTsKKyAJUkFORF9pbml0X2ZpcHMoKTsKKysJaW5pdF9maXBzX21vZGUo KTsKKyAjZW5kaWYKKyAjaWYgMAorIAlmcHJpbnRmKHN0ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2lu aXRcbiIpOworICNlbmRpZgorIAl9CisgCisrdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKKysJewor KwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vb3BlbnNzbGNvbmYuaC5pbgorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL29wZW5z c2xjb25mLmguaW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL29wZW5zc2xjb25mLmguaW4JMjAxMi0wMi0wNyAx MTowNzowMi41NTEzOTM3OTEgKzAxMDAKK0BAIC0xLDUgKzEsMjAgQEAKKyAvKiBjcnlwdG8vb3Bl bnNzbGNvbmYuaC5pbiAqLworIAorKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKysK KysvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkg c2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKKysgKiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1h a2VkZXBlbmQuCisrICoKKysgKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBs b29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKKysgKiBpbnN0ZWFkOyB3 ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNh YmxlZCBhbGdvcml0aG1zLl0KKysgKi8KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNkZWZp bmUgT1BFTlNTTF9GSVBTCisrI2VuZGlmCisrCisrI2VuZGlmCisrCisgLyogR2VuZXJhdGUgODAz ODYgY29kZT8gKi8KKyAjdW5kZWYgSTM4Nl9PTkxZCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vcGtjczEyL3AxMl9jcnQuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3Br Y3MxMi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAzLTA5IDE0OjA4OjA0LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMJMjAxMi0wMi0w NyAxMTowNzowMi41NTEzOTM3OTEgKzAxMDAKK0BAIC01OSw2ICs1OSwxMCBAQAorICNpbmNsdWRl IDxzdGRpby5oPgorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3NsL3Br Y3MxMi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrCisgCisgCisgc3RhdGljIGludCBwa2NzMTJfYWRkX2JhZyhTVEFDS19PRihQ S0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtDUzEyX1NBRkVCQUcgKmJhZyk7CitAQCAtOTAsNyAr OTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3JlYXRlKGNoYXIgKnBhc3MsIGNoYXIgKgorIAorIAkv KiBTZXQgZGVmYXVsdHMgKi8KKyAJaWYgKCFuaWRfY2VydCkKKysJCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkpCisrCQkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhT SEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKKysJCWVsc2UKKysjZW5kaWYKKyAJCW5pZF9jZXJ0 ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKKysJCX0KKyAJaWYgKCFuaWRfa2V5 KQorIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOwor IAlpZiAoIWl0ZXIpCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yYW5kL21k X3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCist LS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDExLTAx LTI2IDE1OjU1OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUxMzkzNzkxICswMTAwCitA QCAtMzg5LDcgKzM4OSwxMCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVk IGNoCisgCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CisgCWNyeXB0b19sb2Nr X3JhbmQgPSAxOworIAorLQlpZiAoIWluaXRpYWxpemVkKQorKwkvKiBhbHdheXMgcG9sbCBmb3Ig ZXh0ZXJuYWwgZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAorKwkgKiBl eHBhbnNpb24KKysJICovCisrCWlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgp KSAKKyAJCXsKKyAJCVJBTkRfcG9sbCgpOworIAkJaW5pdGlhbGl6ZWQgPSAxOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9yYW5kL3JhbmQuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L3JhbmQvcmFuZC5oLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMS45OTQzODkxNTUgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yYW5kL3JhbmQuaAkyMDEyLTAyLTA3IDExOjA3 OjAyLjU1MTM5Mzc5MSArMDEwMAorQEAgLTEzMywxNSArMTMzLDMzIEBAIHZvaWQgRVJSX2xvYWRf UkFORF9zdHJpbmdzKHZvaWQpOworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlv bnMuICovCisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBSQU5EX0ZfRU5HX1JB TkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwOAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkg MTAzCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKKysjZGVmaW5lIFJB TkRfRl9GSVBTX1JBTkRfU0VUX0RUCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1g5MzFf U0VUX0RUCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJCQkgMTA0CisrI2Rl ZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNworKyNkZWZpbmUgUkFORF9GX0ZJ UFNfU0VUX1RFU1RfTU9ERQkJCSAxMDUKKyAjZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01F VEhPRAkJCSAxMDEKKy0jZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJCQkgMTAyCisrI2Rl ZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwOQorICNkZWZpbmUgUkFORF9GX1NTTEVB WV9SQU5EX0JZVEVTCQkJIDEwMAorIAorIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKy0jZGVmaW5lIFJB TkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMDIKKy0jZGVmaW5lIFJBTkRfUl9FUlJP Ul9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTAzCistI2RlZmluZSBSQU5EX1JfTk9fRklQU19SQU5E T01fTUVUSE9EX1NFVAkJIDEwMQorKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19E UkJHCQkJIDExMgorKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAx MTMKKysjZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwNQorKyNkZWZpbmUgUkFO RF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgorKyNkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFO RE9NX01FVEhPRF9TRVQJCSAxMTEKKysjZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUCQkJCSAxMDcK KysjZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCisrI2RlZmlu ZSBSQU5EX1JfUFJOR19FUlJPUgkJCQkgMTA4CisrI2RlZmluZSBSQU5EX1JfUFJOR19LRVlFRAkJ CQkgMTA5CisrI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCisrI2RlZmlu ZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQJCQkgMTAzCisgI2RlZmluZSBSQU5EX1JfUFJOR19O T1RfU0VFREVECQkJCSAxMDAKKysjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFU Q0hfS0VZCQkgMTEwCisrI2RlZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkgMTA0CisgCisgI2lm ZGVmICBfX2NwbHVzcGx1cworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcmlwZW1k L3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yaXBlbWQvcm1kX2Rn c3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxMi0wMi0wNyAxMTowNzow Mi41NTIzOTM3OTkgKzAxMDAKK0BAIC03MCw3ICs3MCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3Zl cnNpb25bXT0iUklQRS1NRDE2MCIKKyAgICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2 MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7CisgIyAgZW5kaWYKKyAKKy1m aXBzX21kX2luaXQoUklQRU1EMTYwKQorK25vbmZpcHNfbWRfaW5pdChSSVBFTUQxNjApCisgCXsK KyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9UklQRU1EMTYwX0E7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcwkyMDExLTA2LTAyIDIwOjIyOjQyLjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCTIw MTItMDItMDcgMTE6MDc6MDIuNTUyMzkzNzk5ICswMTAwCitAQCAtOTAsMTAgKzkwLDkgQEAgaW50 IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0CisgCSAgICAgUlNBICpyc2EsIGlu dCBwYWRkaW5nKQorIAl7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkg JiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCistCQkJJiYgIShy c2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwlpZihGSVBTX21vZGUoKSAm JiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CistCQlSU0Fl cnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7 CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9OX05P VF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisgCQlyZXR1cm4gLTE7CisgCQl9CisgI2VuZGlmCitA QCAtMTE4LDEwICsxMTcsOSBAQCBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25z dCB1CisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisgI2lmZGVmIE9QRU5TU0xf RklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdf RklQU19NRVRIT0QpCistCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKQorKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykpCisgCQl7CistCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0Ff Ul9OT05fRklQU19SU0FfTUVUSE9EKTsKKysJCVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZ UFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOworIAkJcmV0dXJu IC0xOworIAkJfQorICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v cnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfZWF5 LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJMjAx MS0xMC0xOSAxNjo1ODo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUyMzkzNzk5ICswMTAw CitAQCAtMTE0LDYgKzExNCwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisgCisgI2lmbmRlZiBSU0FfTlVMTAorIAorQEAgLTEzOCw3ICsx NDIsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9eworIAlCTl9tb2Rf ZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250Z29tZXJ5IGlm ICBlID09IDMgKi8KKyAJUlNBX2VheV9pbml0LAorIAlSU0FfZWF5X2ZpbmlzaCwKKy0JMCwgLyog ZmxhZ3MgKi8KKysJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCisgCU5VTEwsCisg CTAsIC8qIHJzYV9zaWduICovCisgCTAsIC8qIHJzYV92ZXJpZnkgKi8KK0BAIC0xNTgsNiArMTYy LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAJdW5zaWdu ZWQgY2hhciAqYnVmPU5VTEw7CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlpZihGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBU LEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwor KwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJCSYmIChC Tl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK KysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX0tF WV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYK KysKKyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19C SVRTKQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9S X01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC0zNjEsNiArMzgzLDI0IEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKKyAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKKyAJ Qk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysKKysJCWlmICgh KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2Jp dHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJewor KwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlp ZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQo Y3R4KTsKKyAJZiAgID0gQk5fQ1RYX2dldChjdHgpOworQEAgLTUwNCw2ICs1NDQsMjQgQEAgc3Rh dGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgorIAlCSUdOVU0gKnVuYmxpbmQg PSBOVUxMOworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZ UFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQor KworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJCSYm IChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRT KSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULCBSU0Ff Ul9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2Vu ZGlmCisrCisgCWlmKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAlC Tl9DVFhfc3RhcnQoY3R4KTsKKyAJZiAgID0gQk5fQ1RYX2dldChjdHgpOworQEAgLTYzOSw2ICs2 OTcsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAorIAl1bnNp Z25lZCBjaGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZ UFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9Cisr CisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkJJiYg KEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMp KQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRp ZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVT X0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNB X1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTg0NywxMiArOTIzLDEyIEBAIHN0YXRpYyBpbnQg UlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKKyAJaWYgKCFCTl9tb2QocjAscHIxLHJzYS0+ cCxjdHgpKSBnb3RvIGVycjsKKyAKKyAJLyogSWYgcCA8IHEgaXQgaXMgb2NjYXNpb25hbGx5IHBv c3NpYmxlIGZvciB0aGUgY29ycmVjdGlvbiBvZgorLSAgICAgICAgICogYWRkaW5nICdwJyBpZiBy MCBpcyBuZWdhdGl2ZSBhYm92ZSB0byBsZWF2ZSB0aGUgcmVzdWx0IHN0aWxsCisrCSAqIGFkZGlu ZyAncCcgaWYgcjAgaXMgbmVnYXRpdmUgYWJvdmUgdG8gbGVhdmUgdGhlIHJlc3VsdCBzdGlsbAor IAkgKiBuZWdhdGl2ZS4gVGhpcyBjYW4gYnJlYWsgdGhlIHByaXZhdGUga2V5IG9wZXJhdGlvbnM6 IHRoZSBmb2xsb3dpbmcKKyAJICogc2Vjb25kIGNvcnJlY3Rpb24gc2hvdWxkICphbHdheXMqIGNv cnJlY3QgdGhpcyByYXJlIG9jY3VycmVuY2UuCisgCSAqIFRoaXMgd2lsbCAqbmV2ZXIqIGhhcHBl biB3aXRoIE9wZW5TU0wgZ2VuZXJhdGVkIGtleXMgYmVjYXVzZQorLSAgICAgICAgICogdGhleSBl bnN1cmUgcCA+IHEgW3N0ZXZlXQorLSAgICAgICAgICovCisrCSAqIHRoZXkgZW5zdXJlIHAgPiBx IFtzdGV2ZV0KKysJICovCisgCWlmIChCTl9pc19uZWdhdGl2ZShyMCkpCisgCQlpZiAoIUJOX2Fk ZChyMCxyMCxyc2EtPnApKSBnb3RvIGVycjsKKyAJaWYgKCFCTl9tdWwocjEscjAscnNhLT5xLGN0 eCkpIGdvdG8gZXJyOworQEAgLTg5Nyw2ICs5NzMsOSBAQCBlcnI6CisgCisgc3RhdGljIGludCBS U0FfZWF5X2luaXQoUlNBICpyc2EpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcnNhLT5mbGFnc3w9UlNBX0ZMQUdfQ0FDSEVf UFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7CisgCXJldHVybigxKTsKKyAJfQorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAxMS0xMC0xMCAwMToxMzo1MC4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2Vyci5jCTIwMTIt MDItMDcgMTE6MDc6MDIuNTUyMzkzNzk5ICswMTAwCitAQCAtMTIxLDYgKzEyMSw4IEBAIHN0YXRp YyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoUlNBX0ZfUlNB X1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9wdWJsaWNfZW5jcnlwdCJ9LAorIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhSU0FfRl9S U0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCisre0VSUl9GVU5DKFJT QV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9LAor K3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAorIHtF UlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAorIHtFUlJfRlVOQyhSU0FfRl9S U0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9 LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTU6MTg6MDcuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDEyLTAy LTA3IDExOjA3OjAyLjU1MzM5MzgwNyArMDEwMAorQEAgLTY5LDYgKzY5LDc4IEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2lmZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOworKwor K3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKKysJeworKwlmaXBzX3JzYV9wYWly d2lzZV9mYWlsID0gMTsKKysJfQorKworK2ludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSkKKysJ eworKwljb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBEYXRh IjsKKysJdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOworKwlpbnQg bGVuLCByZXQgPSAwOworKwlFVlBfUEtFWSAqcGs7CisrCisrCWlmICgocGs9RVZQX1BLRVlfbmV3 KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfc2V0MV9SU0EocGssIHJz YSk7CisrCisrCS8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0dXJlIHRlc3Qg Ki8KKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVM TCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKKysJCXx8 ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQ X3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJLyogTm93IHBl cmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KKysJY3Ri dWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysJaWYgKCFjdGJ1ZikKKysJCWdv dG8gZXJyOworKworKwlsZW4gPSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0 YnMsIGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiA8PSAwKQorKwkJ Z290byBlcnI7CisrCS8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQg Ki8KKysJaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAodGJzLCBjdGJ1 ZiwgbGVuKSkKKysJCWdvdG8gZXJyOworKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXpl KHJzYSkpOworKworKwlpZiAoIXB0YnVmKQorKwkJZ290byBlcnI7CisrCWxlbiA9IFJTQV9wcml2 YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwor KwlpZiAobGVuICE9IChzaXplb2YodGJzKSAtIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChtZW1j bXAocHRidWYsIHRicywgbGVuKSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKworKwlp ZiAoIXB0YnVmKQorKwkJZ290byBlcnI7CisrCQorKwllcnI6CisrCWlmIChyZXQgPT0gMCkKKysJ CXsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf Q0hFQ0tfUlNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQl9CisrCisrCWlmIChj dGJ1ZikKKysJCU9QRU5TU0xfZnJlZShjdGJ1Zik7CisrCWlmIChwdGJ1ZikKKysJCU9QRU5TU0xf ZnJlZShwdGJ1Zik7CisrCWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKworKwlyZXR1 cm4gcmV0OworKwl9CisgI2VuZGlmCisgCisgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4o UlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7CitAQCAt ODEsNyArMTUzLDcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisg aW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFs dWUsIEJOX0dFTkNCICpjYikKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNf bW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorKwlp ZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJ UFNfTUVUSE9EKQorIAkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9X KSkKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYLCBSU0FfUl9OT05f RklQU19SU0FfTUVUSE9EKTsKK0BAIC05MCwxMCArMTYyLDYgQEAgaW50IFJTQV9nZW5lcmF0ZV9r ZXlfZXgoUlNBICpyc2EsIGludCBiaQorICNlbmRpZgorIAlpZihyc2EtPm1ldGgtPnJzYV9rZXln ZW4pCisgCQlyZXR1cm4gcnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwg Y2IpOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJu IEZJUFNfcnNhX2dlbmVyYXRlX2tleV9leChyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jZW5k aWYKKyAJcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsK KyAJfQorIAorQEAgLTEwNSw2ICsxNzMsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXln ZW4oUlNBICpyc2EsCisgCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOworIAlCTl9DVFggKmN0 eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUo KSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICAJeworKwkJICAg IEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOworKwkgICAgCXJldHVybiAwOworKwkgICAgCX0KKysKKysJCWlmIChiaXRzIDwgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJICAgIHsKKysJCSAgICBGSVBTZXJy KEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkJICAg IHJldHVybiAwOworKwkJICAgIH0KKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXco KTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitA QCAtMjE2LDYgKzMwMSwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJz YSwKKyAJCXAgPSByc2EtPnA7CisgCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+ cSxwLGN0eCkpIGdvdG8gZXJyOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNf bW9kdWxlX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQorKwkJ CUJOX2FkZF93b3JkKHJzYS0+biwgMSk7CisrCisrCQlpZighZmlwc19jaGVja19yc2EocnNhKSkK KysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJb2s9MTsKKyBlcnI6CisgCWlm IChvayA9PSAtMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2Eu aC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2EuaAorLS0tIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuMjk4 MzkxNjg1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYS5oCTIw MTItMDItMDcgMTE6MDc6MDIuNTUzMzkzODA3ICswMTAwCitAQCAtMTY0LDYgKzE2NCw4IEBAIHN0 cnVjdCByc2Ffc3QKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTCTE2Mzg0 CisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMg MTAyNAorKworICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCisgIyBkZWZp bmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIKKyAjZW5kaWYKK0BAIC0yOTAs NiArMjkyLDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50IGJpdHMsIHVuc2lnbmUKKyAK KyAvKiBOZXcgdmVyc2lvbiAqLworIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBp bnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9kZXJpdmVf ZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAq cTIsCisrCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdO VU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3Qg QklHTlVNICpYcSwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisraW50IFJT QV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAq ZSwgQk5fR0VOQ0IgKmNiKTsKKyAKKyBpbnQJUlNBX2NoZWNrX2tleShjb25zdCBSU0EgKik7Cisg CS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KK0BAIC00ODcsNyArNDk0LDcgQEAgdm9p ZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5H X0FERF9OT05FCQkJIDEwNworICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09B RVAJCSAxMjEKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1MJCQkgMTI1 CistI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01HRjEJCSAxNDgKKysj ZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1NfTUdGMQkJIDE1OAorICNkZWZp bmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMQkJIDEwOAorICNkZWZpbmUgUlNB X0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMgkJIDEwOQorICNkZWZpbmUgUlNBX0ZfUlNB X1BBRERJTkdfQUREX1NTTFYyMwkJCSAxMTAKK0BAIC01MDAsMjAgKzUwNywyMiBAQCB2b2lkIEVS Ul9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQ0hF Q0tfWDkzMQkJCSAxMjgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVAkJCQkJIDExNQorICNkZWZp bmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKKy0jZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRF X0RFQ1JZUFQJCQkgMTUwCistI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJIDE1 MQorKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTcKKysjZGVmaW5lIFJT QV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9E RUNPREUJCQkJIDEzNworICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgKKy0j ZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNTIKKysjZGVmaW5lIFJTQV9GX1JT QV9QVUJMSUNfREVDUllQVAkJCSAxNDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQ VAkJCSAxNTMKKyAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAxMzkKKyAjZGVmaW5l IFJTQV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYKKysjZGVmaW5lIFJTQV9GX1JTQV9TRVRf REVGQVVMVF9NRVRIT0QJCQkgMTUwCisrI2RlZmluZSBSU0FfRl9SU0FfU0VUX01FVEhPRAkJCQkg MTUxCisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNworICNkZWZpbmUgUlNBX0ZfUlNB X1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKKyAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkJ CQkJIDExOQorICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9BU04xX09DVEVUX1NUUklORwkJIDEy MAorICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1MJCQkgMTI2CistI2RlZmluZSBS U0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE0OQorKyNkZWZpbmUgUlNBX0ZfUlNB X1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNTIKKyAKKyAvKiBSZWFzb24gY29kZXMuICovCisg I2RlZmluZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0gJCQkgMTAwCitAQCAtNTQyLDIxICs1NTEs MjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJTQV9SX0lO VkFMSURfTUdGMV9NRAkJCQkgMTU2CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJTkcJCQkJ IDEzOAorICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HX01PREUJCQkgMTQxCistI2RlZmlu ZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE0OQorKyNkZWZpbmUgUlNBX1JfSU5W QUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNTcKKyAjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1NB TFRMRU4JCQkgMTQ2CistI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RICQkJIDE1MAor KyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTgKKyAjZGVmaW5lIFJTQV9S X0lOVkFMSURfVFJBSUxFUgkJCQkgMTM5CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1g5MzFfRElH RVNUCQkJIDE0MgorICNkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5WRVJTRV9PRl9RCQkJIDEyNgor ICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAorICNkZWZpbmUgUlNBX1Jf TEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAorICNkZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFS R0UJCQkJIDEwNQorLSNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJCSAxNTcKKysj ZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTQ5CisrI2RlZmluZSBSU0FfUl9O T05fRklQU19NRVRIT0QJCQkJIDE0OQorICNkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5U CQkJIDE0MAorICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlTU0lORwkJCSAxMTMK KyAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RCQkJIDEyNworICNkZWZpbmUgUlNB X1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKKy0jZGVmaW5lIFJTQV9SX09QRVJBVElPTl9O T1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1OAorKyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05P VF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTUwCisgI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9U X1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFCSAxNDgKKyAjZGVmaW5lIFJTQV9SX1BBRERJTkdf Q0hFQ0tfRkFJTEVECQkJIDExNAorICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxMS0wNi0yMCAyMTo0MToxMy4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2xpYi5j CTIwMTItMDItMDcgMTE6MDc6MDIuNTUzMzkzODA3ICswMTAwCitAQCAtODQsNiArODQsMTMgQEAg UlNBICpSU0FfbmV3KHZvaWQpCisgCisgdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0 IFJTQV9NRVRIT0QgKm1ldGgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBT X21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJewor KwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01F VEhPRCk7CisrCQlyZXR1cm47CisrCQl9CisrI2VuZGlmCisgCWRlZmF1bHRfUlNBX21ldGggPSBt ZXRoOworIAl9CisgCitAQCAtOTEsMTggKzk4LDExIEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9n ZXRfZGVmYXVsdF9tZXRob2QKKyAJeworIAlpZiAoZGVmYXVsdF9SU0FfbWV0aCA9PSBOVUxMKQor IAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1 cm4gRklQU19yc2FfcGtjczFfc3NsZWF5KCk7CistCQllbHNlCistCQkJcmV0dXJuIFJTQV9QS0NT MV9TU0xlYXkoKTsKKy0jZWxzZQorICNpZmRlZiBSU0FfTlVMTAorIAkJZGVmYXVsdF9SU0FfbWV0 aD1SU0FfbnVsbF9tZXRob2QoKTsKKyAjZWxzZQorIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0FfUEtD UzFfU1NMZWF5KCk7CisgI2VuZGlmCistI2VuZGlmCisgCQl9CisgCisgCXJldHVybiBkZWZhdWx0 X1JTQV9tZXRoOworQEAgLTExOCw2ICsxMTgsMTMgQEAgaW50IFJTQV9zZXRfbWV0aG9kKFJTQSAq cnNhLCBjb25zdCBSU0FfTQorIAkvKiBOQjogVGhlIGNhbGxlciBpcyBzcGVjaWZpY2FsbHkgc2V0 dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8gdXMKKyAJICogdG8gZGVhbCB3aXRoIHdo aWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLworIAljb25zdCBSU0FfTUVUSE9EICptdG1wOwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3Mg JiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9N RVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5k aWYKKyAJbXRtcCA9IHJzYS0+bWV0aDsKKyAJaWYgKG10bXAtPmZpbmlzaCkgbXRtcC0+ZmluaXNo KHJzYSk7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorQEAgLTE3MCw2ICsxNzcsMTggQEAg UlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAJCQl9CisgCQl9CisgI2VuZGlm CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1ldGgt PmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JT QV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKyNpZm5kZWYgT1BFTlNTTF9O T19FTkdJTkUKKysJCWlmIChyZXQtPmVuZ2luZSkKKysJCQlFTkdJTkVfZmluaXNoKHJldC0+ZW5n aW5lKTsKKysjZW5kaWYKKysJCU9QRU5TU0xfZnJlZShyZXQpOworKwkJcmV0dXJuIE5VTEw7Cisr CQl9CisrI2VuZGlmCisgCisgCXJldC0+cGFkPTA7CisgCXJldC0+dmVyc2lvbj0wOworQEAgLTE4 OCw3ICsyMDcsNyBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAlyZXQt PmJsaW5kaW5nPU5VTEw7CisgCXJldC0+bXRfYmxpbmRpbmc9TlVMTDsKKyAJcmV0LT5iaWdudW1f ZGF0YT1OVUxMOworLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdfTk9O X0ZJUFNfQUxMT1c7CisrCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFnczsKKyAJaWYgKCFDUllQ VE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0LCAmcmV0LT5leF9kYXRhKSkK KyAJCXsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9yc2EvcnNhX3BtZXRoLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2Ev cnNhX3BtZXRoLmMuZmlwcwkyMDEyLTAxLTAyIDE5OjE2OjM5LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDEyLTAyLTA3IDEx OjA3OjAyLjU1MzM5MzgwNyArMDEwMAorQEAgLTIwNiwyMiArMjA2LDYgQEAgc3RhdGljIGludCBw a2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYworIAkJCQkJUlNBX1JfSU5WQUxJRF9ESUdFU1Rf TEVOR1RIKTsKKyAJCQlyZXR1cm4gLTE7CisgCQkJfQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0J CWlmIChyZXQgPiAwKQorLQkJCXsKKy0JCQl1bnNpZ25lZCBpbnQgc2xlbjsKKy0JCQlyZXQgPSBG SVBTX3JzYV9zaWduX2RpZ2VzdChyc2EsIHRicywgdGJzbGVuLCByY3R4LT5tZCwKKy0JCQkJCQkJ cmN0eC0+cGFkX21vZGUsCistCQkJCQkJCXJjdHgtPnNhbHRsZW4sCistCQkJCQkJCXJjdHgtPm1n ZjFtZCwKKy0JCQkJCQkJc2lnLCAmc2xlbik7CistCQkJaWYgKHJldCA+IDApCistCQkJCSpzaWds ZW4gPSBzbGVuOworLQkJCWVsc2UKKy0JCQkJKnNpZ2xlbiA9IDA7CistCQkJcmV0dXJuIHJldDsK Ky0JCQl9CistI2VuZGlmCisgCQlpZiAocmN0eC0+cGFkX21vZGUgPT0gUlNBX1g5MzFfUEFERElO RykKKyAJCQl7CisgCQkJaWYgKCFzZXR1cF90YnVmKHJjdHgsIGN0eCkpCitAQCAtMzQxLDE5ICsz MjUsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFgKKyAjZW5kaWYK KyAJaWYgKHJjdHgtPm1kKQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChydiA+ IDApCistCQkJeworLQkJCXJldHVybiBGSVBTX3JzYV92ZXJpZnlfZGlnZXN0KHJzYSwKKy0JCQkJ CQkJdGJzLCB0YnNsZW4sCistCQkJCQkJCXJjdHgtPm1kLAorLQkJCQkJCQlyY3R4LT5wYWRfbW9k ZSwKKy0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKKy0JCQkJCQkJcmN0eC0+bWdmMW1kLAorLQkJCQkJ CQlzaWcsIHNpZ2xlbik7CistCQkJCQkJCQorLQkJCX0KKy0jZW5kaWYKKyAJCWlmIChyY3R4LT5w YWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKKyAJCQlyZXR1cm4gUlNBX3ZlcmlmeShFVlBf TURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAorIAkJCQkJc2lnLCBzaWdsZW4sIHJzYSk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDExLTA2LTAyIDIwOjIyOjQy LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2Ff c2lnbi5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTU0MzkzODE1ICswMTAwCitAQCAtMTM4LDcgKzEz OCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWkyZF9Y NTA5X1NJRygmc2lnLCZwKTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2VuY3J5 cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRl cmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSBy c2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdy ZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9MDsK KyAJZWxzZQorQEAgLTE3OCw4ICsxNzksOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBl LCBjb25zdCB1bnNpCisgCisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQorIAkJ eworLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1Zixy bSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMg PyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJtLHJz YSxSU0FfUEtDUzFfUEFERElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4gMDsK KyAJCSpwcm1fbGVuID0gaTsKK0BAIC0xOTYsNyArMTk3LDggQEAgaW50IGludF9yc2FfdmVyaWZ5 KGludCBkdHlwZSwgY29uc3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxS U0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlpPVJT QV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBG SVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRo LT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcp IDogMDsKKyAKKyAJaWYgKGkgPD0gMCkgZ290byBlcnI7CisgCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9zaGEvc2hhMjU2LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEvc2hh MjU2LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1 NDM5MzgxNSArMDEwMAorQEAgLTEyLDEyICsxMiwxOSBAQAorIAorICNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbHYuaD4KKyAKKyBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0y NTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKyBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwg U0hBMjU2KQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5oWzBdPTB4YzEw NTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7CisgCWMtPmhbMl09MHgzMDcwZGQxN1VMOwlj LT5oWzNdPTB4ZjcwZTU5MzlVTDsKK0BAIC0yOSw2ICszNiw5IEBAIGZpcHNfbWRfaW5pdF9jdHgo U0hBMjI0LCBTSEEyNTYpCisgCisgZmlwc19tZF9pbml0KFNIQTI1NikKKyAJeworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3 YWU4NVVMOworIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEvc2hhNTEyLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDExLTExLTE0IDIxOjU4OjAxLjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGE1MTIuYwkyMDEy LTAyLTA3IDExOjA3OjAyLjU1NDM5MzgxNSArMDEwMAorQEAgLTUsNiArNSwxMCBAQAorICAqID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisgICovCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKwor ICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEE1 MTIpCisgLyoKKyAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KK0BAIC02MSw2ICs2NSw5IEBAIGNv bnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKKyAKKyBmaXBzX21kX2luaXRf Y3R4KFNIQTM4NCwgU0hBNTEyKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWMtPmhbMF09VTY0KDB4Y2JiYjlkNWRjMTA1OWVk OCk7CisgCWMtPmhbMV09VTY0KDB4NjI5YTI5MmEzNjdjZDUwNyk7CisgCWMtPmhbMl09VTY0KDB4 OTE1OTAxNWEzMDcwZGQxNyk7CitAQCAtNzcsNiArODQsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNI QTM4NCwgU0hBNTEyKQorIAorIGZpcHNfbWRfaW5pdChTSEE1MTIpCisgCXsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJYy0+aFswXT1V NjQoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKKyAJYy0+aFsxXT1VNjQoMHhiYjY3YWU4NTg0Y2FhNzNi KTsKKyAJYy0+aFsyXT1VNjQoMHgzYzZlZjM3MmZlOTRmODJiKTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL3NoYS9zaGEuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGEuaC5m aXBzCTIwMTItMDItMDcgMTE6MDc6MDEuODE5Mzg3Njk3ICswMTAwCisrKysgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vc2hhL3NoYS5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTU0MzkzODE1ICsw MTAwCitAQCAtMTE2LDkgKzExNiw2IEBAIHVuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25l ZCBjaGFyICoKKyB2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSk7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hBMV9Jbml0KFNIQV9DVFggKmMpOworLSNlbmRp ZgorIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7CisgaW50IFNIQTFfVXBkYXRlKFNIQV9DVFgg KmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEExX0ZpbmFsKHVuc2ln bmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK0BAIC0xNDEsMTAgKzEzOCw2IEBAIHR5cGVkZWYg c3RydWN0IFNIQTI1NnN0YXRlX3N0CisgCX0gU0hBMjU2X0NUWDsKKyAKKyAjaWZuZGVmIE9QRU5T U0xfTk9fU0hBMjU2CistI2lmZGVmIE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTIyNF9J bml0KFNIQTI1Nl9DVFggKmMpOworLWludCBwcml2YXRlX1NIQTI1Nl9Jbml0KFNIQTI1Nl9DVFgg KmMpOworLSNlbmRpZgorIGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKKyBpbnQgU0hB MjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsK KyBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKK0BA IC0xOTIsMTAgKzE4NSw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0CisgI2VuZGlm CisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy1p bnQgcHJpdmF0ZV9TSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKKy1pbnQgcHJpdmF0ZV9TSEE1 MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKKy0jZW5kaWYKKyBpbnQgU0hBMzg0X0luaXQoU0hBNTEy X0NUWCAqYyk7CisgaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQTM4NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwg U0hBNTEyX0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEv c2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGFfbG9jbC5o CistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDEy LTAyLTA3IDExOjA3OjAxLjgyNDM4NzczOSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTU0MzkzODE1ICswMTAw CitAQCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9D VFggKmMsCisgI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCisgCisgI2lmZGVmIFNI QV8wCistZmlwc19tZF9pbml0KFNIQSkKKytub25maXBzX21kX2luaXQoU0hBKQorICNlbHNlCisg Zmlwc19tZF9pbml0X2N0eChTSEExLCBTSEEpCisgI2VuZGlmCisgCXsKKysjaWYgZGVmaW5lZChT SEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmgwPUlOSVRfREFUQV9o MDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v d2hybHBvb2wvd3BfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vd2hybHBv b2wvd3BfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMJMjAxMi0wMi0w NyAxMTowNzowMi41NTUzOTM4MjMgKzAxMDAKK0BAIC01NSw3ICs1NSw3IEBACisgI2luY2x1ZGUg PG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLWZpcHNfbWRfaW5p dChXSElSTFBPT0wpCisrbm9uZmlwc19tZF9pbml0KFdISVJMUE9PTCkKKyAJeworIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKKyAJcmV0dXJuKDEpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMi9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL01ha2VmaWxlLm9yZwor LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvTWFrZWZpbGUub3JnLmZpcHMJMjAxMi0wMi0wNyAxMTow NzowMi40ODMzOTMyMjMgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL01ha2VmaWxlLm9y ZwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1NTM5MzgyMyArMDEwMAorQEAgLTEzNiw2ICsxMzYsOSBA QCBGSVBTQ0FOTElCPQorIAorIEJBU0VBRERSPQorIAorKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5h YmxlZAorK0ZJUFM9CisrCisgRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRv b2xzCisgRU5HRElSUz0gY2Nnb3N0CisgU0hMSUJESVJTPSBjcnlwdG8gc3NsCitAQCAtMTQ4LDcg KzE1MSw3IEBAIFNESVJTPSAgXAorIAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVu Z2luZSBcCisgCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAorIAlldnAgYXNuMSBw ZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1 IFwKKy0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYworKwljbXMgcHF1ZXVlIHRz IGpwYWtlIHNycCBzdG9yZSBjbWFjIGZpcHMKKyAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92 ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCisgIyBhY2NvcmRpbmcgdG8gbm8teHh4 IGFyZ3VtZW50cy4uLgorIAorQEAgLTIzNyw2ICsyNDAsNyBAQCBCVUlMREVOVj0JUExBVEZPUk09 JyQoUExBVEZPUk0pJyBQUk9DRVNTCisgCQlGSVBTTElCRElSPScke0ZJUFNMSUJESVJ9JwkJCVwK KyAJCUZJUFNESVI9JyR7RklQU0RJUn0nCQkJCVwKKyAJCUZJUFNDQU5MSUI9IiQke0ZJUFNDQU5M SUI6LSQoRklQU0NBTkxJQil9IglcCisrCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAorIAkJ VEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KKyAjIE1B S0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNo IG1ha2UgZmxhdm9ycywKKyAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBp biB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTIvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL3NzbC9zc2xfYWxncy5j CistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvc3NsX2FsZ3MuYy5maXBzCTIwMTItMDEtMTUg MTQ6NDI6NTAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvc3Ns X2FsZ3MuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1NTM5MzgyMyArMDEwMAorQEAgLTY0LDYgKzY0 LDEyIEBACisgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKKyAJeworIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysJaWYgKCFGSVBTX21vZGUoKSkK KysJCXsKKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfY2JjKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkp OworQEAgLTEzNiw2ICsxNDIsNTAgQEAgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKKyAJRVZQ X2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsKKyAj ZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVm IE9QRU5TU0xfTk9fREVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Cisr I2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX0FFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9nY20oKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKysjZW5k aWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CisrCS8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBT IG1vZGUgZm9yIFRMUyBNQUMgKi8KKysJRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKKysJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wyLW1kNSIpOworKwlFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9tZDUsInNzbDMtbWQ1Iik7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NI QQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLworKwlF VlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKKysJRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKKysjZW5k aWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEy MjQoKSk7CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrI2VuZGlmCisrI2lmbmRl ZiBPUEVOU1NMX05PX1NIQTUxMgorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKwlF VlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOworKyNlbmRpZgorKyNpZiAhZGVmaW5lZChPUEVO U1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCisrCUVWUF9hZGRfZGlnZXN0 KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0aCBzaGExICovCisrCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlh cyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FX aXRoU0hBMSwiZHNzMSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKwlF VlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7CisrI2VuZGlmCisrCQl9CisrI2VuZGlmCisgI2lm bmRlZiBPUEVOU1NMX05PX0NPTVAKKyAJLyogVGhpcyB3aWxsIGluaXRpYWxpc2UgdGhlIGJ1aWx0 LWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuCisgCSAgIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBh IFNUQUNLX09GKFNTTF9DT01QKSwgYnV0IHRoYXQgY2FuCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0x LjAuMS1iZXRhMi1pcHY2LWFwcHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEyLWlwdjYtYXBw cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTJmNjBjCi0tLSAv ZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMS1iZXRhMi1pcHY2LWFwcHMucGF0Y2gKQEAgLTAs MCArMSw1MTEgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX2FwcHMuaC5p cHY2LWFwcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3NfYXBwcy5oCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMi9hcHBzL3NfYXBwcy5oLmlwdjYtYXBwcwkyMDEyLTAyLTAyIDEyOjU2OjI3LjIx Njg4OTE5OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX2FwcHMuaAkyMDEy LTAyLTAyIDEyOjU2OjI3LjI1Nzg4OTU1MiArMDEwMAorQEAgLTE0OCw3ICsxNDgsNyBAQCB0eXBl ZGVmIGZkX21hc2sgZmRfc2V0OworICNkZWZpbmUgUE9SVF9TVFIgICAgICAgICI0NDMzIgorICNk ZWZpbmUgUFJPVE9DT0wgICAgICAgICJ0Y3AiCisgCistaW50IGRvX3NlcnZlcihpbnQgcG9ydCwg aW50IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikgKGNoYXIgKmhvc3RuYW1lLCBpbnQgcywgdW5z aWduZWQgY2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIgKmNvbnRleHQpOworK2ludCBkb19z ZXJ2ZXIoY2hhciAqcG9ydCwgaW50IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikgKGNoYXIgKmhv c3RuYW1lLCBpbnQgcywgdW5zaWduZWQgY2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIgKmNv bnRleHQpOworICNpZmRlZiBIRUFERVJfWDUwOV9ICisgaW50IE1TX0NBTExCQUNLIHZlcmlmeV9j YWxsYmFjayhpbnQgb2ssIFg1MDlfU1RPUkVfQ1RYICpjdHgpOworICNlbmRpZgorQEAgLTE1Niwx MCArMTU2LDkgQEAgaW50IE1TX0NBTExCQUNLIHZlcmlmeV9jYWxsYmFjayhpbnQgb2ssCisgaW50 IHNldF9jZXJ0X3N0dWZmKFNTTF9DVFggKmN0eCwgY2hhciAqY2VydF9maWxlLCBjaGFyICprZXlf ZmlsZSk7CisgaW50IHNldF9jZXJ0X2tleV9zdHVmZihTU0xfQ1RYICpjdHgsIFg1MDkgKmNlcnQs IEVWUF9QS0VZICprZXkpOworICNlbmRpZgorLWludCBpbml0X2NsaWVudChpbnQgKnNvY2ssIGNo YXIgKnNlcnZlciwgaW50IHBvcnQsIGludCB0eXBlKTsKKytpbnQgaW5pdF9jbGllbnQoaW50ICpz b2NrLCBjaGFyICpzZXJ2ZXIsIGNoYXIgKnBvcnQsIGludCB0eXBlKTsKKyBpbnQgc2hvdWxkX3Jl dHJ5KGludCBpKTsKKy1pbnQgZXh0cmFjdF9wb3J0KGNoYXIgKnN0ciwgc2hvcnQgKnBvcnRfcHRy KTsKKy1pbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLGNoYXIgKipob3N0X3B0cix1bnNp Z25lZCBjaGFyICppcCxzaG9ydCAqcCk7CisraW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0 cixjaGFyICoqaG9zdF9wdHIsY2hhciAqKnBvcnRfcHRyKTsKKyAKKyBsb25nIE1TX0NBTExCQUNL IGJpb19kdW1wX2NhbGxiYWNrKEJJTyAqYmlvLCBpbnQgY21kLCBjb25zdCBjaGFyICphcmdwLAor IAkJCQkgICBpbnQgYXJnaSwgbG9uZyBhcmdsLCBsb25nIHJldCk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEyL2FwcHMvc19jbGllbnQuYy5pcHY2LWFwcHMgb3BlbnNzbC0xLjAuMS1iZXRh Mi9hcHBzL3NfY2xpZW50LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2FwcHMvc19jbGllbnQu Yy5pcHY2LWFwcHMJMjAxMi0wMi0wMiAxMjo1NjoyNy4yMzg4ODkzODggKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xLWJldGEyL2FwcHMvc19jbGllbnQuYwkyMDEyLTAyLTAyIDEyOjU2OjI3LjI1ODg4 OTU2MSArMDEwMAorQEAgLTU2Myw3ICs1NjMsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCisgCWludCBjYnVmX2xlbixjYnVmX29mZjsKKyAJaW50IHNidWZfbGVuLHNidWZfb2Zm OworIAlmZF9zZXQgcmVhZGZkcyx3cml0ZWZkczsKKy0Jc2hvcnQgcG9ydD1QT1JUOworKwljaGFy ICpwb3J0X3N0ciA9IFBPUlRfU1RSOworIAlpbnQgZnVsbF9sb2c9MTsKKyAJY2hhciAqaG9zdD1T U0xfSE9TVF9OQU1FOworIAljaGFyICpjZXJ0X2ZpbGU9TlVMTCwqa2V5X2ZpbGU9TlVMTDsKK0BA IC02NzAsMTMgKzY3MCwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQll bHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1wb3J0IikgPT0gMCkKKyAJCQl7CisgCQkJaWYgKC0tYXJn YyA8IDEpIGdvdG8gYmFkOworLQkJCXBvcnQ9YXRvaSgqKCsrYXJndikpOworLQkJCWlmIChwb3J0 ID09IDApIGdvdG8gYmFkOworKwkJCXBvcnRfc3RyPSAqKCsrYXJndik7CisgCQkJfQorIAkJZWxz ZSBpZiAoc3RyY21wKCphcmd2LCItY29ubmVjdCIpID09IDApCisgCQkJeworIAkJCWlmICgtLWFy Z2MgPCAxKSBnb3RvIGJhZDsKKy0JCQlpZiAoIWV4dHJhY3RfaG9zdF9wb3J0KCooKythcmd2KSwm aG9zdCxOVUxMLCZwb3J0KSkKKysJCQlpZiAoIWV4dHJhY3RfaG9zdF9wb3J0KCooKythcmd2KSwm aG9zdCwmcG9ydF9zdHIpKQorIAkJCQlnb3RvIGJhZDsKKyAJCQl9CisgCQllbHNlIGlmCShzdHJj bXAoKmFyZ3YsIi12ZXJpZnkiKSA9PSAwKQorQEAgLTEyNjAsNyArMTI1OSw3IEBAIGJhZDoKKyAK KyByZV9zdGFydDoKKyAKKy0JaWYgKGluaXRfY2xpZW50KCZzLGhvc3QscG9ydCxzb2NrZXRfdHlw ZSkgPT0gMCkKKysJaWYgKGluaXRfY2xpZW50KCZzLGhvc3QscG9ydF9zdHIsc29ja2V0X3R5cGUp ID09IDApCisgCQl7CisgCQlCSU9fcHJpbnRmKGJpb19lcnIsImNvbm5lY3Q6ZXJybm89JWRcbiIs Z2V0X2xhc3Rfc29ja2V0X2Vycm9yKCkpOworIAkJU0hVVERPV04ocyk7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2FwcHMvc19zZXJ2ZXIuYy5pcHY2LWFwcHMgb3BlbnNzbC0xLjAuMS1i ZXRhMi9hcHBzL3Nfc2VydmVyLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2FwcHMvc19zZXJ2 ZXIuYy5pcHY2LWFwcHMJMjAxMi0wMi0wMiAxMjo1NjoyNy4yMzk4ODkzOTcgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xLWJldGEyL2FwcHMvc19zZXJ2ZXIuYwkyMDEyLTAyLTAyIDEyOjU2OjI3LjI1 OTg4OTU3MCArMDEwMAorQEAgLTkyOSw3ICs5MjksNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorIAl7CisgCVg1MDlfVkVSSUZZX1BBUkFNICp2cG0gPSBOVUxMOworIAlpbnQg YmFkYXJnID0gMDsKKy0Jc2hvcnQgcG9ydD1QT1JUOworKwljaGFyICpwb3J0X3N0ciA9IFBPUlRf U1RSOworIAljaGFyICpDQXBhdGg9TlVMTCwqQ0FmaWxlPU5VTEw7CisgCXVuc2lnbmVkIGNoYXIg KmNvbnRleHQgPSBOVUxMOworIAljaGFyICpkaGZpbGUgPSBOVUxMOworQEAgLTEwMTAsOCArMTAx MCw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQkJIChzdHJjbXAoKmFy Z3YsIi1hY2NlcHQiKSA9PSAwKSkKKyAJCQl7CisgCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFk OworLQkJCWlmICghZXh0cmFjdF9wb3J0KCooKythcmd2KSwmcG9ydCkpCistCQkJCWdvdG8gYmFk OworKwkJCXBvcnRfc3RyPSAqKCsrYXJndik7CisgCQkJfQorIAkJZWxzZSBpZgkoc3RyY21wKCph cmd2LCItdmVyaWZ5IikgPT0gMCkKKyAJCQl7CitAQCAtMTg4OCw5ICsxODg3LDkgQEAgYmFkOgor IAlCSU9fcHJpbnRmKGJpb19zX291dCwiQUNDRVBUXG4iKTsKKyAJKHZvaWQpQklPX2ZsdXNoKGJp b19zX291dCk7CisgCWlmICh3d3cpCistCQlkb19zZXJ2ZXIocG9ydCxzb2NrZXRfdHlwZSwmYWNj ZXB0X3NvY2tldCx3d3dfYm9keSwgY29udGV4dCk7CisrCQlkb19zZXJ2ZXIocG9ydF9zdHIsc29j a2V0X3R5cGUsJmFjY2VwdF9zb2NrZXQsd3d3X2JvZHksIGNvbnRleHQpOworIAllbHNlCistCQlk b19zZXJ2ZXIocG9ydCxzb2NrZXRfdHlwZSwmYWNjZXB0X3NvY2tldCxzdl9ib2R5LCBjb250ZXh0 KTsKKysJCWRvX3NlcnZlcihwb3J0X3N0cixzb2NrZXRfdHlwZSwmYWNjZXB0X3NvY2tldCxzdl9i b2R5LCBjb250ZXh0KTsKKyAJcHJpbnRfc3RhdHMoYmlvX3Nfb3V0LGN0eCk7CisgCXJldD0wOwor IGVuZDoKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3NvY2tldC5jLmlwdjYt YXBwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2FwcHMvc19zb2NrZXQuYworLS0tIG9wZW5zc2wtMS4w LjEtYmV0YTIvYXBwcy9zX3NvY2tldC5jLmlwdjYtYXBwcwkyMDExLTEyLTAyIDE1OjM5OjQwLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3NvY2tldC5jCTIw MTItMDEtMTkgMTQ6NTM6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTAyLDkgKzEwMiw3IEBAIHN0 YXRpYyBzdHJ1Y3QgaG9zdGVudCAqR2V0SG9zdEJ5TmFtZShjaGEKKyBzdGF0aWMgdm9pZCBzc2xf c29ja19jbGVhbnVwKHZvaWQpOworICNlbmRpZgorIHN0YXRpYyBpbnQgc3NsX3NvY2tfaW5pdCh2 b2lkKTsKKy1zdGF0aWMgaW50IGluaXRfY2xpZW50X2lwKGludCAqc29jayx1bnNpZ25lZCBjaGFy IGlwWzRdLCBpbnQgcG9ydCwgaW50IHR5cGUpOworLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXIoaW50 ICpzb2NrLCBpbnQgcG9ydCwgaW50IHR5cGUpOworLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXJfbG9u ZyhpbnQgKnNvY2ssIGludCBwb3J0LGNoYXIgKmlwLCBpbnQgdHlwZSk7Cisrc3RhdGljIGludCBp bml0X3NlcnZlcihpbnQgKnNvY2ssIGNoYXIgKnBvcnQsIGludCB0eXBlKTsKKyBzdGF0aWMgaW50 IGRvX2FjY2VwdChpbnQgYWNjX3NvY2ssIGludCAqc29jaywgY2hhciAqKmhvc3QpOworIHN0YXRp YyBpbnQgaG9zdF9pcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgaXBbNF0pOworIAorQEAgLTIz NCw1NyArMjMyLDcwIEBAIHN0YXRpYyBpbnQgc3NsX3NvY2tfaW5pdCh2b2lkKQorIAlyZXR1cm4o MSk7CisgCX0KKyAKKy1pbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpob3N0LCBpbnQg cG9ydCwgaW50IHR5cGUpCisraW50IGluaXRfY2xpZW50KGludCAqc29jaywgY2hhciAqaG9zdCwg Y2hhciAqcG9ydCwgaW50IHR5cGUpCisgCXsKKy0JdW5zaWduZWQgY2hhciBpcFs0XTsKKy0KKy0J bWVtc2V0KGlwLCAnXDAnLCBzaXplb2YgaXApOworLQlpZiAoIWhvc3RfaXAoaG9zdCwmKGlwWzBd KSkpCistCQlyZXR1cm4gMDsKKy0JcmV0dXJuIGluaXRfY2xpZW50X2lwKHNvY2ssaXAscG9ydCx0 eXBlKTsKKy0JfQorLQorLXN0YXRpYyBpbnQgaW5pdF9jbGllbnRfaXAoaW50ICpzb2NrLCB1bnNp Z25lZCBjaGFyIGlwWzRdLCBpbnQgcG9ydCwgaW50IHR5cGUpCistCXsKKy0JdW5zaWduZWQgbG9u ZyBhZGRyOworLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gdGhlbTsKKy0JaW50IHMsaTsKKysJc3RydWN0 IGFkZHJpbmZvICpyZXMsICpyZXMwLCBoaW50czsKKysJY2hhciAqIGZhaWxlZF9jYWxsID0gTlVM TDsKKysJaW50IHM7CisrCWludCBlOworIAorIAlpZiAoIXNzbF9zb2NrX2luaXQoKSkgcmV0dXJu KDApOworIAorLQltZW1zZXQoKGNoYXIgKikmdGhlbSwwLHNpemVvZih0aGVtKSk7CistCXRoZW0u c2luX2ZhbWlseT1BRl9JTkVUOworLQl0aGVtLnNpbl9wb3J0PWh0b25zKCh1bnNpZ25lZCBzaG9y dClwb3J0KTsKKy0JYWRkcj0odW5zaWduZWQgbG9uZykKKy0JCSgodW5zaWduZWQgbG9uZylpcFsw XTw8MjRMKXwKKy0JCSgodW5zaWduZWQgbG9uZylpcFsxXTw8MTZMKXwKKy0JCSgodW5zaWduZWQg bG9uZylpcFsyXTw8IDhMKXwKKy0JCSgodW5zaWduZWQgbG9uZylpcFszXSk7CistCXRoZW0uc2lu X2FkZHIuc19hZGRyPWh0b25sKGFkZHIpOworLQorLQlpZiAodHlwZSA9PSBTT0NLX1NUUkVBTSkK Ky0JCXM9c29ja2V0KEFGX0lORVQsU09DS19TVFJFQU0sU09DS0VUX1BST1RPQ09MKTsKKy0JZWxz ZSAvKiAoIHR5cGUgPT0gU09DS19ER1JBTSkgKi8KKy0JCXM9c29ja2V0KEFGX0lORVQsU09DS19E R1JBTSxJUFBST1RPX1VEUCk7CistCQkJCistCWlmIChzID09IElOVkFMSURfU09DS0VUKSB7IHBl cnJvcigic29ja2V0Iik7IHJldHVybigwKTsgfQorKwltZW1zZXQoJmhpbnRzLCAnXDAnLCBzaXpl b2YoaGludHMpKTsKKysJaGludHMuYWlfc29ja3R5cGUgPSB0eXBlOworKwloaW50cy5haV9mbGFn cyA9IEFJX0FERFJDT05GSUc7CisrCisrCWUgPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGlu dHMsICZyZXMpOworKwlpZiAoZSkKKysJeworKwkJZnByaW50ZihzdGRlcnIsICJnZXRhZGRyaW5m bzogJXNcbiIsIGdhaV9zdHJlcnJvcihlKSk7CisrCQlpZiAoZSA9PSBFQUlfU1lTVEVNKQorKwkJ CXBlcnJvcigiZ2V0YWRkcmluZm8iKTsKKysJCXJldHVybiAoMCk7CisrCQl9CisgCisrCXJlczAg PSByZXM7CisrCXdoaWxlIChyZXMpCisrCQl7CisrCQlzID0gc29ja2V0KHJlcy0+YWlfZmFtaWx5 LCByZXMtPmFpX3NvY2t0eXBlLCByZXMtPmFpX3Byb3RvY29sKTsKKysJCWlmIChzID09IElOVkFM SURfU09DS0VUKQorKwkJCXsKKysJCQlmYWlsZWRfY2FsbCA9ICJzb2NrZXQiOworKwkJCWdvdG8g bmV4dHJlczsKKysJCQl9CisgI2lmIGRlZmluZWQoU09fS0VFUEFMSVZFKSAmJiAhZGVmaW5lZChP UEVOU1NMX1NZU19NUEUpCisgCWlmICh0eXBlID09IFNPQ0tfU1RSRUFNKQorIAkJeworLQkJaT0w OworLQkJaT1zZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCxTT19LRUVQQUxJVkUsKGNoYXIgKikmaSxz aXplb2YoaSkpOworLQkJaWYgKGkgPCAwKSB7IHBlcnJvcigia2VlcGFsaXZlIik7IHJldHVybigw KTsgfQorKwkJCWludCBpPTA7CisrCQkJaT1zZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCxTT19LRUVQ QUxJVkUsCisrCQkJCShjaGFyICopJmksc2l6ZW9mKGkpKTsKKysJCQlpZiAoaSA8IDApIHsKKysJ CQkJZmFpbGVkX2NhbGwgPSAia2VlcGFsaXZlIjsKKysJCQkJZ290byBuZXh0cmVzOworKwkJCQl9 CisgCQl9CisgI2VuZGlmCistCistCWlmIChjb25uZWN0KHMsKHN0cnVjdCBzb2NrYWRkciAqKSZ0 aGVtLHNpemVvZih0aGVtKSkgPT0gLTEpCistCQl7IGNsb3Nlc29ja2V0KHMpOyBwZXJyb3IoImNv bm5lY3QiKTsgcmV0dXJuKDApOyB9CisrCQlpZiAoY29ubmVjdChzLChzdHJ1Y3Qgc29ja2FkZHIg KilyZXMtPmFpX2FkZHIsCisrCQkJcmVzLT5haV9hZGRybGVuKSA9PSAwKQorKwkJCXsKKysJCQlm cmVlYWRkcmluZm8ocmVzMCk7CisgCSpzb2NrPXM7CisgCXJldHVybigxKTsKKyAJfQorIAorLWlu dCBkb19zZXJ2ZXIoaW50IHBvcnQsIGludCB0eXBlLCBpbnQgKnJldCwgaW50ICgqY2IpKGNoYXIg Kmhvc3RuYW1lLCBpbnQgcywgdW5zaWduZWQgY2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIg KmNvbnRleHQpCisrCQlmYWlsZWRfY2FsbCA9ICJzb2NrZXQiOworK25leHRyZXM6CisrCQlpZiAo cyAhPSBJTlZBTElEX1NPQ0tFVCkKKysJCQljbG9zZShzKTsKKysJCXJlcyA9IHJlcy0+YWlfbmV4 dDsKKysJCX0KKysJZnJlZWFkZHJpbmZvKHJlczApOworKworKwlwZXJyb3IoZmFpbGVkX2NhbGwp OworKwlyZXR1cm4oMCk7CisrCX0KKysKKytpbnQgZG9fc2VydmVyKGNoYXIgKnBvcnQsIGludCB0 eXBlLCBpbnQgKnJldCwgaW50ICgqY2IpKGNoYXIgKmhvc3RuYW1lLCBpbnQgcywgdW5zaWduZWQg Y2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIgKmNvbnRleHQpCisgCXsKKyAJaW50IHNvY2s7 CisgCWNoYXIgKm5hbWUgPSBOVUxMOworQEAgLTMyMiwzMyArMzMzLDQ1IEBAIGludCBkb19zZXJ2 ZXIoaW50IHBvcnQsIGludCB0eXBlLCBpbnQgKnIKKyAJCX0KKyAJfQorIAorLXN0YXRpYyBpbnQg aW5pdF9zZXJ2ZXJfbG9uZyhpbnQgKnNvY2ssIGludCBwb3J0LCBjaGFyICppcCwgaW50IHR5cGUp Cisrc3RhdGljIGludCBpbml0X3NlcnZlcihpbnQgKnNvY2ssIGNoYXIgKnBvcnQsIGludCB0eXBl KQorIAl7CistCWludCByZXQ9MDsKKy0Jc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcjsKKy0JaW50 IHM9IC0xOworKwlzdHJ1Y3QgYWRkcmluZm8gKnJlcywgKnJlczAgPSBOVUxMLCBoaW50czsKKysJ Y2hhciAqIGZhaWxlZF9jYWxsID0gTlVMTDsKKysJaW50IHM7CisrCWludCBlOworIAorIAlpZiAo IXNzbF9zb2NrX2luaXQoKSkgcmV0dXJuKDApOworIAorLQltZW1zZXQoKGNoYXIgKikmc2VydmVy LDAsc2l6ZW9mKHNlcnZlcikpOworLQlzZXJ2ZXIuc2luX2ZhbWlseT1BRl9JTkVUOworLQlzZXJ2 ZXIuc2luX3BvcnQ9aHRvbnMoKHVuc2lnbmVkIHNob3J0KXBvcnQpOworLQlpZiAoaXAgPT0gTlVM TCkKKy0JCXNlcnZlci5zaW5fYWRkci5zX2FkZHI9SU5BRERSX0FOWTsKKy0JZWxzZQorLS8qIEFk ZGVkIGZvciBUM0UsIGFkZHJlc3Mtb2YgZmFpbHMgb24gYml0IGZpZWxkIChiZWNrbWFuQGFjbC5s YW5sLmdvdikgKi8KKy0jaWZuZGVmIEJJVF9GSUVMRF9MSU1JVFMKKy0JCW1lbWNweSgmc2VydmVy LnNpbl9hZGRyLnNfYWRkcixpcCw0KTsKKy0jZWxzZQorLQkJbWVtY3B5KCZzZXJ2ZXIuc2luX2Fk ZHIsaXAsNCk7CistI2VuZGlmCisrCW1lbXNldCgmaGludHMsICdcMCcsIHNpemVvZihoaW50cykp OworKyAgICAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrdHJ5aXB2NDoKKysJaGlu dHMuYWlfc29ja3R5cGUgPSB0eXBlOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBB SV9BRERSQ09ORklHOworIAkKKy0JCWlmICh0eXBlID09IFNPQ0tfU1RSRUFNKQorLQkJCXM9c29j a2V0KEFGX0lORVQsU09DS19TVFJFQU0sU09DS0VUX1BST1RPQ09MKTsKKy0JCWVsc2UgLyogdHlw ZSA9PSBTT0NLX0RHUkFNICovCistCQkJcz1zb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSxJUFBS T1RPX1VEUCk7CisrCWUgPSBnZXRhZGRyaW5mbyhOVUxMLCBwb3J0LCAmaGludHMsICZyZXMpOwor KwlpZiAoZSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiZ2V0YWRkcmluZm86ICVzXG4iLCBn YWlfc3RyZXJyb3IoZSkpOworKwkJaWYgKGUgPT0gRUFJX1NZU1RFTSkKKysJCQlwZXJyb3IoImdl dGFkZHJpbmZvIik7CisrCQlyZXR1cm4gKDApOworKwkJfQorIAorLQlpZiAocyA9PSBJTlZBTElE X1NPQ0tFVCkgZ290byBlcnI7CisrCXJlczAgPSByZXM7CisrCXdoaWxlIChyZXMpCisrCQl7Cisr CQlzID0gc29ja2V0KHJlcy0+YWlfZmFtaWx5LCByZXMtPmFpX3NvY2t0eXBlLCByZXMtPmFpX3By b3RvY29sKTsKKysJCWlmIChzID09IElOVkFMSURfU09DS0VUKQorKwkJCXsKKysJCQlmYWlsZWRf Y2FsbCA9ICJzb2NrZXQiOworKwkJCWdvdG8gbmV4dHJlczsKKysJCQl9CisrCQlpZiAoaGludHMu YWlfZmFtaWx5ID09IEFGX0lORVQ2KQorKwkJCXsKKysJCQlpbnQgaiA9IDA7CisrCQkJc2V0c29j a29wdChzLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLAorKwkJCQkgICAodm9pZCAqKSAmaiwg c2l6ZW9mIGopOworKwkJCX0KKyAjaWYgZGVmaW5lZCBTT0xfU09DS0VUICYmIGRlZmluZWQgU09f UkVVU0VBRERSCisgCQl7CisgCQlpbnQgaiA9IDE7CitAQCAtMzU2LDM1ICszNzksNDkgQEAgc3Rh dGljIGludCBpbml0X3NlcnZlcl9sb25nKGludCAqc29jaywgaQorIAkJCSAgICh2b2lkICopICZq LCBzaXplb2Ygaik7CisgCQl9CisgI2VuZGlmCistCWlmIChiaW5kKHMsKHN0cnVjdCBzb2NrYWRk ciAqKSZzZXJ2ZXIsc2l6ZW9mKHNlcnZlcikpID09IC0xKQorKworKwkJaWYgKGJpbmQocywoc3Ry dWN0IHNvY2thZGRyICopcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pID09IC0xKQorIAkJ eworLSNpZm5kZWYgT1BFTlNTTF9TWVNfV0lORE9XUworLQkJcGVycm9yKCJiaW5kIik7CistI2Vu ZGlmCistCQlnb3RvIGVycjsKKysJCQlmYWlsZWRfY2FsbCA9ICJiaW5kIjsKKysJCQlnb3RvIG5l eHRyZXM7CisgCQl9CistCS8qIE1ha2UgaXQgMTI4IGZvciBsaW51eCAqLworLQlpZiAodHlwZT09 U09DS19TVFJFQU0gJiYgbGlzdGVuKHMsMTI4KSA9PSAtMSkgZ290byBlcnI7CistCSpzb2NrPXM7 CistCXJldD0xOworLWVycjoKKy0JaWYgKChyZXQgPT0gMCkgJiYgKHMgIT0gLTEpKQorKwkJaWYg KHR5cGU9PVNPQ0tfU1RSRUFNICYmIGxpc3RlbihzLDEyOCkgPT0gLTEpCisgCQl7CistCQlTSFVU RE9XTihzKTsKKysJCQlmYWlsZWRfY2FsbCA9ICJsaXN0ZW4iOworKwkJCWdvdG8gbmV4dHJlczsK KyAJCX0KKy0JcmV0dXJuKHJldCk7CisrCisrCQkqc29jaz1zOworKwkJcmV0dXJuKDEpOworKwor K25leHRyZXM6CisrCQlpZiAocyAhPSBJTlZBTElEX1NPQ0tFVCkKKysJCQljbG9zZShzKTsKKysJ CXJlcyA9IHJlcy0+YWlfbmV4dDsKKyAJfQorKwlpZiAocmVzMCkKKysJCWZyZWVhZGRyaW5mbyhy ZXMwKTsKKyAKKy1zdGF0aWMgaW50IGluaXRfc2VydmVyKGludCAqc29jaywgaW50IHBvcnQsIGlu dCB0eXBlKQorKwlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKKyAJeworLQlyZXR1cm4oaW5pdF9z ZXJ2ZXJfbG9uZyhzb2NrLCBwb3J0LCBOVUxMLCB0eXBlKSk7CisrCQlpZiAoaGludHMuYWlfZmFt aWx5ID09IEFGX0lORVQ2KQorKwkJeworKwkJCWhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ7Cisr CQkJZ290byB0cnlpcHY0OworKwkJfQorKwkJcGVycm9yKCJzb2NrZXQiKTsKKysJCXJldHVybigw KTsKKysJfQorKworKwlwZXJyb3IoZmFpbGVkX2NhbGwpOworKwlyZXR1cm4oMCk7CisgCX0KKyAK KyBzdGF0aWMgaW50IGRvX2FjY2VwdChpbnQgYWNjX3NvY2ssIGludCAqc29jaywgY2hhciAqKmhv c3QpCisgCXsKKysJc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGZyb207CisrCWNoYXIg YnVmZmVyW05JX01BWEhPU1RdOworIAlpbnQgcmV0OworLQlzdHJ1Y3QgaG9zdGVudCAqaDEsKmgy OworLQlzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGZyb207CisgCWludCBsZW47CisgLyoJc3Ry dWN0IGxpbmdlciBsaW5nOyAqLworIAorQEAgLTQzMSwxMzUgKzQ2OCw1OCBAQCByZWRvaXQ6Cisg Ki8KKyAKKyAJaWYgKGhvc3QgPT0gTlVMTCkgZ290byBlbmQ7CistI2lmbmRlZiBCSVRfRklFTERf TElNSVRTCistCS8qIEkgc2hvdWxkIHVzZSBXU0FBc3luY0dldEhvc3RCeU5hbWUoKSB1bmRlciB3 aW5kb3dzICovCistCWgxPWdldGhvc3RieWFkZHIoKGNoYXIgKikmZnJvbS5zaW5fYWRkci5zX2Fk ZHIsCistCQlzaXplb2YoZnJvbS5zaW5fYWRkci5zX2FkZHIpLEFGX0lORVQpOworLSNlbHNlCist CWgxPWdldGhvc3RieWFkZHIoKGNoYXIgKikmZnJvbS5zaW5fYWRkciwKKy0JCXNpemVvZihzdHJ1 Y3QgaW5fYWRkciksQUZfSU5FVCk7CistI2VuZGlmCistCWlmIChoMSA9PSBOVUxMKQorKworKwlp ZiAoZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCBzaXplb2YoZnJvbSksCisr CQlidWZmZXIsIHNpemVvZihidWZmZXIpLAorKwkJTlVMTCwgMCwgMCkpCisgCQl7CistCQlCSU9f cHJpbnRmKGJpb19lcnIsImJhZCBnZXRob3N0YnlhZGRyXG4iKTsKKysJCUJJT19wcmludGYoYmlv X2VyciwiZ2V0bmFtZWluZm8gZmFpbGVkXG4iKTsKKyAJCSpob3N0PU5VTEw7CisgCQkvKiByZXR1 cm4oMCk7ICovCisgCQl9CisgCWVsc2UKKyAJCXsKKy0JCWlmICgoKmhvc3Q9KGNoYXIgKilPUEVO U1NMX21hbGxvYyhzdHJsZW4oaDEtPmhfbmFtZSkrMSkpID09IE5VTEwpCisrCQlpZiAoKCpob3N0 PShjaGFyICopT1BFTlNTTF9tYWxsb2Moc3RybGVuKGJ1ZmZlcikrMSkpID09IE5VTEwpCisgCQkJ eworIAkJCXBlcnJvcigiT1BFTlNTTF9tYWxsb2MiKTsKKyAJCQlyZXR1cm4oMCk7CisgCQkJfQor LQkJQlVGX3N0cmxjcHkoKmhvc3QsaDEtPmhfbmFtZSxzdHJsZW4oaDEtPmhfbmFtZSkrMSk7Cist CistCQloMj1HZXRIb3N0QnlOYW1lKCpob3N0KTsKKy0JCWlmIChoMiA9PSBOVUxMKQorLQkJCXsK Ky0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldGhvc3RieW5hbWUgZmFpbHVyZVxuIik7CistCQkJ cmV0dXJuKDApOworLQkJCX0KKy0JCWlmIChoMi0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKQorLQkJ CXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldGhvc3RieW5hbWUgYWRkciBpcyBub3QgQUZf SU5FVFxuIik7CistCQkJcmV0dXJuKDApOworLQkJCX0KKysJCXN0cmNweSgqaG9zdCwgYnVmZmVy KTsKKyAJCX0KKyBlbmQ6CisgCSpzb2NrPXJldDsKKyAJcmV0dXJuKDEpOworIAl9CisgCistaW50 IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0ciwgY2hhciAqKmhvc3RfcHRyLCB1bnNpZ25lZCBj aGFyICppcCwKKy0JICAgICBzaG9ydCAqcG9ydF9wdHIpCisraW50IGV4dHJhY3RfaG9zdF9wb3J0 KGNoYXIgKnN0ciwgY2hhciAqKmhvc3RfcHRyLCAKKysJICAgICBjaGFyICoqcG9ydF9wdHIpCisg CXsKKy0JY2hhciAqaCwqcDsKKysJY2hhciAqaCwqcCwqeDsKKyAKKy0JaD1zdHI7CistCXA9c3Ry Y2hyKHN0ciwnOicpOworKwl4PWg9c3RyOworKwlpZiAoKmggPT0gJ1snKQorKwkJeworKwkJaCsr OworKwkJcD1zdHJjaHIoaCwnXScpOworIAlpZiAocCA9PSBOVUxMKQorIAkJeworLQkJQklPX3By aW50ZihiaW9fZXJyLCJubyBwb3J0IGRlZmluZWRcbiIpOworKwkJCUJJT19wcmludGYoYmlvX2Vy ciwibm8gZW5kaW5nIGJyYWNrZXQgZm9yIElQdjYgYWRkcmVzc1xuIik7CisgCQlyZXR1cm4oMCk7 CisgCQl9CisgCSoocCsrKT0nXDAnOworLQorLQlpZiAoKGlwICE9IE5VTEwpICYmICFob3N0X2lw KHN0cixpcCkpCistCQlnb3RvIGVycjsKKy0JaWYgKGhvc3RfcHRyICE9IE5VTEwpICpob3N0X3B0 cj1oOworLQorLQlpZiAoIWV4dHJhY3RfcG9ydChwLHBvcnRfcHRyKSkKKy0JCWdvdG8gZXJyOwor LQlyZXR1cm4oMSk7CistZXJyOgorLQlyZXR1cm4oMCk7CisrCQl4ID0gcDsKKyAJfQorLQorLXN0 YXRpYyBpbnQgaG9zdF9pcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgaXBbNF0pCistCXsKKy0J dW5zaWduZWQgaW50IGluWzRdOyAKKy0JaW50IGk7CistCistCWlmIChzc2NhbmYoc3RyLCIldS4l dS4ldS4ldSIsJihpblswXSksJihpblsxXSksJihpblsyXSksJihpblszXSkpID09IDQpCistCQl7 CistCQlmb3IgKGk9MDsgaTw0OyBpKyspCistCQkJaWYgKGluW2ldID4gMjU1KQorLQkJCQl7Cist CQkJCUJJT19wcmludGYoYmlvX2VyciwiaW52YWxpZCBJUCBhZGRyZXNzXG4iKTsKKy0JCQkJZ290 byBlcnI7CistCQkJCX0KKy0JCWlwWzBdPWluWzBdOworLQkJaXBbMV09aW5bMV07CistCQlpcFsy XT1pblsyXTsKKy0JCWlwWzNdPWluWzNdOworLQkJfQorLQllbHNlCistCQl7IC8qIGRvIGEgZ2V0 aG9zdGJ5bmFtZSAqLworLQkJc3RydWN0IGhvc3RlbnQgKmhlOworLQorLQkJaWYgKCFzc2xfc29j a19pbml0KCkpIHJldHVybigwKTsKKy0KKy0JCWhlPUdldEhvc3RCeU5hbWUoc3RyKTsKKy0JCWlm IChoZSA9PSBOVUxMKQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldGhvc3RieW5h bWUgZmFpbHVyZVxuIik7CistCQkJZ290byBlcnI7CistCQkJfQorLQkJLyogY2FzdCB0byBzaG9y dCBiZWNhdXNlIG9mIHdpbjE2IHdpbnNvY2sgZGVmaW5pdGlvbiAqLworLQkJaWYgKChzaG9ydClo ZS0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKQorKwlwPXN0cmNocih4LCc6Jyk7CisrCWlmIChwID09 IE5VTEwpCisgCQkJeworLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBhZGRy IGlzIG5vdCBBRl9JTkVUXG4iKTsKKy0JCQlyZXR1cm4oMCk7CistCQkJfQorLQkJaXBbMF09aGUt PmhfYWRkcl9saXN0WzBdWzBdOworLQkJaXBbMV09aGUtPmhfYWRkcl9saXN0WzBdWzFdOworLQkJ aXBbMl09aGUtPmhfYWRkcl9saXN0WzBdWzJdOworLQkJaXBbM109aGUtPmhfYWRkcl9saXN0WzBd WzNdOworLQkJfQorLQlyZXR1cm4oMSk7CistZXJyOgorKwkJQklPX3ByaW50ZihiaW9fZXJyLCJu byBwb3J0IGRlZmluZWRcbiIpOworIAlyZXR1cm4oMCk7CisgCX0KKysJKihwKyspPSdcMCc7Cisg CistaW50IGV4dHJhY3RfcG9ydChjaGFyICpzdHIsIHNob3J0ICpwb3J0X3B0cikKKy0JeworLQlp bnQgaTsKKy0Jc3RydWN0IHNlcnZlbnQgKnM7CisrCWlmIChob3N0X3B0ciAhPSBOVUxMKSAqaG9z dF9wdHI9aDsKKysJaWYgKHBvcnRfcHRyICE9IE5VTEwpICpwb3J0X3B0cj1wOworIAorLQlpPWF0 b2koc3RyKTsKKy0JaWYgKGkgIT0gMCkKKy0JCSpwb3J0X3B0cj0odW5zaWduZWQgc2hvcnQpaTsK Ky0JZWxzZQorLQkJeworLQkJcz1nZXRzZXJ2YnluYW1lKHN0ciwidGNwIik7CistCQlpZiAocyA9 PSBOVUxMKQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldHNlcnZieW5hbWUgZmFp bHVyZSBmb3IgJXNcbiIsc3RyKTsKKy0JCQlyZXR1cm4oMCk7CistCQkJfQorLQkJKnBvcnRfcHRy PW50b2hzKCh1bnNpZ25lZCBzaG9ydClzLT5zX3BvcnQpOworLQkJfQorIAlyZXR1cm4oMSk7Cisg CX0KKyAKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xLWJldGEyLW5vLXNycC5wYXRjaCBiL29w ZW5zc2wtMS4wLjEtYmV0YTItbm8tc3JwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjQ2YjQ2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xLWJldGEy LW5vLXNycC5wYXRjaApAQCAtMCwwICsxLDgwIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEyL2FwcHMvcHJvZ3MucGwubm8tc3JwIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wcm9ncy5w bAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wcm9ncy5wbC5uby1zcnAJMjAwOS0wNi0z MCAxNzowODozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2FwcHMv cHJvZ3MucGwJMjAxMi0wMi0wNyAwMToxNDowOC45Nzk3NTgzMDcgKzAxMDAKK0BAIC01MSw2ICs1 MSw4IEBAIGZvcmVhY2ggKEBBUkdWKQorIAkJeyBwcmludCAiI2lmbmRlZiBPUEVOU1NMX05PX0NN U1xuJHtzdHJ9I2VuZGlmXG4iOyB9CisgCWVsc2lmICggKCRfID1+IC9eb2NzcCQvKSkKKyAJCXsg cHJpbnQgIiNpZm5kZWYgT1BFTlNTTF9OT19PQ1NQXG4ke3N0cn0jZW5kaWZcbiI7IH0KKysJZWxz aWYgKCAoJF8gPX4gL15zcnAkLykpCisrCQl7IHByaW50ICIjaWZuZGVmIE9QRU5TU0xfTk9fU1JQ XG4ke3N0cn0jZW5kaWZcbiI7IH0KKyAJZWxzZQorIAkJeyBwcmludCAkc3RyOyB9CisgCX0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3NlcnZlci5jLm5vLXNycCBvcGVuc3Ns LTEuMC4xLWJldGEyL2FwcHMvc19zZXJ2ZXIuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBw cy9zX3NlcnZlci5jLm5vLXNycAkyMDEyLTAyLTA3IDAxOjA0OjEyLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3NlcnZlci5jCTIwMTItMDItMDcgMDE6MTM6 MjEuNTczMzYyMzEwICswMTAwCitAQCAtMjI0OCw2ICsyMjQ4LDcgQEAgc3RhdGljIGludCBzdl9i b2R5KGNoYXIgKmhvc3RuYW1lLCBpbnQgcworIHsgc3RhdGljIGNvdW50PTA7IGlmICgrK2NvdW50 ID09IDEwMCkgeyBjb3VudD0wOyBTU0xfcmVuZWdvdGlhdGUoY29uKTsgfSB9CisgI2VuZGlmCisg CQkJCWs9U1NMX3dyaXRlKGNvbiwmKGJ1ZltsXSksKHVuc2lnbmVkIGludClpKTsKKysjaWZuZGVm IE9QRU5TU0xfTk9fU1JQCisgCQkJCXdoaWxlIChTU0xfZ2V0X2Vycm9yKGNvbixrKSA9PSBTU0xf RVJST1JfV0FOVF9YNTA5X0xPT0tVUCkKKyAJCQkJCXsKKyAJCQkJCUJJT19wcmludGYoYmlvX3Nf b3V0LCJMT09LVVAgcmVuZWdvIGR1cmluZyB3cml0ZVxuIik7CitAQCAtMjI1OCw2ICsyMjU5LDcg QEAgc3RhdGljIGludCBzdl9ib2R5KGNoYXIgKmhvc3RuYW1lLCBpbnQgcworIAkJCQkJCUJJT19w cmludGYoYmlvX3Nfb3V0LCJMT09LVVAgbm90IHN1Y2Nlc3NmdWxcbiIpOworIAkJCQkJCWs9U1NM X3dyaXRlKGNvbiwmKGJ1ZltsXSksKHVuc2lnbmVkIGludClpKTsKKyAJCQkJCX0KKysjZW5kaWYK KyAJCQkJc3dpdGNoIChTU0xfZ2V0X2Vycm9yKGNvbixrKSkKKyAJCQkJCXsKKyAJCQkJY2FzZSBT U0xfRVJST1JfTk9ORToKK0BAIC0yMzA1LDYgKzIzMDcsNyBAQCBzdGF0aWMgaW50IHN2X2JvZHko Y2hhciAqaG9zdG5hbWUsIGludCBzCisgCQkJCXsKKyBhZ2FpbjoJCisgCQkJCWk9U1NMX3JlYWQo Y29uLChjaGFyICopYnVmLGJ1ZnNpemUpOworKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKyAJCQkJ d2hpbGUgKFNTTF9nZXRfZXJyb3IoY29uLGkpID09IFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQ KQorIAkJCQkJeworIAkJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCByZW5lZ28gZHVy aW5nIHJlYWRcbiIpOworQEAgLTIzMTUsNiArMjMxOCw3IEBAIGFnYWluOgorIAkJCQkJCUJJT19w cmludGYoYmlvX3Nfb3V0LCJMT09LVVAgbm90IHN1Y2Nlc3NmdWxcbiIpOworIAkJCQkJaT1TU0xf cmVhZChjb24sKGNoYXIgKilidWYsYnVmc2l6ZSk7CisgCQkJCQl9CisrI2VuZGlmCisgCQkJCXN3 aXRjaCAoU1NMX2dldF9lcnJvcihjb24saSkpCisgCQkJCQl7CisgCQkJCWNhc2UgU1NMX0VSUk9S X05PTkU6CitAQCAtMjM5Miw2ICsyMzk2LDcgQEAgc3RhdGljIGludCBpbml0X3NzbF9jb25uZWN0 aW9uKFNTTCAqY29uKQorIAorIAorIAlpPVNTTF9hY2NlcHQoY29uKTsKKysjaWZuZGVmIE9QRU5T U0xfTk9fU1JQCisgCXdoaWxlIChpIDw9IDAgJiYgIFNTTF9nZXRfZXJyb3IoY29uLGkpID09IFNT TF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQKSAKKyAJCXsKKyAJCQlCSU9fcHJpbnRmKGJpb19zX291 dCwiTE9PS1VQIGR1cmluZyBhY2NlcHQgJXNcbiIsc3JwX2NhbGxiYWNrX3Bhcm0ubG9naW4pOwor QEAgLTI0MDIsNiArMjQwNyw3IEBAIHN0YXRpYyBpbnQgaW5pdF9zc2xfY29ubmVjdGlvbihTU0wg KmNvbikKKyAJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBub3Qgc3VjY2Vzc2Z1bFxu Iik7CisgCQkJaT1TU0xfYWNjZXB0KGNvbik7CisgCQl9CisrI2VuZGlmCisgCWlmIChpIDw9IDAp CisgCQl7CisgCQlpZiAoQklPX3NvY2tfc2hvdWxkX3JldHJ5KGkpKQorQEAgLTI2MjYsNiArMjYz Miw3IEBAIHN0YXRpYyBpbnQgd3d3X2JvZHkoY2hhciAqaG9zdG5hbWUsIGludAorIAkJaWYgKGhh Y2spCisgCQkJeworIAkJCWk9U1NMX2FjY2VwdChjb24pOworKyNpZm5kZWYgT1BFTlNTTF9OT19T UlAKKyAJCQl3aGlsZSAoaSA8PSAwICYmICBTU0xfZ2V0X2Vycm9yKGNvbixpKSA9PSBTU0xfRVJS T1JfV0FOVF9YNTA5X0xPT0tVUCkgCisgCQl7CisgCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxP T0tVUCBkdXJpbmcgYWNjZXB0ICVzXG4iLHNycF9jYWxsYmFja19wYXJtLmxvZ2luKTsKK0BAIC0y NjM2LDcgKzI2NDMsNyBAQCBzdGF0aWMgaW50IHd3d19ib2R5KGNoYXIgKmhvc3RuYW1lLCBpbnQK KyAJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBub3Qgc3VjY2Vzc2Z1bFxuIik7Cisg CQkJaT1TU0xfYWNjZXB0KGNvbik7CisgCQl9CistCisrI2VuZGlmCisgCQkJc3dpdGNoIChTU0xf Z2V0X2Vycm9yKGNvbixpKSkKKyAJCQkJeworIAkJCWNhc2UgU1NMX0VSUk9SX05PTkU6CgpkaWZm IC0tZ2l0IGEvb3BlbnNzbC0xLjAuMS1iZXRhMi1wYWRsb2NrNjQucGF0Y2ggYi9vcGVuc3NsLTEu MC4xLWJldGEyLXBhZGxvY2s2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi40YjdmN2RhCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMS1iZXRhMi1wYWRs b2NrNjQucGF0Y2gKQEAgLTAsMCArMSwxOTMgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTIvZW5naW5lcy9lX3BhZGxvY2suYy5wYWRsb2NrNjQgb3BlbnNzbC0xLjAuMS1iZXRhMi9lbmdp bmVzL2VfcGFkbG9jay5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9lbmdpbmVzL2VfcGFkbG9j ay5jLnBhZGxvY2s2NAkyMDExLTA2LTIxIDE4OjQyOjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTIvZW5naW5lcy9lX3BhZGxvY2suYwkyMDEyLTAyLTA2IDIwOjE4OjUy LjAzOTUzNzc5OSArMDEwMAorQEAgLTEwMSw3ICsxMDEsMTAgQEAKKyAgICBjb21waWxlciBjaG9p Y2UgaXMgbGltaXRlZCB0byBHQ0MgYW5kIE1pY3Jvc29mdCBDLiAqLworICN1bmRlZiBDT01QSUxF X0hXX1BBRExPQ0sKKyAjaWYgIWRlZmluZWQoSTM4Nl9PTkxZKSAmJiAhZGVmaW5lZChPUEVOU1NM X05PX0lOTElORV9BU00pCistIyBpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19p Mzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSkpIHx8IFwKKysjIGlmIChkZWZpbmVkKF9fR05VQ19f KSAmJiBfX0dOVUNfXz49MiAmJiBcCisrCShkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9f aTM4NikgfHwgXAorKwkgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KSkg XAorKyAgICAgKSB8fCBcCisgICAgICAoZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfTV9J WDg2KSkKKyAjICBkZWZpbmUgQ09NUElMRV9IV19QQURMT0NLCisgIyBlbmRpZgorQEAgLTEzNyw3 ICsxNDAsNyBAQCB2b2lkIEVOR0lORV9sb2FkX3BhZGxvY2sgKHZvaWQpCisgIyBlbmRpZgorICNl bGlmIGRlZmluZWQoX19HTlVDX18pCisgIyBpZm5kZWYgYWxsb2NhCistIyAgZGVmaW5lIGFsbG9j YShzKSBfX2J1aWx0aW5fYWxsb2NhKHMpCisrIyAgZGVmaW5lIGFsbG9jYShzKSBfX2J1aWx0aW5f YWxsb2NhKChzKSkKKyAjIGVuZGlmCisgI2VuZGlmCisgCitAQCAtMzA0LDYgKzMwNyw3IEBAIHN0 YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGEKKyAgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICovCisgI2lmIGRl ZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yCisrI2lmIGRlZmluZWQoX19pMzg2X18pIHx8 IGRlZmluZWQoX19pMzg2KQorIC8qCisgICogQXMgZm9yIGV4Y2Vzc2l2ZSAicHVzaCAlZWJ4Ii8i cG9wICVlYngiIGZvdW5kIGFsbCBvdmVyLgorICAqIFdoZW4gZ2VuZXJhdGluZyBwb3NpdGlvbi1p bmRlcGVuZGVudCBjb2RlIEdDQyB3b24ndCBsZXQKK0BAIC0zODMsMjEgKzM4Nyw2IEBAIHBhZGxv Y2tfYXZhaWxhYmxlKHZvaWQpCisgCXJldHVybiBwYWRsb2NrX3VzZV9hY2UgKyBwYWRsb2NrX3Vz ZV9ybmc7CisgfQorIAorLSNpZm5kZWYgT1BFTlNTTF9OT19BRVMKKy0vKiBPdXIgb3duIGh0b25s KCkvbnRvaGwoKSAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorLXBhZGxvY2tfYnN3YXBsKEFFU19L RVkgKmtzKQorLXsKKy0Jc2l6ZV90IGkgPSBzaXplb2Yoa3MtPnJkX2tleSkvc2l6ZW9mKGtzLT5y ZF9rZXlbMF0pOworLQl1bnNpZ25lZCBpbnQgKmtleSA9IGtzLT5yZF9rZXk7CistCistCXdoaWxl IChpLS0pIHsKKy0JCWFzbSB2b2xhdGlsZSAoImJzd2FwbCAlMCIgOiAiK3IiKCprZXkpKTsKKy0J CWtleSsrOworLQl9CistfQorLSNlbmRpZgorLQorIC8qIEZvcmNlIGtleSByZWxvYWQgZnJvbSBt ZW1vcnkgdG8gdGhlIENQVSBtaWNyb2NvZGUuCisgICAgTG9hZGluZyBFRkxBR1MgZnJvbSB0aGUg c3RhY2sgY2xlYXJzIEVGTEFHU1szMF0gCisgICAgd2hpY2ggZG9lcyB0aGUgdHJpY2suICovCitA QCAtNDU1LDEyICs0NDQsMTI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbmFtZShzaXplX3QgY250 LAkJXAorIAkJOiAiZWR4IiwgImNjIiwgIm1lbW9yeSIpOwlcCisgCXJldHVybiBpdjsJCQkJXAor IH0KKysjZW5kaWYKKysKKysjZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX194 ODZfNjQpCisrCisrLyogTG9hZCBzdXBwb3J0ZWQgZmVhdHVyZXMgb2YgdGhlIENQVSB0byBzZWUg aWYKKysgICB0aGUgUGFkTG9jayBpcyBhdmFpbGFibGUuICovCisrc3RhdGljIGludAorK3BhZGxv Y2tfYXZhaWxhYmxlKHZvaWQpCisreworKwljaGFyIHZlbmRvcl9zdHJpbmdbMTZdOworKwl1bnNp Z25lZCBpbnQgZWF4LCBlZHg7CisgCisrCS8qIEFyZSB3ZSBydW5uaW5nIG9uIHRoZSBDZW50YXVy IChWSUEpIENQVT8gKi8KKysJZWF4ID0gMHgwMDAwMDAwMDsKKysJdmVuZG9yX3N0cmluZ1sxMl0g PSAwOworKwlhc20gdm9sYXRpbGUgKAorKwkJImNwdWlkXG4iCisrCQkibW92bAklJWVieCwoJTEp XG4iCisrCQkibW92bAklJWVkeCw0KCUxKVxuIgorKwkJIm1vdmwJJSVlY3gsOCglMSlcbiIKKysJ CTogIithIihlYXgpIDogInIiKHZlbmRvcl9zdHJpbmcpIDogInJieCIsICJyY3giLCAicmR4Iik7 CisrCWlmIChzdHJjbXAodmVuZG9yX3N0cmluZywgIkNlbnRhdXJIYXVscyIpICE9IDApCisrCQly ZXR1cm4gMDsKKysKKysJLyogQ2hlY2sgZm9yIENlbnRhdXIgRXh0ZW5kZWQgRmVhdHVyZSBGbGFn cyBwcmVzZW5jZSAqLworKwllYXggPSAweEMwMDAwMDAwOworKwlhc20gdm9sYXRpbGUgKCJjcHVp ZCIKKysJCTogIithIihlYXgpIDogOiAicmJ4IiwgInJjeCIsICJyZHgiKTsKKysJaWYgKGVheCA8 IDB4QzAwMDAwMDEpCisrCQlyZXR1cm4gMDsKKysKKysJLyogUmVhZCB0aGUgQ2VudGF1ciBFeHRl bmRlZCBGZWF0dXJlIEZsYWdzICovCisrCWVheCA9IDB4QzAwMDAwMDE7CisrCWFzbSB2b2xhdGls ZSAoImNwdWlkIgorKwkJOiAiK2EiKGVheCksICI9ZCIoZWR4KSA6IDogInJieCIsICJyY3giKTsK KysKKysJLyogRmlsbCB1cCBzb21lIGZsYWdzICovCisrCXBhZGxvY2tfdXNlX2FjZSA9ICgoZWR4 ICYgKDB4Mzw8NikpID09ICgweDM8PDYpKTsKKysJcGFkbG9ja191c2Vfcm5nID0gKChlZHggJiAo MHgzPDwyKSkgPT0gKDB4Mzw8MikpOworKworKwlyZXR1cm4gcGFkbG9ja191c2VfYWNlICsgcGFk bG9ja191c2Vfcm5nOworK30KKysKKysvKiBGb3JjZSBrZXkgcmVsb2FkIGZyb20gbWVtb3J5IHRv IHRoZSBDUFUgbWljcm9jb2RlLgorKyAgIExvYWRpbmcgRUZMQUdTIGZyb20gdGhlIHN0YWNrIGNs ZWFycyBFRkxBR1NbMzBdIAorKyAgIHdoaWNoIGRvZXMgdGhlIHRyaWNrLiAqLworK3N0YXRpYyBp bmxpbmUgdm9pZAorK3BhZGxvY2tfcmVsb2FkX2tleSh2b2lkKQorK3sKKysJYXNtIHZvbGF0aWxl ICgicHVzaGZxOyBwb3BmcSIpOworK30KKysKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrLyoK KysgKiBUaGlzIGlzIGhldXJpc3RpYyBrZXkgY29udGV4dCB0cmFjaW5nLiBBdCBmaXJzdCBvbmUK KysgKiBiZWxpZXZlcyB0aGF0IG9uZSBzaG91bGQgdXNlIGF0b21pYyBzd2FwIGluc3RydWN0aW9u cywKKysgKiBidXQgaXQncyBub3QgYWN0dWFsbHkgbmVjZXNzYXJ5LiBQb2ludCBpcyB0aGF0IGlm CisrICogcGFkbG9ja19zYXZlZF9jb250ZXh0IHdhcyBjaGFuZ2VkIGJ5IGFub3RoZXIgdGhyZWFk CisrICogYWZ0ZXIgd2UndmUgcmVhZCBpdCBhbmQgYmVmb3JlIHdlIGNvbXBhcmUgaXQgd2l0aCBj ZGF0YSwKKysgKiBvdXIga2V5ICpzaGFsbCogYmUgcmVsb2FkZWQgdXBvbiB0aHJlYWQgY29udGV4 dCBzd2l0Y2gKKysgKiBhbmQgd2UgYXJlIHRoZXJlZm9yZSBzZXQgaW4gZWl0aGVyIGNhc2UuLi4K KysgKi8KKytzdGF0aWMgaW5saW5lIHZvaWQKKytwYWRsb2NrX3ZlcmlmeV9jb250ZXh0KHN0cnVj dCBwYWRsb2NrX2NpcGhlcl9kYXRhICpjZGF0YSkKKyt7CisrCWFzbSB2b2xhdGlsZSAoCisrCSJw dXNoZnFcbiIKKysiCWJ0bAkkMzAsKCUlcnNwKVxuIgorKyIJam5jCTFmXG4iCisrIgljbXBxCSUy LCUxXG4iCisrIglqZQkxZlxuIgorKyIJcG9wZnFcbiIKKysiCXN1YnEJJDgsJSVyc3BcbiIKKysi MToJYWRkcQkkOCwlJXJzcFxuIgorKyIJbW92cQklMiwlMCIKKysJOiIrbSIocGFkbG9ja19zYXZl ZF9jb250ZXh0KQorKwk6ICJyIihwYWRsb2NrX3NhdmVkX2NvbnRleHQpLCAiciIoY2RhdGEpIDog ImNjIik7CisrfQorKworKy8qIFRlbXBsYXRlIGZvciBwYWRsb2NrX3hjcnlwdF8qIG1vZGVzICov CisrLyogQklHIEZBVCBXQVJOSU5HOiAKKysgKiAJVGhlIG9mZnNldHMgdXNlZCB3aXRoICdsZWFs JyBpbnN0cnVjdGlvbnMKKysgKiAJZGVzY3JpYmUgaXRlbXMgb2YgdGhlICdwYWRsb2NrX2NpcGhl cl9kYXRhJworKyAqIAlzdHJ1Y3R1cmUuCisrICovCisrI2RlZmluZSBQQURMT0NLX1hDUllQVF9B U00obmFtZSxyZXBfeGNyeXB0KQlcCisrc3RhdGljIGlubGluZSB2b2lkICpuYW1lKHNpemVfdCBj bnQsCQlcCisrCXN0cnVjdCBwYWRsb2NrX2NpcGhlcl9kYXRhICpjZGF0YSwJXAorKwl2b2lkICpv dXQsIGNvbnN0IHZvaWQgKmlucCkgCQlcCisrewl2b2lkICppdjsgCQkJCVwKKysJYXNtIHZvbGF0 aWxlICggImxlYXEJMTYoJTApLCUlcmR4XG4iCVwKKysJCSIJbGVhcQkzMiglMCksJSVyYnhcbiIJ XAorKwkJCXJlcF94Y3J5cHQgIlxuIgkJXAorKwkJOiAiPWEiKGl2KSwgIj1jIihjbnQpLCAiPUQi KG91dCksICI9UyIoaW5wKSBcCisrCQk6ICIwIihjZGF0YSksICIxIihjbnQpLCAiMiIob3V0KSwg IjMiKGlucCkgIFwKKysJCTogInJieCIsICJyZHgiLCAiY2MiLCAibWVtb3J5Iik7CVwKKysJcmV0 dXJuIGl2OwkJCQlcCisrfQorKyNlbmRpZgorKworKyNlbmRpZgkvKiBjcHUgKi8KKysKKysjaWZu ZGVmIE9QRU5TU0xfTk9fQUVTCisgLyogR2VuZXJhdGUgYWxsIGZ1bmN0aW9ucyB3aXRoIGFwcHJv cHJpYXRlIG9wY29kZXMgKi8KKyBQQURMT0NLX1hDUllQVF9BU00ocGFkbG9ja194Y3J5cHRfZWNi LCAiLmJ5dGUgMHhmMywweDBmLDB4YTcsMHhjOCIpCS8qIHJlcCB4Y3J5cHRlY2IgKi8KKyBQQURM T0NLX1hDUllQVF9BU00ocGFkbG9ja194Y3J5cHRfY2JjLCAiLmJ5dGUgMHhmMywweDBmLDB4YTcs MHhkMCIpCS8qIHJlcCB4Y3J5cHRjYmMgKi8KKyBQQURMT0NLX1hDUllQVF9BU00ocGFkbG9ja194 Y3J5cHRfY2ZiLCAiLmJ5dGUgMHhmMywweDBmLDB4YTcsMHhlMCIpCS8qIHJlcCB4Y3J5cHRjZmIg Ki8KKyBQQURMT0NLX1hDUllQVF9BU00ocGFkbG9ja194Y3J5cHRfb2ZiLCAiLmJ5dGUgMHhmMyww eDBmLDB4YTcsMHhlOCIpCS8qIHJlcCB4Y3J5cHRvZmIgKi8KKysKKysvKiBPdXIgb3duIGh0b25s KCkvbnRvaGwoKSAqLworK3N0YXRpYyBpbmxpbmUgdm9pZAorK3BhZGxvY2tfYnN3YXBsKEFFU19L RVkgKmtzKQorK3sKKysJc2l6ZV90IGkgPSBzaXplb2Yoa3MtPnJkX2tleSkvc2l6ZW9mKGtzLT5y ZF9rZXlbMF0pOworKwl1bnNpZ25lZCBpbnQgKmtleSA9IGtzLT5yZF9rZXk7CisrCisrCXdoaWxl IChpLS0pIHsKKysJCWFzbSB2b2xhdGlsZSAoImJzd2FwbCAlMCIgOiAiK3IiKCprZXkpKTsKKysJ CWtleSsrOworKwl9CisrfQorICNlbmRpZgorIAorIC8qIFRoZSBSTkcgY2FsbCBpdHNlbGYgKi8K K0BAIC00OTEsOCArNTk1LDggQEAgcGFkbG9ja194c3RvcmUodm9pZCAqYWRkciwgdW5zaWduZWQg aW50Cisgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKKyBwYWRsb2NrX21lbWNweSh2b2lk ICpkc3QsY29uc3Qgdm9pZCAqc3JjLHNpemVfdCBuKQorIHsKKy0JbG9uZyAgICAgICAqZD1kc3Q7 CistCWNvbnN0IGxvbmcgKnM9c3JjOworKwlzaXplX3QgICAgICAgKmQ9ZHN0OworKwljb25zdCBz aXplX3QgKnM9c3JjOworIAorIAluIC89IHNpemVvZigqZCk7CisgCWRvIHsgKmQrKyA9ICpzKys7 IH0gd2hpbGUgKC0tbik7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMS1iZXRhMi1ycG1idWls ZC5wYXRjaCBiL29wZW5zc2wtMS4wLjEtYmV0YTItcnBtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1Y2VmMQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5z c2wtMS4wLjEtYmV0YTItcnBtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwxMDkgQEAKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTIvQ29uZmlndXJlLnJwbWJ1aWxkIG9wZW5zc2wtMS4wLjEtYmV0 YTIvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9Db25maWd1cmUucnBtYnVpbGQJ MjAxMi0wMS0wNSAwMTowNzozNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJl dGEyL0NvbmZpZ3VyZQkyMDEyLTAyLTAyIDEyOjQzOjU2LjU0NzQwOTMyNSArMDEwMAorQEAgLTM0 MywyMyArMzQzLDIzIEBAIG15ICV0YWJsZT0oCisgIyMjIworICMgKi1nZW5lcmljKiBpcyBlbmRp YW4tbmV1dHJhbCB0YXJnZXQsIGJ1dCAuL2NvbmZpZyBpcyBmcmVlIHRvCisgIyB0aHJvdyBpbiAt RFtCTF1fRU5ESUFOLCB3aGljaGV2ZXIgYXBwcm9wcmlhdGUuLi4KKy0ibGludXgtZ2VuZXJpYzMy IiwiZ2NjOi1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRS QU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwg QkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9N QUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKy0ibGludXgtcHBjIiwJImdjYzotREJfRU5ESUFOIC1E VEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJD NF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjps aW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwK KysibGludXgtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1Mp OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQg REVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChS UE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCisrImxpbnV4LXBwYyIsCSJn Y2M6LURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRS QU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9M TDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09Q VF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorICMgSXQncyBiZWxpZXZlZCB0aGF0 IG1ham9yaXR5IG9mIEFSTSB0b29sY2hhaW5zIHByZWRlZmluZSBhcHByb3ByaWF0ZSAtbWFyY2gu CisgIyBJZiB5b3UgY29tcGlsZXIgZG9lcyBub3QsIGRvIGNvbXBsZW1lbnQgY29uZmlnIGNvbW1h bmQgbGluZSB3aXRoIG9uZSEKKy0ibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1PMyAtV2Fs bDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5U IERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6 Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtYXJtdjQiLAki Z2NjOi1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6 Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHth cm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28u XCQoU0hMSUJfU09OQU1FVkVSKSIsCisgIyMjIyBJQS0zMiB0YXJnZXRzLi4uCisgImxpbnV4LWlh MzItaWNjIiwJImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtbm9fY3BwcnQ6Oi1EX1JFRU5U UkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZf ZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwk KFNITElCX01JTk9SKSIsCistImxpbnV4LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAt TzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9O RyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGlu dXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisr ImxpbnV4LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZM QUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2dj Y19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09Q VF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorICJsaW51eC1hb3V0IiwJImdjYzot RExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAt V2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9 OiR7eDg2X2FzbX06YS5vdXQiLAorICMjIyMKKy0ibGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVS TUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0 X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNu OmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUiki LAorLSJsaW51eC1wcGM2NCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2Fs bDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NI VU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4 LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6 NjQiLAorLSJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6 LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJP TEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChT SExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1E VEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlf Rk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BU Ujoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5z by5cJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VO RElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRs OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5S T0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0IFwk KFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAorKyJsaW51eC1p YTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjot RF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9M TCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BU X0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCisgImxpbnV4LWlhNjQtZWNjIiwiZWNj Oi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjot bGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxm Y246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9S KSIsCisgImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxs IC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NI VU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ Qzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorLSJsaW51eC14ODZfNjQi LAkiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6 LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4 ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElC X01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCistImxpbnV4NjQtczM5MHgiLAkiZ2NjOi1t NjQgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhU WV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtz MzkweF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9N QUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAorKyJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQg LURMX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5U OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDok e3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BU X0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKKysibGludXg2NC1zMzkweCIs CSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjot RF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksg REVTX0lOVCBERVNfVU5ST0xMOiR7czM5MHhfYXNtfTo2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQ SUM6LW02NCBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwK KyAjIyMjIFNvIGNhbGxlZCAiaGlnaGdwcnMiIHRhcmdldCBmb3Igei9BcmNoaXRlY3R1cmUgQ1BV cworICMgIkhpZ2hncHJzIiBpcyBrZXJuZWwgZmVhdHVyZSBmaXJzdCBpbXBsZW1lbnRlZCBpbiBM aW51eCAyLjYuMzIsIHNlZQorICMgL3Byb2MvY3B1aW5mby4gVGhlIGlkZWEgaXMgdG8gcHJlc2Vy dmUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mCitAQCAtMzczLDE2ICszNzMsMTYgQEAgbXkgJXRh YmxlPSgKKyAjIGxkY29uZmlnIGFuZCBydW4tdGltZSBsaW5rZXIgdG8gYXV0b2Rpc2NvdmVyLiBV bmZvcnR1bmF0ZWx5IGl0CisgIyBkb2Vzbid0IHdvcmsganVzdCB5ZXQsIGJlY2F1c2Ugb2YgY291 cGxlIG9mIGJ1Z3MgaW4gZ2xpYmMKKyAjIHN5c2RlcHMvczM5MC9kbC1wcm9jaW5mby5jIGFmZmVj dGluZyBsZGNvbmZpZyBhbmQgbGQuc28uMS4uLgorLSJsaW51eDMyLXMzOTB4IiwJImdjYzotbTMx IC1XYSwtbXphcmNoIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6 Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoiLmV2 YWx7bXkgJGFzbT0kczM5MHhfYXNtOyRhc209fnMvYm5cLXMzOTB4XC5vL2JuX2FzbS5vLzskYXNt fS4iOjMxOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMxOi5zby5cJChTSExJQl9NQUpPUiku XCQoU0hMSUJfTUlOT1IpOjo6L2hpZ2hncHJzIiwKKysibGludXgzMi1zMzkweCIsCSJnY2M6LW0z MSAtV2EsLW16YXJjaCAtREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1Mp OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQg REVTX1VOUk9MTDoiLmV2YWx7bXkgJGFzbT0kczM5MHhfYXNtOyRhc209fnMvYm5cLXMzOTB4XC5v L2JuX2FzbS5vLzskYXNtfS4iOjMxOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMxIFwkKFJQ TV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6L2hpZ2hncHJzIiwKKyAjIyMj IFNQQVJDIExpbnV4IHNldHVwcworICMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmct c2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5CisgIyBhc3Npc3RlZCB3aXRoIGRl YnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNvbmZpZ3MuCistImxpbnV4LXNwYXJjdjgiLCJnY2M6 LW12OCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAt REJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5L IERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ Qzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1zcGFyY3Y4 IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLURCTl9E SVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNf VU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQo UlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorICMgaXQncyBhIHJlYWwg bWVzcyB3aXRoIC1tY3B1PXVsdHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4LCBidXQKKyAjIC1X YSwtQXY4cGx1cyBzaG91bGQgZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0LgorLSJsaW51eC1z cGFyY3Y5IiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1P MyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURf UkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVT X1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1t MzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1zcGFyY3Y5 IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLURCTl9E SVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRf Q0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVk Oi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKyAjIEdD QyAzLjEgaXMgYSByZXF1aXJlbWVudAorLSJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LW02NCAtbWNw dT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVy IC1XYWxsOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJD NF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3Bh cmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpP UikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAorKyJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LURCX0VO RElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOlVMVFJB U1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERF U19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUik6Ojo2NCIs CisgIyMjIyBBbHBoYSBMaW51eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBzZXR1cHMKKyAjIFNw ZWNpYWwgbm90ZXM6CisgIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2Vk IGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CitAQCAtMzk2LDggKzM5Niw4IEBAIG15ICV0YWJs ZT0oCisgIworICMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAjCistImxpbnV4LWFscGhh LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJ WFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFf YXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hM SUJfTUlOT1IpIiwKKy0ibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAt RFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIg UkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1z aGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGlu dXgtYWxwaGEtZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9G TEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBE RVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElD OlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtYWxw aGErYnd4LWdjYyIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxB R1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRf Q0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCisgImxp bnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1E VEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNf SU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKKyAibGludXgt YWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1E VEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9D SFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwK KyAKK0BAIC0xNjc4LDcgKzE2NzgsNyBAQCB3aGlsZSAoPElOPikKKyAJZWxzaWYgKCRzaGFyZWRf ZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwu XSpcLlteXC5dKiQvKQorIAkJeworIAkJbXkgJHNvdG1wID0gJDE7CistCQlzL15TSEFSRURfTElC U19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX01B Sk9SKSAucyRzb3RtcC87CisrCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJ QlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX1NPTkFNRVZFUikgLnMkc290bXAvOworIAkJ fQorIAllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24g PX4gL15cLlteXC5dKlwuW15cLl0qXC5keWxpYiQvKQorIAkJeworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMi9NYWtlZmlsZS5vcmcucnBtYnVpbGQgb3BlbnNzbC0xLjAuMS1iZXRhMi9NYWtl ZmlsZS5vcmcKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL01ha2VmaWxlLm9yZy5ycG1idWlsZAky MDExLTEyLTI3IDE2OjE3OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTIvTWFrZWZpbGUub3JnCTIwMTItMDItMDIgMTI6MzA6MjMuNjUyNDk1NDM1ICswMTAwCitAQCAt MTAsNiArMTAsNyBAQCBTSExJQl9WRVJTSU9OX0hJU1RPUlk9CisgU0hMSUJfTUFKT1I9CisgU0hM SUJfTUlOT1I9CisgU0hMSUJfRVhUPQorK1NITElCX1NPTkFNRVZFUj0xMAorIFBMQVRGT1JNPWRp c3QKKyBPUFRJT05TPQorIENPTkZJR1VSRV9BUkdTPQorQEAgLTMzMywxMCArMzM0LDkgQEAgY2xl YW4tc2hhcmVkOgorIGxpbmstc2hhcmVkOgorIAlAIHNldCAtZTsgZm9yIGkgaW4gJChTSExJQkRJ UlMpOyBkbyBcCisgCQkkKE1BS0UpIC1mICQoSEVSRSkvTWFrZWZpbGUuc2hhcmVkIC1lICQoQlVJ TERFTlYpIFwKKy0JCQlMSUJOQU1FPSQkaSBMSUJWRVJTSU9OPSQoU0hMSUJfTUFKT1IpLiQoU0hM SUJfTUlOT1IpIFwKKysJCQlMSUJOQU1FPSQkaSBMSUJWRVJTSU9OPSQoU0hMSUJfU09OQU1FVkVS KSBcCisgCQkJTElCQ09NUEFUVkVSU0lPTlM9IjskKFNITElCX1ZFUlNJT05fSElTVE9SWSkiIFwK KyAJCQlzeW1saW5rLiQoU0hMSUJfVEFSR0VUKTsgXAorLQkJbGlicz0iJCRsaWJzIC1sJCRpIjsg XAorIAlkb25lCisgCisgYnVpbGQtc2hhcmVkOiBkb18kKFNITElCX1RBUkdFVCkgbGluay1zaGFy ZWQKK0BAIC0zNDcsNyArMzQ3LDcgQEAgZG9fJChTSExJQl9UQVJHRVQpOgorIAkJCWxpYnM9IiQo TElCS1JCNSkgJCRsaWJzIjsgXAorIAkJZmk7IFwKKyAJCSQoQ0xFQVJFTlYpICYmICQoTUFLRSkg LWYgTWFrZWZpbGUuc2hhcmVkIC1lICQoQlVJTERFTlYpIFwKKy0JCQlMSUJOQU1FPSQkaSBMSUJW RVJTSU9OPSQoU0hMSUJfTUFKT1IpLiQoU0hMSUJfTUlOT1IpIFwKKysJCQlMSUJOQU1FPSQkaSBM SUJWRVJTSU9OPSQoU0hMSUJfU09OQU1FVkVSKSBcCisgCQkJTElCQ09NUEFUVkVSU0lPTlM9Ijsk KFNITElCX1ZFUlNJT05fSElTVE9SWSkiIFwKKyAJCQlMSUJERVBTPSIkJGxpYnMgJChFWF9MSUJT KSIgXAorIAkJCWxpbmtfYS4kKFNITElCX1RBUkdFVCk7IFwKCmRpZmYgLS1naXQgYS9vcGVuc3Ns LTEuMC4xLWJldGEyLXNzbC1vcC1hbGwucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEyLXNzbC1v cC1hbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwMzM4Ngot LS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjEtYmV0YTItc3NsLW9wLWFsbC5wYXRjaApA QCAtMCwwICsxLDIxIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL3NzbC9zc2wuaC5v cC1hbGwgb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvc3NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xLWJl dGEyL3NzbC9zc2wuaC5vcC1hbGwJMjAxMi0wMi0wMiAxMjo0OTowMC44MjgwMzU5MTYgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL3NzbC9zc2wuaAkyMDEyLTAyLTAyIDEyOjUyOjI3LjI5 NzgxODE4MiArMDEwMAorQEAgLTU0MCw3ICs1NDAsNyBAQCBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QK KyAjZGVmaW5lIFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHCQkJMHgwMDAwMDAwMkwKKyAv KiBBbGxvdyBpbml0aWFsIGNvbm5lY3Rpb24gdG8gc2VydmVycyB0aGF0IGRvbid0IHN1cHBvcnQg UkkgKi8KKyAjZGVmaW5lIFNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1QJCQkweDAwMDAwMDA0 TAorLSNkZWZpbmUgU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAw MDAwMDA4TAorKyNkZWZpbmUgU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVH CQkweDAwMDAwMDA4TCAvKiBubyBlZmZlY3Qgc2luY2UgMS4wLjBjIGR1ZSB0byBDVkUtMjAxMC00 MTgwICovCisgI2RlZmluZSBTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHCQkweDAw MDAwMDEwTAorICNkZWZpbmUgU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSCQkweDAw MDAwMDIwTAorICNkZWZpbmUgU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkcJCQkweDAwMDAw MDQwTCAvKiBubyBlZmZlY3Qgc2luY2UgMC45LjdoIGFuZCAwLjkuOGIgKi8KK0BAIC01NTgsNyAr NTU4LDcgQEAgc3RydWN0IHNzbF9zZXNzaW9uX3N0CisgCisgLyogU1NMX09QX0FMTDogdmFyaW91 cyBidWcgd29ya2Fyb3VuZHMgdGhhdCBzaG91bGQgYmUgcmF0aGVyIGhhcm1sZXNzLgorICAqICAg ICAgICAgICAgIFRoaXMgdXNlZCB0byBiZSAweDAwMEZGRkZGTCBiZWZvcmUgMC45LjcuICovCist I2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDgwMDAwQkZGTAorKyNkZWZpbmUgU1NMX09QX0FMTAkJ CQkJMHg4MDAwMEZGN0wgLyogd2Ugc3RpbGwgaGF2ZSB0byBpbmNsdWRlIFNTTF9PUF9ET05UX0lO U0VSVF9FTVBUWV9GUkFHTUVOVFMgKi8KKyAKKyAvKiBEVExTIG9wdGlvbnMgKi8KKyAjZGVmaW5l IFNTTF9PUF9OT19RVUVSWV9NVFUgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBMCgpkaWZmIC0t Z2l0IGEvb3BlbnNzbC0xLjAuMS1iZXRhMi12ZXJzaW9uLnBhdGNoIGIvb3BlbnNzbC0xLjAuMS1i ZXRhMi12ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYz MmQxNDUKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xLWJldGEyLXZlcnNpb24ucGF0 Y2gKQEAgLTAsMCArMSwyMSBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v b3BlbnNzbHYuaC52ZXJzaW9uIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL29wZW5zc2x2LmgK Ky0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24JMjAxMi0w Mi0wNiAxNzoxNjo1NS41Mjk5NDQ0ODUgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9vcGVuc3Nsdi5oCTIwMTItMDItMDYgMTc6MTY6NTMuMTYxOTI0NzMzICswMTAwCitAQCAt MjUsNyArMjUsNyBAQAorICAqIChQcmlvciB0byAwLjkuNWEgYmV0YTEsIGEgZGlmZmVyZW50IHNj aGVtZSB3YXMgdXNlZDogTU1OTkZGUkJCIGZvcgorICAqICBtYWpvciBtaW5vciBmaXggZmluYWwg cGF0Y2gvYmV0YSkKKyAgKi8KKy0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAw MTAwMkwKKysjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDAwM0wKKyAjaWZk ZWYgT1BFTlNTTF9GSVBTCisgI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAx LjAuMS1maXBzLWJldGEyIDE5IEphbiAyMDEyIgorICNlbHNlCitAQCAtODMsNyArODMsNyBAQAor ICAqIHNob3VsZCBvbmx5IGtlZXAgdGhlIHZlcnNpb25zIHRoYXQgYXJlIGJpbmFyeSBjb21wYXRp YmxlIHdpdGggdGhlIGN1cnJlbnQuCisgICovCisgI2RlZmluZSBTSExJQl9WRVJTSU9OX0hJU1RP UlkgIiIKKy0jZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKKysjZGVmaW5lIFNI TElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMSIKKyAKKyAKKyAjZW5kaWYgLyogSEVBREVSX09QRU5T U0xWX0ggKi8KCmRpZmYgLS1naXQgYS9vcGVuc3NsLnNwZWMgYi9vcGVuc3NsLnNwZWMKaW5kZXgg OTVlZTJiOC4uYTFjY2RjMyAxMDA2NDQKLS0tIGEvb3BlbnNzbC5zcGVjCisrKyBiL29wZW5zc2wu c3BlYwpAQCAtMjAsMTIgKzIwLDEyIEBACiAKIFN1bW1hcnk6IEEgZ2VuZXJhbCBwdXJwb3NlIGNy eXB0b2dyYXBoeSBsaWJyYXJ5IHdpdGggVExTIGltcGxlbWVudGF0aW9uCiBOYW1lOiBvcGVuc3Ns Ci1WZXJzaW9uOiAxLjAuMGcKLVJlbGVhc2U6IDElez9kaXN0fQorVmVyc2lvbjogMS4wLjEKK1Jl bGVhc2U6IDAuMS5iZXRhMiV7P2Rpc3R9CiAjIFdlIGhhdmUgdG8gcmVtb3ZlIGNlcnRhaW4gcGF0 ZW50ZWQgYWxnb3JpdGhtcyBmcm9tIHRoZSBvcGVuc3NsIHNvdXJjZQogIyB0YXJiYWxsIHdpdGgg dGhlIGhvYmJsZS1vcGVuc3NsIHNjcmlwdCB3aGljaCBpcyBpbmNsdWRlZCBiZWxvdy4KICMgVGhl IG9yaWdpbmFsIG9wZW5zc2wgdXBzdHJlYW0gdGFyYmFsbCBjYW5ub3QgYmUgc2hpcHBlZCBpbiB0 aGUgLnNyYy5ycG0uCi1Tb3VyY2U6IG9wZW5zc2wtJXt2ZXJzaW9ufS11c2EudGFyLnh6CitTb3Vy Y2U6IG9wZW5zc2wtJXt2ZXJzaW9ufS1iZXRhMi11c2EudGFyLnh6CiBTb3VyY2UxOiBob2JibGUt b3BlbnNzbAogU291cmNlMjogTWFrZWZpbGUuY2VydGlmaWNhdGUKIFNvdXJjZTY6IG1ha2UtZHVt bXktY2VydApAQCAtMzQsOSArMzQsOCBAQCBTb3VyY2U5OiBvcGVuc3NsY29uZi1uZXcuaAogU291 cmNlMTA6IG9wZW5zc2xjb25mLW5ldy13YXJuaW5nLmgKIFNvdXJjZTExOiBSRUFETUUuRklQUwog IyBCdWlsZCBjaGFuZ2VzCi1QYXRjaDA6IG9wZW5zc2wtMS4wLjAtYmV0YTQtcmVkaGF0LnBhdGNo Ci1QYXRjaDE6IG9wZW5zc2wtMS4wLjBmLWRlZmF1bHRzLnBhdGNoCi1QYXRjaDM6IG9wZW5zc2wt MS4wLjAtYmV0YTMtc292ZXJzaW9uLnBhdGNoCitQYXRjaDE6IG9wZW5zc2wtMS4wLjEtYmV0YTIt cnBtYnVpbGQucGF0Y2gKK1BhdGNoMjogb3BlbnNzbC0xLjAuMGYtZGVmYXVsdHMucGF0Y2gKIFBh dGNoNDogb3BlbnNzbC0xLjAuMC1iZXRhNS1lbmdpbmVzZGlyLnBhdGNoCiBQYXRjaDU6IG9wZW5z c2wtMC45LjhhLW5vLXJwYXRoLnBhdGNoCiBQYXRjaDY6IG9wZW5zc2wtMC45LjhiLXRlc3QtdXNl LWxvY2FsaG9zdC5wYXRjaApAQCAtNDQsNDIgKzQzLDI5IEBAIFBhdGNoNzogb3BlbnNzbC0xLjAu MC10aW1lem9uZS5wYXRjaAogIyBCdWcgZml4ZXMKIFBhdGNoMjM6IG9wZW5zc2wtMS4wLjAtYmV0 YTQtZGVmYXVsdC1wYXRocy5wYXRjaAogUGF0Y2gyNDogb3BlbnNzbC0wLjkuOGotYmFkLW1pbWUu cGF0Y2gKLVBhdGNoMjU6IG9wZW5zc2wtMS4wLjBhLW1hbmZpeC5wYXRjaAogUGF0Y2gyNjogb3Bl bnNzbC0xLjAuMGEtbG9hZC1jZXJ0cy5wYXRjaAogIyBGdW5jdGlvbmFsaXR5IGNoYW5nZXMKLVBh dGNoMzI6IG9wZW5zc2wtMC45LjhnLWlhNjQucGF0Y2gKIFBhdGNoMzM6IG9wZW5zc2wtMS4wLjAt YmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVuc3NsLTAuOS42LXg1MDkucGF0Y2gKIFBh dGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRkLWVuZ2luZXMucGF0Y2gKLVBhdGNoMzg6 IG9wZW5zc2wtMS4wLjAtYmV0YTUtY2lwaGVyLWNoYW5nZS5wYXRjaAotUGF0Y2gzOTogb3BlbnNz bC0xLjAuMGItaXB2Ni1hcHBzLnBhdGNoCi1QYXRjaDQwOiBvcGVuc3NsLTEuMC4wZi1maXBzLnBh dGNoCi1QYXRjaDQxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNjaGVjay5wYXRjaAotUGF0Y2g0 Mzogb3BlbnNzbC0xLjAuMGEtZmlwc21vZGUucGF0Y2gKLVBhdGNoNDQ6IG9wZW5zc2wtMS4wLjAt YmV0YTMtZmlwc3JuZy5wYXRjaAorUGF0Y2gzNjogb3BlbnNzbC0xLjAuMGUtZG9jLW5vZW9mLnBh dGNoCitQYXRjaDM4OiBvcGVuc3NsLTEuMC4xLWJldGEyLXNzbC1vcC1hbGwucGF0Y2gKK1BhdGNo Mzk6IG9wZW5zc2wtMS4wLjEtYmV0YTItaXB2Ni1hcHBzLnBhdGNoCitQYXRjaDQwOiBvcGVuc3Ns LTEuMC4xLWJldGEyLWZpcHMucGF0Y2gKK1BhdGNoNDI6IG9wZW5zc2wtMS4wLjEtYmV0YTItbm8t c3JwLnBhdGNoCiBQYXRjaDQ1OiBvcGVuc3NsLTAuOS44ai1lbnYtbm96bGliLnBhdGNoCiBQYXRj aDQ3OiBvcGVuc3NsLTEuMC4wLWJldGE1LXJlYWRtZS13YXJuaW5nLnBhdGNoCiBQYXRjaDQ5OiBv cGVuc3NsLTEuMC4wLWJldGE0LWFsZ28tZG9jLnBhdGNoCi1QYXRjaDUwOiBvcGVuc3NsLTEuMC4w LWJldGE0LWR0bHMxLWFiaS5wYXRjaAotUGF0Y2g1MTogb3BlbnNzbC0xLjAuMGctdmVyc2lvbi5w YXRjaAotUGF0Y2g1Mjogb3BlbnNzbC0xLjAuMGItYWVzbmkucGF0Y2gKLVBhdGNoNTM6IG9wZW5z c2wtMS4wLjAtbmFtZS1oYXNoLnBhdGNoCi1QYXRjaDU0OiBvcGVuc3NsLTEuMC4wYy1zcGVlZC1m aXBzLnBhdGNoCi1QYXRjaDU1OiBvcGVuc3NsLTEuMC4wYy1hcHBzLWlwdjZsaXN0ZW4ucGF0Y2gK K1BhdGNoNTA6IG9wZW5zc2wtMS4wLjEtYmV0YTItZHRsczEtYWJpLnBhdGNoCitQYXRjaDUxOiBv cGVuc3NsLTEuMC4xLWJldGEyLXZlcnNpb24ucGF0Y2gKIFBhdGNoNTY6IG9wZW5zc2wtMS4wLjBj LXJzYS14OTMxLnBhdGNoCi1QYXRjaDU3OiBvcGVuc3NsLTEuMC4wYy1maXBzMTg2LTMucGF0Y2gK LVBhdGNoNTg6IG9wZW5zc2wtMS4wLjBjLWZpcHMtbWQ1LWFsbG93LnBhdGNoCi1QYXRjaDU5OiBv cGVuc3NsLTEuMC4wYy1wa2NzMTItZmlwcy1kZWZhdWx0LnBhdGNoCitQYXRjaDU4OiBvcGVuc3Ns LTEuMC4xLWJldGEyLWZpcHMtbWQ1LWFsbG93LnBhdGNoCiBQYXRjaDYwOiBvcGVuc3NsLTEuMC4w ZC1hcHBzLWRnc3QucGF0Y2gKLVBhdGNoNjE6IG9wZW5zc2wtMS4wLjBkLWNhdnMucGF0Y2gKLVBh dGNoNjI6IG9wZW5zc2wtMS4wLjAtZmlwcy1hZXNuaS5wYXRjaAogUGF0Y2g2Mzogb3BlbnNzbC0x LjAuMGQteG1wcC1zdGFydHRscy5wYXRjaAotUGF0Y2g2NDogb3BlbnNzbC0xLjAuMGQtaW50ZWxv cHRzLnBhdGNoCiBQYXRjaDY1OiBvcGVuc3NsLTEuMC4wZS1jaGlsLWZpeGVzLnBhdGNoCi1QYXRj aDY2OiBvcGVuc3NsLTEuMC4wLXNoYTJ0ZXN0LnBhdGNoCiBQYXRjaDY3OiBvcGVuc3NsLTEuMC4w ZS1wa2djb25maWctcHJpdmF0ZS5wYXRjaAogIyBCYWNrcG9ydGVkIGZpeGVzIGluY2x1ZGluZyBz ZWN1cml0eSBmaXhlcwotUGF0Y2g4MTogb3BlbnNzbC0xLjAuMGQtcGFkbG9jazY0LnBhdGNoCitQ YXRjaDgxOiBvcGVuc3NsLTEuMC4xLWJldGEyLXBhZGxvY2s2NC5wYXRjaAogCiBMaWNlbnNlOiBP cGVuU1NMCiBHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0xpYnJhcmllcwpAQCAtMTI5LDE0ICsx MTUsMTMgQEAgcGFja2FnZSBwcm92aWRlcyBQZXJsIHNjcmlwdHMgZm9yIGNvbnZlcnRpbmcgY2Vy dGlmaWNhdGVzIGFuZCBrZXlzCiBmcm9tIG90aGVyIGZvcm1hdHMgdG8gdGhlIGZvcm1hdHMgdXNl ZCBieSB0aGUgT3BlblNTTCB0b29sa2l0LgogCiAlcHJlcAotJXNldHVwIC1xIC1uICV7bmFtZX0t JXt2ZXJzaW9ufQorJXNldHVwIC1xIC1uICV7bmFtZX0tJXt2ZXJzaW9ufS1iZXRhMgogCiAjIFRo ZSBob2JibGVfb3BlbnNzbCBpcyBjYWxsZWQgaGVyZSByZWR1bmRhbnRseSwganVzdCB0byBiZSBz dXJlLgogIyBUaGUgdGFyYmFsbCBoYXMgYWxyZWFkeSB0aGUgc291cmNlcyByZW1vdmVkLgogJXtT T1VSQ0UxfSA+IC9kZXYvbnVsbAotJXBhdGNoMCAtcDEgLWIgLnJlZGhhdAotJXBhdGNoMSAtcDEg LWIgLmRlZmF1bHRzCi0lcGF0Y2gzIC1wMSAtYiAuc292ZXJzaW9uCislcGF0Y2gxIC1wMSAtYiAu cnBtYnVpbGQKKyVwYXRjaDIgLXAxIC1iIC5kZWZhdWx0cwogJXBhdGNoNCAtcDEgLWIgLmVuZ2lu ZXNkaXIgJXs/X3Jhd2J1aWxkfQogJXBhdGNoNSAtcDEgLWIgLm5vLXJwYXRoCiAlcGF0Y2g2IC1w MSAtYiAudXNlLWxvY2FsaG9zdApAQCAtMTQ0LDQzICsxMjksMjkgQEAgZnJvbSBvdGhlciBmb3Jt YXRzIHRvIHRoZSBmb3JtYXRzIHVzZWQgYnkgdGhlIE9wZW5TU0wgdG9vbGtpdC4KIAogJXBhdGNo MjMgLXAxIC1iIC5kZWZhdWx0LXBhdGhzCiAlcGF0Y2gyNCAtcDEgLWIgLmJhZC1taW1lCi0lcGF0 Y2gyNSAtcDEgLWIgLm1hbmZpeAogJXBhdGNoMjYgLXAxIC1iIC5sb2FkLWNlcnRzCiAKLSVwYXRj aDMyIC1wMSAtYiAuaWE2NAogJXBhdGNoMzMgLXAxIC1iIC5jYS1kaXIKICVwYXRjaDM0IC1wMSAt YiAueDUwOQogJXBhdGNoMzUgLXAxIC1iIC52ZXJzaW9uLWFkZC1lbmdpbmVzCi0lcGF0Y2gzOCAt cDEgLWIgLmNpcGhlci1jaGFuZ2UKKyVwYXRjaDM2IC1wMSAtYiAuZG9jLW5vZW9mCislcGF0Y2gz OCAtcDEgLWIgLm9wLWFsbAogJXBhdGNoMzkgLXAxIC1iIC5pcHY2LWFwcHMKICVwYXRjaDQwIC1w MSAtYiAuZmlwcwotJXBhdGNoNDEgLXAxIC1iIC5maXBzY2hlY2sKLSVwYXRjaDQzIC1wMSAtYiAu Zmlwc21vZGUKLSVwYXRjaDQ0IC1wMSAtYiAuZmlwc3JuZworJXBhdGNoNDIgLXAxIC1iIC5uby1z cnAKICVwYXRjaDQ1IC1wMSAtYiAuZW52LW5vemxpYgogJXBhdGNoNDcgLXAxIC1iIC53YXJuaW5n CiAlcGF0Y2g0OSAtcDEgLWIgLmFsZ28tZG9jCiAlcGF0Y2g1MCAtcDEgLWIgLmR0bHMxLWFiaQog JXBhdGNoNTEgLXAxIC1iIC52ZXJzaW9uCi0lcGF0Y2g1MiAtcDEgLWIgLmFlc25pCi0lcGF0Y2g1 MyAtcDEgLWIgLm5hbWUtaGFzaAotJXBhdGNoNTQgLXAxIC1iIC5zcGZpcHMKLSVwYXRjaDU1IC1w MSAtYiAuaXB2Nmxpc3RlbgogJXBhdGNoNTYgLXAxIC1iIC54OTMxCi0lcGF0Y2g1NyAtcDEgLWIg LmZpcHMxODYtMwogJXBhdGNoNTggLXAxIC1iIC5tZDUtYWxsb3cKLSVwYXRjaDU5IC1wMSAtYiAu Zmlwcy1kZWZhdWx0CiAlcGF0Y2g2MCAtcDEgLWIgLmRnc3QKLSVwYXRjaDYxIC1wMSAtYiAuY2F2 cwotJXBhdGNoNjIgLXAxIC1iIC5maXBzLWFlc25pCiAlcGF0Y2g2MyAtcDEgLWIgLnN0YXJ0dGxz Ci0lcGF0Y2g2NCAtcDEgLWIgLmludGVsb3B0cwogJXBhdGNoNjUgLXAxIC1iIC5jaGlsCi0lcGF0 Y2g2NiAtcDEgLWIgLnNoYTJ0ZXN0CiAlcGF0Y2g2NyAtcDEgLWIgLnByaXZhdGUKIAogJXBhdGNo ODEgLXAxIC1iIC5wYWRsb2NrNjQKLQogIyBNb2RpZnkgdGhlIHZhcmlvdXMgcGVybCBzY3JpcHRz IHRvIHJlZmVyZW5jZSBwZXJsIGluIHRoZSByaWdodCBsb2NhdGlvbi4KIHBlcmwgdXRpbC9wZXJs cGF0aC5wbCBgZGlybmFtZSAle19fcGVybH1gCiAKQEAgLTIyNSw3ICsxOTYsNyBAQCBzc2xhcmNo PWxpbnV4LWdlbmVyaWMzMgogLi9Db25maWd1cmUgXAogCS0tcHJlZml4PS91c3IgLS1vcGVuc3Ns ZGlyPSV7X3N5c2NvbmZkaXJ9L3BraS90bHMgJHtzc2xmbGFnc30gXAogCXpsaWIgZW5hYmxlLWNh bWVsbGlhIGVuYWJsZS1zZWVkIGVuYWJsZS10bHNleHQgZW5hYmxlLXJmYzM3NzkgXAotCWVuYWJs ZS1jbXMgZW5hYmxlLW1kMiBuby1pZGVhIG5vLW1kYzIgbm8tcmM1IG5vLWVjIG5vLWVjZGggbm8t ZWNkc2EgXAorCWVuYWJsZS1jbXMgZW5hYmxlLW1kMiBuby1tZGMyIG5vLXJjNSBuby1lYyBuby1l YzJtIG5vLWVjZGggbm8tZWNkc2Egbm8tc3JwIFwKIAktLXdpdGgta3JiNS1mbGF2b3I9TUlUIC0t ZW5naW5lc2Rpcj0le19saWJkaXJ9L29wZW5zc2wvZW5naW5lcyBcCiAJLS13aXRoLWtyYjUtZGly PS91c3Igc2hhcmVkICAke3NzbGFyY2h9ICV7PyFub2ZpcHM6Zmlwc30KIApAQCAtMjY2LDkgKzIz Nyw5IEBAIG1ha2UgLUMgdGVzdCBhcHBzIHRlc3RzCiAgICAgJXs/X19kZWJ1Z19wYWNrYWdlOiV7 X19kZWJ1Z19pbnN0YWxsX3Bvc3R9fSBcCiAgICAgJXtfX2FyY2hfaW5zdGFsbF9wb3N0fSBcCiAg ICAgJXtfX29zX2luc3RhbGxfcG9zdH0gXAotICAgIGNyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9u ZV9zaGExICRSUE1fQlVJTERfUk9PVC8le19saWJ9L2xpYmNyeXB0by5zby4le3ZlcnNpb259ID4k UlBNX0JVSUxEX1JPT1QvJXtfbGlifS8ubGliY3J5cHRvLnNvLiV7dmVyc2lvbn0uaG1hYyBcCisg ICAgY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMgJFJQTV9CVUlMRF9ST09ULyV7X2xp Yn0vbGliY3J5cHRvLnNvLiV7dmVyc2lvbn0gPiRSUE1fQlVJTERfUk9PVC8le19saWJ9Ly5saWJj cnlwdG8uc28uJXt2ZXJzaW9ufS5obWFjIFwKICAgICBsbiAtc2YgLmxpYmNyeXB0by5zby4le3Zl cnNpb259LmhtYWMgJFJQTV9CVUlMRF9ST09ULyV7X2xpYn0vLmxpYmNyeXB0by5zby4le3NvdmVy c2lvbn0uaG1hYyBcCi0gICAgY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEgJFJQTV9C VUlMRF9ST09UJXtfbGliZGlyfS9saWJzc2wuc28uJXt2ZXJzaW9ufSA+JFJQTV9CVUlMRF9ST09U JXtfbGliZGlyfS8ubGlic3NsLnNvLiV7dmVyc2lvbn0uaG1hYyBcCisgICAgY3J5cHRvL2ZpcHMv Zmlwc19zdGFuZGFsb25lX2htYWMgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS9saWJzc2wuc28u JXt2ZXJzaW9ufSA+JFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8ubGlic3NsLnNvLiV7dmVyc2lv bn0uaG1hYyBcCiAgICAgbG4gLXNmIC5saWJzc2wuc28uJXt2ZXJzaW9ufS5obWFjICRSUE1fQlVJ TERfUk9PVCV7X2xpYmRpcn0vLmxpYnNzbC5zby4le3NvdmVyc2lvbn0uaG1hYyBcCiAle25pbH0K IApAQCAtNDI5LDYgKzQwMCwxMCBAQCBybSAtcmYgJFJQTV9CVUlMRF9ST09ULyV7X2xpYmRpcn0v Zmlwc2NhbmlzdGVyLioKICVwb3N0dW4gLXAgL3NiaW4vbGRjb25maWcKIAogJWNoYW5nZWxvZwor KiBUdWUgRmViICA3IDIwMTIgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjEtMC4x LmJldGEyCistIG5ldyB1cHN0cmVhbSByZWxlYXNlIGZyb20gdGhlIDEuMC4xIGJyYW5jaCwgQUJJ IGNvbXBhdGlibGUKKy0gYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSAtbm9faWduX2VvZiBvcHRp b24KKwogKiBUaHUgSmFuIDE5IDIwMTIgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4w LjBnLTEKIC0gbmV3IHVwc3RyZWFtIHJlbGVhc2UgZml4aW5nIENWRS0yMDEyLTAwNTAgLSBEb1Mg cmVncmVzc2lvbiBpbgogICBEVExTIHN1cHBvcnQgaW50cm9kdWNlZCBieSB0aGUgcHJldmlvdXMg cmVsZWFzZSAoIzc4Mjc5NSkKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRleCA0 NWUwNDQ5Li4xYjU1NmI3IDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEg KzEgQEAKLTlkNzI4MWJkYzdlYzA4NDVjMjQwZWI2YzBhZGM4ZGMzICBvcGVuc3NsLTEuMC4wZy11 c2EudGFyLnh6CiswOGNmZjVkNDAyNGFiOGZmMWE1MmQyNjFkN2Q0OTYyMyAgb3BlbnNzbC0xLjAu MS1iZXRhMi11c2EudGFyLnh6Cg==