ZGlmZiAtLWdpdCBhL01ha2VmaWxlLlBMIGIvTWFrZWZpbGUuUEwKaW5kZXggOGZhOGZlMC4uNzQ0NWQ1OCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuUEwKKysrIGIvTWFrZWZpbGUuUEwKQEAgLTE0LDkgKzE0LDExIEBACiAgICAgJ1Rlc3Q6Ok1vcmUnID0+IDAsCiAgICAgJ1Rlc3Q6Ok91dHB1dCcgPT4gMCwKICAgICAnRmlsZTo6QmFzZW5hbWUnID0+IDAsCisgICAgJ0ZpbGU6OlRlbXAnID0+IDAsCiAgICAgJ0RhdGE6OkR1bXBlcicgPT4gMCwKICAgICAnRmlsZTo6U3BlYzo6RnVuY3Rpb25zJyA9PiAwLAogICAgICdNb2pvbGljaW91cycgPT4gMCwKKyAgICAnSU86OlVuY29tcHJlc3M6OkJ1bnppcDInID0+IDAsCiAgIH0sCiAgIE1JTl9QRVJMX1ZFUlNJT04gPT4gJzUuMDE2JywKICAgRVhFX0ZJTEVTID0+IFsnc2NyaXB0L2Nvc21hc3ZjMmtvcmFscXVlcnknXSwKZGlmZiAtLWdpdCBhL2xpYi9Lb3JBUC9EZWYucG0gYi9saWIvS29yQVAvRGVmLnBtCmluZGV4IDVhNDU5MWQuLmI3MWRjZTggMTAwNjQ0Ci0tLSBhL2xpYi9Lb3JBUC9EZWYucG0KKysrIGIvbGliL0tvckFQL0RlZi5wbQpAQCAtMSw1ICsxLDcgQEAKIHBhY2thZ2UgS29yQVA6OkRlZjsKIHVzZSBLb3JBUDo6VmlydHVhbENvcnB1czo6R3JvdXA7Cit1c2UgSU86OlVuY29tcHJlc3M6OkJ1bnppcDIgcXcoJEJ1bnppcDJFcnJvcik7Cit1c2UgSU86OkZpbGU7CiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwogCkBAIC0xMiwxNyArMTQsMzcgQEAKICAgaWYgKHJlZiAkZmlsZSAmJiByZWYgJGZpbGUgZXEgJ0dMT0InKSB7CiAgICAgJHNlbGYtPntmaWxlfSA9ICcnOwogICAgICRzZWxmLT57Zmh9ID0gJGZpbGU7CisgICAgcmV0dXJuIGJsZXNzICRzZWxmLCAkY2xhc3M7CiAgIH0KIAotICBlbHNpZiAoJGZpbGUgPX4gL1wuZGVmXC5iejIkLykgeworICBpZiAoIS1mICRmaWxlKSB7CisgICAgaWYgKC1mICRmaWxlIC4gJy5kZWYnKSB7CisgICAgICAkZmlsZSAuPSAnLmRlZic7CisgICAgfQorCisgICAgZWxzaWYgKC1mICRmaWxlIC4gJy50eHQnKSB7CisgICAgICAkZmlsZSAuPSAnLnR4dCc7CisgICAgfQorCisgICAgZWxzaWYgKC1mICRmaWxlIC4gJy5kZWYuYnoyJykgeworICAgICAgJGZpbGUgLj0gJy5kZWYuYnoyJzsKKyAgICB9CisKKyAgICBlbHNlIHsKKyAgICAgIHdhcm4gJ1VuYWJsZSB0byBsb2FkIGRlZiBmaWxlIGZyb20gJyAuICRmaWxlOworICAgICAgcmV0dXJuOworICAgIH07CisgIH07CisKKyAgaWYgKCRmaWxlID1+IC9cLmRlZlwuYnoyJC8pIHsKICAgICAkc2VsZi0+e2ZpbGV9ID0gJGZpbGU7Ci0gICAgIyAkc2VsZi0+e2ZofSA9ICRmaWxlOwotICAgICMgVE9ETworICAgICRzZWxmLT57Zmh9ID0gSU86OlVuY29tcHJlc3M6OkJ1bnppcDItPm5ldygkZmlsZSkKKyAgICAgIG9yIGRpZSAiYnVuemlwMiBmYWlsZWQ6ICRCdW56aXAyRXJyb3JcbiI7OwogICB9CiAKICAgZWxzaWYgKC1mICRmaWxlKSB7CiAgICAgJHNlbGYtPntmaWxlfSA9ICRmaWxlOwotIAorCiAgICAgIyBPcGVuIGRlZiBmaWxlCiAgICAgaWYgKCFvcGVuKCRzZWxmLT57Zmh9LCAnPCcgLiAkZmlsZSkpIHsKICAgICAgIHdhcm4gJEFSR1ZbMF0gLiAiIGNhbid0IGJlIG9wZW5lZCI7CkBAIC01MSw5ICs3MywxMSBAQAogCiAgIG15ICRmcm96ZW4gPSAwOwogCisgIG15ICRmaCA9ICRzZWxmLT57Zmh9OworCiAgICMgSXRlcmF0ZSBvdmVyIHRoZSB3aG9sZSBsaXN0Ci0gIHdoaWxlICghZW9mKCRzZWxmLT57Zmh9KSkgewotICAgIG15ICRsaW5lID0gcmVhZGxpbmUoJHNlbGYtPntmaH0pOworICB3aGlsZSAoIWVvZigkZmgpKSB7CisgICAgbXkgJGxpbmUgPSA8JGZoPjsKICAgICBjaG9tcCAkbGluZTsKIAogICAgICMgU2tpcCBlbXB0eSBsaW5lcwpAQCAtMjg4LDcgKzMxMiw3IEBACiAgIH07CiAgICRzZWxmLT57dmN9ID0gJHZjOwogCi0gIGNsb3NlKCRzZWxmLT57Zmh9KTsKKyAgY2xvc2UoJGZoKTsKIH07CiAKIHN1YiB0b19zdHJpbmcgewpkaWZmIC0tZ2l0IGEvbGliL0tvckFQL0RlZkxpc3QucG0gYi9saWIvS29yQVAvRGVmTGlzdC5wbQppbmRleCAwOWZkMWNiLi4wNzZiOTdkIDEwMDY0NAotLS0gYS9saWIvS29yQVAvRGVmTGlzdC5wbQorKysgYi9saWIvS29yQVAvRGVmTGlzdC5wbQpAQCAtMiwzNCArMiwzMiBAQAogdXNlIEtvckFQOjpEZWY7CiB1c2UgS29yQVA6OlZpcnR1YWxDb3JwdXM6Okdyb3VwOwogdXNlIEtvckFQOjpWaXJ0dWFsQ29ycHVzOjpEb2M7Cit1c2UgRmlsZTo6U3BlYzo6RnVuY3Rpb25zIHF3IWNhdGZpbGUhOwogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIAogIyBDb25zdHJ1Y3Rvcgogc3ViIG5ldyB7CiAgIG15ICRjbGFzcyA9IHNoaWZ0OwotICBteSAkZmlsZSA9IHNoaWZ0OworICBteSAlc2VsZiA9IEBfOwogCi0gIHdhcm4gJ3h4JzsKKyAgJHNlbGZ7b3V0cHV0fSAvLz0gJy4nOworCisgIG15ICRmaWxlID0gJHNlbGZ7ZmlsZX07CiAKICAgaWYgKHJlZiAkZmlsZSAmJiByZWYgJGZpbGUgZXEgJ0dMT0InKSB7Ci0gICAgcmV0dXJuIGJsZXNzIHsKLSAgICAgIGZpbGUgPT4gJycsCi0gICAgICBmaCA9PiAkZmlsZQotICAgIH0sICRjbGFzczsKLSAgfTsKLQotICBteSAkc2VsZiA9IHsKLSAgICBmaWxlID0+ICRmaWxlCisgICAgJHNlbGZ7ZmlsZX0gPSAnJzsKKyAgICAkc2VsZntmaH0gPSAkZmlsZTsKKyAgICByZXR1cm4gYmxlc3MgXCVzZWxmLCAkY2xhc3M7CiAgIH07CiAKICAgIyBPcGVuIGRlZiBmaWxlCi0gIGlmICghb3Blbigkc2VsZi0+e2ZofSwgJzwnIC4gJGZpbGUpKSB7Ci0gICAgd2FybiAkQVJHVlswXSAuICIgY2FuJ3QgYmUgb3BlbmVkIjsKKyAgaWYgKCFvcGVuKCRzZWxme2ZofSwgJzwnIC4gJGZpbGUpKSB7CisgICAgd2FybiAkZmlsZSAuICIgY2FuJ3QgYmUgb3BlbmVkIjsKICAgICBleGl0KDApOwogICB9OwogCi0gIHJldHVybiBibGVzcyAkc2VsZiwgJGNsYXNzOworICByZXR1cm4gYmxlc3MgXCVzZWxmLCAkY2xhc3M7CiB9OwogCiAKQEAgLTY4LDcgKzY2LDI1IEBACiBzdWIgY29weV92YyB7CiAgIG15ICRzZWxmID0gc2hpZnQ7CiAgIG15ICRmaWxlID0gc2hpZnQ7Ci0gIHByaW50ICJDb252ZXJ0ICIsICRmaWxlLCAiIGZyb20gZGVmIGZpbGVcbiI7CisKKyAgcHJpbnQgIkNvbnZlcnQgIiwgJGZpbGUsICIgZnJvbSBkZWYtZmlsZVxuIjsKKworICAjIE9wZW4gZmlsZSBmcm9tIGNvcHkgZGlyZWN0b3J5CisgIG15ICRkZWYgPSBLb3JBUDo6RGVmLT5uZXcoY2F0ZmlsZSgkc2VsZi0+e2NvcHl9LCAkZmlsZSkpOworCisgICMgUGFyc2UKKyAgcmV0dXJuIHVubGVzcyAkZGVmOworICAkZGVmLT5wYXJzZSBvciByZXR1cm47CisKKyAgIyBPdXRwdXQKKyAgbXkgJG91dCA9IGNhdGZpbGUoJHNlbGYtPntvdXRwdXR9LCAkZmlsZSAuICcuanNvbicpOworICBpZiAob3BlbihteSAka29yYWwsICc+JyAuICRvdXQpKSB7CisgICAgcHJpbnQgJGtvcmFsICRkZWYtPnRvX3N0cmluZzsKKyAgICBjbG9zZSgka29yYWwpOworICAgIHJldHVybjsKKyAgfTsKKworICB3YXJuICdVbmFibGUgdG8gd3JpdGUgZmlsZSAnIC4gJG91dDsKIH07CiAKIHN1YiByZWdleF90b192YyB7CkBAIC03Niw3ICs5MiwxOCBAQAogICBteSAoJG5hbWUsICRkZXNjLCAkcmVnZXgpID0gQF87CiAKICAgcHJpbnQgIkNvbnZlcnQgIiwgJG5hbWUsICIgZnJvbSByZWdleFxuIjsKLSAgcmV0dXJuIGZyb21fcmVnZXgoJHJlZ2V4LCAkbmFtZSwgJGRlc2MpOworCisgIG15ICR2YyA9IGZyb21fcmVnZXgoJHJlZ2V4LCAkbmFtZSwgJGRlc2MpOworCisgICMgT3V0cHV0CisgIG15ICRvdXQgPSBjYXRmaWxlKCRzZWxmLT57b3V0cHV0fSwgJG5hbWUgLiAnLmpzb24nKTsKKyAgaWYgKG9wZW4obXkgJGtvcmFsLCAnPicgLiAkb3V0KSkgeworICAgIHByaW50ICRrb3JhbCAkdmMtPnRvX3N0cmluZzsKKyAgICBjbG9zZSgka29yYWwpOworICAgIHJldHVybjsKKyAgfTsKKworICB3YXJuICdVbmFibGUgdG8gd3JpdGUgZmlsZSAnIC4gJG91dDsKIH07CiAKIHN1YiBmcm9tX3JlZ2V4IHsKZGlmZiAtLWdpdCBhL3NjcmlwdC9jb3NtYXN2YzJrb3JhbHF1ZXJ5IGIvc2NyaXB0L2Nvc21hc3ZjMmtvcmFscXVlcnkKaW5kZXggYTk1NjA1Zi4uMmUyMDU2OCAxMDA3NTUKLS0tIGEvc2NyaXB0L2Nvc21hc3ZjMmtvcmFscXVlcnkKKysrIGIvc2NyaXB0L2Nvc21hc3ZjMmtvcmFscXVlcnkKQEAgLTE5LDEwICsxOSwxMiBAQAogbXkgJGNtZCA9IHNoaWZ0IEBBUkdWOwogCiAKLW15ICRpbnB1dDsKK215ICgkaW5wdXQsICRvdXRwdXQsICRjb3B5c3JjKTsKIAogR2V0T3B0aW9ucyAoCi0gICJpbnB1dHxpPXMiID0+IFwkaW5wdXQKKyAgImlucHV0fGk9cyIgPT4gXCRpbnB1dCwKKyAgIm91dHB1dHxvPXMiID0+IFwkb3V0cHV0LAorICAiY29weS1zcmN8Yz1zIiA9PiBcJGNvcHlzcmMsCiApCiBvciBkaWUoIkVycm9yIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiIpOwogCkBAIC0zNCw3ICszNiwxOCBAQAogICAkIHBlcmwgY29zbWFzdmMya29yYWxxdWVyeSBkZWYgbXlfdmMudHh0IHwgZ3ppcCAtdmMgPiBteV92Yy5qc29ubGQuZ3oKICAgJCBjYXQgbXlfdmMudHh0IHwgcGVybCBjb3NtYXN2YzJrb3JhbHF1ZXJ5IGRlZiAtIHwgZ3ppcCAtdmMgPiBteV92Yy5qc29ubGQuZ3oKIAotQ29tbWFuZHM6IGRlZiwgbGlzdAorQ29tbWFuZDogZGVmCisKKyAgQ29udmVydCBhIGRlZiBmaWxlIG9yIGEgbGlzdCBvZiBzaWdsZXMgdG8gYSBLb3JhbFF1ZXJ5IFZDLgorCisgIFRha2VzIHRoZSBsaXN0IG9yIGRlZiBmcm9tIFNURElOIGFuZCBleHBvcnRzIHRvIFNURE9VVC4KKworQ29tbWFuZDogbGlzdAorCisgIENvbnZlcnQgYSBsaXN0IHdpdGggY29weSBvciByZWdleCBpbnN0cnVjdGlvbnMgdG8gS29yYWxRdWVyeSBWQ3MuCisKKyAgLS1vdXRwdXQ6IFRoZSBvdXRwdXQgZGlyZWN0b3J5CisgIC0tY29weS1zcmM6IFRoZSBkaXJlY3RvcnkgZm9yIGRlZiBmaWxlcyB0byBjb3B5CiAKIEhFTFAKIGV4aXQgMTsKQEAgLTQzLDcgKzU2LDExIEBACiAKICMgUHJvY2VzcyBhIGxpc3QKIGlmICgkY21kIGVxICdsaXN0JykgewotICBLb3JBUDo6RGVmTGlzdC0+bmV3KCRpbnB1dCB8fCAkQVJHVlswXSktPnBhcnNlOworICBLb3JBUDo6RGVmTGlzdC0+bmV3KAorICAgIGZpbGUgPT4gKCRpbnB1dCB8fCAkQVJHVlswXSksCisgICAgY29weSA9PiAoJGNvcHlzcmMgfHwgJy4nKSwKKyAgICBvdXRwdXQgPT4gKCRvdXRwdXQgfHwgJy4nKQorICApLT5wYXJzZTsKICAgZXhpdCgwKTsKIH07CiAKZGlmZiAtLWdpdCBhL3QvZGF0YS9saXN0LWV4YW1wbGUubHMgYi90L2RhdGEvbGlzdC1leGFtcGxlLmxzCmluZGV4IDY4NzhlZWYuLjQ0MjYwNDYgMTAwNjQ0Ci0tLSBhL3QvZGF0YS9saXN0LWV4YW1wbGUubHMKKysrIGIvdC9kYXRhL2xpc3QtZXhhbXBsZS5scwpAQCAtMTQsNyArMTQsNyBAQAogdGhtLWxpdAlCZWxsZXRyaXN0aWsvVHJpdmlhbGxpdGVyYXR1cjogVGhvbWFzLU1hbm4tS29ycHVzCVRITS8oQU1CfEFNRHxBTUV8QU1GfEFNSHxBTUp8QU1LfEFNTHxBTU58QU1aKQogd3h4MTEJV2lraXBlZGlhIEFydGlrZWwgdW5kIERpc2t1c3Npb25lbglXW1BEXUQxMS8KIHpjYQlaZWl0IENhbXB1cyAoRmViLi1BcHIuO0p1bi47QXVnLjtPa3QuLURlei47IERlei4gMjAxMyBuLnYuKQlaQ0FbMC05XVswLTldLwotY29ycC13LWdlc2FtdC4yMDIzLWkuMTYuMDMuMjMJQENPUFlACi1jb3JwLWEJQENPUFlACitsaXN0MglAQ09QWUAKK2xpc3Q1CUBDT1BZQAogbWlzYy1saXQJQmVsbGV0cmlzdGlrL1RyaXZpYWxsaXRlcmF0dXIgKPZmZmVudGxpY2gpCShHT0UvKEFHRHxBR018QUdOfEFHVnxBR1cpKXwoTUsxLyhMQkN8TEJUfExGSHxMR0J8TEpBfExNQnxMU098TUhFfFRKTXxUUE0pKXwoTUsyL1RSSSkKIApkaWZmIC0tZ2l0IGEvdC9kYXRhL2xpc3Q1LmRlZi5iejIgYi90L2RhdGEvbGlzdDUuZGVmLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIxNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9kYXRhL2xpc3Q1LmRlZi5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC9saXN0MnZjLWRlZmxpc3QudCBiL3QvbGlzdDJ2Yy1kZWZsaXN0LnQKaW5kZXggNDFjMjE3Ni4uODk1NzdmYiAxMDA2NDQKLS0tIGEvdC9saXN0MnZjLWRlZmxpc3QudAorKysgYi90L2xpc3QydmMtZGVmbGlzdC50CkBAIC01LDI0ICs1LDYwIEBACiB1c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmlsZTo6U3BlYzo6RnVuY3Rpb25zOwogdXNlIERhdGE6OkR1bXBlcjsKK3VzZSBGaWxlOjpUZW1wIHF3L3RlbXBkaXIvOwogCiB1c2UgVGVzdDo6T3V0cHV0OwogdXNlIE1vam86OkpTT04gJ2RlY29kZV9qc29uJzsKIAogbXkgJHNjcmlwdCA9IGNhdGZpbGUoZGlybmFtZShfX0ZJTEVfXyksICcuLicsICdzY3JpcHQnLCAnY29zbWFzdmMya29yYWxxdWVyeScpOworbXkgJGNvcHlzcmMgPSBjYXRkaXIoZGlybmFtZShfX0ZJTEVfXyksICdkYXRhJyk7CiBteSAkbGlzdDEgPSBjYXRmaWxlKGRpcm5hbWUoX19GSUxFX18pLCAnZGF0YScsICdsaXN0LWV4YW1wbGUubHMnKTsKK215ICRvdXRwdXQgPSB0ZW1wZGlyKCBDTEVBTlVQID0+IDEgKTsKKworbXkgQGNhbGwgPSAoJHNjcmlwdCwgJ2xpc3QnLCAkbGlzdDEsICctLWNvcHktc3JjJywgJGNvcHlzcmMsICctLW91dHB1dCcsICRvdXRwdXQpOwogCiAjIENoZWNrIFNURE9VVAotc3Rkb3V0X2xpa2UoCitzdGRlcnJfbGlrZSgKICAgc3ViIHsKLSAgICBzeXN0ZW0oJHNjcmlwdCwgJ2xpc3QnLCAkbGlzdDEpOworICAgIHN5c3RlbShAY2FsbCk7CiAgIH0sCi0gIHFyIUNvbnZlcnQhLAorICBxciFyZWRhYnMgaXMgbm90IHlldCBzdXBwb3J0ZWQhLAogICAiY2hlY2sgc3Rkb3V0IgogKTsKIAogIyBDaGVjayBKU09OCi0jIG15ICRwcm90b2NvbCA9IGpvaW4oJycsIGAkc2NyaXB0IGxpc3QgJGxpc3QxYCk7CitteSAkcHJvdG9jb2wgPSBqb2luKCcnLCBgQGNhbGxgKTsKKworbGlrZSgkcHJvdG9jb2wsIHFyIWJpaCBmcm9tIHJlZ2V4ISk7CitvaygtZiBjYXRmaWxlKCRvdXRwdXQsICdiaWguanNvbicpKTsKK2xpa2UoJHByb3RvY29sLCBxciFiaW8gZnJvbSByZWdleCEpOworb2soLWYgY2F0ZmlsZSgkb3V0cHV0LCAnYmlvLmpzb24nKSk7CitsaWtlKCRwcm90b2NvbCwgcXIhYmlvLXB1YiBmcm9tIHJlZ2V4ISk7CitvaygtZiBjYXRmaWxlKCRvdXRwdXQsICdiaW8tcHViLmpzb24nKSk7CitsaWtlKCRwcm90b2NvbCwgcXIhbCBmcm9tIHJlZ2V4ISk7CitvaygtZiBjYXRmaWxlKCRvdXRwdXQsICdsLmpzb24nKSk7CitsaWtlKCRwcm90b2NvbCwgcXIhZHBhIGZyb20gcmVnZXghKTsKK29rKC1mIGNhdGZpbGUoJG91dHB1dCwgJ2RwYS5qc29uJykpOworbGlrZSgkcHJvdG9jb2wsIHFyIWZzcCBmcm9tIHJlZ2V4ISk7CitvaygtZiBjYXRmaWxlKCRvdXRwdXQsICdmc3AuanNvbicpKTsKK2xpa2UoJHByb3RvY29sLCBxciFmc3AtcHViIGZyb20gcmVnZXghKTsKK29rKC1mIGNhdGZpbGUoJG91dHB1dCwgJ2ZzcC1wdWIuanNvbicpKTsKK2xpa2UoJHByb3RvY29sLCBxciFramwgZnJvbSByZWdleCEpOworb2soLWYgY2F0ZmlsZSgkb3V0cHV0LCAna2psLmpzb24nKSk7CitsaWtlKCRwcm90b2NvbCwgcXIhdGhtLWxpdCBmcm9tIHJlZ2V4ISk7CitvaygtZiBjYXRmaWxlKCRvdXRwdXQsICd0aG0tbGl0Lmpzb24nKSk7CitsaWtlKCRwcm90b2NvbCwgcXIhd3h4MTEgZnJvbSByZWdleCEpOworb2soLWYgY2F0ZmlsZSgkb3V0cHV0LCAnd3h4MTEuanNvbicpKTsKK2xpa2UoJHByb3RvY29sLCBxciF6Y2EgZnJvbSByZWdleCEpOworb2soLWYgY2F0ZmlsZSgkb3V0cHV0LCAnemNhLmpzb24nKSk7CitsaWtlKCRwcm90b2NvbCwgcXIhbGlzdDIgZnJvbSBkZWYtZmlsZSEpOworb2soLWYgY2F0ZmlsZSgkb3V0cHV0LCAnbGlzdDIuanNvbicpKTsKK2xpa2UoJHByb3RvY29sLCBxciFsaXN0NSBmcm9tIGRlZi1maWxlISk7CitvaygtZiBjYXRmaWxlKCRvdXRwdXQsICdsaXN0NS5qc29uJykpOworbGlrZSgkcHJvdG9jb2wsIHFyIW1pc2MtbGl0IGZyb20gcmVnZXghKTsKK29rKC1mIGNhdGZpbGUoJG91dHB1dCwgJ21pc2MtbGl0Lmpzb24nKSk7CiAKIGRvbmVfdGVzdGluZzsKIF9fRU5EX18KKworCg==